11#pragma alloc_text (PAGE, Bus_PDO_PnP)
12#pragma alloc_text (PAGE, Bus_PDO_QueryDeviceCaps)
13#pragma alloc_text (PAGE, Bus_PDO_QueryDeviceId)
14#pragma alloc_text (PAGE, Bus_PDO_QueryDeviceText)
15#pragma alloc_text (PAGE, Bus_PDO_QueryResources)
16#pragma alloc_text (PAGE, Bus_PDO_QueryResourceRequirements)
17#pragma alloc_text (PAGE, Bus_PDO_QueryDeviceRelations)
18#pragma alloc_text (PAGE, Bus_PDO_QueryBusInformation)
19#pragma alloc_text (PAGE, Bus_GetDeviceCapabilities)
67 &GUID_DEVICE_SYS_BUTTON,
71 else if (
device->flags.hardware_id &&
75 &GUID_DEVICE_THERMAL_ZONE,
79 else if (
device->flags.hardware_id &&
87 else if (
device->flags.hardware_id &&
95 else if (
device->flags.hardware_id &&
99 &GUID_DEVICE_PROCESSOR,
347 deviceCapabilities=
stack->Parameters.DeviceCapabilities.Capabilities;
353 if (deviceCapabilities->Version != 1 ||
359 deviceCapabilities->D1Latency = 0;
360 deviceCapabilities->D2Latency = 0;
361 deviceCapabilities->D3Latency = 0;
370 if (!
device->power.states[
i].flags.valid)
381 deviceCapabilities->D1Latency =
device->power.states[
i].latency;
386 deviceCapabilities->D2Latency =
device->power.states[
i].latency;
391 deviceCapabilities->D3Latency =
device->power.states[
i].latency;
400 deviceCapabilities->DeviceD1 =
402 deviceCapabilities->DeviceD2 =
405 deviceCapabilities->WakeFromD0 =
FALSE;
406 deviceCapabilities->WakeFromD1 =
TRUE;
407 deviceCapabilities->WakeFromD2 =
FALSE;
408 deviceCapabilities->WakeFromD3 =
FALSE;
412 deviceCapabilities->LockSupported =
device->flags.lockable;
413 deviceCapabilities->EjectSupported =
device->flags.ejectable;
414 deviceCapabilities->HardwareDisabled = !
device->status.enabled && !
device->status.functional;
416 deviceCapabilities->SurpriseRemovalOK =
device->flags.surprise_removal_ok;
417 deviceCapabilities->UniqueID =
device->flags.unique_id;
418 deviceCapabilities->NoDisplayInUI = !
device->status.show_in_ui;
419 deviceCapabilities->Address =
device->pnp.bus_address;
423 deviceCapabilities->DockDevice =
TRUE;
424 DPRINT(
"DockDevice: %u\n", deviceCapabilities->DockDevice);
427 (
device->flags.hardware_id &&
434 deviceCapabilities->RawDeviceOK =
TRUE;
437 deviceCapabilities->SilentInstall =
FALSE;
438 deviceCapabilities->UINumber = (
ULONG)-1;
460 switch (
stack->Parameters.QueryId.IdType) {
489 L"ACPI\\FixedButton");
517 if (
Device->flags.unique_id)
557 if (!
Device->flags.hardware_id)
589 L"ACPI\\FixedButton");
625 if (!
Device->flags.hardware_id)
647 else if (
Device->flags.compatible_ids)
649 for (
i = 0;
i <
Device->pnp.cid_list->Count;
i++)
653 Device->pnp.cid_list->Ids[
i].String);
658 Device->pnp.cid_list->Ids[
i].String);
704 switch (
stack->Parameters.QueryDeviceText.DeviceTextType) {
708 if (!
Irp->IoStatus.Information) {
710 Temp =
L"Programmable interrupt controller";
712 Temp =
L"System timer";
714 Temp =
L"DMA controller";
718 Temp =
L"Parallel port";
720 Temp =
L"Serial port";
722 Temp =
L"Disk controller";
724 Temp =
L"Disk controller";
726 Temp =
L"Display adapter";
728 Temp =
L"Bus controller";
730 Temp =
L"PCMCIA controller";
732 Temp =
L"Mouse device";
734 Temp =
L"Network adapter";
736 Temp =
L"SCSI controller";
738 Temp =
L"Multimedia device";
742 Temp =
L"Power Button";
744 Temp =
L"Sleep Button";
746 Temp =
L"Lid Switch";
748 Temp =
L"ACPI Embedded Controller";
753 Temp =
L"PCI Root Bridge";
755 Temp =
L"ACPI Battery";
757 Temp =
L"PCI Interrupt Link";
759 Temp =
L"ACPI Power Resource";
768 Temp =
L"ACPI Thermal Zone";
770 Temp =
L"Smart Battery";
772 Temp =
L"AC Adapter";
777 Temp =
L"ACPI Fixed Feature Button";
779 Temp =
L"Other ACPI device";
810 ULONG NumberOfResources = 0;
816 ULONG ResourceListSize;
823 return Irp->IoStatus.Status;
835 if (AcpiStatus !=
AE_OK)
838 if (
device->flags.unique_id)
846 DPRINT1(
"Failed to find a bus number\n");
851 DPRINT(
"Using _BBN for bus number\n");
867 ResourceDescriptor =
ResourceList->List[0].PartialResourceList.PartialDescriptors;
884 return Irp->IoStatus.Status;
894 DPRINT1(
"AcpiGetCurrentResources #2 failed (0x%x)\n", AcpiStatus);
968 ResourceList->List[0].PartialResourceList.Count = NumberOfResources;
969 ResourceDescriptor =
ResourceList->List[0].PartialResourceList.PartialDescriptors;
988 ResourceDescriptor->
Flags =
994 ResourceDescriptor++;
1007 ResourceDescriptor->
Flags =
1013 ResourceDescriptor++;
1023 ResourceDescriptor->
Flags = 0;
1024 switch (dma_data->
Type)
1040 ResourceDescriptor++;
1054 ResourceDescriptor->
u.
Port.Start.QuadPart = io_data->
Minimum;
1057 ResourceDescriptor++;
1066 ResourceDescriptor->
u.
Port.Start.QuadPart = io_data->
Address;
1069 ResourceDescriptor++;
1081 ResourceDescriptor->
Flags = 0;
1099 ResourceDescriptor->
Flags = 0;
1104 switch (addr16_data->Info.Mem.Caching)
1113 ResourceDescriptor++;
1125 ResourceDescriptor->
Flags = 0;
1143 ResourceDescriptor->
Flags = 0;
1148 switch (addr32_data->Info.Mem.Caching)
1157 ResourceDescriptor++;
1167 DPRINT1(
"64-bit bus address is not supported!\n");
1170 ResourceDescriptor->
Flags = 0;
1188 ResourceDescriptor->
Flags = 0;
1193 switch (addr64_data->Info.Mem.Caching)
1202 ResourceDescriptor++;
1212 DPRINT1(
"64-bit bus address is not supported!\n");
1215 ResourceDescriptor->
Flags = 0;
1233 ResourceDescriptor->
Flags = 0;
1238 switch (addr64_data->Info.Mem.Caching)
1247 ResourceDescriptor++;
1260 ResourceDescriptor->
u.
Memory.Start.QuadPart = mem24_data->
Minimum;
1263 ResourceDescriptor++;
1271 ResourceDescriptor->
Flags = 0;
1276 ResourceDescriptor->
u.
Memory.Start.QuadPart = mem32_data->
Minimum;
1279 ResourceDescriptor++;
1287 ResourceDescriptor->
Flags = 0;
1292 ResourceDescriptor->
u.
Memory.Start.QuadPart = memfixed32_data->
Address;
1295 ResourceDescriptor++;
1317 ULONG NumberOfResources = 0;
1321 ULONG i, RequirementsListSize;
1331 return Irp->IoStatus.Status;
1338 return Irp->IoStatus.Status;
1355 return Irp->IoStatus.Status;
1371 DPRINT1(
"AcpiGetCurrentResources #2 failed (0x%x)\n", AcpiStatus);
1376 SeenStartDependent =
FALSE;
1383 if (SeenStartDependent)
1387 SeenStartDependent =
TRUE;
1419 NumberOfResources++;
1428 NumberOfResources++;
1458 SeenStartDependent =
FALSE;
1464 if (SeenStartDependent)
1468 SeenStartDependent =
TRUE;
1483 RequirementDescriptor->
u.
Interrupt.MinimumVector =
1486 RequirementDescriptor++;
1499 RequirementDescriptor->
u.
Interrupt.MinimumVector =
1502 RequirementDescriptor++;
1512 RequirementDescriptor->
Flags = 0;
1513 switch (dma_data->
Type)
1530 RequirementDescriptor->
u.
Dma.MinimumChannel =
1531 RequirementDescriptor->
u.
Dma.MaximumChannel = dma_data->
Channels[
i];
1532 RequirementDescriptor++;
1549 RequirementDescriptor->
u.
Port.MinimumAddress.QuadPart = io_data->
Minimum;
1552 RequirementDescriptor++;
1563 RequirementDescriptor->
u.
Port.Alignment = 1;
1564 RequirementDescriptor->
u.
Port.MinimumAddress.QuadPart = io_data->
Address;
1567 RequirementDescriptor++;
1580 RequirementDescriptor->
Flags = 0;
1600 RequirementDescriptor->
Flags = 0;
1605 switch (addr16_data->Info.Mem.Caching)
1615 RequirementDescriptor++;
1628 RequirementDescriptor->
Flags = 0;
1648 RequirementDescriptor->
Flags = 0;
1653 switch (addr32_data->Info.Mem.Caching)
1663 RequirementDescriptor++;
1674 DPRINT1(
"64-bit bus address is not supported!\n");
1677 RequirementDescriptor->
Flags = 0;
1697 RequirementDescriptor->
Flags = 0;
1702 switch (addr64_data->Info.Mem.Caching)
1712 RequirementDescriptor++;
1723 DPRINT1(
"64-bit bus address is not supported!\n");
1726 RequirementDescriptor->
Flags = 0;
1746 RequirementDescriptor->
Flags = 0;
1751 switch (addr64_data->Info.Mem.Caching)
1761 RequirementDescriptor++;
1775 RequirementDescriptor->
u.
Memory.MinimumAddress.QuadPart = mem24_data->
Minimum;
1779 RequirementDescriptor++;
1788 RequirementDescriptor->
Flags = 0;
1793 RequirementDescriptor->
u.
Memory.MinimumAddress.QuadPart = mem32_data->
Minimum;
1797 RequirementDescriptor++;
1806 RequirementDescriptor->
Flags = 0;
1811 RequirementDescriptor->
u.
Memory.MinimumAddress.QuadPart = fixedmem32_data->
Address;
1815 RequirementDescriptor++;
1878 switch (
stack->Parameters.QueryDeviceRelations.Type) {
1883 if (deviceRelations) {
1888 ASSERTMSG(
"Someone above is handling TargetDeviceRelation\n", !deviceRelations);
1894 if (!deviceRelations) {
1906 deviceRelations->
Count = 1;
1911 Irp->IoStatus.Information = (
ULONG_PTR) deviceRelations;
1956 if (busInfo ==
NULL) {
1960 busInfo->
BusTypeGuid = GUID_ACPI_INTERFACE_STANDARD;
2015 if (pnpIrp ==
NULL) {
2018 goto GetDeviceCapabilitiesExit;
2065GetDeviceCapabilitiesExit:
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
int strcmp(const char *String1, const char *String2)
char * strstr(char *String1, char *String2)
#define AE_BUFFER_OVERFLOW
#define ACPI_BUTTON_HID_LID
#define ACPI_PROCESSOR_HID
PCHAR DbgDeviceRelationString(DEVICE_RELATION_TYPE Type)
NTSTATUS Bus_PDO_QueryInterface(PPDO_DEVICE_DATA DeviceData, PIRP Irp)
UNICODE_STRING ProcessorHardwareIds
LPWSTR ProcessorNameString
#define ACPI_RESOURCE_TYPE_MEMORY32
#define ACPI_CACHABLE_MEMORY
#define ACPI_NEXT_RESOURCE(Res)
#define ACPI_RESOURCE_TYPE_DMA
#define ACPI_RESOURCE_TYPE_MEMORY24
#define ACPI_READ_ONLY_MEMORY
#define ACPI_RESOURCE_TYPE_EXTENDED_IRQ
#define ACPI_RESOURCE_TYPE_IRQ
#define ACPI_RESOURCE_TYPE_FIXED_IO
#define ACPI_BUS_NUMBER_RANGE
#define ACPI_TRANSFER_8_16
#define ACPI_RESOURCE_TYPE_END_DEPENDENT
#define ACPI_RESOURCE_TYPE_END_TAG
#define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64
#define ACPI_RESOURCE_TYPE_START_DEPENDENT
#define ACPI_PREFETCHABLE_MEMORY
#define ACPI_RESOURCE_TYPE_ADDRESS64
#define ACPI_WRITE_COMBINING_MEMORY
#define ACPI_RESOURCE_TYPE_FIXED_MEMORY32
#define ACPI_RESOURCE_TYPE_ADDRESS32
#define ACPI_LEVEL_SENSITIVE
#define ACPI_RESOURCE_TYPE_IO
#define ACPI_RESOURCE_TYPE_ADDRESS16
#define ACPI_D_STATE_COUNT
NTSTATUS Bus_PDO_PnP(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpStack, PPDO_DEVICE_DATA DeviceData)
NTSTATUS Bus_PDO_QueryResources(PPDO_DEVICE_DATA DeviceData, PIRP Irp)
NTSTATUS Bus_PDO_QueryDeviceRelations(PPDO_DEVICE_DATA DeviceData, PIRP Irp)
NTSTATUS Bus_PDO_QueryDeviceText(PPDO_DEVICE_DATA DeviceData, PIRP Irp)
NTSTATUS Bus_PDO_QueryDeviceId(PPDO_DEVICE_DATA DeviceData, PIRP Irp)
NTSTATUS Bus_PDO_QueryResourceRequirements(PPDO_DEVICE_DATA DeviceData, PIRP Irp)
NTSTATUS Bus_PDO_QueryDeviceCaps(PPDO_DEVICE_DATA DeviceData, PIRP Irp)
NTSTATUS Bus_PDO_QueryBusInformation(PPDO_DEVICE_DATA DeviceData, PIRP Irp)
NTSTATUS Bus_GetDeviceCapabilities(PDEVICE_OBJECT DeviceObject, PDEVICE_CAPABILITIES DeviceCapabilities)
#define STATUS_NOT_SUPPORTED
#define NT_SUCCESS(StatCode)
int acpi_bus_get_device(ACPI_HANDLE handle, struct acpi_device **device)
BOOLEAN acpi_bus_power_manageable(ACPI_HANDLE handle)
int acpi_bus_set_power(ACPI_HANDLE handle, int state)
ACPI_STATUS acpi_evaluate_integer(ACPI_HANDLE handle, ACPI_STRING pathname, ACPI_OBJECT_LIST *arguments, unsigned long long *data)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define SET_NEW_PNP_STATE(_Data_, _state_)
#define RESTORE_PREVIOUS_PNP_STATE(_Data_)
GLuint GLsizei GLsizei * length
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
struct _CM_RESOURCE_LIST CM_RESOURCE_LIST
#define CmResourceTypeMemory
#define CmResourceTypeDma
#define CmResourceTypePort
#define CmResourceTypeBusNumber
#define CmResourceTypeInterrupt
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
#define ExFreePoolWithTag(_P, _T)
#define CM_RESOURCE_PORT_POSITIVE_DECODE
#define CM_RESOURCE_MEMORY_PREFETCHABLE
#define CM_RESOURCE_DMA_8_AND_16
#define CM_RESOURCE_DMA_BUS_MASTER
#define CM_RESOURCE_PORT_IO
#define CM_RESOURCE_DMA_8
#define CM_RESOURCE_DMA_TYPE_A
#define CM_RESOURCE_DMA_TYPE_F
#define CM_RESOURCE_MEMORY_READ_ONLY
#define CM_RESOURCE_PORT_16_BIT_DECODE
#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE
#define CM_RESOURCE_MEMORY_COMBINEDWRITE
#define CM_RESOURCE_MEMORY_READ_WRITE
#define CM_RESOURCE_MEMORY_CACHEABLE
#define CM_RESOURCE_DMA_TYPE_B
#define CM_RESOURCE_DMA_16
#define CM_RESOURCE_MEMORY_24
#define CM_RESOURCE_INTERRUPT_LATCHED
#define CM_RESOURCE_PORT_10_BIT_DECODE
#define ASSERTMSG(msg, exp)
PDEVICE_OBJECT NTAPI IoGetAttachedDeviceReference(PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI IoRegisterDeviceInterface(IN PDEVICE_OBJECT PhysicalDeviceObject, IN CONST GUID *InterfaceClassGuid, IN PUNICODE_STRING ReferenceString OPTIONAL, OUT PUNICODE_STRING SymbolicLinkName)
NTSTATUS NTAPI IoSetDeviceInterfaceState(IN PUNICODE_STRING SymbolicLinkName, IN BOOLEAN Enable)
PIRP NTAPI IoBuildSynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
#define IoCompleteRequest
POWER_STATE NTAPI PoSetPowerState(IN PDEVICE_OBJECT DeviceObject, IN POWER_STATE_TYPE Type, IN POWER_STATE State)
ACPI_STATUS AcpiGetCurrentResources(ACPI_HANDLE DeviceHandle, ACPI_BUFFER *RetBuffer)
ACPI_STATUS AcpiGetPossibleResources(ACPI_HANDLE DeviceHandle, ACPI_BUFFER *RetBuffer)
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@437::@440 Interrupt
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@437 u
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@437::@445 BusNumber
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@437::@442 Memory
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@437::@443 Dma
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@437::@439 Port
PDEVICE_OBJECT Objects[1]
struct _IO_RESOURCE_DESCRIPTOR::@2168::@2175 BusNumber
struct _IO_RESOURCE_DESCRIPTOR::@2168::@2171 Interrupt
struct _IO_RESOURCE_DESCRIPTOR::@2168::@2170 Memory
union _IO_RESOURCE_DESCRIPTOR::@2168 u
struct _IO_RESOURCE_DESCRIPTOR::@2168::@2172 Dma
struct _IO_RESOURCE_DESCRIPTOR::@2168::@2169 Port
struct _IO_STACK_LOCATION::@4138::@4165 DeviceCapabilities
struct _IO_STACK_LOCATION::@4138::@4163 QueryDeviceRelations
union _IO_STACK_LOCATION::@1648 Parameters
struct acpi_device_status status
ACPI_RESOURCE_ADDRESS_COMMON ACPI_ADDRESS16_ATTRIBUTE Address
ACPI_RESOURCE_ADDRESS_COMMON ACPI_ADDRESS32_ATTRIBUTE Address
ACPI_RESOURCE_ADDRESS_COMMON ACPI_ADDRESS64_ATTRIBUTE Address
ACPI_ADDRESS64_ATTRIBUTE Address
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ WDFDEVICE Device
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
_In_ WDFIORESREQLIST RequirementsList
#define DeviceCapabilities
@ CmResourceShareDeviceExclusive
@ CmResourceShareDriverExclusive
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG BusNumber
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
#define IRP_MN_CANCEL_STOP_DEVICE
#define IRP_MN_QUERY_INTERFACE
#define IRP_MN_START_DEVICE
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS
#define IO_RESOURCE_ALTERNATIVE
#define IRP_MN_REMOVE_DEVICE
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
struct _DEVICE_RELATIONS * PDEVICE_RELATIONS
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define IO_RESOURCE_PREFERRED
#define IRP_MN_QUERY_STOP_DEVICE
#define IRP_MN_QUERY_DEVICE_TEXT
#define IRP_MN_QUERY_CAPABILITIES
#define IRP_MN_QUERY_RESOURCES
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define IRP_MN_STOP_DEVICE
struct _IO_RESOURCE_REQUIREMENTS_LIST IO_RESOURCE_REQUIREMENTS_LIST
#define IRP_MN_QUERY_BUS_INFORMATION
#define IRP_MN_QUERY_REMOVE_DEVICE
#define ObDereferenceObject
#define ObReferenceObject