62 LunPDO->
Flags &= ~DO_DEVICE_INITIALIZING;
74 if (
PathId >= DeviceExtension->NumberOfBuses)
84 lunEntry = lunEntry->
Flink)
110 return &LunExtension->SrbInfo;
115 if (QueueTag > DeviceExtension->SrbDataCount || QueueTag < 1)
118 return &DeviceExtension->SrbInfo[QueueTag -1];
150 Index = MaxLength - 1;
176 CHAR LocalBuffer[64];
180 DPRINT(
"PdoHandleQueryDeviceText\n");
190 DPRINT(
"DeviceTextDescription\n");
197 LocalBuffer[
Offset++] =
' ';
206 LocalBuffer[
Offset++] =
'\0';
217 Irp->IoStatus.Information = 0;
229 DPRINT(
"DeviceTextLocationInformation\n");
231 sprintf(LocalBuffer,
"Bus Number %d, Target ID %d, LUN %d",
243 Irp->IoStatus.Information = 0;
255 Irp->IoStatus.Information = 0;
256 return Irp->IoStatus.Status;
320 ASSERT(ResultBufferLength);
321 ASSERT(ResultBufferLength > ResultBufferOffset);
323 DPRINT(
"ResultBufferOffset %lu ResultBufferLength %lu Buffer %s Length %lu\n",
329 DeviceString.
MaximumLength = (ResultBufferLength - ResultBufferOffset) *
sizeof(
WCHAR);
338 ResultBufferLength -= (DeviceString.
Length +
sizeof(
WCHAR)) /
sizeof(
WCHAR);
339 ResultBufferOffset += (DeviceString.
Length +
sizeof(
WCHAR)) /
sizeof(
WCHAR);
341 *NewResultBufferOffset = ResultBufferOffset;
353 CHAR Id1[50], Id2[50], Id3[50], Id4[50], Id5[50], Id6[50];
354 ULONG Id1Length, Id2Length, Id3Length, Id4Length, Id5Length, Id6Length;
374 Id1Length =
strlen(Id1) + 1;
375 DPRINT(
"PdoHandleQueryHardwareId HardwareId1 %s\n", Id1);
385 Id2Length =
strlen(Id2) + 1;
386 DPRINT(
"PdoHandleQueryHardwareId HardwareId2 %s\n", Id2);
395 Id3Length =
strlen(Id3) + 1;
396 DPRINT(
"PdoHandleQueryHardwareId HardwareId3 %s\n", Id3);
406 Id4Length =
strlen(Id4) + 1;
407 DPRINT(
"PdoHandleQueryHardwareId HardwareId4 %s\n", Id4);
416 Id5Length =
strlen(Id5) + 1;
417 DPRINT(
"PdoHandleQueryHardwareId HardwareId5 %s\n", Id5);
424 Id6Length =
strlen(Id6) + 1;
425 DPRINT(
"PdoHandleQueryHardwareId HardwareId6 %s\n", Id6);
427 TotalLength = Id1Length + Id2Length + Id3Length + Id4Length + Id5Length + Id6Length + 1;
432 Irp->IoStatus.Information = 0;
476 Irp->IoStatus.Information = 0;
510 Irp->IoStatus.Information = 0;
535 return Irp->IoStatus.Status;
539 if (!deviceRelations)
545 deviceRelations->
Count = 1;
595 DPRINT(
"IRP_MN_QUERY_ID IdType %s\n",
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
ACPI_SIZE strlen(const char *String)
#define FILE_DEVICE_SECURE_OPEN
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR PathId
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR TargetId
VOID NTAPI KeInitializeDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue)
#define NT_SUCCESS(StatCode)
FORCEINLINE PCHAR GetIRPMinorFunctionString(UCHAR MinorFunction)
PCHAR DbgGetDeviceIDString(BUS_QUERY_ID_TYPE Type)
NTSTATUS RegistryInitLunKey(_Inout_ PSCSI_PORT_LUN_EXTENSION LunExtension)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define InitializeListHead(ListHead)
_Must_inspect_result_ _In_opt_ PVOID _In_opt_ PVOID InstanceId
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
PKMT_RESULTBUFFER ResultBuffer
#define sprintf(buf, format,...)
#define FILE_AUTOGENERATED_DEVICE_NAME
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
#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)
#define IoCompleteRequest
struct _SCSI_PORT_LUN_EXTENSION SCSI_PORT_LUN_EXTENSION
FORCEINLINE PCSTR GetGenericType(_In_ PINQUIRYDATA InquiryData)
FORCEINLINE PCSTR GetDeviceType(_In_ PINQUIRYDATA InquiryData)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
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)
PDEVICE_OBJECT PdoCreateLunDevice(_In_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension)
static VOID ConvertToUnicodeString(IN CHAR *Buffer, IN ULONG ResultBufferLength, IN ULONG ResultBufferOffset, OUT LPWSTR ResultBuffer, OUT PULONG NewResultBufferOffset)
static NTSTATUS PdoHandleQueryInstanceId(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
PSCSI_REQUEST_BLOCK_INFO SpiGetSrbData(_In_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, _In_ PSCSI_PORT_LUN_EXTENSION LunExtension, _In_ UCHAR QueueTag)
NTSTATUS PdoDispatchPnp(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
PSCSI_PORT_LUN_EXTENSION GetLunByPath(_In_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, _In_ UCHAR PathId, _In_ UCHAR TargetId, _In_ UCHAR Lun)
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)
PDEVICE_OBJECT Objects[1]
UCHAR ProductRevisionLevel[4]
struct _IO_STACK_LOCATION::@3982::@4014 QueryDeviceText
union _IO_STACK_LOCATION::@1583 Parameters
struct _IO_STACK_LOCATION::@3982::@4013 QueryId
struct _IO_STACK_LOCATION::@3982::@4007 QueryDeviceRelations
struct _LIST_ENTRY * Flink
PDEVICE_OBJECT LowerDevice
PDEVICE_OBJECT DeviceObject
KDEVICE_QUEUE DeviceQueue
SCSI_PORT_COMMON_EXTENSION Common
SCSI_REQUEST_BLOCK_INFO SrbInfo
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INSUFFICIENT_RESOURCES
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
#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