10 #define USB_STOR_TAG 'sbsu' 11 #define USB_MAXCHILDREN (16) 13 #define HTONS(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8)) 14 #define NTOHS(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8)) 16 #define HTONL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \ 17 ((((unsigned long)(n) & 0xFF00)) << 8) | \ 18 ((((unsigned long)(n) & 0xFF0000)) >> 8) | \ 19 ((((unsigned long)(n) & 0xFF000000)) >> 24)) 22 #define NTOHL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \ 23 ((((unsigned long)(n) & 0xFF00)) << 8) | \ 24 ((((unsigned long)(n) & 0xFF0000)) >> 8) | \ 25 ((((unsigned long)(n) & 0xFF000000)) >> 24)) 27 #define USB_RECOVERABLE_ERRORS (USBD_STATUS_STALL_PID | USBD_STATUS_DEV_NOT_RESPONDING \ 28 | USBD_STATUS_ENDPOINT_HALTED | USBD_STATUS_NO_BANDWIDTH) 49 UCHAR BulkInPipeIndex;
50 UCHAR BulkOutPipeIndex;
57 ULONG IrpPendingCount;
61 ULONG SrbErrorHandlingActive;
62 ULONG TimerWorkQueueEnabled;
85 #define USB_BULK_GET_MAX_LUN 0xFE 86 #define USB_BULK_RESET_DEVICE 0xFF 93 ULONG DataTransferLength;
96 UCHAR CommandBlockLength;
97 UCHAR CommandBlock[16];
103 #define CBW_SIGNATURE 0x43425355 104 #define CSW_SIGNATURE 0x53425355 132 #define UFI_INQUIRY_CMD_LEN 0x6 172 #define UFI_READ_WRITE_CMD_LEN (0xA) 190 #define UFI_CAPACITY_CMD_LEN 0xA //FIXME support length 16 too if requested 201 #define UFI_READ_CAPACITY_CMD_LEN 0xA 221 #define UFI_SENSE_CMD_LEN (6) 265 #define UFI_READ_FORMAT_CAPACITY_CMD_LEN (10) 286 #define UNFORMATTED_MEDIA_CODE_DESCRIPTORY_TYPE (1) 287 #define FORMAT_MEDIA_CODE_DESCRIPTOR_TYPE (2) 288 #define CARTRIDGE_MEDIA_CODE_DESCRIPTOR_TYPE (3) 307 #define UFI_TEST_UNIT_CMD_LEN (6) struct UFI_TIMER_PROTECT_PAGE * PUFI_TIMER_PROTECT_PAGE
ULONG LastLogicalBlockAddress
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
BOOLEAN USBSTOR_QueueAddIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID USBSTOR_QueueWaitForPendingRequests(IN PDEVICE_OBJECT DeviceObject)
PPDO_DEVICE_EXTENSION PDODeviceExtension
struct UFI_INQUIRY_RESPONSE * PUFI_INQUIRY_RESPONSE
VOID USBSTOR_SendCSW(PIRP_CONTEXT Context, PIRP Irp)
ULONG LastLogicBlockAddress
struct _ERRORHANDLER_WORKITEM_DATA * PERRORHANDLER_WORKITEM_DATA
VOID NTAPI USBSTOR_StartIo(PDEVICE_OBJECT DeviceObject, PIRP Irp)
UCHAR ContiguousLogicBlocksByte0
NTSTATUS NTAPI USBSTOR_SyncForwardIrpCompletionRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
VOID USBSTOR_QueueTerminateRequest(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct UFI_CAPACITY_CMD * PUFI_CAPACITY_CMD
NTSTATUS USBSTOR_GetPipeHandles(IN PFDO_DEVICE_EXTENSION DeviceExtension)
BOOLEAN USBSTOR_IsFloppy(IN PUCHAR Buffer, IN ULONG BufferLength, OUT PUCHAR MediumTypeCode)
PDEVICE_OBJECT PhysicalDeviceObject
WORK_QUEUE_ITEM WorkQueueItem
NTSTATUS USBSTOR_PdoHandlePnp(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
PDEVICE_OBJECT DeviceObject
struct __COMMON_DEVICE_EXTENSION__ * PUSBSTOR_COMMON_DEVICE_EXTENSION
_In_ PDEVICE_OBJECT DeviceObject
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
NTSTATUS USBSTOR_ResetDevice(IN PDEVICE_OBJECT DeviceObject, IN PFDO_DEVICE_EXTENSION DeviceExtension)
struct UFI_READ_FORMAT_CAPACITY * PUFI_READ_FORMAT_CAPACITY
NTSTATUS USBSTOR_ResetPipeWithHandle(IN PDEVICE_OBJECT DeviceObject, IN USBD_PIPE_HANDLE PipeHandle)
struct UFI_CAPACITY_RESPONSE * PUFI_CAPACITY_RESPONSE
NTSTATUS USBSTOR_GetEndpointStatus(IN PDEVICE_OBJECT DeviceObject, IN UCHAR bEndpointAddress, OUT PUSHORT Value)
struct __COMMON_DEVICE_EXTENSION__ USBSTOR_COMMON_DEVICE_EXTENSION
struct UFI_CAPACITY_DESCRIPTOR * PUFI_CAPACITY_DESCRIPTOR
C_ASSERT(sizeof(CBW)==31)
_Reserved_ PVOID Reserved
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
VOID USBSTOR_QueueInitialize(PFDO_DEVICE_EXTENSION FDODeviceExtension)
const KSDEVICE_DESCRIPTOR DeviceDescriptor
_Must_inspect_result_ _In_ ULONG Flags
NTSTATUS USBSTOR_HandleDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID NTAPI ResetHandlerWorkItemRoutine(PVOID Context)
NTSTATUS USBSTOR_SendCBW(PIRP_CONTEXT Context, PIRP Irp)
struct _FDO_DEVICE_EXTENSION FDO_DEVICE_EXTENSION
NTSTATUS USBSTOR_SyncUrbRequest(IN PDEVICE_OBJECT DeviceObject, OUT PURB UrbRequest)
UCHAR ContiguousLogicBlocksByte1
NTSTATUS USBSTOR_FdoHandlePnp(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS NTAPI USBSTOR_CSWCompletionRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Ctx)
struct IRP_CONTEXT * PIRP_CONTEXT
PVOID AllocateItem(IN POOL_TYPE PoolType, IN ULONG ItemSize)
PFDO_DEVICE_EXTENSION FDODeviceExtension
NTSTATUS USBSTOR_HandleInternalDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _IRP_CONTEXT IRP_CONTEXT
_Must_inspect_result_ _Out_ PNDIS_STATUS _Out_ PNDIS_HANDLE ConfigurationHandle
_In_z_ PCCHAR _In_ PDEVICE_OBJECT LowerDeviceObject
struct UFI_SENSE_CMD * PUFI_SENSE_CMD
VOID USBSTOR_QueueRelease(IN PDEVICE_OBJECT DeviceObject)
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
struct UFI_CAPACITY_FORMAT_HEADER * PUFI_CAPACITY_FORMAT_HEADER
struct UFI_UNKNOWN_CMD * PUFI_UNKNOWN_CMD
NTSTATUS USBSTOR_GetMaxLUN(IN PDEVICE_OBJECT DeviceObject, IN PFDO_DEVICE_EXTENSION DeviceExtension)
VOID NTAPI USBSTOR_TimerRoutine(PDEVICE_OBJECT DeviceObject, PVOID Context)
struct _PDO_DEVICE_EXTENSION PDO_DEVICE_EXTENSION
struct UFI_MODE_PARAMETER_HEADER * PUFI_MODE_PARAMETER_HEADER
NTSTATUS USBSTOR_CreatePDO(IN PDEVICE_OBJECT DeviceObject, IN UCHAR LUN)
struct _ERRORHANDLER_WORKITEM_DATA ERRORHANDLER_WORKITEM_DATA
_Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT * FunctionalDeviceObject
struct UFI_INQUIRY_CMD * PUFI_INQUIRY_CMD
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
struct PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
NTSTATUS NTAPI USBSTOR_GetBusInterface(IN PDEVICE_OBJECT DeviceObject, OUT PUSB_BUS_INTERFACE_USBDI_V2 BusInterface)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
NTSTATUS USBSTOR_GetDescriptors(IN PDEVICE_OBJECT DeviceObject)
struct FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
VOID NTAPI ErrorHandlerWorkItemRoutine(PVOID Context)
NTSTATUS USBSTOR_SelectConfigurationAndInterface(IN PDEVICE_OBJECT DeviceObject, IN PFDO_DEVICE_EXTENSION DeviceExtension)
VOID NTAPI USBSTOR_CancelIo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID FreeItem(IN PVOID Item)
static const WCHAR Signature[]
NTSTATUS USBSTOR_HandleExecuteSCSI(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct UFI_TEST_UNIT_CMD * PUFI_TEST_UNIT_CMD
NTSTATUS NTAPI USBSTOR_SyncForwardIrp(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
VOID USBSTOR_QueueNextRequest(IN PDEVICE_OBJECT DeviceObject)