40 DPRINT1(
"IsRequestValid: Invalid Srb. Irp->MdlAddress == NULL\n");
44 if (TransferLength == 0)
46 DPRINT1(
"IsRequestValid: Invalid Srb. TransferLength == 0\n");
52 DPRINT1(
"IsRequestValid: Invalid Srb. TransferLength > 0x10000\n");
60 DPRINT1(
"IsRequestValid: Invalid Srb. Srb->DataTransferLength != 0\n");
66 DPRINT1(
"IsRequestValid: Invalid Srb. Srb->DataBuffer != NULL\n");
72 DPRINT1(
"IsRequestValid: Invalid Srb. Irp->MdlAddress != NULL\n");
100 DPRINT(
"SRB_FUNCTION_EXECUTE_SCSI\n");
110 DPRINT(
"USBSTOR_Scsi: SRB_FUNCTION_EXECUTE_SCSI - FIXME SCSIOP_MODE_SENSE\n");
129 DPRINT1(
"SRB_FUNCTION_RELEASE_DEVICE\n");
133 PDODeviceExtension->Claimed =
FALSE;
139 DPRINT1(
"SRB_FUNCTION_CLAIM_DEVICE\n");
142 if (PDODeviceExtension->Claimed)
151 PDODeviceExtension->Claimed =
TRUE;
161 DPRINT1(
"SRB_FUNCTION_RELEASE_QUEUE\n");
174 DPRINT1(
"SRB_FUNCTION_FLUSH / SRB_FUNCTION_FLUSH_QUEUE / SRB_FUNCTION_SHUTDOWN\n");
204 ULONG LastCharacterPosition = 0;
212 LastCharacterPosition =
Index;
217 return LastCharacterPosition + 1;
229 ULONG FieldLengthVendor, FieldLengthProduct, FieldLengthRevision,
TotalLength, FieldLengthSerialNumber;
239 DPRINT(
"USBSTOR_HandleQueryProperty\n");
274 ASSERT(PDODeviceExtension);
278 ASSERT(FDODeviceExtension);
281 InquiryData = (
PINQUIRYDATA)&PDODeviceExtension->InquiryData;
288 if (FDODeviceExtension->SerialNumber)
290 FieldLengthSerialNumber =
wcslen(FDODeviceExtension->SerialNumber->bString);
294 FieldLengthSerialNumber = 0;
330 DeviceDescriptor->RawPropertiesLength = FieldLengthVendor + FieldLengthProduct + FieldLengthRevision + FieldLengthSerialNumber + 3 + (FieldLengthSerialNumber > 0 ? + 1 : 0);
336 Buffer[FieldLengthVendor] =
'\0';
337 Buffer += FieldLengthVendor + 1;
340 Buffer[FieldLengthProduct] =
'\0';
341 Buffer += FieldLengthProduct + 1;
344 Buffer[FieldLengthRevision] =
'\0';
345 Buffer += FieldLengthRevision + 1;
347 if (FieldLengthSerialNumber)
388 AdapterDescriptor =
Irp->AssociatedIrp.SystemBuffer;
399 .BusMajorVersion = 2,
432 DPRINT1(
"USBSTOR_HandleDeviceControl IOCTL_SCSI_PASS_THROUGH NOT implemented\n");
436 DPRINT1(
"USBSTOR_HandleDeviceControl IOCTL_SCSI_PASS_THROUGH_DIRECT NOT implemented\n");
440 DPRINT1(
"USBSTOR_HandleDeviceControl IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER NOT implemented\n");
453 Irp->IoStatus.Information =
sizeof(
PVOID);
482 ASSERT(PDODeviceExtension);
486 BusInfo =
Irp->AssociatedIrp.SystemBuffer;
496 ScsiInquiryData->
PathId = 0;
498 ScsiInquiryData->
Lun = PDODeviceExtension->LUN &
MAX_LUN;
499 ScsiInquiryData->
DeviceClaimed = PDODeviceExtension->Claimed;
505 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)
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
#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER
* PSTORAGE_DEVICE_DESCRIPTOR
struct _STORAGE_PROPERTY_QUERY * PSTORAGE_PROPERTY_QUERY
STORAGE_DEVICE_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
struct _STORAGE_ADAPTER_DESCRIPTOR_WIN8 STORAGE_ADAPTER_DESCRIPTOR_WIN8
const KSDEVICE_DESCRIPTOR DeviceDescriptor
COMMON_DEVICE_EXTENSION Common
UCHAR ProductRevisionLevel[4]
struct _IO_STACK_LOCATION::@4024::@4063 Others
struct _IO_STACK_LOCATION::@4024::@4046 Scsi
struct _IO_STACK_LOCATION::@1584::@1585 DeviceIoControl
union _IO_STACK_LOCATION::@1584 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_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