56 DPRINT(
"SRB_FUNCTION_EXECUTE_SCSI\n");
67 Request->DataTransferLength == 0 ||
82 if (
Request->DataTransferLength ||
112 DPRINT1(
"SRB_FUNCTION_RELEASE_DEVICE\n");
121 PDODeviceExtension->Claimed =
FALSE;
127 DPRINT1(
"SRB_FUNCTION_CLAIM_DEVICE\n");
131 if (PDODeviceExtension->Claimed)
144 PDODeviceExtension->Claimed =
TRUE;
159 DPRINT1(
"SRB_FUNCTION_RELEASE_QUEUE\n");
178 DPRINT1(
"SRB_FUNCTION_FLUSH / SRB_FUNCTION_FLUSH_QUEUE / SRB_FUNCTION_SHUTDOWN\n");
218 ULONG LastCharacterPosition = 0;
230 LastCharacterPosition =
Index;
237 return LastCharacterPosition + 1;
249 ULONG FieldLengthVendor, FieldLengthProduct, FieldLengthRevision,
TotalLength, FieldLengthSerialNumber;
259 DPRINT(
"USBSTOR_HandleQueryProperty\n");
319 ASSERT(PDODeviceExtension);
326 ASSERT(FDODeviceExtension);
345 if (FDODeviceExtension->SerialNumber)
350 FieldLengthSerialNumber =
wcslen(FDODeviceExtension->SerialNumber->bString);
357 FieldLengthSerialNumber = 0;
406 DeviceDescriptor->RawPropertiesLength = FieldLengthVendor + FieldLengthProduct + FieldLengthRevision + FieldLengthSerialNumber + 3 + (FieldLengthSerialNumber > 0 ? + 1 : 0);
417 Buffer[FieldLengthVendor] =
'\0';
418 Buffer += FieldLengthVendor + 1;
424 Buffer[FieldLengthProduct] =
'\0';
425 Buffer += FieldLengthProduct + 1;
431 Buffer[FieldLengthRevision] =
'\0';
432 Buffer += FieldLengthRevision + 1;
437 if (FieldLengthSerialNumber)
505 AdapterDescriptor->MaximumTransferLength =
MAXULONG;
506 AdapterDescriptor->MaximumPhysicalPages = 25;
507 AdapterDescriptor->AlignmentMask = 0;
508 AdapterDescriptor->AdapterUsesPio =
FALSE;
509 AdapterDescriptor->AdapterScansDown =
FALSE;
510 AdapterDescriptor->CommandQueueing =
FALSE;
511 AdapterDescriptor->AcceleratedTransfer =
FALSE;
513 AdapterDescriptor->BusMajorVersion = 0x2;
514 AdapterDescriptor->BusMinorVersion = 0x00;
558 DPRINT1(
"USBSTOR_HandleDeviceControl IOCTL_SCSI_PASS_THROUGH NOT implemented\n");
566 DPRINT1(
"USBSTOR_HandleDeviceControl IOCTL_SCSI_PASS_THROUGH_DIRECT NOT implemented\n");
574 DPRINT1(
"USBSTOR_HandleDeviceControl IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER NOT implemented\n");
587 Irp->IoStatus.Information =
sizeof(
PVOID);
617 ASSERT(PDODeviceExtension);
623 BusInfo =
Irp->AssociatedIrp.SystemBuffer;
632 ASSERT(UFIInquiryResponse);
642 InquiryData->
Lun = PDODeviceExtension->LUN &
MAX_LUN;
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
struct _INQUIRYDATA * PINQUIRYDATA
#define DIRECT_ACCESS_DEVICE
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_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_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)
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)
_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)
#define IOCTL_STORAGE_QUERY_PROPERTY
* PSTORAGE_DESCRIPTOR_HEADER
STORAGE_DESCRIPTOR_HEADER
STORAGE_ADAPTER_DESCRIPTOR
#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER
* PSTORAGE_DEVICE_DESCRIPTOR
struct _STORAGE_PROPERTY_QUERY * PSTORAGE_PROPERTY_QUERY
STORAGE_DEVICE_DESCRIPTOR
* PSTORAGE_ADAPTER_DESCRIPTOR
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_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
const KSDEVICE_DESCRIPTOR DeviceDescriptor
COMMON_DEVICE_EXTENSION Common
UCHAR DeviceTypeQualifier
struct _IO_STACK_LOCATION::@1583::@1584 DeviceIoControl
union _IO_STACK_LOCATION::@1583 Parameters
struct _IO_STACK_LOCATION::@4015::@4054 Others
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_PARAMETER
#define STATUS_DEVICE_BUSY
#define STATUS_INSUFFICIENT_RESOURCES
struct UFI_INQUIRY_RESPONSE * PUFI_INQUIRY_RESPONSE
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject