22#ifndef __SCSI_PORT_H__
23#define __SCSI_PORT_H__
37#define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
39#define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort"
47#define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
48#define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
49#define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
50#define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
51#define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
52#define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
53#define IOCTL_SCSI_RESCAN_BUS CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
54#define IOCTL_SCSI_GET_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE, 0x0408, METHOD_BUFFERED, FILE_ANY_ACCESS)
171#define SCSI_IOCTL_DATA_OUT 0
172#define SCSI_IOCTL_DATA_IN 1
173#define SCSI_IOCTL_DATA_UNSPECIFIED 2
175#define CLASS_SPECIAL_CAUSE_NOT_REPORTABLE_HACK 0x00000020
210 PVOID DeviceExtension);
_In_ PSCSI_REQUEST_BLOCK Srb
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR PathId
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR TargetId
IN OUT PVCB IN PDEVICE_OBJECT TargetDeviceObject
struct _SCSI_PASS_THROUGH_DIRECT * PSCSI_PASS_THROUGH_DIRECT
NTSTATUS ScsiClassIoCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
struct _SCSI_PASS_THROUGH * PSCSI_PASS_THROUGH
struct _IO_SCSI_CAPABILITIES * PIO_SCSI_CAPABILITIES
NTSTATUS ScsiClassClaimDevice(IN PDEVICE_OBJECT PortDeviceObject, IN PSCSI_INQUIRY_DATA LunInfo, IN BOOLEAN Release, OUT PDEVICE_OBJECT *NewPortDeviceObject OPTIONAL)
struct _SCSI_PASS_THROUGH_DIRECT SCSI_PASS_THROUGH_DIRECT
struct _SCSI_INQUIRY_DATA SCSI_INQUIRY_DATA
struct _SCSI_ADAPTER_BUS_INFO SCSI_ADAPTER_BUS_INFO
VOID ScsiClassReleaseQueue(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS ScsiClassGetAddress(IN PDEVICE_OBJECT ClassDeviceObject, OUT PSCSI_ADDRESS Address)
VOID ScsiClassInitSrbBusAddr(PSCSI_REQUEST_BLOCK Srb, PVOID DeviceExtension)
struct _SRB_IO_CONTROL * PSRB_IO_CONTROL
NTSTATUS ScsiClassInternalIoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _SCSI_ADDRESS * PSCSI_ADDRESS
NTSTATUS ScsiClassSendSrbSynchronous(IN PDEVICE_OBJECT TargetDeviceObject, IN PSCSI_REQUEST_BLOCK _srb, IN PKEVENT event)
NTSTATUS ScsiClassRemoveDevice(IN PDEVICE_OBJECT PortDeviceObject, IN UCHAR PathId, IN UCHAR TargetId, IN UCHAR Lun)
struct _SCSI_INQUIRY_DATA * PSCSI_INQUIRY_DATA
struct _SCSI_BUS_DATA SCSI_BUS_DATA
struct _SCSI_ADDRESS SCSI_ADDRESS
NTSTATUS ScsiClassReadDriveCapacity(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS ScsiClassReadDeviceInquiryData(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN DirectAccess)
struct _SCSI_BUS_DATA * PSCSI_BUS_DATA
NTSTATUS ScsiClassGetCapabilities(IN PDEVICE_OBJECT PortDeviceObject, OUT PIO_SCSI_CAPABILITIES *PortCapabilities)
struct _DUMP_POINTERS * PDUMP_POINTERS
struct _SRB_IO_CONTROL SRB_IO_CONTROL
struct _IO_SCSI_CAPABILITIES IO_SCSI_CAPABILITIES
struct _SCSI_PASS_THROUGH SCSI_PASS_THROUGH
struct _SCSI_ADAPTER_BUS_INFO * PSCSI_ADAPTER_BUS_INFO
struct _DUMP_POINTERS DUMP_POINTERS
NTSTATUS ScsiClassGetInquiryData(IN PDEVICE_OBJECT PortDeviceObject, IN PSCSI_ADAPTER_BUS_INFO *ConfigInfo)
NTSTATUS DbgWaitForSingleObject_(IN PVOID Object, IN PLARGE_INTEGER Timeout OPTIONAL)
PULONG MinorVersion OPTIONAL
LARGE_INTEGER CommonBufferPa
struct _ADAPTER_OBJECT * AdapterObject
ULONG MaximumTransferLength
ULONG SupportedAsynchronousEvents
ULONG MaximumPhysicalPages
UCHAR NumberOfLogicalUnits
ULONG NextInquiryDataOffset
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_In_ PDEVICE_OBJECT DeviceObject