103 if (!FirstDescriptor)
133 if (!FirstDescriptor)
276 for (
i = 0;
i < Alternatives->Count;
i++)
278 TempBuffer = Alternatives->
Irq[
i].
Mask;
285 AltOptionalCount += BitCount - 1;
290 for (
i = 0;
i < Alternatives->Count;
i++)
292 TempBuffer = Alternatives->
Dma[
i].
Mask;
299 AltOptionalCount += BitCount - 1;
324 RequirementsList->AlternativeLists = Alternatives ? Alternatives->Count : 1;
344 FirstDescriptor =
TRUE;
357 FirstDescriptor =
FALSE;
365 FirstDescriptor =
TRUE;
378 FirstDescriptor =
FALSE;
439 for (
j = 0;
j < AltList->
Count - AltCount;
j++)
455 &Alternatives->
Io[BestConfig[
i]]);
459 FirstDescriptor =
TRUE;
463 if (!(Alternatives->
Irq[BestConfig[
i]].
Mask & (1 <<
j)))
467 &Alternatives->
Irq[BestConfig[
i]],
472 FirstDescriptor =
FALSE;
479 FirstDescriptor =
TRUE;
483 if (!(Alternatives->
Dma[BestConfig[
i]].
Mask & (1 <<
j)))
487 &Alternatives->
Dma[BestConfig[
i]],
492 FirstDescriptor =
FALSE;
548 *WriteOrder = LogDevice->Io[
i].Index;
554 if (!LogDevice->Alternatives)
557 for (
i = 0;
i < LogDevice->Alternatives->Count;
i++)
572 *WriteOrder = LogDevice->Alternatives->IoIndex;
604 *WriteOrder = LogDevice->Irq[
i].Index;
612 if (!LogDevice->Alternatives)
615 for (
i = 0;
i < LogDevice->Alternatives->Count;
i++)
626 *WriteOrder = LogDevice->Alternatives->IrqIndex;
660 *WriteOrder = LogDevice->Dma[
i].Index;
668 if (!LogDevice->Alternatives)
671 for (
i = 0;
i < LogDevice->Alternatives->Count;
i++)
682 *WriteOrder = LogDevice->Alternatives->DmaIndex;
721 *WriteOrder = LogDevice->MemRange[
i].Index;
728 Description32 = &LogDevice->MemRange32[
i].Description;
730 if ((RangeStart >= Description32->
Minimum) &&
731 (RangeEnd <= (Description32->
Maximum + Description32->
Length - 1)))
738 *WriteOrder = LogDevice->MemRange32[
i].Index;
744 if (!LogDevice->Alternatives)
747 for (
i = 0;
i < LogDevice->Alternatives->Count;
i++)
759 *WriteOrder = LogDevice->Alternatives->MemRangeIndex;
764 for (
i = 0;
i < LogDevice->Alternatives->Count;
i++)
766 Description32 = &LogDevice->Alternatives->MemRange32[
i];
768 if ((RangeStart >= Description32->
Minimum) &&
769 (RangeEnd <= (Description32->
Maximum + Description32->
Length - 1)))
776 *WriteOrder = LogDevice->Alternatives->MemRange32Index;
872 goto InvalidBiosResources;
892 goto InvalidBiosResources;
903 Descriptor->u.Interrupt.Affinity = 0xFFFFFFFF;
911 goto InvalidBiosResources;
931 goto InvalidBiosResources;
957 goto InvalidBiosResources;
973 PdoExt->ResourceListSize = ListSize;
977 DPRINT(
"Invalid boot resources! (CSN %u, LDN %u)\n", LogDev->
CSN, LogDev->
LDN);
979 LogDev->
Flags &= ~ISAPNP_HAS_RESOURCES;
986static CODE_SEG(
"PAGE") DRIVER_DISPATCH_PAGED IsaCreateClose;
1009static CODE_SEG(
"PAGE") DRIVER_DISPATCH_PAGED IsaForwardOrIgnore;
1050 const ULONG ReadPorts[] = { 0x274, 0x3E4, 0x204, 0x2E4, 0x354, 0x2F4 };
1054 if (SelectedReadPort)
1129 if (SelectedReadPort)
1137 if (ReadPorts[
i] != SelectedReadPort)
1146 Descriptor->u.Port.MinimumAddress.LowPart = ReadPorts[
i];
1147 Descriptor->u.Port.MaximumAddress.LowPart = ReadPorts[
i] +
1167 Descriptor->u.Port.MinimumAddress.LowPart = ReadPorts[
i / 2];
1168 Descriptor->u.Port.MaximumAddress.LowPart = ReadPorts[
i / 2] +
1211 ResourceList->List[0].PartialResourceList.Revision = 1;
1227 PdoExt->ResourceListSize = ListSize;
1243 DPRINT(
"Creating Read Port\n");
1251 &FdoExt->ReadPortPdo);
1255 PdoExt = FdoExt->ReadPortPdo->DeviceExtension;
1270 FdoExt->ReadPortPdo->Flags &= ~DO_DEVICE_INITIALIZING;
1277 FdoExt->ReadPortPdo =
NULL;
1291 DPRINT(
"Removing Read Port\n");
1317 IsaPnpAcquireBusDataLock();
1320 if (!ReadPortCreated)
1326 ReadPortCreated =
TRUE;
1329 IsaPnpReleaseBusDataLock();
1332 if (!FdoExt->ReadPortPdo)
1333 IncludeDataPort =
FALSE;
1335 IsaPnpAcquireDeviceDataLock(FdoExt);
1338 if (IncludeDataPort && FdoExt->ReadPortPdo)
1345 DPRINT(
"Rescan ISA PnP bus\n");
1351 if (FdoExt->Cards > 0)
1352 (
VOID)IsaHwFillDeviceList(FdoExt);
1357 ReadPortExt->
Flags &= ~ISAPNP_SCANNED_BY_READ_PORT;
1360 PdoCount = FdoExt->DeviceCount;
1361 if (IncludeDataPort)
1364 CurrentEntry = FdoExt->DeviceListHead.
Flink;
1365 while (CurrentEntry != &FdoExt->DeviceListHead)
1372 CurrentEntry = CurrentEntry->
Flink;
1378 if (!DeviceRelations)
1380 IsaPnpReleaseDeviceDataLock(FdoExt);
1384 if (IncludeDataPort)
1388 DeviceRelations->
Objects[
i++] = FdoExt->ReadPortPdo;
1395 CurrentEntry = FdoExt->DeviceListHead.
Flink;
1396 while (CurrentEntry != &FdoExt->DeviceListHead)
1405 if (!IsaDevice->
Pdo)
1417 IsaDevice->
Pdo->
Flags &= ~DO_DEVICE_INITIALIZING;
1426 PdoExt->IsaPnpDevice = IsaDevice;
1432 if (
PdoExt->RequirementsList)
1438 if (
PdoExt->ResourceList)
1458 CurrentEntry = CurrentEntry->
Flink;
1467 PdoExt->Flags &= ~ISAPNP_ENUMERATED;
1470 CurrentEntry = CurrentEntry->
Flink;
1473 IsaPnpReleaseDeviceDataLock(FdoExt);
1475 DeviceRelations->
Count =
i;
1477 Irp->IoStatus.Information = (
ULONG_PTR)DeviceRelations;
1514 FdoExt =
Fdo->DeviceExtension;
1534 IsaPnpAcquireBusDataLock();
1536 IsaPnpReleaseBusDataLock();
1538 Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
1582static CODE_SEG(
"PAGE") DRIVER_DISPATCH_PAGED IsaPnp;
1618 DriverObject->DriverExtension->AddDevice = IsaAddDevice;
struct _IO_RESOURCE_LIST * PIO_RESOURCE_LIST
#define IO_RESOURCE_ALTERNATIVE
struct _IO_RESOURCE_LIST IO_RESOURCE_LIST
struct _IO_RESOURCE_DESCRIPTOR IO_RESOURCE_DESCRIPTOR
struct _IO_RESOURCE_REQUIREMENTS_LIST IO_RESOURCE_REQUIREMENTS_LIST
#define _Dispatch_type_(a)
PDEVICE_OBJECT PhysicalDeviceObject
NTSTATUS IsaFdoPnp(_In_ PISAPNP_FDO_EXTENSION FdoExt, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
#define FILE_DEVICE_SECURE_OPEN
#define _Guarded_by_(lock)
#define _No_competing_thread_begin_
#define _No_competing_thread_end_
#define NT_SUCCESS(StatCode)
static const WCHAR Description[]
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
DRIVER_INITIALIZE DriverEntry
UCHAR IsaHwTryReadDataPort(_In_ PUCHAR ReadDataPort)
_In_ PIO_STACK_LOCATION IrpSp
#define InsertTailList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define KeInitializeEvent(pEvt, foo, foo2)
#define InitializeListHead(ListHead)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
struct _CM_RESOURCE_LIST CM_RESOURCE_LIST
#define CmResourceTypeMemory
#define CmResourceTypeDma
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_DESCRIPTOR
#define CmResourceTypePort
#define CmResourceTypeInterrupt
static ULONG ResourceCount
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
NTSYSAPI ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP)
static VOID IsaConvertIrqRequirement(_Out_ PIO_RESOURCE_DESCRIPTOR Descriptor, _In_ PISAPNP_IRQ_DESCRIPTION Description, _In_ ULONG Vector, _In_ BOOLEAN FirstDescriptor)
static VOID IsaConvertIoRequirement(_Out_ PIO_RESOURCE_DESCRIPTOR Descriptor, _In_ PISAPNP_IO_DESCRIPTION Description)
NTSTATUS IsaPnpCreateReadPortDORequirements(_In_ PISAPNP_PDO_EXTENSION PdoExt, _In_opt_ ULONG SelectedReadPort)
BOOLEAN FindMemoryDescriptor(_In_ PISAPNP_LOGICAL_DEVICE LogDevice, _In_ ULONG RangeStart, _In_ ULONG RangeEnd, _Out_opt_ PBOOLEAN Memory32, _Out_opt_ PUCHAR Information, _Out_opt_ PUCHAR WriteOrder)
NTSTATUS IsaPnpFillDeviceRelations(_In_ PISAPNP_FDO_EXTENSION FdoExt, _Inout_ PIRP Irp, _In_ BOOLEAN IncludeDataPort)
static NTSTATUS IsaPnpCreateLogicalDeviceRequirements(_In_ PISAPNP_PDO_EXTENSION PdoExt)
VOID IsaPnpRemoveReadPortDO(_In_ PDEVICE_OBJECT Pdo)
static NTSTATUS IsaPnpCreateLogicalDeviceResources(_In_ PISAPNP_PDO_EXTENSION PdoExt)
BOOLEAN FindIrqDescriptor(_In_ PISAPNP_LOGICAL_DEVICE LogDevice, _In_ ULONG Vector, _Out_opt_ PUCHAR WriteOrder)
static VOID IsaConvertMemRange32Requirement(_Out_ PIO_RESOURCE_DESCRIPTOR Descriptor, _In_ PISAPNP_MEMRANGE32_DESCRIPTION Description)
static VOID IsaConvertMemRangeRequirement(_Out_ PIO_RESOURCE_DESCRIPTOR Descriptor, _In_ PISAPNP_MEMRANGE_DESCRIPTION Description)
static NTSTATUS IsaPnpCreateReadPortDOResources(_In_ PISAPNP_PDO_EXTENSION PdoExt)
static VOID IsaConvertDmaRequirement(_Out_ PIO_RESOURCE_DESCRIPTOR Descriptor, _In_ PISAPNP_DMA_DESCRIPTION Description, _In_ ULONG Channel, _In_ BOOLEAN FirstDescriptor)
BOOLEAN FindIoDescriptor(_In_ PISAPNP_LOGICAL_DEVICE LogDevice, _In_opt_ ULONG Base, _In_ ULONG RangeStart, _In_ ULONG RangeEnd, _Out_opt_ PUCHAR Information, _Out_opt_ PULONG Length, _Out_opt_ PUCHAR WriteOrder)
static VOID IsaDetermineBestConfig(_Out_writes_all_(ISAPNP_MAX_ALTERNATIVES) PUCHAR BestConfig, _In_ PISAPNP_ALTERNATIVES Alternatives)
static NTSTATUS IsaPnpCreateReadPortDO(_In_ PISAPNP_FDO_EXTENSION FdoExt)
BOOLEAN FindDmaDescriptor(_In_ PISAPNP_LOGICAL_DEVICE LogDevice, _In_ ULONG Channel, _Out_opt_ PUCHAR WriteOrder)
#define ISAPNP_READ_PORT_ALLOW_FDO_SCAN
Allows the active FDO to scan the bus.
#define ISAPNP_MAX_ALTERNATIVES
Maximum number of Start DF tags supported by the driver.
FORCEINLINE BOOLEAN HasDmaAlternatives(_In_ PISAPNP_ALTERNATIVES Alternatives)
NTSTATUS IsaPdoPnp(_In_ PISAPNP_PDO_EXTENSION PdoDeviceExtension, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
#define ISAPNP_PRESENT
Cleared when the device is physically removed.
FORCEINLINE BOOLEAN HasMemory32Alternatives(_In_ PISAPNP_ALTERNATIVES Alternatives)
FORCEINLINE BOOLEAN HasMemoryAlternatives(_In_ PISAPNP_ALTERNATIVES Alternatives)
#define ISAPNP_HAS_RESOURCES
Cleared when the device has no boot resources.
FORCEINLINE BOOLEAN HasIoAlternatives(_In_ PISAPNP_ALTERNATIVES Alternatives)
#define ISAPNP_SCANNED_BY_READ_PORT
The bus has been scanned by Read Port PDO.
#define ISAPNP_ENUMERATED
Whether the device has been reported to the PnP manager.
FORCEINLINE BOOLEAN HasIrqAlternatives(_In_ PISAPNP_ALTERNATIVES Alternatives)
#define ISAPNP_WRITE_DATA
#define ExFreePoolWithTag(_P, _T)
#define _Out_writes_all_(size)
#define CM_RESOURCE_PORT_IO
#define CM_RESOURCE_DMA_8
#define CM_RESOURCE_MEMORY_READ_ONLY
#define CM_RESOURCE_PORT_16_BIT_DECODE
#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE
#define CM_RESOURCE_MEMORY_READ_WRITE
#define CM_RESOURCE_MEMORY_24
#define CM_RESOURCE_INTERRUPT_LATCHED
#define CM_RESOURCE_PORT_10_BIT_DECODE
#define FILE_AUTOGENERATED_DEVICE_NAME
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
#define RTL_BITS_OF(sizeOfArg)
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define IoSkipCurrentIrpStackLocation(Irp)
PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice)
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
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
#define STATUS_DEVICE_REMOVED
static PS2_PORT Ports[PS2_PORTS]
#define FILE_DEVICE_BUS_EXTENDER
#define FILE_DEVICE_CONTROLLER
#define IRP_MJ_DEVICE_CONTROL
void __cdecl qsort(_Inout_updates_bytes_(_NumOfElements *_SizeOfElements) void *_Base, _In_ size_t _NumOfElements, _In_ size_t _SizeOfElements, _In_ int(__cdecl *_PtFuncCompare)(const void *, const void *))
PDEVICE_OBJECT Objects[1]
IO_RESOURCE_DESCRIPTOR Descriptors[1]
ISAPNP_IRQ_DESCRIPTION Irq[ISAPNP_MAX_ALTERNATIVES]
ISAPNP_MEMRANGE32_DESCRIPTION MemRange32[ISAPNP_MAX_ALTERNATIVES]
ISAPNP_MEMRANGE_DESCRIPTION MemRange[ISAPNP_MAX_ALTERNATIVES]
ISAPNP_IO_DESCRIPTION Io[ISAPNP_MAX_ALTERNATIVES]
ISAPNP_DMA_DESCRIPTION Dma[ISAPNP_MAX_ALTERNATIVES]
ISAPNP_SIGNATURE Signature
ISAPNP_DEVICE_STATE State
ISAPNP_DMA_DESCRIPTION Description
PDRIVER_OBJECT DriverObject
ISAPNP_COMMON_EXTENSION Common
ISAPNP_IO_DESCRIPTION Description
ISAPNP_IRQ_DESCRIPTION Description
ISAPNP_MEMRANGE32 MemRange32[4]
ISAPNP_MEMRANGE MemRange[4]
PISAPNP_ALTERNATIVES Alternatives
ISAPNP_MEMRANGE32_DESCRIPTION Description
ISAPNP_MEMRANGE_DESCRIPTION Description
PCM_RESOURCE_LIST ResourceList
PIO_RESOURCE_REQUIREMENTS_LIST RequirementsList
struct _LIST_ENTRY * Flink
COMMON_DEVICE_EXTENSION Common
#define FIELD_OFFSET(t, f)
#define RtlZeroMemory(Destination, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
PUSBHUB_PORT_PDO_EXTENSION NTAPI PdoExt(IN PDEVICE_OBJECT DeviceObject)
_In_ PDEVICE_OBJECT DeviceObject
_In_ UCHAR _In_ UCHAR MinorFunction
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFDEVICE Fdo
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_ WDFDRIVER _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT Pdo
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
_In_ WDFIORESREQLIST RequirementsList
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
@ CmResourceShareDeviceExclusive
@ CmResourceShareUndetermined
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG BusNumber
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
DRIVER_DISPATCH DRIVER_DISPATCH_RAISED
#define IRP_MJ_SYSTEM_CONTROL
#define IRP_MN_QUERY_POWER
#define ObReferenceObject