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 &&
91 &GUID_DEVICE_PROCESSOR,
226 IrpStack->
Parameters.QueryDeviceRelations.Type));
339 deviceCapabilities=
stack->Parameters.DeviceCapabilities.Capabilities;
345 if (deviceCapabilities->Version != 1 ||
351 deviceCapabilities->D1Latency = 0;
352 deviceCapabilities->D2Latency = 0;
353 deviceCapabilities->D3Latency = 0;
362 if (!
device->power.states[
i].flags.valid)
373 deviceCapabilities->D1Latency =
device->power.states[
i].latency;
378 deviceCapabilities->D2Latency =
device->power.states[
i].latency;
383 deviceCapabilities->D3Latency =
device->power.states[
i].latency;
392 deviceCapabilities->DeviceD1 =
394 deviceCapabilities->DeviceD2 =
397 deviceCapabilities->WakeFromD0 =
FALSE;
398 deviceCapabilities->WakeFromD1 =
TRUE;
399 deviceCapabilities->WakeFromD2 =
FALSE;
400 deviceCapabilities->WakeFromD3 =
FALSE;
404 deviceCapabilities->LockSupported =
device->flags.lockable;
405 deviceCapabilities->EjectSupported =
device->flags.ejectable;
406 deviceCapabilities->HardwareDisabled = !
device->status.enabled && !
device->status.functional;
408 deviceCapabilities->SurpriseRemovalOK =
device->flags.surprise_removal_ok;
409 deviceCapabilities->UniqueID =
device->flags.unique_id;
410 deviceCapabilities->NoDisplayInUI = !
device->status.show_in_ui;
411 deviceCapabilities->Address =
device->pnp.bus_address;
415 (
device->flags.hardware_id &&
422 deviceCapabilities->RawDeviceOK =
TRUE;
425 deviceCapabilities->SilentInstall =
FALSE;
426 deviceCapabilities->UINumber = (
ULONG)-1;
448 switch (
stack->Parameters.QueryId.IdType) {
477 L"ACPI\\FixedButton");
505 if (
Device->flags.unique_id)
545 if (!
Device->flags.hardware_id)
577 L"ACPI\\FixedButton");
613 if (!
Device->flags.hardware_id)
635 else if (
Device->flags.compatible_ids)
637 for (
i = 0;
i <
Device->pnp.cid_list->Count;
i++)
641 Device->pnp.cid_list->Ids[
i].String);
646 Device->pnp.cid_list->Ids[
i].String);
692 switch (
stack->Parameters.QueryDeviceText.DeviceTextType) {
696 if (!
Irp->IoStatus.Information) {
698 Temp =
L"Programmable interrupt controller";
700 Temp =
L"System timer";
702 Temp =
L"DMA controller";
706 Temp =
L"Parallel port";
708 Temp =
L"Serial port";
710 Temp =
L"Disk controller";
712 Temp =
L"Disk controller";
714 Temp =
L"Display adapter";
716 Temp =
L"Bus controller";
718 Temp =
L"PCMCIA controller";
720 Temp =
L"Mouse device";
722 Temp =
L"Network adapter";
724 Temp =
L"SCSI controller";
726 Temp =
L"Multimedia device";
730 Temp =
L"Power Button";
732 Temp =
L"Sleep Button";
734 Temp =
L"Lid Switch";
736 Temp =
L"ACPI Embedded Controller";
741 Temp =
L"PCI Root Bridge";
743 Temp =
L"ACPI Battery";
745 Temp =
L"PCI Interrupt Link";
747 Temp =
L"ACPI Power Resource";
756 Temp =
L"ACPI Thermal Zone";
758 Temp =
L"Smart Battery";
760 Temp =
L"AC Adapter";
765 Temp =
L"ACPI Fixed Feature Button";
767 Temp =
L"Other ACPI device";
798 ULONG NumberOfResources = 0;
804 ULONG ResourceListSize;
811 return Irp->IoStatus.Status;
823 if (AcpiStatus !=
AE_OK)
826 if (
device->flags.unique_id)
834 DPRINT1(
"Failed to find a bus number\n");
839 DPRINT(
"Using _BBN for bus number\n");
855 ResourceDescriptor =
ResourceList->List[0].PartialResourceList.PartialDescriptors;
872 return Irp->IoStatus.Status;
882 DPRINT1(
"AcpiGetCurrentResources #2 failed (0x%x)\n", AcpiStatus);
956 ResourceList->List[0].PartialResourceList.Count = NumberOfResources;
957 ResourceDescriptor =
ResourceList->List[0].PartialResourceList.PartialDescriptors;
976 ResourceDescriptor->
Flags =
982 ResourceDescriptor++;
995 ResourceDescriptor->
Flags =
1001 ResourceDescriptor++;
1011 ResourceDescriptor->
Flags = 0;
1012 switch (dma_data->
Type)
1028 ResourceDescriptor++;
1042 ResourceDescriptor->
u.
Port.Start.QuadPart = io_data->
Minimum;
1045 ResourceDescriptor++;
1054 ResourceDescriptor->
u.
Port.Start.QuadPart = io_data->
Address;
1057 ResourceDescriptor++;
1069 ResourceDescriptor->
Flags = 0;
1087 ResourceDescriptor->
Flags = 0;
1092 switch (addr16_data->Info.Mem.Caching)
1101 ResourceDescriptor++;
1113 ResourceDescriptor->
Flags = 0;
1131 ResourceDescriptor->
Flags = 0;
1136 switch (addr32_data->Info.Mem.Caching)
1145 ResourceDescriptor++;
1155 DPRINT1(
"64-bit bus address is not supported!\n");
1158 ResourceDescriptor->
Flags = 0;
1176 ResourceDescriptor->
Flags = 0;
1181 switch (addr64_data->Info.Mem.Caching)
1190 ResourceDescriptor++;
1200 DPRINT1(
"64-bit bus address is not supported!\n");
1203 ResourceDescriptor->
Flags = 0;
1221 ResourceDescriptor->
Flags = 0;
1226 switch (addr64_data->Info.Mem.Caching)
1235 ResourceDescriptor++;
1248 ResourceDescriptor->
u.
Memory.Start.QuadPart = mem24_data->
Minimum;
1251 ResourceDescriptor++;
1259 ResourceDescriptor->
Flags = 0;
1264 ResourceDescriptor->
u.
Memory.Start.QuadPart = mem32_data->
Minimum;
1267 ResourceDescriptor++;
1275 ResourceDescriptor->
Flags = 0;
1280 ResourceDescriptor->
u.
Memory.Start.QuadPart = memfixed32_data->
Address;
1283 ResourceDescriptor++;
1305 ULONG NumberOfResources = 0;
1309 ULONG i, RequirementsListSize;
1319 return Irp->IoStatus.Status;
1326 return Irp->IoStatus.Status;
1343 return Irp->IoStatus.Status;
1359 DPRINT1(
"AcpiGetCurrentResources #2 failed (0x%x)\n", AcpiStatus);
1364 SeenStartDependent =
FALSE;
1371 if (SeenStartDependent)
1375 SeenStartDependent =
TRUE;
1407 NumberOfResources++;
1416 NumberOfResources++;
1446 SeenStartDependent =
FALSE;
1452 if (SeenStartDependent)
1456 SeenStartDependent =
TRUE;
1471 RequirementDescriptor->
u.
Interrupt.MinimumVector =
1474 RequirementDescriptor++;
1487 RequirementDescriptor->
u.
Interrupt.MinimumVector =
1490 RequirementDescriptor++;
1500 RequirementDescriptor->
Flags = 0;
1501 switch (dma_data->
Type)
1518 RequirementDescriptor->
u.
Dma.MinimumChannel =
1519 RequirementDescriptor->
u.
Dma.MaximumChannel = dma_data->
Channels[
i];
1520 RequirementDescriptor++;
1537 RequirementDescriptor->
u.
Port.MinimumAddress.QuadPart = io_data->
Minimum;
1540 RequirementDescriptor++;
1551 RequirementDescriptor->
u.
Port.Alignment = 1;
1552 RequirementDescriptor->
u.
Port.MinimumAddress.QuadPart = io_data->
Address;
1555 RequirementDescriptor++;
1568 RequirementDescriptor->
Flags = 0;
1588 RequirementDescriptor->
Flags = 0;
1593 switch (addr16_data->Info.Mem.Caching)
1603 RequirementDescriptor++;
1616 RequirementDescriptor->
Flags = 0;
1636 RequirementDescriptor->
Flags = 0;
1641 switch (addr32_data->Info.Mem.Caching)
1651 RequirementDescriptor++;
1662 DPRINT1(
"64-bit bus address is not supported!\n");
1665 RequirementDescriptor->
Flags = 0;
1685 RequirementDescriptor->
Flags = 0;
1690 switch (addr64_data->Info.Mem.Caching)
1700 RequirementDescriptor++;
1711 DPRINT1(
"64-bit bus address is not supported!\n");
1714 RequirementDescriptor->
Flags = 0;
1734 RequirementDescriptor->
Flags = 0;
1739 switch (addr64_data->Info.Mem.Caching)
1749 RequirementDescriptor++;
1763 RequirementDescriptor->
u.
Memory.MinimumAddress.QuadPart = mem24_data->
Minimum;
1767 RequirementDescriptor++;
1776 RequirementDescriptor->
Flags = 0;
1781 RequirementDescriptor->
u.
Memory.MinimumAddress.QuadPart = mem32_data->
Minimum;
1785 RequirementDescriptor++;
1794 RequirementDescriptor->
Flags = 0;
1799 RequirementDescriptor->
u.
Memory.MinimumAddress.QuadPart = fixedmem32_data->
Address;
1803 RequirementDescriptor++;
1866 switch (
stack->Parameters.QueryDeviceRelations.Type) {
1871 if (deviceRelations) {
1876 ASSERTMSG(
"Someone above is handling TargetDeviceRelation\n", !deviceRelations);
1882 if (!deviceRelations) {
1894 deviceRelations->
Count = 1;
1899 Irp->IoStatus.Information = (
ULONG_PTR) deviceRelations;
1944 if (busInfo ==
NULL) {
1948 busInfo->
BusTypeGuid = GUID_ACPI_INTERFACE_STANDARD;
2003 if (pnpIrp ==
NULL) {
2006 goto GetDeviceCapabilitiesExit;
2053GetDeviceCapabilitiesExit:
#define IO_RESOURCE_ALTERNATIVE
#define IO_RESOURCE_PREFERRED
struct _IO_RESOURCE_REQUIREMENTS_LIST IO_RESOURCE_REQUIREMENTS_LIST
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 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)
#define STATUS_NOT_SUPPORTED
ACPI_STATUS AcpiGetCurrentResources(ACPI_HANDLE DeviceHandle, ACPI_BUFFER *RetBuffer)
ACPI_STATUS AcpiGetPossibleResources(ACPI_HANDLE DeviceHandle, ACPI_BUFFER *RetBuffer)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@383::@386 Interrupt
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@383::@391 BusNumber
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@383::@389 Dma
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@383::@385 Port
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@383::@388 Memory
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@383 u
PDEVICE_OBJECT Objects[1]
struct _IO_RESOURCE_DESCRIPTOR::@1555::@1557 Memory
struct _IO_RESOURCE_DESCRIPTOR::@1555::@1558 Interrupt
struct _IO_RESOURCE_DESCRIPTOR::@1555::@1556 Port
struct _IO_RESOURCE_DESCRIPTOR::@1555::@1562 BusNumber
struct _IO_RESOURCE_DESCRIPTOR::@1555::@1559 Dma
union _IO_RESOURCE_DESCRIPTOR::@1555 u
struct _NAMED_PIPE_CREATE_PARAMETERS * 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)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_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 IRP_MN_REMOVE_DEVICE
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
struct _DEVICE_RELATIONS * PDEVICE_RELATIONS
#define IRP_MN_QUERY_DEVICE_RELATIONS
#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
#define IRP_MN_QUERY_BUS_INFORMATION
#define IRP_MN_QUERY_REMOVE_DEVICE
#define ObDereferenceObject
#define ObReferenceObject