18#define USBSTOR_DEFAULT_MAX_PHYS_PAGES (USBSTOR_DEFAULT_MAX_TRANSFER_LENGTH / PAGE_SIZE + 1)
43 DPRINT1(
"IsRequestValid: Invalid Srb. Irp->MdlAddress == NULL\n");
47 if (TransferLength == 0)
49 DPRINT1(
"IsRequestValid: Invalid Srb. TransferLength == 0\n");
55 DPRINT1(
"IsRequestValid: Invalid Srb. TransferLength > 0x10000\n");
63 DPRINT1(
"IsRequestValid: Invalid Srb. Srb->DataTransferLength != 0\n");
69 DPRINT1(
"IsRequestValid: Invalid Srb. Srb->DataBuffer != NULL\n");
75 DPRINT1(
"IsRequestValid: Invalid Srb. Irp->MdlAddress != NULL\n");
103 DPRINT(
"SRB_FUNCTION_EXECUTE_SCSI\n");
113 DPRINT(
"USBSTOR_Scsi: SRB_FUNCTION_EXECUTE_SCSI - FIXME SCSIOP_MODE_SENSE\n");
132 DPRINT1(
"SRB_FUNCTION_RELEASE_DEVICE\n");
136 PDODeviceExtension->Claimed =
FALSE;
142 DPRINT1(
"SRB_FUNCTION_CLAIM_DEVICE\n");
145 if (PDODeviceExtension->Claimed)
154 PDODeviceExtension->Claimed =
TRUE;
164 DPRINT1(
"SRB_FUNCTION_RELEASE_QUEUE\n");
177 DPRINT1(
"SRB_FUNCTION_FLUSH / SRB_FUNCTION_FLUSH_QUEUE / SRB_FUNCTION_SHUTDOWN\n");
207 ULONG LastCharacterPosition = 0;
215 LastCharacterPosition =
Index;
220 return LastCharacterPosition + 1;
232 ULONG FieldLengthVendor, FieldLengthProduct, FieldLengthRevision,
TotalLength, FieldLengthSerialNumber;
242 DPRINT(
"USBSTOR_HandleQueryProperty\n");
277 ASSERT(PDODeviceExtension);
281 ASSERT(FDODeviceExtension);
284 InquiryData = (
PINQUIRYDATA)&PDODeviceExtension->InquiryData;
291 if (FDODeviceExtension->SerialNumber)
293 FieldLengthSerialNumber =
wcslen(FDODeviceExtension->SerialNumber->bString);
297 FieldLengthSerialNumber = 0;
333 DeviceDescriptor->RawPropertiesLength = FieldLengthVendor + FieldLengthProduct + FieldLengthRevision + FieldLengthSerialNumber + 3 + (FieldLengthSerialNumber > 0 ? + 1 : 0);
339 Buffer[FieldLengthVendor] =
'\0';
340 Buffer += FieldLengthVendor + 1;
343 Buffer[FieldLengthProduct] =
'\0';
344 Buffer += FieldLengthProduct + 1;
347 Buffer[FieldLengthRevision] =
'\0';
348 Buffer += FieldLengthRevision + 1;
350 if (FieldLengthSerialNumber)
391 AdapterDescriptor =
Irp->AssociatedIrp.SystemBuffer;
402 .BusMajorVersion = 2,
440 ASSERT(PDODeviceExtension);
457 DPRINT1(
"USBSTOR_HandleDeviceControl IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER NOT implemented\n");
470 Irp->IoStatus.Information =
sizeof(
PVOID);
499 ASSERT(PDODeviceExtension);
503 BusInfo =
Irp->AssociatedIrp.SystemBuffer;
513 ScsiInquiryData->
PathId = 0;
515 ScsiInquiryData->
Lun = PDODeviceExtension->LUN &
MAX_LUN;
516 ScsiInquiryData->
DeviceClaimed = PDODeviceExtension->Claimed;
522 RtlCopyMemory(InquiryData, &PDODeviceExtension->InquiryData,
sizeof(PDODeviceExtension->InquiryData));
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
_In_ PSCSI_REQUEST_BLOCK Srb
struct _INQUIRYDATA * PINQUIRYDATA
#define SCSIOP_MODE_SENSE
struct _INQUIRYDATA INQUIRYDATA
#define STATUS_NOT_SUPPORTED
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
#define SRB_FUNCTION_RELEASE_DEVICE
#define SRB_FUNCTION_CLAIM_DEVICE
#define SRB_FUNCTION_RELEASE_QUEUE
#define SRB_FUNCTION_EXECUTE_SCSI
#define SRB_FLAGS_DATA_OUT
#define SRB_STATUS_PENDING
#define SRB_FUNCTION_FLUSH
#define SRB_FUNCTION_FLUSH_QUEUE
#define SRB_FUNCTION_SHUTDOWN
struct _SCSI_REQUEST_BLOCK * PSCSI_REQUEST_BLOCK
#define SRB_FLAGS_DATA_IN
#define SRB_FLAGS_UNSPECIFIED_DIRECTION
#define SRB_STATUS_SUCCESS
NTSTATUS USBSTOR_HandleQueryProperty(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
ULONG USBSTOR_GetFieldLength(IN PUCHAR Name, IN ULONG MaxLength)
NTSTATUS USBSTOR_HandleInternalDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
static BOOLEAN IsRequestValid(PIRP Irp)
#define USBSTOR_DEFAULT_MAX_PHYS_PAGES
NTSTATUS USBSTOR_HandleDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
BOOLEAN USBSTOR_QueueAddIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID USBSTOR_QueueRelease(IN PDEVICE_OBJECT DeviceObject)
VOID USBSTOR_QueueWaitForPendingRequests(IN PDEVICE_OBJECT DeviceObject)
VOID NTAPI USBSTOR_CancelIo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define KeGetCurrentIrql()
_Must_inspect_result_ typedef _Out_ PHIDP_CAPS Capabilities
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
VOID NTAPI IoStartPacket(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PULONG Key, IN PDRIVER_CANCEL CancelFunction)
#define IoCompleteRequest
#define STATUS_INVALID_PARAMETER_2
#define STATUS_INVALID_PARAMETER_1
#define IOCTL_STORAGE_QUERY_PROPERTY
#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER
struct _STORAGE_PROPERTY_QUERY * PSTORAGE_PROPERTY_QUERY
#define IOCTL_SCSI_PASS_THROUGH
#define IOCTL_SCSI_GET_ADDRESS
#define IOCTL_SCSI_GET_CAPABILITIES
struct _SCSI_ADAPTER_BUS_INFO SCSI_ADAPTER_BUS_INFO
#define IOCTL_SCSI_PASS_THROUGH_DIRECT
struct _SCSI_INQUIRY_DATA * PSCSI_INQUIRY_DATA
struct _SCSI_ADDRESS SCSI_ADDRESS
#define IOCTL_SCSI_GET_INQUIRY_DATA
struct _IO_SCSI_CAPABILITIES IO_SCSI_CAPABILITIES
struct _STORAGE_ADAPTER_DESCRIPTOR_WIN8 STORAGE_ADAPTER_DESCRIPTOR_WIN8
const KSDEVICE_DESCRIPTOR DeviceDescriptor
NTSTATUS SptiHandleScsiPassthru(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp, _In_ ULONG MaximumTransferLength, _In_ ULONG MaximumPhysicalPages)
Handler for the IOCTL_SCSI_PASS_THROUGH and IOCTL_SCSI_PASS_THROUGH_DIRECT requests.
COMMON_DEVICE_EXTENSION Common
UCHAR ProductRevisionLevel[4]
struct _IO_STACK_LOCATION::@4278::@4317 Others
struct _IO_STACK_LOCATION::@4278::@4300 Scsi
struct _IO_STACK_LOCATION::@1694::@1695 DeviceIoControl
union _IO_STACK_LOCATION::@1694 Parameters
COMMON_DEVICE_EXTENSION Common
UCHAR NumberOfLogicalUnits
ULONG NextInquiryDataOffset
STORAGE_QUERY_TYPE QueryType
STORAGE_PROPERTY_ID PropertyId
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INVALID_PARAMETER
#define STATUS_DEVICE_BUSY
#define STATUS_INSUFFICIENT_RESOURCES
#define USBSTOR_DEFAULT_MAX_TRANSFER_LENGTH
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_In_ UCHAR _In_ UCHAR MinorFunction
struct _STORAGE_DESCRIPTOR_HEADER STORAGE_DESCRIPTOR_HEADER
struct _STORAGE_DEVICE_DESCRIPTOR STORAGE_DEVICE_DESCRIPTOR
struct _STORAGE_DESCRIPTOR_HEADER * PSTORAGE_DESCRIPTOR_HEADER
struct _STORAGE_DEVICE_DESCRIPTOR * PSTORAGE_DEVICE_DESCRIPTOR