32 DPRINT(
"PortCreatePdo(%p %p)\n",
33 FdoDeviceExtension, PdoDeviceExtension);
64 &FdoDeviceExtension->PdoListHead,
66 &FdoDeviceExtension->PdoCount);
68 DeviceExtension->
Bus = Bus;
70 DeviceExtension->
Lun =
Lun;
99 Pdo->Flags &= ~DO_DEVICE_INITIALIZING;
101 *PdoDeviceExtension = DeviceExtension;
189 InquiryData = DeviceExtension->InquiryBuffer;
199 CharCount *
sizeof(
WCHAR),
203 Irp->IoStatus.Information = 0;
233 L"SCSI\\%hs&Ven_%hs&Prod_%hs&Rev_%hs",
257 size_t CharCount, Remaining;
278 (
sizeof(
"SCSI\\") - 1) * 4 +
286 CharCount *
sizeof(
WCHAR),
290 Irp->IoStatus.Information = 0;
321 L"SCSI\\%hs%.8hs%.16hs%.4hs",
328 DPRINT(
"1) '%S'\n", IdStart);
340 L"SCSI\\%hs%.8hs%.16hs",
346 DPRINT(
"2) '%S'\n", IdStart);
363 DPRINT(
"3) '%S'\n", IdStart);
375 L"SCSI\\%.8hs%.16hs%.1hs",
381 DPRINT(
"4) '%S'\n", IdStart);
399 DPRINT(
"5) '%S'\n", IdStart);
415 DPRINT(
"6) '%S'\n", IdStart);
433 size_t CharCount, Remaining;
444 (
sizeof(
"SCSI\\RAW") - 1) +
sizeof(
ANSI_NULL) +
448 CharCount *
sizeof(
WCHAR),
452 Irp->IoStatus.Information = 0;
456 DPRINT(
"CompatibleIDs:\n");
469 DPRINT(
"1) '%S'\n", IdStart);
484 DPRINT(
"2) '%S'\n", IdStart);
504 CharCount =
sizeof(
"FFFFFF");
507 CharCount *
sizeof(
WCHAR),
511 Irp->IoStatus.Information = 0;
563 (
sizeof(
" SCSI ") - 1) +
565 (
sizeof(
" Device ") - 1) +
569 CharCount *
sizeof(
WCHAR),
584 LocalBuffer[
Offset++] =
' ';
597 L"%hs SCSI %hs Device",
608 CharCount =
sizeof(
"Bus Number 255, Target ID 255, LUN 255");
611 CharCount *
sizeof(
WCHAR),
624 L"Bus Number %lu, Target ID %lu, LUN %lu",
660 return Irp->IoStatus.Status;
664 if (!deviceRelations)
670 deviceRelations->
Count = 1;
696 switch (
Stack->MinorFunction)
732 DPRINT(
"IRP_MN_QUERY_ID IdType %s\n",
#define ExAllocatePoolUninitialized
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define FILE_DEVICE_SECURE_OPEN
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
#define NT_SUCCESS(StatCode)
_ACRTIMP size_t __cdecl strlen(const char *)
PCHAR DbgGetDeviceIDString(BUS_QUERY_ID_TYPE Type)
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
#define TAG_DEVICE_RELATION
#define ExAllocatePoolWithTag(hernya, size, tag)
#define InitializeListHead(ListHead)
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
FORCEINLINE ULONG StorpInterlockedInsertHeadListCounted(_In_ PKSPIN_LOCK SpinLock, _In_ PLIST_ENTRY ListHead, _In_ PLIST_ENTRY Entry, _In_ PULONG Counter)
InsertHeadList and increment element counter with a corresponding spin lock held.
FORCEINLINE BOOLEAN StorpInterlockedRemoveEntryListCounted(_In_ PKSPIN_LOCK SpinLock, _In_ PLIST_ENTRY Entry, _In_ PULONG Counter)
RemoveEntryList and decrement element counter with a corresponding spin lock held.
#define RTL_FIELD_SIZE(type, field)
#define ExFreePoolWithTag(_P, _T)
#define FILE_DEVICE_MASS_STORAGE
#define FILE_AUTOGENERATED_DEVICE_NAME
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
_In_ ULONG _In_ ULONG Offset
#define IRP_MN_SURPRISE_REMOVAL
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
#define IoCompleteRequest
NTSTRSAFEVAPI RtlStringCchPrintfExW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd, _Out_opt_ size_t *pcchRemaining, _In_ STRSAFE_DWORD dwFlags, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
static NTSTATUS PdoHandleDeviceRelations(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
static NTSTATUS PdoHandleQueryDeviceText(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
static NTSTATUS PdoHandleQueryHardwareId(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
static NTSTATUS PdoHandleQueryInstanceId(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
static NTSTATUS PdoHandleQueryCompatibleId(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
static ULONG CopyField(IN PUCHAR Name, IN PCHAR Buffer, IN ULONG MaxLength, IN CHAR DefaultCharacter, IN BOOLEAN Trim)
static NTSTATUS PdoHandleQueryDeviceId(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
NTSTATUS PortDeletePdo(_In_ PPDO_DEVICE_EXTENSION PdoExtension)
NTSTATUS NTAPI PortPdoPnp(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
NTSTATUS PortCreatePdo(_In_ PFDO_DEVICE_EXTENSION FdoDeviceExtension, _In_ ULONG Bus, _In_ ULONG Target, _In_ ULONG Lun, _Out_ PPDO_DEVICE_EXTENSION *PdoDeviceExtension)
PDEVICE_OBJECT Objects[1]
UCHAR ProductRevisionLevel[4]
struct _IO_STACK_LOCATION::@5020::@5045 QueryDeviceRelations
union _IO_STACK_LOCATION::@1814 Parameters
struct _IO_STACK_LOCATION::@5020::@5052 QueryDeviceText
PFDO_DEVICE_EXTENSION FdoExtension
PDO_IO_FLOW_CONTROL FlowControl
ULONG OutstandingRequestMax
EXTENSION_TYPE ExtensionType
LONG SpecialRequestCounter
LIST_ENTRY ActiveRequestsListHead
BOOLEAN IsWaitingQueueClear
ULONG RemainingBusyRequests
ULONG OutstandingRequestCount
LIST_ENTRY AwaitingRequestsListHead
#define RtlZeroMemory(Destination, Length)
#define STATUS_INSUFFICIENT_RESOURCES
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
#define IRP_MN_START_DEVICE
#define IRP_MN_REMOVE_DEVICE
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define IRP_MN_QUERY_STOP_DEVICE
#define IRP_MN_QUERY_DEVICE_TEXT
#define IRP_MN_QUERY_CAPABILITIES
@ DeviceTextLocationInformation
#define IRP_MN_QUERY_REMOVE_DEVICE
#define ObReferenceObject