33 DPRINT(
"PortCreatePdo(%p %p)\n",
34 FdoDeviceExtension, PdoDeviceExtension);
64 if (FdoDeviceExtension->HwInitData !=
NULL &&
65 FdoDeviceExtension->HwInitData->SpecificLuExtensionSize != 0)
69 FdoDeviceExtension->HwInitData->SpecificLuExtensionSize,
73 DPRINT1(
"No pool for the unit extension\n");
79 DeviceExtension->
Bus = Bus;
81 DeviceExtension->
Lun =
Lun;
117 Pdo->Flags &= ~DO_DEVICE_INITIALIZING;
119 *PdoDeviceExtension = DeviceExtension;
218 InquiryData = DeviceExtension->InquiryBuffer;
228 CharCount *
sizeof(
WCHAR),
232 Irp->IoStatus.Information = 0;
262 L"SCSI\\%hs&Ven_%hs&Prod_%hs&Rev_%hs",
286 size_t CharCount, Remaining;
307 (
sizeof(
"SCSI\\") - 1) * 4 +
315 CharCount *
sizeof(
WCHAR),
319 Irp->IoStatus.Information = 0;
350 L"SCSI\\%hs%.8hs%.16hs%.4hs",
357 DPRINT(
"1) '%S'\n", IdStart);
369 L"SCSI\\%hs%.8hs%.16hs",
375 DPRINT(
"2) '%S'\n", IdStart);
392 DPRINT(
"3) '%S'\n", IdStart);
404 L"SCSI\\%.8hs%.16hs%.1hs",
410 DPRINT(
"4) '%S'\n", IdStart);
428 DPRINT(
"5) '%S'\n", IdStart);
444 DPRINT(
"6) '%S'\n", IdStart);
462 size_t CharCount, Remaining;
473 (
sizeof(
"SCSI\\RAW") - 1) +
sizeof(
ANSI_NULL) +
477 CharCount *
sizeof(
WCHAR),
481 Irp->IoStatus.Information = 0;
485 DPRINT(
"CompatibleIDs:\n");
498 DPRINT(
"1) '%S'\n", IdStart);
513 DPRINT(
"2) '%S'\n", IdStart);
533 CharCount =
sizeof(
"FFFFFF");
536 CharCount *
sizeof(
WCHAR),
540 Irp->IoStatus.Information = 0;
592 (
sizeof(
" SCSI ") - 1) +
594 (
sizeof(
" Device ") - 1) +
598 CharCount *
sizeof(
WCHAR),
613 LocalBuffer[
Offset++] =
' ';
626 L"%hs SCSI %hs Device",
637 CharCount =
sizeof(
"Bus Number 255, Target ID 255, LUN 255");
640 CharCount *
sizeof(
WCHAR),
653 L"Bus Number %lu, Target ID %lu, LUN %lu",
689 return Irp->IoStatus.Status;
693 if (!deviceRelations)
699 deviceRelations->
Count = 1;
725 switch (
Stack->MinorFunction)
761 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 TAG_LUN_EXTENSION
VOID NTAPI StorpBuildUnitAddress(_In_ PPDO_DEVICE_EXTENSION PdoExtension, _Out_ PSTOR_ADDR_BTL8 Address)
Fills in the bus, target and LUN address of a logical unit.
#define ExAllocatePoolWithTag(hernya, size, tag)
#define InitializeListHead(ListHead)
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
#define RTL_FIELD_SIZE(type, field)
#define ExFreePoolWithTag(_P, _T)
#define FILE_DEVICE_MASS_STORAGE
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
#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,...)
struct STOR_ADDRESS_ALIGN _STOR_ADDR_BTL8 STOR_ADDR_BTL8
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)
VOID NTAPI PortFdoUnlinkPdo(_Inout_ PFDO_DEVICE_EXTENSION FdoExtension, _Inout_ PPDO_DEVICE_EXTENSION PdoExtension)
VOID NTAPI PortFdoLinkPdo(_Inout_ PFDO_DEVICE_EXTENSION FdoExtension, _Inout_ PPDO_DEVICE_EXTENSION PdoExtension)
Adds a PDO where both the list lock and the interrupt service routines respect it.
SCSI_UNIT_CONTROL_STATUS NTAPI MiniportUnitControl(_In_ PMINIPORT Miniport, _In_ SCSI_UNIT_CONTROL_TYPE ControlType, _In_opt_ PVOID Parameters)
Sends one unit control request, if the miniport claimed it.
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]
union _IO_STACK_LOCATION::@1823 Parameters
struct _IO_STACK_LOCATION::@5136::@5168 QueryDeviceText
struct _IO_STACK_LOCATION::@5136::@5161 QueryDeviceRelations
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