mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
[CDROM][CLASS2][DISK] Remove the old class drivers stack
These drivers are based on NT4 DDK sample code, were originally
started by Alexey Bragin and then constantly patched by Pierre
Schweitzer to fix compatibility with NT5+ storage stack.
Replaced with Microsoft drivers published on GitHub by an open
license.
These drivers were originally added as part of 4e7b22b216
This commit is contained in:
parent
0af58654a3
commit
49444127fd
26 changed files with 0 additions and 20502 deletions
|
@ -1,15 +0,0 @@
|
||||||
|
|
||||||
include_directories(${REACTOS_SOURCE_DIR}/drivers/storage/class)
|
|
||||||
|
|
||||||
list(APPEND SOURCE
|
|
||||||
cdrom.c
|
|
||||||
findscsi.c
|
|
||||||
precomp.h)
|
|
||||||
|
|
||||||
add_library(cdrom MODULE ${SOURCE} cdrom.rc)
|
|
||||||
set_module_type(cdrom kernelmodedriver)
|
|
||||||
add_importlibs(cdrom class2 scsiport ntoskrnl hal)
|
|
||||||
add_pch(cdrom precomp.h SOURCE)
|
|
||||||
add_cd_file(TARGET cdrom DESTINATION reactos/system32/drivers NO_CAB FOR all)
|
|
||||||
add_registry_inf(cdrom_reg.inf)
|
|
||||||
add_driver_inf(cdrom cdrom.inf)
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,122 +0,0 @@
|
||||||
; CDROM.INF
|
|
||||||
|
|
||||||
; Installation of CDROMs
|
|
||||||
|
|
||||||
[Version]
|
|
||||||
Signature = "$Windows NT$"
|
|
||||||
;Signature = "$ReactOS$"
|
|
||||||
LayoutFile = layout.inf
|
|
||||||
Class = CDROM
|
|
||||||
ClassGUID = {4D36E965-E325-11CE-BFC1-08002BE10318}
|
|
||||||
Provider = %ReactOS%
|
|
||||||
DriverVer = 10/19/1999,5.00.2157.1
|
|
||||||
|
|
||||||
[DestinationDirs]
|
|
||||||
DefaultDestDir = 12
|
|
||||||
|
|
||||||
[ClassInstall32.NT]
|
|
||||||
AddReg = CDROMClass.NT.AddReg
|
|
||||||
|
|
||||||
[CDROMClass.NT.AddReg]
|
|
||||||
HKR, , , 0, %CDROMClassName%
|
|
||||||
HKR, , EnumPropPages32,0, "MmSys.Cpl,MediaPropPageProvider"
|
|
||||||
HKR, , Icon, 0, "-51"
|
|
||||||
HKR, , NoInstallClass, 0, 1
|
|
||||||
|
|
||||||
[Manufacturer]
|
|
||||||
%GenericMfg% = GenericMfg
|
|
||||||
|
|
||||||
[GenericMfg]
|
|
||||||
%GenCdRom.DeviceDesc% = CdRom_Install,GenCdRom
|
|
||||||
|
|
||||||
[CdRom_Install]
|
|
||||||
CopyFiles=CdRom_CopyFiles
|
|
||||||
|
|
||||||
[CdRom_Install.Services]
|
|
||||||
AddService=cdrom,0x00000002,CdRom_Service_Inst
|
|
||||||
|
|
||||||
[CdRom_Service_Inst]
|
|
||||||
ServiceType = 1
|
|
||||||
StartType = 1
|
|
||||||
ErrorControl = 1
|
|
||||||
ServiceBinary = %12%\cdrom.sys
|
|
||||||
LoadOrderGroup = SCSI CDROM Class
|
|
||||||
AddReg = Autorun_AddReg
|
|
||||||
|
|
||||||
[CdRom_CopyFiles]
|
|
||||||
cdrom.sys
|
|
||||||
|
|
||||||
[Autorun_AddReg]
|
|
||||||
HKLM,"System\CurrentControlSet\Services\cdrom","AutoRun",0x00010003,1
|
|
||||||
|
|
||||||
;-------------------------------- STRINGS -------------------------------
|
|
||||||
|
|
||||||
[Strings]
|
|
||||||
ReactOS = "ReactOS Team"
|
|
||||||
CDROMClassName = "DVD/CD-ROM drives"
|
|
||||||
GenCdRom.DeviceDesc = "CD-ROM Drive"
|
|
||||||
GenericMfg = "(Generic DVD/CD-ROM Drives)"
|
|
||||||
|
|
||||||
[Strings.0405]
|
|
||||||
CDROMClassName = "Jednotky DVD/CD-ROM"
|
|
||||||
GenCdRom.DeviceDesc = "Jednotka CD-ROM"
|
|
||||||
GenericMfg = "(Obecné jednotky DVD/CD-ROM)"
|
|
||||||
|
|
||||||
[Strings.0407]
|
|
||||||
CDROMClassName = "DVD/CD-ROM Laufwerke"
|
|
||||||
|
|
||||||
[Strings.0408]
|
|
||||||
CDROMClassName = "Οδηγοί DVD/CD-ROM"
|
|
||||||
|
|
||||||
[Strings.0a]
|
|
||||||
ReactOS = "Equipo de ReactOS"
|
|
||||||
CDROMClassName = "Unidades de DVD/CD-ROM"
|
|
||||||
GenCdRom.DeviceDesc = "Unidad CD-ROM"
|
|
||||||
GenericMfg = "(Unidades de DVD/CD-ROM genéricas)"
|
|
||||||
|
|
||||||
[Strings.040C]
|
|
||||||
ReactOS = "Equipe ReactOS"
|
|
||||||
CDROMClassName = "Lecteurs DVD/CD-ROM"
|
|
||||||
GenCdRom.DeviceDesc = "Lecteur CD-ROM"
|
|
||||||
GenericMfg = "(Lecteurs DVD/CD-ROM génériques)"
|
|
||||||
|
|
||||||
[Strings.041B]
|
|
||||||
CDROMClassName = "DVD/CD-ROM mechaniky"
|
|
||||||
|
|
||||||
[Strings.0415]
|
|
||||||
ReactOS = "Zespół ReactOS"
|
|
||||||
CDROMClassName = "Stacje dysków DVD/CD-ROM"
|
|
||||||
|
|
||||||
[Strings.0416]
|
|
||||||
CDROMClassName = "Unidades de DVD/CD-ROM"
|
|
||||||
|
|
||||||
[Strings.0418]
|
|
||||||
ReactOS = "Echipa ReactOS"
|
|
||||||
CDROMClassName = "Dispozitive DVD/CD-ROM"
|
|
||||||
GenCdRom.DeviceDesc = "Dispozitiv CD-ROM"
|
|
||||||
GenericMfg = "(dispozitive DVD/CD-ROM generice)"
|
|
||||||
|
|
||||||
[Strings.0419]
|
|
||||||
ReactOS = "Команда ReactOS"
|
|
||||||
CDROMClassName = "DVD/CD-ROM приводы"
|
|
||||||
GenCdRom.DeviceDesc = "CD-ROM привод"
|
|
||||||
GenericMfg = "(Стандартные DVD/CD-ROM приводы)"
|
|
||||||
|
|
||||||
[Strings.041f]
|
|
||||||
ReactOS = "ReactOS Takımı"
|
|
||||||
CDROMClassName = "DVD/CD-ROM Aygıtları"
|
|
||||||
GenCdRom.DeviceDesc = "CD-ROM Aygıtı"
|
|
||||||
GenericMfg = "(Umûmî DVD/CD-ROM Aygıtları)"
|
|
||||||
|
|
||||||
[Strings.0422]
|
|
||||||
ReactOS = "Команда ReactOS"
|
|
||||||
CDROMClassName = "Приводи DVD/CD-ROM"
|
|
||||||
GenCdRom.DeviceDesc = "Привід CD-ROM"
|
|
||||||
GenericMfg = "(Стандартні приводи DVD/CD-ROM)"
|
|
||||||
|
|
||||||
[Strings.0427]
|
|
||||||
CDROMClassName = "DVD/CD-ROM įrenginiai"
|
|
||||||
|
|
||||||
[Strings.0804]
|
|
||||||
GenCdRom.DeviceDesc = "CD-ROM 驱动器"
|
|
||||||
GenericMfg = "(通用 DVD/CD-ROM 驱动器)"
|
|
|
@ -1,5 +0,0 @@
|
||||||
#define REACTOS_VERSION_DLL
|
|
||||||
#define REACTOS_STR_FILE_DESCRIPTION "CD-ROM Class Driver"
|
|
||||||
#define REACTOS_STR_INTERNAL_NAME "cdrom"
|
|
||||||
#define REACTOS_STR_ORIGINAL_FILENAME "cdrom.sys"
|
|
||||||
#include <reactos/version.rc>
|
|
|
@ -1,7 +0,0 @@
|
||||||
; Cdrom class driver
|
|
||||||
[AddReg]
|
|
||||||
HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","ErrorControl",0x00010001,0x00000000
|
|
||||||
HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","Group",0x00000000,"SCSI Class"
|
|
||||||
HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","ImagePath",0x00020000,"system32\drivers\cdrom.sys"
|
|
||||||
HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","Start",0x00010001,0x00000001
|
|
||||||
HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","Type",0x00010001,0x00000001
|
|
|
@ -1,308 +0,0 @@
|
||||||
/*
|
|
||||||
* PROJECT: ReactOS Storage Stack
|
|
||||||
* LICENSE: DDK - see license.txt in the root dir
|
|
||||||
* FILE: drivers/storage/cdrom/cdrom.c
|
|
||||||
* PURPOSE: CDROM driver
|
|
||||||
* PROGRAMMERS: Based on a source code sample from Microsoft NT4 DDK
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "precomp.h"
|
|
||||||
|
|
||||||
//#define NDEBUG
|
|
||||||
#include <debug.h>
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
FindScsiAdapter (
|
|
||||||
IN HANDLE KeyHandle,
|
|
||||||
IN UNICODE_STRING ScsiUnicodeString[],
|
|
||||||
OUT PUCHAR IntermediateController
|
|
||||||
);
|
|
||||||
|
|
||||||
#define INIT_OPEN_KEY(name, rootHandle, pNewHandle) \
|
|
||||||
InitializeObjectAttributes( \
|
|
||||||
&objectAttributes, \
|
|
||||||
(name), \
|
|
||||||
OBJ_CASE_INSENSITIVE, \
|
|
||||||
(rootHandle), \
|
|
||||||
NULL \
|
|
||||||
); \
|
|
||||||
\
|
|
||||||
status = ZwOpenKey( \
|
|
||||||
(pNewHandle), \
|
|
||||||
KEY_READ | KEY_ENUMERATE_SUB_KEYS, \
|
|
||||||
&objectAttributes \
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
FindScsiAdapter (
|
|
||||||
IN HANDLE KeyHandle,
|
|
||||||
IN UNICODE_STRING ScsiUnicodeString[],
|
|
||||||
OUT UCHAR *IntermediateController
|
|
||||||
)
|
|
||||||
|
|
||||||
/*++
|
|
||||||
|
|
||||||
Routine Description:
|
|
||||||
|
|
||||||
Recursive routine to walk registry tree under KeyHandle looking for
|
|
||||||
location of ScsiAdapter and other valid controllers that the ScsiAdapter
|
|
||||||
might hang off of. When ScsiAdapter is found, FindScsiAdapter
|
|
||||||
returns an ARC name for the intervening controller(s) between the
|
|
||||||
original key and ScsiAdapter.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
KeyHandle -- Handle of open registry key (somewhere under
|
|
||||||
\Registry\Machine\Hardware\Description\System)
|
|
||||||
|
|
||||||
ScsiUnicodeString -- NT name of SCSI device being sought in the registry
|
|
||||||
|
|
||||||
IntermediateController -- Null terminated buffer which this routine fills with
|
|
||||||
ARC name for intervening controller(s). Null is returned
|
|
||||||
if ScsiAdapter sits at the root or if it is not found.
|
|
||||||
|
|
||||||
Return Value:
|
|
||||||
|
|
||||||
STATUS_SUCCESS -- IntermediateController set to something like multi(1)
|
|
||||||
|
|
||||||
STATUS_OBJECT_PATH_NOT_FOUND -- all ok, but no ScsiAdapter
|
|
||||||
(with correct scsi id & lun info) found; In this case
|
|
||||||
IntermediateController is explicitly set to null.
|
|
||||||
|
|
||||||
Other status codes as returned by open\enumerate registry routines
|
|
||||||
may also be returned.
|
|
||||||
|
|
||||||
--*/
|
|
||||||
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
NTSTATUS status;
|
|
||||||
ULONG index;
|
|
||||||
ULONG resultLength;
|
|
||||||
UCHAR lowerController[64];
|
|
||||||
BOOLEAN validControllerNumber;
|
|
||||||
UNICODE_STRING unicodeString[64];
|
|
||||||
OBJECT_ATTRIBUTES objectAttributes;
|
|
||||||
|
|
||||||
HANDLE controllerHandle;
|
|
||||||
HANDLE controllerNumberHandle;
|
|
||||||
ULONG controllerIndex;
|
|
||||||
ULONG controllerNumberIndex;
|
|
||||||
UCHAR keyBuffer[256]; // Allow for variable length name at end
|
|
||||||
UCHAR numberKeyBuffer[64];
|
|
||||||
PKEY_BASIC_INFORMATION pControllerKeyInformation;
|
|
||||||
PKEY_BASIC_INFORMATION pControllerNumberKeyInformation;
|
|
||||||
|
|
||||||
// TODO: Any PAGED_CODE stuff...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Walk enumerated subkeys, looking for valid controllers
|
|
||||||
//
|
|
||||||
|
|
||||||
for (controllerIndex = 0; TRUE; controllerIndex++) {
|
|
||||||
|
|
||||||
//
|
|
||||||
// Ensure pControllerKeyInformation->Name is null terminated
|
|
||||||
//
|
|
||||||
|
|
||||||
RtlZeroMemory(keyBuffer, sizeof(keyBuffer));
|
|
||||||
|
|
||||||
pControllerKeyInformation = (PKEY_BASIC_INFORMATION) keyBuffer;
|
|
||||||
|
|
||||||
status = ZwEnumerateKey(
|
|
||||||
KeyHandle,
|
|
||||||
controllerIndex,
|
|
||||||
KeyBasicInformation,
|
|
||||||
pControllerKeyInformation,
|
|
||||||
sizeof(keyBuffer),
|
|
||||||
&resultLength
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!NT_SUCCESS(status)) {
|
|
||||||
|
|
||||||
if (status != STATUS_NO_MORE_ENTRIES) {
|
|
||||||
DebugPrint ((2, "FindScsiAdapter: Error 0x%x enumerating key\n", status));
|
|
||||||
return(status);
|
|
||||||
}
|
|
||||||
|
|
||||||
break; // return NOT_FOUND
|
|
||||||
}
|
|
||||||
|
|
||||||
DebugPrint ((3, "FindScsiAdapter: Found Adapter=%S\n", pControllerKeyInformation->Name));
|
|
||||||
|
|
||||||
if (!_wcsicmp(pControllerKeyInformation->Name, L"ScsiAdapter")) {
|
|
||||||
|
|
||||||
//
|
|
||||||
// Found scsi, now verify that it's the same one we're trying to initialize.
|
|
||||||
//
|
|
||||||
|
|
||||||
INIT_OPEN_KEY (ScsiUnicodeString, KeyHandle, &controllerHandle);
|
|
||||||
|
|
||||||
ZwClose(controllerHandle);
|
|
||||||
|
|
||||||
if (NT_SUCCESS(status)) {
|
|
||||||
|
|
||||||
//
|
|
||||||
// Found correct scsi, now build ARC name of IntermediateController
|
|
||||||
// (i.e. the intervening controllers, or everything above ScsiAdapter)
|
|
||||||
// start with null, and build string one controller at a time as we
|
|
||||||
// return up the recursively called routine.
|
|
||||||
//
|
|
||||||
|
|
||||||
IntermediateController = "\0";
|
|
||||||
|
|
||||||
return (STATUS_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Found ScsiAdapter, but wrong scsi id or Lun info doesn't match,
|
|
||||||
// (ignore other ZwOpenKey errors &) keep looking...
|
|
||||||
//
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (!_wcsicmp(pControllerKeyInformation->Name, L"MultifunctionAdapter") ||
|
|
||||||
!_wcsicmp(pControllerKeyInformation->Name, L"EisaAdapter")) {
|
|
||||||
|
|
||||||
//
|
|
||||||
// This is a valid controller that may have ScsiAdapter beneath it.
|
|
||||||
// Open controller & walk controller's subkeys: 0, 1, 2, etc....
|
|
||||||
//
|
|
||||||
|
|
||||||
RtlInitUnicodeString (unicodeString, pControllerKeyInformation->Name);
|
|
||||||
|
|
||||||
INIT_OPEN_KEY (unicodeString, KeyHandle, &controllerHandle);
|
|
||||||
|
|
||||||
if (!NT_SUCCESS(status)) {
|
|
||||||
DebugPrint ((2, "FindScsiAdapter: ZwOpenKey got status = %x \n", status));
|
|
||||||
ZwClose (controllerHandle);
|
|
||||||
return (status);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (controllerNumberIndex = 0; TRUE; controllerNumberIndex++) {
|
|
||||||
|
|
||||||
RtlZeroMemory(numberKeyBuffer, sizeof(numberKeyBuffer));
|
|
||||||
|
|
||||||
pControllerNumberKeyInformation = (PKEY_BASIC_INFORMATION) numberKeyBuffer;
|
|
||||||
|
|
||||||
status = ZwEnumerateKey(
|
|
||||||
controllerHandle,
|
|
||||||
controllerNumberIndex,
|
|
||||||
KeyBasicInformation,
|
|
||||||
pControllerNumberKeyInformation,
|
|
||||||
sizeof(numberKeyBuffer),
|
|
||||||
&resultLength
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!NT_SUCCESS(status)) {
|
|
||||||
|
|
||||||
if (status != STATUS_NO_MORE_ENTRIES) {
|
|
||||||
DebugPrint ((2, "FindScsiAdapter: Status %x enumerating key\n", status));
|
|
||||||
ZwClose(controllerHandle);
|
|
||||||
return (status);
|
|
||||||
}
|
|
||||||
|
|
||||||
ZwClose(controllerHandle);
|
|
||||||
|
|
||||||
break; // next controller
|
|
||||||
}
|
|
||||||
|
|
||||||
DebugPrint ((3, "FindScsiAdapter: Found Adapter #=%S\n", pControllerNumberKeyInformation->Name));
|
|
||||||
|
|
||||||
validControllerNumber = TRUE;
|
|
||||||
|
|
||||||
for (index = 0; index < pControllerNumberKeyInformation->NameLength / 2; index++) {
|
|
||||||
|
|
||||||
if (!isxdigit(pControllerNumberKeyInformation->Name[index])) {
|
|
||||||
validControllerNumber = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (validControllerNumber) {
|
|
||||||
|
|
||||||
//
|
|
||||||
// Found valid controller and controller number: check children for scsi.
|
|
||||||
//
|
|
||||||
|
|
||||||
RtlInitUnicodeString (unicodeString, pControllerNumberKeyInformation->Name);
|
|
||||||
|
|
||||||
INIT_OPEN_KEY (unicodeString, controllerHandle, &controllerNumberHandle);
|
|
||||||
|
|
||||||
if (!NT_SUCCESS(status)) {
|
|
||||||
DebugPrint ((2, "FindScsiAdapter: Status %x opening controller number key\n", status));
|
|
||||||
ZwClose(controllerNumberHandle);
|
|
||||||
ZwClose(controllerHandle);
|
|
||||||
return (status);
|
|
||||||
}
|
|
||||||
|
|
||||||
RtlZeroMemory(lowerController, sizeof(lowerController));
|
|
||||||
|
|
||||||
status = FindScsiAdapter(
|
|
||||||
controllerNumberHandle,
|
|
||||||
ScsiUnicodeString,
|
|
||||||
&lowerController[0]
|
|
||||||
);
|
|
||||||
|
|
||||||
ZwClose(controllerNumberHandle);
|
|
||||||
|
|
||||||
if (NT_SUCCESS(status)) {
|
|
||||||
|
|
||||||
//
|
|
||||||
// SUCCESS!
|
|
||||||
//
|
|
||||||
// Scsi adapter DOES exist under this node,
|
|
||||||
// prepend Arc Name for the current adapter to whatever was returned
|
|
||||||
// by other calls to this routine.
|
|
||||||
//
|
|
||||||
|
|
||||||
if (!_wcsicmp(pControllerKeyInformation->Name, L"MultifunctionAdapter")) {
|
|
||||||
sprintf(IntermediateController, "multi(0)%s", lowerController);
|
|
||||||
} else {
|
|
||||||
sprintf(IntermediateController, "eisa(0)%s", lowerController);
|
|
||||||
}
|
|
||||||
|
|
||||||
ZwClose(controllerHandle);
|
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (status != STATUS_OBJECT_PATH_NOT_FOUND) {
|
|
||||||
ZwClose(controllerHandle);
|
|
||||||
return(status);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Scsi not found under this controller number, check next one
|
|
||||||
//
|
|
||||||
|
|
||||||
} // if validControllerNumber
|
|
||||||
|
|
||||||
} // for controllerNumberIndex
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// ScsiAdapter not found under this controller
|
|
||||||
//
|
|
||||||
|
|
||||||
ZwClose(controllerHandle);
|
|
||||||
|
|
||||||
} // else if valid subkey (i.e., scsi, multi, eisa)
|
|
||||||
|
|
||||||
} // for controllerIndex
|
|
||||||
|
|
||||||
//
|
|
||||||
// ScsiAdapter not found under key we were called with
|
|
||||||
//
|
|
||||||
|
|
||||||
IntermediateController = "\0";
|
|
||||||
#endif
|
|
||||||
return (STATUS_OBJECT_PATH_NOT_FOUND);
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
Window NT Device Driver Kit
|
|
||||||
END-USER LICENSE AGREEMENT FOR MICROSOFT SOFTWARE
|
|
||||||
|
|
||||||
IMPORTANT-READ CAREFULLY: This Microsoft End-User License Agreement ("EULA") is a legal agreement between you (either an individual or a single entity) and Microsoft Corporation for the Microsoft software product identified above, which includes computer software and associated media and printed materials, and may include "online" or electronic documentation ("SOFTWARE PRODUCT" or "SOFTWARE"). By installing, copying, or otherwise using the SOFTWARE PRODUCT, you agree to be bound by the terms of this EULA. If you do not agree to the terms of this EULA, promptly return the unused SOFTWARE PRODUCT to the place from which you obtained it for a full refund, or if you received the SOFTWARE PRODUCT as part of a subscription or other service from Microsoft, you may cancel the subscription and receive a refund of a prorata portion of the subscription price.
|
|
||||||
|
|
||||||
SOFTWARE PRODUCT LICENSE
|
|
||||||
The SOFTWARE PRODUCT is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE PRODUCT is licensed, not sold. To develop Windows NT(tm) device drivers, you will need to utilize two computers, one for development and one for debugging.
|
|
||||||
|
|
||||||
1. GRANT OF LICENSE. This EULA grants you the following limited, non-exclusive rights:
|
|
||||||
* SOFTWARE PRODUCT. (a) You may make two (2) copies of the SOFTWARE PRODUCT for installation and use on two (2) computers, one for use in development and one for use in debugging to design, develop, and test your software product(s), including but not limited to device driver(s) and other software products, for use with Microsoft(r) Windows(r) or Windows NT ("Software Product"). You may make an additional copy of the Windows NT Workstation operating system (licensed and provided separately) for use on a single computer used for debugging purposes.
|
|
||||||
* Microsoft Developer Network Subscriber. If you acquired the SOFTWARE PRODUCT through a subscription to the Microsoft Developer Network, and you are either an individual developer or an individual designated within a single entity, you are granted the following additional rights with respect to the SOFTWARE PRODUCT: (a) you may make and use copies of the SOFTWARE PRODUCT on up to ten (10) separate computers, provided that you are the only individual using the SOFTWARE PRODUCT on each such computer, and (b) if you are a single entity, you may designate one individual within your organization to have the right to use the SOFTWARE PRODUCT in the manner described herein.
|
|
||||||
* SAMPLE CODE. You may modify the sample source code ("Sample Code") to design, develop and test your Software Product, and reproduce and distribute the Sample Code with such modifications in source and object code forms, provided that you comply with the Distribution Requirements described below.
|
|
||||||
* DISTRIBUTION REQUIREMENTS. You may copy and redistribute the Sample Code as described above, provided that (a) you distribute the Sample Code only in conjunction with and as a part of your Software Product; (b) you do not make any statements to the effect or which imply that your Software Product is "certified" by Microsoft or that its performance is guaranteed by Microsoft; (c) you do not use Microsoft's name, logo, or trademarks to market your Software Product; (d) you include a valid copyright notice on your Software Product; and (e) you indemnify, hold harmless, and defend Microsoft from and against any claims or lawsuits, including attorneys' fees, that arise or result from the use or distribution of your Software Product. Contact Microsoft for the applicable royalties due and other licensing terms for all other uses and/or distribution of the Sample Code
|
|
||||||
* Microsoft reserves all rights not expressly granted to you.
|
|
||||||
|
|
||||||
2. COPYRIGHT. All right, title, and copyrights in and to the SOFTWARE PRODUCT (including but not limited to any images, photographs, animations, video, audio, music, text, and "applets" incorporated into the SOFTWARE PRODUCT), and any copies of the SOFTWARE PRODUCT, are owned by Microsoft or its suppliers. The SOFTWARE PRODUCT is protected by copyright laws and international treaty provisions. Therefore, you must treat the SOFTWARE PRODUCT like any other copyrighted material except that you may either (a) make one copy of the SOFTWARE PRODUCT solely for backup or archival purposes, or (b) install the SOFTWARE PRODUCT on a single computer, provided you keep the original solely for backup or archival purposes. You may not copy the printed materials accompanying the SOFTWARE PRODUCT.
|
|
||||||
|
|
||||||
3. PRERELEASE CODE. The SOFTWARE PRODUCT may contain PRERELEASE CODE that is not at the level of performance and compatibility of the final, generally available, product offering. These portions of the SOFTWARE PRODUCT may not operate correctly and may be substantially modified prior to first commercial shipment. Microsoft is not obligated to make this or any later version of the SOFTWARE PRODUCT commercially available. Microsoft grants you the right to distribute test versions of your Application created using the PRERELEASE CODE provided you comply with the Distribution Requirements described in Section 1 and the following additional provisions: (a) you must mark the test version of your Application "BETA" and (b) you are solely responsible for updating your customers with versions of your Application that operate satisfactorily with the final commercial release of the PRERELEASE CODE.
|
|
||||||
|
|
||||||
4. DESCRIPTION OF OTHER RIGHTS AND LIMITATIONS.
|
|
||||||
( Limitations on Reverse Engineering, Decompilation, and Disassembly. You may not reverse-engineer, decompile, or disassemble the SOFTWARE PRODUCT, except and only to the extent that such activity is expressly permitted by applicable law notwithstanding this limitation.
|
|
||||||
( Rental. You may not rent or lease the SOFTWARE PRODUCT.
|
|
||||||
( Software Transfer. You may permanently transfer all of your rights under this EULA, provided you retain no copies, you transfer all of the SOFTWARE PRODUCT (including all component parts, the media and printed materials, any upgrades, this EULA, and, if applicable, the Certificate of Authenticity), and the recipient agrees to the terms of this EULA. If the SOFTWARE PRODUCT is an upgrade, any transfer must include all prior versions of the SOFTWARE PRODUCT.
|
|
||||||
( Termination. Without prejudice to any other rights, Microsoft may terminate this EULA if you fail to comply with the terms and conditions of this EULA. In such event, you must destroy all copies of the SOFTWARE PRODUCT and all of its component parts.
|
|
||||||
|
|
||||||
5. EXPORT RESTRICTIONS. You agree that neither you nor your customers intend to or will, directly or indirectly, export or transmit (a) the SOFTWARE PRODUCT or related documentation and technical data or (b) your Application as described in Section 1 of this Agreement (or any part thereof), or process, or service that is the direct product of the SOFTWARE PRODUCT to any country to which such export or transmission is restricted by any applicable U.S. regulation or statute, without the prior written consent, if required, of the Bureau of Export Administration of the U.S. Department of Commerce, or such other governmental entity as may have jurisdiction over such export or transmission.
|
|
||||||
|
|
||||||
NO WARRANTIES. To the maximum extent permitted by applicable law, Microsoft expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT and any related documentation are provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties of merchantability or fitness for a particular purpose. The entire risk arising out of use or performance of the SOFTWARE PRODUCT remains with you.
|
|
||||||
|
|
||||||
LIMITATION OF LIABILITY. Microsoft's entire liability and your exclusive remedy under this EULA shall not exceed one hundred dollars (US$100.00).
|
|
||||||
|
|
||||||
NO LIABILITY FOR CONSEQUENTIAL DAMAGES. To the maximum extent permitted by applicable law, in no event shall Microsoft or its suppliers be liable for any damages whatsoever (including, without limitation, damages for loss of business profit, business interruption, loss of business information, or any other pecuniary loss) arising out of the use or inability to use this Microsoft product, even if Microsoft has been advised of the possibility of such damages. Because some states/jurisdictions do not allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation may not apply to you.
|
|
||||||
|
|
||||||
U.S. GOVERNMENT RESTRICTED RIGHTS.The SOFTWARE and documentation are provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of The Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 or subparagraphs (c)(1) and (2) of the Commercial Computer Software -- Restricted Rights at 48 CFR 52.227-19, as applicable. Manufacturer is Microsoft Corporation/One Microsoft Way/Redmond, WA 98052-6399.
|
|
||||||
|
|
||||||
If you acquired this product in the United States, this Agreement is governed by the laws of the State of Washington. If you acquired this product outside the United States, local law may apply.
|
|
||||||
|
|
||||||
Should you have any questions concerning this Agreement, if you desire rights to use the product beyond what is listed here, or if you desire to contact Microsoft for any reason, please contact your local Microsoft subsidiary or sales office or write to: Microsoft Sales and Service, One Microsoft Way, Redmond, WA 98052-6399.
|
|
||||||
|
|
||||||
Si vous avez acquis votre produit Microsoft au CANADA, la garantie limitée suivante vous concerne :
|
|
||||||
|
|
||||||
GARANTIE LIMITÉE
|
|
||||||
|
|
||||||
EXCLUSION DE GARANTIES. Microsoft renonce entièrement à toute garantie pour le LOGICIEL. Le LOGICIEL et toute autre documentation s'y rapportant sont fournis «comme tels» sans aucune garantie quelle qu'elle soit, expresse ou implicite, y compris, mais ne se limitant pas, aux garanties implicites de la qualité marchande ou un usage particulier. Le risque total découlant de l'utilisation ou de la performance du LOGICIEL est entre vos mains.
|
|
||||||
|
|
||||||
RESPONSABILITÉ LIMITÉE. La seule obligation de Microsoft et votre recours exclusif concernant ce contrat n'excèderont pas cent dollars (US$100.00).
|
|
||||||
|
|
||||||
ABSENCE DE RESPONSABILITÉ POUR LES DOMMAGES INDIRECTS. Microsoft ou ses fournisseurs ne pourront être tenus responsables en aucune circonstance de tout dommage quel qu'il soit (y compris mais non de façon limitative aux dommages directs ou indirects causés par la perte de bénéfices commerciaux, l'interruption des affaires, la perte d'information commerciale ou toute autre perte pécuniaire) résultant de l'utilisation ou de l'impossibilité d'utilisation de ce produit, et ce, même si la société Microsoft a été avisée de l'éventualité de tels dommages. Certains états/juridictions ne permettent pas l'exclusion ou la limitation de responsabilité relative aux dommages indirects ou consécutifs, et la limitation ci-dessus peut ne pas s'appliquer à votre égard.
|
|
||||||
|
|
||||||
La présente Convention est régie par les lois de la province d'Ontario, Canada. Chacune des parties à la présente reconnaît irrévocablement la compétence des tribunaux de la province d'Ontario et consent à instituer tout litige qui pourrait découler de la présente auprès des tribunaux situés dans le district judiciaire de York, province d'Ontario.
|
|
||||||
|
|
||||||
Au cas où vous auriez des questions concernant cette licence ou que vous désiriez vous mettre en rapport avec Microsoft pour quelque raison que ce soit, veuillez contacter la succursale Microsoft desservant votre pays, dont l'adresse est fournie dans ce produit, ou écrire à : Microsoft Customer Sales and Service, One Microsoft Way, Redmond, Washington 98052-6399.
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
#ifndef _CDROM_PCH_
|
|
||||||
#define _CDROM_PCH_
|
|
||||||
|
|
||||||
#include <ntdef.h>
|
|
||||||
#include <ntstatus.h>
|
|
||||||
#include <mountmgr.h>
|
|
||||||
#include <mountdev.h>
|
|
||||||
|
|
||||||
#endif /* _CDROM_PCH_ */
|
|
|
@ -1,13 +0,0 @@
|
||||||
|
|
||||||
include_directories(..)
|
|
||||||
spec2def(class2.sys class2.spec ADD_IMPORTLIB)
|
|
||||||
|
|
||||||
list(APPEND SOURCE
|
|
||||||
class2.c
|
|
||||||
class2.rc
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/class2.def)
|
|
||||||
|
|
||||||
add_library(class2 MODULE ${SOURCE})
|
|
||||||
set_module_type(class2 kernelmodedriver)
|
|
||||||
add_importlibs(class2 scsiport ntoskrnl hal)
|
|
||||||
add_cd_file(TARGET class2 DESTINATION reactos/system32/drivers NO_CAB FOR all)
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,5 +0,0 @@
|
||||||
#define REACTOS_VERSION_DLL
|
|
||||||
#define REACTOS_STR_FILE_DESCRIPTION "SCSI Class Driver Helper"
|
|
||||||
#define REACTOS_STR_INTERNAL_NAME "class2"
|
|
||||||
#define REACTOS_STR_ORIGINAL_FILENAME "class2.sys"
|
|
||||||
#include <reactos/version.rc>
|
|
|
@ -1,22 +0,0 @@
|
||||||
@ stdcall ScsiClassAsynchronousCompletion(ptr ptr ptr)
|
|
||||||
@ stdcall ScsiClassBuildRequest(ptr ptr)
|
|
||||||
@ stdcall ScsiClassClaimDevice(ptr ptr long ptr)
|
|
||||||
@ stdcall ScsiClassCreateDeviceObject(ptr ptr ptr ptr ptr)
|
|
||||||
@ stdcall ScsiClassDeviceControl(ptr ptr)
|
|
||||||
@ stdcall ScsiClassFindModePage(ptr long long long)
|
|
||||||
@ stdcall ScsiClassFindUnclaimedDevices(ptr ptr)
|
|
||||||
@ stdcall ScsiClassGetCapabilities(ptr ptr)
|
|
||||||
@ stdcall ScsiClassGetInquiryData(ptr ptr)
|
|
||||||
@ stdcall ScsiClassInitialize(ptr ptr ptr)
|
|
||||||
@ stdcall ScsiClassInitializeSrbLookasideList(ptr long)
|
|
||||||
@ stdcall ScsiClassInternalIoControl(ptr ptr)
|
|
||||||
@ stdcall ScsiClassInterpretSenseInfo(ptr ptr long long long long)
|
|
||||||
@ stdcall ScsiClassIoComplete(ptr ptr ptr)
|
|
||||||
@ stdcall ScsiClassIoCompleteAssociated(ptr ptr ptr)
|
|
||||||
@ stdcall ScsiClassModeSense(ptr ptr long long)
|
|
||||||
@ stdcall ScsiClassQueryTimeOutRegistryValue(ptr)
|
|
||||||
@ stdcall ScsiClassReadDriveCapacity(ptr)
|
|
||||||
@ stdcall ScsiClassReleaseQueue(ptr)
|
|
||||||
@ stdcall ScsiClassSendSrbAsynchronous(ptr ptr ptr ptr long long)
|
|
||||||
@ stdcall ScsiClassSendSrbSynchronous(ptr ptr ptr long long)
|
|
||||||
@ stdcall ScsiClassSplitRequest(ptr ptr long)
|
|
|
@ -1,53 +0,0 @@
|
||||||
Window NT Device Driver Kit
|
|
||||||
END-USER LICENSE AGREEMENT FOR MICROSOFT SOFTWARE
|
|
||||||
|
|
||||||
IMPORTANT-READ CAREFULLY: This Microsoft End-User License Agreement ("EULA") is a legal agreement between you (either an individual or a single entity) and Microsoft Corporation for the Microsoft software product identified above, which includes computer software and associated media and printed materials, and may include "online" or electronic documentation ("SOFTWARE PRODUCT" or "SOFTWARE"). By installing, copying, or otherwise using the SOFTWARE PRODUCT, you agree to be bound by the terms of this EULA. If you do not agree to the terms of this EULA, promptly return the unused SOFTWARE PRODUCT to the place from which you obtained it for a full refund, or if you received the SOFTWARE PRODUCT as part of a subscription or other service from Microsoft, you may cancel the subscription and receive a refund of a prorata portion of the subscription price.
|
|
||||||
|
|
||||||
SOFTWARE PRODUCT LICENSE
|
|
||||||
The SOFTWARE PRODUCT is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE PRODUCT is licensed, not sold. To develop Windows NT(tm) device drivers, you will need to utilize two computers, one for development and one for debugging.
|
|
||||||
|
|
||||||
1. GRANT OF LICENSE. This EULA grants you the following limited, non-exclusive rights:
|
|
||||||
* SOFTWARE PRODUCT. (a) You may make two (2) copies of the SOFTWARE PRODUCT for installation and use on two (2) computers, one for use in development and one for use in debugging to design, develop, and test your software product(s), including but not limited to device driver(s) and other software products, for use with Microsoft(r) Windows(r) or Windows NT ("Software Product"). You may make an additional copy of the Windows NT Workstation operating system (licensed and provided separately) for use on a single computer used for debugging purposes.
|
|
||||||
* Microsoft Developer Network Subscriber. If you acquired the SOFTWARE PRODUCT through a subscription to the Microsoft Developer Network, and you are either an individual developer or an individual designated within a single entity, you are granted the following additional rights with respect to the SOFTWARE PRODUCT: (a) you may make and use copies of the SOFTWARE PRODUCT on up to ten (10) separate computers, provided that you are the only individual using the SOFTWARE PRODUCT on each such computer, and (b) if you are a single entity, you may designate one individual within your organization to have the right to use the SOFTWARE PRODUCT in the manner described herein.
|
|
||||||
* SAMPLE CODE. You may modify the sample source code ("Sample Code") to design, develop and test your Software Product, and reproduce and distribute the Sample Code with such modifications in source and object code forms, provided that you comply with the Distribution Requirements described below.
|
|
||||||
* DISTRIBUTION REQUIREMENTS. You may copy and redistribute the Sample Code as described above, provided that (a) you distribute the Sample Code only in conjunction with and as a part of your Software Product; (b) you do not make any statements to the effect or which imply that your Software Product is "certified" by Microsoft or that its performance is guaranteed by Microsoft; (c) you do not use Microsoft's name, logo, or trademarks to market your Software Product; (d) you include a valid copyright notice on your Software Product; and (e) you indemnify, hold harmless, and defend Microsoft from and against any claims or lawsuits, including attorneys' fees, that arise or result from the use or distribution of your Software Product. Contact Microsoft for the applicable royalties due and other licensing terms for all other uses and/or distribution of the Sample Code
|
|
||||||
* Microsoft reserves all rights not expressly granted to you.
|
|
||||||
|
|
||||||
2. COPYRIGHT. All right, title, and copyrights in and to the SOFTWARE PRODUCT (including but not limited to any images, photographs, animations, video, audio, music, text, and "applets" incorporated into the SOFTWARE PRODUCT), and any copies of the SOFTWARE PRODUCT, are owned by Microsoft or its suppliers. The SOFTWARE PRODUCT is protected by copyright laws and international treaty provisions. Therefore, you must treat the SOFTWARE PRODUCT like any other copyrighted material except that you may either (a) make one copy of the SOFTWARE PRODUCT solely for backup or archival purposes, or (b) install the SOFTWARE PRODUCT on a single computer, provided you keep the original solely for backup or archival purposes. You may not copy the printed materials accompanying the SOFTWARE PRODUCT.
|
|
||||||
|
|
||||||
3. PRERELEASE CODE. The SOFTWARE PRODUCT may contain PRERELEASE CODE that is not at the level of performance and compatibility of the final, generally available, product offering. These portions of the SOFTWARE PRODUCT may not operate correctly and may be substantially modified prior to first commercial shipment. Microsoft is not obligated to make this or any later version of the SOFTWARE PRODUCT commercially available. Microsoft grants you the right to distribute test versions of your Application created using the PRERELEASE CODE provided you comply with the Distribution Requirements described in Section 1 and the following additional provisions: (a) you must mark the test version of your Application "BETA" and (b) you are solely responsible for updating your customers with versions of your Application that operate satisfactorily with the final commercial release of the PRERELEASE CODE.
|
|
||||||
|
|
||||||
4. DESCRIPTION OF OTHER RIGHTS AND LIMITATIONS.
|
|
||||||
( Limitations on Reverse Engineering, Decompilation, and Disassembly. You may not reverse-engineer, decompile, or disassemble the SOFTWARE PRODUCT, except and only to the extent that such activity is expressly permitted by applicable law notwithstanding this limitation.
|
|
||||||
( Rental. You may not rent or lease the SOFTWARE PRODUCT.
|
|
||||||
( Software Transfer. You may permanently transfer all of your rights under this EULA, provided you retain no copies, you transfer all of the SOFTWARE PRODUCT (including all component parts, the media and printed materials, any upgrades, this EULA, and, if applicable, the Certificate of Authenticity), and the recipient agrees to the terms of this EULA. If the SOFTWARE PRODUCT is an upgrade, any transfer must include all prior versions of the SOFTWARE PRODUCT.
|
|
||||||
( Termination. Without prejudice to any other rights, Microsoft may terminate this EULA if you fail to comply with the terms and conditions of this EULA. In such event, you must destroy all copies of the SOFTWARE PRODUCT and all of its component parts.
|
|
||||||
|
|
||||||
5. EXPORT RESTRICTIONS. You agree that neither you nor your customers intend to or will, directly or indirectly, export or transmit (a) the SOFTWARE PRODUCT or related documentation and technical data or (b) your Application as described in Section 1 of this Agreement (or any part thereof), or process, or service that is the direct product of the SOFTWARE PRODUCT to any country to which such export or transmission is restricted by any applicable U.S. regulation or statute, without the prior written consent, if required, of the Bureau of Export Administration of the U.S. Department of Commerce, or such other governmental entity as may have jurisdiction over such export or transmission.
|
|
||||||
|
|
||||||
NO WARRANTIES. To the maximum extent permitted by applicable law, Microsoft expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT and any related documentation are provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties of merchantability or fitness for a particular purpose. The entire risk arising out of use or performance of the SOFTWARE PRODUCT remains with you.
|
|
||||||
|
|
||||||
LIMITATION OF LIABILITY. Microsoft's entire liability and your exclusive remedy under this EULA shall not exceed one hundred dollars (US$100.00).
|
|
||||||
|
|
||||||
NO LIABILITY FOR CONSEQUENTIAL DAMAGES. To the maximum extent permitted by applicable law, in no event shall Microsoft or its suppliers be liable for any damages whatsoever (including, without limitation, damages for loss of business profit, business interruption, loss of business information, or any other pecuniary loss) arising out of the use or inability to use this Microsoft product, even if Microsoft has been advised of the possibility of such damages. Because some states/jurisdictions do not allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation may not apply to you.
|
|
||||||
|
|
||||||
U.S. GOVERNMENT RESTRICTED RIGHTS.The SOFTWARE and documentation are provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of The Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 or subparagraphs (c)(1) and (2) of the Commercial Computer Software -- Restricted Rights at 48 CFR 52.227-19, as applicable. Manufacturer is Microsoft Corporation/One Microsoft Way/Redmond, WA 98052-6399.
|
|
||||||
|
|
||||||
If you acquired this product in the United States, this Agreement is governed by the laws of the State of Washington. If you acquired this product outside the United States, local law may apply.
|
|
||||||
|
|
||||||
Should you have any questions concerning this Agreement, if you desire rights to use the product beyond what is listed here, or if you desire to contact Microsoft for any reason, please contact your local Microsoft subsidiary or sales office or write to: Microsoft Sales and Service, One Microsoft Way, Redmond, WA 98052-6399.
|
|
||||||
|
|
||||||
Si vous avez acquis votre produit Microsoft au CANADA, la garantie limitée suivante vous concerne :
|
|
||||||
|
|
||||||
GARANTIE LIMITÉE
|
|
||||||
|
|
||||||
EXCLUSION DE GARANTIES. Microsoft renonce entièrement à toute garantie pour le LOGICIEL. Le LOGICIEL et toute autre documentation s'y rapportant sont fournis «comme tels» sans aucune garantie quelle qu'elle soit, expresse ou implicite, y compris, mais ne se limitant pas, aux garanties implicites de la qualité marchande ou un usage particulier. Le risque total découlant de l'utilisation ou de la performance du LOGICIEL est entre vos mains.
|
|
||||||
|
|
||||||
RESPONSABILITÉ LIMITÉE. La seule obligation de Microsoft et votre recours exclusif concernant ce contrat n'excèderont pas cent dollars (US$100.00).
|
|
||||||
|
|
||||||
ABSENCE DE RESPONSABILITÉ POUR LES DOMMAGES INDIRECTS. Microsoft ou ses fournisseurs ne pourront être tenus responsables en aucune circonstance de tout dommage quel qu'il soit (y compris mais non de façon limitative aux dommages directs ou indirects causés par la perte de bénéfices commerciaux, l'interruption des affaires, la perte d'information commerciale ou toute autre perte pécuniaire) résultant de l'utilisation ou de l'impossibilité d'utilisation de ce produit, et ce, même si la société Microsoft a été avisée de l'éventualité de tels dommages. Certains états/juridictions ne permettent pas l'exclusion ou la limitation de responsabilité relative aux dommages indirects ou consécutifs, et la limitation ci-dessus peut ne pas s'appliquer à votre égard.
|
|
||||||
|
|
||||||
La présente Convention est régie par les lois de la province d'Ontario, Canada. Chacune des parties à la présente reconnaît irrévocablement la compétence des tribunaux de la province d'Ontario et consent à instituer tout litige qui pourrait découler de la présente auprès des tribunaux situés dans le district judiciaire de York, province d'Ontario.
|
|
||||||
|
|
||||||
Au cas où vous auriez des questions concernant cette licence ou que vous désiriez vous mettre en rapport avec Microsoft pour quelque raison que ce soit, veuillez contacter la succursale Microsoft desservant votre pays, dont l'adresse est fournie dans ce produit, ou écrire à : Microsoft Customer Sales and Service, One Microsoft Way, Redmond, Washington 98052-6399.
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
|
|
||||||
include_directories(..)
|
|
||||||
add_library(disk MODULE disk.c disk.rc)
|
|
||||||
set_module_type(disk kernelmodedriver)
|
|
||||||
add_importlibs(disk class2 scsiport ntoskrnl hal)
|
|
||||||
add_cd_file(TARGET disk DESTINATION reactos/system32/drivers NO_CAB FOR all)
|
|
||||||
add_registry_inf(disk_reg.inf)
|
|
||||||
add_driver_inf(disk disk.inf)
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,136 +0,0 @@
|
||||||
; DISK.INF
|
|
||||||
|
|
||||||
; Installation of DISK DRIVESs
|
|
||||||
|
|
||||||
[Version]
|
|
||||||
Signature = "$Windows NT$"
|
|
||||||
;Signature = "$ReactOS$"
|
|
||||||
LayoutFile = layout.inf
|
|
||||||
Class = DiskDrive
|
|
||||||
ClassGUID = {4D36E967-E325-11CE-BFC1-08002BE10318}
|
|
||||||
Provider = %ReactOS%
|
|
||||||
DriverVer = 10/19/1999,5.00.2157.1
|
|
||||||
|
|
||||||
[DestinationDirs]
|
|
||||||
disk_CopyFiles.NT = 12
|
|
||||||
storprop_CopyFiles.NT = 11
|
|
||||||
|
|
||||||
[ClassInstall32.NT]
|
|
||||||
AddReg = DiskClass.NT.AddReg
|
|
||||||
Copyfiles = storprop_CopyFiles.NT
|
|
||||||
|
|
||||||
[DiskClass.NT.AddReg]
|
|
||||||
HKR, , , 0, %DiskClassName%
|
|
||||||
HKR, , Installer32, 0, "storprop.dll,DiskClassInstaller"
|
|
||||||
HKR, , Icon, 0, "-53"
|
|
||||||
HKR, , NoInstallClass, 0, 1
|
|
||||||
HKR, , SilentInstall, 0, 1
|
|
||||||
|
|
||||||
[Manufacturer]
|
|
||||||
%GenericMfg% = GenericMfg
|
|
||||||
|
|
||||||
[GenericMfg]
|
|
||||||
%Disk.DeviceDesc% = disk_Inst,GenDisk
|
|
||||||
%OpticalDisk.DeviceDesc% = disk_Inst,GenOptical
|
|
||||||
|
|
||||||
;----------------------------- DISK DRIVER -----------------------------
|
|
||||||
|
|
||||||
[disk_Inst.NT]
|
|
||||||
CopyFiles = disk_CopyFiles.NT
|
|
||||||
|
|
||||||
[disk_Inst.NT.Services]
|
|
||||||
AddService = disk, 2, disk_Service_Inst
|
|
||||||
|
|
||||||
[disk_Service_Inst]
|
|
||||||
DisplayName = %Disk.ServiceDesc%
|
|
||||||
ServiceType = 1
|
|
||||||
StartType = 0
|
|
||||||
ErrorControl = 1
|
|
||||||
ServiceBinary = %12%\disk.sys
|
|
||||||
|
|
||||||
[disk_CopyFiles.NT]
|
|
||||||
disk.sys
|
|
||||||
|
|
||||||
;---------------------------- DISK INSTALLER ----------------------------
|
|
||||||
|
|
||||||
[storprop_CopyFiles.NT]
|
|
||||||
storprop.dll
|
|
||||||
|
|
||||||
;-------------------------------- STRINGS -------------------------------
|
|
||||||
|
|
||||||
[Strings]
|
|
||||||
ReactOS = "ReactOS Team"
|
|
||||||
GenericMfg = "(Generic Disk Drives)"
|
|
||||||
DiskClassName = "Disk Drives"
|
|
||||||
Disk.DeviceDesc = "Disk Drive"
|
|
||||||
OpticalDisk.DeviceDesc = "Optical Disk Drive"
|
|
||||||
Disk.ServiceDesc = "Disk Driver"
|
|
||||||
|
|
||||||
[Strings.0405]
|
|
||||||
GenericMfg = "(Obecné diskové jednotky)"
|
|
||||||
DiskClassName = "Diskové jednotky"
|
|
||||||
Disk.DeviceDesc = "Disková jednotka"
|
|
||||||
OpticalDisk.DeviceDesc = "Optická disková jednotka"
|
|
||||||
Disk.ServiceDesc = "Ovladač disku"
|
|
||||||
|
|
||||||
[Strings.0a]
|
|
||||||
ReactOS = "Equipo de ReactOS"
|
|
||||||
GenericMfg = "(Unidades de disco genéricas)"
|
|
||||||
DiskClassName = "Unidades de disco"
|
|
||||||
Disk.DeviceDesc = "Unidad de disco"
|
|
||||||
OpticalDisk.DeviceDesc = "Unidad de disco óptico"
|
|
||||||
Disk.ServiceDesc = "Controlador de disco"
|
|
||||||
|
|
||||||
[Strings.040C]
|
|
||||||
ReactOS = "Equipe ReactOS"
|
|
||||||
GenericMfg = "(Pilotes de disque génériques)"
|
|
||||||
DiskClassName = "Lecteurs de disques"
|
|
||||||
Disk.DeviceDesc = "Lecteurs de disques"
|
|
||||||
OpticalDisk.DeviceDesc = "Lecteurs de disques optiques"
|
|
||||||
Disk.ServiceDesc = "Pilotes de disques"
|
|
||||||
|
|
||||||
[Strings.0415]
|
|
||||||
ReactOS = "Zespół ReactOS"
|
|
||||||
GenericMfg = "(Standardowy dysk twardy)"
|
|
||||||
DiskClassName = "Dyski twarde"
|
|
||||||
Disk.DeviceDesc = "Dysk twardy"
|
|
||||||
OpticalDisk.DeviceDesc = "Dysk optyczny"
|
|
||||||
Disk.ServiceDesc = "Sterownik dysku"
|
|
||||||
|
|
||||||
[Strings.0418]
|
|
||||||
ReactOS = "Echipa ReactOS"
|
|
||||||
GenericMfg = "(dispozitiv disc generic)"
|
|
||||||
DiskClassName = "Dispozitive disc"
|
|
||||||
Disk.DeviceDesc = "Dispozitiv disc"
|
|
||||||
OpticalDisk.DeviceDesc = "Dispozitiv disc optic"
|
|
||||||
Disk.ServiceDesc = "Modúl-pilot de disc"
|
|
||||||
|
|
||||||
[Strings.0419]
|
|
||||||
ReactOS = "Команда ReactOS"
|
|
||||||
GenericMfg = "(Стандартные дисковые накопители)"
|
|
||||||
DiskClassName = "Дисковые устройства"
|
|
||||||
Disk.DeviceDesc = "Дисковое устройство"
|
|
||||||
OpticalDisk.DeviceDesc = "Оптическое дисковое устройство"
|
|
||||||
Disk.ServiceDesc = "Драйвер диска"
|
|
||||||
|
|
||||||
[Strings.041f]
|
|
||||||
ReactOS = "ReactOS Takımı"
|
|
||||||
GenericMfg = "(Umûmî Disk Sürücüleri)"
|
|
||||||
DiskClassName = "Disk Sürücüleri"
|
|
||||||
Disk.DeviceDesc = "Disk Sürücüsü"
|
|
||||||
OpticalDisk.DeviceDesc = "Optik Disk Sürücüsü"
|
|
||||||
Disk.ServiceDesc = "Disk Sürücüsü"
|
|
||||||
|
|
||||||
[Strings.0422]
|
|
||||||
ReactOS = "Команда ReactOS"
|
|
||||||
GenericMfg = "(Стандартні приводи дисків)"
|
|
||||||
DiskClassName = "Дискові приводи"
|
|
||||||
Disk.DeviceDesc = "Дисковий привід"
|
|
||||||
OpticalDisk.DeviceDesc = "Оптичний привід дисків"
|
|
||||||
Disk.ServiceDesc = "Драйвер диску"
|
|
||||||
|
|
||||||
[Strings.0804]
|
|
||||||
GenericMfg = "(通用磁盘驱动器)"
|
|
||||||
Disk.DeviceDesc = "磁盘驱动器"
|
|
||||||
OpticalDisk.DeviceDesc = "光盘驱动器"
|
|
||||||
Disk.ServiceDesc = "磁盘驱动器"
|
|
|
@ -1,5 +0,0 @@
|
||||||
#define REACTOS_VERSION_DLL
|
|
||||||
#define REACTOS_STR_FILE_DESCRIPTION "Disk Class Driver"
|
|
||||||
#define REACTOS_STR_INTERNAL_NAME "disk"
|
|
||||||
#define REACTOS_STR_ORIGINAL_FILENAME "disk.sys"
|
|
||||||
#include <reactos/version.rc>
|
|
|
@ -1,7 +0,0 @@
|
||||||
; Disk class driver
|
|
||||||
[AddReg]
|
|
||||||
HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ErrorControl",0x00010001,0x00000000
|
|
||||||
HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Group",0x00000000,"SCSI Class"
|
|
||||||
HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ImagePath",0x00020000,"system32\drivers\disk.sys"
|
|
||||||
HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Start",0x00010001,0x00000000
|
|
||||||
HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Type",0x00010001,0x00000001
|
|
|
@ -1,53 +0,0 @@
|
||||||
Window NT Device Driver Kit
|
|
||||||
END-USER LICENSE AGREEMENT FOR MICROSOFT SOFTWARE
|
|
||||||
|
|
||||||
IMPORTANT-READ CAREFULLY: This Microsoft End-User License Agreement ("EULA") is a legal agreement between you (either an individual or a single entity) and Microsoft Corporation for the Microsoft software product identified above, which includes computer software and associated media and printed materials, and may include "online" or electronic documentation ("SOFTWARE PRODUCT" or "SOFTWARE"). By installing, copying, or otherwise using the SOFTWARE PRODUCT, you agree to be bound by the terms of this EULA. If you do not agree to the terms of this EULA, promptly return the unused SOFTWARE PRODUCT to the place from which you obtained it for a full refund, or if you received the SOFTWARE PRODUCT as part of a subscription or other service from Microsoft, you may cancel the subscription and receive a refund of a prorata portion of the subscription price.
|
|
||||||
|
|
||||||
SOFTWARE PRODUCT LICENSE
|
|
||||||
The SOFTWARE PRODUCT is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE PRODUCT is licensed, not sold. To develop Windows NT(tm) device drivers, you will need to utilize two computers, one for development and one for debugging.
|
|
||||||
|
|
||||||
1. GRANT OF LICENSE. This EULA grants you the following limited, non-exclusive rights:
|
|
||||||
* SOFTWARE PRODUCT. (a) You may make two (2) copies of the SOFTWARE PRODUCT for installation and use on two (2) computers, one for use in development and one for use in debugging to design, develop, and test your software product(s), including but not limited to device driver(s) and other software products, for use with Microsoft(r) Windows(r) or Windows NT ("Software Product"). You may make an additional copy of the Windows NT Workstation operating system (licensed and provided separately) for use on a single computer used for debugging purposes.
|
|
||||||
* Microsoft Developer Network Subscriber. If you acquired the SOFTWARE PRODUCT through a subscription to the Microsoft Developer Network, and you are either an individual developer or an individual designated within a single entity, you are granted the following additional rights with respect to the SOFTWARE PRODUCT: (a) you may make and use copies of the SOFTWARE PRODUCT on up to ten (10) separate computers, provided that you are the only individual using the SOFTWARE PRODUCT on each such computer, and (b) if you are a single entity, you may designate one individual within your organization to have the right to use the SOFTWARE PRODUCT in the manner described herein.
|
|
||||||
* SAMPLE CODE. You may modify the sample source code ("Sample Code") to design, develop and test your Software Product, and reproduce and distribute the Sample Code with such modifications in source and object code forms, provided that you comply with the Distribution Requirements described below.
|
|
||||||
* DISTRIBUTION REQUIREMENTS. You may copy and redistribute the Sample Code as described above, provided that (a) you distribute the Sample Code only in conjunction with and as a part of your Software Product; (b) you do not make any statements to the effect or which imply that your Software Product is "certified" by Microsoft or that its performance is guaranteed by Microsoft; (c) you do not use Microsoft's name, logo, or trademarks to market your Software Product; (d) you include a valid copyright notice on your Software Product; and (e) you indemnify, hold harmless, and defend Microsoft from and against any claims or lawsuits, including attorneys' fees, that arise or result from the use or distribution of your Software Product. Contact Microsoft for the applicable royalties due and other licensing terms for all other uses and/or distribution of the Sample Code
|
|
||||||
* Microsoft reserves all rights not expressly granted to you.
|
|
||||||
|
|
||||||
2. COPYRIGHT. All right, title, and copyrights in and to the SOFTWARE PRODUCT (including but not limited to any images, photographs, animations, video, audio, music, text, and "applets" incorporated into the SOFTWARE PRODUCT), and any copies of the SOFTWARE PRODUCT, are owned by Microsoft or its suppliers. The SOFTWARE PRODUCT is protected by copyright laws and international treaty provisions. Therefore, you must treat the SOFTWARE PRODUCT like any other copyrighted material except that you may either (a) make one copy of the SOFTWARE PRODUCT solely for backup or archival purposes, or (b) install the SOFTWARE PRODUCT on a single computer, provided you keep the original solely for backup or archival purposes. You may not copy the printed materials accompanying the SOFTWARE PRODUCT.
|
|
||||||
|
|
||||||
3. PRERELEASE CODE. The SOFTWARE PRODUCT may contain PRERELEASE CODE that is not at the level of performance and compatibility of the final, generally available, product offering. These portions of the SOFTWARE PRODUCT may not operate correctly and may be substantially modified prior to first commercial shipment. Microsoft is not obligated to make this or any later version of the SOFTWARE PRODUCT commercially available. Microsoft grants you the right to distribute test versions of your Application created using the PRERELEASE CODE provided you comply with the Distribution Requirements described in Section 1 and the following additional provisions: (a) you must mark the test version of your Application "BETA" and (b) you are solely responsible for updating your customers with versions of your Application that operate satisfactorily with the final commercial release of the PRERELEASE CODE.
|
|
||||||
|
|
||||||
4. DESCRIPTION OF OTHER RIGHTS AND LIMITATIONS.
|
|
||||||
( Limitations on Reverse Engineering, Decompilation, and Disassembly. You may not reverse-engineer, decompile, or disassemble the SOFTWARE PRODUCT, except and only to the extent that such activity is expressly permitted by applicable law notwithstanding this limitation.
|
|
||||||
( Rental. You may not rent or lease the SOFTWARE PRODUCT.
|
|
||||||
( Software Transfer. You may permanently transfer all of your rights under this EULA, provided you retain no copies, you transfer all of the SOFTWARE PRODUCT (including all component parts, the media and printed materials, any upgrades, this EULA, and, if applicable, the Certificate of Authenticity), and the recipient agrees to the terms of this EULA. If the SOFTWARE PRODUCT is an upgrade, any transfer must include all prior versions of the SOFTWARE PRODUCT.
|
|
||||||
( Termination. Without prejudice to any other rights, Microsoft may terminate this EULA if you fail to comply with the terms and conditions of this EULA. In such event, you must destroy all copies of the SOFTWARE PRODUCT and all of its component parts.
|
|
||||||
|
|
||||||
5. EXPORT RESTRICTIONS. You agree that neither you nor your customers intend to or will, directly or indirectly, export or transmit (a) the SOFTWARE PRODUCT or related documentation and technical data or (b) your Application as described in Section 1 of this Agreement (or any part thereof), or process, or service that is the direct product of the SOFTWARE PRODUCT to any country to which such export or transmission is restricted by any applicable U.S. regulation or statute, without the prior written consent, if required, of the Bureau of Export Administration of the U.S. Department of Commerce, or such other governmental entity as may have jurisdiction over such export or transmission.
|
|
||||||
|
|
||||||
NO WARRANTIES. To the maximum extent permitted by applicable law, Microsoft expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT and any related documentation are provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties of merchantability or fitness for a particular purpose. The entire risk arising out of use or performance of the SOFTWARE PRODUCT remains with you.
|
|
||||||
|
|
||||||
LIMITATION OF LIABILITY. Microsoft's entire liability and your exclusive remedy under this EULA shall not exceed one hundred dollars (US$100.00).
|
|
||||||
|
|
||||||
NO LIABILITY FOR CONSEQUENTIAL DAMAGES. To the maximum extent permitted by applicable law, in no event shall Microsoft or its suppliers be liable for any damages whatsoever (including, without limitation, damages for loss of business profit, business interruption, loss of business information, or any other pecuniary loss) arising out of the use or inability to use this Microsoft product, even if Microsoft has been advised of the possibility of such damages. Because some states/jurisdictions do not allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation may not apply to you.
|
|
||||||
|
|
||||||
U.S. GOVERNMENT RESTRICTED RIGHTS.The SOFTWARE and documentation are provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of The Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 or subparagraphs (c)(1) and (2) of the Commercial Computer Software -- Restricted Rights at 48 CFR 52.227-19, as applicable. Manufacturer is Microsoft Corporation/One Microsoft Way/Redmond, WA 98052-6399.
|
|
||||||
|
|
||||||
If you acquired this product in the United States, this Agreement is governed by the laws of the State of Washington. If you acquired this product outside the United States, local law may apply.
|
|
||||||
|
|
||||||
Should you have any questions concerning this Agreement, if you desire rights to use the product beyond what is listed here, or if you desire to contact Microsoft for any reason, please contact your local Microsoft subsidiary or sales office or write to: Microsoft Sales and Service, One Microsoft Way, Redmond, WA 98052-6399.
|
|
||||||
|
|
||||||
Si vous avez acquis votre produit Microsoft au CANADA, la garantie limitée suivante vous concerne :
|
|
||||||
|
|
||||||
GARANTIE LIMITÉE
|
|
||||||
|
|
||||||
EXCLUSION DE GARANTIES. Microsoft renonce entièrement à toute garantie pour le LOGICIEL. Le LOGICIEL et toute autre documentation s'y rapportant sont fournis «comme tels» sans aucune garantie quelle qu'elle soit, expresse ou implicite, y compris, mais ne se limitant pas, aux garanties implicites de la qualité marchande ou un usage particulier. Le risque total découlant de l'utilisation ou de la performance du LOGICIEL est entre vos mains.
|
|
||||||
|
|
||||||
RESPONSABILITÉ LIMITÉE. La seule obligation de Microsoft et votre recours exclusif concernant ce contrat n'excèderont pas cent dollars (US$100.00).
|
|
||||||
|
|
||||||
ABSENCE DE RESPONSABILITÉ POUR LES DOMMAGES INDIRECTS. Microsoft ou ses fournisseurs ne pourront être tenus responsables en aucune circonstance de tout dommage quel qu'il soit (y compris mais non de façon limitative aux dommages directs ou indirects causés par la perte de bénéfices commerciaux, l'interruption des affaires, la perte d'information commerciale ou toute autre perte pécuniaire) résultant de l'utilisation ou de l'impossibilité d'utilisation de ce produit, et ce, même si la société Microsoft a été avisée de l'éventualité de tels dommages. Certains états/juridictions ne permettent pas l'exclusion ou la limitation de responsabilité relative aux dommages indirects ou consécutifs, et la limitation ci-dessus peut ne pas s'appliquer à votre égard.
|
|
||||||
|
|
||||||
La présente Convention est régie par les lois de la province d'Ontario, Canada. Chacune des parties à la présente reconnaît irrévocablement la compétence des tribunaux de la province d'Ontario et consent à instituer tout litige qui pourrait découler de la présente auprès des tribunaux situés dans le district judiciaire de York, province d'Ontario.
|
|
||||||
|
|
||||||
Au cas où vous auriez des questions concernant cette licence ou que vous désiriez vous mettre en rapport avec Microsoft pour quelque raison que ce soit, veuillez contacter la succursale Microsoft desservant votre pays, dont l'adresse est fournie dans ce produit, ou écrire à : Microsoft Customer Sales and Service, One Microsoft Way, Redmond, Washington 98052-6399.
|
|
||||||
|
|
|
@ -1,267 +0,0 @@
|
||||||
/*
|
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
|
||||||
* PROJECT: ReactOS kernel
|
|
||||||
* FILE: services/storage/include/class2.h
|
|
||||||
* PURPOSE: SCSI class driver definitions
|
|
||||||
* PROGRAMMER: Eric Kohl
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <ntddscsi.h>
|
|
||||||
#include <srb.h>
|
|
||||||
|
|
||||||
#define MAXIMUM_RETRIES 15
|
|
||||||
#define RETRY_WAIT 2000000 /* 200 ms in units of 100 ns */
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicates that the device has write caching enabled.
|
|
||||||
//
|
|
||||||
|
|
||||||
#define DEV_WRITE_CACHE 0x00000001
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build SCSI 1 or SCSI 2 CDBs
|
|
||||||
//
|
|
||||||
|
|
||||||
#define DEV_USE_SCSI1 0x00000002
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicates whether is is safe to send StartUnit commands
|
|
||||||
// to this device. It will only be off for some removeable devices.
|
|
||||||
//
|
|
||||||
|
|
||||||
#define DEV_SAFE_START_UNIT 0x00000004
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicates whether it is unsafe to send SCSIOP_MECHANISM_STATUS commands to
|
|
||||||
// this device. Some devices don't like these 12 byte commands
|
|
||||||
//
|
|
||||||
|
|
||||||
#define DEV_NO_12BYTE_CDB 0x00000008
|
|
||||||
|
|
||||||
|
|
||||||
struct _CLASS_INIT_DATA;
|
|
||||||
|
|
||||||
typedef VOID
|
|
||||||
(NTAPI *PCLASS_ERROR)(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PSCSI_REQUEST_BLOCK Srb,
|
|
||||||
IN OUT NTSTATUS *Status,
|
|
||||||
IN OUT BOOLEAN *Retry);
|
|
||||||
|
|
||||||
typedef BOOLEAN
|
|
||||||
(NTAPI *PCLASS_DEVICE_CALLBACK)(IN PINQUIRYDATA);
|
|
||||||
|
|
||||||
typedef NTSTATUS
|
|
||||||
(NTAPI *PCLASS_READ_WRITE)(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp);
|
|
||||||
|
|
||||||
typedef BOOLEAN
|
|
||||||
(NTAPI *PCLASS_FIND_DEVICES)(IN PDRIVER_OBJECT DriverObject,
|
|
||||||
IN PUNICODE_STRING RegistryPath,
|
|
||||||
IN struct _CLASS_INIT_DATA *InitializationData,
|
|
||||||
IN PDEVICE_OBJECT PortDeviceObject,
|
|
||||||
IN ULONG PortNumber);
|
|
||||||
|
|
||||||
typedef NTSTATUS
|
|
||||||
(NTAPI *PCLASS_DEVICE_CONTROL)(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp);
|
|
||||||
|
|
||||||
typedef NTSTATUS
|
|
||||||
(NTAPI *PCLASS_SHUTDOWN_FLUSH)(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp);
|
|
||||||
|
|
||||||
typedef NTSTATUS
|
|
||||||
(NTAPI *PCLASS_CREATE_CLOSE)(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp);
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _CLASS_INIT_DATA
|
|
||||||
{
|
|
||||||
ULONG InitializationDataSize;
|
|
||||||
ULONG DeviceExtensionSize;
|
|
||||||
DEVICE_TYPE DeviceType;
|
|
||||||
ULONG DeviceCharacteristics;
|
|
||||||
PCLASS_ERROR ClassError;
|
|
||||||
PCLASS_READ_WRITE ClassReadWriteVerification;
|
|
||||||
PCLASS_DEVICE_CALLBACK ClassFindDeviceCallBack;
|
|
||||||
PCLASS_FIND_DEVICES ClassFindDevices;
|
|
||||||
PCLASS_DEVICE_CONTROL ClassDeviceControl;
|
|
||||||
PCLASS_SHUTDOWN_FLUSH ClassShutdownFlush;
|
|
||||||
PCLASS_CREATE_CLOSE ClassCreateClose;
|
|
||||||
PDRIVER_STARTIO ClassStartIo;
|
|
||||||
} CLASS_INIT_DATA, *PCLASS_INIT_DATA;
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _DEVICE_EXTENSION
|
|
||||||
{
|
|
||||||
PDEVICE_OBJECT DeviceObject;
|
|
||||||
PDEVICE_OBJECT PortDeviceObject;
|
|
||||||
LARGE_INTEGER PartitionLength;
|
|
||||||
LARGE_INTEGER StartingOffset;
|
|
||||||
ULONG DMByteSkew;
|
|
||||||
ULONG DMSkew;
|
|
||||||
BOOLEAN DMActive;
|
|
||||||
PCLASS_ERROR ClassError;
|
|
||||||
PCLASS_READ_WRITE ClassReadWriteVerification;
|
|
||||||
PCLASS_FIND_DEVICES ClassFindDevices;
|
|
||||||
PCLASS_DEVICE_CONTROL ClassDeviceControl;
|
|
||||||
PCLASS_SHUTDOWN_FLUSH ClassShutdownFlush;
|
|
||||||
PCLASS_CREATE_CLOSE ClassCreateClose;
|
|
||||||
PDRIVER_STARTIO ClassStartIo;
|
|
||||||
PIO_SCSI_CAPABILITIES PortCapabilities;
|
|
||||||
PDISK_GEOMETRY_EX DiskGeometry;
|
|
||||||
PDEVICE_OBJECT PhysicalDevice;
|
|
||||||
PSENSE_DATA SenseData;
|
|
||||||
ULONG TimeOutValue;
|
|
||||||
ULONG DeviceNumber;
|
|
||||||
ULONG SrbFlags;
|
|
||||||
ULONG ErrorCount;
|
|
||||||
KSPIN_LOCK SplitRequestSpinLock;
|
|
||||||
NPAGED_LOOKASIDE_LIST SrbLookasideListHead;
|
|
||||||
LONG LockCount;
|
|
||||||
UCHAR PortNumber;
|
|
||||||
UCHAR PathId;
|
|
||||||
UCHAR TargetId;
|
|
||||||
UCHAR Lun;
|
|
||||||
UCHAR SectorShift;
|
|
||||||
UCHAR ReservedByte;
|
|
||||||
USHORT DeviceFlags;
|
|
||||||
PKEVENT MediaChangeEvent;
|
|
||||||
HANDLE MediaChangeEventHandle;
|
|
||||||
BOOLEAN MediaChangeNoMedia;
|
|
||||||
ULONG MediaChangeCount;
|
|
||||||
UNICODE_STRING DeviceName;
|
|
||||||
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _COMPLETION_CONTEXT
|
|
||||||
{
|
|
||||||
PDEVICE_OBJECT DeviceObject;
|
|
||||||
SCSI_REQUEST_BLOCK Srb;
|
|
||||||
} COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT;
|
|
||||||
|
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
|
||||||
|
|
||||||
IO_COMPLETION_ROUTINE ScsiClassAsynchronousCompletion;
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassAsynchronousCompletion(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN PVOID Context);
|
|
||||||
|
|
||||||
VOID NTAPI
|
|
||||||
ScsiClassBuildRequest(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassClaimDevice(IN PDEVICE_OBJECT PortDeviceObject,
|
|
||||||
IN PSCSI_INQUIRY_DATA LunInfo,
|
|
||||||
IN BOOLEAN Release,
|
|
||||||
OUT PDEVICE_OBJECT *NewPortDeviceObject OPTIONAL);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject,
|
|
||||||
IN PCCHAR ObjectNameBuffer,
|
|
||||||
IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
|
|
||||||
IN OUT PDEVICE_OBJECT *DeviceObject,
|
|
||||||
IN PCLASS_INIT_DATA InitializationData);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassDeviceControl(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp);
|
|
||||||
|
|
||||||
PVOID NTAPI
|
|
||||||
ScsiClassFindModePage(IN PCHAR ModeSenseBuffer,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN UCHAR PageMode,
|
|
||||||
IN BOOLEAN Use6Byte);
|
|
||||||
|
|
||||||
ULONG NTAPI
|
|
||||||
ScsiClassFindUnclaimedDevices(IN PCLASS_INIT_DATA InitializationData,
|
|
||||||
OUT PSCSI_ADAPTER_BUS_INFO AdapterInformation);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassGetCapabilities(IN PDEVICE_OBJECT PortDeviceObject,
|
|
||||||
OUT PIO_SCSI_CAPABILITIES *PortCapabilities);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassGetInquiryData(IN PDEVICE_OBJECT PortDeviceObject,
|
|
||||||
OUT PSCSI_ADAPTER_BUS_INFO *ConfigInfo);
|
|
||||||
|
|
||||||
ULONG NTAPI
|
|
||||||
ScsiClassInitialize(IN PVOID Argument1,
|
|
||||||
IN PVOID Argument2,
|
|
||||||
IN PCLASS_INIT_DATA InitializationData);
|
|
||||||
|
|
||||||
VOID NTAPI
|
|
||||||
ScsiClassInitializeSrbLookasideList(IN PDEVICE_EXTENSION DeviceExtension,
|
|
||||||
IN ULONG NumberElements);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassInternalIoControl(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp);
|
|
||||||
|
|
||||||
BOOLEAN NTAPI
|
|
||||||
ScsiClassInterpretSenseInfo(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PSCSI_REQUEST_BLOCK Srb,
|
|
||||||
IN UCHAR MajorFunctionCode,
|
|
||||||
IN ULONG IoDeviceCode,
|
|
||||||
IN ULONG RetryCount,
|
|
||||||
OUT NTSTATUS *Status);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassIoComplete(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN PVOID Context);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassIoCompleteAssociated(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN PVOID Context);
|
|
||||||
|
|
||||||
ULONG NTAPI
|
|
||||||
ScsiClassModeSense(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PCHAR ModeSenseBuffer,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN UCHAR PageMode);
|
|
||||||
|
|
||||||
ULONG NTAPI
|
|
||||||
ScsiClassQueryTimeOutRegistryValue(IN PUNICODE_STRING RegistryPath);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassReadDriveCapacity(IN PDEVICE_OBJECT DeviceObject);
|
|
||||||
|
|
||||||
VOID NTAPI
|
|
||||||
ScsiClassReleaseQueue(IN PDEVICE_OBJECT DeviceObject);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassSendSrbAsynchronous(PDEVICE_OBJECT DeviceObject,
|
|
||||||
PSCSI_REQUEST_BLOCK Srb,
|
|
||||||
PIRP Irp,
|
|
||||||
PVOID BufferAddress,
|
|
||||||
ULONG BufferLength,
|
|
||||||
BOOLEAN WriteToDevice);
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
|
||||||
ScsiClassSendSrbSynchronous(PDEVICE_OBJECT DeviceObject,
|
|
||||||
PSCSI_REQUEST_BLOCK Srb,
|
|
||||||
PVOID BufferAddress,
|
|
||||||
ULONG BufferLength,
|
|
||||||
BOOLEAN WriteToDevice);
|
|
||||||
|
|
||||||
VOID NTAPI
|
|
||||||
ScsiClassSplitRequest(IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN ULONG MaximumBytes);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
ScsiClassCheckVerifyComplete(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN PVOID Context
|
|
||||||
);
|
|
||||||
|
|
||||||
/* EOF */
|
|
|
@ -1,374 +0,0 @@
|
||||||
/*++
|
|
||||||
|
|
||||||
Copyright (c) 1991 Microsoft Corporation
|
|
||||||
|
|
||||||
Module Name:
|
|
||||||
|
|
||||||
class.h
|
|
||||||
|
|
||||||
Abstract:
|
|
||||||
|
|
||||||
These are the structures and defines that are used in the
|
|
||||||
SCSI class drivers.
|
|
||||||
|
|
||||||
Author:
|
|
||||||
|
|
||||||
Mike Glass (mglass)
|
|
||||||
Jeff Havens (jhavens)
|
|
||||||
|
|
||||||
Revision History:
|
|
||||||
|
|
||||||
--*/
|
|
||||||
|
|
||||||
#ifndef _CLASS_
|
|
||||||
|
|
||||||
#include <ntdddisk.h>
|
|
||||||
#include <ntddcdrm.h>
|
|
||||||
#include <ntddtape.h>
|
|
||||||
#include <ntddchgr.h>
|
|
||||||
#include <ntddstor.h>
|
|
||||||
#include "ntddscsi.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
// begin_ntminitape
|
|
||||||
|
|
||||||
#if DBG
|
|
||||||
|
|
||||||
#define DebugPrint(x) ScsiDebugPrint x
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define DebugPrint(x)
|
|
||||||
|
|
||||||
#endif // DBG
|
|
||||||
|
|
||||||
// end_ntminitape
|
|
||||||
|
|
||||||
#ifdef POOL_TAGGING
|
|
||||||
#undef ExAllocatePool
|
|
||||||
#undef ExAllocatePoolWithQuota
|
|
||||||
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,'HscS')
|
|
||||||
#define ExAllocatePoolWithQuota(a,b) ExAllocatePoolWithQuotaTag(a,b,'HscS')
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MAXIMUM_RETRIES 4
|
|
||||||
|
|
||||||
typedef
|
|
||||||
VOID
|
|
||||||
(*PCLASS_ERROR) (
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PSCSI_REQUEST_BLOCK Srb,
|
|
||||||
IN OUT NTSTATUS *Status,
|
|
||||||
IN OUT BOOLEAN *Retry
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef struct _DEVICE_EXTENSION {
|
|
||||||
|
|
||||||
//
|
|
||||||
// Back pointer to device object
|
|
||||||
//
|
|
||||||
|
|
||||||
PDEVICE_OBJECT DeviceObject;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Pointer to port device object
|
|
||||||
//
|
|
||||||
|
|
||||||
PDEVICE_OBJECT PortDeviceObject;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Length of partition in bytes
|
|
||||||
//
|
|
||||||
|
|
||||||
LARGE_INTEGER PartitionLength;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Number of bytes before start of partition
|
|
||||||
//
|
|
||||||
|
|
||||||
LARGE_INTEGER StartingOffset;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bytes to skew all requests, since DM Driver has been placed on an IDE drive.
|
|
||||||
//
|
|
||||||
|
|
||||||
ULONG DMByteSkew;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Sectors to skew all requests.
|
|
||||||
//
|
|
||||||
|
|
||||||
ULONG DMSkew;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Flag to indicate whether DM driver has been located on an IDE drive.
|
|
||||||
//
|
|
||||||
|
|
||||||
BOOLEAN DMActive;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Pointer to the specific class error routine.
|
|
||||||
//
|
|
||||||
|
|
||||||
PCLASS_ERROR ClassError;
|
|
||||||
|
|
||||||
//
|
|
||||||
// SCSI port driver capabilities
|
|
||||||
//
|
|
||||||
|
|
||||||
PIO_SCSI_CAPABILITIES PortCapabilities;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Buffer for drive parameters returned in IO device control.
|
|
||||||
//
|
|
||||||
|
|
||||||
PDISK_GEOMETRY DiskGeometry;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Back pointer to device object of physical device
|
|
||||||
//
|
|
||||||
|
|
||||||
PDEVICE_OBJECT PhysicalDevice;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Request Sense Buffer
|
|
||||||
//
|
|
||||||
|
|
||||||
PSENSE_DATA SenseData;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Request timeout in seconds;
|
|
||||||
//
|
|
||||||
|
|
||||||
ULONG TimeOutValue;
|
|
||||||
|
|
||||||
//
|
|
||||||
// System device number
|
|
||||||
//
|
|
||||||
|
|
||||||
ULONG DeviceNumber;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Add default Srb Flags.
|
|
||||||
//
|
|
||||||
|
|
||||||
ULONG SrbFlags;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Total number of SCSI protocol errors on the device.
|
|
||||||
//
|
|
||||||
|
|
||||||
ULONG ErrorCount;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Spinlock for split requests
|
|
||||||
//
|
|
||||||
|
|
||||||
KSPIN_LOCK SplitRequestSpinLock;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Zone header and spin lock for zoned SRB requests.
|
|
||||||
//
|
|
||||||
|
|
||||||
PZONE_HEADER SrbZone;
|
|
||||||
|
|
||||||
PKSPIN_LOCK SrbZoneSpinLock;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Lock count for removable media.
|
|
||||||
//
|
|
||||||
|
|
||||||
LONG LockCount;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Scsi port number
|
|
||||||
//
|
|
||||||
|
|
||||||
UCHAR PortNumber;
|
|
||||||
|
|
||||||
//
|
|
||||||
// SCSI path id
|
|
||||||
//
|
|
||||||
|
|
||||||
UCHAR PathId;
|
|
||||||
|
|
||||||
//
|
|
||||||
// SCSI bus target id
|
|
||||||
//
|
|
||||||
|
|
||||||
UCHAR TargetId;
|
|
||||||
|
|
||||||
//
|
|
||||||
// SCSI bus logical unit number
|
|
||||||
//
|
|
||||||
|
|
||||||
UCHAR Lun;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Log2 of sector size
|
|
||||||
//
|
|
||||||
|
|
||||||
UCHAR SectorShift;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Flag to indicate that the device has write caching enabled.
|
|
||||||
//
|
|
||||||
|
|
||||||
BOOLEAN WriteCache;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build SCSI 1 or SCSI 2 CDBs
|
|
||||||
//
|
|
||||||
|
|
||||||
BOOLEAN UseScsi1;
|
|
||||||
|
|
||||||
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Define context structure for asynchronous completions.
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _COMPLETION_CONTEXT {
|
|
||||||
PDEVICE_OBJECT DeviceObject;
|
|
||||||
SCSI_REQUEST_BLOCK Srb;
|
|
||||||
}COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT;
|
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassGetCapabilities(
|
|
||||||
IN PDEVICE_OBJECT PortDeviceObject,
|
|
||||||
OUT PIO_SCSI_CAPABILITIES *PortCapabilities
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassGetInquiryData(
|
|
||||||
IN PDEVICE_OBJECT PortDeviceObject,
|
|
||||||
IN PSCSI_ADAPTER_BUS_INFO *ConfigInfo
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassReadDriveCapacity(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ScsiClassReleaseQueue(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassRemoveDevice(
|
|
||||||
IN PDEVICE_OBJECT PortDeviceObject,
|
|
||||||
IN UCHAR PathId,
|
|
||||||
IN UCHAR TargetId,
|
|
||||||
IN UCHAR Lun
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassAsynchronousCompletion(
|
|
||||||
PDEVICE_OBJECT DeviceObject,
|
|
||||||
PIRP Irp,
|
|
||||||
PVOID Context
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ScsiClassSplitRequest(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN ULONG MaximumBytes
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassDeviceControl(
|
|
||||||
PDEVICE_OBJECT DeviceObject,
|
|
||||||
PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassIoComplete(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN PVOID Context
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassIoCompleteAssociated(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN PVOID Context
|
|
||||||
);
|
|
||||||
|
|
||||||
BOOLEAN
|
|
||||||
ScsiClassInterpretSenseInfo(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PSCSI_REQUEST_BLOCK Srb,
|
|
||||||
IN UCHAR MajorFunctionCode,
|
|
||||||
IN ULONG IoDeviceCode,
|
|
||||||
IN ULONG RetryCount,
|
|
||||||
OUT NTSTATUS *Status
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassSendSrbSynchronous(
|
|
||||||
PDEVICE_OBJECT DeviceObject,
|
|
||||||
PSCSI_REQUEST_BLOCK Srb,
|
|
||||||
PVOID BufferAddress,
|
|
||||||
ULONG BufferLength,
|
|
||||||
BOOLEAN WriteToDevice
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassSendSrbAsynchronous(
|
|
||||||
PDEVICE_OBJECT DeviceObject,
|
|
||||||
PSCSI_REQUEST_BLOCK Srb,
|
|
||||||
PIRP Irp,
|
|
||||||
PVOID BufferAddress,
|
|
||||||
ULONG BufferLength,
|
|
||||||
BOOLEAN WriteToDevice
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ScsiClassBuildRequest(
|
|
||||||
PDEVICE_OBJECT DeviceObject,
|
|
||||||
PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
ULONG
|
|
||||||
ScsiClassModeSense(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PCHAR ModeSenseBuffer,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN UCHAR PageMode
|
|
||||||
);
|
|
||||||
|
|
||||||
BOOLEAN
|
|
||||||
ScsiClassModeSelect(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PCHAR ModeSelectBuffer,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN BOOLEAN SavePage
|
|
||||||
);
|
|
||||||
|
|
||||||
PVOID
|
|
||||||
ScsiClassFindModePage(
|
|
||||||
IN PCHAR ModeSenseBuffer,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN UCHAR PageMode
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassClaimDevice(
|
|
||||||
IN PDEVICE_OBJECT PortDeviceObject,
|
|
||||||
IN PSCSI_INQUIRY_DATA LunInfo,
|
|
||||||
IN BOOLEAN Release,
|
|
||||||
OUT PDEVICE_OBJECT *NewPortDeviceObject OPTIONAL
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiClassInternalIoControl (
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif /* _CLASS_ */
|
|
||||||
|
|
|
@ -1,495 +0,0 @@
|
||||||
/*++
|
|
||||||
|
|
||||||
Copyright (C) Microsoft Corporation, 1999 - 1999
|
|
||||||
|
|
||||||
Module Name:
|
|
||||||
|
|
||||||
ide.h
|
|
||||||
|
|
||||||
Abstract:
|
|
||||||
|
|
||||||
These are the structures and defines that are used in the
|
|
||||||
PCI IDE mini drivers.
|
|
||||||
|
|
||||||
Revision History:
|
|
||||||
|
|
||||||
--*/
|
|
||||||
|
|
||||||
|
|
||||||
#if !defined (___ide_h___)
|
|
||||||
#define ___ide_h___
|
|
||||||
|
|
||||||
#include "ideuser.h"
|
|
||||||
|
|
||||||
#define MAX_IDE_DEVICE 2
|
|
||||||
#define MAX_IDE_LINE 2
|
|
||||||
#define MAX_IDE_CHANNEL 2
|
|
||||||
|
|
||||||
//
|
|
||||||
// Some miniports need this structure.
|
|
||||||
// IdentifyData is passed to the miniport in
|
|
||||||
// the XfermodeSelect structure
|
|
||||||
//
|
|
||||||
|
|
||||||
//
|
|
||||||
// IDENTIFY data
|
|
||||||
//
|
|
||||||
|
|
||||||
#pragma pack (1)
|
|
||||||
typedef struct _IDENTIFY_DATA {
|
|
||||||
USHORT GeneralConfiguration; // 00 00
|
|
||||||
USHORT NumCylinders; // 02 1
|
|
||||||
USHORT Reserved1; // 04 2
|
|
||||||
USHORT NumHeads; // 06 3
|
|
||||||
USHORT UnformattedBytesPerTrack; // 08 4
|
|
||||||
USHORT UnformattedBytesPerSector; // 0A 5
|
|
||||||
USHORT NumSectorsPerTrack; // 0C 6
|
|
||||||
USHORT VendorUnique1[3]; // 0E 7-9
|
|
||||||
UCHAR SerialNumber[20]; // 14 10-19
|
|
||||||
USHORT BufferType; // 28 20
|
|
||||||
USHORT BufferSectorSize; // 2A 21
|
|
||||||
USHORT NumberOfEccBytes; // 2C 22
|
|
||||||
UCHAR FirmwareRevision[8]; // 2E 23-26
|
|
||||||
UCHAR ModelNumber[40]; // 36 27-46
|
|
||||||
UCHAR MaximumBlockTransfer; // 5E 47
|
|
||||||
UCHAR VendorUnique2; // 5F
|
|
||||||
USHORT DoubleWordIo; // 60 48
|
|
||||||
USHORT Capabilities; // 62 49
|
|
||||||
USHORT Reserved2; // 64 50
|
|
||||||
UCHAR VendorUnique3; // 66 51
|
|
||||||
UCHAR PioCycleTimingMode; // 67
|
|
||||||
UCHAR VendorUnique4; // 68 52
|
|
||||||
UCHAR DmaCycleTimingMode; // 69
|
|
||||||
USHORT TranslationFieldsValid:3; // 6A 53
|
|
||||||
USHORT Reserved3:13;
|
|
||||||
USHORT NumberOfCurrentCylinders; // 6C 54
|
|
||||||
USHORT NumberOfCurrentHeads; // 6E 55
|
|
||||||
USHORT CurrentSectorsPerTrack; // 70 56
|
|
||||||
ULONG CurrentSectorCapacity; // 72 57-58
|
|
||||||
USHORT CurrentMultiSectorSetting; // 59
|
|
||||||
ULONG UserAddressableSectors; // 60-61
|
|
||||||
USHORT SingleWordDMASupport : 8; // 62
|
|
||||||
USHORT SingleWordDMAActive : 8;
|
|
||||||
USHORT MultiWordDMASupport : 8; // 63
|
|
||||||
USHORT MultiWordDMAActive : 8;
|
|
||||||
USHORT AdvancedPIOModes : 8; // 64
|
|
||||||
USHORT Reserved4 : 8;
|
|
||||||
USHORT MinimumMWXferCycleTime; // 65
|
|
||||||
USHORT RecommendedMWXferCycleTime; // 66
|
|
||||||
USHORT MinimumPIOCycleTime; // 67
|
|
||||||
USHORT MinimumPIOCycleTimeIORDY; // 68
|
|
||||||
USHORT Reserved5[11]; // 69-79
|
|
||||||
USHORT MajorRevision; // 80
|
|
||||||
USHORT MinorRevision; // 81
|
|
||||||
USHORT Reserved6; // 82
|
|
||||||
USHORT CommandSetSupport; // 83
|
|
||||||
USHORT Reserved6a[2]; // 84-85
|
|
||||||
USHORT CommandSetActive; // 86
|
|
||||||
USHORT Reserved6b; // 87
|
|
||||||
USHORT UltraDMASupport : 8; // 88
|
|
||||||
USHORT UltraDMAActive : 8; //
|
|
||||||
USHORT Reserved7[11]; // 89-99
|
|
||||||
ULONG Max48BitLBA[2]; // 100-103
|
|
||||||
USHORT Reserved7a[22]; // 104-125
|
|
||||||
USHORT LastLun:3; // 126
|
|
||||||
USHORT Reserved8:13;
|
|
||||||
USHORT MediaStatusNotification:2; // 127
|
|
||||||
USHORT Reserved9:6;
|
|
||||||
USHORT DeviceWriteProtect:1;
|
|
||||||
USHORT Reserved10:7;
|
|
||||||
USHORT Reserved11[128]; // 128-255
|
|
||||||
} IDENTIFY_DATA, *PIDENTIFY_DATA;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Identify data without the Reserved4.
|
|
||||||
//
|
|
||||||
|
|
||||||
//typedef struct _IDENTIFY_DATA2 {
|
|
||||||
// USHORT GeneralConfiguration; // 00 00
|
|
||||||
// USHORT NumCylinders; // 02 1
|
|
||||||
// USHORT Reserved1; // 04 2
|
|
||||||
// USHORT NumHeads; // 06 3
|
|
||||||
// USHORT UnformattedBytesPerTrack; // 08 4
|
|
||||||
// USHORT UnformattedBytesPerSector; // 0A 5
|
|
||||||
// USHORT NumSectorsPerTrack; // 0C 6
|
|
||||||
// USHORT VendorUnique1[3]; // 0E 7-9
|
|
||||||
// UCHAR SerialNumber[20]; // 14 10-19
|
|
||||||
// USHORT BufferType; // 28 20
|
|
||||||
// USHORT BufferSectorSize; // 2A 21
|
|
||||||
// USHORT NumberOfEccBytes; // 2C 22
|
|
||||||
// UCHAR FirmwareRevision[8]; // 2E 23-26
|
|
||||||
// UCHAR ModelNumber[40]; // 36 27-46
|
|
||||||
// UCHAR MaximumBlockTransfer; // 5E 47
|
|
||||||
// UCHAR VendorUnique2; // 5F
|
|
||||||
// USHORT DoubleWordIo; // 60 48
|
|
||||||
// USHORT Capabilities; // 62 49
|
|
||||||
// USHORT Reserved2; // 64 50
|
|
||||||
// UCHAR VendorUnique3; // 66 51
|
|
||||||
// UCHAR PioCycleTimingMode; // 67
|
|
||||||
// UCHAR VendorUnique4; // 68 52
|
|
||||||
// UCHAR DmaCycleTimingMode; // 69
|
|
||||||
// USHORT TranslationFieldsValid:3; // 6A 53
|
|
||||||
// USHORT Reserved3:13;
|
|
||||||
// USHORT NumberOfCurrentCylinders; // 6C 54
|
|
||||||
// USHORT NumberOfCurrentHeads; // 6E 55
|
|
||||||
// USHORT CurrentSectorsPerTrack; // 70 56
|
|
||||||
// ULONG CurrentSectorCapacity; // 72 57-58
|
|
||||||
// USHORT CurrentMultiSectorSetting; // 59
|
|
||||||
// ULONG UserAddressableSectors; // 60-61
|
|
||||||
// USHORT SingleWordDMASupport : 8; // 62
|
|
||||||
// USHORT SingleWordDMAActive : 8;
|
|
||||||
// USHORT MultiWordDMASupport : 8; // 63
|
|
||||||
// USHORT MultiWordDMAActive : 8;
|
|
||||||
// USHORT AdvancedPIOModes : 8; // 64
|
|
||||||
// USHORT Reserved4 : 8;
|
|
||||||
// USHORT MinimumMWXferCycleTime; // 65
|
|
||||||
// USHORT RecommendedMWXferCycleTime; // 66
|
|
||||||
// USHORT MinimumPIOCycleTime; // 67
|
|
||||||
// USHORT MinimumPIOCycleTimeIORDY; // 68
|
|
||||||
// USHORT Reserved5[11]; // 69-79
|
|
||||||
// USHORT MajorRevision; // 80
|
|
||||||
// USHORT MinorRevision; // 81
|
|
||||||
// USHORT Reserved6[6]; // 82-87
|
|
||||||
// USHORT UltraDMASupport : 8; // 88
|
|
||||||
// USHORT UltraDMAActive : 8; //
|
|
||||||
// USHORT Reserved7[37]; // 89-125
|
|
||||||
// USHORT LastLun:3; // 126
|
|
||||||
// USHORT Reserved8:13;
|
|
||||||
// USHORT MediaStatusNotification:2; // 127
|
|
||||||
// USHORT Reserved9:6;
|
|
||||||
// USHORT DeviceWriteProtect:1;
|
|
||||||
// USHORT Reserved10:7;
|
|
||||||
//} IDENTIFY_DATA2, *PIDENTIFY_DATA2;
|
|
||||||
#pragma pack ()
|
|
||||||
|
|
||||||
#define IDENTIFY_DATA_SIZE sizeof(IDENTIFY_DATA)
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// The structure is passed to pci ide mini driver
|
|
||||||
// TransferModeSelect callback for selecting
|
|
||||||
// proper transfer mode the the devices connected
|
|
||||||
// to the given IDE channel
|
|
||||||
//
|
|
||||||
typedef struct _PCIIDE_TRANSFER_MODE_SELECT {
|
|
||||||
|
|
||||||
//
|
|
||||||
// Input Parameters
|
|
||||||
//
|
|
||||||
|
|
||||||
//
|
|
||||||
// IDE Channel Number. 0 or 1
|
|
||||||
//
|
|
||||||
ULONG Channel;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicate whether devices are present
|
|
||||||
//
|
|
||||||
BOOLEAN DevicePresent[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicate whether devices are ATA harddisk
|
|
||||||
//
|
|
||||||
BOOLEAN FixedDisk[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicate whether devices support IO Ready Line
|
|
||||||
//
|
|
||||||
BOOLEAN IoReadySupported[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicate the data transfer modes devices support
|
|
||||||
//
|
|
||||||
ULONG DeviceTransferModeSupported[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicate devices' best timings for PIO, single word DMA,
|
|
||||||
// multiword DMA, and Ultra DMA modes
|
|
||||||
//
|
|
||||||
ULONG BestPioCycleTime[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
ULONG BestSwDmaCycleTime[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
ULONG BestMwDmaCycleTime[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
ULONG BestUDmaCycleTime[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicate devices' current data transfer modes
|
|
||||||
//
|
|
||||||
ULONG DeviceTransferModeCurrent[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
|
|
||||||
//
|
|
||||||
// The user's choice. This will allow pciidex to
|
|
||||||
// default to a transfer mode indicated by the mini driver
|
|
||||||
//
|
|
||||||
ULONG UserChoiceTransferMode[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
|
|
||||||
//
|
|
||||||
// This enables UDMA66 on the intel chipsets
|
|
||||||
//
|
|
||||||
ULONG EnableUDMA66;
|
|
||||||
|
|
||||||
//
|
|
||||||
//Some miniports need this
|
|
||||||
// The miniport will save this data in their deviceExtension
|
|
||||||
//
|
|
||||||
IDENTIFY_DATA IdentifyData[MAX_IDE_DEVICE];
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Output Parameters
|
|
||||||
//
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicate devices' data transfer modes chosen by
|
|
||||||
// the pcii ide mini drive
|
|
||||||
//
|
|
||||||
ULONG DeviceTransferModeSelected[MAX_IDE_DEVICE * MAX_IDE_LINE];
|
|
||||||
|
|
||||||
//
|
|
||||||
// Transfermode timings
|
|
||||||
//
|
|
||||||
PULONG TransferModeTimingTable;
|
|
||||||
ULONG TransferModeTableLength;
|
|
||||||
|
|
||||||
} PCIIDE_TRANSFER_MODE_SELECT, *PPCIIDE_TRANSFER_MODE_SELECT;
|
|
||||||
|
|
||||||
//
|
|
||||||
// possible ide channel state
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
ChannelDisabled = 0,
|
|
||||||
ChannelEnabled,
|
|
||||||
ChannelStateUnknown
|
|
||||||
} IDE_CHANNEL_STATE;
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Prototype for different PCI IDE mini driver
|
|
||||||
// callbacks
|
|
||||||
//
|
|
||||||
typedef IDE_CHANNEL_STATE
|
|
||||||
(*PCIIDE_CHANNEL_ENABLED) (
|
|
||||||
IN PVOID DeviceExtension,
|
|
||||||
IN ULONG Channel
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef BOOLEAN
|
|
||||||
(*PCIIDE_SYNC_ACCESS_REQUIRED) (
|
|
||||||
IN PVOID DeviceExtension
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef NTSTATUS
|
|
||||||
(*PCIIDE_TRANSFER_MODE_SELECT_FUNC) (
|
|
||||||
IN PVOID DeviceExtension,
|
|
||||||
IN OUT PPCIIDE_TRANSFER_MODE_SELECT TransferModeSelect
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef ULONG
|
|
||||||
(*PCIIDE_USEDMA_FUNC)(
|
|
||||||
IN PVOID deviceExtension,
|
|
||||||
IN PVOID cdbCmd,
|
|
||||||
IN UCHAR targetID
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef NTSTATUS
|
|
||||||
(*PCIIDE_UDMA_MODES_SUPPORTED) (
|
|
||||||
IDENTIFY_DATA IdentifyData,
|
|
||||||
PULONG BestXferMode,
|
|
||||||
PULONG CurrentMode
|
|
||||||
);
|
|
||||||
//
|
|
||||||
// This structure is for the PCI IDE mini driver to
|
|
||||||
// return its properties
|
|
||||||
//
|
|
||||||
typedef struct _IDE_CONTROLLER_PROPERTIES {
|
|
||||||
|
|
||||||
//
|
|
||||||
// sizeof (IDE_CONTROLLER_PROPERTIES)
|
|
||||||
//
|
|
||||||
ULONG Size;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicate the amount of memory PCI IDE mini driver
|
|
||||||
// needs for its private data
|
|
||||||
//
|
|
||||||
ULONG ExtensionSize;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Indicate all the data transfer modes the PCI IDE
|
|
||||||
// controller supports
|
|
||||||
//
|
|
||||||
ULONG SupportedTransferMode[MAX_IDE_CHANNEL][MAX_IDE_DEVICE];
|
|
||||||
|
|
||||||
//
|
|
||||||
// callback to query whether a IDE channel is enabled
|
|
||||||
//
|
|
||||||
PCIIDE_CHANNEL_ENABLED PciIdeChannelEnabled;
|
|
||||||
|
|
||||||
//
|
|
||||||
// callback to query whether both IDE channels requires
|
|
||||||
// synchronized access. (one channel at a time)
|
|
||||||
//
|
|
||||||
PCIIDE_SYNC_ACCESS_REQUIRED PciIdeSyncAccessRequired;
|
|
||||||
|
|
||||||
//
|
|
||||||
// callback to select proper transfer modes for the
|
|
||||||
// given devices
|
|
||||||
//
|
|
||||||
PCIIDE_TRANSFER_MODE_SELECT_FUNC PciIdeTransferModeSelect;
|
|
||||||
|
|
||||||
//
|
|
||||||
// at the end of a ATA data transfer, ignores busmaster
|
|
||||||
// status active bit. Normally, it should be FALSE
|
|
||||||
//
|
|
||||||
BOOLEAN IgnoreActiveBitForAtaDevice;
|
|
||||||
|
|
||||||
//
|
|
||||||
// always clear the busmaster interrupt on every interrupt
|
|
||||||
// generated by the device. Normally, it should be FALSE
|
|
||||||
//
|
|
||||||
BOOLEAN AlwaysClearBusMasterInterrupt;
|
|
||||||
|
|
||||||
//
|
|
||||||
// callback to determine whether DMA should be used or not
|
|
||||||
// called for every IO
|
|
||||||
//
|
|
||||||
PCIIDE_USEDMA_FUNC PciIdeUseDma;
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// if the miniport needs a different alignment
|
|
||||||
//
|
|
||||||
ULONG AlignmentRequirement;
|
|
||||||
|
|
||||||
ULONG DefaultPIO;
|
|
||||||
|
|
||||||
//
|
|
||||||
// retrieves the supported udma modes from the Identify data
|
|
||||||
//
|
|
||||||
PCIIDE_UDMA_MODES_SUPPORTED PciIdeUdmaModesSupported;
|
|
||||||
|
|
||||||
} IDE_CONTROLLER_PROPERTIES, *PIDE_CONTROLLER_PROPERTIES;
|
|
||||||
|
|
||||||
//
|
|
||||||
// callback to query PCI IDE controller properties
|
|
||||||
//
|
|
||||||
typedef
|
|
||||||
NTSTATUS (*PCONTROLLER_PROPERTIES) (
|
|
||||||
IN PVOID DeviceExtension,
|
|
||||||
IN PIDE_CONTROLLER_PROPERTIES ControllerProperties
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// To initialize PCI IDE mini driver
|
|
||||||
//
|
|
||||||
NTSTATUS
|
|
||||||
PciIdeXInitialize(
|
|
||||||
IN PDRIVER_OBJECT DriverObject,
|
|
||||||
IN PUNICODE_STRING RegistryPath,
|
|
||||||
IN PCONTROLLER_PROPERTIES PciIdeGetControllerProperties,
|
|
||||||
IN ULONG ExtensionSize
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// To query PCI IDE config space data
|
|
||||||
//
|
|
||||||
NTSTATUS
|
|
||||||
PciIdeXGetBusData(
|
|
||||||
IN PVOID DeviceExtension,
|
|
||||||
IN PVOID Buffer,
|
|
||||||
IN ULONG ConfigDataOffset,
|
|
||||||
IN ULONG BufferLength
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// To save PCI IDE config space data
|
|
||||||
//
|
|
||||||
NTSTATUS
|
|
||||||
PciIdeXSetBusData(
|
|
||||||
IN PVOID DeviceExtension,
|
|
||||||
IN PVOID Buffer,
|
|
||||||
IN PVOID DataMask,
|
|
||||||
IN ULONG ConfigDataOffset,
|
|
||||||
IN ULONG BufferLength
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
#pragma pack(1)
|
|
||||||
typedef struct _PCIIDE_CONFIG_HEADER {
|
|
||||||
|
|
||||||
USHORT VendorID; // (ro)
|
|
||||||
USHORT DeviceID; // (ro)
|
|
||||||
|
|
||||||
//
|
|
||||||
// Command
|
|
||||||
//
|
|
||||||
union {
|
|
||||||
|
|
||||||
struct {
|
|
||||||
|
|
||||||
USHORT IoAccessEnable:1; // Device control
|
|
||||||
USHORT MemAccessEnable:1;
|
|
||||||
USHORT MasterEnable:1;
|
|
||||||
USHORT SpecialCycle:1;
|
|
||||||
USHORT MemWriteInvalidateEnable:1;
|
|
||||||
USHORT VgaPaletteSnoopEnable:1;
|
|
||||||
USHORT ParityErrorResponse:1;
|
|
||||||
USHORT WaitCycleEnable:1;
|
|
||||||
USHORT SystemErrorEnable:1;
|
|
||||||
USHORT FastBackToBackEnable:1;
|
|
||||||
USHORT CommandReserved:6;
|
|
||||||
} b;
|
|
||||||
|
|
||||||
USHORT w;
|
|
||||||
|
|
||||||
} Command;
|
|
||||||
|
|
||||||
|
|
||||||
USHORT Status;
|
|
||||||
UCHAR RevisionID; // (ro)
|
|
||||||
|
|
||||||
//
|
|
||||||
// Program Interface
|
|
||||||
//
|
|
||||||
UCHAR Chan0OpMode:1;
|
|
||||||
UCHAR Chan0Programmable:1;
|
|
||||||
UCHAR Chan1OpMode:1;
|
|
||||||
UCHAR Chan1Programmable:1;
|
|
||||||
UCHAR ProgIfReserved:3;
|
|
||||||
UCHAR MasterIde:1;
|
|
||||||
|
|
||||||
UCHAR SubClass; // (ro)
|
|
||||||
UCHAR BaseClass; // (ro)
|
|
||||||
UCHAR CacheLineSize; // (ro+)
|
|
||||||
UCHAR LatencyTimer; // (ro+)
|
|
||||||
UCHAR HeaderType; // (ro)
|
|
||||||
UCHAR BIST; // Built in self test
|
|
||||||
|
|
||||||
struct _PCI_HEADER_TYPE_0 type0;
|
|
||||||
|
|
||||||
} PCIIDE_CONFIG_HEADER, *PPCIIDE_CONFIG_HEADER;
|
|
||||||
#pragma pack()
|
|
||||||
|
|
||||||
//
|
|
||||||
// Debug Print
|
|
||||||
//
|
|
||||||
#if DBG
|
|
||||||
|
|
||||||
VOID
|
|
||||||
PciIdeXDebugPrint(
|
|
||||||
_In_ ULONG DebugPrintLevel,
|
|
||||||
_In_z_ _Printf_format_string_ PCCHAR DebugMessage,
|
|
||||||
...
|
|
||||||
);
|
|
||||||
|
|
||||||
#define PciIdeXDebugPrint(x) PciIdeXDebugPrint x
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define PciIdeXDebugPrint(x)
|
|
||||||
|
|
||||||
#endif // DBG
|
|
||||||
|
|
||||||
#endif // ___ide_h___
|
|
||||||
|
|
|
@ -1,132 +0,0 @@
|
||||||
/*++
|
|
||||||
|
|
||||||
Copyright (C) Microsoft Corporation, 1999 - 1999
|
|
||||||
|
|
||||||
Module Name:
|
|
||||||
|
|
||||||
ideuser.h
|
|
||||||
|
|
||||||
Abstract:
|
|
||||||
|
|
||||||
These are the structures and defines that are used in the
|
|
||||||
PCI IDE mini drivers.
|
|
||||||
|
|
||||||
Revision History:
|
|
||||||
|
|
||||||
--*/
|
|
||||||
|
|
||||||
#if !defined (___ideuser_h___)
|
|
||||||
#define ___ideuser_h___
|
|
||||||
|
|
||||||
|
|
||||||
#define PIO_MODE0 (1 << 0)
|
|
||||||
#define PIO_MODE1 (1 << 1)
|
|
||||||
#define PIO_MODE2 (1 << 2)
|
|
||||||
#define PIO_MODE3 (1 << 3)
|
|
||||||
#define PIO_MODE4 (1 << 4)
|
|
||||||
|
|
||||||
#define SWDMA_MODE0 (1 << 5)
|
|
||||||
#define SWDMA_MODE1 (1 << 6)
|
|
||||||
#define SWDMA_MODE2 (1 << 7)
|
|
||||||
|
|
||||||
#define MWDMA_MODE0 (1 << 8)
|
|
||||||
#define MWDMA_MODE1 (1 << 9)
|
|
||||||
#define MWDMA_MODE2 (1 << 10)
|
|
||||||
|
|
||||||
#define UDMA_MODE0 (1 << 11)
|
|
||||||
#define UDMA_MODE1 (1 << 12)
|
|
||||||
#define UDMA_MODE2 (1 << 13)
|
|
||||||
#define UDMA_MODE3 (1 << 14)
|
|
||||||
#define UDMA_MODE4 (1 << 15)
|
|
||||||
#define UDMA_MODE5 (1 << 16)
|
|
||||||
|
|
||||||
#define PIO_SUPPORT (PIO_MODE0 | PIO_MODE1 | PIO_MODE2 | PIO_MODE3 | PIO_MODE4)
|
|
||||||
#define SWDMA_SUPPORT (SWDMA_MODE0 | SWDMA_MODE1 | SWDMA_MODE2)
|
|
||||||
#define MWDMA_SUPPORT (MWDMA_MODE0 | MWDMA_MODE1 | MWDMA_MODE2)
|
|
||||||
#define UDMA33_SUPPORT (UDMA_MODE0 | UDMA_MODE1 | UDMA_MODE2)
|
|
||||||
#define UDMA66_SUPPORT (UDMA_MODE3 | UDMA_MODE4)
|
|
||||||
#define UDMA100_SUPPORT (UDMA_MODE5 )
|
|
||||||
#define UDMA_SUPPORT (UNINITIALIZED_TRANSFER_MODE & (~(PIO_SUPPORT | SWDMA_SUPPORT | MWDMA_SUPPORT)))
|
|
||||||
|
|
||||||
#define DMA_SUPPORT (SWDMA_SUPPORT | MWDMA_SUPPORT | UDMA_SUPPORT)
|
|
||||||
#define ALL_MODE_SUPPORT (PIO_SUPPORT | DMA_SUPPORT)
|
|
||||||
|
|
||||||
#define PIO0 0
|
|
||||||
#define PIO1 1
|
|
||||||
#define PIO2 2
|
|
||||||
#define PIO3 3
|
|
||||||
#define PIO4 4
|
|
||||||
#define SWDMA0 5
|
|
||||||
#define SWDMA1 6
|
|
||||||
#define SWDMA2 7
|
|
||||||
#define MWDMA0 8
|
|
||||||
#define MWDMA1 9
|
|
||||||
#define MWDMA2 10
|
|
||||||
#define UDMA0 11
|
|
||||||
|
|
||||||
#define MAX_XFER_MODE 17
|
|
||||||
#define UNINITIALIZED_CYCLE_TIME 0xffffffff
|
|
||||||
#define UNINITIALIZED_TRANSFER_MODE 0x7fffffff
|
|
||||||
#define IS_DEFAULT(mode) (!(mode & 0x80000000))
|
|
||||||
|
|
||||||
#define GenTransferModeMask(i, mode) {\
|
|
||||||
ULONG temp=0xffffffff; \
|
|
||||||
mode |= (temp >> (31-(i)));\
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// mode should not be 0
|
|
||||||
//
|
|
||||||
#define GetHighestTransferMode(mode, i) {\
|
|
||||||
ULONG temp=(mode); \
|
|
||||||
ASSERT(temp); \
|
|
||||||
i=0; \
|
|
||||||
while ( temp) { \
|
|
||||||
temp = (temp >> 1);\
|
|
||||||
i++;\
|
|
||||||
} \
|
|
||||||
i--; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define GetHighestDMATransferMode(mode, i) {\
|
|
||||||
ULONG temp=mode >> 5;\
|
|
||||||
i=5; \
|
|
||||||
while ( temp) { \
|
|
||||||
temp = (temp >> 1); \
|
|
||||||
i++; \
|
|
||||||
} \
|
|
||||||
i--; \
|
|
||||||
}
|
|
||||||
#define GetHighestPIOTransferMode(mode, i) { \
|
|
||||||
ULONG temp = (mode & PIO_SUPPORT); \
|
|
||||||
i=0; \
|
|
||||||
temp = temp >> 1; \
|
|
||||||
while (temp) { \
|
|
||||||
temp = temp >> 1; \
|
|
||||||
i++; \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SetDefaultTiming(timingTable, length) {\
|
|
||||||
timingTable[0]=PIO_MODE0_CYCLE_TIME; \
|
|
||||||
timingTable[1]=PIO_MODE1_CYCLE_TIME; \
|
|
||||||
timingTable[2]=PIO_MODE2_CYCLE_TIME; \
|
|
||||||
timingTable[3]=PIO_MODE3_CYCLE_TIME; \
|
|
||||||
timingTable[4]=PIO_MODE4_CYCLE_TIME; \
|
|
||||||
timingTable[5]=SWDMA_MODE0_CYCLE_TIME; \
|
|
||||||
timingTable[6]=SWDMA_MODE1_CYCLE_TIME; \
|
|
||||||
timingTable[7]=SWDMA_MODE2_CYCLE_TIME; \
|
|
||||||
timingTable[8]=MWDMA_MODE0_CYCLE_TIME; \
|
|
||||||
timingTable[9]=MWDMA_MODE1_CYCLE_TIME; \
|
|
||||||
timingTable[10]=MWDMA_MODE2_CYCLE_TIME; \
|
|
||||||
timingTable[11]=UDMA_MODE0_CYCLE_TIME; \
|
|
||||||
timingTable[12]=UDMA_MODE1_CYCLE_TIME; \
|
|
||||||
timingTable[13]=UDMA_MODE2_CYCLE_TIME; \
|
|
||||||
timingTable[14]=UDMA_MODE3_CYCLE_TIME; \
|
|
||||||
timingTable[15]=UDMA_MODE4_CYCLE_TIME; \
|
|
||||||
timingTable[16]=UDMA_MODE5_CYCLE_TIME; \
|
|
||||||
length = MAX_XFER_MODE; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // ___ideuser_h___
|
|
||||||
|
|
|
@ -1,115 +0,0 @@
|
||||||
/*++
|
|
||||||
|
|
||||||
Copyright (c) 1992 Microsoft Corporation
|
|
||||||
|
|
||||||
Module Name:
|
|
||||||
|
|
||||||
physlogi.h
|
|
||||||
|
|
||||||
Abstract:
|
|
||||||
|
|
||||||
This file contains structures and defines that are used
|
|
||||||
specifically for the tape drivers. Contains #define's,
|
|
||||||
function protypes, etc. for use in calling functions in
|
|
||||||
physlogi.c that do physical to pseudo-logical and pseudo-
|
|
||||||
logical to physical tape block address/position translation.
|
|
||||||
|
|
||||||
Author:
|
|
||||||
|
|
||||||
Mike Colandreo (Maynard)
|
|
||||||
|
|
||||||
Revision History:
|
|
||||||
|
|
||||||
--*/
|
|
||||||
|
|
||||||
// begin_ntminitape
|
|
||||||
|
|
||||||
//
|
|
||||||
// defines for QIC tape density codes
|
|
||||||
//
|
|
||||||
|
|
||||||
#define QIC_XX 0 // ????
|
|
||||||
#define QIC_24 5 // 0x05
|
|
||||||
#define QIC_120 15 // 0x0F
|
|
||||||
#define QIC_150 16 // 0x10
|
|
||||||
#define QIC_525 17 // 0x11
|
|
||||||
#define QIC_1350 18 // 0x12
|
|
||||||
#define QIC_1000 21 // 0x15
|
|
||||||
#define QIC_1000C 30 // 0x1E
|
|
||||||
#define QIC_2100 31 // 0x1F
|
|
||||||
#define QIC_2GB 34 // 0x22
|
|
||||||
#define QIC_5GB 40 // 0x28
|
|
||||||
|
|
||||||
//
|
|
||||||
// defines for QIC tape media codes
|
|
||||||
//
|
|
||||||
|
|
||||||
#define DCXXXX 0
|
|
||||||
#define DC300 1
|
|
||||||
#define DC300XLP 2
|
|
||||||
#define DC615 3
|
|
||||||
#define DC600 4
|
|
||||||
#define DC6037 5
|
|
||||||
#define DC6150 6
|
|
||||||
#define DC6250 7
|
|
||||||
#define DC6320 8
|
|
||||||
#define DC6525 9
|
|
||||||
#define DC9135SL 33 //0x21
|
|
||||||
#define DC9210 34 //0x22
|
|
||||||
#define DC9135 35 //0x23
|
|
||||||
#define DC9100 36 //0x24
|
|
||||||
#define DC9120 37 //0x25
|
|
||||||
#define DC9120SL 38 //0x26
|
|
||||||
#define DC9164 39 //0x27
|
|
||||||
#define DCXXXXFW 48 //0x30
|
|
||||||
#define DC9200SL 49 //0x31
|
|
||||||
#define DC9210XL 50 //0x32
|
|
||||||
#define DC10GB 51 //0x33
|
|
||||||
#define DC9200 52 //0x34
|
|
||||||
#define DC9120XL 53 //0x35
|
|
||||||
#define DC9210SL 54 //0x36
|
|
||||||
#define DC9164XL 55 //0x37
|
|
||||||
#define DC9200XL 64 //0x40
|
|
||||||
#define DC9400 65 //0x41
|
|
||||||
#define DC9500 66 //0x42
|
|
||||||
#define DC9500SL 70 //0x46
|
|
||||||
|
|
||||||
//
|
|
||||||
// defines for translation reference point
|
|
||||||
//
|
|
||||||
|
|
||||||
#define NOT_FROM_BOT 0
|
|
||||||
#define FROM_BOT 1
|
|
||||||
|
|
||||||
//
|
|
||||||
// info/structure returned by/from
|
|
||||||
// TapeLogicalBlockToPhysicalBlock( )
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _TAPE_PHYS_POSITION {
|
|
||||||
ULONG SeekBlockAddress;
|
|
||||||
ULONG SpaceBlockCount;
|
|
||||||
} TAPE_PHYS_POSITION, PTAPE_PHYS_POSITION;
|
|
||||||
|
|
||||||
//
|
|
||||||
// function prototypes
|
|
||||||
//
|
|
||||||
|
|
||||||
TAPE_PHYS_POSITION
|
|
||||||
TapeClassLogicalBlockToPhysicalBlock(
|
|
||||||
IN UCHAR DensityCode,
|
|
||||||
IN ULONG LogicalBlockAddress,
|
|
||||||
IN ULONG BlockLength,
|
|
||||||
IN BOOLEAN FromBOT
|
|
||||||
);
|
|
||||||
|
|
||||||
ULONG
|
|
||||||
TapeClassPhysicalBlockToLogicalBlock(
|
|
||||||
IN UCHAR DensityCode,
|
|
||||||
IN ULONG PhysicalBlockAddress,
|
|
||||||
IN ULONG BlockLength,
|
|
||||||
IN BOOLEAN FromBOT
|
|
||||||
);
|
|
||||||
|
|
||||||
// end_ntminitape
|
|
||||||
|
|
|
@ -1,180 +0,0 @@
|
||||||
/*++
|
|
||||||
|
|
||||||
Copyright (C) Microsoft Corporation, 1998 - 1999
|
|
||||||
|
|
||||||
Module Name:
|
|
||||||
|
|
||||||
rbc.h
|
|
||||||
|
|
||||||
Abstract:
|
|
||||||
|
|
||||||
These are the structures and defines used in the Reduced Block Command set
|
|
||||||
|
|
||||||
Authors:
|
|
||||||
|
|
||||||
George Chrysanthakopoulos(georgioc) - April 1998
|
|
||||||
|
|
||||||
Revision History:
|
|
||||||
|
|
||||||
Dan Knudson (DanKn), 23 Sep 1999 - updated per rev 10 of RBC spec
|
|
||||||
|
|
||||||
--*/
|
|
||||||
#ifndef _NTRBC_
|
|
||||||
#define _NTRBC_
|
|
||||||
|
|
||||||
#include "scsi.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// Command Descriptor Block. encapsulated under the bus/protocol specific request block
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef union _CDB_RBC {
|
|
||||||
|
|
||||||
//
|
|
||||||
// format unit
|
|
||||||
//
|
|
||||||
|
|
||||||
struct _FORMAT_RBC {
|
|
||||||
UCHAR OperationCode;
|
|
||||||
UCHAR VendorSpecific;
|
|
||||||
UCHAR Increment : 1;
|
|
||||||
UCHAR Percent_Time : 1;
|
|
||||||
UCHAR Reserved1 : 1;
|
|
||||||
UCHAR VendorSpecific1 : 5;
|
|
||||||
UCHAR Reserved2[2];
|
|
||||||
UCHAR Control;
|
|
||||||
} FORMAT_RBC, *PFORMAT_RBC;
|
|
||||||
|
|
||||||
//
|
|
||||||
// prevent/allow medium removal
|
|
||||||
//
|
|
||||||
|
|
||||||
struct _MEDIA_REMOVAL_RBC {
|
|
||||||
UCHAR OperationCode;
|
|
||||||
UCHAR Reserved[3];
|
|
||||||
|
|
||||||
UCHAR Prevent : 1;
|
|
||||||
UCHAR Persistent : 1;
|
|
||||||
UCHAR Reserved3 : 6;
|
|
||||||
|
|
||||||
UCHAR Control;
|
|
||||||
} MEDIA_REMOVAL_RBC, *PMEDIA_REMOVAL_RBC;
|
|
||||||
|
|
||||||
//
|
|
||||||
// START_STOP_UNIT
|
|
||||||
//
|
|
||||||
|
|
||||||
struct _START_STOP_RBC {
|
|
||||||
UCHAR OperationCode;
|
|
||||||
UCHAR Immediate: 1;
|
|
||||||
UCHAR Reserved1 : 7;
|
|
||||||
UCHAR Reserved2[2];
|
|
||||||
UCHAR Start : 1;
|
|
||||||
UCHAR LoadEject : 1;
|
|
||||||
UCHAR Reserved3 : 2;
|
|
||||||
UCHAR PowerConditions : 4;
|
|
||||||
UCHAR Control;
|
|
||||||
} START_STOP_RBC, *PSTART_STOP_RBC;
|
|
||||||
|
|
||||||
struct _SYNCHRONIZE_CACHE_RBC {
|
|
||||||
|
|
||||||
UCHAR OperationCode; // 0x35
|
|
||||||
UCHAR Reserved[8];
|
|
||||||
UCHAR Control;
|
|
||||||
|
|
||||||
} SYNCHRONIZE_CACHE_RBC, *PSYNCHRONIZE_CACHE_RBC;
|
|
||||||
|
|
||||||
|
|
||||||
} CDB_RBC, *PCDB_RBC;
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// START_STOP_UNIT Power Condition descriptions
|
|
||||||
//
|
|
||||||
|
|
||||||
#define START_STOP_RBC_POWER_CND_NO_CHANGE 0
|
|
||||||
#define START_STOP_RBC_POWER_CND_ACTIVE 1
|
|
||||||
#define START_STOP_RBC_POWER_CND_IDLE 2
|
|
||||||
#define START_STOP_RBC_POWER_CND_STANDBY 3
|
|
||||||
#define START_STOP_RBC_POWER_CND_SLEEP 5
|
|
||||||
#define START_STOP_RBC_POWER_CND_DEVICE_CTRL 7
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Mode Sense/Select page constants.
|
|
||||||
//
|
|
||||||
|
|
||||||
#define MODE_PAGE_RBC_DEVICE_PARAMETERS 0x06
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// DeviceType field in inquiry Data
|
|
||||||
//
|
|
||||||
|
|
||||||
#define RBC_DEVICE 0x0E
|
|
||||||
|
|
||||||
//
|
|
||||||
// Define Device Capabilities page.
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE {
|
|
||||||
UCHAR PageCode : 6;
|
|
||||||
UCHAR Reserved : 1;
|
|
||||||
UCHAR PageSavable : 1;
|
|
||||||
UCHAR PageLength;
|
|
||||||
UCHAR WriteCacheDisable : 1;
|
|
||||||
UCHAR Reserved1 : 7;
|
|
||||||
UCHAR LogicalBlockSize[2];
|
|
||||||
UCHAR NumberOfLogicalBlocks[5];
|
|
||||||
UCHAR PowerPerformance;
|
|
||||||
UCHAR LockDisabled : 1;
|
|
||||||
UCHAR FormatDisabled : 1;
|
|
||||||
UCHAR WriteDisabled : 1;
|
|
||||||
UCHAR ReadDisabled : 1;
|
|
||||||
UCHAR Reserved2 : 4;
|
|
||||||
UCHAR Reserved3;
|
|
||||||
|
|
||||||
}MODE_RBC_DEVICE_PARAMETERS_PAGE, *PMODE_RBC_DEVICE_PARAMETERS_PAGE;
|
|
||||||
|
|
||||||
typedef struct _MODE_RBC_DEVICE_PARAMETERS_HEADER_AND_PAGE {
|
|
||||||
|
|
||||||
MODE_PARAMETER_HEADER Header;
|
|
||||||
MODE_RBC_DEVICE_PARAMETERS_PAGE Page;
|
|
||||||
|
|
||||||
}MODE_RBC_DEVICE_PARAMETERS_HEADER_AND_PAGE,
|
|
||||||
*PMODE_RBC_DEVICE_PARAMETERS_HEADER_AND_PAGE;
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// unsolicited status sense code qualifier values
|
|
||||||
//
|
|
||||||
|
|
||||||
#define RBC_UNSOLICITED_STATUS 0x02
|
|
||||||
#define RBC_UNSOLICITED_SENSE_KEY 0x06
|
|
||||||
|
|
||||||
#define RBC_UNSOLICITED_SC_PWR_STATE_CHNG 0xFF
|
|
||||||
#define RBC_UNSOLICITED_SC_EVENT_STATUS 0xFE
|
|
||||||
|
|
||||||
#define RBC_UNSOLICITED_CLASS_ASQ_DEVICE 0x06
|
|
||||||
#define RBC_UNSOLICITED_CLASS_ASQ_MEDIA 0x04
|
|
||||||
#define RBC_UNSOLICITED_CLASS_ASQ_POWER 0x02
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Translation routine used to convert SCSI requests that differ from RBC
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
Rbc_Scsi_Conversion(
|
|
||||||
IN PSCSI_REQUEST_BLOCK Srb,
|
|
||||||
IN PSCSI_REQUEST_BLOCK *OriginalSrb,
|
|
||||||
IN PMODE_RBC_DEVICE_PARAMETERS_HEADER_AND_PAGE RbcHeaderAndPage,
|
|
||||||
IN BOOLEAN OutgoingRequest,
|
|
||||||
IN BOOLEAN RemovableMedia
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,312 +0,0 @@
|
||||||
/*++
|
|
||||||
|
|
||||||
Copyright (c) 1992 Microsoft Corporation
|
|
||||||
|
|
||||||
Module Name:
|
|
||||||
|
|
||||||
tape.h
|
|
||||||
|
|
||||||
Abstract:
|
|
||||||
|
|
||||||
These are the structures and defines that are used in the
|
|
||||||
SCSI tape class drivers. The tape class driver is separated
|
|
||||||
into two modules. Tape.c contains code common to all tape
|
|
||||||
class drivers including the driver's major entry points.
|
|
||||||
The major entry point names each begin with the prefix
|
|
||||||
'ScsiTape.' The second module is the device specific code.
|
|
||||||
It provides support for a set of functions. Each device
|
|
||||||
specific function name is prefixed by 'Tape.'
|
|
||||||
|
|
||||||
Author:
|
|
||||||
|
|
||||||
Mike Glass
|
|
||||||
|
|
||||||
Revision History:
|
|
||||||
|
|
||||||
--*/
|
|
||||||
|
|
||||||
#include "scsi.h"
|
|
||||||
#include "class.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// Define the maximum inquiry data length.
|
|
||||||
//
|
|
||||||
|
|
||||||
#define MAXIMUM_TAPE_INQUIRY_DATA 252
|
|
||||||
|
|
||||||
//
|
|
||||||
// Tape device data
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _TAPE_DATA {
|
|
||||||
ULONG Flags;
|
|
||||||
ULONG CurrentPartition;
|
|
||||||
PVOID DeviceSpecificExtension;
|
|
||||||
PSCSI_INQUIRY_DATA InquiryData;
|
|
||||||
} TAPE_DATA, *PTAPE_DATA;
|
|
||||||
|
|
||||||
#define DEVICE_EXTENSION_SIZE sizeof(DEVICE_EXTENSION) + sizeof(TAPE_DATA)
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Define Device Configuration Page
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _MODE_DEVICE_CONFIGURATION_PAGE {
|
|
||||||
|
|
||||||
UCHAR PageCode : 6;
|
|
||||||
UCHAR Reserved1 : 1;
|
|
||||||
UCHAR PS : 1;
|
|
||||||
UCHAR PageLength;
|
|
||||||
UCHAR ActiveFormat : 5;
|
|
||||||
UCHAR CAFBit : 1;
|
|
||||||
UCHAR CAPBit : 1;
|
|
||||||
UCHAR Reserved2 : 1;
|
|
||||||
UCHAR ActivePartition;
|
|
||||||
UCHAR WriteBufferFullRatio;
|
|
||||||
UCHAR ReadBufferEmptyRatio;
|
|
||||||
UCHAR WriteDelayTime[2];
|
|
||||||
UCHAR REW : 1;
|
|
||||||
UCHAR RBO : 1;
|
|
||||||
UCHAR SOCF : 2;
|
|
||||||
UCHAR AVC : 1;
|
|
||||||
UCHAR RSmk : 1;
|
|
||||||
UCHAR BIS : 1;
|
|
||||||
UCHAR DBR : 1;
|
|
||||||
UCHAR GapSize;
|
|
||||||
UCHAR Reserved3 : 3;
|
|
||||||
UCHAR SEW : 1;
|
|
||||||
UCHAR EEG : 1;
|
|
||||||
UCHAR EODdefined : 3;
|
|
||||||
UCHAR BufferSize[3];
|
|
||||||
UCHAR DCAlgorithm;
|
|
||||||
UCHAR Reserved4;
|
|
||||||
|
|
||||||
} MODE_DEVICE_CONFIGURATION_PAGE, *PMODE_DEVICE_CONFIGURATION_PAGE;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Define Medium Partition Page
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _MODE_MEDIUM_PARTITION_PAGE {
|
|
||||||
|
|
||||||
UCHAR PageCode : 6;
|
|
||||||
UCHAR Reserved1 : 1;
|
|
||||||
UCHAR PSBit : 1;
|
|
||||||
UCHAR PageLength;
|
|
||||||
UCHAR MaximumAdditionalPartitions;
|
|
||||||
UCHAR AdditionalPartitionDefined;
|
|
||||||
UCHAR Reserved2 : 3;
|
|
||||||
UCHAR PSUMBit : 2;
|
|
||||||
UCHAR IDPBit : 1;
|
|
||||||
UCHAR SDPBit : 1;
|
|
||||||
UCHAR FDPBit : 1;
|
|
||||||
UCHAR MediumFormatRecognition;
|
|
||||||
UCHAR Reserved3[2];
|
|
||||||
UCHAR Partition0Size[2];
|
|
||||||
UCHAR Partition1Size[2];
|
|
||||||
|
|
||||||
} MODE_MEDIUM_PARTITION_PAGE, *PMODE_MEDIUM_PARTITION_PAGE;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Define Data Compression Page
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _MODE_DATA_COMPRESSION_PAGE {
|
|
||||||
|
|
||||||
UCHAR PageCode : 6;
|
|
||||||
UCHAR Reserved1 : 2;
|
|
||||||
UCHAR PageLength;
|
|
||||||
UCHAR Reserved2 : 6;
|
|
||||||
UCHAR DCC : 1;
|
|
||||||
UCHAR DCE : 1;
|
|
||||||
UCHAR Reserved3 : 5;
|
|
||||||
UCHAR RED : 2;
|
|
||||||
UCHAR DDE : 1;
|
|
||||||
UCHAR CompressionAlgorithm[4];
|
|
||||||
UCHAR DecompressionAlgorithm[4];
|
|
||||||
UCHAR Reserved4[4];
|
|
||||||
|
|
||||||
} MODE_DATA_COMPRESSION_PAGE, *PMODE_DATA_COMPRESSION_PAGE;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Mode parameter list header and medium partition page -
|
|
||||||
// used in creating partitions
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _MODE_MEDIUM_PART_PAGE {
|
|
||||||
|
|
||||||
MODE_PARAMETER_HEADER ParameterListHeader;
|
|
||||||
MODE_MEDIUM_PARTITION_PAGE MediumPartPage;
|
|
||||||
|
|
||||||
} MODE_MEDIUM_PART_PAGE, *PMODE_MEDIUM_PART_PAGE;
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Mode parameters for retrieving tape or media information
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _MODE_TAPE_MEDIA_INFORMATION {
|
|
||||||
|
|
||||||
MODE_PARAMETER_HEADER ParameterListHeader;
|
|
||||||
MODE_PARAMETER_BLOCK ParameterListBlock;
|
|
||||||
MODE_MEDIUM_PARTITION_PAGE MediumPartPage;
|
|
||||||
|
|
||||||
} MODE_TAPE_MEDIA_INFORMATION, *PMODE_TAPE_MEDIA_INFORMATION;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Mode parameter list header and device configuration page -
|
|
||||||
// used in retrieving device configuration information
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _MODE_DEVICE_CONFIG_PAGE {
|
|
||||||
|
|
||||||
MODE_PARAMETER_HEADER ParameterListHeader;
|
|
||||||
MODE_DEVICE_CONFIGURATION_PAGE DeviceConfigPage;
|
|
||||||
|
|
||||||
} MODE_DEVICE_CONFIG_PAGE, *PMODE_DEVICE_CONFIG_PAGE;
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Mode parameter list header and data compression page -
|
|
||||||
// used in retrieving data compression information
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct _MODE_DATA_COMPRESS_PAGE {
|
|
||||||
|
|
||||||
MODE_PARAMETER_HEADER ParameterListHeader;
|
|
||||||
MODE_DATA_COMPRESSION_PAGE DataCompressPage;
|
|
||||||
|
|
||||||
} MODE_DATA_COMPRESS_PAGE, *PMODE_DATA_COMPRESS_PAGE;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following routines are the exported entry points for
|
|
||||||
// all tape class drivers. Note all these routines name start
|
|
||||||
// with 'ScsiTape.'
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
DriverEntry(
|
|
||||||
IN PDRIVER_OBJECT DriverObject,
|
|
||||||
IN PUNICODE_STRING RegistryPath
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiTapeInitialize(
|
|
||||||
IN PDRIVER_OBJECT DriverObject
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiTapeCreate (
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiTapeReadWrite (
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ScsiTapeDeviceControl(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following routines are provided by the tape
|
|
||||||
// device-specific module. Each routine name is
|
|
||||||
// prefixed with 'Tape.'
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeCreatePartition(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeErase(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
TapeError(
|
|
||||||
PDEVICE_OBJECT DeviceObject,
|
|
||||||
PSCSI_REQUEST_BLOCK Srb,
|
|
||||||
NTSTATUS *Status,
|
|
||||||
BOOLEAN *Retry
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeGetDriveParameters(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeGetMediaParameters(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeGetPosition(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeGetStatus(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapePrepare(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeReadWrite(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeSetDriveParameters(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeSetMediaParameters(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeSetPosition(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
BOOLEAN
|
|
||||||
TapeVerifyInquiry(
|
|
||||||
IN PSCSI_INQUIRY_DATA LunInfo
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
TapeWriteMarks(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue