Merge trunk head (46467)
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 26 Mar 2010 15:47:53 +0000 (15:47 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 26 Mar 2010 15:47:53 +0000 (15:47 +0000)
svn path=/branches/ros-amd64-bringup/; revision=46468

159 files changed:
reactos/ReactOS-i386.rbuild
reactos/boot/bootdata/bootcd/bootcd.rbuild
reactos/boot/bootdata/livecd/livecd.rbuild
reactos/boot/freeldr/freeldr/disk/scsiport.c
reactos/dll/directx/bdaplgin/controlnode.cpp
reactos/dll/directx/bdaplgin/devicecontrol.cpp
reactos/dll/directx/bdaplgin/digitaldemo.cpp
reactos/dll/directx/bdaplgin/frequencyfilter.cpp
reactos/dll/directx/bdaplgin/lnbinfo.cpp
reactos/dll/directx/bdaplgin/pincontrol.cpp
reactos/dll/directx/bdaplgin/precomp.h
reactos/dll/directx/bdaplgin/signalstatistics.cpp
reactos/dll/directx/ksproxy/allocator.cpp
reactos/dll/directx/ksproxy/basicaudio.cpp
reactos/dll/directx/ksproxy/clockforward.cpp
reactos/dll/directx/ksproxy/cvpconfig.cpp
reactos/dll/directx/ksproxy/cvpvbiconfig.cpp
reactos/dll/directx/ksproxy/datatype.cpp
reactos/dll/directx/ksproxy/enum_mediatypes.cpp
reactos/dll/directx/ksproxy/enumpins.cpp
reactos/dll/directx/ksproxy/input_pin.cpp
reactos/dll/directx/ksproxy/interface.cpp
reactos/dll/directx/ksproxy/mediasample.cpp
reactos/dll/directx/ksproxy/node.cpp
reactos/dll/directx/ksproxy/output_pin.cpp
reactos/dll/directx/ksproxy/precomp.h
reactos/dll/directx/ksproxy/proxy.cpp
reactos/dll/directx/ksproxy/qualityforward.cpp
reactos/dll/nls/idndl/idndl.def [deleted file]
reactos/dll/nls/idndl/idndl.rbuild
reactos/dll/nls/idndl/idndl.spec [new file with mode: 0644]
reactos/dll/win32/acledit/acledit.c
reactos/dll/win32/acledit/stubs.c
reactos/dll/win32/browseui/internettoolbar.cpp
reactos/dll/win32/gdi32/objects/bitmap.c
reactos/dll/win32/hid/precomp.h
reactos/dll/win32/kernel32/thread/fiber.c
reactos/dll/win32/setupapi/setupapi.rbuild
reactos/dll/win32/setupapi/setupapi_private.h
reactos/drivers/battery/battc/battc.c
reactos/drivers/bus/acpi/acpi.rbuild
reactos/drivers/bus/acpi/busmgr/bus.c
reactos/drivers/bus/acpi/busmgr/button.c
reactos/drivers/bus/acpi/buspdo.c
reactos/drivers/bus/acpi/cmbatt/cmbatt.rbuild
reactos/drivers/bus/acpi/cmbatt/cmexec.c
reactos/drivers/bus/acpi/compbatt/compbatt.c [new file with mode: 0644]
reactos/drivers/bus/acpi/compbatt/compbatt.h [new file with mode: 0644]
reactos/drivers/bus/acpi/compbatt/compbatt.rbuild [new file with mode: 0644]
reactos/drivers/bus/acpi/compbatt/compbatt.rc [new file with mode: 0644]
reactos/drivers/bus/acpi/compbatt/compmisc.c [new file with mode: 0644]
reactos/drivers/bus/acpi/compbatt/comppnp.c [new file with mode: 0644]
reactos/drivers/bus/acpi/eval.c [new file with mode: 0644]
reactos/drivers/bus/acpi/include/acpi_bus.h
reactos/drivers/bus/acpi/include/acpisys.h
reactos/drivers/bus/acpi/main.c
reactos/drivers/bus/acpi/osl.c
reactos/drivers/directx/dxapi/dxapi_driver.h
reactos/drivers/directx/dxg/dxg_int.h
reactos/drivers/filesystems/ext2/inc/ext2fsd.h
reactos/drivers/serial/serial/serial.h
reactos/drivers/storage/ide/uniata/atapi.h
reactos/drivers/storage/ide/uniata/bsmaster.h
reactos/drivers/storage/ide/uniata/config.h
reactos/drivers/storage/ide/uniata/id_ata.cpp
reactos/drivers/storage/ide/uniata/srb.h
reactos/drivers/video/displays/vga/vgaddi.h
reactos/hal/hal.rbuild
reactos/hal/halx86/generic/i386/systimer.S
reactos/hal/halx86/generic/i386/trap.S [moved from reactos/hal/halx86/generic/trap.S with 100% similarity]
reactos/hal/halx86/generic/i386/v86.s [deleted file]
reactos/hal/halx86/generic/misc.c
reactos/hal/halx86/generic/spinlock.c
reactos/hal/halx86/hal_generic.rbuild
reactos/hal/halx86/hal_generic_up.rbuild
reactos/hal/halx86/halamd64.rbuild
reactos/hal/halx86/halmps.rbuild
reactos/hal/halx86/include/halp.h
reactos/hal/halx86/mp/i386/mpsirql.c [moved from reactos/hal/halx86/mp/mpsirql.c with 100% similarity]
reactos/hal/halx86/up/pic.c [moved from reactos/hal/halx86/generic/pic.c with 100% similarity]
reactos/include/ddk/acpiioct.h
reactos/include/ddk/atsmedia.h [deleted file]
reactos/include/ddk/cfgmgr32.h [deleted file]
reactos/include/ddk/mce.h [new file with mode: 0644]
reactos/include/ddk/ntstatus.h [deleted file]
reactos/include/ddk/xmldsodid.h [deleted file]
reactos/include/dxsdk/bdatif.idl [new file with mode: 0644]
reactos/include/dxsdk/dxsdk.rbuild
reactos/include/ndk/peb_teb.h
reactos/include/ndk/pstypes.h
reactos/include/psdk/atsmedia.h [new file with mode: 0644]
reactos/include/psdk/batclass.h
reactos/include/psdk/cfg.h [moved from reactos/include/ddk/cfg.h with 65% similarity]
reactos/include/psdk/cfgmgr32.h [new file with mode: 0644]
reactos/include/psdk/devpropdef.h [new file with mode: 0644]
reactos/include/psdk/evntprov.h [new file with mode: 0644]
reactos/include/psdk/ntdef.h
reactos/include/psdk/ntstatus.h
reactos/include/psdk/tvout.h [moved from reactos/include/ddk/tvout.h with 81% similarity]
reactos/include/psdk/usbioctl.h
reactos/include/psdk/winbase.h
reactos/include/psdk/wincon.h
reactos/include/psdk/windef.h
reactos/include/psdk/wingdi.h
reactos/include/psdk/winnt.h
reactos/include/psdk/winuser.h
reactos/include/reactos/idl/pnp.idl
reactos/include/reactos/wine/cfgmgr32.h [deleted file]
reactos/include/xdk/amd64/ke.h [new file with mode: 0644]
reactos/include/xdk/amd64/mm.h [new file with mode: 0644]
reactos/include/xdk/arm/ke.h [new file with mode: 0644]
reactos/include/xdk/cmfuncs.h [new file with mode: 0644]
reactos/include/xdk/cmtypes.h [new file with mode: 0644]
reactos/include/xdk/exfuncs.h [new file with mode: 0644]
reactos/include/xdk/extypes.h [new file with mode: 0644]
reactos/include/xdk/generate.bat [new file with mode: 0644]
reactos/include/xdk/halfuncs.h [new file with mode: 0644]
reactos/include/xdk/haltypes.h [new file with mode: 0644]
reactos/include/xdk/ia64/ke.h [new file with mode: 0644]
reactos/include/xdk/interlocked.h [new file with mode: 0644]
reactos/include/xdk/iofuncs.h [new file with mode: 0644]
reactos/include/xdk/iotypes.h [new file with mode: 0644]
reactos/include/xdk/kdfuncs.h [new file with mode: 0644]
reactos/include/xdk/kdtypes.h [new file with mode: 0644]
reactos/include/xdk/kefuncs.h [new file with mode: 0644]
reactos/include/xdk/ketypes.h [new file with mode: 0644]
reactos/include/xdk/mips/ke.h [new file with mode: 0644]
reactos/include/xdk/mmfuncs.h [new file with mode: 0644]
reactos/include/xdk/mmtypes.h [new file with mode: 0644]
reactos/include/xdk/ntddk.template.h [new file with mode: 0644]
reactos/include/xdk/nttmapi.h [new file with mode: 0644]
reactos/include/xdk/obfuncs.h [new file with mode: 0644]
reactos/include/xdk/obtypes.h [new file with mode: 0644]
reactos/include/xdk/pofuncs.h [new file with mode: 0644]
reactos/include/xdk/potypes.h [new file with mode: 0644]
reactos/include/xdk/ppc/ke.h [new file with mode: 0644]
reactos/include/xdk/psfuncs.h [new file with mode: 0644]
reactos/include/xdk/pstypes.h [new file with mode: 0644]
reactos/include/xdk/rtlfuncs.h [new file with mode: 0644]
reactos/include/xdk/rtltypes.h [new file with mode: 0644]
reactos/include/xdk/sefuncs.h [new file with mode: 0644]
reactos/include/xdk/setypes.h [new file with mode: 0644]
reactos/include/xdk/wdm.template.h [new file with mode: 0644]
reactos/include/xdk/wmifuncs.h [new file with mode: 0644]
reactos/include/xdk/wmitypes.h [new file with mode: 0644]
reactos/include/xdk/x86/ke.h [new file with mode: 0644]
reactos/include/xdk/x86/mm.h [new file with mode: 0644]
reactos/include/xdk/zwfuncs.h [new file with mode: 0644]
reactos/media/inf/cpu.inf
reactos/ntoskrnl/config/cmalloc.c
reactos/ntoskrnl/include/internal/cm_x.h
reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
reactos/ntoskrnl/po/events.c
reactos/ntoskrnl/po/power.c
reactos/ntoskrnl/se/token.c
reactos/subsystems/subsystems.rbuild
reactos/subsystems/win32/win32k/objects/gdibatch.c
reactos/subsystems/win32/win32k/pch.h
reactos/tools/rbuild/backend/mingw/compilers/gcc.mak

index c2a720a..9ad015f 100644 (file)
@@ -28,6 +28,8 @@
                <compilerflag>-mpreferred-stack-boundary=2</compilerflag>
                <compilerflag compiler="midl">-m32 --win32</compilerflag>
                <compilerflag compiler="cc,cxx">-gstabs+</compilerflag>
+               <compilerflag compiler="cc,cxx">-fno-set-stack-executable</compilerflag>
+               <compilerflag compiler="cc,cxx">-fno-optimize-sibling-calls</compilerflag>
                <compilerflag compiler="as">-gstabs+</compilerflag>
        </group>
 
index 08fa426..ebfe5b1 100644 (file)
@@ -1,5 +1,12 @@
 <?xml version="1.0"?>
 <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
-<module name="bootcd" type="iso" output="ReactOS-$(ARCH).iso">
+<if property="ARCH" value="i386>
+       <module name="bootcd" type="iso" output="ReactOS.iso">
        <bootsector>isoboot</bootsector>
 </module>
+</if>
+<ifnot property="ARCH" value="i386>
+       <module name="bootcd" type="iso" output="ReactOS-$(ARCH).iso">
+               <bootsector>isoboot</bootsector>
+       </module>
+</ifnot>
index 12482a2..37d2dc9 100644 (file)
@@ -1,5 +1,12 @@
 <?xml version="1.0"?>
 <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
-<module name="livecd" type="liveiso" output="ReactOS-LiveCD-$(ARCH).iso">
+<if property="ARCH" value="i386>
+       <module name="livecd" type="liveiso" output="ReactOS-LiveCD.iso">
        <bootsector>isoboot</bootsector>
 </module>
+</if>
+<ifnot property="ARCH" value="i386>
+       <module name="livecd" type="liveiso" output="ReactOS-LiveCD-$(ARCH).iso">
+               <bootsector>isoboot</bootsector>
+       </module>
+</ifnot>
index d8d15b1..81ba4a4 100644 (file)
@@ -385,7 +385,7 @@ SpiCreatePortConfig(
 }
 
 VOID
-DDKCDECLAPI
+__cdecl
 ScsiDebugPrint(
     IN ULONG DebugPrintLevel,
     IN PCCHAR DebugMessage,
@@ -421,7 +421,7 @@ ScsiDebugPrint(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortCompleteRequest(
     IN PVOID HwDeviceExtension,
     IN UCHAR PathId,
@@ -435,7 +435,7 @@ ScsiPortCompleteRequest(
 
 #undef ScsiPortConvertPhysicalAddressToUlong
 ULONG
-DDKAPI
+NTAPI
 ScsiPortConvertPhysicalAddressToUlong(
     IN SCSI_PHYSICAL_ADDRESS Address)
 {
@@ -443,7 +443,7 @@ ScsiPortConvertPhysicalAddressToUlong(
 }
 
 SCSI_PHYSICAL_ADDRESS
-DDKAPI
+NTAPI
 ScsiPortConvertUlongToPhysicalAddress(
     IN ULONG UlongAddress)
 {
@@ -451,7 +451,7 @@ ScsiPortConvertUlongToPhysicalAddress(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortFlushDma(
     IN PVOID DeviceExtension)
 {
@@ -460,7 +460,7 @@ ScsiPortFlushDma(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortFreeDeviceBase(
     IN PVOID HwDeviceExtension,
     IN PVOID MappedAddress)
@@ -469,7 +469,7 @@ ScsiPortFreeDeviceBase(
 }
 
 ULONG
-DDKAPI
+NTAPI
 ScsiPortGetBusData(
     IN PVOID DeviceExtension,
     IN ULONG BusDataType,
@@ -482,7 +482,7 @@ ScsiPortGetBusData(
 }
 
 PVOID
-DDKAPI
+NTAPI
 ScsiPortGetDeviceBase(
     IN PVOID HwDeviceExtension,
     IN INTERFACE_TYPE BusType,
@@ -514,7 +514,7 @@ ScsiPortGetDeviceBase(
 }
 
 PVOID
-DDKAPI
+NTAPI
 ScsiPortGetLogicalUnit(
     IN PVOID HwDeviceExtension,
     IN UCHAR PathId,
@@ -527,7 +527,7 @@ ScsiPortGetLogicalUnit(
 }
 
 SCSI_PHYSICAL_ADDRESS
-DDKAPI
+NTAPI
 ScsiPortGetPhysicalAddress(
     IN PVOID HwDeviceExtension,
     IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
@@ -564,7 +564,7 @@ ScsiPortGetPhysicalAddress(
 }
 
 PSCSI_REQUEST_BLOCK
-DDKAPI
+NTAPI
 ScsiPortGetSrb(
     IN PVOID DeviceExtension,
     IN UCHAR PathId,
@@ -641,7 +641,7 @@ SpiAllocateCommonBuffer(
 }
 
 PVOID
-DDKAPI
+NTAPI
 ScsiPortGetUncachedExtension(
     IN PVOID HwDeviceExtension,
     IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
@@ -726,7 +726,7 @@ ScsiPortGetUncachedExtension(
 }
 
 PVOID
-DDKAPI
+NTAPI
 ScsiPortGetVirtualAddress(
     IN PVOID HwDeviceExtension,
     IN SCSI_PHYSICAL_ADDRESS PhysicalAddress)
@@ -1031,7 +1031,7 @@ SpiGetPciConfigData(
 }
 
 ULONG
-DDKAPI
+NTAPI
 ScsiPortInitialize(
     IN PVOID Argument1,
     IN PVOID Argument2,
@@ -1186,7 +1186,7 @@ ScsiPortInitialize(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortIoMapTransfer(
     IN PVOID HwDeviceExtension,
     IN PSCSI_REQUEST_BLOCK Srb,
@@ -1198,7 +1198,7 @@ ScsiPortIoMapTransfer(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortLogError(
     IN PVOID HwDeviceExtension,
     IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
@@ -1213,7 +1213,7 @@ ScsiPortLogError(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortMoveMemory(
     IN PVOID WriteBuffer,
     IN PVOID ReadBuffer,
@@ -1223,7 +1223,7 @@ ScsiPortMoveMemory(
 }
 
 VOID
-DDKCDECLAPI
+__cdecl
 ScsiPortNotification(
     IN SCSI_NOTIFICATION_TYPE NotificationType,
     IN PVOID HwDeviceExtension,
@@ -1259,7 +1259,7 @@ ScsiPortNotification(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortReadPortBufferUchar(
     IN PUCHAR Port,
     OUT PUCHAR Buffer,
@@ -1269,7 +1269,7 @@ ScsiPortReadPortBufferUchar(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortReadPortBufferUlong(
     IN PULONG Port,
     OUT PULONG Buffer,
@@ -1279,7 +1279,7 @@ ScsiPortReadPortBufferUlong(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortReadPortBufferUshort(
     IN PUSHORT Port,
     OUT PUSHORT Buffer,
@@ -1289,7 +1289,7 @@ ScsiPortReadPortBufferUshort(
 }
 
 UCHAR
-DDKAPI
+NTAPI
 ScsiPortReadPortUchar(
     IN PUCHAR Port)
 {
@@ -1300,7 +1300,7 @@ ScsiPortReadPortUchar(
 }
 
 ULONG
-DDKAPI
+NTAPI
 ScsiPortReadPortUlong(
     IN PULONG Port)
 {
@@ -1308,7 +1308,7 @@ ScsiPortReadPortUlong(
 }
 
 USHORT
-DDKAPI
+NTAPI
 ScsiPortReadPortUshort(
     IN PUSHORT Port)
 {
@@ -1316,7 +1316,7 @@ ScsiPortReadPortUshort(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortReadRegisterBufferUchar(
     IN PUCHAR Register,
     IN PUCHAR Buffer,
@@ -1327,7 +1327,7 @@ ScsiPortReadRegisterBufferUchar(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortReadRegisterBufferUlong(
     IN PULONG Register,
     IN PULONG Buffer,
@@ -1338,7 +1338,7 @@ ScsiPortReadRegisterBufferUlong(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortReadRegisterBufferUshort(
     IN PUSHORT Register,
     IN PUSHORT Buffer,
@@ -1349,7 +1349,7 @@ ScsiPortReadRegisterBufferUshort(
 }
 
 UCHAR
-DDKAPI
+NTAPI
 ScsiPortReadRegisterUchar(
     IN PUCHAR Register)
 {
@@ -1357,7 +1357,7 @@ ScsiPortReadRegisterUchar(
 }
 
 ULONG
-DDKAPI
+NTAPI
 ScsiPortReadRegisterUlong(
     IN PULONG Register)
 {
@@ -1365,7 +1365,7 @@ ScsiPortReadRegisterUlong(
 }
 
 USHORT
-DDKAPI
+NTAPI
 ScsiPortReadRegisterUshort(
     IN PUSHORT Register)
 {
@@ -1373,7 +1373,7 @@ ScsiPortReadRegisterUshort(
 }
 
 ULONG
-DDKAPI
+NTAPI
 ScsiPortSetBusDataByOffset(
     IN PVOID DeviceExtension,
     IN ULONG BusDataType,
@@ -1389,7 +1389,7 @@ ScsiPortSetBusDataByOffset(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortStallExecution(
     IN ULONG Delay)
 {
@@ -1397,7 +1397,7 @@ ScsiPortStallExecution(
 }
 
 BOOLEAN
-DDKAPI
+NTAPI
 ScsiPortValidateRange(
     IN PVOID HwDeviceExtension,
     IN INTERFACE_TYPE BusType,
@@ -1417,7 +1417,7 @@ ScsiPortValidateRange(
 
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWritePortBufferUchar(
     IN PUCHAR Port,
     IN PUCHAR Buffer,
@@ -1427,7 +1427,7 @@ ScsiPortWritePortBufferUchar(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWritePortBufferUlong(
     IN PULONG Port,
     IN PULONG Buffer,
@@ -1437,7 +1437,7 @@ ScsiPortWritePortBufferUlong(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWritePortBufferUshort(
     IN PUSHORT Port,
     IN PUSHORT Buffer,
@@ -1447,7 +1447,7 @@ ScsiPortWritePortBufferUshort(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWritePortUchar(
     IN PUCHAR Port,
     IN UCHAR Value)
@@ -1456,7 +1456,7 @@ ScsiPortWritePortUchar(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWritePortUlong(
     IN PULONG Port,
     IN ULONG Value)
@@ -1465,7 +1465,7 @@ ScsiPortWritePortUlong(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWritePortUshort(
     IN PUSHORT Port,
     IN USHORT Value)
@@ -1474,7 +1474,7 @@ ScsiPortWritePortUshort(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWriteRegisterBufferUchar(
     IN PUCHAR Register,
     IN PUCHAR Buffer,
@@ -1485,7 +1485,7 @@ ScsiPortWriteRegisterBufferUchar(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWriteRegisterBufferUlong(
     IN PULONG Register,
     IN PULONG Buffer,
@@ -1496,7 +1496,7 @@ ScsiPortWriteRegisterBufferUlong(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWriteRegisterBufferUshort(
     IN PUSHORT Register,
     IN PUSHORT Buffer,
@@ -1507,7 +1507,7 @@ ScsiPortWriteRegisterBufferUshort(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWriteRegisterUchar(
     IN PUCHAR Register,
     IN ULONG Value)
@@ -1516,7 +1516,7 @@ ScsiPortWriteRegisterUchar(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWriteRegisterUlong(
     IN PULONG Register,
     IN ULONG Value)
@@ -1525,7 +1525,7 @@ ScsiPortWriteRegisterUlong(
 }
 
 VOID
-DDKAPI
+NTAPI
 ScsiPortWriteRegisterUshort(
     IN PUSHORT Register,
     IN USHORT Value)
index 5cd98cc..40ec853 100644 (file)
@@ -9,7 +9,9 @@
 
 #include "precomp.h"
 
+#ifndef _MSC_VER
 const GUID IID_IKsPropertySet = {0x31efac30, 0x515c, 0x11d0, {0xa9,0xaa, 0x00,0xaa,0x00,0x61,0xbe,0x93}};
+#endif
 
 class CControlNode : public IUnknown
 {
@@ -32,12 +34,12 @@ public:
         return m_Ref;
     }
 
-    CControlNode(HANDLE hFile, ULONG NodeType, ULONG PinId) : m_Ref(0), m_hFile(hFile), m_NodeType(NodeType), m_PinId(PinId){};
+    CControlNode(IKsPropertySet * pProperty, ULONG NodeType, ULONG PinId) : m_Ref(0), m_pKsProperty(pProperty), m_NodeType(NodeType), m_PinId(PinId){};
     virtual ~CControlNode(){};
 
 protected:
     LONG m_Ref;
-    HANDLE m_hFile;
+    IKsPropertySet * m_pKsProperty;
     ULONG m_NodeType;
     ULONG m_PinId;
 };
@@ -58,19 +60,19 @@ CControlNode::QueryInterface(
     }
     else if(IsEqualGUID(refiid, IID_IBDA_FrequencyFilter))
     {
-        return CBDAFrequencyFilter_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+        return CBDAFrequencyFilter_fnConstructor(m_pKsProperty, m_NodeType, refiid, Output);
     }
     else if(IsEqualGUID(refiid, IID_IBDA_SignalStatistics))
     {
-        return CBDASignalStatistics_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+        return CBDASignalStatistics_fnConstructor(m_pKsProperty, m_NodeType, refiid, Output);
     }
     else if(IsEqualGUID(refiid, IID_IBDA_LNBInfo))
     {
-        return CBDALNBInfo_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+        return CBDALNBInfo_fnConstructor(m_pKsProperty, m_NodeType, refiid, Output);
     }
     else if(IsEqualGUID(refiid, IID_IBDA_DigitalDemodulator))
     {
-        return CBDADigitalDemodulator_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+        return CBDADigitalDemodulator_fnConstructor(m_pKsProperty, m_NodeType, refiid, Output);
     }
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[MAX_PATH];
@@ -88,7 +90,6 @@ CControlNode::QueryInterface(
 HRESULT
 WINAPI
 CControlNode_fnConstructor(
-    HANDLE hFile,
     IBaseFilter * pFilter,
     ULONG NodeType,
     ULONG PinId,
@@ -98,7 +99,7 @@ CControlNode_fnConstructor(
     WCHAR Buffer[100];
     HRESULT hr;
     IPin * pPin = NULL;
-    IKsObject * pObject = NULL;
+    IKsPropertySet * pProperty;
 
     // store pin id
     swprintf(Buffer, L"%u", PinId);
@@ -115,26 +116,21 @@ CControlNode_fnConstructor(
         return hr;
     }
 
-    // query IKsObject interface
-    hr = pPin->QueryInterface(IID_IKsObject, (void**)&pObject);
+    // query for IKsPropertySet interface
+    hr = pPin->QueryInterface(IID_IKsPropertySet, (void**)&pProperty);
+    if (FAILED(hr))
+        return hr;
 
 #ifdef BDAPLGIN_TRACE
     swprintf(Buffer, L"CControlNode_fnConstructor get IID_IKsObject status %lx\n", hr);
     OutputDebugStringW(Buffer);
 #endif
 
-    if (SUCCEEDED(hr))
-    {
-        // get pin handle
-        hFile = pObject->KsGetObjectHandle();
-        // release IKsObject interface
-        pObject->Release();
-    }
     // release IPin interface
     pPin->Release();
 
     // construct device control
-    CControlNode * handler = new CControlNode(hFile, NodeType, PinId);
+    CControlNode * handler = new CControlNode(pProperty, NodeType, PinId);
 
 #ifdef BDAPLGIN_TRACE
     OutputDebugStringW(L"CControlNode_fnConstructor\n");
index 661eba5..693232c 100644 (file)
@@ -9,20 +9,24 @@
 
 #include "precomp.h"
 
-const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
-const GUID IID_IAC3Filter         = {0xe4539501, 0xc609, 0x46ea, {0xad, 0x2a, 0x0e, 0x97, 0x00, 0x24, 0x56, 0x83}};
-const GUID IID_IAsyncReader       = {0x56A868AA, 0x0AD4, 0x11CE, {0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70}};
-const GUID IID_IMatrixMixer       = {0xafc57835, 0x2fd1, 0x4541, {0xa6, 0xd9, 0x0d, 0xb7, 0x18, 0x56, 0xe5, 0x89}};
-const GUID IID_IBDA_NetworkProvider   = {0xfd501041, 0x8ebe, 0x11ce, {0x81, 0x83, 0x00, 0xaa, 0x00, 0x57, 0x7d, 0xa2}};
-const GUID IID_IAMOpenProgress    = {0x8E1C39A1, 0xDE53, 0x11cf, {0xAA, 0x63, 0x00, 0x80, 0xC7, 0x44, 0x52, 0x8D}};
-const GUID IID_IDistributorNotify = {0x56a868af, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
-const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
-const GUID IID_IBDA_Topology      = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD, 0x3C, 0x78, 0x49, 0xBE}};
 const GUID IID_IKsObject           = {0x423c13a2, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
+
+#ifndef _MSC_VER
+const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
+
 const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
 const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
-const GUID IID_IBaseFilter         = {0x56a86895, 0x0ad4, 0x11ce, {0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70}};
 const GUID KSMETHODSETID_BdaChangeSync = {0xfd0a5af3, 0xb41d, 0x11d2, {0x9c, 0x95, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+const GUID IID_IBaseFilter         = {0x56a86895, 0x0ad4, 0x11ce, {0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70}};
+const GUID IID_IAsyncReader       = {0x56A868AA, 0x0AD4, 0x11CE, {0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70}};
+const GUID IID_IAMOpenProgress    = {0x8E1C39A1, 0xDE53, 0x11cf, {0xAA, 0x63, 0x00, 0x80, 0xC7, 0x44, 0x52, 0x8D}};
+const GUID IID_IBDA_Topology      = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD, 0x3C, 0x78, 0x49, 0xBE}};
+const GUID IID_IBDA_NetworkProvider   = {0xfd501041, 0x8ebe, 0x11ce, {0x81, 0x83, 0x00, 0xaa, 0x00, 0x57, 0x7d, 0xa2}};
+const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
+
+const GUID IID_IDistributorNotify = {0x56a868af, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
+
+#endif
 
 class CBDADeviceControl : public IBDA_DeviceControl,
                           public IBDA_Topology
@@ -476,7 +480,7 @@ CBDADeviceControl::GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG
     if (FAILED(hr))
         return hr;
 
-    hr = CControlNode_fnConstructor(m_Handle, m_pFilter, ulNodeType, PinId, IID_IUnknown, (LPVOID*)ppControlNode);
+    hr = CControlNode_fnConstructor(m_pFilter, ulNodeType, PinId, IID_IUnknown, (LPVOID*)ppControlNode);
 
 #ifdef BDAPLGIN_TRACE
     swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx\n", hr);
index 2d1b7ed..2552e19 100644 (file)
@@ -9,8 +9,10 @@
 
 #include "precomp.h"
 
+#ifndef _MSC_VER
 const GUID IID_IBDA_DigitalDemodulator = {0xef30f379, 0x985b, 0x4d10, {0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x04, 0xe1, 0xe0}};
 const GUID KSPROPSETID_BdaDigitalDemodulator = {0xef30f379, 0x985b, 0x4d10, {0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x4, 0xe1, 0xe0}};
+#endif
 
 class CBDADigitalDemodulator : public IBDA_DigitalDemodulator
 {
@@ -48,12 +50,12 @@ public:
     HRESULT STDMETHODCALLTYPE put_SpectralInversion(SpectralInversion *pSpectralInversion);
     HRESULT STDMETHODCALLTYPE get_SpectralInversion(SpectralInversion *pSpectralInversion);
 
-    CBDADigitalDemodulator(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+    CBDADigitalDemodulator(IKsPropertySet * pProperty, ULONG NodeId) : m_Ref(0), m_pProperty(pProperty), m_NodeId(NodeId){};
     ~CBDADigitalDemodulator(){};
 
 protected:
     LONG m_Ref;
-    HANDLE m_hFile;
+    IKsPropertySet * m_pProperty;
     ULONG m_NodeId;
 };
 
@@ -86,6 +88,7 @@ CBDADigitalDemodulator::QueryInterface(
     swprintf(Buffer, L"CBDADigitalDemodulator::QueryInterface: NoInterface for %s", lpstr);
     OutputDebugStringW(Buffer);
     CoTaskMemFree(lpstr);
+DebugBreak();
 #endif
 
     return E_NOINTERFACE;
@@ -98,20 +101,17 @@ CBDADigitalDemodulator::put_ModulationType(ModulationType *pModulationType)
     KSP_NODE Node;
     HRESULT hr;
 
-    ULONG BytesReturned;
-
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
-    Node.Property.Id = KSPROPERTY_BDA_MODULATION_TYPE;
-    Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pModulationType, sizeof(ModulationType), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_MODULATION_TYPE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pModulationType, sizeof(ModulationType));
+
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_ModulationType: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_ModulationType: hr %lx\n", hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -131,20 +131,18 @@ CBDADigitalDemodulator::put_InnerFECMethod(FECMethod *pFECMethod)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
-    Node.Property.Id = KSPROPERTY_BDA_INNER_FEC_TYPE;
-    Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECMethod, sizeof(FECMethod), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_INNER_FEC_TYPE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pFECMethod, sizeof(FECMethod));
+
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECMethod: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECMethod: hr %lx\n", hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -165,20 +163,16 @@ CBDADigitalDemodulator::put_InnerFECRate(BinaryConvolutionCodeRate *pFECRate)
     KSP_NODE Node;
     HRESULT hr;
 
-    ULONG BytesReturned;
-
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
-    Node.Property.Id = KSPROPERTY_BDA_INNER_FEC_RATE;
-    Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECRate, sizeof(BinaryConvolutionCodeRate), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_INNER_FEC_RATE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pFECRate, sizeof(BinaryConvolutionCodeRate));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECRate: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECRate: hr %lx\n", hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -198,20 +192,17 @@ CBDADigitalDemodulator::put_OuterFECMethod(FECMethod *pFECMethod)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
-    Node.Property.Id = KSPROPERTY_BDA_OUTER_FEC_TYPE;
-    Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECMethod, sizeof(FECMethod), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_OUTER_FEC_TYPE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pFECMethod, sizeof(FECMethod));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECMethod: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECMethod: hr %lx\n", hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -232,20 +223,16 @@ CBDADigitalDemodulator::put_OuterFECRate(BinaryConvolutionCodeRate *pFECRate)
     KSP_NODE Node;
     HRESULT hr;
 
-    ULONG BytesReturned;
-
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
-    Node.Property.Id = KSPROPERTY_BDA_OUTER_FEC_RATE;
-    Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECRate, sizeof(BinaryConvolutionCodeRate), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_OUTER_FEC_RATE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pFECRate, sizeof(BinaryConvolutionCodeRate));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECRate: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECRate: hr %lx\n", hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -265,20 +252,17 @@ CBDADigitalDemodulator::put_SymbolRate(ULONG *pSymbolRate)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
-    Node.Property.Id = KSPROPERTY_BDA_SYMBOL_RATE;
-    Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pSymbolRate, sizeof(ULONG), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_SYMBOL_RATE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pSymbolRate, sizeof(ULONG));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_SymbolRate: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_SymbolRate: hr %lx\n", hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -298,20 +282,17 @@ CBDADigitalDemodulator::put_SpectralInversion(SpectralInversion *pSpectralInvers
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
-    Node.Property.Id = KSPROPERTY_BDA_SPECTRAL_INVERSION;
-    Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pSpectralInversion, sizeof(SpectralInversion), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_SPECTRAL_INVERSION, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pSpectralInversion, sizeof(SpectralInversion));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_SpectralInversion: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_SpectralInversion: hr %lx\n", hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -329,13 +310,13 @@ CBDADigitalDemodulator::get_SpectralInversion(SpectralInversion *pSpectralInvers
 HRESULT
 WINAPI
 CBDADigitalDemodulator_fnConstructor(
-    HANDLE hFile,
+    IKsPropertySet * pProperty,
     ULONG NodeId,
     REFIID riid,
     LPVOID * ppv)
 {
     // construct device control
-    CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(hFile, NodeId);
+    CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(pProperty, NodeId);
 
 #ifdef BDAPLGIN_TRACE
     OutputDebugStringW(L"CBDADigitalDemodulator_fnConstructor\n");
index 90d1e6a..6a0e685 100644 (file)
@@ -9,8 +9,10 @@
 
 #include "precomp.h"
 
+#ifndef _MSC_VER
 const GUID IID_IBDA_FrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x00, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
 const GUID KSPROPSETID_BdaFrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+#endif
 
 class CBDAFrequencyFilter : public IBDA_FrequencyFilter
 {
@@ -46,12 +48,12 @@ public:
     HRESULT STDMETHODCALLTYPE put_FrequencyMultiplier(ULONG ulMultiplier);
     HRESULT STDMETHODCALLTYPE get_FrequencyMultiplier(ULONG *pulMultiplier);
 
-    CBDAFrequencyFilter(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+    CBDAFrequencyFilter(IKsPropertySet * pProperty, ULONG NodeId) : m_Ref(0), m_pProperty(pProperty), m_NodeId(NodeId){};
     virtual ~CBDAFrequencyFilter(){};
 
 protected:
     LONG m_Ref;
-    HANDLE m_hFile;
+    IKsPropertySet * m_pProperty;
     ULONG m_NodeId;
 };
 
@@ -84,6 +86,7 @@ CBDAFrequencyFilter::QueryInterface(
     swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s", lpstr);
     OutputDebugStringW(Buffer);
     CoTaskMemFree(lpstr);
+DebugBreak();
 #endif
 
     return E_NOINTERFACE;
@@ -110,20 +113,16 @@ CBDAFrequencyFilter::put_Frequency(ULONG ulFrequency)
     KSP_NODE Node;
     HRESULT hr;
 
-    ULONG BytesReturned;
-
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
-    Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_FREQUENCY;
-    Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulFrequency, sizeof(ULONG), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_FREQUENCY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulFrequency, sizeof(ULONG));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDAFrequencyFilter::put_Frequency: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+    swprintf(Buffer, L"CBDAFrequencyFilter::put_Frequency: m_NodeId %lu hr %lx\n", m_NodeId, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -143,20 +142,17 @@ CBDAFrequencyFilter::put_Polarity(Polarisation Polarity)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
-    Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_POLARITY;
-    Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &Polarity, sizeof(Polarisation), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_POLARITY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &Polarity, sizeof(Polarisation));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+    swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx\n", m_NodeId, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -176,20 +172,17 @@ CBDAFrequencyFilter::put_Range(ULONG ulRange)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
-    Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_RANGE;
-    Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulRange, sizeof(ULONG), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_RANGE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulRange, sizeof(ULONG));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+    swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx\n", m_NodeId, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -209,20 +202,17 @@ CBDAFrequencyFilter::put_Bandwidth(ULONG ulBandwidth)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
-    Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_BANDWIDTH;
-    Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulBandwidth, sizeof(ULONG), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_BANDWIDTH, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulBandwidth, sizeof(ULONG));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDAFrequencyFilter::put_Bandwidth: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+    swprintf(Buffer, L"CBDAFrequencyFilter::put_Bandwidth: m_NodeId %lu hr %lx\n", m_NodeId, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -241,20 +231,17 @@ CBDAFrequencyFilter::put_FrequencyMultiplier(ULONG ulMultiplier)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
-    Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER;
-    Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulMultiplier, sizeof(ULONG), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulMultiplier, sizeof(ULONG));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDAFrequencyFilter::put_FrequencyMultiplier: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+    swprintf(Buffer, L"CBDAFrequencyFilter::put_FrequencyMultiplier: m_NodeId %lu hr %lx\n", m_NodeId, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -271,13 +258,13 @@ CBDAFrequencyFilter::get_FrequencyMultiplier(ULONG *pulMultiplier)
 HRESULT
 WINAPI
 CBDAFrequencyFilter_fnConstructor(
-    HANDLE hFile,
+    IKsPropertySet* pProperty,
     ULONG NodeId,
     REFIID riid,
     LPVOID * ppv)
 {
     // construct device control
-    CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(hFile, NodeId);
+    CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(pProperty, NodeId);
 
 #ifdef BDAPLGIN_TRACE
     OutputDebugStringW(L"CBDAFrequencyFilter_fnConstructor\n");
index a663883..992eeab 100644 (file)
@@ -9,8 +9,10 @@
 
 #include "precomp.h"
 
+#ifndef _MSC_VER
 const GUID IID_IBDA_LNBInfo = {0x992cf102, 0x49f9, 0x4719, {0xa6, 0x64,  0xc4, 0xf2, 0x3e, 0x24, 0x08, 0xf4}};
 const GUID KSPROPSETID_BdaLNBInfo = {0x992cf102, 0x49f9, 0x4719, {0xa6, 0x64, 0xc4, 0xf2, 0x3e, 0x24, 0x8, 0xf4}};
+#endif
 
 class CBDALNBInfo : public IBDA_LNBInfo
 {
@@ -41,12 +43,12 @@ public:
     HRESULT STDMETHODCALLTYPE put_HighLowSwitchFrequency(ULONG ulSwitchFrequency);
     HRESULT STDMETHODCALLTYPE get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency);
 
-    CBDALNBInfo(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+    CBDALNBInfo(IKsPropertySet *pProperty, ULONG NodeId) : m_Ref(0), m_pProperty(pProperty), m_NodeId(NodeId){};
     ~CBDALNBInfo(){};
 
 protected:
     LONG m_Ref;
-    HANDLE m_hFile;
+    IKsPropertySet * m_pProperty;
     ULONG m_NodeId;
 };
 
@@ -90,20 +92,17 @@ CBDALNBInfo::put_LocalOscilatorFrequencyLowBand(ULONG ulLOFLow)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaLNBInfo;
-    Node.Property.Id = KSPROPERTY_BDA_LNB_LOF_LOW_BAND;
-    Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulLOFLow, sizeof(ULONG), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaLNBInfo, KSPROPERTY_BDA_LNB_LOF_LOW_BAND, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulLOFLow, sizeof(LONG));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyLowBand: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+    swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyLowBand: m_NodeId %lu hr %lx\n", m_NodeId, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -123,20 +122,17 @@ CBDALNBInfo::put_LocalOscilatorFrequencyHighBand(ULONG ulLOFHigh)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaLNBInfo;
-    Node.Property.Id = KSPROPERTY_BDA_LNB_LOF_HIGH_BAND;
-    Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulLOFHigh, sizeof(ULONG), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaLNBInfo, KSPROPERTY_BDA_LNB_LOF_HIGH_BAND, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulLOFHigh, sizeof(ULONG));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyHighBand: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+    swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyHighBand: m_NodeId %lu hr %lx\n", m_NodeId, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -156,20 +152,17 @@ CBDALNBInfo::put_HighLowSwitchFrequency(ULONG ulSwitchFrequency)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaLNBInfo;
-    Node.Property.Id = KSPROPERTY_BDA_LNB_SWITCH_FREQUENCY;
-    Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = m_NodeId;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulSwitchFrequency, sizeof(ULONG), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaLNBInfo, KSPROPERTY_BDA_LNB_SWITCH_FREQUENCY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulSwitchFrequency, sizeof(ULONG));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDALNBInfo::put_HighLowSwitchFrequency: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+    swprintf(Buffer, L"CBDALNBInfo::put_HighLowSwitchFrequency: m_NodeId %lu hr %lx\n", m_NodeId, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -186,13 +179,13 @@ CBDALNBInfo::get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency)
 HRESULT
 WINAPI
 CBDALNBInfo_fnConstructor(
-    HANDLE hFile,
+    IKsPropertySet *pProperty,
     ULONG NodeId,
     REFIID riid,
     LPVOID * ppv)
 {
     // construct device control
-    CBDALNBInfo * handler = new CBDALNBInfo(hFile, NodeId);
+    CBDALNBInfo * handler = new CBDALNBInfo(pProperty, NodeId);
 
 #ifdef BDAPLGIN_TRACE
     OutputDebugStringW(L"CBDALNBInfo_fnConstructor\n");
index a5b9912..4420b76 100644 (file)
@@ -9,9 +9,12 @@
 
 #include "precomp.h"
 
-const GUID IID_IBDA_PinControl       = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
+#ifndef _MSC_VER
 const GUID KSPROPSETID_BdaPinControl = {0x0ded49d5, 0xa8b7, 0x4d5d, {0x97, 0xa1, 0x12, 0xb0, 0xc1, 0x95, 0x87, 0x4d}};
+const GUID IID_IBDA_PinControl       = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
 const GUID IID_IPin = {0x56a86891, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
+#endif
+
 
 class CBDAPinControl : public IBDA_PinControl
 {
@@ -39,7 +42,7 @@ public:
     HRESULT STDMETHODCALLTYPE RegistrationContext(ULONG *pulRegistrationCtx);
 
 
-    CBDAPinControl(HANDLE hFile, IBDA_NetworkProvider * pProvider, IPin * pConnectedPin) : m_Ref(0), m_Handle(hFile), m_pProvider(pProvider), m_pConnectedPin(pConnectedPin){};
+    CBDAPinControl(HANDLE hFile, IBDA_NetworkProvider * pProvider, IPin * pConnectedPin, ULONG RegistrationCtx) : m_Ref(0), m_Handle(hFile), m_pProvider(pProvider), m_pConnectedPin(pConnectedPin), m_RegistrationCtx(RegistrationCtx){};
     virtual ~CBDAPinControl()
     {
         //m_pConnectedPin->Release();
@@ -51,6 +54,7 @@ protected:
     HANDLE m_Handle;
     IBDA_NetworkProvider * m_pProvider;
     IPin * m_pConnectedPin;
+    ULONG m_RegistrationCtx;
 };
 
 HRESULT
@@ -72,16 +76,7 @@ CBDAPinControl::QueryInterface(
         reinterpret_cast<IBDA_PinControl*>(*Output)->AddRef();
         return NOERROR;
     }
-
-#ifdef BDAPLGIN_TRACE
-    WCHAR Buffer[MAX_PATH];
-    LPOLESTR lpstr;
-    StringFromCLSID(refiid, &lpstr);
-    swprintf(Buffer, L"CBDAPinControl::QueryInterface: NoInterface for %s", lpstr);
-    OutputDebugStringW(Buffer);
-    CoTaskMemFree(lpstr);
-#endif
-
+DebugBreak();
     return E_NOINTERFACE;
 }
 //-------------------------------------------------------------------
@@ -142,46 +137,124 @@ STDMETHODCALLTYPE
 CBDAPinControl::RegistrationContext(ULONG *pulRegistrationCtx)
 {
 #ifdef BDAPLGIN_TRACE
-    OutputDebugStringW(L"CBDAPinControl::RegistrationContext: NotImplemented\n");
+    OutputDebugStringW(L"CBDAPinControl::RegistrationContext\n");
 #endif
 
-    return E_NOTIMPL;
+    if (!pulRegistrationCtx)
+    {
+        // invalid argument
+        return E_POINTER;
+    }
+
+    if (m_RegistrationCtx)
+    {
+        // is registered
+        *pulRegistrationCtx = m_RegistrationCtx;
+        return NOERROR;
+    }
+
+    //pin not registered
+    return E_FAIL;
 }
 
+//-------------------------------------------------------------------
 HRESULT
-WINAPI
-CBDAPinControl_fnConstructor(
+GetNetworkProviderFromGraph(
+    IFilterGraph * pGraph,
+    IBDA_NetworkProvider ** pOutNetworkProvider)
+{
+    IEnumFilters *pEnumFilters = NULL;
+    IBaseFilter * ppFilter[1];
+    IBDA_NetworkProvider * pNetworkProvider = NULL;
+    HRESULT hr;
+
+    // get IEnumFilters interface
+    hr = pGraph->EnumFilters(&pEnumFilters);
+
+    if (FAILED(hr))
+    {
+        //clean up
+        *pOutNetworkProvider = NULL;
+        return hr;
+    }
+
+    while(pEnumFilters->Next(1, ppFilter, NULL) == S_OK)
+    {
+        // check if that filter supports the IBDA_NetworkProvider interface
+        hr = ppFilter[0]->QueryInterface(IID_IBDA_NetworkProvider, (void**)&pNetworkProvider);
+
+        // release IBaseFilter
+        ppFilter[0]->Release();
+
+        if (SUCCEEDED(hr))
+            break;
+    }
+
+    // release IEnumFilters interface
+    pEnumFilters->Release();
+
+    //store result
+    *pOutNetworkProvider = pNetworkProvider;
+
+    if (pNetworkProvider)
+        return S_OK;
+    else
+        return E_FAIL;
+}
+
+HRESULT
+CBDAPinControl_RealConstructor(
+    HANDLE hPin,
+    IBDA_NetworkProvider *pNetworkProvider,
+    IPin * pConnectedPin,
+    ULONG RegistrationCtx,
     IUnknown * pUnkOuter,
     REFIID riid,
     LPVOID * ppv)
 {
-    IPin * pConnectedPin = NULL;
-    IBDA_NetworkProvider * pNetworkProvider = NULL;
-    HANDLE hFile = INVALID_HANDLE_VALUE;
+    CBDAPinControl * handler = new CBDAPinControl(hPin, pNetworkProvider, pConnectedPin, RegistrationCtx);
 
-#if 0
-    if (!IsEqualGUID(riid, IID_IUnknown))
-    {
 #ifdef BDAPLGIN_TRACE
-    OutputDebugStringW(L"CBDAPinControl_fnConstructor: Expected IUnknown\n");
+    OutputDebugStringW(L"CBDAPinControl_fnConstructor\n");
 #endif
-        return REGDB_E_CLASSNOTREG;
+
+    if (!handler)
+        return E_OUTOFMEMORY;
+
+    if (FAILED(handler->QueryInterface(riid, ppv)))
+    {
+        /* not supported */
+        delete handler;
+        return E_NOINTERFACE;
     }
 
+    return NOERROR;
+}
 
+HRESULT
+WINAPI
+CBDAPinControl_fnConstructor(
+    IUnknown * pUnkOuter,
+    REFIID riid,
+    LPVOID * ppv)
+{
+    IPin * pConnectedPin = NULL;
+    IBDA_NetworkProvider * pNetworkProvider = NULL;
+    HANDLE hFile = INVALID_HANDLE_VALUE;
     HRESULT hr;
     IKsObject * pObject = NULL;
     IPin * pPin = NULL;
-    IEnumFilters *pEnumFilters = NULL;
-
-    IBaseFilter * ppFilter[1];
+    IUnknown * pUnknown = NULL;
     PIN_INFO PinInfo;
     FILTER_INFO FilterInfo;
-
+    ULONG RegistrationCtx = 0;
 
     if (!pUnkOuter)
         return E_POINTER;
 
+    OutputDebugStringW(L"CBDAPinControl_fnConstructor\n");
+    //DebugBreak();
+
     // query for IKsObject interface
     hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
 
@@ -209,8 +282,15 @@ CBDAPinControl_fnConstructor(
        return hr;
     }
 
+    if (!PinInfo.pFilter)
+    {
+        //clean up
+       pObject->Release();
+       pPin->Release();
+       return hr;
+    }
+
     // sanity checks
-    assert(PinInfo.dir == PINDIR_OUTPUT);
     assert(PinInfo.pFilter != NULL);
 
     // query filter info
@@ -219,57 +299,80 @@ CBDAPinControl_fnConstructor(
     // sanity check
     assert(FilterInfo.pGraph != NULL);
 
-    // get IEnumFilters interface
-    hr = FilterInfo.pGraph->EnumFilters(&pEnumFilters);
-
-    if (FAILED(hr))
-    {
-        //clean up
-       FilterInfo.pGraph->Release();
-       PinInfo.pFilter->Release();
-       pObject->Release();
-       pPin->Release();
-       return hr;
-    }
+    // get network provider interface
+    hr = GetNetworkProviderFromGraph(FilterInfo.pGraph, &pNetworkProvider);
 
-    while(pEnumFilters->Next(1, ppFilter, NULL) == S_OK)
+    if (SUCCEEDED(hr))
     {
-        // check if that filter supports the IBDA_NetworkProvider interface
-        hr = ppFilter[0]->QueryInterface(IID_IBDA_NetworkProvider, (void**)&pNetworkProvider);
-
-        // release IBaseFilter
-        ppFilter[0]->Release();
-
-        if (SUCCEEDED(hr))
-            break;
+        if (PinInfo.dir == PINDIR_OUTPUT)
+        {
+            // get connected pin handle
+            hr = pPin->ConnectedTo(&pConnectedPin);
+            if (SUCCEEDED(hr))
+            {
+                // get file handle
+                hFile = pObject->KsGetObjectHandle();
+                if (hFile)
+                {
+                    hr = CBDAPinControl_RealConstructor(hFile, pNetworkProvider, pConnectedPin, 0, pUnkOuter, riid, ppv);
+                    if (SUCCEEDED(hr))
+                    {
+                        // set to null to prevent releasing
+                        pNetworkProvider = NULL;
+                        pConnectedPin = NULL;
+                    }
+                }
+                else
+                {
+                    // expected file handle
+                    hr = E_UNEXPECTED;
+                }
+            }
+        }
+        else
+        {
+            // get IUnknown from base filter
+            hr = PinInfo.pFilter->QueryInterface(IID_IUnknown, (void**)&pUnknown);
+            if (SUCCEEDED(hr))
+            {
+                // register device filter
+                hr = pNetworkProvider->RegisterDeviceFilter(pUnknown, &RegistrationCtx);
+                if (SUCCEEDED(hr))
+                {
+                    // get file handle
+                    hFile = pObject->KsGetObjectHandle();
+                    if (hFile)
+                    {
+                        hr = CBDAPinControl_RealConstructor(hFile, pNetworkProvider, NULL, RegistrationCtx, pUnkOuter, riid, ppv);
+                        if (SUCCEEDED(hr))
+                        {
+                            // set to null to prevent releasing
+                            pNetworkProvider = NULL;
+                        }
+                    }
+                    else
+                    {
+                        // expected file handle
+                        hr = E_UNEXPECTED;
+                    }
+                }
+                else
+                {
+                    WCHAR Buffer[100];
+                    swprintf(Buffer, L"CBDAPinControl_fnConstructor failed to register filter with %lx\n", hr);
+                    OutputDebugStringW(Buffer);
+                    DebugBreak();
+                }
+            }
+        }
     }
 
-    // release IEnumFilters interface
-    pEnumFilters->Release();
-
     // release IFilterGraph interface
     FilterInfo.pGraph->Release();
 
     // release IBaseFilter interface
     PinInfo.pFilter->Release();
 
-    if (pNetworkProvider)
-    {
-        // get connected pin handle
-        hr = pPin->ConnectedTo(&pConnectedPin);
-
-        // get file handle
-        hFile = pObject->KsGetObjectHandle();
-
-        if (FAILED(hr) || hFile == INVALID_HANDLE_VALUE)
-        {
-            // pin not connected
-            pNetworkProvider->Release();
-            // set zero
-            pNetworkProvider = NULL;
-        }
-    }
-
     // release IPin 
     pPin->Release();
 
@@ -277,30 +380,23 @@ CBDAPinControl_fnConstructor(
     pObject->Release();
 
 
-    if (pNetworkProvider == NULL)
+    if (pNetworkProvider)
     {
-        // no network provider interface in graph
-        return E_NOINTERFACE;
+        // release network provider
+        pNetworkProvider->Release();
     }
-#endif
-
-    CBDAPinControl * handler = new CBDAPinControl(hFile, pNetworkProvider, pConnectedPin);
 
-#ifdef BDAPLGIN_TRACE
-    OutputDebugStringW(L"CBDAPinControl_fnConstructor");
-#endif
-
-    DebugBreak();
-
-    if (!handler)
-        return E_OUTOFMEMORY;
+    if (pConnectedPin)
+    {
+        // release connected pin
+        pConnectedPin->Release();
+    }
 
-    if (FAILED(handler->QueryInterface(riid, ppv)))
+    if (pUnknown)
     {
-        /* not supported */
-        delete handler;
-        return E_NOINTERFACE;
+        // release filter
+        pUnknown->Release();
     }
 
-    return NOERROR;
+    return hr;
 }
index 771a798..1bc9836 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef PRECOMP_H__
 #define PRECOMP_H__
 
-//#define BDAPLGIN_TRACE
+#define BDAPLGIN_TRACE
 #define BUILDING_KS
 #define _KSDDK_
 #include <dshow.h>
@@ -9,6 +9,7 @@
 #include <ks.h>
 #define __STREAMS__
 #include <ksproxy.h>
+#include <ksmedia.h>
 #include <stdio.h>
 #include <wchar.h>
 #include <tchar.h>
@@ -55,7 +56,6 @@ CBDAPinControl_fnConstructor(
 HRESULT
 WINAPI
 CControlNode_fnConstructor(
-    HANDLE hFile,
     IBaseFilter * pFilter,
     ULONG NodeType,
     ULONG PinId,
@@ -67,7 +67,7 @@ CControlNode_fnConstructor(
 HRESULT
 WINAPI
 CBDAFrequencyFilter_fnConstructor(
-    HANDLE hFile,
+    IKsPropertySet * pProperty,
     ULONG NodeId,
     REFIID riid,
     LPVOID * ppv);
@@ -77,7 +77,7 @@ CBDAFrequencyFilter_fnConstructor(
 HRESULT
 WINAPI
 CBDASignalStatistics_fnConstructor(
-    HANDLE hFile,
+    IKsPropertySet * pProperty,
     ULONG NodeId,
     REFIID riid,
     LPVOID * ppv);
@@ -87,7 +87,7 @@ CBDASignalStatistics_fnConstructor(
 HRESULT
 WINAPI
 CBDALNBInfo_fnConstructor(
-    HANDLE hFile,
+    IKsPropertySet * pProperty,
     ULONG NodeId,
     REFIID riid,
     LPVOID * ppv);
@@ -96,9 +96,11 @@ CBDALNBInfo_fnConstructor(
 HRESULT
 WINAPI
 CBDADigitalDemodulator_fnConstructor(
-    HANDLE hFile,
+    IKsPropertySet * pProperty,
     ULONG NodeId,
     REFIID riid,
     LPVOID * ppv);
 
+extern const GUID IID_IKsObject;
+
 #endif
index ae6079e..230ab8b 100644 (file)
@@ -9,8 +9,10 @@
 
 #include "precomp.h"
 
+#ifndef _MSC_VER
 const GUID IID_IBDA_SignalStatistics = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0x0d, 0x9a, 0x2a, 0x43, 0x38}};
 const GUID KSPROPSETID_BdaSignalStats = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0xd, 0x9a, 0x2a, 0x43, 0x38}};
+#endif
 
 class CBDASignalStatistics : public IBDA_SignalStatistics
 {
@@ -45,12 +47,12 @@ public:
     HRESULT STDMETHODCALLTYPE put_SampleTime(LONG lmsSampleTime);
     HRESULT STDMETHODCALLTYPE get_SampleTime(LONG *plmsSampleTime);
 
-    CBDASignalStatistics(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+    CBDASignalStatistics(IKsPropertySet * pProperty, ULONG NodeId) : m_Ref(0), m_pProperty(pProperty), m_NodeId(NodeId){};
     ~CBDASignalStatistics(){};
 
 protected:
     LONG m_Ref;
-    HANDLE m_hFile;
+    IKsPropertySet * m_pProperty;
     ULONG m_NodeId;
 };
 
@@ -75,7 +77,6 @@ CBDASignalStatistics::QueryInterface(
         reinterpret_cast<IBDA_SignalStatistics*>(*Output)->AddRef();
         return NOERROR;
     }
-
     return E_NOINTERFACE;
 }
 
@@ -95,13 +96,13 @@ CBDASignalStatistics::get_SignalStrength(LONG *plDbStrength)
     ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaSignalStats;
-    Node.Property.Id = KSPROPERTY_BDA_SIGNAL_STRENGTH;
-    Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = (ULONG)-1;
+    Node.Reserved = 0;
+
+    assert(m_pProperty);
+
+    hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_STRENGTH, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), plDbStrength, sizeof(LONG), &BytesReturned);
 
-    // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), plDbStrength, sizeof(LONG), &BytesReturned);
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
@@ -128,13 +129,11 @@ CBDASignalStatistics::get_SignalQuality(LONG *plPercentQuality)
     ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaSignalStats;
-    Node.Property.Id = KSPROPERTY_BDA_SIGNAL_QUALITY;
-    Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = (ULONG)-1;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), plPercentQuality, sizeof(LONG), &BytesReturned);
+    hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_QUALITY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), plPercentQuality, sizeof(LONG), &BytesReturned);
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
@@ -162,13 +161,12 @@ CBDASignalStatistics::get_SignalPresent(BOOLEAN *pfPresent)
     ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaSignalStats;
-    Node.Property.Id = KSPROPERTY_BDA_SIGNAL_PRESENT;
-    Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = (ULONG)-1;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &Present, sizeof(ULONG), &BytesReturned);
+    hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_PRESENT, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &Present, sizeof(ULONG), &BytesReturned);
+
     // store result
     *pfPresent = Present;
 
@@ -198,13 +196,12 @@ CBDASignalStatistics::get_SignalLocked(BOOLEAN *pfLocked)
     ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaSignalStats;
-    Node.Property.Id = KSPROPERTY_BDA_SIGNAL_LOCKED;
-    Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = (ULONG)-1;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &Locked, sizeof(ULONG), &BytesReturned);
+    hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_LOCKED, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &Locked, sizeof(ULONG), &BytesReturned);
+
     *pfLocked = Locked;
 
 #ifdef BDAPLGIN_TRACE
@@ -222,20 +219,17 @@ CBDASignalStatistics::put_SampleTime(LONG lmsSampleTime)
 {
     KSP_NODE Node;
     HRESULT hr;
-    ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaSignalStats;
-    Node.Property.Id = KSPROPERTY_BDA_SAMPLE_TIME;
-    Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = (ULONG)-1;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &lmsSampleTime, sizeof(LONG), &BytesReturned);
+    hr = m_pProperty->Set(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SAMPLE_TIME, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &lmsSampleTime, sizeof(LONG));
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDASignalStatistics::put_SampleTime: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+    swprintf(Buffer, L"CBDASignalStatistics::put_SampleTime: m_NodeId %lu hr %lx\n", m_NodeId, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -251,13 +245,11 @@ CBDASignalStatistics::get_SampleTime(LONG *plmsSampleTime)
     ULONG BytesReturned;
 
     // setup request
-    Node.Property.Set = KSPROPSETID_BdaSignalStats;
-    Node.Property.Id = KSPROPERTY_BDA_SAMPLE_TIME;
-    Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
     Node.NodeId = (ULONG)-1;
+    Node.Reserved = 0;
 
     // perform request
-    hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), plmsSampleTime, sizeof(LONG), &BytesReturned);
+    hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SAMPLE_TIME, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), plmsSampleTime, sizeof(LONG), &BytesReturned);
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
@@ -271,13 +263,13 @@ CBDASignalStatistics::get_SampleTime(LONG *plmsSampleTime)
 HRESULT
 WINAPI
 CBDASignalStatistics_fnConstructor(
-    HANDLE hFile,
+    IKsPropertySet * pProperty,
     ULONG NodeId,
     REFIID riid,
     LPVOID * ppv)
 {
     // construct device control
-    CBDASignalStatistics * handler = new CBDASignalStatistics(hFile, NodeId);
+    CBDASignalStatistics * handler = new CBDASignalStatistics(pProperty, NodeId);
 
 #ifdef BDAPLGIN_TRACE
     OutputDebugStringW(L"CBDASignalStatistics_fnConstructor\n");
index f5b9c1e..e7c4b1f 100644 (file)
@@ -140,7 +140,10 @@ CKsAllocator::SetProperties(
     SYSTEM_INFO SystemInfo;
 
     EnterCriticalSection(&m_CriticalSection);
+
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsAllocator::SetProperties\n");
+#endif
 
     if (!pRequest || !pActual)
         return E_POINTER;
@@ -216,7 +219,9 @@ CKsAllocator::Commit()
     //TODO integer overflow checks
     EnterCriticalSection(&m_CriticalSection);
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsAllocator::Commit\n");
+#endif
 
     if (m_Mode == KsAllocatorMode_Kernel)
     {
@@ -301,7 +306,9 @@ CKsAllocator::Decommit()
 {
     EnterCriticalSection(&m_CriticalSection);
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsAllocator::Decommit\n");
+#endif
 
     if (m_Mode == KsAllocatorMode_Kernel)
     {
@@ -340,7 +347,9 @@ CKsAllocator::GetBuffer(
     DWORD dwFlags)
 {
     IMediaSample * Sample = NULL;
-    OutputDebugStringW(L"CKsAllocator::GetBuffer\n");
+
+    if (!m_Commited)
+        return VFW_E_NOT_COMMITTED;
 
     do
     {
@@ -390,7 +399,9 @@ CKsAllocator::ReleaseBuffer(
 {
     EnterCriticalSection(&m_CriticalSection);
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsAllocator::ReleaseBuffer\n");
+#endif
 
     // media sample always 1 ref count in free list
     pBuffer->AddRef();
@@ -427,7 +438,10 @@ CKsAllocator::SetNotify(
     IMemAllocatorNotifyCallbackTemp *pNotify)
 {
     EnterCriticalSection(&m_CriticalSection);
+
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsAllocator::SetNotify\n");
+#endif
 
     if (pNotify)
         pNotify->AddRef();
@@ -519,7 +533,9 @@ CKsAllocator::KsCreateAllocatorAndGetHandle(
     KSALLOCATOR_FRAMING AllocatorFraming;
     HANDLE hPin;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsAllocator::KsCreateAllocatorAndGetHandle\n");
+#endif
 
     if (m_hAllocator)
     {
@@ -588,7 +604,9 @@ CKsAllocator_Constructor(
     REFIID riid,
     LPVOID * ppv)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsAllocator_Constructor\n");
+#endif
 
     CKsAllocator * handler = new CKsAllocator();
 
index 7fec05f..04c53b3 100644 (file)
@@ -97,7 +97,9 @@ HRESULT
 STDMETHODCALLTYPE
 CKsBasicAudio::Stop()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -105,7 +107,10 @@ HRESULT
 STDMETHODCALLTYPE
 CKsBasicAudio::Pause()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -114,7 +119,10 @@ STDMETHODCALLTYPE
 CKsBasicAudio::Run(
     REFERENCE_TIME tStart)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -123,7 +131,9 @@ STDMETHODCALLTYPE
 CKsBasicAudio::SetSyncSource(
     IReferenceClock *pClock)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -131,7 +141,10 @@ HRESULT
 STDMETHODCALLTYPE
 CKsBasicAudio::NotifyGraphChange()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -144,7 +157,10 @@ STDMETHODCALLTYPE
 CKsBasicAudio::GetTypeInfoCount(
     UINT *pctinfo)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -155,7 +171,9 @@ CKsBasicAudio::GetTypeInfo(
     LCID lcid,
     ITypeInfo **ppTInfo)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -168,7 +186,10 @@ CKsBasicAudio::GetIDsOfNames(
     LCID lcid,
     DISPID *rgDispId)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -184,7 +205,10 @@ CKsBasicAudio::Invoke(
     EXCEPINFO *pExcepInfo,
     UINT *puArgErr)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -197,7 +221,10 @@ STDMETHODCALLTYPE
 CKsBasicAudio::put_Volume(
     long lVolume)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -207,7 +234,10 @@ STDMETHODCALLTYPE
 CKsBasicAudio::get_Volume(
     long *plVolume)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -217,7 +247,10 @@ STDMETHODCALLTYPE
 CKsBasicAudio::put_Balance(
     long lBalance)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -227,7 +260,10 @@ STDMETHODCALLTYPE
 CKsBasicAudio::get_Balance(
     long *plBalance)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -238,7 +274,9 @@ CKsBasicAudio_Constructor(
     REFIID riid,
     LPVOID * ppv)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsBasicAudio_Constructor\n");
+#endif
 
     CKsBasicAudio * handler = new CKsBasicAudio();
 
index d692dec..868633e 100644 (file)
@@ -12,6 +12,8 @@
 const GUID KSCATEGORY_CLOCK       = {0x53172480, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
 #endif
 
+const GUID IID_IKsClockForwarder              = {0x877e4352, 0x6fea, 0x11d0, {0xb8, 0x63, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
+
 DWORD WINAPI CKsClockForwarder_ThreadStartup(LPVOID lpParameter);
 
 class CKsClockForwarder : public IDistributorNotify,
@@ -91,7 +93,8 @@ CKsClockForwarder::QueryInterface(
         reinterpret_cast<IUnknown*>(*Output)->AddRef();
         return NOERROR;
     }
-    if (IsEqualGUID(refiid, IID_IKsObject))
+    if (IsEqualGUID(refiid, IID_IKsObject) ||
+        IsEqualGUID(refiid, IID_IKsClockForwarder))
     {
         *Output = (IKsObject*)(this);
         reinterpret_cast<IKsObject*>(*Output)->AddRef();
@@ -105,15 +108,6 @@ CKsClockForwarder::QueryInterface(
         return NOERROR;
     }
 
-#if 0
-    if (IsEqualGUID(refiid, IID_IKsClockForwarder))
-    {
-        *Output = PVOID(this);
-        reinterpret_cast<IKsObject*>(*Output)->AddRef();
-        return NOERROR;
-    }
-#endif
-
     return E_NOINTERFACE;
 }
 
@@ -126,8 +120,13 @@ HRESULT
 STDMETHODCALLTYPE
 CKsClockForwarder::Stop()
 {
-    OutputDebugString("CKsClockForwarder::Stop\n");
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[200];
+    swprintf(Buffer, L"CKsClockForwarder::Stop m_ThreadStarted %u m_PendingStop %u m_hThread %p m_hEvent %p m_Handle %p\n", m_ThreadStarted, m_PendingStop, m_hThread, m_hEvent, m_Handle);
+    OutputDebugStringW(Buffer);
+#endif
 
+    m_Time = 0;
     if (m_ThreadStarted)
     {
         // signal pending stop
@@ -166,7 +165,9 @@ HRESULT
 STDMETHODCALLTYPE
 CKsClockForwarder::Pause()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugString("CKsClockForwarder::Pause\n");
+#endif
 
     if (!m_hEvent)
     {
@@ -206,7 +207,9 @@ STDMETHODCALLTYPE
 CKsClockForwarder::Run(
     REFERENCE_TIME tStart)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugString("CKsClockForwarder::Run\n");
+#endif
 
     m_Time = tStart;
 
@@ -233,7 +236,9 @@ STDMETHODCALLTYPE
 CKsClockForwarder::SetSyncSource(
     IReferenceClock *pClock)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugString("CKsClockForwarder::SetSyncSource\n");
+#endif
 
     if (pClock)
         pClock->AddRef();
@@ -250,9 +255,11 @@ HRESULT
 STDMETHODCALLTYPE
 CKsClockForwarder::NotifyGraphChange()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugString("CKsClockForwarder::NotifyGraphChange\n");
-    DebugBreak();
-    return E_NOTIMPL;
+#endif
+
+    return NOERROR;
 }
 
 //-------------------------------------------------------------------
@@ -282,6 +289,12 @@ CKsClockForwarder::SetClockState(KSSTATE State)
     if (SUCCEEDED(hr))
         m_State = State;
 
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[100];
+    swprintf(Buffer, L"CKsClockForwarder::SetClockState m_State %u State %u hr %lx\n", m_State, State, hr);
+    OutputDebugStringW(Buffer);
+#endif
+
     return hr;
 }
 
@@ -330,14 +343,18 @@ CKsClockForwarder_Constructor(
     HRESULT hr;
     HANDLE handle;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsClockForwarder_Constructor\n");
+#endif
 
     // open default clock
     hr = KsOpenDefaultDevice(KSCATEGORY_CLOCK, GENERIC_READ | GENERIC_WRITE, &handle);
 
     if (hr != NOERROR)
     {
+#ifdef KSPROXY_TRACE
          OutputDebugString("CKsClockForwarder_Constructor failed to open device\n");
+#endif
          return hr;
     }
 
index 91d2006..1333263 100644 (file)
@@ -102,7 +102,9 @@ HRESULT
 STDMETHODCALLTYPE
 CVPConfig::Stop()
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -110,7 +112,9 @@ HRESULT
 STDMETHODCALLTYPE
 CVPConfig::Pause()
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -119,7 +123,9 @@ STDMETHODCALLTYPE
 CVPConfig::Run(
     REFERENCE_TIME tStart)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -128,7 +134,9 @@ STDMETHODCALLTYPE
 CVPConfig::SetSyncSource(
     IReferenceClock *pClock)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -136,7 +144,9 @@ HRESULT
 STDMETHODCALLTYPE
 CVPConfig::NotifyGraphChange()
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -149,7 +159,9 @@ CVPConfig::GetConnectInfo(
     LPDWORD pdwNumConnectInfo, 
     IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -158,7 +170,9 @@ STDMETHODCALLTYPE
 CVPConfig::SetConnectInfo(
     DWORD dwChosenEntry)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -167,7 +181,9 @@ STDMETHODCALLTYPE
 CVPConfig::GetVPDataInfo(
     LPAMVPDATAINFO pamvpDataInfo)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -177,7 +193,9 @@ CVPConfig::GetMaxPixelRate(
     LPAMVPSIZE pamvpSize,
     OUT LPDWORD pdwMaxPixelsPerSecond)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -187,7 +205,9 @@ CVPConfig::InformVPInputFormats(
     DWORD dwNumFormats,
     IN LPDDPIXELFORMAT pDDPixelFormats)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -197,7 +217,9 @@ CVPConfig::GetVideoFormats(
     LPDWORD pdwNumFormats, 
     IN OUT LPDDPIXELFORMAT pddPixelFormats)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -206,7 +228,9 @@ STDMETHODCALLTYPE
 CVPConfig::SetVideoFormat(
     DWORD dwChosenEntry)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -214,7 +238,9 @@ HRESULT
 STDMETHODCALLTYPE
 CVPConfig::SetInvertPolarity()
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -223,7 +249,9 @@ STDMETHODCALLTYPE
 CVPConfig::GetOverlaySurface(
     LPDIRECTDRAWSURFACE* ppddOverlaySurface)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -232,7 +260,9 @@ STDMETHODCALLTYPE
 CVPConfig::SetDirectDrawKernelHandle(
     ULONG_PTR dwDDKernelHandle)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -241,7 +271,9 @@ STDMETHODCALLTYPE
 CVPConfig::SetVideoPortID(
     IN DWORD dwVideoPortID)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -252,7 +284,9 @@ CVPConfig::SetDDSurfaceKernelHandles(
     DWORD cHandles,
     IN ULONG_PTR *rgDDKernelHandles)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -264,7 +298,9 @@ CVPConfig::SetSurfaceParameters(
     IN DWORD dwXOrigin,
     IN DWORD dwYOrigin)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -277,7 +313,9 @@ STDMETHODCALLTYPE
 CVPConfig::IsVPDecimationAllowed(
     LPBOOL pbIsDecimationAllowed)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -286,13 +324,13 @@ STDMETHODCALLTYPE
 CVPConfig::SetScalingFactors(
     LPAMVPSIZE pamvpSize)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
 
-
-
 HRESULT
 WINAPI
 CVPConfig_Constructor(
@@ -300,7 +338,9 @@ CVPConfig_Constructor(
     REFIID riid,
     LPVOID * ppv)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CVPConfig_Constructor\n");
+#endif
 
     CVPConfig * handler = new CVPConfig();
 
index 016d060..b7b7130 100644 (file)
@@ -98,7 +98,9 @@ HRESULT
 STDMETHODCALLTYPE
 CVPVBIConfig::Stop()
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -106,7 +108,9 @@ HRESULT
 STDMETHODCALLTYPE
 CVPVBIConfig::Pause()
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -115,7 +119,9 @@ STDMETHODCALLTYPE
 CVPVBIConfig::Run(
     REFERENCE_TIME tStart)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -124,7 +130,9 @@ STDMETHODCALLTYPE
 CVPVBIConfig::SetSyncSource(
     IReferenceClock *pClock)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -132,7 +140,9 @@ HRESULT
 STDMETHODCALLTYPE
 CVPVBIConfig::NotifyGraphChange()
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -145,7 +155,9 @@ CVPVBIConfig::GetConnectInfo(
     LPDWORD pdwNumConnectInfo, 
     IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -154,7 +166,9 @@ STDMETHODCALLTYPE
 CVPVBIConfig::SetConnectInfo(
     DWORD dwChosenEntry)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -163,7 +177,9 @@ STDMETHODCALLTYPE
 CVPVBIConfig::GetVPDataInfo(
     LPAMVPDATAINFO pamvpDataInfo)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -173,7 +189,9 @@ CVPVBIConfig::GetMaxPixelRate(
     LPAMVPSIZE pamvpSize,
     OUT LPDWORD pdwMaxPixelsPerSecond)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -183,7 +201,9 @@ CVPVBIConfig::InformVPInputFormats(
     DWORD dwNumFormats,
     IN LPDDPIXELFORMAT pDDPixelFormats)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -193,7 +213,9 @@ CVPVBIConfig::GetVideoFormats(
     LPDWORD pdwNumFormats, 
     IN OUT LPDDPIXELFORMAT pddPixelFormats)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -202,7 +224,9 @@ STDMETHODCALLTYPE
 CVPVBIConfig::SetVideoFormat(
     DWORD dwChosenEntry)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -210,7 +234,9 @@ HRESULT
 STDMETHODCALLTYPE
 CVPVBIConfig::SetInvertPolarity()
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+ #ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -219,7 +245,9 @@ STDMETHODCALLTYPE
 CVPVBIConfig::GetOverlaySurface(
     LPDIRECTDRAWSURFACE* ppddOverlaySurface)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -228,7 +256,9 @@ STDMETHODCALLTYPE
 CVPVBIConfig::SetDirectDrawKernelHandle(
     ULONG_PTR dwDDKernelHandle)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -237,7 +267,9 @@ STDMETHODCALLTYPE
 CVPVBIConfig::SetVideoPortID(
     IN DWORD dwVideoPortID)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -248,7 +280,9 @@ CVPVBIConfig::SetDDSurfaceKernelHandles(
     DWORD cHandles,
     IN ULONG_PTR *rgDDKernelHandles)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -260,7 +294,9 @@ CVPVBIConfig::SetSurfaceParameters(
     IN DWORD dwXOrigin,
     IN DWORD dwYOrigin)
 {
-    OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -272,7 +308,9 @@ CVPVBIConfig_Constructor(
     REFIID riid,
     LPVOID * ppv)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CVPVBIConfig_Constructor\n");
+#endif
 
     CVPVBIConfig * handler = new CVPVBIConfig();
 
index 5006b68..965e847 100644 (file)
@@ -103,7 +103,9 @@ CKsDataTypeHandler::KsIsMediaTypeInRanges(
     ULONG Index;
     HRESULT hr = S_FALSE;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsDataTypeHandler::KsIsMediaTypeInRanges\n");
+#endif
 
     DataList = (PKSMULTIPLE_ITEM)DataRanges;
     DataRange = (PKSDATARANGE)(DataList + 1);
@@ -187,7 +189,9 @@ STDMETHODCALLTYPE
 CKsDataTypeHandler::KsSetMediaType(
     IN const AM_MEDIA_TYPE* AmMediaType)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugString("CKsDataTypeHandler::KsSetMediaType\n");
+#endif
 
     if (m_Type)
     {
@@ -228,7 +232,10 @@ CKsDataTypeHandler_Constructor (
     REFIID riid,
     LPVOID * ppv)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsDataTypeHandler_Constructor\n");
+#endif
+
     CKsDataTypeHandler * handler = new CKsDataTypeHandler();
 
     if (!handler)
index 462ffda..db2c7a0 100644 (file)
@@ -64,13 +64,6 @@ CEnumMediaTypes::QueryInterface(
         return NOERROR;
     }
 
-    WCHAR Buffer[MAX_PATH];
-    LPOLESTR lpstr;
-    StringFromCLSID(refiid, &lpstr);
-    swprintf(Buffer, L"CEnumMediaTypes::QueryInterface: NoInterface for %s\n", lpstr);
-    OutputDebugStringW(Buffer);
-    CoTaskMemFree(lpstr);
-
     return E_NOINTERFACE;
 }
 
@@ -171,7 +164,9 @@ STDMETHODCALLTYPE
 CEnumMediaTypes::Clone(
     IEnumMediaTypes **ppEnum)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CEnumMediaTypes::Clone : NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -189,7 +184,7 @@ CEnumMediaTypes_fnConstructor(
     WCHAR Buffer[MAX_PATH];
     LPOLESTR lpstr;
     StringFromCLSID(riid, &lpstr);
-    swprintf(Buffer, L"CEnumMediaTypes_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+    swprintf(Buffer, L"CEnumMediaTypes_fnConstructor riid %s\n", lpstr);
     OutputDebugStringW(Buffer);
 #endif
 
index 5c0f0ec..172ef7a 100644 (file)
@@ -132,7 +132,10 @@ STDMETHODCALLTYPE
 CEnumPins::Clone(
     IEnumPins **ppEnum)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CEnumPins::Clone : NotImplemented\n");
+#endif
+
     return E_NOTIMPL;
 }
 
index 783ff70..b651d7d 100644 (file)
@@ -62,6 +62,8 @@ class CInputPin : public IPin,
                   public ISpecifyPropertyPages
 {
 public:
+    typedef std::vector<IUnknown *>ProxyPluginVector;
+
     STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
 
     STDMETHODIMP_(ULONG) AddRef()
@@ -170,14 +172,15 @@ public:
     HRESULT STDMETHODCALLTYPE CheckFormat(const AM_MEDIA_TYPE *pmt);
     HRESULT STDMETHODCALLTYPE CreatePin(const AM_MEDIA_TYPE *pmt);
     HRESULT STDMETHODCALLTYPE CreatePinHandle(PKSPIN_MEDIUM Medium, PKSPIN_INTERFACE Interface, const AM_MEDIA_TYPE *pmt);
-    CInputPin(IBaseFilter * ParentFilter, LPCWSTR PinName, HANDLE hFilter, ULONG PinId, KSPIN_COMMUNICATION Communication);
+    HRESULT STDMETHODCALLTYPE GetSupportedSets(LPGUID * pOutGuid, PULONG NumGuids);
+    HRESULT STDMETHODCALLTYPE LoadProxyPlugins(LPGUID pGuids, ULONG NumGuids);
+    CInputPin(IBaseFilter * ParentFilter, LPCWSTR PinName, ULONG PinId, KSPIN_COMMUNICATION Communication);
     virtual ~CInputPin(){};
 
 protected:
     LONG m_Ref;
     IBaseFilter * m_ParentFilter;
     LPCWSTR m_PinName;
-    HANDLE m_hFilter;
     HANDLE m_hPin;
     ULONG m_PinId;
     IMemAllocator * m_MemAllocator;
@@ -196,17 +199,16 @@ protected:
     LPWSTR m_FilterName;
     FRAMING_PROP m_FramingProp[4];
     PKSALLOCATOR_FRAMING_EX m_FramingEx[4];
+    ProxyPluginVector m_Plugins;
 };
 
 CInputPin::CInputPin(
-    IBaseFilter * ParentFilter, 
+    IBaseFilter * ParentFilter,
     LPCWSTR PinName,
-    HANDLE hFilter,
     ULONG PinId,
     KSPIN_COMMUNICATION Communication) : m_Ref(0),
                                          m_ParentFilter(ParentFilter),
                                          m_PinName(PinName),
-                                         m_hFilter(hFilter),
                                          m_hPin(INVALID_HANDLE_VALUE),
                                          m_PinId(PinId),
                                          m_MemAllocator(0),
@@ -218,13 +220,27 @@ CInputPin::CInputPin(
                                          m_KsAllocatorEx(0),
                                          m_PipeAllocatorFlag(0),
                                          m_bPinBusCacheInitialized(0),
-                                         m_FilterName(0)
+                                         m_FilterName(0),
+                                         m_Plugins()
 {
     ZeroMemory(m_FramingProp, sizeof(m_FramingProp));
     ZeroMemory(m_FramingEx, sizeof(m_FramingEx));
 
+    HRESULT hr;
+    IKsObject * KsObjectParent;
+    HANDLE hFilter;
+
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    assert(hr == S_OK);
+
+    hFilter = KsObjectParent->KsGetObjectHandle();
+    assert(hFilter);
+
+    KsObjectParent->Release();
+
+
     ZeroMemory(&m_MediaFormat, sizeof(AM_MEDIA_TYPE));
-    HRESULT hr = KsGetMediaType(0, &m_MediaFormat, m_hFilter, m_PinId);
+    hr = KsGetMediaType(0, &m_MediaFormat, hFilter, m_PinId);
     assert(hr == S_OK);
 }
 
@@ -346,7 +362,10 @@ CInputPin::Notify(
     IBaseFilter *pSelf,
     Quality q)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::Notify NotImplemented\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -355,7 +374,10 @@ STDMETHODCALLTYPE
 CInputPin::SetSink(
     IQualityControl *piqc)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::SetSink NotImplemented\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -368,7 +390,10 @@ STDMETHODCALLTYPE
 CInputPin::KsAddAggregate(
     IN REFGUID AggregateClass)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::KsAddAggregate NotImplemented\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -377,7 +402,10 @@ STDMETHODCALLTYPE
 CInputPin::KsRemoveAggregate(
     REFGUID AggregateClass)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::KsRemoveAggregate NotImplemented\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -401,7 +429,10 @@ CInputPin::Backout(
     IPin *ppinOut, 
     IGraphBuilder *pGraph)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::Backout\n");
+#endif
+
     return S_OK;
 }
 
@@ -414,7 +445,10 @@ STDMETHODCALLTYPE
 CInputPin::KsPinFactory(
     ULONG* PinFactory)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::KsPinFactory\n");
+#endif
+
     *PinFactory = m_PinId;
     return S_OK;
 }
@@ -590,7 +624,10 @@ HRESULT
 STDMETHODCALLTYPE
 CInputPin::GetAllocator(IMemAllocator **ppAllocator)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::GetAllocator\n");
+#endif
+
     return VFW_E_NO_ALLOCATOR;
 }
 
@@ -598,13 +635,16 @@ HRESULT
 STDMETHODCALLTYPE
 CInputPin::NotifyAllocator(IMemAllocator *pAllocator, BOOL bReadOnly)
 {
-    WCHAR Buffer[100];
     HRESULT hr;
     ALLOCATOR_PROPERTIES Properties;
 
     hr = pAllocator->GetProperties(&Properties);
+
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[100];
     swprintf(Buffer, L"CInputPin::NotifyAllocator hr %lx bReadOnly, %u cbAlign %u cbBuffer %u cbPrefix %u cBuffers %u\n", hr, bReadOnly, Properties.cbAlign, Properties.cbBuffer, Properties.cbPrefix, Properties.cBuffers);
     OutputDebugStringW(Buffer);
+#endif
 
     if (pAllocator)
     {
@@ -645,9 +685,11 @@ CInputPin::GetAllocatorRequirements(ALLOCATOR_PROPERTIES *pProps)
     else
         hr = E_NOTIMPL;
 
+#ifdef KSPROXY_TRACE
     WCHAR Buffer[100];
     swprintf(Buffer, L"CInputPin::GetAllocatorRequirements hr %lx m_hPin %p cBuffers %u cbBuffer %u cbAlign %u cbPrefix %u\n", hr, m_hPin, pProps->cBuffers, pProps->cbBuffer, pProps->cbAlign, pProps->cbPrefix);
     OutputDebugStringW(Buffer);
+#endif
 
     return hr;
 }
@@ -656,8 +698,11 @@ HRESULT
 STDMETHODCALLTYPE
 CInputPin::Receive(IMediaSample *pSample)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::Receive NotImplemented\n");
     DebugBreak();
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -665,8 +710,11 @@ HRESULT
 STDMETHODCALLTYPE
 CInputPin::ReceiveMultiple(IMediaSample **pSamples, long nSamples, long *nSamplesProcessed)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::ReceiveMultiple NotImplemented\n");
     DebugBreak();
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -674,8 +722,11 @@ HRESULT
 STDMETHODCALLTYPE
 CInputPin::ReceiveCanBlock( void)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::ReceiveCanBlock NotImplemented\n");
     DebugBreak();
+#endif
+
     return S_FALSE;
 }
 
@@ -688,7 +739,22 @@ STDMETHODCALLTYPE
 CInputPin::KsQueryMediums(
     PKSMULTIPLE_ITEM* MediumList)
 {
-    return KsGetMultiplePinFactoryItems(m_hFilter, m_PinId, KSPROPERTY_PIN_MEDIUMS, (PVOID*)MediumList);
+    HRESULT hr;
+    IKsObject * KsObjectParent;
+    HANDLE hFilter;
+
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    if (FAILED(hr))
+        return hr;
+
+    hFilter = KsObjectParent->KsGetObjectHandle();
+
+    KsObjectParent->Release();
+
+    if (!hFilter)
+        return E_HANDLE;
+
+    return KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_MEDIUMS, (PVOID*)MediumList);
 }
 
 HRESULT
@@ -696,7 +762,22 @@ STDMETHODCALLTYPE
 CInputPin::KsQueryInterfaces(
     PKSMULTIPLE_ITEM* InterfaceList)
 {
-    return KsGetMultiplePinFactoryItems(m_hFilter, m_PinId, KSPROPERTY_PIN_INTERFACES, (PVOID*)InterfaceList);
+    HRESULT hr;
+    IKsObject * KsObjectParent;
+    HANDLE hFilter;
+
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    if (FAILED(hr))
+        return hr;
+
+    hFilter = KsObjectParent->KsGetObjectHandle();
+
+    KsObjectParent->Release();
+
+    if (!hFilter)
+        return E_HANDLE;
+
+    return KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_INTERFACES, (PVOID*)InterfaceList);
 }
 
 HRESULT
@@ -838,7 +919,10 @@ CInputPin::KsQualityNotify(
     ULONG Proportion,
     REFERENCE_TIME TimeDelta)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::KsQualityNotify NotImplemented\n");
+#endif
+
     DebugBreak();
     return E_NOTIMPL;
 }
@@ -853,7 +937,9 @@ CInputPin::KsNotifyError(
     IMediaSample* Sample,
     HRESULT hr)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::KsNotifyError NotImplemented\n");
+#endif
 }
 
 
@@ -1026,8 +1112,10 @@ HRESULT
 STDMETHODCALLTYPE
 CInputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::Connect NotImplemented\n");
     DebugBreak();
+#endif
     return NOERROR;
 }
 
@@ -1078,7 +1166,10 @@ CInputPin::Disconnect( void)
     m_Pin->Release();
     m_Pin = NULL;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::Disconnect\n");
+#endif
+
     return S_OK;
 }
 HRESULT
@@ -1106,8 +1197,11 @@ CInputPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
     if (!m_Pin)
         return VFW_E_NOT_CONNECTED;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::ConnectionMediaType NotImplemented\n");
     DebugBreak();
+#endif
+
     return E_NOTIMPL;
 }
 HRESULT
@@ -1159,9 +1253,23 @@ CInputPin::EnumMediaTypes(IEnumMediaTypes **ppEnum)
     HRESULT hr;
     ULONG MediaTypeCount = 0, Index;
     AM_MEDIA_TYPE * MediaTypes;
+    IKsObject * KsObjectParent;
+    HANDLE hFilter;
+
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    if (FAILED(hr))
+        return hr;
+
+    hFilter = KsObjectParent->KsGetObjectHandle();
+
+    KsObjectParent->Release();
+
+    if (!hFilter)
+        return E_HANDLE;
+
 
     // query media type count
-    hr = KsGetMediaTypeCount(m_hFilter, m_PinId, &MediaTypeCount);
+    hr = KsGetMediaTypeCount(hFilter, m_PinId, &MediaTypeCount);
     if (FAILED(hr) || !MediaTypeCount)
         return hr;
 
@@ -1179,7 +1287,7 @@ CInputPin::EnumMediaTypes(IEnumMediaTypes **ppEnum)
     for(Index = 0; Index < MediaTypeCount; Index++)
     {
         // get media type
-        hr = KsGetMediaType(Index, &MediaTypes[Index], m_hFilter, m_PinId);
+        hr = KsGetMediaType(Index, &MediaTypes[Index], hFilter, m_PinId);
         if (FAILED(hr))
         {
             // failed
@@ -1195,35 +1303,45 @@ HRESULT
 STDMETHODCALLTYPE
 CInputPin::QueryInternalConnections(IPin **apPin, ULONG *nPin)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::QueryInternalConnections NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 HRESULT
 STDMETHODCALLTYPE
 CInputPin::EndOfStream( void)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::EndOfStream NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 HRESULT
 STDMETHODCALLTYPE
 CInputPin::BeginFlush( void)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::BeginFlush NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 HRESULT
 STDMETHODCALLTYPE
 CInputPin::EndFlush( void)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::EndFlush NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 HRESULT
 STDMETHODCALLTYPE
 CInputPin::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CInputPin::NewSegment NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -1237,11 +1355,25 @@ CInputPin::CheckFormat(
     PKSMULTIPLE_ITEM MultipleItem;
     PKSDATAFORMAT DataFormat;
     HRESULT hr;
+    IKsObject * KsObjectParent;
+    HANDLE hFilter;
 
     if (!pmt)
         return E_POINTER;
 
-    hr = KsGetMultiplePinFactoryItems(m_hFilter, m_PinId, KSPROPERTY_PIN_DATARANGES, (PVOID*)&MultipleItem);
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    if (FAILED(hr))
+        return hr;
+
+    hFilter = KsObjectParent->KsGetObjectHandle();
+
+    KsObjectParent->Release();
+
+    if (!hFilter)
+        return E_HANDLE;
+
+
+    hr = KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_DATARANGES, (PVOID*)&MultipleItem);
     if (FAILED(hr))
         return S_FALSE;
 
@@ -1254,7 +1386,9 @@ CInputPin::CheckFormat(
         {
             // format is supported
             CoTaskMemFree(MultipleItem);
+#ifdef KSPROXY_TRACE
             OutputDebugStringW(L"CInputPin::CheckFormat format OK\n");
+#endif
             return S_OK;
         }
         DataFormat = (PKSDATAFORMAT)((ULONG_PTR)DataFormat + DataFormat->FormatSize);
@@ -1321,7 +1455,9 @@ CInputPin::CreatePin(
             if (FAILED(hr))
             {
                 // failed to load interface handler plugin
+#ifdef KSPROXY_TRACE
                 OutputDebugStringW(L"CInputPin::CreatePin failed to load InterfaceHandlerPlugin\n");
+#endif
                 CoTaskMemFree(MediumList);
                 CoTaskMemFree(InterfaceList);
 
@@ -1333,7 +1469,9 @@ CInputPin::CreatePin(
             if (FAILED(hr))
             {
                 // failed to load interface handler plugin
+#ifdef KSPROXY_TRACE
                 OutputDebugStringW(L"CInputPin::CreatePin failed to initialize InterfaceHandlerPlugin\n");
+#endif
                 InterfaceHandler->Release();
                 CoTaskMemFree(MediumList);
                 CoTaskMemFree(InterfaceList);
@@ -1354,10 +1492,12 @@ CInputPin::CreatePin(
     }
     else
     {
+#ifdef KSPROXY_TRACE
         WCHAR Buffer[100];
         swprintf(Buffer, L"CInputPin::CreatePin unexpected communication %u %s\n", m_Communication, m_PinName);
         OutputDebugStringW(Buffer);
         DebugBreak();
+#endif
         hr = E_FAIL;
     }
 
@@ -1379,6 +1519,23 @@ CInputPin::CreatePinHandle(
     PKSDATAFORMAT DataFormat;
     ULONG Length;
     HRESULT hr;
+    IKsObject * KsObjectParent;
+    HANDLE hFilter;
+
+    if (!pmt)
+        return E_POINTER;
+
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    if (FAILED(hr))
+        return hr;
+
+    hFilter = KsObjectParent->KsGetObjectHandle();
+
+    KsObjectParent->Release();
+
+    if (!hFilter)
+        return E_HANDLE;
+
 
     if (m_hPin != INVALID_HANDLE_VALUE)
     {
@@ -1427,7 +1584,7 @@ CInputPin::CreatePinHandle(
     }
 
     // create pin
-    hr = KsCreatePin(m_hFilter, PinConnect, GENERIC_WRITE, &m_hPin);
+    hr = KsCreatePin(hFilter, PinConnect, GENERIC_WRITE, &m_hPin);
 
     if (SUCCEEDED(hr))
     {
@@ -1436,16 +1593,19 @@ CInputPin::CreatePinHandle(
         CopyMemory(&m_Interface, Interface, sizeof(KSPIN_INTERFACE));
         CopyMemory(&m_MediaFormat, pmt, sizeof(AM_MEDIA_TYPE));
 
+#ifdef KSPROXY_TRACE
         LPOLESTR pMajor, pSub, pFormat;
         StringFromIID(m_MediaFormat.majortype, &pMajor);
         StringFromIID(m_MediaFormat.subtype , &pSub);
         StringFromIID(m_MediaFormat.formattype, &pFormat);
+
         WCHAR Buffer[200];
         swprintf(Buffer, L"CInputPin::CreatePinHandle Major %s SubType %s Format %s pbFormat %p cbFormat %u\n", pMajor, pSub, pFormat, pmt->pbFormat, pmt->cbFormat);
         CoTaskMemFree(pMajor);
         CoTaskMemFree(pSub);
         CoTaskMemFree(pFormat);
         OutputDebugStringW(Buffer);
+#endif
 
         if (pmt->cbFormat)
         {
@@ -1460,6 +1620,33 @@ CInputPin::CreatePinHandle(
             CopyMemory(m_MediaFormat.pbFormat, pmt->pbFormat, pmt->cbFormat);
         }
 
+        LPGUID pGuid;
+        ULONG NumGuids = 0;
+
+        // get all supported sets
+        hr = GetSupportedSets(&pGuid, &NumGuids);
+        if (FAILED(hr))
+        {
+#ifdef KSPROXY_TRACE
+            OutputDebugStringW(L"CInputPin::CreatePinHandle GetSupportedSets failed\n");
+#endif
+            return hr;
+        }
+
+        // load all proxy plugins
+        hr = LoadProxyPlugins(pGuid, NumGuids);
+        if (FAILED(hr))
+        {
+#ifdef KSPROXY_TRACE
+            OutputDebugStringW(L"CInputPin::CreatePinHandle LoadProxyPlugins failed\n");
+#endif
+            return hr;
+        }
+
+        // free sets
+        CoTaskMemFree(pGuid);
+
+
         //TODO
         // connect pin pipes
 
@@ -1471,6 +1658,137 @@ CInputPin::CreatePinHandle(
     return hr;
 }
 
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::GetSupportedSets(
+    LPGUID * pOutGuid,
+    PULONG NumGuids)
+{
+    KSPROPERTY Property;
+    LPGUID pGuid;
+    ULONG NumProperty = 0;
+    ULONG NumMethods = 0;
+    ULONG NumEvents = 0;
+    ULONG Length;
+    ULONG BytesReturned;
+    HRESULT hr;
+
+    Property.Set = GUID_NULL;
+    Property.Id = 0;
+    Property.Flags = KSPROPERTY_TYPE_SETSUPPORT;
+
+    KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumProperty);
+    KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumMethods);
+    KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumEvents);
+
+    Length = NumProperty + NumMethods + NumEvents;
+
+    // allocate guid buffer
+    pGuid = (LPGUID)CoTaskMemAlloc(Length);
+    if (!pGuid)
+    {
+        // failed
+        return E_OUTOFMEMORY;
+    }
+
+    NumProperty /= sizeof(GUID);
+    NumMethods /= sizeof(GUID);
+    NumEvents /= sizeof(GUID);
+
+    // get all properties
+    hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pGuid, Length, &BytesReturned);
+    if (FAILED(hr))
+    {
+        CoTaskMemFree(pGuid);
+        return E_FAIL;
+    }
+    Length -= BytesReturned;
+
+    // get all methods
+    if (Length)
+    {
+        hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty], Length, &BytesReturned);
+        if (FAILED(hr))
+        {
+            CoTaskMemFree(pGuid);
+            return E_FAIL;
+        }
+        Length -= BytesReturned;
+    }
+
+    // get all events
+    if (Length)
+    {
+        hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty+NumMethods], Length, &BytesReturned);
+        if (FAILED(hr))
+        {
+            CoTaskMemFree(pGuid);
+            return E_FAIL;
+        }
+        Length -= BytesReturned;
+    }
+
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[200];
+    swprintf(Buffer, L"NumProperty %lu NumMethods %lu NumEvents %lu\n", NumProperty, NumMethods, NumEvents);
+    OutputDebugStringW(Buffer);
+#endif
+
+    *pOutGuid = pGuid;
+    *NumGuids = NumProperty+NumEvents+NumMethods;
+    return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::LoadProxyPlugins(
+    LPGUID pGuids,
+    ULONG NumGuids)
+{
+    ULONG Index;
+    LPOLESTR pStr;
+    HKEY hKey, hSubKey;
+    HRESULT hr;
+    IUnknown * pUnknown;
+
+    if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\MediaInterfaces", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
+    {
+        OutputDebugStringW(L"CInputPin::LoadProxyPlugins failed to open MediaInterfaces key\n");
+        return E_FAIL;
+    }
+
+    // enumerate all sets
+    for(Index = 0; Index < NumGuids; Index++)
+    {
+        // convert to string
+        hr = StringFromCLSID(pGuids[Index], &pStr);
+        if (FAILED(hr))
+            return E_FAIL;
+
+        // now try open class key
+        if (RegOpenKeyExW(hKey, pStr, 0, KEY_READ, &hSubKey) != ERROR_SUCCESS)
+        {
+            // no plugin for that set exists
+            CoTaskMemFree(pStr);
+            continue;
+        }
+
+        // try load plugin
+        hr = CoCreateInstance(pGuids[Index], (IBaseFilter*)this, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&pUnknown);
+        if (SUCCEEDED(hr))
+        {
+            // store plugin
+            m_Plugins.push_back(pUnknown);
+        }
+        // close key
+        RegCloseKey(hSubKey);
+    }
+
+    // close media interfaces key
+    RegCloseKey(hKey);
+    return S_OK;
+}
+
 HRESULT
 WINAPI
 CInputPin_Constructor(
@@ -1482,7 +1800,7 @@ CInputPin_Constructor(
     REFIID riid,
     LPVOID * ppv)
 {
-    CInputPin * handler = new CInputPin(ParentFilter, PinName, hFilter, PinId, Communication);
+    CInputPin * handler = new CInputPin(ParentFilter, PinName, PinId, Communication);
 
     if (!handler)
         return E_OUTOFMEMORY;
index 3d1af0d..7eb0fd2 100644 (file)
@@ -285,10 +285,11 @@ CKsInterfaceHandler::KsProcessMediaSamples(
              if (SampleList[Index]->IsSyncPoint() == S_OK)
                  Properties.dwSampleFlags |= AM_SAMPLE_SPLICEPOINT;
          }
-
+#ifdef KSPROXY_TRACE
          WCHAR Buffer[200];
          swprintf(Buffer, L"CKsInterfaceHandler::KsProcessMediaSamples PinName %s BufferLength %lu Property Buffer %p ExtendedSize %u lActual %u dwSampleFlags %lx\n", m_PinName, Properties.cbBuffer, Properties.pbBuffer, ExtendedSize, Properties.lActual, Properties.dwSampleFlags);
-         //OutputDebugStringW(Buffer);
+         OutputDebugStringW(Buffer);
+#endif
 
          CurStreamHeader->Size = sizeof(KSSTREAM_HEADER) + ExtendedSize;
          CurStreamHeader->PresentationTime.Denominator = 1;
@@ -479,7 +480,9 @@ CKsInterfaceHandler_Constructor(
     REFIID riid,
     LPVOID * ppv)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsInterfaceHandler_Constructor\n");
+#endif
 
     CKsInterfaceHandler * handler = new CKsInterfaceHandler();
 
index 8e317ef..e041193 100644 (file)
@@ -116,8 +116,6 @@ CMediaSample::QueryInterface(
     }
     if (IsEqualGUID(refiid, IID_IMediaSample2))
     {
-
-        OutputDebugStringW(L"CMediaSample::QueryInterface requested IMediaSample2 interface\n");
 #if 0
         *Output = (IMediaSample2*)(this);
         reinterpret_cast<IMediaSample2*>(*Output)->AddRef();
@@ -267,8 +265,6 @@ HRESULT
 STDMETHODCALLTYPE
 CMediaSample::GetMediaType(AM_MEDIA_TYPE **ppMediaType)
 {
-    OutputDebugStringW(L"CMediaSample::GetMediaType\n");
-
     if (!m_MediaType)
     {
         *ppMediaType = NULL;
@@ -352,7 +348,9 @@ CMediaSample_Constructor(
     REFIID riid,
     LPVOID * ppv)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CMediaSample_Constructor\n");
+#endif
 
     CMediaSample * handler = new CMediaSample(Allocator, pBuffer, BufferSize);
 
index d2686bb..d308225 100644 (file)
@@ -124,7 +124,9 @@ CKsNode_Constructor(
     HANDLE handle;
     KSNODE_CREATE NodeCreate;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsNode_Constructor\n");
+#endif
 
     //setup request
     NodeCreate.CreateFlags = 0;
index e5f172b..c2227ca 100644 (file)
@@ -26,6 +26,8 @@ class COutputPin : public IPin,
 
 {
 public:
+    typedef std::vector<IUnknown *>ProxyPluginVector;
+
     STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
 
     STDMETHODIMP_(ULONG) AddRef()
@@ -162,6 +164,8 @@ public:
     HRESULT STDMETHODCALLTYPE CreatePinHandle(PKSPIN_MEDIUM Medium, PKSPIN_INTERFACE Interface, const AM_MEDIA_TYPE *pmt);
     HRESULT WINAPI IoProcessRoutine();
     HRESULT WINAPI InitializeIOThread();
+    HRESULT STDMETHODCALLTYPE GetSupportedSets(LPGUID * pOutGuid, PULONG NumGuids);
+    HRESULT STDMETHODCALLTYPE LoadProxyPlugins(LPGUID pGuids, ULONG NumGuids);
 
     friend DWORD WINAPI COutputPin_IoThreadStartup(LPVOID lpParameter);
     friend HRESULT STDMETHODCALLTYPE COutputPin_SetState(IPin * Pin, KSSTATE State);
@@ -172,7 +176,6 @@ protected:
     LPCWSTR m_PinName;
     HANDLE m_hPin;
     ULONG m_PinId;
-    IKsObject * m_KsObjectParent;
     IPin * m_Pin;
     IKsAllocatorEx * m_KsAllocatorEx;
     ULONG m_PipeAllocatorFlag;
@@ -189,8 +192,6 @@ protected:
     KSPIN_INTERFACE m_Interface;
     KSPIN_MEDIUM m_Medium;
     AM_MEDIA_TYPE m_MediaFormat;
-
-    IMediaSeeking * m_FilterMediaSeeking;
     ALLOCATOR_PROPERTIES m_Properties;
     IKsInterfaceHandler * m_InterfaceHandler;
 
@@ -201,12 +202,13 @@ protected:
     BOOL m_IoThreadStarted;
 
     KSSTATE m_State;
+    CRITICAL_SECTION m_Lock;
+
+    ProxyPluginVector m_Plugins;
 };
 
 COutputPin::~COutputPin()
 {
-    if (m_KsObjectParent)
-        m_KsObjectParent->Release();
 }
 
 COutputPin::COutputPin(
@@ -218,7 +220,6 @@ COutputPin::COutputPin(
                                          m_PinName(PinName),
                                          m_hPin(INVALID_HANDLE_VALUE),
                                          m_PinId(PinId),
-                                         m_KsObjectParent(0),
                                          m_Pin(0),
                                          m_KsAllocatorEx(0),
                                          m_PipeAllocatorFlag(0),
@@ -228,28 +229,30 @@ COutputPin::COutputPin(
                                          m_MemInputPin(0),
                                          m_IoCount(0),
                                          m_Communication(Communication),
-                                         m_FilterMediaSeeking(0),
                                          m_InterfaceHandler(0),
                                          m_hStartEvent(0),
                                          m_hBufferAvailable(0),
                                          m_hStopEvent(0),
                                          m_StopInProgress(0),
                                          m_IoThreadStarted(0),
-                                         m_State(KSSTATE_STOP)
+                                         m_State(KSSTATE_STOP),
+                                         m_Plugins()
 {
     HRESULT hr;
+    IKsObject * KsObjectParent;
 
-    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&m_KsObjectParent);
-    assert(hr == S_OK);
-
-    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&m_FilterMediaSeeking);
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
     assert(hr == S_OK);
 
     ZeroMemory(m_FramingProp, sizeof(m_FramingProp));
     ZeroMemory(m_FramingEx, sizeof(m_FramingEx));
 
-    hr = KsGetMediaType(0, &m_MediaFormat, m_KsObjectParent->KsGetObjectHandle(), m_PinId);
+    hr = KsGetMediaType(0, &m_MediaFormat, KsObjectParent->KsGetObjectHandle(), m_PinId);
     assert(hr == S_OK);
+
+    InitializeCriticalSection(&m_Lock);
+
+    KsObjectParent->Release();
 };
 
 HRESULT
@@ -262,7 +265,9 @@ COutputPin::QueryInterface(
     if (IsEqualGUID(refiid, IID_IUnknown) ||
         IsEqualGUID(refiid, IID_IPin))
     {
+#ifdef KSPROXY_TRACE
         OutputDebugStringW(L"COutputPin::QueryInterface IID_IPin\n");
+#endif
         *Output = PVOID(this);
         reinterpret_cast<IUnknown*>(*Output)->AddRef();
         return NOERROR;
@@ -275,8 +280,9 @@ COutputPin::QueryInterface(
             if (FAILED(hr))
                 return hr;
         }
-
+#ifdef KSPROXY_TRACE
         OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsObject\n");
+#endif
         *Output = (IKsObject*)(this);
         reinterpret_cast<IKsObject*>(*Output)->AddRef();
         return NOERROR;
@@ -313,14 +319,18 @@ COutputPin::QueryInterface(
             if (FAILED(hr))
                 return hr;
         }
+#ifdef KSPROXY_TRACE
         OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsPropertySet\n");
+#endif
         *Output = (IKsPropertySet*)(this);
         reinterpret_cast<IKsPropertySet*>(*Output)->AddRef();
         return NOERROR;
     }
     else if (IsEqualGUID(refiid, IID_IKsControl))
     {
+#ifdef KSPROXY_TRACE
         OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsControl\n");
+#endif
         *Output = (IKsControl*)(this);
         reinterpret_cast<IKsControl*>(*Output)->AddRef();
         return NOERROR;
@@ -335,14 +345,18 @@ COutputPin::QueryInterface(
 #endif
     else if (IsEqualGUID(refiid, IID_IKsPinFactory))
     {
+#ifdef KSPROXY_TRACE
         OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsPinFactory\n");
+#endif
         *Output = (IKsPinFactory*)(this);
         reinterpret_cast<IKsPinFactory*>(*Output)->AddRef();
         return NOERROR;
     }
     else if (IsEqualGUID(refiid, IID_ISpecifyPropertyPages))
     {
+#ifdef KSPROXY_TRACE
         OutputDebugStringW(L"COutputPin::QueryInterface IID_ISpecifyPropertyPages\n");
+#endif
         *Output = (ISpecifyPropertyPages*)(this);
         reinterpret_cast<ISpecifyPropertyPages*>(*Output)->AddRef();
         return NOERROR;
@@ -372,12 +386,14 @@ COutputPin::QueryInterface(
         return NOERROR;
     }
 
+#ifdef KSPROXY_TRACE
     WCHAR Buffer[MAX_PATH];
     LPOLESTR lpstr;
     StringFromCLSID(refiid, &lpstr);
     swprintf(Buffer, L"COutputPin::QueryInterface: NoInterface for %s PinId %u PinName %s\n", lpstr, m_PinId, m_PinName);
     OutputDebugStringW(Buffer);
     CoTaskMemFree(lpstr);
+#endif
 
     return E_NOINTERFACE;
 }
@@ -390,7 +406,9 @@ STDMETHODCALLTYPE
 COutputPin::SuggestAllocatorProperties(
     const ALLOCATOR_PROPERTIES *pprop)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::SuggestAllocatorProperties\n");
+#endif
 
     if (m_Pin)
     {
@@ -407,7 +425,9 @@ STDMETHODCALLTYPE
 COutputPin::GetAllocatorProperties(
     ALLOCATOR_PROPERTIES *pprop)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::GetAllocatorProperties\n");
+#endif
 
     if (!m_Pin)
     {
@@ -433,7 +453,9 @@ STDMETHODCALLTYPE
 COutputPin::SetFormat(
     AM_MEDIA_TYPE *pmt)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::SetFormat NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -441,7 +463,9 @@ HRESULT
 STDMETHODCALLTYPE
 COutputPin::GetFormat(AM_MEDIA_TYPE **ppmt)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::GetFormat NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -451,7 +475,9 @@ COutputPin::GetNumberOfCapabilities(
     int *piCount,
     int *piSize)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::GetNumberOfCapabilities NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -462,7 +488,9 @@ COutputPin::GetStreamCaps(
     AM_MEDIA_TYPE **ppmt,
     BYTE *pSCC)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::GetStreamCaps NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -473,7 +501,9 @@ HRESULT
 STDMETHODCALLTYPE
 COutputPin::NotifyRelease()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::NotifyRelease\n");
+#endif
 
     // notify thread of new available sample
     SetEvent(m_hBufferAvailable);
@@ -489,7 +519,17 @@ STDMETHODCALLTYPE
 COutputPin::GetCapabilities(
     DWORD *pCapabilities)
 {
-    return m_FilterMediaSeeking->GetCapabilities(pCapabilities);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->GetCapabilities(pCapabilities);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -497,7 +537,17 @@ STDMETHODCALLTYPE
 COutputPin::CheckCapabilities(
     DWORD *pCapabilities)
 {
-    return m_FilterMediaSeeking->CheckCapabilities(pCapabilities);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->CheckCapabilities(pCapabilities);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -505,7 +555,17 @@ STDMETHODCALLTYPE
 COutputPin::IsFormatSupported(
     const GUID *pFormat)
 {
-    return m_FilterMediaSeeking->IsFormatSupported(pFormat);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->IsFormatSupported(pFormat);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -513,7 +573,17 @@ STDMETHODCALLTYPE
 COutputPin::QueryPreferredFormat(
     GUID *pFormat)
 {
-    return m_FilterMediaSeeking->QueryPreferredFormat(pFormat);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->QueryPreferredFormat(pFormat);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -521,7 +591,17 @@ STDMETHODCALLTYPE
 COutputPin::GetTimeFormat(
     GUID *pFormat)
 {
-    return m_FilterMediaSeeking->GetTimeFormat(pFormat);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->GetTimeFormat(pFormat);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -529,7 +609,17 @@ STDMETHODCALLTYPE
 COutputPin::IsUsingTimeFormat(
     const GUID *pFormat)
 {
-    return m_FilterMediaSeeking->IsUsingTimeFormat(pFormat);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->IsUsingTimeFormat(pFormat);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -537,7 +627,17 @@ STDMETHODCALLTYPE
 COutputPin::SetTimeFormat(
     const GUID *pFormat)
 {
-    return m_FilterMediaSeeking->SetTimeFormat(pFormat);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->SetTimeFormat(pFormat);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -545,7 +645,17 @@ STDMETHODCALLTYPE
 COutputPin::GetDuration(
     LONGLONG *pDuration)
 {
-    return m_FilterMediaSeeking->GetDuration(pDuration);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->GetDuration(pDuration);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -553,7 +663,17 @@ STDMETHODCALLTYPE
 COutputPin::GetStopPosition(
     LONGLONG *pStop)
 {
-    return m_FilterMediaSeeking->GetStopPosition(pStop);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->GetStopPosition(pStop);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 
@@ -562,7 +682,17 @@ STDMETHODCALLTYPE
 COutputPin::GetCurrentPosition(
     LONGLONG *pCurrent)
 {
-    return m_FilterMediaSeeking->GetCurrentPosition(pCurrent);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->GetCurrentPosition(pCurrent);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -573,7 +703,17 @@ COutputPin::ConvertTimeFormat(
     LONGLONG Source,
     const GUID *pSourceFormat)
 {
-    return m_FilterMediaSeeking->ConvertTimeFormat(pTarget, pTargetFormat, Source, pSourceFormat);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->ConvertTimeFormat(pTarget, pTargetFormat, Source, pSourceFormat);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -584,7 +724,17 @@ COutputPin::SetPositions(
     LONGLONG *pStop,
     DWORD dwStopFlags)
 {
-    return m_FilterMediaSeeking->SetPositions(pCurrent, dwCurrentFlags, pStop, dwStopFlags);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->SetPositions(pCurrent, dwCurrentFlags, pStop, dwStopFlags);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -593,7 +743,17 @@ COutputPin::GetPositions(
     LONGLONG *pCurrent,
     LONGLONG *pStop)
 {
-    return m_FilterMediaSeeking->GetPositions(pCurrent, pStop);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->GetPositions(pCurrent, pStop);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -602,7 +762,17 @@ COutputPin::GetAvailable(
     LONGLONG *pEarliest,
     LONGLONG *pLatest)
 {
-    return m_FilterMediaSeeking->GetAvailable(pEarliest, pLatest);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->GetAvailable(pEarliest, pLatest);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -610,7 +780,17 @@ STDMETHODCALLTYPE
 COutputPin::SetRate(
     double dRate)
 {
-    return m_FilterMediaSeeking->SetRate(dRate);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->SetRate(dRate);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -618,7 +798,17 @@ STDMETHODCALLTYPE
 COutputPin::GetRate(
     double *pdRate)
 {
-    return m_FilterMediaSeeking->GetRate(pdRate);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->GetRate(pdRate);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 HRESULT
@@ -626,7 +816,17 @@ STDMETHODCALLTYPE
 COutputPin::GetPreroll(
     LONGLONG *pllPreroll)
 {
-    return m_FilterMediaSeeking->GetPreroll(pllPreroll);
+    IMediaSeeking * FilterMediaSeeking;
+    HRESULT hr;
+
+    hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+    if (FAILED(hr))
+        return hr;
+
+    hr = FilterMediaSeeking->GetPreroll(pllPreroll);
+
+    FilterMediaSeeking->Release();
+    return hr;
 }
 
 //-------------------------------------------------------------------
@@ -638,7 +838,9 @@ COutputPin::Notify(
     IBaseFilter *pSelf,
     Quality q)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::Notify NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -647,7 +849,9 @@ STDMETHODCALLTYPE
 COutputPin::SetSink(
     IQualityControl *piqc)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::SetSink NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -660,7 +864,9 @@ STDMETHODCALLTYPE
 COutputPin::KsAddAggregate(
     IN REFGUID AggregateClass)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::KsAddAggregate NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -669,7 +875,9 @@ STDMETHODCALLTYPE
 COutputPin::KsRemoveAggregate(
     REFGUID AggregateClass)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::KsRemoveAggregate NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -683,8 +891,24 @@ STDMETHODCALLTYPE
 COutputPin::KsQueryMediums(
     PKSMULTIPLE_ITEM* MediumList)
 {
-    HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
-    return KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_MEDIUMS, (PVOID*)MediumList);
+    HRESULT hr;
+    HANDLE hFilter;
+    IKsObject * KsObjectParent;
+
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    if (FAILED(hr))
+        return E_NOINTERFACE;
+
+    hFilter = KsObjectParent->KsGetObjectHandle();
+
+    if (hFilter)
+        hr = KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_MEDIUMS, (PVOID*)MediumList);
+    else
+        hr = E_HANDLE;
+
+    KsObjectParent->Release();
+
+    return hr;
 }
 
 HRESULT
@@ -692,9 +916,24 @@ STDMETHODCALLTYPE
 COutputPin::KsQueryInterfaces(
     PKSMULTIPLE_ITEM* InterfaceList)
 {
-    HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
+    HRESULT hr;
+    HANDLE hFilter;
+    IKsObject * KsObjectParent;
 
-    return KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_INTERFACES, (PVOID*)InterfaceList);
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    if (FAILED(hr))
+        return hr;
+
+    hFilter = KsObjectParent->KsGetObjectHandle();
+
+    if (hFilter)
+        hr = KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_INTERFACES, (PVOID*)InterfaceList);
+    else
+        hr = E_HANDLE;
+
+    KsObjectParent->Release();
+
+    return hr;
 }
 
 HRESULT
@@ -703,7 +942,9 @@ COutputPin::KsCreateSinkPinHandle(
     KSPIN_INTERFACE& Interface,
     KSPIN_MEDIUM& Medium)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::KsCreateSinkPinHandle NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -746,7 +987,9 @@ COutputPin::KsPropagateAcquire()
     ULONG BytesReturned;
     HRESULT hr;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::KsPropagateAcquire\n");
+#endif
 
     assert(m_hPin != INVALID_HANDLE_VALUE);
 
@@ -757,6 +1000,10 @@ COutputPin::KsPropagateAcquire()
     State = KSSTATE_ACQUIRE;
 
     hr = KsProperty(&Property, sizeof(KSPROPERTY), (LPVOID)&State, sizeof(KSSTATE), &BytesReturned);
+    if (SUCCEEDED(hr))
+    {
+        m_State = State;
+    }
 
     //TODO
     //propagate to connected pin on the pipe
@@ -838,7 +1085,9 @@ COutputPin::KsQualityNotify(
     ULONG Proportion,
     REFERENCE_TIME TimeDelta)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::KsQualityNotify NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -852,7 +1101,9 @@ COutputPin::KsNotifyError(
     IMediaSample* Sample,
     HRESULT hr)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::KsNotifyError NotImplemented\n");
+#endif
 }
 
 
@@ -1009,7 +1260,9 @@ HRESULT
 STDMETHODCALLTYPE
 COutputPin::GetPages(CAUUID *pPages)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::GetPages NotImplemented\n");
+#endif
 
     if (!pPages)
         return E_POINTER;
@@ -1029,7 +1282,10 @@ STDMETHODCALLTYPE
 COutputPin::KsPinFactory(
     ULONG* PinFactory)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::KsPinFactory\n");
+#endif
+
     *PinFactory = m_PinId;
     return S_OK;
 }
@@ -1045,7 +1301,9 @@ COutputPin::Render(
     IPin *ppinOut,
     IGraphBuilder *pGraph)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::Render\n");
+#endif
     return S_OK;
 }
 
@@ -1055,7 +1313,10 @@ COutputPin::Backout(
     IPin *ppinOut, 
     IGraphBuilder *pGraph)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::Backout\n");
+#endif
+
     return S_OK;
 }
 //-------------------------------------------------------------------
@@ -1065,7 +1326,10 @@ HANDLE
 STDMETHODCALLTYPE
 COutputPin::KsGetObjectHandle()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::KsGetObjectHandle\n");
+#endif
+
     assert(m_hPin != INVALID_HANDLE_VALUE);
     return m_hPin;
 }
@@ -1083,16 +1347,17 @@ COutputPin::KsProperty(
     ULONG* BytesReturned)
 {
     HRESULT hr;
-    WCHAR Buffer[100];
-    LPOLESTR pstr;
 
     assert(m_hPin != INVALID_HANDLE_VALUE);
 
     hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)Property, PropertyLength, (PVOID)PropertyData, DataLength, BytesReturned);
-
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[100];
+    LPOLESTR pstr;
     StringFromCLSID(Property->Set, &pstr);
     swprintf(Buffer, L"COutputPin::KsProperty Set %s Id %lu Flags %x hr %x\n", pstr, Property->Id, Property->Flags, hr);
     OutputDebugStringW(Buffer);
+#endif
 
     return hr;
 }
@@ -1107,7 +1372,9 @@ COutputPin::KsMethod(
     ULONG* BytesReturned)
 {
     assert(m_hPin != INVALID_HANDLE_VALUE);
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::KsMethod\n");
+#endif
     return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)Method, MethodLength, (PVOID)MethodData, DataLength, BytesReturned);
 }
 
@@ -1122,7 +1389,9 @@ COutputPin::KsEvent(
 {
     assert(m_hPin != INVALID_HANDLE_VALUE);
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::KsEvent\n");
+#endif
 
     if (EventLength)
         return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)Event, EventLength, (PVOID)EventData, DataLength, BytesReturned);
@@ -1227,7 +1496,9 @@ COutputPin::QuerySupported(
     KSPROPERTY Property;
     ULONG BytesReturned;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::QuerySupported\n");
+#endif
 
     Property.Set = guidPropSet;
     Property.Id = dwPropID;
@@ -1247,9 +1518,12 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
     HRESULT hr;
     ALLOCATOR_PROPERTIES Properties;
     IMemAllocatorCallbackTemp *pMemCallback;
-    WCHAR Buffer[200];
 
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[200];
     OutputDebugStringW(L"COutputPin::Connect called\n");
+#endif
+
     if (pmt)
     {
         hr = pReceivePin->QueryAccept(pmt);
@@ -1270,7 +1544,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
     hr = pReceivePin->QueryInterface(IID_IMemInputPin, (void**)&m_MemInputPin);
     if (FAILED(hr))
     {
+#ifdef KSPROXY_TRACE
         OutputDebugStringW(L"COutputPin::Connect no IMemInputPin interface\n");
+#endif
+
         DebugBreak();
         return hr;
     }
@@ -1306,8 +1583,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
         hr = m_MemAllocator->SetProperties(&Properties, &m_Properties);
         if (FAILED(hr))
         {
+#ifdef KSPROXY_TRACE
             swprintf(Buffer, L"COutputPin::Connect IMemAllocator::SetProperties failed with hr %lx\n", hr);
             OutputDebugStringW(Buffer);
+#endif
             m_MemAllocator->Release();
             m_MemInputPin->Release();
             return hr;
@@ -1318,8 +1597,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
     hr = m_MemAllocator->Commit();
     if (FAILED(hr))
     {
+#ifdef KSPROXY_TRACE
         swprintf(Buffer, L"COutputPin::Connect IMemAllocator::Commit failed with hr %lx\n", hr);
         OutputDebugStringW(Buffer);
+#endif
         m_MemAllocator->Release();
         m_MemInputPin->Release();
         return hr;
@@ -1329,8 +1610,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
     hr = m_MemAllocator->QueryInterface(IID_IMemAllocatorCallbackTemp, (void**)&pMemCallback);
     if (FAILED(hr))
     {
+#ifdef KSPROXY_TRACE
         swprintf(Buffer, L"COutputPin::Connect No IMemAllocatorCallbackTemp interface hr %lx\n", hr);
         OutputDebugStringW(Buffer);
+#endif
         m_MemAllocator->Release();
         m_MemInputPin->Release();
         return hr;
@@ -1344,8 +1627,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
 
     if (FAILED(hr))
     {
+#ifdef KSPROXY_TRACE
         swprintf(Buffer, L"COutputPin::Connect IMemAllocatorNotifyCallbackTemp::SetNotify failed hr %lx\n", hr);
         OutputDebugStringW(Buffer);
+#endif
         m_MemAllocator->Release();
         m_MemInputPin->Release();
         return hr;
@@ -1355,8 +1640,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
     hr = m_MemInputPin->NotifyAllocator(m_MemAllocator, TRUE);
     if (FAILED(hr))
     {
+#ifdef KSPROXY_TRACE
         swprintf(Buffer, L"COutputPin::Connect IMemInputPin::NotifyAllocator failed with hr %lx\n", hr);
         OutputDebugStringW(Buffer);
+#endif
         m_MemAllocator->Release();
         m_MemInputPin->Release();
         return hr;
@@ -1375,7 +1662,9 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
         // increment reference count
         pReceivePin->AddRef();
         m_Pin = pReceivePin;
+#ifdef KSPROXY_TRACE
         OutputDebugStringW(L"COutputPin::Connect success\n");
+#endif
     }
     else
     {
@@ -1396,7 +1685,9 @@ HRESULT
 STDMETHODCALLTYPE
 COutputPin::Disconnect( void)
 {
+#ifdef KSPROXY_TRACE
    OutputDebugStringW(L"COutputPin::Disconnect\n");
+#endif
 
     if (!m_Pin)
     {
@@ -1412,14 +1703,21 @@ COutputPin::Disconnect( void)
     m_MemInputPin->Release();
     m_MemAllocator->Release();
 
+    CloseHandle(m_hPin);
+    m_hPin = INVALID_HANDLE_VALUE;
+
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::Disconnect\n");
+#endif
     return S_OK;
 }
 HRESULT
 STDMETHODCALLTYPE
 COutputPin::ConnectedTo(IPin **pPin)
 {
+#ifdef KSPROXY_TRACE
    OutputDebugStringW(L"COutputPin::ConnectedTo\n");
+#endif
 
     if (!pPin)
         return E_POINTER;
@@ -1439,7 +1737,10 @@ HRESULT
 STDMETHODCALLTYPE
 COutputPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::ConnectionMediaType called\n");
+#endif
+
     return E_NOTIMPL;
 }
 HRESULT
@@ -1480,7 +1781,10 @@ HRESULT
 STDMETHODCALLTYPE
 COutputPin::QueryAccept(const AM_MEDIA_TYPE *pmt)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"COutputPin::QueryAccept called\n");
+#endif
+
     return E_NOTIMPL;
 }
 HRESULT
@@ -1491,15 +1795,17 @@ COutputPin::EnumMediaTypes(IEnumMediaTypes **ppEnum)
     ULONG MediaTypeCount = 0, Index;
     AM_MEDIA_TYPE * MediaTypes;
     HANDLE hFilter;
+    IKsObject * KsObjectParent;
 
-    if (!m_KsObjectParent)
-    {
-        // no interface
-        return E_NOINTERFACE;
-    }
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    if (FAILED(hr))
+        return hr;
 
     // get parent filter handle
-    hFilter = m_KsObjectParent->KsGetObjectHandle();
+    hFilter = KsObjectParent->KsGetObjectHandle();
+
+    // release IKsObject
+    KsObjectParent->Release();
 
     // query media type count
     hr = KsGetMediaTypeCount(hFilter, m_PinId, &MediaTypeCount);
@@ -1582,12 +1888,26 @@ COutputPin::CheckFormat(
     PKSMULTIPLE_ITEM MultipleItem;
     PKSDATAFORMAT DataFormat;
     HRESULT hr;
+    IKsObject * KsObjectParent;
+    HANDLE hFilter;
 
     if (!pmt)
         return E_POINTER;
 
-    HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
-    assert(hFilter != NULL);
+    // get IKsObject interface
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    if (FAILED(hr))
+        return hr;
+
+    // get parent filter handle
+    hFilter = KsObjectParent->KsGetObjectHandle();
+
+    // release IKsObject
+    KsObjectParent->Release();
+
+    if (!hFilter)
+        return E_HANDLE;
+
 
     hr = KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_DATARANGES, (PVOID*)&MultipleItem);
     if (FAILED(hr))
@@ -1699,10 +2019,13 @@ COutputPin::CreatePin(
     }
     else
     {
+#ifdef KSPROXY_TRACE
         WCHAR Buffer[100];
         swprintf(Buffer, L"COutputPin::CreatePin unexpected communication %u %s\n", m_Communication, m_PinName);
         OutputDebugStringW(Buffer);
         DebugBreak();
+#endif
+
         hr = E_FAIL;
     }
 
@@ -1724,6 +2047,9 @@ COutputPin::CreatePinHandle(
     PKSDATAFORMAT DataFormat;
     ULONG Length;
     HRESULT hr;
+    HANDLE hFilter;
+    IKsObject * KsObjectParent;
+
     //KSALLOCATOR_FRAMING Framing;
     //KSPROPERTY Property;
     //ULONG BytesReturned;
@@ -1774,8 +2100,19 @@ COutputPin::CreatePinHandle(
         CopyMemory((DataFormat + 1), pmt->pbFormat, pmt->cbFormat);
     }
 
-    HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
-    assert(hFilter != NULL);
+    // get IKsObject interface
+    hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+    if (FAILED(hr))
+        return hr;
+
+    // get parent filter handle
+    hFilter = KsObjectParent->KsGetObjectHandle();
+
+    // release IKsObject
+    KsObjectParent->Release();
+
+    if (!hFilter)
+        return E_HANDLE;
 
     // create pin
     hr = KsCreatePin(hFilter, PinConnect, GENERIC_READ, &m_hPin);
@@ -1787,6 +2124,7 @@ COutputPin::CreatePinHandle(
         CopyMemory(&m_Interface, Interface, sizeof(KSPIN_INTERFACE));
         CopyMemory(&m_MediaFormat, pmt, sizeof(AM_MEDIA_TYPE));
 
+#ifdef KSPROXY_TRACE
         LPOLESTR pMajor, pSub, pFormat;
         StringFromIID(m_MediaFormat.majortype, &pMajor);
         StringFromIID(m_MediaFormat.subtype , &pSub);
@@ -1797,6 +2135,7 @@ COutputPin::CreatePinHandle(
         CoTaskMemFree(pSub);
         CoTaskMemFree(pFormat);
         OutputDebugStringW(Buffer);
+#endif
 
         if (pmt->cbFormat)
         {
@@ -1833,6 +2172,33 @@ COutputPin::CreatePinHandle(
             DebugBreak();
         }
 
+        LPGUID pGuid;
+        ULONG NumGuids = 0;
+
+        // get all supported sets
+        hr = GetSupportedSets(&pGuid, &NumGuids);
+        if (FAILED(hr))
+        {
+#ifdef KSPROXY_TRACE
+            OutputDebugStringW(L"CInputPin::CreatePinHandle GetSupportedSets failed\n");
+#endif
+            return hr;
+        }
+
+        // load all proxy plugins
+        hr = LoadProxyPlugins(pGuid, NumGuids);
+        if (FAILED(hr))
+        {
+#ifdef KSPROXY_TRACE
+            OutputDebugStringW(L"CInputPin::CreatePinHandle LoadProxyPlugins failed\n");
+#endif
+            return hr;
+        }
+
+        // free sets
+        CoTaskMemFree(pGuid);
+
+
         //TODO
         // connect pin pipes
 
@@ -1843,6 +2209,138 @@ COutputPin::CreatePinHandle(
     return hr;
 }
 
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetSupportedSets(
+    LPGUID * pOutGuid,
+    PULONG NumGuids)
+{
+    KSPROPERTY Property;
+    LPGUID pGuid;
+    ULONG NumProperty = 0;
+    ULONG NumMethods = 0;
+    ULONG NumEvents = 0;
+    ULONG Length;
+    ULONG BytesReturned;
+    HRESULT hr;
+
+    Property.Set = GUID_NULL;
+    Property.Id = 0;
+    Property.Flags = KSPROPERTY_TYPE_SETSUPPORT;
+
+    KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumProperty);
+    KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumMethods);
+    KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumEvents);
+
+    Length = NumProperty + NumMethods + NumEvents;
+
+    // allocate guid buffer
+    pGuid = (LPGUID)CoTaskMemAlloc(Length);
+    if (!pGuid)
+    {
+        // failed
+        return E_OUTOFMEMORY;
+    }
+
+    NumProperty /= sizeof(GUID);
+    NumMethods /= sizeof(GUID);
+    NumEvents /= sizeof(GUID);
+
+    // get all properties
+    hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pGuid, Length, &BytesReturned);
+    if (FAILED(hr))
+    {
+        CoTaskMemFree(pGuid);
+        return E_FAIL;
+    }
+    Length -= BytesReturned;
+
+    // get all methods
+    if (Length)
+    {
+        hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty], Length, &BytesReturned);
+        if (FAILED(hr))
+        {
+            CoTaskMemFree(pGuid);
+            return E_FAIL;
+        }
+        Length -= BytesReturned;
+    }
+
+    // get all events
+    if (Length)
+    {
+        hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty+NumMethods], Length, &BytesReturned);
+        if (FAILED(hr))
+        {
+            CoTaskMemFree(pGuid);
+            return E_FAIL;
+        }
+        Length -= BytesReturned;
+    }
+
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[200];
+    swprintf(Buffer, L"NumProperty %lu NumMethods %lu NumEvents %lu\n", NumProperty, NumMethods, NumEvents);
+    OutputDebugStringW(Buffer);
+#endif
+
+    *pOutGuid = pGuid;
+    *NumGuids = NumProperty+NumEvents+NumMethods;
+    return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::LoadProxyPlugins(
+    LPGUID pGuids,
+    ULONG NumGuids)
+{
+    ULONG Index;
+    LPOLESTR pStr;
+    HKEY hKey, hSubKey;
+    HRESULT hr;
+    IUnknown * pUnknown;
+
+    if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\MediaInterfaces", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
+    {
+        OutputDebugStringW(L"CKsProxy::LoadProxyPlugins failed to open MediaInterfaces key\n");
+        return E_FAIL;
+    }
+
+    // enumerate all sets
+    for(Index = 0; Index < NumGuids; Index++)
+    {
+        // convert to string
+        hr = StringFromCLSID(pGuids[Index], &pStr);
+        if (FAILED(hr))
+            return E_FAIL;
+
+        // now try open class key
+        if (RegOpenKeyExW(hKey, pStr, 0, KEY_READ, &hSubKey) != ERROR_SUCCESS)
+        {
+            // no plugin for that set exists
+            CoTaskMemFree(pStr);
+            continue;
+        }
+
+        // try load plugin
+        hr = CoCreateInstance(pGuids[Index], (IBaseFilter*)this, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&pUnknown);
+        if (SUCCEEDED(hr))
+        {
+            // store plugin
+            m_Plugins.push_back(pUnknown);
+        }
+        // close key
+        RegCloseKey(hSubKey);
+    }
+
+    // close media interfaces key
+    RegCloseKey(hKey);
+    return S_OK;
+}
+
+
 HRESULT
 WINAPI
 COutputPin::IoProcessRoutine()
@@ -1852,15 +2350,16 @@ COutputPin::IoProcessRoutine()
     HRESULT hr;
     PKSSTREAM_SEGMENT StreamSegment;
     HANDLE hEvent;
-    WCHAR Buffer[100];
     IMediaSample * Samples[1];
 
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[200];
+#endif
+
     // first wait for the start event to signal
     WaitForSingleObject(m_hStartEvent, INFINITE);
 
     assert(m_InterfaceHandler);
-    REFERENCE_TIME Start = 0;
-    REFERENCE_TIME Stop = 1;
     do
     {
         if (m_StopInProgress)
@@ -1869,16 +2368,15 @@ COutputPin::IoProcessRoutine()
             break;
         }
 
+        assert(m_State == KSSTATE_RUN);
+        assert(m_MemAllocator);
+
         // get buffer
         hr = m_MemAllocator->GetBuffer(&Sample, NULL, NULL, AM_GBF_NOWAIT);
 
         if (FAILED(hr))
         {
-            OutputDebugStringW(L"OutOfSamples\n");
-            m_Pin->BeginFlush();
             WaitForSingleObject(m_hBufferAvailable, INFINITE);
-            m_Pin->EndFlush();
-            OutputDebugStringW(L"After Wait OutOfSamples\n");
             // now retry again
             continue;
         }
@@ -1895,11 +2393,11 @@ COutputPin::IoProcessRoutine()
                                                        &StreamSegment);
         if (FAILED(hr) || !StreamSegment)
         {
+#ifdef KSPROXY_TRACE
             swprintf(Buffer, L"COutputPin::IoProcessRoutine KsProcessMediaSamples FAILED PinName %s hr %lx\n", m_PinName, hr);
             OutputDebugStringW(Buffer);
-            SetEvent(m_hStopEvent);
-            m_IoThreadStarted = false;
-            ExitThread(0);
+#endif
+            break;
         }
 
         // get completion event
@@ -1916,18 +2414,19 @@ COutputPin::IoProcessRoutine()
 
         if (SUCCEEDED(hr))
         {
-            LONG Length = Sample->GetActualDataLength();
-            Stop += Length;
-           // Sample->SetMediaTime(&Start, &Stop);
-            Start = Stop;
+            assert(m_MemInputPin);
 
             // now deliver the sample
             hr = m_MemInputPin->Receive(Sample);
 
+#ifdef KSPROXY_TRACE
             swprintf(Buffer, L"COutputPin::IoProcessRoutine PinName %s IMemInputPin::Receive hr %lx Sample %p m_MemAllocator %p\n", m_PinName, hr, Sample, m_MemAllocator);
             OutputDebugStringW(Buffer);
+#endif
+
              if (FAILED(hr))
-                                DebugBreak();
+                 break;
+
             Sample = NULL;
         }
     }while(TRUE);
@@ -1963,24 +2462,18 @@ COutputPin::InitializeIOThread()
 
     if (!m_hStartEvent)
         m_hStartEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
-    else
-        ResetEvent(m_hStartEvent);
 
     if (!m_hStartEvent)
         return E_OUTOFMEMORY;
 
     if (!m_hStopEvent)
         m_hStopEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
-    else
-        ResetEvent(m_hStopEvent);
 
     if (!m_hStopEvent)
         return E_OUTOFMEMORY;
 
     if (!m_hBufferAvailable)
         m_hBufferAvailable = CreateEventW(NULL, FALSE, FALSE, NULL);
-    else
-        ResetEvent(m_hBufferAvailable);
 
     if (!m_hBufferAvailable)
         return E_OUTOFMEMORY;
@@ -2008,121 +2501,191 @@ COutputPin_SetState(
     HRESULT hr = S_OK;
     KSPROPERTY Property;
     KSSTATE CurState;
-    WCHAR Buffer[100];
     ULONG BytesReturned;
-
     COutputPin * pPin = (COutputPin*)Pin;
 
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[200];
+#endif
 
     Property.Set = KSPROPSETID_Connection;
     Property.Id = KSPROPERTY_CONNECTION_STATE;
     Property.Flags = KSPROPERTY_TYPE_SET;
 
+    EnterCriticalSection(&pPin->m_Lock);
 
-    if (pPin->m_State < State)
+    if (pPin->m_State <= State)
     {
         if (pPin->m_State == KSSTATE_STOP)
         {
+            hr = pPin->InitializeIOThread();
+            if (FAILED(hr))
+            {
+                // failed to initialize I/O thread
+#ifdef KSPROXY_TRACE
+                OutputDebugStringW(L"Failed to initialize I/O Thread\n");
+#endif
+                LeaveCriticalSection(&pPin->m_Lock);
+                return hr;
+            }
             CurState = KSSTATE_ACQUIRE;
             hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
 
-            swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_ACQUIRE PinName %s hr %lx\n", pPin->m_PinName, hr);
+#ifdef KSPROXY_TRACE
+            swprintf(Buffer, L"COutputPin_SetState Setting State CurState: KSSTATE_STOP KSSTATE_ACQUIRE PinName %s hr %lx\n", pPin->m_PinName, hr);
             OutputDebugStringW(Buffer);
+#endif
+
             if (FAILED(hr))
+            {
+                LeaveCriticalSection(&pPin->m_Lock);
                 return hr;
+            }
 
             pPin->m_State = CurState;
 
             if (pPin->m_State == State)
+            {
+                LeaveCriticalSection(&pPin->m_Lock);
                 return hr;
+            }
         }
         if (pPin->m_State == KSSTATE_ACQUIRE)
         {
             CurState = KSSTATE_PAUSE;
             hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
 
-            swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_PAUSE PinName %s hr %lx\n", pPin->m_PinName, hr);
+#ifdef KSPROXY_TRACE
+            swprintf(Buffer, L"COutputPin_SetState Setting State CurState KSSTATE_ACQUIRE KSSTATE_PAUSE PinName %s hr %lx\n", pPin->m_PinName, hr);
             OutputDebugStringW(Buffer);
+#endif
+
             if (FAILED(hr))
+            {
+                LeaveCriticalSection(&pPin->m_Lock);
                 return hr;
+            }
 
             pPin->m_State = CurState;
 
             if (pPin->m_State == State)
+            {
+                LeaveCriticalSection(&pPin->m_Lock);
                 return hr;
+            }
         }
+        if (State == KSSTATE_RUN && pPin->m_State == KSSTATE_PAUSE)
+        {
+            CurState = KSSTATE_RUN;
+            hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
 
-        CurState = KSSTATE_RUN;
-        hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
-
-        swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_RUN PinName %s hr %lx\n", pPin->m_PinName, hr);
-        OutputDebugStringW(Buffer);
-        if (FAILED(hr))
-            return hr;
-
-        // signal start event
-        SetEvent(pPin->m_hStartEvent);
+#ifdef KSPROXY_TRACE
+            swprintf(Buffer, L"COutputPin_SetState Setting State CurState: KSSTATE_PAUSE KSSTATE_RUN PinName %s hr %lx\n", pPin->m_PinName, hr);
+            OutputDebugStringW(Buffer);
+#endif
 
+            if (SUCCEEDED(hr))
+            {
+                pPin->m_State = CurState;
+                // signal start event
+                SetEvent(pPin->m_hStartEvent);
+            }
+        }
 
-        pPin->m_State = CurState;
+        LeaveCriticalSection(&pPin->m_Lock);
         return hr;
     }
     else
     {
         if (pPin->m_State == KSSTATE_RUN)
         {
+            // setting pending stop flag
+            pPin->m_StopInProgress = true;
+
+            // release any waiting threads
+            SetEvent(pPin->m_hBufferAvailable);
+
+            // wait until i/o thread is done
+            WaitForSingleObject(pPin->m_hStopEvent, INFINITE);
+
             CurState = KSSTATE_PAUSE;
             hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
 
-            swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_PAUSE PinName %u hr %lx\n", pPin->m_PinName, hr);
+#ifdef KSPROXY_TRACE
+            swprintf(Buffer, L"COutputPin_SetState Setting State CurState: KSSTATE_RUN KSSTATE_PAUSE PinName %s hr %lx\n", pPin->m_PinName, hr);
             OutputDebugStringW(Buffer);
+#endif
+
             if (FAILED(hr))
+            {
+                LeaveCriticalSection(&pPin->m_Lock);
                 return hr;
+            }
 
             pPin->m_State = CurState;
 
-            if (pPin->m_State == State)
+            if (FAILED(hr))
+            {
+                LeaveCriticalSection(&pPin->m_Lock);
                 return hr;
+            }
         }
         if (pPin->m_State == KSSTATE_PAUSE)
         {
             CurState = KSSTATE_ACQUIRE;
             hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
 
-            swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_ACQUIRE PinName %u hr %lx\n", pPin->m_PinName, hr);
+#ifdef KSPROXY_TRACE
+            swprintf(Buffer, L"COutputPin_SetState Setting State CurState: KSSTATE_PAUSE KSSTATE_ACQUIRE PinName %s hr %lx\n", pPin->m_PinName, hr);
             OutputDebugStringW(Buffer);
+#endif
+
             if (FAILED(hr))
+            {
+                LeaveCriticalSection(&pPin->m_Lock);
                 return hr;
+            }
 
             pPin->m_State = CurState;
 
             if (pPin->m_State == State)
+            {
+                LeaveCriticalSection(&pPin->m_Lock);
                 return hr;
+            }
         }
 
-        // setting pending stop flag
-        pPin->m_StopInProgress = true;
+        CloseHandle(pPin->m_hStopEvent);
+        CloseHandle(pPin->m_hStartEvent);
+        CloseHandle(pPin->m_hBufferAvailable);
+
+        /* close event handles */
+        pPin->m_hStopEvent = NULL;
+        pPin->m_hStartEvent = NULL;
+        pPin->m_hBufferAvailable = NULL;
 
         CurState = KSSTATE_STOP;
         hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
 
-        swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_STOP PinName %s hr %lx\n", pPin->m_PinName, hr);
+#ifdef KSPROXY_TRACE
+        swprintf(Buffer, L"COutputPin_SetState Setting State CurState: KSSTATE_ACQUIRE KSSTATE_STOP PinName %s hr %lx\n", pPin->m_PinName, hr);
         OutputDebugStringW(Buffer);
-        if (FAILED(hr))
-            return hr;
+#endif
 
-        // release any waiting threads
-        SetEvent(pPin->m_hBufferAvailable);
+        if (SUCCEEDED(hr))
+        {
+            // store state
+            pPin->m_State = CurState;
+        }
 
-        // wait until i/o thread is done
-        WaitForSingleObject(pPin->m_hStopEvent, INFINITE);
+        // unset pending stop flag
+        pPin->m_StopInProgress = false;
 
-        pPin->m_State = CurState;
+        LeaveCriticalSection(&pPin->m_Lock);
         return hr;
     }
 }
 
-
 HRESULT
 WINAPI
 COutputPin_Constructor(
index c02b6ad..eae5de0 100644 (file)
@@ -3,6 +3,7 @@
 #define _FORCENAMELESSUNION
 #define BUILDING_KS
 #define _KSDDK_
+//#define KSPROXY_TRACE
 #include <dshow.h>
 //#include <streams.h>
 #include <ks.h>
index 41d543f..bd34ec8 100644 (file)
@@ -63,7 +63,7 @@ public:
         InterlockedDecrement(&m_Ref);
         if (!m_Ref)
         {
-            delete this;
+            //delete this;
             return 0;
         }
         return m_Ref;
@@ -171,7 +171,7 @@ public:
     HRESULT STDMETHODCALLTYPE GetPages(CAUUID *pPages);
 
 
-    CKsProxy() : m_Ref(0), m_pGraph(0), m_ReferenceClock((IReferenceClock*)this), m_FilterState(State_Stopped), m_hDevice(0), m_Plugins(), m_Pins(), m_DevicePath(0), m_hClock(0) {};
+    CKsProxy();
     ~CKsProxy()
     {
         if (m_hDevice)
@@ -203,8 +203,23 @@ protected:
     LPWSTR m_DevicePath;
     CLSID m_DeviceInterfaceGUID;
     HANDLE m_hClock;
+    CRITICAL_SECTION m_Lock;
 };
 
+CKsProxy::CKsProxy() : m_Ref(0),
+                       m_pGraph(0),
+                       m_ReferenceClock((IReferenceClock*)this),
+                       m_FilterState(State_Stopped),
+                       m_hDevice(0),
+                       m_Plugins(),
+                       m_Pins(),
+                       m_DevicePath(0),
+                       m_hClock(0)
+{
+    InitializeCriticalSection(&m_Lock);
+}
+
+
 HRESULT
 STDMETHODCALLTYPE
 CKsProxy::QueryInterface(
@@ -332,24 +347,26 @@ CKsProxy::QueryInterface(
             HRESULT hr = m_Plugins[Index]->QueryInterface(refiid, Output);
             if (SUCCEEDED(hr))
             {
+#ifdef KSPROXY_TRACE
                 WCHAR Buffer[100];
                 LPOLESTR lpstr;
                 StringFromCLSID(refiid, &lpstr);
                 swprintf(Buffer, L"CKsProxy::QueryInterface plugin %lu supports interface %s\n", Index, lpstr);
                 OutputDebugStringW(Buffer);
                 CoTaskMemFree(lpstr);
+#endif
                 return hr;
             }
         }
     }
-
+#ifdef KSPROXY_TRACE
     WCHAR Buffer[MAX_PATH];
     LPOLESTR lpstr;
     StringFromCLSID(refiid, &lpstr);
     swprintf(Buffer, L"CKsProxy::QueryInterface: NoInterface for %s !!!\n", lpstr);
     OutputDebugStringW(Buffer);
     CoTaskMemFree(lpstr);
-
+#endif
 
     return E_NOINTERFACE;
 }
@@ -362,7 +379,9 @@ HRESULT
 STDMETHODCALLTYPE
 CKsProxy::GetPages(CAUUID *pPages)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetPages NotImplemented\n");
+#endif
 
     if (!pPages)
         return E_POINTER;
@@ -478,7 +497,10 @@ STDMETHODCALLTYPE
 CKsProxy::KsGetTime(
     LONGLONG* Time)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsGetTime\n");
+#endif
+
     return PerformClockProperty(KSPROPERTY_CLOCK_TIME, KSPROPERTY_TYPE_GET, (PVOID)Time, sizeof(LONGLONG));
 }
 
@@ -487,7 +509,10 @@ STDMETHODCALLTYPE
 CKsProxy::KsSetTime(
     LONGLONG Time)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsSetTime\n");
+#endif
+
     return PerformClockProperty(KSPROPERTY_CLOCK_TIME, KSPROPERTY_TYPE_SET, (PVOID)&Time, sizeof(LONGLONG));
 }
 
@@ -496,7 +521,10 @@ STDMETHODCALLTYPE
 CKsProxy::KsGetPhysicalTime(
     LONGLONG* Time)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsGetPhysicalTime\n");
+#endif
+
     return PerformClockProperty(KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_TYPE_GET, (PVOID)Time, sizeof(LONGLONG));
 }
 
@@ -505,7 +533,10 @@ STDMETHODCALLTYPE
 CKsProxy::KsSetPhysicalTime(
     LONGLONG Time)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsSetPhysicalTime\n");
+#endif
+
     return PerformClockProperty(KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_TYPE_SET, (PVOID)&Time, sizeof(LONGLONG));
 }
 
@@ -514,7 +545,10 @@ STDMETHODCALLTYPE
 CKsProxy::KsGetCorrelatedTime(
     KSCORRELATED_TIME* CorrelatedTime)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsGetCorrelatedTime\n");
+#endif
+
     return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_TYPE_GET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
 }
 
@@ -523,7 +557,9 @@ STDMETHODCALLTYPE
 CKsProxy::KsSetCorrelatedTime(
     KSCORRELATED_TIME* CorrelatedTime)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsSetCorrelatedTime\n");
+#endif
     return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_TYPE_SET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
 }
 
@@ -532,7 +568,9 @@ STDMETHODCALLTYPE
 CKsProxy::KsGetCorrelatedPhysicalTime(
     KSCORRELATED_TIME* CorrelatedTime)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsGetCorrelatedPhysicalTime\n");
+#endif
     return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_TYPE_GET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
 }
 
@@ -541,7 +579,10 @@ STDMETHODCALLTYPE
 CKsProxy::KsSetCorrelatedPhysicalTime(
     KSCORRELATED_TIME* CorrelatedTime)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsSetCorrelatedPhysicalTime\n");
+#endif
+
     return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_TYPE_SET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
 }
 
@@ -550,7 +591,9 @@ STDMETHODCALLTYPE
 CKsProxy::KsGetResolution(
     KSRESOLUTION* Resolution)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsGetResolution\n");
+#endif
     return PerformClockProperty(KSPROPERTY_CLOCK_RESOLUTION, KSPROPERTY_TYPE_GET, (PVOID)Resolution, sizeof(KSRESOLUTION));
 }
 
@@ -559,7 +602,9 @@ STDMETHODCALLTYPE
 CKsProxy::KsGetState(
     KSSTATE* State)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsGetState\n");
+#endif
     return PerformClockProperty(KSPROPERTY_CLOCK_STATE, KSPROPERTY_TYPE_GET, (PVOID)State, sizeof(KSSTATE));
 }
 
@@ -575,7 +620,9 @@ CKsProxy::GetTime(
     KSPROPERTY Property;
     ULONG BytesReturned;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetTime\n");
+#endif
 
     if (!pTime)
         return E_POINTER;
@@ -620,7 +667,9 @@ CKsProxy::AdviseTime(
     ULONG BytesReturned;
     PKSEVENT_TIME_MARK Event;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::AdviseTime\n");
+#endif
 
     //
     //FIXME locks
@@ -686,7 +735,9 @@ CKsProxy::AdvisePeriodic(
     ULONG BytesReturned;
     PKSEVENT_TIME_INTERVAL Event;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::AdvisePeriodic\n");
+#endif
 
     //
     //FIXME locks
@@ -748,7 +799,9 @@ CKsProxy::Unadvise(
     HRESULT hr;
     ULONG BytesReturned;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Unadvise\n");
+#endif
 
     if (m_hClock)
     {
@@ -786,7 +839,10 @@ CKsProxy::GetCapabilities(
     Property.Id = KSPROPERTY_MEDIASEEKING_CAPABILITIES;
     Property.Flags = KSPROPERTY_TYPE_GET;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetCapabilities\n");
+#endif
+
 
     if (!pCapabilities)
         return E_POINTER;
@@ -836,7 +892,9 @@ CKsProxy::CheckCapabilities(
     DWORD Capabilities;
     HRESULT hr;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::CheckCapabilities\n");
+#endif
 
     if (!pCapabilities)
         return E_POINTER;
@@ -914,11 +972,13 @@ CKsProxy::IsFormatSupported(
     ULONG Index;
     HRESULT hr = S_FALSE;
 
+#ifdef KSPROXY_TRACE
     WCHAR Buffer[100];
     LPOLESTR pstr;
     StringFromCLSID(*pFormat, &pstr);
     swprintf(Buffer, L"CKsProxy::IsFormatSupported %s\n",pstr);
     OutputDebugStringW(Buffer);
+#endif
 
     if (!pFormat)
         return E_POINTER;
@@ -927,8 +987,10 @@ CKsProxy::IsFormatSupported(
     hr = GetMediaSeekingFormats(&FormatList);
     if (SUCCEEDED(hr))
     {
+#ifdef KSPROXY_TRACE
         swprintf(Buffer, L"CKsProxy::IsFormatSupported NumFormat %lu\n",FormatList->Count);
         OutputDebugStringW(Buffer);
+#endif
 
         //iterate through format list
         pGuid = (LPGUID)(FormatList + 1);
@@ -961,7 +1023,9 @@ CKsProxy::IsFormatSupported(
         {
             // plugin does not support interface
             hr = S_FALSE;
+#ifdef KSPROXY_TRACE
             OutputDebugStringW(L"CKsProxy::IsFormatSupported plugin does not support IMediaSeeking interface\n");
+#endif
             break;
         }
 
@@ -986,7 +1050,9 @@ CKsProxy::QueryPreferredFormat(
     HRESULT hr;
     ULONG Index;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::QueryPreferredFormat\n");
+#endif
 
     if (!pFormat)
         return E_POINTER;
@@ -1046,7 +1112,9 @@ CKsProxy::GetTimeFormat(
     Property.Id = KSPROPERTY_MEDIASEEKING_TIMEFORMAT;
     Property.Flags = KSPROPERTY_TYPE_GET;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetTimeFormat\n");
+#endif
 
     hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pFormat, sizeof(GUID), &BytesReturned);
     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
@@ -1086,7 +1154,9 @@ CKsProxy::IsUsingTimeFormat(
 {
     GUID Format;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::IsUsingTimeFormat\n");
+#endif
 
     if (FAILED(QueryPreferredFormat(&Format)))
         return S_FALSE;
@@ -1110,7 +1180,9 @@ CKsProxy::SetTimeFormat(
     Property.Id = KSPROPERTY_MEDIASEEKING_TIMEFORMAT;
     Property.Flags = KSPROPERTY_TYPE_SET;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::SetTimeFormat\n");
+#endif
 
     hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pFormat, sizeof(GUID), &BytesReturned);
     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
@@ -1158,7 +1230,9 @@ CKsProxy::GetDuration(
     Property.Id = KSPROPERTY_MEDIASEEKING_DURATION;
     Property.Flags = KSPROPERTY_TYPE_GET;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetDuration\n");
+#endif
 
     hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pDuration, sizeof(LONGLONG), &BytesReturned);
     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
@@ -1204,7 +1278,9 @@ CKsProxy::GetStopPosition(
     Property.Id = KSPROPERTY_MEDIASEEKING_STOPPOSITION;
     Property.Flags = KSPROPERTY_TYPE_GET;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetStopPosition\n");
+#endif
 
     hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pStop, sizeof(LONGLONG), &BytesReturned);
     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
@@ -1250,7 +1326,9 @@ CKsProxy::GetCurrentPosition(
     Property.Id = KSPROPERTY_MEDIASEEKING_POSITION;
     Property.Flags = KSPROPERTY_TYPE_GET;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetCurrentPosition\n");
+#endif
 
     hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pCurrent, sizeof(LONGLONG), &BytesReturned);
     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
@@ -1300,7 +1378,9 @@ CKsProxy::ConvertTimeFormat(
     Property.Property.Id = KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT;
     Property.Property.Flags = KSPROPERTY_TYPE_GET;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::ConvertTimeFormat\n");
+#endif
 
     if (!pTargetFormat)
     {
@@ -1383,7 +1463,9 @@ CKsProxy::SetPositions(
     Positions.Stop = *pStop;
     Positions.StopFlags = (KS_SEEKING_FLAGS)dwStopFlags;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::SetPositions\n");
+#endif
 
     hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&Positions, sizeof(KSPROPERTY_POSITIONS), &BytesReturned);
     if (SUCCEEDED(hr))
@@ -1444,7 +1526,9 @@ CKsProxy::GetPositions(
 {
     HRESULT hr;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetPositions\n");
+#endif
 
     hr = GetCurrentPosition(pCurrent);
     if (SUCCEEDED(hr))
@@ -1468,7 +1552,9 @@ CKsProxy::GetAvailable(
     Property.Id = KSPROPERTY_MEDIASEEKING_AVAILABLE;
     Property.Flags = KSPROPERTY_TYPE_GET;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetAvailable\n");
+#endif
 
     hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&Media, sizeof(KSPROPERTY_MEDIAAVAILABLE), &BytesReturned);
     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
@@ -1512,7 +1598,9 @@ STDMETHODCALLTYPE
 CKsProxy::SetRate(
     double dRate)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::SetRate\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -1521,7 +1609,9 @@ STDMETHODCALLTYPE
 CKsProxy::GetRate(
     double *pdRate)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetRate\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -1538,7 +1628,9 @@ CKsProxy::GetPreroll(
     Property.Id = KSPROPERTY_MEDIASEEKING_PREROLL;
     Property.Flags = KSPROPERTY_TYPE_GET;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetPreroll\n");
+#endif
 
     hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pllPreroll, sizeof(LONGLONG), &BytesReturned);
     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
@@ -1584,7 +1676,7 @@ CKsProxy::GetMiscFlags()
     HRESULT hr;
     PIN_DIRECTION PinDirection;
     KSPIN_COMMUNICATION Communication;
-    WCHAR Buffer[100];
+
 
     for(Index = 0; Index < m_Pins.size(); Index++)
     {
@@ -1608,8 +1700,12 @@ CKsProxy::GetMiscFlags()
         }
     }
 
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[100];
     swprintf(Buffer, L"CKsProxy::GetMiscFlags stub Flags %x\n", Flags);
     OutputDebugStringW(Buffer);
+#endif
+
     return Flags;
 }
 
@@ -1625,8 +1721,11 @@ CKsProxy::KsProperty(
     ULONG DataLength,
     ULONG* BytesReturned)
 {
-    assert(m_hDevice != 0);
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsProperty\n");
+#endif
+
+    assert(m_hDevice != 0);
     return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)Property, PropertyLength, (PVOID)PropertyData, DataLength, BytesReturned);
 }
 
@@ -1639,8 +1738,11 @@ CKsProxy::KsMethod(
     ULONG DataLength,
     ULONG* BytesReturned)
 {
-    assert(m_hDevice != 0);
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsMethod\n");
+#endif
+
+    assert(m_hDevice != 0);
     return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_METHOD, (PVOID)Method, MethodLength, (PVOID)MethodData, DataLength, BytesReturned);
 }
 
@@ -1653,8 +1755,11 @@ CKsProxy::KsEvent(
     ULONG DataLength,
     ULONG* BytesReturned)
 {
-    assert(m_hDevice != 0);
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsEvent\n");
+#endif
+
+    assert(m_hDevice != 0);
     if (EventLength)
         return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_ENABLE_EVENT, (PVOID)Event, EventLength, (PVOID)EventData, DataLength, BytesReturned);
     else
@@ -1677,7 +1782,9 @@ CKsProxy::Set(
 {
     ULONG BytesReturned;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Set\n");
+#endif
 
     if (cbInstanceData)
     {
@@ -1721,7 +1828,9 @@ CKsProxy::Get(
 {
     ULONG BytesReturned;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Get\n");
+#endif
 
     if (cbInstanceData)
     {
@@ -1762,7 +1871,9 @@ CKsProxy::QuerySupported(
     KSPROPERTY Property;
     ULONG BytesReturned;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::QuerySupported\n");
+#endif
 
     Property.Set = guidPropSet;
     Property.Id = dwPropID;
@@ -1787,7 +1898,9 @@ CKsProxy::CreateNodeInstance(
 {
     HRESULT hr;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::CreateNodeInstance\n");
+#endif
 
     *Interface = NULL;
 
@@ -1812,7 +1925,9 @@ STDMETHODCALLTYPE
 CKsProxy::KsAddAggregate(
     IN REFGUID AggregateClass)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsAddAggregate NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -1821,7 +1936,10 @@ STDMETHODCALLTYPE
 CKsProxy::KsRemoveAggregate(
     REFGUID AggregateClass)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsRemoveAggregate NotImplemented\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -1834,8 +1952,10 @@ HRESULT
 STDMETHODCALLTYPE
 CKsProxy::IsDirty()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::IsDirty Notimplemented\n");
     DebugBreak();
+#endif
     return E_NOTIMPL;
 }
 
@@ -1853,7 +1973,9 @@ CKsProxy::Load(
     ULONG PinId;
     LPOLESTR pMajor, pSub, pFormat;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Load\n");
+#endif
 
 #if 0
     ULONG Version = ReadInt(pStm, hr);
@@ -1923,7 +2045,10 @@ CKsProxy::Save(
     IStream *pStm,
     BOOL fClearDirty)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Save Notimplemented\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -1932,8 +2057,11 @@ STDMETHODCALLTYPE
 CKsProxy::GetSizeMax(
     ULARGE_INTEGER *pcbSize)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetSizeMax Notimplemented\n");
     DebugBreak();
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -1945,8 +2073,9 @@ HRESULT
 STDMETHODCALLTYPE
 CKsProxy::DeviceInfo(CLSID *pclsidInterfaceClass, LPWSTR *pwszSymbolicLink)
 {
-
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::DeviceInfo\n");
+#endif
 
     if (!m_DevicePath)
     {
@@ -1971,7 +2100,9 @@ HRESULT
 STDMETHODCALLTYPE
 CKsProxy::Reassociate(void)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Reassociate\n");
+#endif
 
     if (!m_DevicePath || m_hDevice)
     {
@@ -1994,7 +2125,9 @@ HRESULT
 STDMETHODCALLTYPE
 CKsProxy::Disassociate(void)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Disassociate\n");
+#endif
 
     if (!m_hDevice)
         return E_HANDLE;
@@ -2012,7 +2145,10 @@ HANDLE
 STDMETHODCALLTYPE
 CKsProxy::KsGetClockHandle()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsGetClockHandle\n");
+#endif
+
     return m_hClock;
 }
 
@@ -2025,7 +2161,10 @@ HANDLE
 STDMETHODCALLTYPE
 CKsProxy::KsGetObjectHandle()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::KsGetObjectHandle\n");
+#endif
+
     return m_hDevice;
 }
 
@@ -2036,7 +2175,10 @@ HRESULT
 STDMETHODCALLTYPE
 CKsProxy::InitNew( void)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::InitNew\n");
+#endif
+
     return S_OK;
 }
 
@@ -2323,7 +2465,6 @@ CKsProxy::CreatePins()
     KSPIN_DATAFLOW DataFlow;
     KSPIN_COMMUNICATION Communication;
     HRESULT hr;
-    WCHAR Buffer[100];
     LPWSTR PinName;
     IPin * pPin;
     ULONG InputPin = 0;
@@ -2390,8 +2531,12 @@ CKsProxy::CreatePins()
         // store pins
         m_Pins.push_back(pPin);
 
+#ifdef KSPROXY_TRACE
+        WCHAR Buffer[100];
         swprintf(Buffer, L"Index %lu DataFlow %lu Name %s\n", Index, DataFlow, PinName);
         OutputDebugStringW(Buffer);
+#endif
+
     }
 
     return S_OK;
@@ -2402,14 +2547,16 @@ STDMETHODCALLTYPE
 CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog)
 {
     HRESULT hr;
-    WCHAR Buffer[100];
     VARIANT varName;
     LPGUID pGuid;
     ULONG NumGuids = 0;
     HDEVINFO hList;
     SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
 
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[100];
     OutputDebugStringW(L"CKsProxy::Load\n");
+#endif
 
     // read device path
     varName.vt = VT_BSTR;
@@ -2417,14 +2564,18 @@ CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog)
 
     if (FAILED(hr))
     {
+#ifdef KSPROXY_TRACE
         swprintf(Buffer, L"CKsProxy::Load Read %lx\n", hr);
         OutputDebugStringW(Buffer);
+#endif
         return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
     }
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"DevicePath: ");
     OutputDebugStringW(varName.bstrVal);
     OutputDebugStringW(L"\n");
+#endif
 
     // create device list
     hList = SetupDiCreateDeviceInfoListExW(NULL, NULL, NULL, NULL);
@@ -2453,9 +2604,10 @@ CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog)
     if (m_hDevice == INVALID_HANDLE_VALUE)
     {
         // failed to open device
+#ifdef KSPROXY_TRACE
         swprintf(Buffer, L"CKsProxy:: failed to open device with %lx\n", GetLastError());
         OutputDebugStringW(Buffer);
-
+#endif
         return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
     }
 
@@ -2493,7 +2645,9 @@ HRESULT
 STDMETHODCALLTYPE
 CKsProxy::Save(IPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Save\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -2506,7 +2660,9 @@ STDMETHODCALLTYPE
 CKsProxy::GetClassID(
     CLSID *pClassID)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetClassID\n");
+#endif
     CopyMemory(pClassID, &CLSID_Proxy, sizeof(GUID));
 
     return S_OK;
@@ -2516,8 +2672,21 @@ HRESULT
 STDMETHODCALLTYPE
 CKsProxy::Stop()
 {
-    OutputDebugStringW(L"CKsProxy::Stop : NotImplemented\n");
-    return E_NOTIMPL;
+    HRESULT hr;
+
+#ifdef KSPROXY_TRACE
+    OutputDebugStringW(L"CKsProxy::Stop\n");
+#endif
+
+    EnterCriticalSection(&m_Lock);
+
+    hr = SetPinState(KSSTATE_STOP);
+    if (SUCCEEDED(hr))
+        m_FilterState = State_Stopped;
+
+    LeaveCriticalSection(&m_Lock);
+
+    return hr;
 }
 
 HRESULT
@@ -2526,17 +2695,28 @@ CKsProxy::Pause()
 {
     HRESULT hr = S_OK;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Pause\n");
+#endif
 
-    if (m_FilterState == State_Stopped)
-    {
-        hr = SetPinState(KSSTATE_PAUSE);
-        if (FAILED(hr))
-            return hr;
+    EnterCriticalSection(&m_Lock);
 
+    if (m_FilterState == State_Running)
+    {
+        hr = SetPinState(KSSTATE_STOP);
     }
+    if (SUCCEEDED(hr))
+    {
+        if (m_FilterState == State_Stopped)
+        {
+            hr = SetPinState(KSSTATE_PAUSE);
+        }
+    }
+
+    if (SUCCEEDED(hr))
+        m_FilterState = State_Paused;
 
-    m_FilterState = State_Paused;
+    LeaveCriticalSection(&m_Lock);
     return hr;
 
 }
@@ -2548,23 +2728,32 @@ CKsProxy::Run(
 {
     HRESULT hr;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Run\n");
+#endif
+
+    EnterCriticalSection(&m_Lock);
 
     if (m_FilterState == State_Stopped)
     {
+        LeaveCriticalSection(&m_Lock);
         // setting filter state to pause
         hr = Pause();
         if (FAILED(hr))
             return hr;
 
+        EnterCriticalSection(&m_Lock);
         assert(m_FilterState == State_Paused);
     }
 
     hr = SetPinState(KSSTATE_RUN);
-    if (FAILED(hr))
-        return hr;
 
-    m_FilterState = State_Running;
+    if (SUCCEEDED(hr))
+    {
+        m_FilterState = State_Running;
+    }
+
+    LeaveCriticalSection(&m_Lock);
     return hr;
 }
 
@@ -2631,9 +2820,11 @@ CKsProxy::SetPinState(
         // now set state
         hr = KsSynchronousDeviceControl(hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&State, sizeof(KSSTATE), &BytesReturned);
 
+#ifdef KSPROXY_TRACE
         WCHAR Buffer[100];
         swprintf(Buffer, L"CKsProxy::SetPinState Index %u State %u hr %lx\n", Index, State, hr);
         OutputDebugStringW(Buffer);
+#endif
 
         if (FAILED(hr))
             return hr;
@@ -2647,6 +2838,9 @@ CKsProxy::GetState(
     DWORD dwMilliSecsTimeout,
     FILTER_STATE *State)
 {
+    if (!State)
+        return E_POINTER;
+
     *State = m_FilterState;
     return S_OK;
 }
@@ -2666,8 +2860,9 @@ CKsProxy::SetSyncSource(
     ULONG BytesReturned;
     PIN_DIRECTION PinDir;
 
-// Plug In Distributor: IKsClock 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::SetSyncSource\n");
+#endif
 
     // FIXME
     // need locks
@@ -2761,7 +2956,9 @@ CKsProxy::SetSyncSource(
     }
 
     m_ReferenceClock = pClock;
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::SetSyncSource done\n");
+#endif
     return S_OK;
 }
 
@@ -2770,7 +2967,9 @@ STDMETHODCALLTYPE
 CKsProxy::GetSyncSource(
     IReferenceClock **pClock)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::GetSyncSource\n");
+#endif
 
     if (!pClock)
         return E_POINTER;
@@ -2787,7 +2986,10 @@ STDMETHODCALLTYPE
 CKsProxy::EnumPins(
     IEnumPins **ppEnum)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::EnumPins\n");
+#endif
+
     return CEnumPins_fnConstructor(m_Pins, IID_IEnumPins, (void**)ppEnum);
 }
 
@@ -2798,7 +3000,9 @@ CKsProxy::FindPin(
 {
     ULONG PinId;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::FindPin\n");
+#endif
 
     if (!ppPin)
         return E_POINTER;
@@ -2834,7 +3038,9 @@ CKsProxy::QueryFilterInfo(
     if (!pInfo)
         return E_POINTER;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::QueryFilterInfo\n");
+#endif
 
     pInfo->achName[0] = L'\0';
     pInfo->pGraph = m_pGraph;
@@ -2851,7 +3057,11 @@ CKsProxy::JoinFilterGraph(
     IFilterGraph *pGraph,
     LPCWSTR pName)
 {
-    OutputDebugStringW(L"CKsProxy::JoinFilterGraph\n");
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[100];
+    swprintf(Buffer, L"CKsProxy::JoinFilterGraph pName %s pGraph %p m_Ref %u\n", pName, pGraph, m_Ref);
+    OutputDebugStringW(Buffer);
+#endif
 
     if (pGraph)
     {
@@ -2873,7 +3083,9 @@ STDMETHODCALLTYPE
 CKsProxy::QueryVendorInfo(
     LPWSTR *pVendorInfo)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::QueryVendorInfo\n");
+#endif
     return StringFromCLSID(CLSID_Proxy, pVendorInfo);
 }
 
@@ -2885,7 +3097,10 @@ HRESULT
 STDMETHODCALLTYPE
 CKsProxy::Register()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Register : NotImplemented\n");
+#endif
+
     return E_NOTIMPL;
 }
 
@@ -2893,7 +3108,9 @@ HRESULT
 STDMETHODCALLTYPE
 CKsProxy::Unregister()
 {
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsProxy::Unregister : NotImplemented\n");
+#endif
     return E_NOTIMPL;
 }
 
@@ -2904,11 +3121,13 @@ CKsProxy_Constructor(
     REFIID riid,
     LPVOID * ppv)
 {
+#ifdef KSPROXY_TRACE
     WCHAR Buffer[100];
     LPOLESTR pstr;
     StringFromCLSID(riid, &pstr);
     swprintf(Buffer, L"CKsProxy_Constructor pUnkOuter %p riid %s\n", pUnkOuter, pstr);
     OutputDebugStringW(Buffer);
+#endif
 
     CKsProxy * handler = new CKsProxy();
 
index 88459d8..df693b2 100644 (file)
@@ -88,7 +88,9 @@ STDMETHODCALLTYPE
 CKsQualityForwarder::KsFlushClient(
     IN IKsPin  *Pin)
 {
+#ifdef KSPROXY_TRACE
     OutputDebugString("UNIMPLEMENTED\n");
+#endif
 }
 
 HRESULT
@@ -101,14 +103,18 @@ CKsQualityForwarder_Constructor(
     HRESULT hr;
     HANDLE handle;
 
+#ifdef KSPROXY_TRACE
     OutputDebugStringW(L"CKsQualityForwarder_Constructor\n");
+#endif
 
     // open default clock
     hr = KsOpenDefaultDevice(KSCATEGORY_QUALITY, GENERIC_READ | GENERIC_WRITE, &handle);
 
     if (hr != NOERROR)
     {
+#ifdef KSPROXY_TRACE
          OutputDebugString("CKsClockForwarder_Constructor failed to open device\n");
+#endif
          return hr;
     }
 
diff --git a/reactos/dll/nls/idndl/idndl.def b/reactos/dll/nls/idndl/idndl.def
deleted file mode 100644 (file)
index 921d731..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-LIBRARY        "idndl.dll"
-
-EXPORTS
-       DownlevelGetLocaleScripts    = DownlevelGetLocaleScripts@12 @1
-       DownlevelGetStringScripts@20 = kernel32.GetStringScripts    @2
-       DownlevelVerifyScripts@20    = kernel32.VerifyScripts       @3
index 1f14477..e130377 100644 (file)
@@ -7,5 +7,5 @@
        </group>
        <redefine name="WINVER">0x600</redefine>
        <file>idndl.cpp</file>
-       <importlibrary definition="idndl-$(ARCH).def" />
+       <importlibrary definition="idndl.spec" />
 </module>
diff --git a/reactos/dll/nls/idndl/idndl.spec b/reactos/dll/nls/idndl/idndl.spec
new file mode 100644 (file)
index 0000000..acb2b50
--- /dev/null
@@ -0,0 +1,4 @@
+
+ 1 stdcall DownlevelGetLocaleScripts(ptr ptr long) DownlevelGetLocaleScripts
+ 2 stdcall DownlevelGetStringScripts(long ptr long ptr long) kernel32.GetStringScripts
+ 3 stdcall DownlevelVerifyScripts(long ptr long ptr long) kernel32.VerifyScripts
index 99e0e99..4b16cdd 100644 (file)
@@ -16,8 +16,7 @@
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
-/* $Id$
- *
+/*
  * PROJECT:         ReactOS Access Control List Editor
  * FILE:            lib/acledit/acledit.c
  * PURPOSE:         Access Control List Editor
index b679c60..45d23c7 100644 (file)
@@ -1,5 +1,4 @@
-/* $Id$
- *
+/*
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS Access Control List Editor
  * FILE:            lib/acledit/stubs.c
index f64fcf3..c4f6bd0 100644 (file)
@@ -416,8 +416,8 @@ HRESULT STDMETHODCALLTYPE CMenuCallback::CallbackSM(LPSMDATA psmd, UINT uMsg, WP
                        if ((infoPtr->dwMask & SMIM_FLAGS) != 0)
                                if (psmd->uId == FCIDM_MENU_FAVORITES)
                                        infoPtr->dwFlags |= SMIF_DROPCASCADE;
-                               else
-                                       infoPtr->dwFlags |= SMIF_TRACKPOPUP;
+                               else{
+                                       infoPtr->dwFlags |= SMIF_TRACKPOPUP;}
                        if ((infoPtr->dwMask & SMIM_ICON) != 0)
                                infoPtr->iIcon = -1;
                        }
index 26e1c40..76688a1 100644 (file)
@@ -292,7 +292,7 @@ CreateBitmap(INT  Width,
              INT  Height,
              UINT  Planes,
              UINT  BitsPixel,
-             PCVOID pUnsafeBits)
+             CONST VOID* pUnsafeBits)
 {
     /* FIXME some part should be done in user mode */
     if (Width && Height)
index 29e4dd6..9ae79ca 100644 (file)
@@ -10,7 +10,6 @@ typedef VOID
 typedef VOID
 (WINAPI *PINTERFACE_DEREFERENCE)(
   PVOID  Context);
-#define DDKAPI __stdcall // FIXME
 #include <ntndk.h>
 #include <hidusage.h>
 #include <hidclass.h>
index e7e3c06..0af13df 100644 (file)
@@ -47,7 +47,7 @@ ConvertFiberToThread(VOID)
     pTeb->HasFiberData = FALSE;
 
     /* free the fiber */
-    if (pTeb->NtTib.FiberData != NULL)
+    if(pTeb->NtTib.FiberData != NULL)
     {
         RtlFreeHeap(GetProcessHeap(), 0, pTeb->NtTib.FiberData);
     }
index bb3e0e3..6f2d0c2 100644 (file)
@@ -10,6 +10,7 @@
        <define name="wcsnicmp">_wcsnicmp</define>
 
        <define name="_SETUPAPI_" />
+       <define name="_CFGMGR32_" />
        <library>pnp_client</library>
        <library>uuid</library>
        <library>wine</library>
index 50c2d42..a3ff489 100644 (file)
 
 #include <pseh/pseh2.h>
 
-/* This hack definition is necessary as long as setupapi 
-   depends on Wine "compatibility" headers */
-typedef ULONG RESOURCEID;
-typedef RESOURCEID *PRESOURCEID;
-
 #include <pnp_c.h>
 #include "rpc_private.h"
 #include "resource.h"
@@ -61,6 +56,8 @@ typedef RESOURCEID *PRESOURCEID;
 #define SETUP_DEVICE_INFO_SET_MAGIC 0xd00ff057
 #define SETUP_CLASS_IMAGE_LIST_MAGIC 0xd00ff058
 
+#define CMP_MAGIC  0x01234567
+
 struct DeviceInterface /* Element of DeviceInfo.InterfaceListHead */
 {
     LIST_ENTRY ListEntry;
index 6a0b722..7e4854c 100644 (file)
@@ -23,7 +23,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassUnload(PVOID ClassData)
 {
   PBATTERY_CLASS_DATA BattClass = ClassData;
@@ -44,7 +44,7 @@ BatteryClassUnload(PVOID ClassData)
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassSystemControl(PVOID ClassData,
                           PVOID WmiLibContext,
                           PDEVICE_OBJECT DeviceObject,
@@ -58,7 +58,7 @@ BatteryClassSystemControl(PVOID ClassData,
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassQueryWmiDataBlock(PVOID ClassData,
                               PDEVICE_OBJECT DeviceObject,
                               PIRP Irp,
@@ -74,7 +74,7 @@ BatteryClassQueryWmiDataBlock(PVOID ClassData,
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassStatusNotify(PVOID ClassData)
 {
   PBATTERY_CLASS_DATA BattClass = ClassData;
@@ -129,7 +129,7 @@ BatteryClassStatusNotify(PVOID ClassData)
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo,
                              PVOID *ClassData)
 {
@@ -172,7 +172,7 @@ BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo,
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassIoctl(PVOID ClassData,
                   PIRP Irp)
 {
index 4b9ec86..c3e5b7d 100644 (file)
@@ -7,6 +7,9 @@
 <directory name="cmbatt">
        <xi:include href="cmbatt/cmbatt.rbuild" />
 </directory>
+<directory name="compbatt">
+       <xi:include href="compbatt/compbatt.rbuild" />
+</directory>
 </group>
 
 <module name="acpi" type="kernelmodedriver" installbase="system32/drivers" installname="acpi.sys" allowwarnings="true">
@@ -26,6 +29,7 @@
        </directory>
        <file>osl.c</file>
        <file>acpienum.c</file>
+       <file>eval.c</file>
        <file>interface.c</file>
        <file>pnp.c</file>
        <file>power.c</file>
index 34aa076..ae04c2c 100644 (file)
@@ -58,6 +58,7 @@ KSPIN_LOCK    acpi_bus_event_lock;
 LIST_HEAD(acpi_bus_event_list);
 //DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
 KEVENT AcpiEventQueue;
+KDPC event_dpc;
 
 
 static int
@@ -455,6 +456,21 @@ acpi_bus_get_perf_flags (
                                 Event Management
    -------------------------------------------------------------------------- */
 
+void
+acpi_bus_generate_event_dpc(PKDPC Dpc,
+                            PVOID DeferredContext,
+                            PVOID SystemArgument1,
+                            PVOID SystemArgument2)
+{
+       struct acpi_bus_event *event = SystemArgument1;
+       KIRQL OldIrql;
+
+       KeAcquireSpinLock(&acpi_bus_event_lock, &OldIrql);
+       list_add_tail(&event->node, &acpi_bus_event_list);
+       KeReleaseSpinLock(&acpi_bus_event_lock, OldIrql);
+
+       KeSetEvent(&AcpiEventQueue, IO_NO_INCREMENT, FALSE);
+}
 
 int
 acpi_bus_generate_event (
@@ -463,10 +479,8 @@ acpi_bus_generate_event (
        int                     data)
 {
        struct acpi_bus_event   *event = NULL;
-       //unsigned long         flags = 0;
-       KIRQL OldIrql;
 
-       DPRINT1("acpi_bus_generate_event");
+       DPRINT("acpi_bus_generate_event");
 
        if (!device)
                return_VALUE(AE_BAD_PARAMETER);
@@ -484,14 +498,8 @@ acpi_bus_generate_event (
        event->type = type;
        event->data = data;
 
-       //spin_lock_irqsave(&acpi_bus_event_lock, flags);
-       KeAcquireSpinLock(&acpi_bus_event_lock, &OldIrql);
-       list_add_tail(&event->node, &acpi_bus_event_list);
-       KeReleaseSpinLock(&acpi_bus_event_lock, OldIrql);
-       //spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
-
-       KeSetEvent(&AcpiEventQueue, IO_NO_INCREMENT, FALSE);
-       //wake_up_interruptible(&acpi_bus_event_queue);
+       if (!KeInsertQueueDpc(&event_dpc, event, NULL))
+           ExFreePool(event);
 
        return_VALUE(0);
 }
@@ -506,7 +514,7 @@ acpi_bus_receive_event (
 
        //DECLARE_WAITQUEUE(wait, current);
 
-       DPRINT1("acpi_bus_receive_event");
+       DPRINT("acpi_bus_receive_event");
 
        if (!event)
                return AE_BAD_PARAMETER;
@@ -1153,9 +1161,11 @@ acpi_bus_add (
        case ACPI_BUS_TYPE_SYSTEM:
                sprintf(device->pnp.bus_id, "%s", "ACPI");
                break;
+       case ACPI_BUS_TYPE_POWER_BUTTONF:
        case ACPI_BUS_TYPE_POWER_BUTTON:
                sprintf(device->pnp.bus_id, "%s", "PWRF");
                break;
+       case ACPI_BUS_TYPE_SLEEP_BUTTONF:
        case ACPI_BUS_TYPE_SLEEP_BUTTON:
                sprintf(device->pnp.bus_id, "%s", "SLPF");
                break;
@@ -1262,9 +1272,15 @@ acpi_bus_add (
                hid = ACPI_THERMAL_HID;
                break;
        case ACPI_BUS_TYPE_POWER_BUTTON:
+               hid = ACPI_BUTTON_HID_POWER;
+               break;
+       case ACPI_BUS_TYPE_POWER_BUTTONF:
                hid = ACPI_BUTTON_HID_POWERF;
                break;
        case ACPI_BUS_TYPE_SLEEP_BUTTON:
+               hid = ACPI_BUTTON_HID_SLEEP;
+               break;
+       case ACPI_BUS_TYPE_SLEEP_BUTTONF:
                hid = ACPI_BUTTON_HID_SLEEPF;
                break;
        }
@@ -1326,7 +1342,9 @@ acpi_bus_add (
         */
        switch (type) {
        case ACPI_BUS_TYPE_POWER_BUTTON:
+       case ACPI_BUS_TYPE_POWER_BUTTONF:
        case ACPI_BUS_TYPE_SLEEP_BUTTON:
+       case ACPI_BUS_TYPE_SLEEP_BUTTONF:
                break;
        default:
                status = AcpiAttachData(device->handle,
@@ -1530,16 +1548,40 @@ acpi_bus_scan_fixed (
        if (!root)
                return_VALUE(AE_NOT_FOUND);
 
-       /*
-        * Enumerate all fixed-feature devices.
+       /* If ACPI_FADT_POWER_BUTTON is set, then a control
+        * method power button is present. Otherwise, a fixed
+        * power button is present.
         */
        if (AcpiGbl_FADT.Flags & ACPI_FADT_POWER_BUTTON)
                result = acpi_bus_add(&device, acpi_root, 
                        NULL, ACPI_BUS_TYPE_POWER_BUTTON);
+       else
+       {
+               /* Enable the fixed power button so we get notified if it is pressed */
+               AcpiWriteBitRegister(ACPI_BITREG_POWER_BUTTON_ENABLE, 1);
 
+               result = acpi_bus_add(&device, acpi_root,
+                       NULL, ACPI_BUS_TYPE_POWER_BUTTONF);
+       }
+
+       /* This one is a bit more complicated and we do it wrong
+        * right now. If ACPI_FADT_SLEEP_BUTTON is set but no
+        * device object is present then no sleep button is present, but
+        * if the flags is clear and there is no device object then it is
+        * a fixed sleep button. If the flag is set and there is a device object
+        * the we have a control method button just like above.
+        */
        if (AcpiGbl_FADT.Flags & ACPI_FADT_SLEEP_BUTTON)
                result = acpi_bus_add(&device, acpi_root, 
                        NULL, ACPI_BUS_TYPE_SLEEP_BUTTON);
+       else
+       {
+               /* Enable the fixed sleep button so we get notified if it is pressed */
+               AcpiWriteBitRegister(ACPI_BITREG_SLEEP_BUTTON_ENABLE, 1);
+
+               result = acpi_bus_add(&device, acpi_root,
+                       NULL, ACPI_BUS_TYPE_SLEEP_BUTTONF);
+       }
 
        return_VALUE(result);
 }
@@ -1549,120 +1591,6 @@ acpi_bus_scan_fixed (
                              Initialization/Cleanup
    -------------------------------------------------------------------------- */
 
-static int
-acpi_bus_init_irq (void)
-{
-       ACPI_STATUS             status = AE_OK;
-       ACPI_OBJECT     arg = {ACPI_TYPE_INTEGER};
-       ACPI_OBJECT_LIST        arg_list = {1, &arg};
-       //char                  *message = NULL;
-
-       DPRINT("acpi_bus_init_irq");
-
-       /* 
-        * Let the system know what interrupt model we are using by
-        * evaluating the \_PIC object, if exists.
-        */
-
-       //switch (acpi_irq_model) {
-       //case ACPI_IRQ_MODEL_PIC:
-       //      message = "PIC";
-       //      break;
-       //case ACPI_IRQ_MODEL_IOAPIC:
-       //      message = "IOAPIC";
-       //      break;
-       //case ACPI_IRQ_MODEL_IOSAPIC:
-       //      message = "IOSAPIC";
-       //      break;
-       //default:
-       //      DPRINT1("Unknown interrupt routing model\n");
-       //      return_VALUE(AE_NOT_FOUND);
-       //}
-
-       //DPRINT("Using %s for interrupt routing\n", message);
-
-       //arg.Integer.Value = acpi_irq_model;
-
-       //status = AcpiEvaluateObject(NULL, "\\_PIC", &arg_list, NULL);
-       //if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
-       //      ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PIC\n"));
-       //      return_VALUE(AE_NOT_FOUND);
-       //}
-
-       return_VALUE(0);
-}
-
-
-//void
-//acpi_early_init (void)
-//{
-//     ACPI_STATUS             status = AE_OK;
-//
-//     DPRINT("acpi_early_init");
-//
-//     if (acpi_disabled)
-//             return_VOID;
-//
-       /* enable workarounds, unless strict ACPI spec. compliance */
-//     if (!acpi_strict)
-//             acpi_gbl_enable_interpreter_slack = TRUE;
-//
-//     status = acpi_reallocate_root_table();
-//     if (ACPI_FAILURE(status)) {
-//             printk(KERN_ERR PREFIX
-//                    "Unable to reallocate ACPI tables\n");
-//             goto error0;
-//     }
-//
-//     status = acpi_initialize_subsystem();
-//     if (ACPI_FAILURE(status)) {
-//             printk(KERN_ERR PREFIX
-//                    "Unable to initialize the ACPI Interpreter\n");
-//             goto error0;
-//     }
-//
-//     status = acpi_load_tables();
-//     if (ACPI_FAILURE(status)) {
-//             printk(KERN_ERR PREFIX
-//                    "Unable to load the System Description Tables\n");
-//             goto error0;
-//     }
-//
-//#ifdef CONFIG_X86
-//     if (!acpi_ioapic) {
-//             /* compatible (0) means level (3) */
-//             if (!(acpi_sci_flags & ACPI_MADT_TRIGGER_MASK)) {
-//                     acpi_sci_flags &= ~ACPI_MADT_TRIGGER_MASK;
-//                     acpi_sci_flags |= ACPI_MADT_TRIGGER_LEVEL;
-//             }
-//             /* Set PIC-mode SCI trigger type */
-//             acpi_pic_sci_set_trigger(acpi_gbl_FADT.sci_interrupt,
-//                                      (acpi_sci_flags & ACPI_MADT_TRIGGER_MASK) >> 2);
-//     } else {
-//             /*
-//              * now that acpi_gbl_FADT is initialized,
-//              * update it with result from INT_SRC_OVR parsing
-//              */
-//             acpi_gbl_FADT.sci_interrupt = acpi_sci_override_gsi;
-//     }
-//#endif
-//
-//     status =
-//         acpi_enable_subsystem(~
-//                               (ACPI_NO_HARDWARE_INIT |
-//                                ACPI_NO_ACPI_ENABLE));
-//     if (ACPI_FAILURE(status)) {
-//             printk(KERN_ERR PREFIX "Unable to enable ACPI\n");
-//             goto error0;
-//     }
-//
-//     return;
-//
-//      error0:
-//     disable_acpi();
-//     return;
-//}
-
 int
 acpi_bus_init (void)
 {
@@ -1671,6 +1599,8 @@ acpi_bus_init (void)
 
        DPRINT("acpi_bus_init");
 
+        KeInitializeDpc(&event_dpc, acpi_bus_generate_event_dpc, NULL);
+
        status = AcpiEnableSubsystem(ACPI_FULL_INITIALIZATION);
        if (ACPI_FAILURE(status)) {
                DPRINT1("Unable to start the ACPI Interpreter\n");
@@ -1701,13 +1631,6 @@ acpi_bus_init (void)
        /* Initialize sleep structures */
        //acpi_sleep_init();
 
-       /*
-        * Get the system interrupt model and evaluate \_PIC.
-        */
-       result = acpi_bus_init_irq();
-       if (result)
-               goto error1;
-
        /*
         * Register the for all standard device notifications.
         */
@@ -1726,6 +1649,7 @@ acpi_bus_init (void)
        if (result)
                goto error2;
 
+
        /*
         * Enumerate devices in the ACPI namespace.
         */
@@ -1736,7 +1660,6 @@ acpi_bus_init (void)
        if (result)
                DPRINT1("acpi_bus_scan failed\n");
 
-       //acpi_motherboard_init();
        return_VALUE(0);
 
        /* Mimic structured exception handling */
index 5e3eb2b..9344a5f 100644 (file)
@@ -57,6 +57,11 @@ struct acpi_button {
        UINT8                   type;
        unsigned long           pushed;
 };
+
+struct acpi_device *power_button;
+struct acpi_device *sleep_button;
+struct acpi_device *lid_button;
+
 /* --------------------------------------------------------------------------
                                 Driver Interface
    -------------------------------------------------------------------------- */
@@ -113,10 +118,6 @@ acpi_button_add (
        ACPI_STATUS             status = AE_OK;
        struct acpi_button      *button = NULL;
 
-       static struct acpi_device *power_button;
-       static struct acpi_device *sleep_button;
-       static struct acpi_device *lid_button;
-
        ACPI_FUNCTION_TRACE("acpi_button_add");
 
        if (!device)
index ed6439d..84bd1d8 100644 (file)
@@ -8,6 +8,9 @@
 #include <acpi_bus.h>
 #include <acpi_drivers.h>
 
+#include <initguid.h>
+#include <poclass.h>
+
 #define NDEBUG
 #include <debug.h>
 
@@ -33,9 +36,13 @@ Bus_PDO_PnP (
 {
     NTSTATUS                status;
     POWER_STATE             state;
+    struct acpi_device      *device = NULL;
 
     PAGED_CODE ();
 
+    if (DeviceData->AcpiHandle)
+        acpi_bus_get_device(DeviceData->AcpiHandle, &device);
+
     //
     // NB: Because we are a bus enumerator, we have no one to whom we could
     // defer these irps.  Therefore we do not pass them down but merely
@@ -45,7 +52,6 @@ Bus_PDO_PnP (
     switch (IrpStack->MinorFunction) {
 
     case IRP_MN_START_DEVICE:
-
         //
         // Here we do what ever initialization and ``turning on'' that is
         // required to allow others to access this device.
@@ -59,6 +65,43 @@ Bus_PDO_PnP (
             break;
         }
 
+        DeviceData->InterfaceName.Length = 0;
+
+        if (!device)
+        {
+            IoRegisterDeviceInterface(DeviceData->Common.Self,
+                                      &GUID_DEVICE_SYS_BUTTON,
+                                      NULL,
+                                      &DeviceData->InterfaceName);
+        }
+        else if (device->flags.hardware_id &&
+                 strstr(device->pnp.hardware_id, ACPI_THERMAL_HID))
+        {
+            IoRegisterDeviceInterface(DeviceData->Common.Self,
+                                      &GUID_DEVICE_THERMAL_ZONE,
+                                      NULL,
+                                      &DeviceData->InterfaceName);
+        }
+        else if (device->flags.hardware_id &&
+                 strstr(device->pnp.hardware_id, ACPI_BUTTON_HID_LID))
+        {
+            IoRegisterDeviceInterface(DeviceData->Common.Self,
+                                      &GUID_DEVICE_LID,
+                                      NULL,
+                                      &DeviceData->InterfaceName);
+        }
+        else if (device->flags.hardware_id &&
+                 strstr(device->pnp.hardware_id, ACPI_PROCESSOR_HID))
+        {
+            IoRegisterDeviceInterface(DeviceData->Common.Self,
+                                      &GUID_DEVICE_PROCESSOR,
+                                      NULL,
+                                      &DeviceData->InterfaceName);
+        }
+
+        if (DeviceData->InterfaceName.Length != 0)
+            IoSetDeviceInterfaceState(&DeviceData->InterfaceName, TRUE);
+
         state.DeviceState = PowerDeviceD0;
         PoSetPowerState(DeviceData->Common.Self, DevicePowerState, state);
         DeviceData->Common.DevicePowerState = PowerDeviceD0;
@@ -68,6 +111,9 @@ Bus_PDO_PnP (
 
     case IRP_MN_STOP_DEVICE:
 
+        if (DeviceData->InterfaceName.Length != 0)
+            IoSetDeviceInterfaceState(&DeviceData->InterfaceName, FALSE);
+
         //
         // Here we shut down the device and give up and unmap any resources
         // we acquired for the device.
@@ -331,20 +377,17 @@ Bus_PDO_QueryDeviceCaps(
        deviceCapabilities->UniqueID = device->flags.unique_id;
        deviceCapabilities->NoDisplayInUI = !device->status.show_in_ui;
        deviceCapabilities->Address = device->pnp.bus_address;
-       deviceCapabilities->RawDeviceOK = FALSE;
     }
-    else
+
+    if (!device ||
+        (device->flags.hardware_id &&
+         (strstr(device->pnp.hardware_id, ACPI_BUTTON_HID_LID) ||
+          strstr(device->pnp.hardware_id, ACPI_THERMAL_HID) ||
+          strstr(device->pnp.hardware_id, ACPI_PROCESSOR_HID))))
     {
-       deviceCapabilities->EjectSupported = FALSE;
-       deviceCapabilities->HardwareDisabled = FALSE;
-       deviceCapabilities->Removable = FALSE;
-       deviceCapabilities->SurpriseRemovalOK = FALSE;
-       deviceCapabilities->UniqueID = FALSE;
-       deviceCapabilities->NoDisplayInUI = FALSE;
-       deviceCapabilities->Address = 0;
-
-       /* The ACPI driver will run fixed buttons */
-       deviceCapabilities->RawDeviceOK = TRUE;
+        /* Allow ACPI to control the device if it is a lid button,
+         * a thermal zone, a processor, or a fixed feature button */
+        deviceCapabilities->RawDeviceOK = TRUE;
     }
 
     deviceCapabilities->SilentInstall = FALSE;
index 51c46db..34c85ad 100644 (file)
@@ -11,4 +11,5 @@
        <file>cmbpnp.c</file>
        <file>cmbwmi.c</file>
        <file>cmbatt.rc</file>
+       <pch>cmbatt.h</pch>
 </module>
index 7fb4ea5..543a8a7 100644 (file)
@@ -80,53 +80,248 @@ GetStringElement(IN PACPI_METHOD_ARGUMENT Argument,
 
 NTSTATUS
 NTAPI
-CmBattGetPsrData(PDEVICE_OBJECT DeviceObject,
-                 PULONG PsrData)
+CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject,
+                        IN ULONG IoControlCode,
+                        IN PVOID InputBuffer,
+                        IN ULONG InputBufferLength,
+                        IN PACPI_EVAL_OUTPUT_BUFFER OutputBuffer,
+                        IN ULONG OutputBufferLength)
 {
-    UNIMPLEMENTED;
-    return STATUS_NOT_IMPLEMENTED; 
+    PIRP Irp;
+    NTSTATUS Status;
+    KEVENT Event;
+    IO_STATUS_BLOCK IoStatusBlock;
+    PAGED_CODE();
+
+    /* Initialize our wait event */
+    KeInitializeEvent(&Event, SynchronizationEvent, 0);
+    
+    /* Allocate the IRP */
+    Irp = IoBuildDeviceIoControlRequest(IoControlCode,
+                                        DeviceObject,
+                                        InputBuffer,
+                                        InputBufferLength,
+                                        OutputBuffer,
+                                        OutputBufferLength,
+                                        0,
+                                        &Event,
+                                        &IoStatusBlock);
+    if (!Irp)
+    {
+        /* No IRP, fail */
+        if (CmBattDebug & 0x4C)
+            DbgPrint("CmBattSendDownStreamIrp: Failed to allocate Irp\n");
+        return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+    /* Call ACPI */
+    if (CmBattDebug & 0x40)
+        DbgPrint("CmBattSendDownStreamIrp: Irp %x [Tid] %x\n",
+                 Irp, KeGetCurrentThread());
+    Status = IoCallDriver(DeviceObject, Irp);
+    if (Status == STATUS_PENDING)
+    {
+        /* Wait for completion */
+        KeWaitForSingleObject(&Event,
+                              Executive,
+                              KernelMode,
+                              FALSE,
+                              NULL);
+        Status = Irp->IoStatus.Status;
+    }
+    
+    /* Check if caller wanted output */
+    if (OutputBuffer)
+    {
+        /* Make sure it's valid ACPI output buffer */
+        if ((OutputBuffer->Signature != ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE) ||
+            !(OutputBuffer->Count))
+        {
+            /* It isn't, so set failure code */
+            Status = STATUS_ACPI_INVALID_DATA;
+        }
+    }
+    
+    /* Return status */
+    if (CmBattDebug & 0x40)
+        DbgPrint("CmBattSendDownStreamIrp: Irp %x completed %x! [Tid] %x\n",
+                 Irp, Status, KeGetCurrentThread());
+    return Status;
 }
 
 NTSTATUS
 NTAPI
-CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
-                 PACPI_BIF_DATA BifData)
+CmBattGetPsrData(IN PDEVICE_OBJECT DeviceObject,
+                 OUT PULONG PsrData)
 {
-    UNIMPLEMENTED;
-    return STATUS_NOT_IMPLEMENTED;
+    NTSTATUS Status;
+    ACPI_EVAL_OUTPUT_BUFFER OutputBuffer;
+    ACPI_EVAL_INPUT_BUFFER InputBuffer;
+    PAGED_CODE();
+    if (CmBattDebug & 0x40)
+        DbgPrint("CmBattGetPsrData: Entered with Pdo %x Tid %x\n",
+                 DeviceObject, KeGetCurrentThread());
+    
+    /* Initialize to zero */
+    ASSERT(PsrData != NULL);
+    *PsrData = 0;
+      
+    /* Request the _PSR method */
+    *(PULONG)InputBuffer.MethodName = 'RSP_';
+    InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE;
+
+    /* Send it to ACPI */
+    Status = CmBattSendDownStreamIrp(DeviceObject,
+                                     IOCTL_ACPI_EVAL_METHOD,
+                                     &InputBuffer,
+                                     sizeof(InputBuffer),
+                                     &OutputBuffer,
+                                     sizeof(OutputBuffer));
+    if (NT_SUCCESS(Status))
+    {
+        /* Read the result */
+        Status = GetDwordElement(OutputBuffer.Argument, PsrData);
+        if (CmBattDebug & 0x440)
+            DbgPrint("CmBattGetPsrData: _PSR method returned %x \n", *PsrData);
+}
+    else if (CmBattDebug & 0x44C)
+    {
+        /* Failure */
+        DbgPrint("CmBattGetPsrData: Failed _PSR method - Status (0x%x)\n", Status);
+    }
+
+    /* Return status */
+    return Status;
 }
 
 NTSTATUS
 NTAPI
-CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
-                 PACPI_BST_DATA BstData)
+CmBattGetStaData(IN PDEVICE_OBJECT DeviceObject,
+                 OUT PULONG StaData)
 {
-    UNIMPLEMENTED;
-    return STATUS_NOT_IMPLEMENTED;
+    NTSTATUS Status;
+    ACPI_EVAL_OUTPUT_BUFFER OutputBuffer;
+    ACPI_EVAL_INPUT_BUFFER InputBuffer;
+    PAGED_CODE();
+    if (CmBattDebug & 0x40)
+        DbgPrint("CmBattGetStaData: Entered with Pdo %x Tid %x\n",
+                 DeviceObject, KeGetCurrentThread());
+    
+    /* Initialize to zero */
+    ASSERT(StaData != NULL);
+    *StaData = 0;
+      
+    /* Request the _PSR method */
+    *(PULONG)InputBuffer.MethodName = 'ATS_';
+    InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE;
+
+    /* Send it to ACPI */
+    Status = CmBattSendDownStreamIrp(DeviceObject,
+                                     IOCTL_ACPI_EVAL_METHOD,
+                                     &InputBuffer,
+                                     sizeof(InputBuffer),
+                                     &OutputBuffer,
+                                     sizeof(OutputBuffer));
+    if (NT_SUCCESS(Status))
+    {
+        /* Read the result */
+        Status = GetDwordElement(OutputBuffer.Argument, StaData);
+        if (CmBattDebug & 0x440)
+            DbgPrint("CmBattGetStaData: _STA method returned %x \n", *StaData);
 }   
+    else if (CmBattDebug & 0x44C)
+    {
+        /* Failure */
+        DbgPrint("CmBattGetStaData: Failed _STA method - Status (0x%x)\n", Status);
+        Status = STATUS_NO_SUCH_DEVICE;
+    }
+
+    /* Return status */
+    return Status;
+}
 
 NTSTATUS
 NTAPI
-CmBattGetStaData(PDEVICE_OBJECT DeviceObject,
-                 PULONG StaData)
+CmBattGetUniqueId(IN PDEVICE_OBJECT DeviceObject,
+                  OUT PULONG UniqueId)
 {
-    UNIMPLEMENTED;
-    return STATUS_NOT_IMPLEMENTED;
+    NTSTATUS Status;
+    ACPI_EVAL_OUTPUT_BUFFER OutputBuffer;
+    ACPI_EVAL_INPUT_BUFFER InputBuffer;
+    PAGED_CODE();
+    if (CmBattDebug & 0x40)
+        DbgPrint("CmBattGetUniqueId: Entered with Pdo %x Tid %x\n",
+                 DeviceObject, KeGetCurrentThread());
+    
+    /* Initialize to zero */
+    ASSERT(UniqueId != NULL);
+    *UniqueId = 0;
+      
+    /* Request the _PSR method */
+    *(PULONG)InputBuffer.MethodName = 'DIU_';
+    InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE;
+
+    /* Send it to ACPI */
+    Status = CmBattSendDownStreamIrp(DeviceObject,
+                                     IOCTL_ACPI_EVAL_METHOD,
+                                     &InputBuffer,
+                                     sizeof(InputBuffer),
+                                     &OutputBuffer,
+                                     sizeof(OutputBuffer));
+    if (NT_SUCCESS(Status))
+    {
+        /* Read the result */
+        Status = GetDwordElement(OutputBuffer.Argument, UniqueId);
+        if (CmBattDebug & 0x440)
+            DbgPrint("CmBattGetUniqueId: _UID method returned %x \n", *UniqueId);
+}
+    else if (CmBattDebug & 0x44C)
+    {
+        /* Failure */
+        DbgPrint("CmBattGetUniqueId: Failed _UID method - Status (0x%x)\n", Status);
+        Status = STATUS_NO_SUCH_DEVICE;
+    }
+
+    /* Return status */
+    return Status;
 }
 
 NTSTATUS
 NTAPI
-CmBattGetUniqueId(PDEVICE_OBJECT DeviceObject,
-                  PULONG UniqueId)
+CmBattSetTripPpoint(IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
+                    IN ULONG AlarmValue)
 {
-    UNIMPLEMENTED;
-    return STATUS_NOT_IMPLEMENTED;  
+    NTSTATUS Status;
+    ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER InputBuffer;
+    PAGED_CODE();
+    if (CmBattDebug & 0x440)
+        DbgPrint("CmBattSetTripPpoint: _BTP Alarm Value %x Device %x Tid %x\n",
+                 AlarmValue, DeviceExtension->DeviceId, KeGetCurrentThread);
+    
+    /* Request the _BTP method */
+    *(PULONG)InputBuffer.MethodName = 'PTB_';
+    InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_SIGNATURE;
+    InputBuffer.IntegerArgument = AlarmValue;
+
+    /* Send it to ACPI */
+    Status = CmBattSendDownStreamIrp(DeviceExtension->AttachedDevice,
+                                     IOCTL_ACPI_EVAL_METHOD,
+                                     &InputBuffer,
+                                     sizeof(InputBuffer),
+                                     NULL,
+                                     0);
+    if (!(NT_SUCCESS(Status)) && (CmBattDebug & 0x440))
+        DbgPrint("CmBattSetTripPpoint: Failed _BTP method on device %x - Status (0x%x)\n",
+                 DeviceExtension->DeviceId, Status);
+    
+    /* Return status */
+    return Status;
 }
 
 NTSTATUS
 NTAPI
-CmBattSetTripPpoint(PCMBATT_DEVICE_EXTENSION DeviceExtension,
-                    ULONG AlarmValue)
+CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
+                 PACPI_BIF_DATA BifData)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
@@ -134,12 +329,8 @@ CmBattSetTripPpoint(PCMBATT_DEVICE_EXTENSION DeviceExtension,
 
 NTSTATUS
 NTAPI
-CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject,
-                        IN ULONG IoControlCode,
-                        IN PVOID InputBuffer,
-                        IN ULONG InputBufferLength,
-                        IN PACPI_EVAL_OUTPUT_BUFFER OutputBuffer,
-                        IN ULONG OutputBufferLength)
+CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
+                 PACPI_BST_DATA BstData)
 {
     PIRP Irp;
     NTSTATUS Status;
@@ -167,7 +358,7 @@ CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject,
             DbgPrint("CmBattSendDownStreamIrp: Failed to allocate Irp\n");
         return STATUS_INSUFFICIENT_RESOURCES;
     }
+
     /* Call ACPI */
    if (CmBattDebug & 0x40)
        DbgPrint("CmBattSendDownStreamIrp: Irp %x [Tid] %x\n", Irp, KeGetCurrentThread());
diff --git a/reactos/drivers/bus/acpi/compbatt/compbatt.c b/reactos/drivers/bus/acpi/compbatt/compbatt.c
new file mode 100644 (file)
index 0000000..03d587c
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * PROJECT:         ReactOS Composite Battery Driver
+ * LICENSE:         BSD - See COPYING.ARM in the top level directory
+ * FILE:            boot/drivers/bus/acpi/compbatt/compbatt.c
+ * PURPOSE:         Main Initialization Code and IRP Handling
+ * PROGRAMMERS:     ReactOS Portable Systems Group
+ */
+
+/* INCLUDES *******************************************************************/
+
+#include "compbatt.h"
+
+/* GLOBALS ********************************************************************/
+
+ULONG CompBattDebug;
+
+/* FUNCTIONS ******************************************************************/
+
+NTSTATUS
+NTAPI
+CompBattOpenClose(IN PDEVICE_OBJECT DeviceObject,
+                  IN PIRP Irp)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattSystemControl(IN PDEVICE_OBJECT DeviceObject,
+                      IN PIRP Irp)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattMonitorIrpComplete(IN PDEVICE_OBJECT DeviceObject,
+                           IN PIRP Irp,
+                           IN PKEVENT Event)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattMonitorIrpCompleteWorker(IN PCOMPBATT_BATTERY_ENTRY BatteryData)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattRecalculateTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattIoctl(IN PDEVICE_OBJECT DeviceObject,
+              IN PIRP Irp)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattQueryTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
+                 OUT PULONG Tag)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattDisableStatusNotify(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattSetStatusNotify(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
+                        IN ULONG BatteryTag,
+                        IN PBATTERY_NOTIFY BatteryNotify)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetBatteryStatus(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
+                         IN ULONG Tag)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattQueryStatus(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
+                    IN ULONG Tag,
+                    IN PBATTERY_STATUS BatteryStatus)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetBatteryInformation(OUT PBATTERY_INFORMATION BatteryInformation,
+                              IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetBatteryGranularity(OUT PBATTERY_REPORTING_SCALE ReportingScale,
+                              IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetEstimatedTime(OUT PULONG Time,
+                         IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+    
+NTSTATUS
+NTAPI
+CompBattQueryInformation(IN PCOMPBATT_DEVICE_EXTENSION FdoExtension,
+                         IN ULONG Tag,
+                         IN BATTERY_QUERY_INFORMATION_LEVEL InfoLevel,
+                         IN OPTIONAL LONG AtRate,
+                         IN PVOID Buffer,
+                         IN ULONG BufferLength,
+                         OUT PULONG ReturnedLength)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+DriverEntry(IN PDRIVER_OBJECT DriverObject,
+            IN PUNICODE_STRING RegistryPath)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+/* EOF */
diff --git a/reactos/drivers/bus/acpi/compbatt/compbatt.h b/reactos/drivers/bus/acpi/compbatt/compbatt.h
new file mode 100644 (file)
index 0000000..701f136
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * PROJECT:         ReactOS Composite Battery Driver
+ * LICENSE:         BSD - See COPYING.ARM in the top level directory
+ * FILE:            boot/drivers/bus/acpi/compbatt/compbatt.h
+ * PURPOSE:         Main Header File
+ * PROGRAMMERS:     ReactOS Portable Systems Group
+ */
+
+#include <ntddk.h>
+#include <initguid.h>
+#include <batclass.h>
+#include <debug.h>
+
+typedef struct _COMPBATT_BATTERY_ENTRY
+{
+    LIST_ENTRY BatteryLink;
+    IO_REMOVE_LOCK RemoveLock;
+    PDEVICE_OBJECT DeviceObject;
+    PIRP Irp;
+    WORK_QUEUE_ITEM WorkItem;
+    BOOLEAN WaitFlag;
+    BATTERY_WAIT_STATUS WaitStatus;
+    union
+    {
+        BATTERY_WAIT_STATUS WorkerWaitStatus;
+        BATTERY_STATUS WorkerStatus;
+    };
+    ULONG Tag;
+    ULONG Flags;
+    BATTERY_INFORMATION BatteryInformation;
+    BATTERY_STATUS BatteryStatus;
+    ULONGLONG InterruptTime;
+    UNICODE_STRING BatteryName;
+} COMPBATT_BATTERY_ENTRY, *PCOMPBATT_BATTERY_ENTRY;
+
+typedef struct _COMPBATT_DEVICE_EXTENSION
+{
+    PVOID ClassData;
+    ULONG NextTag;
+    LIST_ENTRY BatteryList;
+    FAST_MUTEX Lock;
+    ULONG Tag;
+    ULONG Flags;
+    BATTERY_INFORMATION BatteryInformation;
+    BATTERY_STATUS BatteryStatus;
+    ULONGLONG InterruptTime;
+    POWER_STATE PowerState;
+    ULONG LowCapacity;
+    ULONG HighCapacity;
+    PDEVICE_OBJECT AttachedDevice;
+    PDEVICE_OBJECT DeviceObject;
+    PVOID NotificationEntry;
+} COMPBATT_DEVICE_EXTENSION, *PCOMPBATT_DEVICE_EXTENSION;
+
+extern ULONG CmBattDebug;
+
+/* EOF */
diff --git a/reactos/drivers/bus/acpi/compbatt/compbatt.rbuild b/reactos/drivers/bus/acpi/compbatt/compbatt.rbuild
new file mode 100644 (file)
index 0000000..6a92873
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
+<module name="compbatt" type="kernelmodedriver" installbase="system32/drivers" installname="compbatt.sys">
+       <library>ntoskrnl</library>
+       <library>hal</library>
+       <library>battc</library>
+       <include base="compbatt">.</include>
+       <file>compbatt.c</file>
+       <file>compmisc.c</file>
+       <file>comppnp.c</file>
+       <file>compbatt.rc</file>
+       <pch>compbatt.h</pch>
+</module>
diff --git a/reactos/drivers/bus/acpi/compbatt/compbatt.rc b/reactos/drivers/bus/acpi/compbatt/compbatt.rc
new file mode 100644 (file)
index 0000000..a7ec820
--- /dev/null
@@ -0,0 +1,5 @@
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION   "Composite Battery Driver\0"
+#define REACTOS_STR_INTERNAL_NAME          "compbatt\0"
+#define REACTOS_STR_ORIGINAL_FILENAME  "compbatt.sys\0"
+#include <reactos/version.rc>
diff --git a/reactos/drivers/bus/acpi/compbatt/compmisc.c b/reactos/drivers/bus/acpi/compbatt/compmisc.c
new file mode 100644 (file)
index 0000000..3f75d4b
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * PROJECT:         ReactOS Composite Battery Driver
+ * LICENSE:         BSD - See COPYING.ARM in the top level directory
+ * FILE:            boot/drivers/bus/acpi/compbatt/compmisc.c
+ * PURPOSE:         Miscellaneous Support Routines
+ * PROGRAMMERS:     ReactOS Portable Systems Group
+ */
+
+/* INCLUDES *******************************************************************/
+
+#include "compbatt.h"
+
+/* FUNCTIONS ******************************************************************/
+
+NTSTATUS
+NTAPI
+BatteryIoctl(IN ULONG IoControlCode, 
+             IN PDEVICE_OBJECT DeviceObject,
+             IN PVOID InputBuffer,
+             IN ULONG InputBufferLength,
+             IN PVOID OutputBuffer,
+             IN ULONG OutputBufferLength,
+             IN BOOLEAN InternalDeviceIoControl)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetDeviceObjectPointer(IN PCUNICODE_STRING DeviceName,
+                               IN ACCESS_MASK DesiredAccess,
+                               OUT PFILE_OBJECT *FileObject,
+                               OUT PDEVICE_OBJECT *DeviceObject)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+/* EOF */
diff --git a/reactos/drivers/bus/acpi/compbatt/comppnp.c b/reactos/drivers/bus/acpi/compbatt/comppnp.c
new file mode 100644 (file)
index 0000000..a767c18
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * PROJECT:         ReactOS Composite Battery Driver
+ * LICENSE:         BSD - See COPYING.ARM in the top level directory
+ * FILE:            boot/drivers/bus/acpi/compbatt/comppnp.c
+ * PURPOSE:         Plug-and-Play IOCTL/IRP Handling
+ * PROGRAMMERS:     ReactOS Portable Systems Group
+ */
+
+/* INCLUDES *******************************************************************/
+
+#include "compbatt.h"
+
+/* FUNCTIONS ******************************************************************/
+NTSTATUS
+NTAPI
+CompBattPowerDispatch(IN PDEVICE_OBJECT DeviceObject,
+                      IN PIRP Irp)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+PCOMPBATT_BATTERY_ENTRY
+NTAPI
+RemoveBatteryFromList(IN PCUNICODE_STRING BatteryName,
+                      IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return NULL;
+}
+
+BOOLEAN
+NTAPI
+IsBatteryAlreadyOnList(IN PCUNICODE_STRING BatteryName,
+                       IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return FALSE;
+}
+
+NTSTATUS
+NTAPI
+CompBattAddNewBattery(IN PCUNICODE_STRING BatteryName,
+                      IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattRemoveBattery(IN PCUNICODE_STRING BatteryName,
+                      IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetBatteries(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattPnpEventHandler(IN PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification,
+                        IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattAddDevice(IN PDRIVER_OBJECT DriverObject,
+                  IN PDEVICE_OBJECT PdoDeviceObject)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattPnpDispatch(IN PDEVICE_OBJECT DeviceObject,
+                    IN PIRP Irp)
+{
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+/* EOF */
diff --git a/reactos/drivers/bus/acpi/eval.c b/reactos/drivers/bus/acpi/eval.c
new file mode 100644 (file)
index 0000000..68af857
--- /dev/null
@@ -0,0 +1,180 @@
+#include <ntddk.h>
+
+#include <acpi.h>
+
+#include <acpisys.h>
+#include <acpi_bus.h>
+#include <acpi_drivers.h>
+#include <acpiioct.h>
+
+#include <glue.h>
+#include <accommon.h>
+#include <acobject.h>
+#include <actypes.h>
+
+#include <wdmguid.h>
+#define NDEBUG
+#include <debug.h>
+
+NTSTATUS
+NTAPI
+Bus_PDO_EvalMethod(PPDO_DEVICE_DATA DeviceData,
+                   PIRP Irp)
+{
+  ULONG Signature;
+  NTSTATUS Status;
+  ACPI_OBJECT_LIST ParamList;
+  PACPI_EVAL_INPUT_BUFFER EvalInputBuff = Irp->AssociatedIrp.SystemBuffer;
+  ACPI_BUFFER RetBuff = {ACPI_ALLOCATE_BUFFER, NULL};
+  PACPI_EVAL_OUTPUT_BUFFER OutputBuf;
+  PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
+  ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER *SimpleInt;
+  ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING *SimpleStr;
+
+  if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ULONG))
+      return STATUS_INVALID_PARAMETER;
+
+  Signature = *((PULONG)Irp->AssociatedIrp.SystemBuffer);
+
+  switch (Signature)
+  {
+     case ACPI_EVAL_INPUT_BUFFER_SIGNATURE:
+        if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ACPI_EVAL_INPUT_BUFFER))
+            return STATUS_INVALID_PARAMETER;
+
+        ParamList.Count = 0;
+        break;
+
+     case ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_SIGNATURE:
+        SimpleInt = Irp->AssociatedIrp.SystemBuffer;
+
+        if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER))
+            return STATUS_INVALID_PARAMETER;
+
+        ParamList.Count = 1;
+
+        ParamList.Pointer = ExAllocatePool(NonPagedPool, sizeof(ACPI_OBJECT));
+        if (!ParamList.Pointer) return STATUS_INSUFFICIENT_RESOURCES;
+
+        ParamList.Pointer[0].Type = ACPI_TYPE_INTEGER;
+        ParamList.Pointer[0].Integer.Value = SimpleInt->IntegerArgument;
+        break;
+
+     case ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_SIGNATURE:
+        SimpleStr = Irp->AssociatedIrp.SystemBuffer;
+
+        if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING))
+            return STATUS_INVALID_PARAMETER;
+
+        ParamList.Count = 1;
+
+        ParamList.Pointer = ExAllocatePool(NonPagedPool, sizeof(ACPI_OBJECT));
+        if (!ParamList.Pointer) return STATUS_INSUFFICIENT_RESOURCES;
+
+        ParamList.Pointer[0].String.Pointer = (CHAR*)SimpleStr->String;
+        ParamList.Pointer[0].String.Length = SimpleStr->StringLength;
+        break;
+
+     default:
+        DPRINT1("Unsupported input buffer signature: %d\n", Signature);
+        return STATUS_NOT_IMPLEMENTED;
+  }
+
+  Status = AcpiEvaluateObject(DeviceData->AcpiHandle,
+                              (CHAR*)EvalInputBuff->MethodName,
+                              &ParamList,
+                              &RetBuff);
+
+  if (ParamList.Count != 0)
+      ExFreePool(ParamList.Pointer);
+
+  if (ACPI_SUCCESS(Status))
+  {
+      ACPI_OBJECT *Obj = RetBuff.Pointer;
+      ULONG ExtraParamLength;
+
+      /* If we didn't get anything back then we're done */
+      if (!RetBuff.Pointer || RetBuff.Length == 0)
+          return STATUS_SUCCESS;
+
+      switch (Obj->Type)
+      {
+          case ACPI_TYPE_INTEGER:
+             ExtraParamLength = sizeof(ULONG);
+             break;
+
+          case ACPI_TYPE_STRING:
+             ExtraParamLength = Obj->String.Length;
+             break;
+
+          case ACPI_TYPE_BUFFER:
+             ExtraParamLength = Obj->Buffer.Length;
+             break;
+
+          case ACPI_TYPE_PACKAGE:
+             DPRINT1("ACPI_TYPE_PACKAGE not supported yet!\n");
+             return STATUS_UNSUCCESSFUL;
+
+          default:
+             ASSERT(FALSE);
+             return STATUS_UNSUCCESSFUL;
+      }
+
+      /* Enough space for a ULONG is always included */
+      if (ExtraParamLength >= sizeof(ULONG))
+          ExtraParamLength -= sizeof(ULONG);
+      else
+          ExtraParamLength = 0;
+
+      OutputBuf = ExAllocatePool(NonPagedPool, sizeof(ACPI_EVAL_OUTPUT_BUFFER) +
+                                               ExtraParamLength);
+      if (!OutputBuf) return STATUS_INSUFFICIENT_RESOURCES;
+
+      OutputBuf->Signature = ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE;
+      OutputBuf->Length = ExtraParamLength + sizeof(ACPI_METHOD_ARGUMENT);
+      OutputBuf->Count = 1;
+
+      switch (Obj->Type)
+      {
+          case ACPI_TYPE_INTEGER:
+             ACPI_METHOD_SET_ARGUMENT_INTEGER(OutputBuf->Argument, Obj->Integer.Value);
+             break;
+
+          case ACPI_TYPE_STRING:
+             ACPI_METHOD_SET_ARGUMENT_STRING(OutputBuf->Argument, Obj->String.Pointer);
+             break;
+
+          case ACPI_TYPE_BUFFER:
+             ACPI_METHOD_SET_ARGUMENT_BUFFER(OutputBuf->Argument, Obj->Buffer.Pointer, Obj->Buffer.Length);
+             break;
+
+          case ACPI_TYPE_PACKAGE:
+             DPRINT1("ACPI_TYPE_PACKAGE not supported yet!\n");
+             return STATUS_UNSUCCESSFUL;
+
+          default:
+             ASSERT(FALSE);
+             return STATUS_UNSUCCESSFUL;
+      }
+
+      if (IrpSp->Parameters.DeviceIoControl.OutputBufferLength >= sizeof(ACPI_EVAL_OUTPUT_BUFFER) +
+                                                                  ExtraParamLength)
+      {
+          RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, OutputBuf, sizeof(ACPI_EVAL_OUTPUT_BUFFER) +
+                                                                    ExtraParamLength);
+          Irp->IoStatus.Information = sizeof(ACPI_EVAL_OUTPUT_BUFFER) + ExtraParamLength;
+          ExFreePool(OutputBuf);
+          return STATUS_SUCCESS;
+      }
+      else
+      {
+          ExFreePool(OutputBuf);
+          return STATUS_BUFFER_TOO_SMALL;
+      }
+  }
+  else
+  {
+      DPRINT1("Query method %s failed on %p\n", EvalInputBuff->MethodName, DeviceData->AcpiHandle);
+      return STATUS_UNSUCCESSFUL; 
+  }
+}
index d5fe9ef..d2dc22d 100644 (file)
@@ -73,6 +73,8 @@ enum acpi_bus_device_type {
        ACPI_BUS_TYPE_SYSTEM,
        ACPI_BUS_TYPE_POWER_BUTTON,
        ACPI_BUS_TYPE_SLEEP_BUTTON,
+       ACPI_BUS_TYPE_POWER_BUTTONF,
+       ACPI_BUS_TYPE_SLEEP_BUTTONF,
        ACPI_BUS_DEVICE_TYPE_COUNT
 };
 
index 368ac97..adf2a0c 100644 (file)
@@ -39,6 +39,7 @@ typedef struct _PDO_DEVICE_DATA
     // Link point to hold all the PDOs for a single bus together
     LIST_ENTRY  Link;
     ULONG       InterfaceRefCount;
+    UNICODE_STRING InterfaceName;
 
 } PDO_DEVICE_DATA, *PPDO_DEVICE_DATA;
 
@@ -64,10 +65,6 @@ typedef struct _FDO_DEVICE_DATA
     // A synchronization for access to the device extension.
     FAST_MUTEX      Mutex;
 
-    // The name returned from IoRegisterDeviceInterface,
-    // which is used as a handle for IoSetDeviceInterfaceState.
-    UNICODE_STRING      InterfaceName;
-
 } FDO_DEVICE_DATA, *PFDO_DEVICE_DATA;
 
 #define FDO_FROM_PDO(pdoData) \
@@ -90,6 +87,11 @@ NTSTATUS
 ACPIEnumerateDevices(
   PFDO_DEVICE_DATA DeviceExtension);
 
+NTSTATUS
+NTAPI
+Bus_PDO_EvalMethod(PPDO_DEVICE_DATA DeviceData,
+                   PIRP Irp);
+
 NTSTATUS
 NTAPI
 Bus_CreateClose (
index 3d1170e..bc1d78d 100644 (file)
@@ -6,6 +6,9 @@
 #include <acpi_bus.h>
 #include <acpi_drivers.h>
 
+#include <acpiioct.h>
+#include <poclass.h>
+
 #define NDEBUG
 #include <debug.h>
 
@@ -15,7 +18,8 @@
 
 #endif
 
-
+extern struct acpi_device *sleep_button;
+extern struct acpi_device *power_button;
 
 NTSTATUS
 NTAPI
@@ -29,7 +33,9 @@ Bus_AddDevice(
     PDEVICE_OBJECT      deviceObject = NULL;
     PFDO_DEVICE_DATA    deviceData = NULL;
     PWCHAR              deviceName = NULL;
+#ifndef NDEBUG
     ULONG               nameLength;
+#endif
 
     PAGED_CODE ();
 
@@ -164,36 +170,159 @@ End:
 
 NTSTATUS
 NTAPI
-ACPIDispatchDeviceControl(
+ACPIDispatchCreateClose(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp)
 {
-    PIO_STACK_LOCATION IrpSp;
-    NTSTATUS Status;
+   Irp->IoStatus.Status = STATUS_SUCCESS;
+   Irp->IoStatus.Information = 0;
 
-    DPRINT("Called. IRP is at (0x%X)\n", Irp);
+   IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
-    Irp->IoStatus.Information = 0;
+   return STATUS_SUCCESS;
+}
 
-    IrpSp  = IoGetCurrentIrpStackLocation(Irp);
-    switch (IrpSp->Parameters.DeviceIoControl.IoControlCode) {
-        default:
-            DPRINT("Unknown IOCTL 0x%X\n", IrpSp->Parameters.DeviceIoControl.IoControlCode);
-            Status = STATUS_NOT_IMPLEMENTED;
-            break;
-  }
+VOID
+NTAPI
+ButtonWaitThread(PVOID Context)
+{
+    PIRP Irp = Context;
+    int result;
+    struct acpi_bus_event event;
+    ULONG ButtonEvent;
 
-    if (Status != STATUS_PENDING) {
-        Irp->IoStatus.Status = Status;
+    while (ACPI_SUCCESS(result = acpi_bus_receive_event(&event)) &&
+           event.type != ACPI_BUTTON_NOTIFY_STATUS);
 
-        DPRINT("Completing IRP at 0x%X\n", Irp);
+    if (!ACPI_SUCCESS(result))
+    {
+       Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
+    }
+    else
+    {
+       if (strstr(event.bus_id, "PWRF"))
+           ButtonEvent = SYS_BUTTON_POWER;
+       else if (strstr(event.bus_id, "SLPF"))
+           ButtonEvent = SYS_BUTTON_SLEEP;
+       else
+           ButtonEvent = 0;
+
+       RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, &ButtonEvent, sizeof(ButtonEvent));
+       Irp->IoStatus.Status = STATUS_SUCCESS;
+       Irp->IoStatus.Information = sizeof(ULONG);
+    }
 
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
-  }
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+}
+    
 
-    DPRINT("Leaving. Status 0x%X\n", Status);
+NTSTATUS
+NTAPI
+ACPIDispatchDeviceControl(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PIRP Irp)
+{
+    PIO_STACK_LOCATION      irpStack;
+    NTSTATUS                status = STATUS_NOT_SUPPORTED;
+    PCOMMON_DEVICE_DATA     commonData;
+    ULONG Caps = 0;
+    HANDLE ThreadHandle;
+
+    PAGED_CODE ();
+
+    irpStack = IoGetCurrentIrpStackLocation (Irp);
+    ASSERT (IRP_MJ_DEVICE_CONTROL == irpStack->MajorFunction);
+
+    commonData = (PCOMMON_DEVICE_DATA) DeviceObject->DeviceExtension;
+
+    Irp->IoStatus.Information = 0;
+
+    if (!commonData->IsFDO)
+    {
+       switch (irpStack->Parameters.DeviceIoControl.IoControlCode)
+       {
+           case IOCTL_ACPI_EVAL_METHOD:
+              status = Bus_PDO_EvalMethod((PPDO_DEVICE_DATA)commonData,
+                                          Irp);
+              break;
+
+           case IOCTL_GET_SYS_BUTTON_CAPS:
+              if (irpStack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG))
+              {
+                  status = STATUS_BUFFER_TOO_SMALL;
+                  break;
+              }
+
+              if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0D"))
+              {
+                  DPRINT1("Lid button reported to power manager\n");
+                  Caps |= SYS_BUTTON_LID;
+              }
+              else if (((PPDO_DEVICE_DATA)commonData)->AcpiHandle == NULL)
+              {
+                  /* We have to return both at the same time because since we
+                   * have a NULL handle we are the fixed feature DO and we will
+                   * only be called once (not once per device)
+                   */
+                  if (power_button)
+                  {
+                      DPRINT1("Fixed power button reported to power manager\n");
+                      Caps |= SYS_BUTTON_POWER;
+                  }
+                  if (sleep_button)
+                  {
+                      DPRINT1("Fixed sleep button reported to power manager\n");
+                      Caps |= SYS_BUTTON_SLEEP;
+                  }
+              }
+              if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0C"))
+              {
+                  DPRINT1("Control method power button reported to power manager\n");
+                  Caps |= SYS_BUTTON_POWER;
+              }
+              else if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0E"))
+              {
+                  DPRINT1("Control method sleep reported to power manager\n");
+                  Caps |= SYS_BUTTON_SLEEP;
+              }
+              else
+              {
+                  DPRINT1("IOCTL_GET_SYS_BUTTON_CAPS sent to a non-button device\n");
+                  status = STATUS_INVALID_PARAMETER;
+              }
+
+              if (Caps != 0)
+              {
+                  RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, &Caps, sizeof(Caps));
+                  Irp->IoStatus.Information = sizeof(Caps);
+                  status = STATUS_SUCCESS;
+              }
+              break;
+
+           case IOCTL_GET_SYS_BUTTON_EVENT:
+              PsCreateSystemThread(&ThreadHandle, THREAD_ALL_ACCESS, 0, 0, 0, ButtonWaitThread, Irp);
+              ZwClose(ThreadHandle);
+
+              status = STATUS_PENDING;
+              break;
+
+           default:
+              DPRINT1("Unsupported IOCTL: %x\n", irpStack->Parameters.DeviceIoControl.IoControlCode);
+              break;
+       }
+    }
+    else
+       DPRINT1("IOCTL sent to the ACPI FDO! Kill the caller!\n");
 
-    return Status;
+    if (status != STATUS_PENDING)
+    {
+       Irp->IoStatus.Status = status;
+       IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    }
+    else
+       IoMarkIrpPending(Irp);
+
+    return status;
 }
 
 NTSTATUS
@@ -211,6 +340,8 @@ DriverEntry (
     DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ACPIDispatchDeviceControl;
     DriverObject->MajorFunction [IRP_MJ_PNP] = Bus_PnP;
     DriverObject->MajorFunction [IRP_MJ_POWER] = Bus_Power;
+    DriverObject->MajorFunction [IRP_MJ_CREATE] = ACPIDispatchCreateClose;
+    DriverObject->MajorFunction [IRP_MJ_CLOSE] = ACPIDispatchCreateClose;
 
     DriverObject->DriverExtension->AddDevice = Bus_AddDevice;
 
index f254995..a5df0c0 100644 (file)
@@ -576,7 +576,12 @@ AcpiOsWaitSemaphore(
     DPRINT("Waiting for semaphore %p\n", Handle);
     ASSERT(Mutex);
 
-    ExAcquireFastMutex(Mutex);
+    /* HACK: We enter here at a high IRQL sometimes
+     * because we get called from DPCs and ISRs and
+     * we can't use a fast mutex at that IRQL */
+    if (KeGetCurrentIrql() <= APC_LEVEL)
+        ExAcquireFastMutex(Mutex);
+
     return AE_OK;
 }
 
@@ -590,7 +595,12 @@ AcpiOsSignalSemaphore (
     DPRINT("AcpiOsSignalSemaphore %p\n",Handle);
     ASSERT(Mutex);
 
-    ExReleaseFastMutex(Mutex);
+    /* HACK: We enter here at a high IRQL sometimes
+     * because we get called from DPCs and ISRs and
+     * we can't use a fast mutex at that IRQL */
+    if (KeGetCurrentIrql() <= APC_LEVEL)
+        ExReleaseFastMutex(Mutex);
+
     return AE_OK;
 }
 
index 322d6d1..996353c 100644 (file)
@@ -1,10 +1,10 @@
 
 /* DDK/NDK/SDK Headers */
-#include <ddk/ntddk.h>
-#include <ddk/ntddmou.h>
-#include <ddk/ntifs.h>
-#include <ddk/tvout.h>
-#include <ndk/ntndk.h>
+#include <ntddk.h>
+#include <ntddmou.h>
+#include <ntifs.h>
+#include <tvout.h>
+#include <ntndk.h>
 
 #include <stdarg.h>
 #include <windef.h>
@@ -16,7 +16,7 @@
 #include <dde.h>
 
 
-#include <ddk/ddkmapi.h>
+#include <ddkmapi.h>
 
 /* Prototypes */
 VOID DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer);
index b457e6d..ccb2204 100644 (file)
@@ -1,9 +1,9 @@
 /* DDK/NDK/SDK Headers */
-#include <ddk/ntddk.h>
-#include <ddk/ntddmou.h>
-#include <ddk/ntifs.h>
-#include <ddk/tvout.h>
-#include <ndk/ntndk.h>
+#include <ntddk.h>
+#include <ntddmou.h>
+#include <ntifs.h>
+#include <tvout.h>
+#include <ntndk.h>
 
 /* Win32 Headers */
 #define WINBASEAPI
index bf2b784..dcf35d9 100644 (file)
@@ -42,8 +42,11 @@ typedef unsigned char   BYTE;
 /* REACTOS FIXME */
 #undef DeleteFile
 /* This is deprecated and should be changed in the EXT2FS driver. */
+
+/* FIXME : Those two definitions already exist in wdm.h
 #define RtlLargeIntegerLessThan(a, b) (a).QuadPart < (b).QuadPart
 #define RtlLargeIntegerGreaterThan(a, b) (a).QuadPart > (b).QuadPart
+*/
 
 
 // the following include files should be in the inc sub-dir associated with this driver
index de94b29..b6ed661 100644 (file)
 #define PST_RS232 1
 #define COMMPROP_INITIALIZED 0xE73CF52E
 
-#ifndef _NTIFS_
-/* Why is it only defined in ntifs.h file? */
-NTSTATUS NTAPI
-IoAttachDeviceToDeviceStackSafe(
-  IN PDEVICE_OBJECT SourceDevice,
-  IN PDEVICE_OBJECT TargetDevice,
-  OUT PDEVICE_OBJECT *AttachedToDeviceObject);
-#endif
-
 typedef enum
 {
   dsStopped,
index 9974b51..2648d4b 100644 (file)
@@ -77,7 +77,7 @@ extern "C" {
 
 SCSIPORT_API
 VOID
-DDKCDECLAPI
+__cdecl
 ScsiDebugPrint(
     ULONG DebugPrintLevel,
     PCCHAR DebugMessage,
@@ -1066,7 +1066,7 @@ IdeMediaStatus(
     IN UCHAR Channel
     );
 
-ULONG DDKAPI
+ULONG NTAPI
 AtapiFindController(
     IN PVOID HwDeviceExtension,
     IN PVOID Context,
index 650abf1..c0bcc22 100644 (file)
@@ -1015,7 +1015,7 @@ UniataEnumBusMasterController(
     PVOID Argument2
     );
 
-extern ULONG DDKAPI
+extern ULONG NTAPI
 UniataFindCompatBusMasterController1(
     IN PVOID HwDeviceExtension,
     IN PVOID Context,
@@ -1025,7 +1025,7 @@ UniataFindCompatBusMasterController1(
     OUT PBOOLEAN Again
     );
 
-extern ULONG DDKAPI
+extern ULONG NTAPI
 UniataFindCompatBusMasterController2(
     IN PVOID HwDeviceExtension,
     IN PVOID Context,
@@ -1044,7 +1044,7 @@ UniataAllocateLunExt(
     ULONG NewNumberChannels
     );
 
-extern ULONG DDKAPI
+extern ULONG NTAPI
 UniataFindBusMasterController(
     IN PVOID HwDeviceExtension,
     IN PVOID Context,
@@ -1054,7 +1054,7 @@ UniataFindBusMasterController(
     OUT PBOOLEAN Again
     );
 
-extern ULONG DDKAPI
+extern ULONG NTAPI
 UniataFindFakeBusMasterController(
     IN PVOID HwDeviceExtension,
     IN PVOID Context,
index e17416f..c0b9f4f 100644 (file)
@@ -86,9 +86,7 @@
 /*  Compiler dependencies                          */
 /***************************************************/
 
-#define DDKAPI          __stdcall
 #define DDKFASTAPI      __fastcall
-#define DDKCDECLAPI     __cdecl
 
 /* Are we under GNU C (mingw) ??? */
 #ifdef __GNUC__
index b279b34..480b6b4 100644 (file)
@@ -94,7 +94,7 @@ BOOLEAN WinVer_WDM_Model = FALSE;
 UCHAR g_foo = 0;
 
 BOOLEAN
-DDKAPI
+NTAPI
 AtapiResetController__(
     IN PVOID HwDeviceExtension,
     IN ULONG PathId,
@@ -115,7 +115,7 @@ AtapiHwInitialize__(
 #ifndef UNIATA_CORE
 
 VOID
-DDKAPI
+NTAPI
 AtapiCallBack_X(
     IN PVOID HwDeviceExtension
     );
@@ -129,13 +129,13 @@ AtapiCallBack_X(
 #endif
 
 RETTYPE_XXableInterrupts
-DDKAPI
+NTAPI
 AtapiInterruptDpc(
     IN PVOID HwDeviceExtension
     );
 
 RETTYPE_XXableInterrupts
-DDKAPI
+NTAPI
 AtapiEnableInterrupts__(
     IN PVOID HwDeviceExtension
     );
@@ -150,7 +150,7 @@ AtapiQueueTimerDpc(
     );
 
 SCSI_ADAPTER_CONTROL_STATUS
-DDKAPI
+NTAPI
 AtapiAdapterControl(
     IN PVOID HwDeviceExtension,
     IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
@@ -1005,7 +1005,7 @@ AtaUmode(PIDENTIFY_DATA2 ident)
 #ifndef UNIATA_CORE
 
 VOID
-DDKAPI
+NTAPI
 AtapiTimerDpc(
     IN PVOID HwDeviceExtension
     )
@@ -1856,7 +1856,7 @@ Return Value:
 
 --*/
 BOOLEAN
-DDKAPI
+NTAPI
 AtapiResetController(
     IN PVOID HwDeviceExtension,
     IN ULONG PathId
@@ -2598,7 +2598,7 @@ Return Value:
 
 --*/
 BOOLEAN
-DDKAPI
+NTAPI
 AtapiHwInitialize(
     IN PVOID HwDeviceExtension
     )
@@ -3210,7 +3210,7 @@ Return Value:
 
 --*/
 BOOLEAN
-DDKAPI
+NTAPI
 AtapiInterrupt(
     IN PVOID HwDeviceExtension
     )
@@ -3400,7 +3400,7 @@ AtapiInterrupt2(
 } // end AtapiInterrupt2()
 
 RETTYPE_XXableInterrupts
-DDKAPI
+NTAPI
 AtapiInterruptDpc(
     IN PVOID HwDeviceExtension
     )
@@ -3437,7 +3437,7 @@ AtapiInterruptDpc(
 
 
 RETTYPE_XXableInterrupts
-DDKAPI
+NTAPI
 AtapiEnableInterrupts__(
     IN PVOID HwDeviceExtension
     )
@@ -7251,7 +7251,7 @@ Return Value:
 
 --*/
 BOOLEAN
-DDKAPI
+NTAPI
 AtapiStartIo(
     IN PVOID HwDeviceExtension,
     IN PSCSI_REQUEST_BLOCK Srb
@@ -8343,7 +8343,7 @@ Return Value:
 --*/
 extern "C"
 ULONG
-DDKAPI
+NTAPI
 DriverEntry(
     IN PVOID DriverObject,
     IN PVOID Argument2
@@ -9059,7 +9059,7 @@ AtapiRegCheckParameterValue(
 
 
 SCSI_ADAPTER_CONTROL_STATUS
-DDKAPI
+NTAPI
 AtapiAdapterControl(
     IN PVOID HwDeviceExtension,
     IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
@@ -9152,7 +9152,7 @@ AtapiAdapterControl(
 extern "C"
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 HalDisplayString (
     PUCHAR String
     );
index aa4f7f1..b3795b2 100644 (file)
@@ -424,38 +424,38 @@ typedef struct _SCSI_WMI_REQUEST_BLOCK {
 
 typedef
 BOOLEAN
-(DDKAPI *PHW_INITIALIZE) (
+(NTAPI *PHW_INITIALIZE) (
     IN PVOID DeviceExtension
     );
 
 typedef
 BOOLEAN
-(DDKAPI *PHW_STARTIO) (
+(NTAPI *PHW_STARTIO) (
     IN PVOID DeviceExtension,
     IN PSCSI_REQUEST_BLOCK Srb
     );
 
 typedef
 BOOLEAN
-(DDKAPI *PHW_INTERRUPT) (
+(NTAPI *PHW_INTERRUPT) (
     IN PVOID DeviceExtension
     );
 
 typedef
 VOID
-(DDKAPI *PHW_TIMER) (
+(NTAPI *PHW_TIMER) (
     IN PVOID DeviceExtension
     );
 
 typedef
 VOID
-(DDKAPI *PHW_DMA_STARTED) (
+(NTAPI *PHW_DMA_STARTED) (
     IN PVOID DeviceExtension
     );
 
 typedef
 ULONG
-(DDKAPI *PHW_FIND_ADAPTER) (
+(NTAPI *PHW_FIND_ADAPTER) (
     IN PVOID DeviceExtension,
     IN PVOID HwContext,
     IN PVOID BusInformation,
@@ -466,14 +466,14 @@ ULONG
 
 typedef
 BOOLEAN
-(DDKAPI *PHW_RESET_BUS) (
+(NTAPI *PHW_RESET_BUS) (
     IN PVOID DeviceExtension,
     IN ULONG PathId
     );
 
 typedef
 BOOLEAN
-(DDKAPI *PHW_ADAPTER_STATE) (
+(NTAPI *PHW_ADAPTER_STATE) (
     IN PVOID DeviceExtension,
     IN PVOID Context,
     IN BOOLEAN SaveState
@@ -481,7 +481,7 @@ BOOLEAN
 
 typedef
 SCSI_ADAPTER_CONTROL_STATUS
-(DDKAPI *PHW_ADAPTER_CONTROL) (
+(NTAPI *PHW_ADAPTER_CONTROL) (
     IN PVOID DeviceExtension,
     IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
     IN PVOID Parameters
@@ -607,7 +607,7 @@ typedef struct _HW_INITIALIZATION_DATA_COMMON {
 //
 
 SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
 ScsiPortInitialize(
     IN PVOID Argument1,
     IN PVOID Argument2,
@@ -616,14 +616,14 @@ ScsiPortInitialize(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortFreeDeviceBase(
     IN PVOID HwDeviceExtension,
     IN PVOID MappedAddress
     );
 
 SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
 ScsiPortGetBusData(
     IN PVOID DeviceExtension,
     IN ULONG BusDataType,
@@ -634,7 +634,7 @@ ScsiPortGetBusData(
     );
 
 SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
 ScsiPortSetBusDataByOffset(
     IN PVOID DeviceExtension,
     IN ULONG BusDataType,
@@ -646,7 +646,7 @@ ScsiPortSetBusDataByOffset(
     );
 
 SCSIPORT_API
-PVOID DDKAPI
+PVOID NTAPI
 ScsiPortGetDeviceBase(
     IN PVOID HwDeviceExtension,
     IN INTERFACE_TYPE BusType,
@@ -657,7 +657,7 @@ ScsiPortGetDeviceBase(
     );
 
 SCSIPORT_API
-PVOID DDKAPI
+PVOID NTAPI
 ScsiPortGetLogicalUnit(
     IN PVOID HwDeviceExtension,
     IN UCHAR PathId,
@@ -666,7 +666,7 @@ ScsiPortGetLogicalUnit(
     );
 
 SCSIPORT_API
-PSCSI_REQUEST_BLOCK DDKAPI
+PSCSI_REQUEST_BLOCK NTAPI
 ScsiPortGetSrb(
     IN PVOID DeviceExtension,
     IN UCHAR PathId,
@@ -676,7 +676,7 @@ ScsiPortGetSrb(
     );
 
 SCSIPORT_API
-SCSI_PHYSICAL_ADDRESS DDKAPI
+SCSI_PHYSICAL_ADDRESS NTAPI
 ScsiPortGetPhysicalAddress(
     IN PVOID HwDeviceExtension,
     IN PSCSI_REQUEST_BLOCK Srb,
@@ -685,14 +685,14 @@ ScsiPortGetPhysicalAddress(
     );
 
 SCSIPORT_API
-PVOID DDKAPI
+PVOID NTAPI
 ScsiPortGetVirtualAddress(
     IN PVOID HwDeviceExtension,
     IN SCSI_PHYSICAL_ADDRESS PhysicalAddress
     );
 
 SCSIPORT_API
-PVOID DDKAPI
+PVOID NTAPI
 ScsiPortGetUncachedExtension(
     IN PVOID HwDeviceExtension,
     IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
@@ -700,13 +700,13 @@ ScsiPortGetUncachedExtension(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortFlushDma(
     IN PVOID DeviceExtension
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortIoMapTransfer(
     IN PVOID HwDeviceExtension,
     IN PSCSI_REQUEST_BLOCK Srb,
@@ -715,7 +715,7 @@ ScsiPortIoMapTransfer(
     );
 
 SCSIPORT_API
-VOID DDKCDECLAPI
+VOID __cdecl
 ScsiPortNotification(
     IN SCSI_NOTIFICATION_TYPE NotificationType,
     IN PVOID HwDeviceExtension,
@@ -723,7 +723,7 @@ ScsiPortNotification(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortLogError(
     IN PVOID HwDeviceExtension,
     IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
@@ -735,7 +735,7 @@ ScsiPortLogError(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortCompleteRequest(
     IN PVOID HwDeviceExtension,
     IN UCHAR PathId,
@@ -745,7 +745,7 @@ ScsiPortCompleteRequest(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortMoveMemory(
     IN PVOID WriteBuffer,
     IN PVOID ReadBuffer,
@@ -753,25 +753,25 @@ ScsiPortMoveMemory(
     );
 
 SCSIPORT_API
-UCHAR DDKAPI
+UCHAR NTAPI
 ScsiPortReadPortUchar(
     IN PUCHAR Port
     );
 
 SCSIPORT_API
-USHORT DDKAPI
+USHORT NTAPI
 ScsiPortReadPortUshort(
     IN PUSHORT Port
     );
 
 SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
 ScsiPortReadPortUlong(
     IN PULONG Port
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortReadPortBufferUchar(
     IN PUCHAR Port,
     IN PUCHAR Buffer,
@@ -779,7 +779,7 @@ ScsiPortReadPortBufferUchar(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortReadPortBufferUshort(
     IN PUSHORT Port,
     IN PUSHORT Buffer,
@@ -787,7 +787,7 @@ ScsiPortReadPortBufferUshort(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortReadPortBufferUlong(
     IN PULONG Port,
     IN PULONG Buffer,
@@ -795,25 +795,25 @@ ScsiPortReadPortBufferUlong(
     );
 
 SCSIPORT_API
-UCHAR DDKAPI
+UCHAR NTAPI
 ScsiPortReadRegisterUchar(
     IN PUCHAR Register
     );
 
 SCSIPORT_API
-USHORT DDKAPI
+USHORT NTAPI
 ScsiPortReadRegisterUshort(
     IN PUSHORT Register
     );
 
 SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
 ScsiPortReadRegisterUlong(
     IN PULONG Register
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortReadRegisterBufferUchar(
     IN PUCHAR Register,
     IN PUCHAR Buffer,
@@ -821,7 +821,7 @@ ScsiPortReadRegisterBufferUchar(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortReadRegisterBufferUshort(
     IN PUSHORT Register,
     IN PUSHORT Buffer,
@@ -829,7 +829,7 @@ ScsiPortReadRegisterBufferUshort(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortReadRegisterBufferUlong(
     IN PULONG Register,
     IN PULONG Buffer,
@@ -837,34 +837,34 @@ ScsiPortReadRegisterBufferUlong(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortStallExecution(
     IN ULONG Delay
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWritePortUchar(
     IN PUCHAR Port,
     IN UCHAR Value
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWritePortUshort(
     IN PUSHORT Port,
     IN USHORT Value
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWritePortUlong(
     IN PULONG Port,
     IN ULONG Value
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWritePortBufferUchar(
     IN PUCHAR Port,
     IN PUCHAR Buffer,
@@ -872,7 +872,7 @@ ScsiPortWritePortBufferUchar(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWritePortBufferUshort(
     IN PUSHORT Port,
     IN PUSHORT Buffer,
@@ -880,7 +880,7 @@ ScsiPortWritePortBufferUshort(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWritePortBufferUlong(
     IN PULONG Port,
     IN PULONG Buffer,
@@ -888,28 +888,28 @@ ScsiPortWritePortBufferUlong(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWriteRegisterUchar(
     IN PUCHAR Register,
     IN UCHAR Value
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWriteRegisterUshort(
     IN PUSHORT Register,
     IN USHORT Value
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWriteRegisterUlong(
     IN PULONG Register,
     IN ULONG Value
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWriteRegisterBufferUchar(
     IN PUCHAR Register,
     IN PUCHAR Buffer,
@@ -917,7 +917,7 @@ ScsiPortWriteRegisterBufferUchar(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWriteRegisterBufferUshort(
     IN PUSHORT Register,
     IN PUSHORT Buffer,
@@ -925,7 +925,7 @@ ScsiPortWriteRegisterBufferUshort(
     );
 
 SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
 ScsiPortWriteRegisterBufferUlong(
     IN PULONG Register,
     IN PULONG Buffer,
@@ -933,13 +933,13 @@ ScsiPortWriteRegisterBufferUlong(
     );
 
 SCSIPORT_API
-SCSI_PHYSICAL_ADDRESS DDKAPI
+SCSI_PHYSICAL_ADDRESS NTAPI
 ScsiPortConvertUlongToPhysicalAddress(
     ULONG UlongAddress
     );
 
 SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
 ScsiPortConvertPhysicalAddressToUlong(
     SCSI_PHYSICAL_ADDRESS Address
     );
@@ -947,7 +947,7 @@ ScsiPortConvertPhysicalAddressToUlong(
 #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
 
 SCSIPORT_API
-BOOLEAN DDKAPI
+BOOLEAN NTAPI
 ScsiPortValidateRange(
     IN PVOID HwDeviceExtension,
     IN INTERFACE_TYPE BusType,
@@ -960,7 +960,7 @@ ScsiPortValidateRange(
 // begin_ntminitape
 
 SCSIPORT_API
-VOID DDKCDECLAPI
+VOID __cdecl
 ScsiDebugPrint(
     ULONG DebugPrintLevel,
     PCCHAR DebugMessage,
index 97282f8..980965d 100644 (file)
@@ -26,7 +26,6 @@
 
 #define DDKFASTAPI __fastcall
 #define FASTCALL __fastcall
-#define DDKCDECLAPI __cdecl
 
 ULONG DbgPrint(PCCH Format,...);
 
index 5fcdc0a..7711a2c 100644 (file)
@@ -9,9 +9,9 @@
        </if>
 
        <if property="ARCH" value="amd64">
-           <directory name="halx86">
-                   <xi:include href="halx86/directory.rbuild" />
-           </directory>
+               <directory name="halx86">
+                       <xi:include href="halx86/directory.rbuild" />
+               </directory>
        </if>
 
        <if property="ARCH" value="powerpc">
index 16c1bc1..945b508 100644 (file)
@@ -8,15 +8,17 @@
 /* INCLUDES ******************************************************************/
 
 #include <asm.h>
-#include <internal/i386/asmmacro.S>
 .intel_syntax noprefix
 
 /* GLOBALS *******************************************************************/
 
+.globl _HalpPerfCounter
 _HalpLastPerfCounterLow:    .long 0
 _HalpLastPerfCounterHigh:   .long 0
+_HalpPerfCounter:
 _HalpPerfCounterLow:        .long 0
 _HalpPerfCounterHigh:       .long 0
+_HalpSystemHardwareFlags:   .long 0
 
 _UnhandledMsg:
     .asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx!!!\n"
@@ -327,6 +329,7 @@ AndItsNotYou:
     ret
 .endfunc
 
+#ifndef _MINIHAL_
 .globl _KeStallExecutionProcessor@4
 .func KeStallExecutionProcessor@4
 _KeStallExecutionProcessor@4:
@@ -357,6 +360,7 @@ Done:
     /* Return */
     ret 4
 .endfunc
+#endif
 
 .global _KeQueryPerformanceCounter@4
 .func KeQueryPerformanceCounter@4
@@ -517,72 +521,3 @@ InvalidCount:
     mov _HalpLastPerfCounterHigh, eax
     jmp LoopPreInt
 .endfunc
-
-.globl _HalpClockInterrupt@0
-.func HalpClockInterrupt@0
-TRAP_FIXUPS hci_a, hci_t, DoFixupV86, DoFixupAbios
-_HalpClockInterrupt@0:
-
-    /* Enter trap */
-    INT_PROLOG hci_a, hci_t, DoPushFakeErrorCode
-
-    /* Push vector and make stack for IRQL */
-    push 0x30
-    sub esp, 4
-
-    /* Begin the interrupt */
-    push esp
-    push 0x30
-    push CLOCK2_LEVEL
-    call _HalBeginSystemInterrupt@12
-
-    /* Check if it's spurious */
-    or al, al
-    jz Spurious
-
-    /* Update the performance counter */
-    xor ebx, ebx
-    mov eax, _HalpCurrentRollOver
-    add _HalpPerfCounterLow, eax
-    adc _HalpPerfCounterHigh, ebx
-
-    /* Get the time increment and check if someone changed the clock rate */
-    mov eax, _HalpCurrentTimeIncrement
-    cmp _HalpClockSetMSRate, ebx
-    jz _KeUpdateSystemTime@0
-
-    /* FIXME: Someone did! */
-    int 3
-
-Spurious:
-
-    /* Exit the interrupt */
-    add esp, 8
-    jmp _Kei386EoiHelper@0
-.endfunc
-
-.globl _HalpProfileInterrupt@0
-.func HalpProfileInterrupt@0
-TRAP_FIXUPS hpi_a, hpi_t, DoFixupV86, DoFixupAbios
-_HalpProfileInterrupt@0:
-
-    /* Enter trap */
-    INT_PROLOG hpi_a, hpi_t, DoPushFakeErrorCode
-
-    /* Push vector and make stack for IRQL */
-    push 0x38
-    sub esp, 4
-
-    /* Begin the interrupt */
-    push esp
-    push 0x38
-    push PROFILE_LEVEL
-    call _HalBeginSystemInterrupt@12
-
-    /* Check if it's spurious */
-    or al, al
-    jz Spurious
-
-    /* FIXME: We should not be getting profile interrupts yet! */
-    int 3
-.endfunc
diff --git a/reactos/hal/halx86/generic/i386/v86.s b/reactos/hal/halx86/generic/i386/v86.s
deleted file mode 100644 (file)
index 55d5f0a..0000000
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * FILE:            hal/halx86/generic/bios.S
- * COPYRIGHT:       See COPYING in the top level directory
- * PURPOSE:         V8086 Real-Mode BIOS Thunking
- * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include <asm.h>
-#include <internal/i386/asmmacro.S>
-.intel_syntax noprefix
-
-//
-// HAL BIOS Frame
-//
-#define HALP_BIOS_FRAME_SS          0x00
-#define HALP_BIOS_FRAME_ESP         0x04
-#define HALP_BIOS_FRAME_EFLAGS      0x08
-#define HALP_BIOS_FRAME_CS          0x0C
-#define HALP_BIOS_FRAME_EIP         0x10
-#define HALP_BIOS_FRAME_TRAP_FRAME  0x14
-#define HALP_BIOS_FRAME_CS_LIMIT    0x18
-#define HALP_BIOS_FRAME_CS_BASE     0x1C
-#define HALP_BIOS_FRAME_CS_FLAGS    0x20
-#define HALP_BIOS_FRAME_SS_LIMIT    0x24
-#define HALP_BIOS_FRAME_SS_BASE     0x28
-#define HALP_BIOS_FRAME_SS_FLAGS    0x2C
-#define HALP_BIOS_FRAME_PREFIX      0x30
-#define HALP_BIOS_FRAME_LENGTH      0x34
-
-/* GLOBALS *******************************************************************/
-
-_HalpSavedEsp:
-    .long 0
-
-_InvalidMsg:
-    .asciz "HAL: An invalid V86 opcode was encountered at address %x:%x\n"
-    
-_InvalidGpfMsg:
-    .asciz "HAL: Trap0D while not in V86 mode\n"
-    
-_UnhandledMsg:
-    .asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx [%s]!!!\n"
-
-/* FUNCTIONS *****************************************************************/
-
-.globl _HalpBiosCall@0
-.func HalpBiosCall@0
-_HalpBiosCall@0:
-
-    /* Set up stack pointer */
-    push ebp
-    mov ebp, esp
-
-    /* Build a trap frame */
-    pushfd
-    push edi
-    push esi
-    push ebx
-    push ds
-    push es
-    push fs
-    push gs
-    push offset _HalpRealModeEnd
-
-    /* Save the stack */
-    mov _HalpSavedEsp, esp
-
-    /* Turn off alignment faults */
-    mov eax, cr0
-    and eax, ~CR0_AM
-    mov cr0, eax
-
-    /* Setup a new stack */
-    mov esi, fs:KPCR_TSS
-    mov eax, esp
-    sub eax, NPX_FRAME_LENGTH
-    mov [esi+KTSS_ESP0], eax
-
-    /* Save V86 registers */
-    push 0
-    push 0
-    push 0
-    push 0
-    push 0x2000
-
-    /* Get linear delta between stack and code */
-    mov eax, offset _HalpRealModeEnd-4
-    sub eax, offset _HalpRealModeStart
-
-    /* Get offset of code */
-    mov edx, offset _HalpRealModeStart
-    and edx, 0xFFF
-
-    /* Add offset to linear address and save the new V86 SP */
-    add eax, edx
-    push eax
-
-    /* Start building interrupt frame. Setup V86 EFLAGS and IOPL 3 */
-    pushfd
-    or dword ptr [esp], EFLAGS_V86_MASK
-    or dword ptr [esp], 0x3000
-
-    /* Push the CS and IP */
-    push 0x2000
-    push edx
-
-    /* Do the interrupt return (jump to V86 mode) */
-    iretd
-
-.globl _HalpRealModeStart
-_HalpRealModeStart:
-
-    /* Set mode 13 */
-    mov ax, 0x12
-    .byte 0
-    .byte 0
-
-    /* Do the interrupt */
-    int 0x10
-
-    /* BOP to exit V86 mode */
-    .byte 0xC4
-    .byte 0xC4
-
-    /* The stack lives here */
-.align 4
-    .space 2048
-.globl _HalpRealModeEnd
-_HalpRealModeEnd:
-
-    /* We're back, clean up the trap frame */
-    pop gs
-    pop fs
-    pop es
-    pop ds
-    pop ebx
-    pop esi
-    pop edi
-    popfd
-
-    /* Return to caller */
-    pop ebp
-    ret 0
-.endfunc
-
-.globl _HalpOpcodeInvalid@0
-.func HalpOpcodeInvalid@0
-_HalpOpcodeInvalid@0:
-
-    /* This should never happen -- is the IOPM damaged? */
-    push [esi+HALP_BIOS_FRAME_EIP]
-    push [esi+HALP_BIOS_FRAME_CS]
-    push offset _InvalidMsg
-    call _DbgPrint
-    add esp, 12
-    
-    /* Break */
-    int 3
-
-    /* Nothing to return */
-    xor eax, eax
-    ret 0
-.endfunc
-
-.globl _HalpPushInt@0
-.func HalpPushInt@0
-_HalpPushInt@0:
-
-    /* Save EBX */
-    push ebx
-
-    /* Get SS offset and base */
-    mov edx, [esi+HALP_BIOS_FRAME_ESP]
-    mov ebx, [esi+HALP_BIOS_FRAME_SS_BASE]
-
-    /* Convert to 16-bits */
-    and edx, 0xFFFF
-    sub dx, 2
-
-    /* Get EFLAGS and write them into the linear address of SP */
-    mov ax, word ptr [esi+HALP_BIOS_FRAME_EFLAGS]
-    mov [ebx+edx], ax
-    sub dx, 2
-
-    /* Get CS segment and write it into SP */
-    mov ax, word ptr [esi+HALP_BIOS_FRAME_CS]
-    mov [ebx+edx], ax
-    sub dx, 2
-
-    /* Get IP and write it into SP */
-    mov ax, word ptr [esi+HALP_BIOS_FRAME_EIP]
-    mov [ebx+edx], ax
-
-    /* Get new IP value (the interrupt ID is in ECX, so this is in the IVT) */
-    mov eax, [ecx*4]
-    push eax
-
-    /* Now save the new IP */
-    movzx eax, ax
-    mov [esi+HALP_BIOS_FRAME_EIP], eax
-
-    /* Save the new CS of this IP */
-    pop eax
-    shr eax, 16
-    mov [esi+HALP_BIOS_FRAME_CS], eax
-
-    /* Update the stack pointer after our manual interrupt frame construction */
-    mov word ptr [esi+HALP_BIOS_FRAME_ESP], dx
-
-    /* Get CS and convert it to linear format */
-    mov eax, [esi+HALP_BIOS_FRAME_CS]
-    shl eax, 4
-    mov [esi+HALP_BIOS_FRAME_CS_BASE], eax
-    mov dword ptr [esi+HALP_BIOS_FRAME_CS_LIMIT], 0xFFFF
-    mov dword ptr [esi+HALP_BIOS_FRAME_CS_FLAGS], 0
-
-    /* Return success and restore EBX */
-    mov eax, 1
-    pop ebx
-    ret 0
-.endfunc
-
-.globl _HalpOpcodeINTnn@0
-.func HalpOpcodeINTnn@0
-_HalpOpcodeINTnn@0:
-
-    /* Save non-volatiles and stack */
-    push ebp
-    push esi
-    push ebx
-
-    /* Get SS and convert it to linear format */
-    mov eax, [esi+HALP_BIOS_FRAME_SS]
-    shl eax, 4
-    mov [esi+HALP_BIOS_FRAME_SS_BASE], eax
-    mov dword ptr [esi+HALP_BIOS_FRAME_SS_LIMIT], 0xFFFF
-    mov dword ptr [esi+HALP_BIOS_FRAME_SS_FLAGS], 0
-
-    /* Increase IP and check if we're past the CS limit */
-    inc dword ptr [esi+HALP_BIOS_FRAME_EIP]
-    mov edi, [esi+HALP_BIOS_FRAME_EIP]
-    cmp edi, [esi+HALP_BIOS_FRAME_CS_LIMIT]
-    ja EipLimitReached
-
-    /* Convert IP to linear address and read the interrupt number */
-    add edi, [esi+HALP_BIOS_FRAME_CS_BASE]
-    movzx ecx, byte ptr [edi]
-
-    /* Increase EIP and do the interrupt, check for status */
-    inc dword ptr [esi+HALP_BIOS_FRAME_EIP]
-    call _HalpPushInt@0
-    test eax, 0xFFFF
-    jz Done
-
-    /* Update the trap frame */
-    mov ebp, [esi+HALP_BIOS_FRAME_TRAP_FRAME]
-    mov eax, [esi+HALP_BIOS_FRAME_SS]
-    mov [ebp+KTRAP_FRAME_SS], eax
-    mov eax, [esi+HALP_BIOS_FRAME_ESP]
-    mov [ebp+KTRAP_FRAME_ESP], eax
-    mov eax, [esi+HALP_BIOS_FRAME_CS]
-    mov [ebp+KTRAP_FRAME_CS], eax
-    mov eax, [esi+HALP_BIOS_FRAME_EFLAGS]
-    mov [ebp+KTRAP_FRAME_EFLAGS], eax
-
-    /* Set success code */
-    mov eax, 1
-    
-Done:
-    /* Restore volatiles */
-    pop ebx
-    pop edi
-    pop ebp
-    ret 0
-    
-EipLimitReached:
-    /* Set failure code */
-    xor eax, eax
-    jmp Done
-.endfunc
-
-.globl _HalpDispatchV86Opcode@0
-.func HalpDispatchV86Opcode@0
-_HalpDispatchV86Opcode@0:
-
-    /* Make space for the HAL BIOS Frame on the stack */
-    push ebp
-    mov ebp, esp
-    sub esp, HALP_BIOS_FRAME_LENGTH
-    
-    /* Save non-volatiles */
-    push esi
-    push edi
-
-    /* Save pointer to the trap frame */
-    mov esi, [ebp]
-    mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_TRAP_FRAME], esi
-
-    /* Save SS */
-    movzx eax, word ptr [esi+KTRAP_FRAME_SS]
-    mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_SS], eax
-
-    /* Save ESP */
-    mov eax, [esi+KTRAP_FRAME_ESP]
-    mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_ESP], eax
-
-    /* Save EFLAGS */
-    mov eax, [esi+KTRAP_FRAME_EFLAGS]
-    mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_EFLAGS], eax
-
-    /* Save CS */
-    movzx eax, word ptr [esi+KTRAP_FRAME_CS]
-    mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_CS], eax
-
-    /* Save EIP */
-    mov eax, [esi+KTRAP_FRAME_EIP]
-    mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_EIP], eax
-
-    /* No prefix */
-    xor eax, eax
-    mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_PREFIX], eax
-
-    /* Set pointer to HAL BIOS Frame */
-    lea esi, [ebp-HALP_BIOS_FRAME_LENGTH]
-
-    /* Convert CS to linear format */
-    mov eax, [esi+HALP_BIOS_FRAME_CS]
-    shl eax, 4
-    mov [esi+HALP_BIOS_FRAME_CS_BASE], eax
-    mov dword ptr [esi+HALP_BIOS_FRAME_CS_LIMIT], 0xFFFF
-    mov dword ptr [esi+HALP_BIOS_FRAME_CS_FLAGS], 0
-
-    /* Make sure IP is within the CS Limit */
-    mov edi, [esi+HALP_BIOS_FRAME_EIP]
-    cmp edi, [esi+HALP_BIOS_FRAME_CS_LIMIT]
-    ja DispatchError
-
-    /* Convert IP to linear address and read the opcode */
-    add edi, [esi+HALP_BIOS_FRAME_CS_BASE]
-    mov dl, [edi]
-
-    /* We only deal with interrupts */
-    cmp dl, 0xCD
-    je DispatchInt
-
-    /* Anything else is invalid */
-    call _HalpOpcodeInvalid@0
-    jmp DispatchError
-    
-DispatchInt:
-    /* Handle dispatching the interrupt */
-    call _HalpOpcodeINTnn@0
-    test eax, 0xFFFF
-    jz DispatchReturn
-
-    /* Update the trap frame EIP */
-    mov edi, [ebp-0x20]
-    mov eax, [ebp-0x24]
-    mov [edi+KTRAP_FRAME_EIP], eax
-    
-    /* Set success code */
-    mov eax, 1
-    
-DispatchReturn:
-    /* Restore registers and return */
-    pop edi
-    pop esi
-    mov esp, ebp
-    pop ebp
-    ret 0
-    
-DispatchError:
-    /* Set failure code and return */
-    xor eax, eax
-    jmp DispatchReturn
-.endfunc
-
-.func Ki16BitStackException
-_Ki16BitStackException:
-
-    /* Save stack */
-    push ss
-    push esp
-
-    /* Go to kernel mode thread stack */
-    mov eax, PCR[KPCR_CURRENT_THREAD]
-    add esp, [eax+KTHREAD_INITIAL_STACK]
-
-    /* Switch to good stack segment */
-    UNHANDLED_PATH "16-Bit Stack"
-.endfunc
-
-.globl _HalpTrap0D@0
-.func HalpTrap0D@0
-TRAP_FIXUPS htd_a, htd_t, DoFixupV86, DoFixupAbios
-_HalpTrap0D@0:
-
-    /* Enter trap */
-    TRAP_PROLOG htd_a, htd_t
-    
-    /* Check if this is a V86 trap */
-    test dword ptr [ebp+KTRAP_FRAME_EFLAGS], EFLAGS_V86_MASK
-    jnz DoDispatch
-
-    /* This is weird -- but might happen during an NMI */
-    push offset _InvalidGpfMsg
-    call _DbgPrint
-    add esp, 4
-    
-    /* Loop forever */
-    jmp $
-
-DoDispatch:
-    /* Handle the opcode */
-    call _HalpDispatchV86Opcode@0
-
-    /* Exit the interrupt */
-    jmp _Kei386EoiHelper@0
-.endfunc
-
-.globl _HalpTrap06@0
-.func HalpTrap06@0
-_HalpTrap06@0:
-
-    /* Restore DS/ES segments */
-    mov eax, KGDT_R3_DATA | RPL_MASK
-    mov ds, ax
-    mov es, ax
-
-    /* Restore ESP and return */
-    mov esp, _HalpSavedEsp
-    ret 0
-.endfunc
index 60684bf..22c8efb 100644 (file)
@@ -267,3 +267,59 @@ KeFlushWriteBuffer(VOID)
     return;
 }
 
+#ifdef _M_IX86
+/* x86 fastcall wrappers */
+
+#undef KeRaiseIrql
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeRaiseIrql(KIRQL NewIrql,
+            PKIRQL OldIrql)
+{
+    /* Call the fastcall function */
+    *OldIrql = KfRaiseIrql(NewIrql);
+}
+
+#undef KeLowerIrql
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeLowerIrql(KIRQL NewIrql)
+{
+    /* Call the fastcall function */
+    KfLowerIrql(NewIrql);
+}
+
+#undef KeAcquireSpinLock
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeAcquireSpinLock(PKSPIN_LOCK SpinLock,
+                  PKIRQL OldIrql)
+{
+    /* Call the fastcall function */
+    *OldIrql = KfAcquireSpinLock(SpinLock);
+}
+
+#undef KeReleaseSpinLock
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeReleaseSpinLock(PKSPIN_LOCK SpinLock,
+                  KIRQL NewIrql)
+{
+    /* Call the fastcall function */
+    KfReleaseSpinLock(SpinLock, NewIrql);
+}
+
+#endif
+
index 6febfda..1aab8d5 100644 (file)
@@ -4,13 +4,11 @@
  * FILE:            hal/halx86/up/spinlock.c
  * PURPOSE:         Spinlock and Queued Spinlock Support
  * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
- *                  Timo Kreuzer (timo.kreuzer@reactos.org)
  */
 
 /* INCLUDES ******************************************************************/
 
-/* Enable this (and the define in irq.S) to make UP HAL work for MP Kernel */
-/* #define CONFIG_SMP */
+/* This file is compiled twice. Once for UP and once for MP */
 
 #include <hal.h>
 #define NDEBUG
@@ -30,18 +28,6 @@ KSPIN_LOCK HalpSystemHardwareLock;
 
 #ifdef _M_IX86
 
-/*
- * @implemented
- */
-VOID
-NTAPI
-KeAcquireSpinLock(PKSPIN_LOCK SpinLock,
-                  PKIRQL OldIrql)
-{
-    /* Call the fastcall function */
-    *OldIrql = KfAcquireSpinLock(SpinLock);
-}
-
 /*
  * @implemented
  */
@@ -59,18 +45,6 @@ KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock)
     return OldIrql;
 }
 
-/*
- * @implemented
- */
-VOID
-NTAPI
-KeReleaseSpinLock(PKSPIN_LOCK SpinLock,
-                  KIRQL NewIrql)
-{
-    /* Call the fastcall function */
-    KfReleaseSpinLock(SpinLock, NewIrql);
-}
-
 /*
  * @implemented
  */
@@ -238,31 +212,6 @@ KeTryToAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber,
     return TRUE;
 }
 
-#undef KeRaiseIrql
-/*
- * @implemented
- */
-VOID
-NTAPI
-KeRaiseIrql(KIRQL NewIrql,
-            PKIRQL OldIrql)
-{
-    /* Call the fastcall function */
-    *OldIrql = KfRaiseIrql(NewIrql);
-}
-
-#undef KeLowerIrql
-/*
- * @implemented
- */
-VOID
-NTAPI
-KeLowerIrql(KIRQL NewIrql)
-{
-    /* Call the fastcall function */
-    KfLowerIrql(NewIrql);
-}
-
 #endif
 
 VOID
index 971ffc8..c79ea36 100644 (file)
                        </directory>
                        <file>beep.c</file>
                        <file>cmos.c</file>
+                       <file>display.c</file>
                        <file>dma.c</file>
                        <file>drive.c</file>
-                       <file>display.c</file>
+                       <file>halinit.c</file>
+                       <file>misc.c</file>
                        <file>profil.c</file>
                        <file>reboot.c</file>
                        <file>sysinfo.c</file>
                        <file>timer.c</file>
+                       <file>usage.c</file>
+                       <if property="ARCH" value="i386">
+                               <directory name="i386">
+                                       <file>portio.c</file>
+                                       <file>systimer.S</file>
                        <if property="ARCH" value="i386">
                                <file>bios.c</file>
                                <file>halinit.c</file>
                                <file>misc.c</file>
                                <file>pic.c</file>
-                               <file>trap.S</file>
-                               <file>usage.c</file>
+                                       <file>trap.S</file>
                                <directory name="i386">
                                        <file>portio.c</file>
                                        <file>systimer.S</file>
@@ -57,6 +63,7 @@
                        <pch>hal.h</pch>
                </directory>
        </module>
+
        <module name="mini_hal" type="objectlibrary">
                <include>include</include>
                <include base="ntoskrnl">include</include>
@@ -78,6 +85,7 @@
                        <file>dma.c</file>
                        <file>display.c</file>
                        <file>drive.c</file>
+                       <file>misc.c</file>
                        <file>profil.c</file>
                        <file>reboot.c</file>
                        <file>spinlock.c</file>
                        <file>timer.c</file>
                        <file>usage.c</file>
                        <if property="ARCH" value="i386">
-                               <file>bios.c</file>
-                               <file>misc.c</file>
-                               <file>pic.c</file>
-                               <file>trap.S</file>
-                               <file>usage.c</file>
                                <directory name="i386">
                                        <file>portio.c</file>
                                        <file>systimer.S</file>
-                                       <file>v86.s</file>
                                </directory>
                        </if>
                        <if property="ARCH" value="amd64">
                </directory>
                <directory name="up">
                        <file>halinit_up.c</file>
+                       <file>pic.c</file>
+                       <file>processor.c</file>
                </directory>
        </module>
 </group>
index 6338b1d..80365f9 100644 (file)
@@ -9,6 +9,10 @@
                <directory name="generic">
                        <file>spinlock.c</file>
                </directory>
+               <directory name="up">
+                       <file>pic.c</file>
+                       <file>processor.c</file>
+               </directory>
                <directory name="up">
                        <file>processor.c</file>
                        <if property="ARCH" value="i386">
index 5deb29f..4a09aa2 100644 (file)
@@ -6,31 +6,22 @@
        <bootstrap installbase="$(CDOUTPUT)" nameoncd="hal.dll" />
        <include base="hal">include</include>
        <include base="ntoskrnl">include</include>
-       <include base="x86emu">.</include>
+       <!-- include base="x86emu">.</include -->
        <define name="_DISABLE_TIDENTS" />
        <define name="_NTHAL_" />
        <define name="_X86BIOS_" />
        <library>hal_generic</library>
        <library>hal_generic_up</library>
        <library>ntoskrnl</library>
-       <library>x86emu</library>
-
-       <directory name="up">
-               <file>halinit_up.c</file>
-               <file>halup.rc</file>
-       </directory>
+       <!-- library>x86emu</library -->
 
        <directory name="mp">
+               <file>halinit_mp.c</file>
+               <file>halmp.rc</file>
                <directory name="amd64">
-                       <file>mps.S</file>
-               </directory>
-       </directory>
-       <directory name="generic">
-               <directory name="amd64">
-                       <file>x86bios.c</file>
+                       <!-- file>mps.S</file -->
                </directory>
        </directory>
-
 </module>
 </group>
 
index abdd17b..ad17eac 100644 (file)
                <library>ntoskrnl</library>
                <library>libcntpr</library>
                <directory name="mp">
-                       <file>mpsirql.c</file>
-                       <directory name="i386">
-                               <file>mps.S</file>
-                               <file>mpsboot.asm</file>
-                       </directory>
+                       <if property="ARCH" value="i386">
+                               <directory name="i386">
+                                       <file>mps.S</file>
+                                       <file>mpsboot.asm</file>
+                                       <file>mpsirql.c</file>
+                               </directory>
+                       </if>
                </directory>
        </module>
 </group>
index 2d487c9..a74163e 100644 (file)
@@ -685,6 +685,15 @@ VOID
 NTAPI
 HalpSetInterruptGate(ULONG Index, PVOID Address);
 
+
+VOID
+FASTCALL
+KeUpdateSystemTime(
+    IN PKTRAP_FRAME TrapFrame,
+    IN ULONG Increment,
+    IN KIRQL OldIrql
+);
+
 #ifdef _M_AMD64
 #define KfLowerIrql KeLowerIrql
 #ifndef CONFIG_SMP
similarity index 100%
rename from reactos/hal/halx86/mp/mpsirql.c
rename to reactos/hal/halx86/mp/i386/mpsirql.c
index bb0ea21..643369a 100644 (file)
@@ -143,6 +143,7 @@ KfLowerIrql (KIRQL  NewIrql)
   HalpLowerIrql (NewIrql, FALSE);
 }
 
+
 /**********************************************************************
  * NAME                                                        EXPORTED
  *     KfRaiseIrql
@@ -191,7 +192,6 @@ KfRaiseIrql (KIRQL  NewIrql)
   return OldIrql;
 }
 
-
 /**********************************************************************
  * NAME                                                        EXPORTED
  *     KeRaiseIrqlToDpcLevel
index a51cc3d..d4d550f 100644 (file)
@@ -159,7 +159,7 @@ typedef ACPI_ENUM_CHILDREN_OUTPUT_BUFFER UNALIGNED *PACPI_ENUM_CHILDREN_OUTPUT_B
 
 #define ACPI_METHOD_SET_ARGUMENT_STRING( Argument, StrData )                \
     { Argument->Type = ACPI_METHOD_ARGUMENT_STRING;                         \
-      Argument->DataLength = strlen((PUCHAR)StrData) + sizeof(UCHAR);       \
+      Argument->DataLength = strlen((PCHAR)StrData) + sizeof(UCHAR);       \
       RtlCopyMemory(&Argument->Data[0],(PUCHAR)StrData,Argument->DataLength); }
 
 #define ACPI_METHOD_SET_ARGUMENT_BUFFER( Argument, BuffData, BuffLength )   \
diff --git a/reactos/include/ddk/atsmedia.h b/reactos/include/ddk/atsmedia.h
deleted file mode 100644 (file)
index 744a465..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-/* $Id: $
- *
- * COPYRIGHT:            This file is in the public domain.
- * PROJECT:              ReactOS kernel
- * FILE:
- * PURPOSE:              headers
- * PROGRAMMER:           Magnus Olsen (greatlrd)
- *
- */
-
-#if !defined(_ATSCMEDIA_)
-#define _ATSCMEDIA_
-#define BDANETWORKTYPE_ATSC DEFINE_GUIDNAMED(BDANETWORKTYPE_ATSC)
-#define STATIC_BDANETWORKTYPE_ATSC 0x71985F51, 0x1CA1, 0x11D3, 0x9C, 0xC8, 0x0, 0xC0, 0x4F, 0x79, 0x71, 0xE0
-DEFINE_GUIDSTRUCT("71985F51-1CA1-11D3-9CC8-00C04F7971E0", BDANETWORKTYPE_ATSC);
-#endif
diff --git a/reactos/include/ddk/cfgmgr32.h b/reactos/include/ddk/cfgmgr32.h
deleted file mode 100644 (file)
index 5ca47bd..0000000
+++ /dev/null
@@ -1,2244 +0,0 @@
-/*
- * cfgmgr32.h
- *
- * PnP configuration manager
- *
- * This file is part of the w32api package.
- *
- * Contributors:
- *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
-
-#ifndef _CFGMGR32_H_
-#define _CFGMGR32_H_
-
-#include "cfg.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(_CFGMGR32_)
-#define CMAPI
-#else
-#define CMAPI DECLSPEC_IMPORT
-#endif
-
-#include <pshpack1.h>
-
-#define CR_SUCCESS                        0x00000000
-#define CR_DEFAULT                        0x00000001
-#define CR_OUT_OF_MEMORY                  0x00000002
-#define CR_INVALID_POINTER                0x00000003
-#define CR_INVALID_FLAG                   0x00000004
-#define CR_INVALID_DEVNODE                0x00000005
-#define CR_INVALID_DEVINST                CR_INVALID_DEVNODE
-#define CR_INVALID_RES_DES                0x00000006
-#define CR_INVALID_LOG_CONF               0x00000007
-#define CR_INVALID_ARBITRATOR             0x00000008
-#define CR_INVALID_NODELIST               0x00000009
-#define CR_DEVNODE_HAS_REQS               0x0000000A
-#define CR_DEVINST_HAS_REQS               CR_DEVNODE_HAS_REQS
-#define CR_INVALID_RESOURCEID             0x0000000B
-#define CR_DLVXD_NOT_FOUND                0x0000000C
-#define CR_NO_SUCH_DEVNODE                0x0000000D
-#define CR_NO_SUCH_DEVINST                CR_NO_SUCH_DEVNODE
-#define CR_NO_MORE_LOG_CONF               0x0000000E
-#define CR_NO_MORE_RES_DES                0x0000000F
-#define CR_ALREADY_SUCH_DEVNODE           0x00000010
-#define CR_ALREADY_SUCH_DEVINST           CR_ALREADY_SUCH_DEVNODE
-#define CR_INVALID_RANGE_LIST             0x00000011
-#define CR_INVALID_RANGE                  0x00000012
-#define CR_FAILURE                        0x00000013
-#define CR_NO_SUCH_LOGICAL_DEV            0x00000014
-#define CR_CREATE_BLOCKED                 0x00000015
-#define CR_NOT_SYSTEM_VM                  0x00000016
-#define CR_REMOVE_VETOED                  0x00000017
-#define CR_APM_VETOED                     0x00000018
-#define CR_INVALID_LOAD_TYPE              0x00000019
-#define CR_BUFFER_SMALL                   0x0000001A
-#define CR_NO_ARBITRATOR                  0x0000001B
-#define CR_NO_REGISTRY_HANDLE             0x0000001C
-#define CR_REGISTRY_ERROR                 0x0000001D
-#define CR_INVALID_DEVICE_ID              0x0000001E
-#define CR_INVALID_DATA                   0x0000001F
-#define CR_INVALID_API                    0x00000020
-#define CR_DEVLOADER_NOT_READY            0x00000021
-#define CR_NEED_RESTART                   0x00000022
-#define CR_NO_MORE_HW_PROFILES            0x00000023
-#define CR_DEVICE_NOT_THERE               0x00000024
-#define CR_NO_SUCH_VALUE                  0x00000025
-#define CR_WRONG_TYPE                     0x00000026
-#define CR_INVALID_PRIORITY               0x00000027
-#define CR_NOT_DISABLEABLE                0x00000028
-#define CR_FREE_RESOURCES                 0x00000029
-#define CR_QUERY_VETOED                   0x0000002A
-#define CR_CANT_SHARE_IRQ                 0x0000002B
-#define CR_NO_DEPENDENT                   0x0000002C
-#define CR_SAME_RESOURCES                 0x0000002D
-#define CR_NO_SUCH_REGISTRY_KEY           0x0000002E
-#define CR_INVALID_MACHINENAME            0x0000002F
-#define CR_REMOTE_COMM_FAILURE            0x00000030
-#define CR_MACHINE_UNAVAILABLE            0x00000031
-#define CR_NO_CM_SERVICES                 0x00000032
-#define CR_ACCESS_DENIED                  0x00000033
-#define CR_CALL_NOT_IMPLEMENTED           0x00000034
-#define CR_INVALID_PROPERTY               0x00000035
-#define CR_DEVICE_INTERFACE_ACTIVE        0x00000036
-#define CR_NO_SUCH_DEVICE_INTERFACE       0x00000037
-#define CR_INVALID_REFERENCE_STRING       0x00000038
-#define CR_INVALID_CONFLICT_LIST          0x00000039
-#define CR_INVALID_INDEX                  0x0000003A
-#define CR_INVALID_STRUCTURE_SIZE         0x0000003B
-
-#define RegDisposition_OpenAlways         0x00000000
-#define RegDisposition_OpenExisting       0x00000001
-#define RegDisposition_Bits               0x00000001
-
-
-typedef DWORD RETURN_TYPE;
-typedef RETURN_TYPE CONFIGRET;
-
-typedef HANDLE HMACHINE;
-typedef HMACHINE *PHMACHINE;
-
-typedef DWORD_PTR RES_DES;
-typedef RES_DES *PRES_DES;
-
-typedef DWORD_PTR RANGE_ELEMENT;
-typedef RANGE_ELEMENT *PRANGE_ELEMENT;
-
-typedef ULONG_PTR CONFLICT_LIST;
-typedef CONFLICT_LIST *PCONFLICT_LIST;
-
-typedef DWORD_PTR LOG_CONF;
-typedef LOG_CONF *PLOG_CONF;
-
-typedef ULONG PRIORITY;
-typedef PRIORITY *PPRIORITY;
-
-typedef DWORD_PTR RANGE_LIST;
-typedef RANGE_LIST *PRANGE_LIST;
-
-typedef DWORD DEVNODE, DEVINST;
-typedef DEVNODE *PDEVNODE, *PDEVINST;
-
-typedef CHAR *DEVNODEID_A, *DEVINSTID_A;
-typedef WCHAR *DEVNODEID_W, *DEVINSTID_W;
-
-#ifdef UNICODE
-typedef DEVNODEID_W DEVNODEID;
-typedef DEVINSTID_W DEVINSTID;
-#else
-typedef DEVNODEID_A DEVNODEID;
-typedef DEVINSTID_A DEVINSTID;
-#endif
-
-typedef ULONG REGDISPOSITION;
-
-typedef ULONG RESOURCEID;
-typedef RESOURCEID *PRESOURCEID;
-
-#define CM_RESDES_WIDTH_DEFAULT  0x00000000
-#define CM_RESDES_WIDTH_32       0x00000001
-#define CM_RESDES_WIDTH_64       0x00000002
-#define CM_RESDES_WIDTH_BITS     0x00000003
-
-
-#define MAX_CONFIG_VALUE         9999
-#define MAX_INSTANCE_VALUE       9999
-
-#define MAX_DEVICE_ID_LEN        200
-#define MAX_DEVNODE_ID_LEN       MAX_DEVICE_ID_LEN
-
-#define MAX_CLASS_NAME_LEN       32
-#define MAX_GUID_STRING_LEN      39
-#define MAX_PROFILE_LEN          80
-
-
-#define ResType_All                       0x00000000
-#define ResType_None                      0x00000000
-#define ResType_Mem                       0x00000001
-#define ResType_IO                        0x00000002
-#define ResType_DMA                       0x00000003
-#define ResType_IRQ                       0x00000004
-#define ResType_DoNotUse                  0x00000005
-#define ResType_BusNumber                 0x00000006
-#define ResType_MAX                       0x00000006
-#define ResType_Ignored_Bit               0x00008000
-#define ResType_ClassSpecific             0x0000FFFF
-#define ResType_Reserved                  0x00008000
-#define ResType_DevicePrivate             0x00008001
-#define ResType_PcCardConfig              0x00008002
-#define ResType_MfCardConfig              0x00008003
-
-#define CM_GETIDLIST_FILTER_NONE              0x00000000
-#define CM_GETIDLIST_FILTER_ENUMERATOR        0x00000001
-#define CM_GETIDLIST_FILTER_SERVICE           0x00000002
-#define CM_GETIDLIST_FILTER_EJECTRELATIONS    0x00000004
-#define CM_GETIDLIST_FILTER_REMOVALRELATIONS  0x00000008
-#define CM_GETIDLIST_FILTER_POWERRELATIONS    0x00000010
-#define CM_GETIDLIST_FILTER_BUSRELATIONS      0x00000020
-#define CM_GETIDLIST_DONOTGENERATE            0x10000040
-#define CM_GETIDLIST_FILTER_BITS              0x1000007F
-
-#define CM_GET_DEVICE_INTERFACE_LIST_PRESENT      0x00000000
-#define CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES  0x00000001
-#define CM_GET_DEVICE_INTERFACE_LIST_BITS         0x00000001
-
-#define CM_DRP_DEVICEDESC                  0x00000001
-#define CM_DRP_HARDWAREID                  0x00000002
-#define CM_DRP_COMPATIBLEIDS               0x00000003
-#define CM_DRP_UNUSED0                     0x00000004
-#define CM_DRP_SERVICE                     0x00000005
-#define CM_DRP_UNUSED1                     0x00000006
-#define CM_DRP_UNUSED2                     0x00000007
-#define CM_DRP_CLASS                       0x00000008
-#define CM_DRP_CLASSGUID                   0x00000009
-#define CM_DRP_DRIVER                      0x0000000A
-#define CM_DRP_CONFIGFLAGS                 0x0000000B
-#define CM_DRP_MFG                         0x0000000C
-#define CM_DRP_FRIENDLYNAME                0x0000000D
-#define CM_DRP_LOCATION_INFORMATION        0x0000000E
-#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000F
-#define CM_DRP_CAPABILITIES                0x00000010
-#define CM_DRP_UI_NUMBER                   0x00000011
-#define CM_DRP_UPPERFILTERS                0x00000012
-#define CM_DRP_LOWERFILTERS                0x00000013
-#define CM_DRP_BUSTYPEGUID                 0x00000014
-#define CM_DRP_LEGACYBUSTYPE               0x00000015
-#define CM_DRP_BUSNUMBER                   0x00000016
-#define CM_DRP_ENUMERATOR_NAME             0x00000017
-
-#define CM_DRP_MIN                         0x00000001
-#define CM_DRP_MAX                         0x00000017
-
-#define CM_REGISTRY_HARDWARE               0x00000000
-#define CM_REGISTRY_SOFTWARE               0x00000001
-#define CM_REGISTRY_USER                   0x00000100
-#define CM_REGISTRY_CONFIG                 0x00000200
-#define CM_REGISTRY_BITS                   0x00000301
-
-#define CM_DEVCAP_LOCKSUPPORTED            0x00000001
-#define CM_DEVCAP_EJECTSUPPORTED           0x00000002
-#define CM_DEVCAP_REMOVABLE                0x00000004
-#define CM_DEVCAP_DOCKDEVICE               0x00000008
-#define CM_DEVCAP_UNIQUEID                 0x00000010
-#define CM_DEVCAP_SILENTINSTALL            0x00000020
-#define CM_DEVCAP_RAWDEVICEOK              0x00000040
-#define CM_DEVCAP_SURPRISEREMOVALOK        0x00000080
-#define CM_DEVCAP_HARDWAREDISABLED         0x00000100
-#define CM_DEVCAP_NONDYNAMIC               0x00000200
-
-typedef struct BusNumber_Des_s {
-  DWORD  BUSD_Count;
-  DWORD  BUSD_Type;
-  DWORD  BUSD_Flags;
-  ULONG  BUSD_Alloc_Base;
-  ULONG  BUSD_Alloc_End;
-} BUSNUMBER_DES, *PBUSNUMBER_DES;
-
-typedef struct BusNumber_Range_s {
-  ULONG  BUSR_Min;
-  ULONG  BUSR_Max;
-  ULONG  BUSR_nBusNumbers;
-  ULONG  BUSR_Flags;
-} BUSNUMBER_RANGE, *PBUSNUMBER_RANGE;
-
-#define BusNumberType_Range sizeof(BUSNUMBER_RANGE)
-
-typedef struct BusNumber_Resource_s {
-  BUSNUMBER_DES  BusNumber_Header;
-  BUSNUMBER_RANGE  BusNumber_Data[ANYSIZE_ARRAY];
-} BUSNUMBER_RESOURCE, *PBUSNUMBER_RESOURCE;
-
-typedef struct CS_Des_s {
-  DWORD  CSD_SignatureLength;
-  DWORD  CSD_LegacyDataOffset;
-  DWORD  CSD_LegacyDataSize;
-  DWORD  CSD_Flags;
-  GUID  CSD_ClassGuid;
-  BYTE  CSD_Signature[ANYSIZE_ARRAY];
-} CS_DES, *PCS_DES;
-
-typedef struct CS_Resource_s {
-  CS_DES  CS_Header;
-} CS_RESOURCE, *PCS_RESOURCE;
-
-typedef struct DevPrivate_Des_s {
-  DWORD  PD_Count;
-  DWORD  PD_Type;
-  DWORD  PD_Data1;
-  DWORD  PD_Data2;
-  DWORD  PD_Data3;
-  DWORD  PD_Flags;
-} DEVPRIVATE_DES, *PDEVPRIVATE_DES;
-
-typedef struct DevPrivate_Range_s {
-  DWORD  PR_Data1;
-  DWORD  PR_Data2;
-  DWORD  PR_Data3;
-} DEVPRIVATE_RANGE, *PDEVPRIVATE_RANGE;
-
-#define PType_Range sizeof(DEVPRIVATE_RANGE)
-
-typedef struct DevPrivate_Resource_s {
-  DEVPRIVATE_DES  PRV_Header;
-  DEVPRIVATE_RANGE  PRV_Data[ANYSIZE_ARRAY];
-} DEVPRIVATE_RESOURCE, *PDEVPRIVATE_RESOURCE;
-
-/* DMA_DES.DD_Flags constants and masks */
-#define mDD_Width                         0x3
-#define fDD_BYTE                          0x0
-#define fDD_WORD                          0x1
-#define fDD_DWORD                         0x2
-#define fDD_BYTE_AND_WORD                 0x3
-
-#define mDD_BusMaster                     0x4
-#define fDD_NoBusMaster                   0x0
-#define fDD_BusMaster                     0x4
-
-#define mDD_Type                          0x18
-#define fDD_TypeStandard                  0x00
-#define fDD_TypeA                         0x08
-#define fDD_TypeB                         0x10
-#define fDD_TypeF                         0x18
-
-typedef struct DMA_Des_s {
-  DWORD  DD_Count;
-  DWORD  DD_Type;
-  DWORD  DD_Flags;
-  ULONG  DD_Alloc_Chan;
-} DMA_DES, *PDMA_DES;
-
-typedef struct DMA_Range_s {
-  ULONG  DR_Min;
-  ULONG  DR_Max;
-  ULONG  DR_Flags;
-} DMA_RANGE, *PDMA_RANGE;
-
-#define DType_Range sizeof(DMA_RANGE)
-
-typedef struct DMA_Resource_s {
-  DMA_DES  DMA_Header;
-  DMA_RANGE  DMA_Data[ANYSIZE_ARRAY];
-} DMA_RESOURCE, *PDMA_RESOURCE;
-
-/* IO_DES.Type constants and masks */
-#define fIOD_PortType                     0x1
-#define fIOD_Memory                       0x0
-#define fIOD_IO                           0x1
-#define fIOD_DECODE                       0x00fc
-#define fIOD_10_BIT_DECODE                0x0004
-#define fIOD_12_BIT_DECODE                0x0008
-#define fIOD_16_BIT_DECODE                0x0010
-#define fIOD_POSITIVE_DECODE              0x0020
-#define fIOD_PASSIVE_DECODE               0x0040
-#define fIOD_WINDOW_DECODE                0x0080
-
-typedef struct IO_Des_s {
-  DWORD  IOD_Count;
-  DWORD  IOD_Type;
-  DWORDLONG  IOD_Alloc_Base;
-  DWORDLONG  IOD_Alloc_End;
-  DWORD  IOD_DesFlags;
-} IO_DES, *PIO_DES;
-
-/* IO_RANGE.IOR_Alias constants */
-#define IO_ALIAS_10_BIT_DECODE            0x00000004
-#define IO_ALIAS_12_BIT_DECODE            0x00000010
-#define IO_ALIAS_16_BIT_DECODE            0x00000000
-#define IO_ALIAS_POSITIVE_DECODE          0x000000FF
-
-typedef struct IO_Range_s {
-  DWORDLONG  IOR_Align;
-  DWORD  IOR_nPorts;
-  DWORDLONG  IOR_Min;
-  DWORDLONG  IOR_Max;
-  DWORD  IOR_RangeFlags;
-  DWORDLONG  IOR_Alias;
-} IO_RANGE, *PIO_RANGE;
-
-#define IOType_Range sizeof(IO_RANGE)
-
-typedef struct IO_Resource_s {
-  IO_DES  IO_Header;
-  IO_RANGE  IO_Data[ANYSIZE_ARRAY];
-} IO_RESOURCE, *PIO_RESOURCE;
-
-/* IRQ_DES.IRQD_flags constants */
-#define mIRQD_Share                       0x1
-#define fIRQD_Exclusive                   0x0
-#define fIRQD_Share                       0x1
-
-#define fIRQD_Share_Bit                   0
-#define fIRQD_Level_Bit                   1
-
-#define mIRQD_Edge_Level                  0x2
-#define fIRQD_Level                       0x0
-#define fIRQD_Edge                        0x2
-
-typedef struct IRQ_Des_32_s {
-  DWORD  IRQD_Count;
-  DWORD  IRQD_Type;
-  DWORD  IRQD_Flags;
-  ULONG  IRQD_Alloc_Num;
-  ULONG32  IRQD_Affinity;
-} IRQ_DES_32, *PIRQ_DES_32;
-
-typedef struct IRQ_Des_64_s {
-  DWORD  IRQD_Count;
-  DWORD  IRQD_Type;
-  DWORD  IRQD_Flags;
-  ULONG  IRQD_Alloc_Num;
-  ULONG64  IRQD_Affinity;
-} IRQ_DES_64, *PIRQ_DES_64;
-
-#ifdef _WIN64
-typedef IRQ_DES_64 IRQ_DES;
-typedef PIRQ_DES_64 PIRQ_DES;
-#else
-typedef IRQ_DES_32 IRQ_DES;
-typedef PIRQ_DES_32 PIRQ_DES;
-#endif
-
-typedef struct IRQ_Range_s {
-  ULONG  IRQR_Min;
-  ULONG  IRQR_Max;
-  ULONG  IRQR_Flags;
-} IRQ_RANGE, *PIRQ_RANGE;
-
-#define IRQType_Range sizeof(IRQ_RANGE)
-
-typedef struct IRQ_Resource_s {
-  IRQ_DES  IRQ_Header;
-  IRQ_RANGE  IRQ_Data[ANYSIZE_ARRAY];
-} IRQ_RESOURCE, *PIRQ_RESOURCE;
-
-/* MEM_DES.MD_Flags constants */
-#define mMD_MemoryType              0x1
-#define fMD_MemoryType              mMD_MemoryType
-#define fMD_ROM                     0x0
-#define fMD_RAM                     0x1
-
-#define mMD_32_24                   0x2
-#define fMD_32_24                   mMD_32_24
-#define fMD_24                      0x0
-#define fMD_32                      0x2
-
-#define mMD_Prefetchable            0x4
-#define fMD_Prefetchable            mMD_Prefetchable
-#define fMD_Pref                    mMD_Prefetchable
-#define fMD_PrefetchDisallowed      0x0
-#define fMD_PrefetchAllowed         0x4
-
-#define mMD_Readable                0x8
-#define fMD_Readable                mMD_Readable
-#define fMD_ReadAllowed             0x0
-#define fMD_ReadDisallowed          0x8
-
-#define mMD_CombinedWrite           0x10
-#define fMD_CombinedWrite           mMD_CombinedWrite
-#define fMD_CombinedWriteDisallowed 0x0
-#define fMD_CombinedWriteAllowed    0x10
-
-#define mMD_Cacheable               0x20
-#define fMD_NonCacheable            0x0
-#define fMD_Cacheable               0x20
-
-typedef struct Mem_Des_s {
-  DWORD  MD_Count;
-  DWORD  MD_Type;
-  DWORDLONG  MD_Alloc_Base;
-  DWORDLONG  MD_Alloc_End;
-  DWORD  MD_Flags;
-  DWORD  MD_Reserved;
-} MEM_DES, *PMEM_DES;
-
-typedef struct Mem_Range_s {
-  DWORDLONG  MR_Align;
-  ULONG  MR_nBytes;
-  DWORDLONG  MR_Min;
-  DWORDLONG  MR_Max;
-  DWORD  MR_Flags;
-  DWORD  MR_Reserved;
-} MEM_RANGE, *PMEM_RANGE;
-
-#define MType_Range sizeof(MEM_RANGE)
-
-typedef struct Mem_Resource_s {
-  MEM_DES  MEM_Header;
-  MEM_RANGE  MEM_Data[ANYSIZE_ARRAY];
-} MEM_RESOURCE, *PMEM_RESOURCE;
-
-/* MFCARD_DES.PMF_Flags constants */
-#define fPMF_AUDIO_ENABLE                 0x8
-#define mPMF_AUDIO_ENABLE                 fPMF_AUDIO_ENABLE
-
-typedef struct MfCard_Des_s {
-  DWORD  PMF_Count;
-  DWORD  PMF_Type;
-  DWORD  PMF_Flags;
-  BYTE  PMF_ConfigOptions;
-  BYTE  PMF_IoResourceIndex;
-  BYTE  PMF_Reserved[2];
-  DWORD  PMF_ConfigRegisterBase;
-} MFCARD_DES, *PMFCARD_DES;
-
-typedef struct MfCard_Resource_s {
-  MFCARD_DES  MfCard_Header;
-} MFCARD_RESOURCE, *PMFCARD_RESOURCE;
-
-/* PCCARD_DES.PCD_Flags constants */
-
-typedef struct PcCard_Des_s {
-  DWORD  PCD_Count;
-  DWORD  PCD_Type;
-  DWORD  PCD_Flags;
-  BYTE  PCD_ConfigIndex;
-  BYTE  PCD_Reserved[3];
-  DWORD  PCD_MemoryCardBase1;
-  DWORD  PCD_MemoryCardBase2;
-} PCCARD_DES, *PPCCARD_DES;
-
-#define mPCD_IO_8_16                      0x1
-#define fPCD_IO_8                         0x0
-#define fPCD_IO_16                        0x1
-#define mPCD_MEM_8_16                     0x2
-#define fPCD_MEM_8                        0x0
-#define fPCD_MEM_16                       0x2
-#define mPCD_MEM_A_C                      0xC
-#define fPCD_MEM1_A                       0x4
-#define fPCD_MEM2_A                       0x8
-#define fPCD_IO_ZW_8                      0x10
-#define fPCD_IO_SRC_16                    0x20
-#define fPCD_IO_WS_16                     0x40
-#define mPCD_MEM_WS                       0x300
-#define fPCD_MEM_WS_ONE                   0x100
-#define fPCD_MEM_WS_TWO                   0x200
-#define fPCD_MEM_WS_THREE                 0x300
-
-#define fPCD_MEM_A                        0x4
-
-#define fPCD_ATTRIBUTES_PER_WINDOW        0x8000
-
-#define fPCD_IO1_16                       0x00010000
-#define fPCD_IO1_ZW_8                     0x00020000
-#define fPCD_IO1_SRC_16                   0x00040000
-#define fPCD_IO1_WS_16                    0x00080000
-
-#define fPCD_IO2_16                       0x00100000
-#define fPCD_IO2_ZW_8                     0x00200000
-#define fPCD_IO2_SRC_16                   0x00400000
-#define fPCD_IO2_WS_16                    0x00800000
-
-#define mPCD_MEM1_WS                      0x03000000
-#define fPCD_MEM1_WS_ONE                  0x01000000
-#define fPCD_MEM1_WS_TWO                  0x02000000
-#define fPCD_MEM1_WS_THREE                0x03000000
-#define fPCD_MEM1_16                      0x04000000
-
-#define mPCD_MEM2_WS                      0x30000000
-#define fPCD_MEM2_WS_ONE                  0x10000000
-#define fPCD_MEM2_WS_TWO                  0x20000000
-#define fPCD_MEM2_WS_THREE                0x30000000
-#define fPCD_MEM2_16                      0x40000000
-
-#define PCD_MAX_MEMORY                    2
-#define PCD_MAX_IO                        2
-
-typedef struct PcCard_Resource_s {
-  PCCARD_DES  PcCard_Header;
-} PCCARD_RESOURCE, *PPCCARD_RESOURCE;
-
-
-/* CONFLICT_DETAILS.CD.ulMask constants */
-#define CM_CDMASK_DEVINST                 0x00000001
-#define CM_CDMASK_RESDES                  0x00000002
-#define CM_CDMASK_FLAGS                   0x00000004
-#define CM_CDMASK_DESCRIPTION             0x00000008
-#define CM_CDMASK_VALID                   0x0000000F
-
-/* CONFLICT_DETAILS.CD.ulFlags constants */
-#define CM_CDFLAGS_DRIVER                 0x00000001
-#define CM_CDFLAGS_ROOT_OWNED             0x00000002
-#define CM_CDFLAGS_RESERVED               0x00000004
-
-typedef struct _CONFLICT_DETAILS_A {
-  ULONG  CD_ulSize;
-  ULONG  CD_ulMask;
-  DEVINST  CD_dnDevInst;
-  RES_DES  CD_rdResDes;
-  ULONG  CD_ulFlags;
-  CHAR  CD_szDescription[MAX_PATH];
-} CONFLICT_DETAILS_A , *PCONFLICT_DETAILS_A;
-
-typedef struct _CONFLICT_DETAILS_W {
-  ULONG  CD_ulSize;
-  ULONG  CD_ulMask;
-  DEVINST  CD_dnDevInst;
-  RES_DES  CD_rdResDes;
-  ULONG  CD_ulFlags;
-  WCHAR  CD_szDescription[MAX_PATH];
-} CONFLICT_DETAILS_W , *PCONFLICT_DETAILS_W;
-
-#ifdef UNICODE
-typedef CONFLICT_DETAILS_W CONFLICT_DETAILS;
-typedef PCONFLICT_DETAILS_W PCONFLICT_DETAILS;
-#else
-typedef CONFLICT_DETAILS_A CONFLICT_DETAILS;
-typedef PCONFLICT_DETAILS_A PCONFLICT_DETAILS;
-#endif
-
-
-#define CMP_MAGIC  0x01234567
-
-
-CMAPI
-CONFIGRET
-WINAPI
-CMP_Init_Detection(
-  IN DWORD  dwMagic);
-
-CMAPI
-CONFIGRET
-WINAPI
-CMP_RegisterNotification(
-  IN HANDLE hRecipient,
-  IN LPVOID lpvNotificationFilter,
-  IN DWORD  dwFlags,
-  OUT PULONG pluhDevNotify);
-
-CMAPI
-CONFIGRET
-WINAPI
-CMP_Report_LogOn(
-  IN DWORD dwMagic,
-  IN DWORD dwProcessId);
-
-CMAPI
-CONFIGRET
-WINAPI
-CMP_UnregisterNotification(IN ULONG luhDevNotify);
-
-/* FIXME: Missing CMP_WaitNoPendingInstallEvents */
-/* FIXME: Missing CMP_WaitServicesAvailable */
-
-/* CM_Add_Empty_Log_Conf.ulFlags constants */
-#define BASIC_LOG_CONF                    0x00000000
-#define FILTERED_LOG_CONF                 0x00000001
-#define ALLOC_LOG_CONF                    0x00000002
-#define BOOT_LOG_CONF                     0x00000003
-#define FORCED_LOG_CONF                   0x00000004
-#define OVERRIDE_LOG_CONF                 0x00000005
-#define NUM_LOG_CONF                      0x00000006
-#define LOG_CONF_BITS                     0x00000007
-
-#define PRIORITY_EQUAL_FIRST              0x00000008
-#define PRIORITY_EQUAL_LAST               0x00000000
-#define PRIORITY_BIT                      0x00000008
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_Empty_Log_Conf(
-  OUT PLOG_CONF  plcLogConf,
-  IN DEVINST  dnDevInst,
-  IN PRIORITY  Priority,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_Empty_Log_Conf_Ex(
-  OUT PLOG_CONF  plcLogConf,
-  IN DEVINST  dnDevInst,
-  IN PRIORITY  Priority,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-/* CM_Add_ID.ulFlags constants */
-#define CM_ADD_ID_HARDWARE                0x00000000
-#define CM_ADD_ID_COMPATIBLE              0x00000001
-#define CM_ADD_ID_BITS                    0x00000001
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_IDA(
-  IN DEVINST  dnDevInst,
-  IN PSTR  pszID,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_ID_ExA(
-  IN DEVINST  dnDevInst,
-  IN PSTR  pszID,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_ID_ExW(
-  IN DEVINST  dnDevInst,
-  IN PWSTR  pszID,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_IDW(
-  IN DEVINST  dnDevInst,
-  IN PWSTR  pszID,
-  IN ULONG  ulFlags);
-
-#ifdef UNICODE
-#define CM_Add_ID CM_Add_IDW
-#define CM_Add_ID_Ex CM_Add_ID_ExW
-#else
-#define CM_Add_ID CM_Add_IDA
-#define CM_Add_ID_Ex CM_Add_ID_ExA
-#endif /* UNICODE */
-
-/* FIXME: Obsolete CM_Add_Range */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_Res_Des(
-  OUT PRES_DES  prdResDes,
-  IN LOG_CONF  lcLogConf,
-  IN RESOURCEID  ResourceID,
-  IN PCVOID  ResourceData,
-  IN ULONG  ResourceLen,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_Res_Des_Ex(
-  OUT PRES_DES  prdResDes,
-  IN LOG_CONF  lcLogConf,
-  IN RESOURCEID  ResourceID,
-  IN PCVOID  ResourceData,
-  IN ULONG  ResourceLen,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Connect_MachineA(
-  IN PCSTR  UNCServerName,
-  OUT PHMACHINE  phMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Connect_MachineW(
-  IN PCWSTR  UNCServerName,
-  OUT PHMACHINE  phMachine);
-
-#ifdef UNICODE
-#define CM_Connect_Machine CM_Connect_MachineW
-#else
-#define CM_Connect_Machine CM_Connect_MachineA
-#endif /* UNICODE */
-
-/* Flags for CM_Create_DevNode[_Ex].ulFlags constants */
-#define CM_CREATE_DEVNODE_NORMAL          0x00000000
-#define CM_CREATE_DEVNODE_NO_WAIT_INSTALL 0x00000001
-#define CM_CREATE_DEVNODE_PHANTOM         0x00000002
-#define CM_CREATE_DEVNODE_GENERATE_ID     0x00000004
-#define CM_CREATE_DEVNODE_DO_NOT_INSTALL  0x00000008
-#define CM_CREATE_DEVNODE_BITS            0x0000000F
-
-#define CM_CREATE_DEVINST_NORMAL          CM_CREATE_DEVNODE_NORMAL
-#define CM_CREATE_DEVINST_NO_WAIT_INSTALL CM_CREATE_DEVNODE_NO_WAIT_INSTALL
-#define CM_CREATE_DEVINST_PHANTOM         CM_CREATE_DEVNODE_PHANTOM
-#define CM_CREATE_DEVINST_GENERATE_ID     CM_CREATE_DEVNODE_GENERATE_ID
-#define CM_CREATE_DEVINST_DO_NOT_INSTALL  CM_CREATE_DEVNODE_DO_NOT_INSTALL
-#define CM_CREATE_DEVINST_BITS            CM_CREATE_DEVNODE_BITS
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Create_DevNodeA(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINSTID_A  pDeviceID,
-  IN DEVINST  dnParent,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Create_DevNodeW(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINSTID_W  pDeviceID,
-  IN DEVINST  dnParent,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Create_DevNode_ExA(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINSTID_A  pDeviceID,
-  IN DEVINST  dnParent,
-  IN ULONG  ulFlags,
-  IN HANDLE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Create_DevNode_ExW(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINSTID_W  pDeviceID,
-  IN DEVINST  dnParent,
-  IN ULONG  ulFlags,
-  IN HANDLE  hMachine);
-
-#define CM_Create_DevInstW CM_Create_DevNodeW
-#define CM_Create_DevInstA CM_Create_DevNodeA
-#define CM_Create_DevInst_ExW CM_Create_DevNode_ExW
-#define CM_Create_DevInst_ExA CM_Create_DevNode_ExA
-#ifdef UNICODE
-#define CM_Create_DevNode CM_Create_DevNodeW
-#define CM_Create_DevInst CM_Create_DevNodeW
-#define CM_Create_DevNode_Ex CM_Create_DevNode_ExW
-#define CM_Create_DevInst_Ex CM_Create_DevInst_ExW
-#else
-#define CM_Create_DevNode CM_Create_DevNodeA
-#define CM_Create_DevInst CM_Create_DevNodeA
-#define CM_Create_DevNode_Ex CM_Create_DevNode_ExA
-#define CM_Create_DevInst_Ex CM_Create_DevNode_ExA
-#endif /* UNICODE */
-
-/* FIXME: Obsolete CM_Create_Range_List */
-
-/* Flags for CM_Delete_Class_Key.ulFlags constants */
-#define CM_DELETE_CLASS_ONLY              0x00000000
-#define CM_DELETE_CLASS_SUBKEYS           0x00000001
-#define CM_DELETE_CLASS_BITS              0x00000001
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Delete_Class_Key(
-  IN LPGUID  ClassGuid,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Delete_Class_Key_Ex(
-  IN LPGUID  ClassGuid,
-  IN ULONG  ulFlags,
-  IN HANDLE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Delete_DevNode_Key(
-  IN DEVNODE  dnDevNode,
-  IN ULONG  ulHardwareProfile,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Delete_DevNode_Key_Ex(
-  IN DEVNODE  dnDevNode,
-  IN ULONG  ulHardwareProfile,
-  IN ULONG  ulFlags,
-  IN HANDLE  hMachine);
-
-#define CM_Delete_DevInst_Key CM_Delete_DevNode_Key
-#define CM_Delete_DevInst_Key_Ex CM_Delete_DevNode_Key_Ex
-
-/* FIXME: Obsolete CM_Delete_Range */
-/* FIXME: Obsolete CM_Detected_Resource_Conflict */
-/* FIXME: Obsolete CM_Detected_Resource_Conflict_Ex */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Disable_DevNode(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Disable_DevNode_Ex(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#define CM_Disable_DevInst CM_Disable_DevNode
-#define CM_Disable_DevInst_Ex CM_Disable_DevNode_Ex
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Disconnect_Machine(
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enable_DevNode(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enable_DevNode_Ex(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#define CM_Enable_DevInst CM_Enable_DevNode
-#define CM_Enable_DevInst_Ex CM_Enable_DevNode_Ex
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_Classes(
-  IN ULONG  ulClassIndex,
-  OUT LPGUID  ClassGuid,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_Classes_Ex(
-  IN ULONG  ulClassIndex,
-  OUT LPGUID  ClassGuid,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_EnumeratorsA(
-  IN ULONG  ulEnumIndex,
-  OUT PCHAR  Buffer,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_Enumerators_ExA(
-  IN ULONG  ulEnumIndex,
-  OUT PCHAR  Buffer,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_Enumerators_ExW(
-  IN ULONG  ulEnumIndex,
-  OUT PWCHAR  Buffer,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_EnumeratorsW(
-  IN ULONG  ulEnumIndex,
-  OUT PWCHAR  Buffer,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags);
-
-#ifdef UNICODE
-#define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsW
-#define CM_Enumerate_Enumerators_Ex CM_Enumerate_Enumerators_ExW
-#else
-#define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsA
-#define CM_Enumerate_Enumerators_Ex CM_Enumerate_Enumerators_ExA
-#endif /* UNICODE */
-
-/* FIXME: Obsolete CM_Find_Range */
-/* FIXME: Obsolete CM_First_Range */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Log_Conf(
-  IN LOG_CONF  lcLogConfToBeFreed,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Log_Conf_Ex(
-  IN LOG_CONF  lcLogConfToBeFreed,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Log_Conf_Handle(
-  IN LOG_CONF  lcLogConf);
-
-/* FIXME: Obsolete CM_Free_Range_List */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Res_Des(
-  OUT PRES_DES  prdResDes,
-  IN RES_DES  rdResDes,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Res_Des_Ex(
-  OUT PRES_DES  prdResDes,
-  IN RES_DES  rdResDes,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Res_Des_Handle(
-  IN RES_DES  rdResDes);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Resource_Conflict_Handle(
-  IN CONFLICT_LIST  clConflictList);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Child(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Child_Ex(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_NameA(
-  IN LPGUID  ClassGuid,
-  OUT PCHAR  Buffer,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_NameW(
-  IN LPGUID  ClassGuid,
-  OUT PWCHAR  Buffer,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Name_ExA(
-  IN LPGUID  ClassGuid,
-  OUT PCHAR  Buffer,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Name_ExW(
-  IN LPGUID  ClassGuid,
-  OUT PWCHAR  Buffer,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#ifdef UNICODE
-#define CM_Get_Class_Name CM_Get_Class_NameW
-#define CM_Get_Class_Name_Ex CM_Get_Class_Name_ExW
-#else
-#define CM_Get_Class_Name CM_Get_Class_NameA
-#define CM_Get_Class_Name_Ex CM_Get_Class_Name_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Key_NameA(
-  IN LPGUID  ClassGuid,
-  OUT LPSTR  pszKeyName,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Key_NameW(
-  IN LPGUID  ClassGuid,
-  OUT LPWSTR  pszKeyName,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Key_Name_ExA(
-  IN LPGUID  ClassGuid,
-  OUT LPSTR  pszKeyName,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Key_Name_ExW(
-  IN LPGUID  ClassGuid,
-  OUT LPWSTR  pszKeyName,
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#ifdef UNICODE
-#define CM_Get_Class_Key_Name CM_Get_Class_Key_NameW
-#define CM_Get_Class_Key_Name_Ex CM_Get_Class_Key_Name_ExW
-#else
-#define CM_Get_Class_Key_Name CM_Get_Class_Key_NameA
-#define CM_Get_Class_Key_Name_Ex CM_Get_Class_Key_Name_ExA
-#endif /* UNICODE */
-
-/* FIXME: Obsolete CM_Get_Class_Registry_Property */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Depth(
-  OUT PULONG  pulDepth,
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Depth_Ex(
-  OUT PULONG  pulDepth,
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_IDA(
-  IN DEVINST  dnDevInst,
-  OUT PCHAR  Buffer,
-  IN ULONG  BufferLen,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_ExA(
-  IN DEVINST  dnDevInst,
-  OUT PCHAR  Buffer,
-  IN ULONG  BufferLen,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_ExW(
-  IN DEVINST  dnDevInst,
-  OUT PWCHAR  Buffer,
-  IN ULONG  BufferLen,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_IDW(
-  IN DEVINST  dnDevInst,
-  OUT PWCHAR  Buffer,
-  IN ULONG  BufferLen,
-  IN ULONG  ulFlags);
-
-#ifdef UNICODE
-#define CM_Get_Device_ID CM_Get_Device_IDW
-#define CM_Get_Device_ID_Ex CM_Get_Device_ID_ExW
-#else
-#define CM_Get_Device_ID CM_Get_Device_IDA
-#define CM_Get_Device_ID_Ex CM_Get_Device_ID_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_ListA(
-  IN PCSTR  pszFilter,  OPTIONAL
-  OUT PCHAR  Buffer,
-  IN ULONG  BufferLen,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_ExA(
-  IN PCSTR  pszFilter,  OPTIONAL
-  OUT PCHAR  Buffer,
-  IN ULONG  BufferLen,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_ExW(
-  IN PCWSTR  pszFilter,  OPTIONAL
-  OUT PWCHAR  Buffer,
-  IN ULONG  BufferLen,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_ListW(
-  IN PCWSTR  pszFilter,  OPTIONAL
-  OUT PWCHAR  Buffer,
-  IN ULONG  BufferLen,
-  IN ULONG  ulFlags);
-
-#ifdef UNICODE
-#define CM_Get_Device_ID_List CM_Get_Device_ID_ListW
-#define CM_Get_Device_ID_List_Ex CM_Get_Device_ID_List_ExW
-#else
-#define CM_Get_Device_ID_List CM_Get_Device_ID_ListA
-#define CM_Get_Device_ID_List_Ex CM_Get_Device_ID_List_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_SizeA(
-  OUT PULONG  pulLen,
-  IN PCSTR  pszFilter,  OPTIONAL
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_Size_ExA(
-  OUT PULONG  pulLen,
-  IN PCSTR  pszFilter,  OPTIONAL
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_Size_ExW(
-  OUT PULONG  pulLen,
-  IN PCWSTR  pszFilter,  OPTIONAL
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_SizeW(
-  OUT PULONG  pulLen,
-  IN PCWSTR  pszFilter,  OPTIONAL
-  IN ULONG  ulFlags);
-
-#ifdef UNICODE
-#define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeW
-#define CM_Get_Device_ID_List_Size_Ex CM_Get_Device_ID_List_Size_ExW
-#else
-#define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeA
-#define CM_Get_Device_ID_List_Size_Ex CM_Get_Device_ID_List_Size_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_Size(
-  OUT PULONG  pulLen,
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_Size_Ex(
-  OUT PULONG  pulLen,
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-/* FIXME: Obsolete CM_Get_Device_Interface_Alias */
-/* FIXME: Obsolete CM_Get_Device_Interface_Alias_Ex */
-/* FIXME: Obsolete CM_Get_Device_Interface_List */
-/* FIXME: Obsolete CM_Get_Device_Interface_List_Ex */
-/* FIXME: Obsolete CM_Get_Device_Interface_List_Size */
-/* FIXME: Obsolete CM_Get_Device_Interface_List_Size_Ex */
-/* FIXME: Obsolete CM_Get_DevNode_Custom_Property */
-/* FIXME: Obsolete CM_Get_DevNode_Custom_Property_Ex */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Registry_PropertyA(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulProperty,
-  OUT PULONG  pulRegDataType,  OPTIONAL
-  OUT PVOID  Buffer,  OPTIONAL
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Registry_PropertyW(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulProperty,
-  OUT PULONG  pulRegDataType,  OPTIONAL
-  OUT PVOID  Buffer,  OPTIONAL
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Registry_Property_ExA(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulProperty,
-  OUT PULONG  pulRegDataType,  OPTIONAL
-  OUT PVOID  Buffer,  OPTIONAL
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Registry_Property_ExW(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulProperty,
-  OUT PULONG  pulRegDataType,  OPTIONAL
-  OUT PVOID  Buffer,  OPTIONAL
-  IN OUT PULONG  pulLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#define CM_Get_DevInst_Registry_PropertyW CM_Get_DevNode_Registry_PropertyW
-#define CM_Get_DevInst_Registry_PropertyA CM_Get_DevNode_Registry_PropertyA
-#define CM_Get_DevInst_Registry_Property_ExW CM_Get_DevNode_Registry_Property_ExW
-#define CM_Get_DevInst_Registry_Property_ExA CM_Get_DevNode_Registry_Property_ExA
-
-#ifdef UNICODE
-#define CM_Get_DevInst_Registry_Property CM_Get_DevNode_Registry_PropertyW
-#define CM_Get_DevInst_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExW
-#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyW
-#define CM_Get_DevNode_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExW
-#else
-#define CM_Get_DevInst_Registry_Property CM_Get_DevNode_Registry_PropertyA
-#define CM_Get_DevInst_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExA
-#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyA
-#define CM_Get_DevNode_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Status(
-  OUT PULONG  pulStatus,
-  OUT PULONG  pulProblemNumber,
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Status_Ex(
-  OUT PULONG  pulStatus,
-  OUT PULONG  pulProblemNumber,
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#define CM_Get_DevInst_Status CM_Get_DevNode_Status
-#define CM_Get_DevInst_Status_Ex CM_Get_DevNode_Status_Ex
-
-/* CM_Get_First_Log_Conf.ulFlags constants */
-#define BASIC_LOG_CONF    0x00000000  /* Specifies the req list. */
-#define FILTERED_LOG_CONF 0x00000001  /* Specifies the filtered req list. */
-#define ALLOC_LOG_CONF    0x00000002  /* Specifies the Alloc Element. */
-#define BOOT_LOG_CONF     0x00000003  /* Specifies the RM Alloc Element. */
-#define FORCED_LOG_CONF   0x00000004  /* Specifies the Forced Log Conf */
-#define OVERRIDE_LOG_CONF 0x00000005  /* Specifies the Override req list. */
-#define NUM_LOG_CONF      0x00000006  /* Number of Log Conf type */
-#define LOG_CONF_BITS     0x00000007  /* The bits of the log conf type. */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_First_Log_Conf(
-  OUT PLOG_CONF  plcLogConf,  OPTIONAL
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_First_Log_Conf_Ex(
-  OUT PLOG_CONF  plcLogConf,  OPTIONAL
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Global_State(
-  OUT PULONG  pulState,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Global_State_Ex(
-  OUT PULONG  pulState,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-/* FIXME: Obsolete CM_Get_Hardware_Profile_Info */
-/* FIXME: Obsolete CM_Get_Hardware_Profile_Info_Ex */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_HW_Prof_FlagsA(
-  IN DEVINSTID_A  szDevInstName,
-  IN ULONG  ulHardwareProfile,
-  OUT PULONG  pulValue,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_HW_Prof_FlagsW(
-  IN DEVINSTID_W  szDevInstName,
-  IN ULONG  ulHardwareProfile,
-  OUT PULONG  pulValue,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_HW_Prof_Flags_ExA(
-  IN DEVINSTID_A  szDevInstName,
-  IN ULONG  ulHardwareProfile,
-  OUT PULONG  pulValue,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_HW_Prof_Flags_ExW(
-  IN DEVINSTID_W  szDevInstName,
-  IN ULONG  ulHardwareProfile,
-  OUT PULONG  pulValue,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#ifdef UNICODE
-#define CM_Get_HW_Prof_Flags CM_Get_HW_Prof_FlagsW
-#define CM_Get_HW_Prof_Flags_Ex CM_Get_HW_Prof_Flags_ExW
-#else
-#define CM_Get_HW_Prof_Flags CM_Get_HW_Prof_FlagsA
-#define CM_Get_HW_Prof_Flags_Ex CM_Get_HW_Prof_Flags_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Log_Conf_Priority(
-  IN LOG_CONF  lcLogConf,
-  OUT PPRIORITY  pPriority,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Log_Conf_Priority_Ex(
-  IN LOG_CONF  lcLogConf,
-  OUT PPRIORITY  pPriority,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Next_Log_Conf(
-  OUT PLOG_CONF  plcLogConf,  OPTIONAL
-  IN LOG_CONF  lcLogConf,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Next_Log_Conf_Ex(
-  OUT PLOG_CONF  plcLogConf,  OPTIONAL
-  IN LOG_CONF  lcLogConf,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Next_Res_Des(
-  OUT PRES_DES  prdResDes,
-  IN RES_DES  rdResDes,
-  IN RESOURCEID  ForResource,
-  OUT PRESOURCEID  pResourceID,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Next_Res_Des_Ex(
-  OUT PRES_DES  prdResDes,
-  IN RES_DES  rdResDes,
-  IN RESOURCEID  ForResource,
-  OUT PRESOURCEID  pResourceID,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Parent(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Parent_Ex(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Res_Des_Data(
-  IN RES_DES  rdResDes,
-  OUT PVOID  Buffer,
-  IN ULONG  BufferLen,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Res_Des_Data_Ex(
-  IN RES_DES  rdResDes,
-  OUT PVOID  Buffer,
-  IN ULONG  BufferLen,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Res_Des_Data_Size(
-  OUT PULONG  pulSize,
-  IN RES_DES  rdResDes,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Res_Des_Data_Size_Ex(
-  OUT PULONG  pulSize,
-  IN RES_DES  rdResDes,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Resource_Conflict_Count(
-  IN CONFLICT_LIST  clConflictList,
-  OUT PULONG  pulCount);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Resource_Conflict_DetailsA(
-  IN CONFLICT_LIST  clConflictList,
-  IN ULONG  ulIndex,
-  IN OUT PCONFLICT_DETAILS_A  pConflictDetails);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Resource_Conflict_DetailsW(
-  IN CONFLICT_LIST  clConflictList,
-  IN ULONG  ulIndex,
-  IN OUT PCONFLICT_DETAILS_W  pConflictDetails);
-
-#ifdef UNICODE
-#define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsW
-#else
-#define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Sibling(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINST  DevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Sibling_Ex(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINST  DevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-WORD
-WINAPI
-CM_Get_Version(
-  VOID);
-
-CMAPI
-WORD
-WINAPI
-CM_Get_Version_Ex(
-  IN HMACHINE  hMachine);
-
-/* FIXME: Obsolete CM_Intersect_Range_List */
-/* FIXME: Obsolete CM_Invert_Range_List */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Is_Dock_Station_Present(
-  OUT PBOOL  pbPresent);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Is_Dock_Station_Present_Ex(
-  OUT PBOOL  pbPresent,
-  IN HMACHINE  hMachine);
-
-/* CM_Locate_DevNode.ulFlags constants */
-#define CM_LOCATE_DEVNODE_NORMAL         0x00000000
-#define CM_LOCATE_DEVNODE_PHANTOM        0x00000001
-#define CM_LOCATE_DEVNODE_CANCELREMOVE   0x00000002
-#define CM_LOCATE_DEVNODE_NOVALIDATION   0x00000004
-#define CM_LOCATE_DEVNODE_BITS           0x00000007
-
-#define CM_LOCATE_DEVINST_NORMAL         CM_LOCATE_DEVNODE_NORMAL
-#define CM_LOCATE_DEVINST_PHANTOM        CM_LOCATE_DEVNODE_PHANTOM
-#define CM_LOCATE_DEVINST_CANCELREMOVE   CM_LOCATE_DEVNODE_CANCELREMOVE
-#define CM_LOCATE_DEVINST_NOVALIDATION   CM_LOCATE_DEVNODE_NOVALIDATION
-#define CM_LOCATE_DEVINST_BITS           CM_LOCATE_DEVNODE_BITS
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Locate_DevNodeA(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINSTID_A  pDeviceID,  OPTIONAL
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Locate_DevNode_ExA(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINSTID_A  pDeviceID,  OPTIONAL
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Locate_DevNode_ExW(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINSTID_W  pDeviceID,  OPTIONAL
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Locate_DevNodeW(
-  OUT PDEVINST  pdnDevInst,
-  IN DEVINSTID_W  pDeviceID,  OPTIONAL
-  IN ULONG  ulFlags);
-
-#define CM_Locate_DevInstA CM_Locate_DevNodeA
-#define CM_Locate_DevInstW CM_Locate_DevNodeW
-#define CM_Locate_DevInst_ExA CM_Locate_DevNode_ExA
-#define CM_Locate_DevInst_ExW CM_Locate_DevNode_ExW
-
-#ifdef UNICODE
-#define CM_Locate_DevNode CM_Locate_DevNodeW
-#define CM_Locate_DevInst CM_Locate_DevNodeW
-#define CM_Locate_DevNode_Ex CM_Locate_DevNode_ExW
-#define CM_Locate_DevInst_Ex CM_Locate_DevNode_ExW
-#else
-#define CM_Locate_DevNode CM_Locate_DevNodeA
-#define CM_Locate_DevInst CM_Locate_DevNodeA
-#define CM_Locate_DevNode_Ex CM_Locate_DevNode_ExA
-#define CM_Locate_DevInst_Ex CM_Locate_DevNode_ExA
-#endif /* UNICODE */
-
-/* FIXME: Obsolete CM_Merge_Range_List */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Modify_Res_Des(
-  OUT PRES_DES  prdResDes,
-  IN RES_DES  rdResDes,
-  IN RESOURCEID  ResourceID,
-  IN PCVOID  ResourceData,
-  IN ULONG  ResourceLen,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Modify_Res_Des_Ex(
-  OUT PRES_DES  prdResDes,
-  IN RES_DES  rdResDes,
-  IN RESOURCEID  ResourceID,
-  IN PCVOID  ResourceData,
-  IN ULONG  ResourceLen,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-/* FIXME: Obsolete CM_Move_DevNode */
-/* FIXME: Obsolete CM_Move_DevNode_Ex */
-/* FIXME: Obsolete CM_Next_Range */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_Class_KeyA(
-  IN LPGUID  ClassGuid, OPTIONAL
-  IN LPCSTR  pszClassName, OPTIONAL
-  IN REGSAM  samDesired,
-  IN REGDISPOSITION  Disposition,
-  OUT PHKEY  phkClass,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_Class_KeyW(
-  IN LPGUID  ClassGuid, OPTIONAL
-  IN LPCWSTR  pszClassName, OPTIONAL
-  IN REGSAM  samDesired,
-  IN REGDISPOSITION  Disposition,
-  OUT PHKEY  phkClass,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_Class_Key_ExA(
-  IN LPGUID  pszClassGuid, OPTIONAL
-  IN LPCSTR  pszClassName, OPTIONAL
-  IN REGSAM  samDesired,
-  IN REGDISPOSITION  Disposition,
-  OUT PHKEY  phkClass,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_Class_Key_ExW(
-  IN LPGUID  pszClassGuid, OPTIONAL
-  IN LPCWSTR  pszClassName, OPTIONAL
-  IN REGSAM  samDesired,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY  phkClass,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#ifdef UNICODE
-#define CM_Open_Class_Key CM_Open_Class_KeyW
-#define CM_Open_Class_Key_Ex CM_Open_Class_Key_ExW
-#else
-#define CM_Open_Class_Key CM_Open_Class_KeyA
-#define CM_Open_Class_Key_Ex CM_Open_Class_Key_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_DevNode_Key(
-  IN DEVINST  dnDevNode,
-  IN REGSAM  samDesired,
-  IN ULONG  ulHardwareProfile,
-  IN REGDISPOSITION  Disposition,
-  OUT PHKEY  phkDevice,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_DevNode_Key_Ex(
-  IN DEVINST  dnDevNode,
-  IN REGSAM  samDesired,
-  IN ULONG  ulHardwareProfile,
-  IN REGDISPOSITION  Disposition,
-  OUT PHKEY  phkDevice,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#define CM_Open_DevInst_Key CM_Open_DevNode_Key
-#define CM_Open_DevInst_Key_Ex CM_Open_DevNode_Key_Ex
-
-/* CM_Query_And_Remove_SubTree.ulFlags constants */
-#define CM_REMOVE_UI_OK                                0x00000000
-#define CM_REMOVE_UI_NOT_OK                            0x00000001
-#define CM_REMOVE_NO_RESTART                           0x00000002
-#define CM_REMOVE_BITS                                 0x00000003
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Query_And_Remove_SubTreeA(
-  IN  DEVINST dnAncestor,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPSTR pszVetoName,
-  IN  ULONG ulNameLength,
-  IN  ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Query_And_Remove_SubTreeW(
-  IN  DEVINST dnAncestor,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPWSTR pszVetoName,
-  IN  ULONG ulNameLength,
-  IN  ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Query_And_Remove_SubTree_ExA(
-  IN  DEVINST dnAncestor,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPSTR pszVetoName,
-  IN  ULONG ulNameLength,
-  IN  ULONG ulFlags,
-  IN  HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Query_And_Remove_SubTree_ExW(
-  IN  DEVINST dnAncestor,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPWSTR pszVetoName,
-  IN  ULONG ulNameLength,
-  IN  ULONG ulFlags,
-  IN  HMACHINE hMachine);
-
-/* FIXME: Obsolete CM_Query_Arbitrator_Free_Data */
-/* FIXME: Obsolete CM_Query_Arbitrator_Free_Data_Ex */
-/* FIXME: Obsolete CM_Query_Arbitrator_Free_Size */
-/* FIXME: Obsolete CM_Query_Arbitrator_Free_Size_Ex */
-/* FIXME: Obsolete CM_Query_Arbitrator_Free_Size_Ex */
-/* FIXME: Obsolete CM_Query_Remove_SubTree */
-/* FIXME: Obsolete CM_Query_Remove_SubTree_Ex */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Query_Resource_Conflict_List(
-  OUT PCONFLICT_LIST  pclConflictList,
-  IN DEVINST  dnDevInst,
-  IN RESOURCEID  ResourceID,
-  IN PCVOID  ResourceData,
-  IN ULONG  ResourceLen,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-/* CM_Reenumerate_DevNode.ulFlags constants */
-#define CM_REENUMERATE_NORMAL             0x00000000
-#define CM_REENUMERATE_SYNCHRONOUS        0x00000001
-#define CM_REENUMERATE_RETRY_INSTALLATION 0x00000002
-#define CM_REENUMERATE_ASYNCHRONOUS       0x00000004
-#define CM_REENUMERATE_BITS               0x00000007
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Reenumerate_DevNode(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Reenumerate_DevNode_Ex(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#define CM_Reenumerate_DevInst CM_Reenumerate_DevNode
-#define CM_Reenumerate_DevInst_Ex CM_Reenumerate_DevNode_Ex
-
-/* FIXME: Obsolete CM_Register_Device_Driver */
-/* FIXME: Obsolete CM_Register_Device_Driver_Ex */
-/* FIXME: Obsolete CM_Register_Device_Interface */
-/* FIXME: Obsolete CM_Register_Device_Interface_Ex */
-/* FIXME: Obsolete CM_Remove_SubTree */
-/* FIXME: Obsolete CM_Remove_SubTree_Ex */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Device_EjectA(
-  IN DEVINST  dnDevInst,
-  OUT PPNP_VETO_TYPE  pVetoType,
-  OUT LPSTR  pszVetoName,
-  IN ULONG  ulNameLength,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Device_Eject_ExW(
-  IN DEVINST  dnDevInst,
-  OUT PPNP_VETO_TYPE  pVetoType,
-  OUT LPWSTR  pszVetoName,
-  IN ULONG  ulNameLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Device_Eject_ExA(
-  IN DEVINST  dnDevInst,
-  OUT PPNP_VETO_TYPE  pVetoType,
-  OUT LPSTR  pszVetoName,
-  IN ULONG  ulNameLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Device_EjectW(
-  IN DEVINST  dnDevInst,
-  OUT PPNP_VETO_TYPE  pVetoType,
-  OUT LPWSTR  pszVetoName,
-  IN ULONG  ulNameLength,
-  IN ULONG  ulFlags);
-
-#ifdef UNICODE
-#define CM_Request_Device_Eject CM_Request_Device_EjectW
-#define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExW
-#else
-#define CM_Request_Device_Eject CM_Request_Device_EjectA
-#define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Eject_PC(
-  VOID);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Eject_PC_Ex(
-  IN HMACHINE  hMachine);
-
-/* CM_Run_Detection[_Ex].ulFlags constants */
-#define CM_DETECT_NEW_PROFILE       0x00000001
-#define CM_DETECT_CRASHED           0x00000002
-#define CM_DETECT_HWPROF_FIRST_BOOT 0x00000004
-#define CM_DETECT_RUN               0x80000000
-#define CM_DETECT_BITS              0x80000007
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Run_Detection(
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Run_Detection_Ex(
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-/* FIXME: Obsolete CM_Set_Class_Registry_Property */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Problem(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulProblem,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Problem_Ex(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulProblem,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#define CM_Set_DevInst_Problem CM_Set_DevNode_Problem
-#define CM_Set_DevInst_Problem_Ex CM_Set_DevNode_Problem_Ex
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Registry_PropertyA(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulProperty,
-  IN PCVOID  Buffer, OPTIONAL
-  IN ULONG  ulLength,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Registry_PropertyW(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulProperty,
-  IN PCVOID  Buffer, OPTIONAL
-  IN ULONG  ulLength,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Registry_Property_ExA(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulProperty,
-  IN PCVOID  Buffer, OPTIONAL
-  IN ULONG  ulLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Registry_Property_ExW(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulProperty,
-  IN PCVOID  Buffer, OPTIONAL
-  IN ULONG  ulLength,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#define CM_Set_DevInst_Registry_PropertyW CM_Set_DevNode_Registry_PropertyW
-#define CM_Set_DevInst_Registry_PropertyA CM_Set_DevNode_Registry_PropertyA
-#define CM_Set_DevInst_Registry_Property_ExW CM_Set_DevNode_Registry_Property_ExW
-#define CM_Set_DevInst_Registry_Property_ExA CM_Set_DevNode_Registry_Property_ExA
-
-#ifdef UNICODE
-#define CM_Set_DevInst_Registry_Property CM_Set_DevNode_Registry_PropertyW
-#define CM_Set_DevInst_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExW
-#define CM_Set_DevNode_Registry_Property CM_Set_DevNode_Registry_PropertyW
-#define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExW
-#else
-#define CM_Set_DevInst_Registry_Property CM_Set_DevNode_Registry_PropertyA
-#define CM_Set_DevInst_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA
-#define CM_Set_DevNode_Registry_Property CM_Set_DevNode_Registry_PropertyA
-#define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof(
-  IN ULONG  ulHardwareProfile,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof_Ex(
-  IN ULONG  ulHardwareProfile,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-/* CM_Set_HW_Prof_Flags[_Ex].ulFlags constants */
-#define CM_SET_HW_PROF_FLAGS_UI_NOT_OK  (0x00000001)
-#define CM_SET_HW_PROF_FLAGS_BITS       (0x00000001)
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof_FlagsA(
-  IN DEVINSTID_A  szDevInstName,
-  IN ULONG  ulConfig,
-  IN ULONG  ulValue,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof_FlagsW(
-  IN DEVINSTID_W  szDevInstName,
-  IN ULONG  ulConfig,
-  IN ULONG  ulValue,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof_Flags_ExA(
-  IN DEVINSTID_A  szDevInstName,
-  IN ULONG  ulConfig,
-  IN ULONG  ulValue,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof_Flags_ExW(
-  IN DEVINSTID_W  szDevInstName,
-  IN ULONG  ulConfig,
-  IN ULONG  ulValue,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-#ifdef UNICODE
-#define CM_Set_HW_Prof_Flags CM_Set_HW_Prof_FlagsW
-#define CM_Set_HW_Prof_Flags_Ex CM_Set_HW_Prof_Flags_ExW
-#else
-#define CM_Set_HW_Prof_Flags CM_Set_HW_Prof_FlagsA
-#define CM_Set_HW_Prof_Flags_Ex CM_Set_HW_Prof_Flags_ExA
-#endif /* UNICODE */
-
-/* CM_Setup_DevInst[_Ex].ulFlags constants */
-#define CM_SETUP_DEVNODE_READY   (0x00000000)
-#define CM_SETUP_DEVINST_READY   CM_SETUP_DEVNODE_READY
-#define CM_SETUP_DOWNLOAD        (0x00000001)
-#define CM_SETUP_WRITE_LOG_CONFS (0x00000002)
-#define CM_SETUP_PROP_CHANGE     (0x00000003)
-#define CM_SETUP_DEVNODE_RESET   (0x00000004)
-#define CM_SETUP_DEVINST_RESET   CM_SETUP_DEVNODE_RESET
-#define CM_SETUP_BITS            (0x00000007)
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Setup_DevNode(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Setup_DevNode_Ex(
-  IN DEVINST  dnDevInst,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-/* FIXME: Obsolete CM_Test_Range_Available */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Uninstall_DevNode(
-  IN DEVINST  dnPhantom,
-  IN ULONG  ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Uninstall_DevNode_Ex(
-  IN DEVINST  dnPhantom,
-  IN ULONG  ulFlags,
-  IN HMACHINE  hMachine);
-
-/* FIXME: Obsolete CM_Unregister_Device_Interface */
-/* FIXME: Obsolete CM_Unregister_Device_Interface_Ex */
-
-#define CM_WaitNoPendingInstallEvents CMP_WaitNoPendingInstallEvents
-
-CMAPI
-DWORD
-WINAPI
-CMP_WaitNoPendingInstallEvents(
-  IN DWORD dwTimeout);
-
-#include <poppack.h>
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CFGMGR32_H_ */
diff --git a/reactos/include/ddk/mce.h b/reactos/include/ddk/mce.h
new file mode 100644 (file)
index 0000000..e2d8407
--- /dev/null
@@ -0,0 +1,1074 @@
+#pragma once
+
+#if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
+
+typedef union _MCI_ADDR {
+  struct {
+    ULONG Address;
+    ULONG Reserved;
+  } DUMMYSTRUCTNAME;
+  ULONGLONG QuadPart;
+} MCI_ADDR, *PMCI_ADDR;
+
+typedef enum {
+  HAL_MCE_RECORD,
+  HAL_MCA_RECORD
+} MCA_EXCEPTION_TYPE;
+
+#if defined(_AMD64_)
+
+#if (NTDDI_VERSION <= NTDDI_WINXP)
+
+typedef union _MCI_STATS {
+  struct {
+    USHORT McaCod;
+    USHORT ModelErrorCode;
+    ULONG OtherInfo:25;
+    ULONG Damage:1;
+    ULONG AddressValid:1;
+    ULONG MiscValid:1;
+    ULONG Enabled:1;
+    ULONG Uncorrected:1;
+    ULONG OverFlow:1;
+    ULONG Valid:1;
+  } MciStatus;
+  ULONG64 QuadPart;
+} MCI_STATS, *PMCI_STATS;
+
+#else
+
+typedef union _MCI_STATS {
+  struct {
+    USHORT McaErrorCode;
+    USHORT ModelErrorCode;
+    ULONG OtherInformation:25;
+    ULONG ContextCorrupt:1;
+    ULONG AddressValid:1;
+    ULONG MiscValid:1;
+    ULONG ErrorEnabled:1;
+    ULONG UncorrectedError:1;
+    ULONG StatusOverFlow:1;
+    ULONG Valid:1;
+  } MciStatus;
+  ULONG64 QuadPart;
+} MCI_STATS, *PMCI_STATS;
+
+#endif /* (NTDDI_VERSION <= NTDDI_WINXP) */
+
+#endif /* defined(_AMD64_) */
+
+#if defined(_X86_)
+typedef union _MCI_STATS {
+  struct {
+    USHORT McaCod;
+    USHORT MsCod;
+    ULONG OtherInfo:25;
+    ULONG Damage:1;
+    ULONG AddressValid:1;
+    ULONG MiscValid:1;
+    ULONG Enabled:1;
+    ULONG UnCorrected:1;
+    ULONG OverFlow:1;
+    ULONG Valid:1;
+  } MciStats;
+  ULONGLONG QuadPart;
+} MCI_STATS, *PMCI_STATS;
+#endif
+
+#define MCA_EXTREG_V2MAX               24
+
+#if defined(_X86_) || defined(_AMD64_)
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+typedef struct _MCA_EXCEPTION {
+  ULONG VersionNumber;
+  MCA_EXCEPTION_TYPE ExceptionType;
+  LARGE_INTEGER TimeStamp;
+  ULONG ProcessorNumber;
+  ULONG Reserved1;
+  union {
+    struct {
+      UCHAR BankNumber;
+      UCHAR Reserved2[7];
+      MCI_STATS Status;
+      MCI_ADDR Address;
+      ULONGLONG Misc;
+    } Mca;
+    struct {
+      ULONGLONG Address;
+      ULONGLONG Type;
+    } Mce;
+  } u;
+  ULONG ExtCnt;
+  ULONG Reserved3;
+  ULONGLONG ExtReg[MCA_EXTREG_V2MAX];
+} MCA_EXCEPTION, *PMCA_EXCEPTION;
+
+#else
+
+typedef struct _MCA_EXCEPTION {
+  ULONG VersionNumber;
+  MCA_EXCEPTION_TYPE ExceptionType;
+  LARGE_INTEGER TimeStamp;
+  ULONG ProcessorNumber;
+  ULONG Reserved1;
+  union {
+    struct {
+      UCHAR BankNumber;
+      UCHAR Reserved2[7];
+      MCI_STATS Status;
+      MCI_ADDR Address;
+      ULONGLONG Misc;
+    } Mca;
+    struct {
+      ULONGLONG Address;
+      ULONGLONG Type;
+    } Mce;
+  } u;
+} MCA_EXCEPTION, *PMCA_EXCEPTION;
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+typedef MCA_EXCEPTION CMC_EXCEPTION, *PCMC_EXCEPTION;
+typedef MCA_EXCEPTION CPE_EXCEPTION, *PCPE_EXCEPTION;
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+#define MCA_EXCEPTION_V1_SIZE FIELD_OFFSET(MCA_EXCEPTION, ExtCnt)
+#define MCA_EXCEPTION_V2_SIZE sizeof(struct _MCA_EXCEPTION)
+#endif
+
+#endif /* defined(_X86_) || defined(_AMD64_) */
+
+#if defined(_AMD64_) || defined(_IA64_)
+
+typedef UCHAR ERROR_SEVERITY, *PERROR_SEVERITY;
+
+typedef enum _ERROR_SEVERITY_VALUE {
+  ErrorRecoverable = 0,
+  ErrorFatal = 1,
+  ErrorCorrected = 2,
+  ErrorOthers = 3,
+} ERROR_SEVERITY_VALUE;
+
+#endif
+
+#if defined(_IA64_)
+
+typedef union _ERROR_REVISION {
+  USHORT Revision;
+  struct {
+    UCHAR Minor;
+    UCHAR Major;
+  } DUMMYSTRUCTNAME;
+} ERROR_REVISION, *PERROR_REVISION;
+
+#if (NTDDI_VERSION > NTDDI_WINXP)
+#define ERROR_MAJOR_REVISION_SAL_03_00      0
+#define ERROR_MINOR_REVISION_SAL_03_00      2
+#define ERROR_REVISION_SAL_03_00 {ERROR_MINOR_REVISION_SAL_03_00,ERROR_MAJOR_REVISION_SAL_03_00}
+#define ERROR_FIXED_SECTION_REVISION {2,0}
+#else
+#define ERROR_REVISION_SAL_03_00 {2,0}
+#endif /* (NTDDI_VERSION > NTDDI_WINXP) */
+
+typedef union _ERROR_TIMESTAMP {
+  ULONGLONG TimeStamp;
+  struct {
+    UCHAR Seconds;
+    UCHAR Minutes;
+    UCHAR Hours;
+    UCHAR Reserved;
+    UCHAR Day;
+    UCHAR Month;
+    UCHAR Year;
+    UCHAR Century;
+  } DUMMYSTRUCTNAME;
+} ERROR_TIMESTAMP, *PERROR_TIMESTAMP;
+
+typedef struct _ERROR_GUID {
+  ULONG Data1;
+  USHORT Data2;
+  USHORT Data3;
+  UCHAR Data4[8];
+} ERROR_GUID, *PERROR_GUID;
+
+typedef ERROR_GUID            _ERROR_DEVICE_GUID;
+typedef _ERROR_DEVICE_GUID    ERROR_DEVICE_GUID, *PERROR_DEVICE_GUID;
+
+typedef ERROR_GUID            _ERROR_PLATFORM_GUID;
+typedef _ERROR_PLATFORM_GUID  ERROR_PLATFORM_GUID, *PERROR_PLATFORM_GUID;
+
+typedef union _ERROR_RECORD_VALID {
+  UCHAR Valid;
+  struct {
+    UCHAR OemPlatformID:1;
+    UCHAR Reserved:7;
+  } DUMMYSTRUCTNAME;
+} ERROR_RECORD_VALID, *PERROR_RECORD_VALID;
+
+typedef struct _ERROR_RECORD_HEADER {
+  ULONGLONG Id;
+  ERROR_REVISION Revision;
+  ERROR_SEVERITY ErrorSeverity;
+  ERROR_RECORD_VALID Valid;
+  ULONG Length;
+  ERROR_TIMESTAMP TimeStamp;
+  UCHAR OemPlatformId[16];
+} ERROR_RECORD_HEADER, *PERROR_RECORD_HEADER;
+
+typedef union _ERROR_RECOVERY_INFO {
+  UCHAR RecoveryInfo;
+  struct {
+    UCHAR Corrected:1;
+    UCHAR NotContained:1;
+    UCHAR Reset:1;
+    UCHAR Reserved:4;
+    UCHAR Valid:1;
+  } DUMMYSTRUCTNAME;
+} ERROR_RECOVERY_INFO, *PERROR_RECOVERY_INFO;
+
+typedef struct _ERROR_SECTION_HEADER {
+  ERROR_DEVICE_GUID Guid;
+  ERROR_REVISION Revision;
+  ERROR_RECOVERY_INFO RecoveryInfo;
+  UCHAR Reserved;
+  ULONG Length;
+} ERROR_SECTION_HEADER, *PERROR_SECTION_HEADER;
+
+#if !defined(__midl) && defined(_MSC_EXTENSIONS)
+__inline
+USHORT
+NTAPI
+GetFwMceLogProcessorNumber(
+  PERROR_RECORD_HEADER Log)
+{
+  PERROR_SECTION_HEADER section = (PERROR_SECTION_HEADER)((ULONG64)Log + sizeof(*Log));
+  USHORT lid = (USHORT)((UCHAR)(section->Reserved));
+  lid |= (USHORT)((UCHAR)(Log->TimeStamp.Reserved) << 8);
+  return( lid );
+}
+#endif
+
+#define ERROR_PROCESSOR_GUID {0xe429faf1, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_MODINFO_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG CheckInfo:1;
+    ULONGLONG RequestorIdentifier:1;
+    ULONGLONG ResponderIdentifier:1;
+    ULONGLONG TargetIdentifier:1;
+    ULONGLONG PreciseIP:1;
+    ULONGLONG Reserved:59;
+  } DUMMYSTRUCTNAME;
+} ERROR_MODINFO_VALID, *PERROR_MODINFO_VALID;
+
+typedef enum _ERROR_CHECK_IS {
+  isIA64 = 0,
+  isIA32 = 1,
+} ERROR_CHECK_IS;
+
+typedef enum _ERROR_CACHE_CHECK_OPERATION {
+  CacheUnknownOp = 0,
+  CacheLoad = 1,
+  CacheStore = 2,
+  CacheInstructionFetch = 3,
+  CacheDataPrefetch = 4,
+  CacheSnoop = 5,
+  CacheCastOut = 6,
+  CacheMoveIn = 7,
+} ERROR_CACHE_CHECK_OPERATION;
+
+typedef enum _ERROR_CACHE_CHECK_MESI {
+  CacheInvalid = 0,
+  CacheHeldShared = 1,
+  CacheHeldExclusive = 2,
+  CacheModified = 3,
+} ERROR_CACHE_CHECK_MESI;
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+typedef union _ERROR_CACHE_CHECK {
+  ULONGLONG CacheCheck;
+  struct {
+    ULONGLONG Operation:4;
+    ULONGLONG Level:2;
+    ULONGLONG Reserved1:2;
+    ULONGLONG DataLine:1;
+    ULONGLONG TagLine:1;
+    ULONGLONG DataCache:1;
+    ULONGLONG InstructionCache:1;
+    ULONGLONG MESI:3;
+    ULONGLONG MESIValid:1;
+    ULONGLONG Way:5;
+    ULONGLONG WayIndexValid:1;
+    ULONGLONG Reserved2:1;
+    ULONGLONG DP:1;
+    ULONGLONG Reserved3:8;
+    ULONGLONG Index:20;
+    ULONGLONG Reserved4:2;
+    ULONGLONG InstructionSet:1;
+    ULONGLONG InstructionSetValid:1;
+    ULONGLONG PrivilegeLevel:2;
+    ULONGLONG PrivilegeLevelValid:1;
+    ULONGLONG MachineCheckCorrected:1;
+    ULONGLONG TargetAddressValid:1;
+    ULONGLONG RequestIdValid:1;
+    ULONGLONG ResponderIdValid:1;
+    ULONGLONG PreciseIPValid:1;
+  } DUMMYSTRUCTNAME;
+} ERROR_CACHE_CHECK, *PERROR_CACHE_CHECK;
+
+# else
+
+typedef union _ERROR_CACHE_CHECK {
+  ULONGLONG CacheCheck;
+  struct {
+    ULONGLONG Operation:4;
+    ULONGLONG Level:2;
+    ULONGLONG Reserved1:2;
+    ULONGLONG DataLine:1;
+    ULONGLONG TagLine:1;
+    ULONGLONG DataCache:1;
+    ULONGLONG InstructionCache:1;
+    ULONGLONG MESI:3;
+    ULONGLONG MESIValid:1;
+    ULONGLONG Way:5;
+    ULONGLONG WayIndexValid:1;
+    ULONGLONG Reserved2:10;
+    ULONGLONG Index:20;
+    ULONGLONG Reserved3:2;
+    ULONGLONG InstructionSet:1;
+    ULONGLONG InstructionSetValid:1;
+    ULONGLONG PrivilegeLevel:2;
+    ULONGLONG PrivilegeLevelValid:1;
+    ULONGLONG MachineCheckCorrected:1;
+    ULONGLONG TargetAddressValid:1;
+    ULONGLONG RequestIdValid:1;
+    ULONGLONG ResponderIdValid:1;
+    ULONGLONG PreciseIPValid:1;
+  } DUMMYSTRUCTNAME;
+} ERROR_CACHE_CHECK, *PERROR_CACHE_CHECK;
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+typedef enum _ERROR_TLB_CHECK_OPERATION {
+  TlbUnknownOp = 0,
+  TlbAccessWithLoad = 1,
+  TlbAccessWithStore = 2,
+  TlbAccessWithInstructionFetch = 3,
+  TlbAccessWithDataPrefetch = 4,
+  TlbShootDown = 5,
+  TlbProbe = 6,
+  TlbVhptFill = 7,
+  TlbPurge = 8,
+} ERROR_TLB_CHECK_OPERATION;
+
+typedef union _ERROR_TLB_CHECK {
+  ULONGLONG TlbCheck;
+  struct {
+    ULONGLONG TRSlot:8;
+    ULONGLONG TRSlotValid:1;
+    ULONGLONG Reserved1:1;
+    ULONGLONG Level:2;
+    ULONGLONG Reserved2:4;
+    ULONGLONG DataTransReg:1;
+    ULONGLONG InstructionTransReg:1;
+    ULONGLONG DataTransCache:1;
+    ULONGLONG InstructionTransCache:1;
+    ULONGLONG Operation:4;
+    ULONGLONG Reserved3:30;
+    ULONGLONG InstructionSet:1;
+    ULONGLONG InstructionSetValid:1;
+    ULONGLONG PrivilegeLevel:2;
+    ULONGLONG PrivilegeLevelValid:1;
+    ULONGLONG MachineCheckCorrected:1;
+    ULONGLONG TargetAddressValid:1;
+    ULONGLONG RequestIdValid:1;
+    ULONGLONG ResponderIdValid:1;
+    ULONGLONG PreciseIPValid:1;
+  } DUMMYSTRUCTNAME;
+} ERROR_TLB_CHECK, *PERROR_TLB_CHECK;
+
+typedef enum _ERROR_BUS_CHECK_OPERATION {
+  BusUnknownOp = 0,
+  BusPartialRead = 1,
+  BusPartialWrite = 2,
+  BusFullLineRead = 3,
+  BusFullLineWrite = 4,
+  BusWriteBack = 5,
+  BusSnoopProbe = 6,
+  BusIncomingPtcG = 7,
+  BusWriteCoalescing = 8,
+} ERROR_BUS_CHECK_OPERATION;
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+typedef union _ERROR_BUS_CHECK {
+  ULONGLONG BusCheck;
+  struct {
+    ULONGLONG Size:5;
+    ULONGLONG Internal:1;
+    ULONGLONG External:1;
+    ULONGLONG CacheTransfer:1;
+    ULONGLONG Type:8;
+    ULONGLONG Severity:5;
+    ULONGLONG Hierarchy:2;
+    ULONGLONG DP:1;
+    ULONGLONG Status:8;
+    ULONGLONG Reserved1:22;
+    ULONGLONG InstructionSet:1;
+    ULONGLONG InstructionSetValid:1;
+    ULONGLONG PrivilegeLevel:2;
+    ULONGLONG PrivilegeLevelValid:1;
+    ULONGLONG MachineCheckCorrected:1;
+    ULONGLONG TargetAddressValid:1;
+    ULONGLONG RequestIdValid:1;
+    ULONGLONG ResponderIdValid:1;
+    ULONGLONG PreciseIPValid:1;
+  } DUMMYSTRUCTNAME;
+} ERROR_BUS_CHECK, *PERROR_BUS_CHECK;
+
+#else
+
+typedef union _ERROR_BUS_CHECK {
+  ULONGLONG BusCheck;
+  struct {
+    ULONGLONG Size:5;
+    ULONGLONG Internal:1;
+    ULONGLONG External:1;
+    ULONGLONG CacheTransfer:1;
+    ULONGLONG Type:8;
+    ULONGLONG Severity:5;
+    ULONGLONG Hierarchy:2;
+    ULONGLONG Reserved1:1;
+    ULONGLONG Status:8;
+    ULONGLONG Reserved2:22;
+    ULONGLONG InstructionSet:1;
+    ULONGLONG InstructionSetValid:1;
+    ULONGLONG PrivilegeLevel:2;
+    ULONGLONG PrivilegeLevelValid:1;
+    ULONGLONG MachineCheckCorrected:1;
+    ULONGLONG TargetAddressValid:1;
+    ULONGLONG RequestIdValid:1;
+    ULONGLONG ResponderIdValid:1;
+    ULONGLONG PreciseIPValid:1;
+  } DUMMYSTRUCTNAME;
+} ERROR_BUS_CHECK, *PERROR_BUS_CHECK;
+
+#endif
+
+typedef enum _ERROR_REGFILE_CHECK_IDENTIFIER {
+  RegFileUnknownId = 0,
+  GeneralRegisterBank1 = 1,
+  GeneralRegisterBank0 = 2,
+  FloatingPointRegister = 3,
+  BranchRegister = 4,
+  PredicateRegister = 5,
+  ApplicationRegister = 6,
+  ControlRegister = 7,
+  RegionRegister = 8,
+  ProtectionKeyRegister = 9,
+  DataBreakPointRegister = 10,
+  InstructionBreakPointRegister = 11,
+  PerformanceMonitorControlRegister = 12,
+  PerformanceMonitorDataRegister = 13,
+} ERROR_REGFILE_CHECK_IDENTIFIER;
+
+typedef enum _ERROR_REGFILE_CHECK_OPERATION {
+  RegFileUnknownOp = 0,
+  RegFileRead = 1,
+  RegFileWrite = 2,
+} ERROR_REGFILE_CHECK_OPERATION;
+
+typedef union _ERROR_REGFILE_CHECK {
+  ULONGLONG RegFileCheck;
+  struct {
+    ULONGLONG Identifier:4;
+    ULONGLONG Operation:4;
+    ULONGLONG RegisterNumber:7;
+    ULONGLONG RegisterNumberValid:1;
+    ULONGLONG Reserved1:38;
+    ULONGLONG InstructionSet:1;
+    ULONGLONG InstructionSetValid:1;
+    ULONGLONG PrivilegeLevel:2;
+    ULONGLONG PrivilegeLevelValid:1;
+    ULONGLONG MachineCheckCorrected:1;
+    ULONGLONG Reserved2:3;
+    ULONGLONG PreciseIPValid:1;
+  } DUMMYSTRUCTNAME;
+} ERROR_REGFILE_CHECK, *PERROR_REGFILE_CHECK;
+
+#if (NTDDK_VERSION <= WINXP)
+typedef enum _ERROR_MS_CHECK_OPERATION {
+  MsUnknownOp = 0,
+  MsReadOrLoad = 1,
+  MsWriteOrStore = 2
+} ERROR_MS_CHECK_OPERATION;
+#else
+typedef enum _ERROR_MS_CHECK_OPERATION {
+  MsUnknownOp = 0,
+  MsReadOrLoad = 1,
+  MsWriteOrStore = 2,
+  MsOverTemperature = 3,
+  MsNormalTemperature = 4
+} ERROR_MS_CHECK_OPERATION;
+#endif
+
+typedef union _ERROR_MS_CHECK {
+  ULONGLONG MsCheck;
+  struct {
+    ULONGLONG StructureIdentifier:5;
+    ULONGLONG Level:3;
+    ULONGLONG ArrayId:4;
+    ULONGLONG Operation:4;
+    ULONGLONG Way:6;
+    ULONGLONG WayValid:1;
+    ULONGLONG IndexValid:1;
+    ULONGLONG Reserved1:8;
+    ULONGLONG Index:8;
+    ULONGLONG Reserved2:14;
+    ULONGLONG InstructionSet:1;
+    ULONGLONG InstructionSetValid:1;
+    ULONGLONG PrivilegeLevel:2;
+    ULONGLONG PrivilegeLevelValid:1;
+    ULONGLONG MachineCheckCorrected:1;
+    ULONGLONG TargetAddressValid:1;
+    ULONGLONG RequestIdValid:1;
+    ULONGLONG ResponderIdValid:1;
+    ULONGLONG PreciseIPValid:1;
+  } DUMMYSTRUCTNAME;
+} ERROR_MS_CHECK, *PERROR_MS_CHECK;
+
+typedef union _ERROR_CHECK_INFO {
+  ULONGLONG CheckInfo;
+  ERROR_CACHE_CHECK CacheCheck;
+  ERROR_TLB_CHECK TlbCheck;
+  ERROR_BUS_CHECK BusCheck;
+  ERROR_REGFILE_CHECK RegFileCheck;
+  ERROR_MS_CHECK MsCheck;
+} ERROR_CHECK_INFO, *PERROR_CHECK_INFO;
+
+typedef struct _ERROR_MODINFO {
+  ERROR_MODINFO_VALID Valid;
+  ERROR_CHECK_INFO CheckInfo;
+  ULONGLONG RequestorId;
+  ULONGLONG ResponderId;
+  ULONGLONG TargetId;
+  ULONGLONG PreciseIP;
+} ERROR_MODINFO, *PERROR_MODINFO;
+
+typedef union _ERROR_PROCESSOR_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG ErrorMap:1;
+    ULONGLONG StateParameter:1;
+    ULONGLONG CRLid:1;
+    ULONGLONG StaticStruct:1;
+    ULONGLONG CacheCheckNum:4;
+    ULONGLONG TlbCheckNum:4;
+    ULONGLONG BusCheckNum:4;
+    ULONGLONG RegFileCheckNum:4;
+    ULONGLONG MsCheckNum:4;
+    ULONGLONG CpuIdInfo:1;
+    ULONGLONG Reserved:39;
+  } DUMMYSTRUCTNAME;
+} ERROR_PROCESSOR_VALID, *PERROR_PROCESSOR_VALID;
+
+typedef union _ERROR_PROCESSOR_ERROR_MAP {
+  ULONGLONG ErrorMap;
+  struct {
+    ULONGLONG   Cid:4;
+    ULONGLONG   Tid:4;
+    ULONGLONG   Eic:4;
+    ULONGLONG   Edc:4;
+    ULONGLONG   Eit:4;
+    ULONGLONG   Edt:4;
+    ULONGLONG   Ebh:4;
+    ULONGLONG   Erf:4;
+    ULONGLONG   Ems:16;
+    ULONGLONG   Reserved:16;
+  } DUMMYSTRUCTNAME;
+} ERROR_PROCESSOR_ERROR_MAP, *PERROR_PROCESSOR_ERROR_MAP;
+
+typedef ERROR_PROCESSOR_ERROR_MAP    _ERROR_PROCESSOR_LEVEL_INDEX;
+typedef _ERROR_PROCESSOR_LEVEL_INDEX ERROR_PROCESSOR_LEVEL_INDEX, *PERROR_PROCESSOR_LEVEL_INDEX;
+
+typedef union _ERROR_PROCESSOR_STATE_PARAMETER {
+  ULONGLONG   StateParameter;
+  struct {
+    ULONGLONG reserved0:2;
+    ULONGLONG rz:1;
+    ULONGLONG ra:1;
+    ULONGLONG me:1;
+    ULONGLONG mn:1;
+    ULONGLONG sy:1;
+    ULONGLONG co:1;
+    ULONGLONG ci:1;
+    ULONGLONG us:1;
+    ULONGLONG hd:1;
+    ULONGLONG tl:1;
+    ULONGLONG mi:1;
+    ULONGLONG pi:1;
+    ULONGLONG pm:1;
+    ULONGLONG dy:1;
+    ULONGLONG in:1;
+    ULONGLONG rs:1;
+    ULONGLONG cm:1;
+    ULONGLONG ex:1;
+    ULONGLONG cr:1;
+    ULONGLONG pc:1;
+    ULONGLONG dr:1;
+    ULONGLONG tr:1;
+    ULONGLONG rr:1;
+    ULONGLONG ar:1;
+    ULONGLONG br:1;
+    ULONGLONG pr:1;
+    ULONGLONG fp:1;
+    ULONGLONG b1:1;
+    ULONGLONG b0:1;
+    ULONGLONG gr:1;
+    ULONGLONG dsize:16;
+    ULONGLONG reserved1:11;
+    ULONGLONG cc:1;
+    ULONGLONG tc:1;
+    ULONGLONG bc:1;
+    ULONGLONG rc:1;
+    ULONGLONG uc:1;
+  } DUMMYSTRUCTNAME;
+} ERROR_PROCESSOR_STATE_PARAMETER, *PERROR_PROCESSOR_STATE_PARAMETER;
+
+typedef union _PROCESSOR_LOCAL_ID {
+  ULONGLONG LocalId;
+  struct {
+    ULONGLONG reserved:16;
+    ULONGLONG eid:8;
+    ULONGLONG id:8;
+    ULONGLONG ignored:32;
+  } DUMMYSTRUCTNAME;
+} PROCESSOR_LOCAL_ID, *PPROCESSOR_LOCAL_ID;
+
+typedef struct _ERROR_PROCESSOR_MS {
+  ULONGLONG MsError[1];
+} ERROR_PROCESSOR_MS, *PERROR_PROCESSOR_MS;
+
+typedef struct _ERROR_PROCESSOR_CPUID_INFO {
+  ULONGLONG CpuId0;
+  ULONGLONG CpuId1;
+  ULONGLONG CpuId2;
+  ULONGLONG CpuId3;
+  ULONGLONG CpuId4;
+  ULONGLONG Reserved;
+} ERROR_PROCESSOR_CPUID_INFO, *PERROR_PROCESSOR_CPUID_INFO;
+
+typedef union _ERROR_PROCESSOR_STATIC_INFO_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG MinState:1;
+    ULONGLONG BR:1;
+    ULONGLONG CR:1;
+    ULONGLONG AR:1;
+    ULONGLONG RR:1;
+    ULONGLONG FR:1;
+    ULONGLONG Reserved:58;
+  } DUMMYSTRUCTNAME;
+} ERROR_PROCESSOR_STATIC_INFO_VALID, *PERROR_PROCESSOR_STATIC_INFO_VALID;
+
+typedef struct _ERROR_PROCESSOR_STATIC_INFO {
+  ERROR_PROCESSOR_STATIC_INFO_VALID Valid;
+  UCHAR MinState[1024];
+  ULONGLONG BR[8];
+  ULONGLONG CR[128];
+  ULONGLONG AR[128];
+  ULONGLONG RR[8];
+  ULONGLONG FR[2 * 128];
+} ERROR_PROCESSOR_STATIC_INFO, *PERROR_PROCESSOR_STATIC_INFO;
+
+typedef struct _ERROR_PROCESSOR {
+  ERROR_SECTION_HEADER Header;
+  ERROR_PROCESSOR_VALID Valid;
+  ERROR_PROCESSOR_ERROR_MAP ErrorMap;
+  ERROR_PROCESSOR_STATE_PARAMETER StateParameter;
+  PROCESSOR_LOCAL_ID CRLid;
+} ERROR_PROCESSOR, *PERROR_PROCESSOR;
+
+#define ERROR_PROCESSOR_STATE_PARAMETER_CACHE_CHECK_SHIFT         59
+#define ERROR_PROCESSOR_STATE_PARAMETER_CACHE_CHECK_MASK          0x1
+#define ERROR_PROCESSOR_STATE_PARAMETER_TLB_CHECK_SHIFT           60
+#define ERROR_PROCESSOR_STATE_PARAMETER_TLB_CHECK_MASK            0x1
+#define ERROR_PROCESSOR_STATE_PARAMETER_BUS_CHECK_SHIFT           61
+#define ERROR_PROCESSOR_STATE_PARAMETER_BUS_CHECK_MASK            0x1
+#define ERROR_PROCESSOR_STATE_PARAMETER_REG_CHECK_SHIFT           62
+#define ERROR_PROCESSOR_STATE_PARAMETER_REG_CHECK_MASK            0x1
+#define ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_SHIFT     63
+#define ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_MASK      0x1
+
+#define ERROR_PROCESSOR_STATE_PARAMETER_UNKNOWN_CHECK_SHIFT       ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_SHIFT
+#define ERROR_PROCESSOR_STATE_PARAMETER_UNKNOWN_CHECK_MASK        ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_MASK
+
+typedef enum _ERR_TYPES {
+  ERR_INTERNAL = 1,
+  ERR_BUS = 16,
+  ERR_MEM = 4,
+  ERR_TLB = 5,
+  ERR_CACHE = 6,
+  ERR_FUNCTION = 7,
+  ERR_SELFTEST = 8,
+  ERR_FLOW = 9,
+  ERR_MAP = 17,
+  ERR_IMPROPER = 18,
+  ERR_UNIMPL = 19,
+  ERR_LOL = 20,
+  ERR_RESPONSE = 21,
+  ERR_PARITY = 22,
+  ERR_PROTOCOL = 23,
+  ERR_ERROR = 24,
+  ERR_TIMEOUT = 25,
+  ERR_POISONED = 26,
+} _ERR_TYPE;
+
+typedef union _ERROR_STATUS {
+  ULONGLONG Status;
+  struct {
+    ULONGLONG Reserved0:8;
+    ULONGLONG Type:8;
+    ULONGLONG Address:1;
+    ULONGLONG Control:1;
+    ULONGLONG Data:1;
+    ULONGLONG Responder:1;
+    ULONGLONG Requestor:1;
+    ULONGLONG FirstError:1;
+    ULONGLONG Overflow:1;
+    ULONGLONG Reserved1:41;
+  } DUMMYSTRUCTNAME;
+} ERROR_STATUS, *PERROR_STATUS;
+
+typedef struct _ERROR_OEM_DATA {
+  USHORT Length;
+} ERROR_OEM_DATA, *PERROR_OEM_DATA;
+
+typedef union _ERROR_BUS_SPECIFIC_DATA {
+  ULONGLONG BusSpecificData;
+  struct {
+    ULONGLONG LockAsserted:1;
+    ULONGLONG DeferLogged:1;
+    ULONGLONG IOQEmpty:1;
+    ULONGLONG DeferredTransaction:1;
+    ULONGLONG RetriedTransaction:1;
+    ULONGLONG MemoryClaimedTransaction:1;
+    ULONGLONG IOClaimedTransaction:1;
+    ULONGLONG ResponseParitySignal:1;
+    ULONGLONG DeferSignal:1;
+    ULONGLONG HitMSignal:1;
+    ULONGLONG HitSignal:1;
+    ULONGLONG RequestBusFirstCycle:6;
+    ULONGLONG RequestBusSecondCycle:6;
+    ULONGLONG AddressParityBusFirstCycle:2;
+    ULONGLONG AddressParityBusSecondCycle:2;
+    ULONGLONG ResponseBus:3;
+    ULONGLONG RequestParitySignalFirstCycle:1;
+    ULONGLONG RequestParitySignalSecondCycle:1;
+    ULONGLONG Reserved:32;
+  } DUMMYSTRUCTNAME;
+} ERROR_BUS_SPECIFIC_DATA, *PERROR_BUS_SPECIFIC_DATA;
+
+#define ERROR_MEMORY_GUID {0xe429faf2, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_MEMORY_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG ErrorStatus:1;
+    ULONGLONG PhysicalAddress:1;
+    ULONGLONG AddressMask:1;
+    ULONGLONG Node:1;
+    ULONGLONG Card:1;
+    ULONGLONG Module:1;
+    ULONGLONG Bank:1;
+    ULONGLONG Device:1;
+    ULONGLONG Row:1;
+    ULONGLONG Column:1;
+    ULONGLONG BitPosition:1;
+    ULONGLONG RequestorId:1;
+    ULONGLONG ResponderId:1;
+    ULONGLONG TargetId:1;
+    ULONGLONG BusSpecificData:1;
+    ULONGLONG OemId:1;
+    ULONGLONG OemData:1;
+    ULONGLONG Reserved:47;
+  } DUMMYSTRUCTNAME;
+} ERROR_MEMORY_VALID, *PERROR_MEMORY_VALID;
+
+typedef struct _ERROR_MEMORY {
+  ERROR_SECTION_HEADER Header;
+  ERROR_MEMORY_VALID Valid;
+  ERROR_STATUS ErrorStatus;
+  ULONGLONG PhysicalAddress;
+  ULONGLONG PhysicalAddressMask;
+  USHORT Node;
+  USHORT Card;
+  USHORT Module;
+  USHORT Bank;
+  USHORT Device;
+  USHORT Row;
+  USHORT Column;
+  USHORT BitPosition;
+  ULONGLONG RequestorId;
+  ULONGLONG ResponderId;
+  ULONGLONG TargetId;
+  ULONGLONG BusSpecificData;
+  UCHAR OemId[16];
+  ERROR_OEM_DATA OemData;
+} ERROR_MEMORY, *PERROR_MEMORY;
+
+#define ERROR_PCI_BUS_GUID {0xe429faf4, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_PCI_BUS_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG ErrorStatus:1;
+    ULONGLONG ErrorType:1;
+    ULONGLONG Id:1;
+    ULONGLONG Address:1;
+    ULONGLONG Data:1;
+    ULONGLONG CmdType:1;
+    ULONGLONG RequestorId:1;
+    ULONGLONG ResponderId:1;
+    ULONGLONG TargetId:1;
+    ULONGLONG OemId:1;
+    ULONGLONG OemData:1;
+    ULONGLONG Reserved:53;
+  } DUMMYSTRUCTNAME;
+} ERROR_PCI_BUS_VALID, *PERROR_PCI_BUS_VALID;
+
+typedef struct _ERROR_PCI_BUS_TYPE {
+  UCHAR Type;
+  UCHAR Reserved;
+} ERROR_PCI_BUS_TYPE, *PERROR_PCI_BUS_TYPE;
+
+#define PciBusUnknownError       ((UCHAR)0)
+#define PciBusDataParityError    ((UCHAR)1)
+#define PciBusSystemError        ((UCHAR)2)
+#define PciBusMasterAbort        ((UCHAR)3)
+#define PciBusTimeOut            ((UCHAR)4)
+#define PciMasterDataParityError ((UCHAR)5)
+#define PciAddressParityError    ((UCHAR)6)
+#define PciCommandParityError    ((UCHAR)7)
+
+typedef struct _ERROR_PCI_BUS_ID {
+  UCHAR BusNumber;
+  UCHAR SegmentNumber;
+} ERROR_PCI_BUS_ID, *PERROR_PCI_BUS_ID;
+
+typedef struct _ERROR_PCI_BUS {
+  ERROR_SECTION_HEADER Header;
+  ERROR_PCI_BUS_VALID Valid;
+  ERROR_STATUS ErrorStatus;
+  ERROR_PCI_BUS_TYPE Type;
+  ERROR_PCI_BUS_ID Id;
+  UCHAR Reserved[4];
+  ULONGLONG Address;
+  ULONGLONG Data;
+  ULONGLONG CmdType;
+  ULONGLONG RequestorId;
+  ULONGLONG ResponderId;
+  ULONGLONG TargetId;
+  UCHAR OemId[16];
+  ERROR_OEM_DATA OemData;
+} ERROR_PCI_BUS, *PERROR_PCI_BUS;
+
+#define ERROR_PCI_COMPONENT_GUID {0xe429faf6, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_PCI_COMPONENT_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG ErrorStatus:1;
+    ULONGLONG Info:1;
+    ULONGLONG MemoryMappedRegistersPairs:1;
+    ULONGLONG ProgrammedIORegistersPairs:1;
+    ULONGLONG RegistersDataPairs:1;
+    ULONGLONG OemData:1;
+    ULONGLONG Reserved:58;
+  } DUMMYSTRUCTNAME;
+} ERROR_PCI_COMPONENT_VALID, *PERROR_PCI_COMPONENT_VALID;
+
+typedef struct _ERROR_PCI_COMPONENT_INFO {
+  USHORT VendorId;
+  USHORT DeviceId;
+  UCHAR ClassCodeInterface;
+  UCHAR ClassCodeSubClass;
+  UCHAR ClassCodeBaseClass;
+  UCHAR FunctionNumber;
+  UCHAR DeviceNumber;
+  UCHAR BusNumber;
+  UCHAR SegmentNumber;
+  UCHAR Reserved0;
+  ULONG Reserved1;
+} ERROR_PCI_COMPONENT_INFO, *PERROR_PCI_COMPONENT_INFO;
+
+typedef struct _ERROR_PCI_COMPONENT {
+  ERROR_SECTION_HEADER Header;
+  ERROR_PCI_COMPONENT_VALID Valid;
+  ERROR_STATUS ErrorStatus;
+  ERROR_PCI_COMPONENT_INFO Info;
+  ULONG MemoryMappedRegistersPairs;
+  ULONG ProgrammedIORegistersPairs;
+} ERROR_PCI_COMPONENT, *PERROR_PCI_COMPONENT;
+
+#define ERROR_SYSTEM_EVENT_LOG_GUID {0xe429faf3, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_SYSTEM_EVENT_LOG_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG RecordId:1;
+    ULONGLONG RecordType:1;
+    ULONGLONG GeneratorId:1;
+    ULONGLONG EVMRev:1;
+    ULONGLONG SensorType:1;
+    ULONGLONG SensorNum:1;
+    ULONGLONG EventDirType:1;
+    ULONGLONG EventData1:1;
+    ULONGLONG EventData2:1;
+    ULONGLONG EventData3:1;
+    ULONGLONG Reserved:54;
+  } DUMMYSTRUCTNAME;
+} ERROR_SYSTEM_EVENT_LOG_VALID, *PSYSTEM_EVENT_LOG_VALID;
+
+typedef struct _ERROR_SYSTEM_EVENT_LOG {
+  ERROR_SECTION_HEADER Header;
+  ERROR_SYSTEM_EVENT_LOG_VALID Valid;
+  USHORT RecordId;
+  UCHAR RecordType;
+  ULONG TimeStamp;
+  USHORT GeneratorId;
+  UCHAR EVMRevision;
+  UCHAR SensorType;
+  UCHAR SensorNumber;
+  UCHAR EventDir;
+  UCHAR Data1;
+  UCHAR Data2;
+  UCHAR Data3;
+} ERROR_SYSTEM_EVENT_LOG, *PERROR_SYSTEM_EVENT_LOG;
+
+#define ERROR_SMBIOS_GUID {0xe429faf5, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_SMBIOS_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG EventType:1;
+    ULONGLONG Length:1;
+    ULONGLONG TimeStamp:1;
+    ULONGLONG OemData:1;
+    ULONGLONG Reserved:60;
+  } DUMMYSTRUCTNAME;
+} ERROR_SMBIOS_VALID, *PERROR_SMBIOS_VALID;
+
+typedef UCHAR ERROR_SMBIOS_EVENT_TYPE, *PERROR_SMBIOS_EVENT_TYPE;
+
+typedef struct _ERROR_SMBIOS {
+  ERROR_SECTION_HEADER Header;
+  ERROR_SMBIOS_VALID Valid;
+  ERROR_SMBIOS_EVENT_TYPE EventType;
+  UCHAR Length;
+  ERROR_TIMESTAMP TimeStamp;
+  ERROR_OEM_DATA OemData;
+} ERROR_SMBIOS, *PERROR_SMBIOS;
+
+#define ERROR_PLATFORM_SPECIFIC_GUID {0xe429faf7, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_PLATFORM_SPECIFIC_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG ErrorStatus:1;
+    ULONGLONG RequestorId:1;
+    ULONGLONG ResponderId:1;
+    ULONGLONG TargetId:1;
+    ULONGLONG BusSpecificData:1;
+    ULONGLONG OemId:1;
+    ULONGLONG OemData:1;
+    ULONGLONG OemDevicePath:1;
+    ULONGLONG Reserved:56;
+  } DUMMYSTRUCTNAME;
+} ERROR_PLATFORM_SPECIFIC_VALID, *PERROR_PLATFORM_SPECIFIC_VALID;
+
+typedef struct _ERROR_PLATFORM_SPECIFIC {
+  ERROR_SECTION_HEADER Header;
+  ERROR_PLATFORM_SPECIFIC_VALID Valid;
+  ERROR_STATUS ErrorStatus;
+  ULONGLONG RequestorId;
+  ULONGLONG ResponderId;
+  ULONGLONG TargetId;
+  ERROR_BUS_SPECIFIC_DATA BusSpecificData;
+  UCHAR OemId[16];
+  ERROR_OEM_DATA OemData;
+} ERROR_PLATFORM_SPECIFIC, *PERROR_PLATFORM_SPECIFIC;
+
+#define ERROR_PLATFORM_BUS_GUID {0xe429faf9, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_PLATFORM_BUS_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG ErrorStatus:1;
+    ULONGLONG RequestorId:1;
+    ULONGLONG ResponderId:1;
+    ULONGLONG TargetId:1;
+    ULONGLONG BusSpecificData:1;
+    ULONGLONG OemId:1;
+    ULONGLONG OemData:1;
+    ULONGLONG OemDevicePath:1;
+    ULONGLONG Reserved:56;
+  } DUMMYSTRUCTNAME;
+} ERROR_PLATFORM_BUS_VALID, *PERROR_PLATFORM_BUS_VALID;
+
+typedef struct _ERROR_PLATFORM_BUS {
+  ERROR_SECTION_HEADER Header;
+  ERROR_PLATFORM_BUS_VALID Valid;
+  ERROR_STATUS ErrorStatus;
+  ULONGLONG RequestorId;
+  ULONGLONG ResponderId;
+  ULONGLONG TargetId;
+  ERROR_BUS_SPECIFIC_DATA BusSpecificData;
+  UCHAR OemId[16];
+  ERROR_OEM_DATA OemData;
+} ERROR_PLATFORM_BUS, *PERROR_PLATFORM_BUS;
+
+#define ERROR_PLATFORM_HOST_CONTROLLER_GUID {0xe429faf8, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_PLATFORM_HOST_CONTROLLER_VALID {
+  ULONGLONG Valid;
+  struct {
+    ULONGLONG ErrorStatus:1;
+    ULONGLONG RequestorId:1;
+    ULONGLONG ResponderId:1;
+    ULONGLONG TargetId:1;
+    ULONGLONG BusSpecificData:1;
+    ULONGLONG OemId:1;
+    ULONGLONG OemData:1;
+    ULONGLONG OemDevicePath:1;
+    ULONGLONG Reserved:56;
+  } DUMMYSTRUCTNAME;
+} ERROR_PLATFORM_HOST_CONTROLLER_VALID, *PERROR_PLATFORM_HOST_CONTROLLER_VALID;
+
+typedef struct _ERROR_PLATFORM_HOST_CONTROLLER {
+  ERROR_SECTION_HEADER Header;
+  ERROR_PCI_COMPONENT_VALID Valid;
+  ERROR_STATUS ErrorStatus;
+  ULONGLONG RequestorId;
+  ULONGLONG ResponderId;
+  ULONGLONG TargetId;
+  ERROR_BUS_SPECIFIC_DATA BusSpecificData;
+  UCHAR OemId[16];
+  ERROR_OEM_DATA OemData;
+} ERROR_PLATFORM_HOST_CONTROLLER, *PERROR_PLATFORM_HOST_CONTROLLER;
+
+typedef ERROR_RECORD_HEADER ERROR_LOGRECORD, *PERROR_LOGRECORD;
+typedef ERROR_RECORD_HEADER MCA_EXCEPTION, *PMCA_EXCEPTION;
+typedef ERROR_RECORD_HEADER CMC_EXCEPTION, *PCMC_EXCEPTION;
+typedef ERROR_RECORD_HEADER CPE_EXCEPTION, *PCPE_EXCEPTION;
+#if (NTDDI_VERSION > NTDDI_WINXP)
+typedef ERROR_RECORD_HEADER INIT_EXCEPTION, *PINIT_EXCEPTION;
+#endif
+
+#endif /* defined(_IA64_) */
+
+#endif /* defined(_X86_) || defined(_IA64_) || defined(_AMD64_) */
diff --git a/reactos/include/ddk/ntstatus.h b/reactos/include/ddk/ntstatus.h
deleted file mode 100644 (file)
index 688f996..0000000
+++ /dev/null
@@ -1,1122 +0,0 @@
-/*
- * ntstatus.h
- *
- * Windows NT status codes
- *
- * This file is part of the w32api package.
- *
- * Contributors:
- *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
-
-#ifndef _NTSTATUS_
-#define _NTSTATUS_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if !defined(STATUS_SUCCESS)
-#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
-#endif /* !STATUS_SUCCESS */
-#define FACILITY_DEBUGGER 0x1
-#define FACILITY_RPC_RUNTIME 0x2
-#define FACILITY_RPC_STUBS 0x3
-#define FACILITY_IO_ERROR_CODE 0x4
-#define FACILITY_TERMINAL_SERVER 0xA
-#define FACILITY_USB_ERROR_CODE 0x10
-#define FACILITY_HID_ERROR_CODE 0x11
-#define FACILITY_FIREWIRE_ERROR_CODE 0x12
-#define FACILITY_CLUSTER_ERROR_CODE 0x13
-#define FACILITY_ACPI_ERROR_CODE 0x14
-#define FACILITY_SXS_ERROR_CODE 0x15
-#define STATUS_SEVERITY_SUCCESS 0x0
-#define STATUS_SEVERITY_INFORMATIONAL 0x1
-#define STATUS_SEVERITY_WARNING 0x2
-#define STATUS_SEVERITY_ERROR 0x3
-#define STATUS_WAIT_0 ((NTSTATUS)0x00000000L)
-#define STATUS_WAIT_1 ((NTSTATUS)0x00000001L)
-#define STATUS_WAIT_2 ((NTSTATUS)0x00000002L)
-#define STATUS_WAIT_3 ((NTSTATUS)0x00000003L)
-#define STATUS_WAIT_63 ((NTSTATUS)0x0000003FL)
-#define STATUS_ABANDONED ((NTSTATUS)0x00000080L)
-#define STATUS_ABANDONED_WAIT_0 ((NTSTATUS)0x00000080L)
-#define STATUS_ABANDONED_WAIT_63 ((NTSTATUS)0x000000BFL)
-#define STATUS_USER_APC ((NTSTATUS)0x000000C0L)
-#define STATUS_KERNEL_APC ((NTSTATUS)0x00000100L)
-#define STATUS_ALERTED ((NTSTATUS)0x00000101L)
-#define STATUS_TIMEOUT ((NTSTATUS)0x00000102L)
-#define STATUS_PENDING ((NTSTATUS)0x00000103L)
-#define STATUS_REPARSE ((NTSTATUS)0x00000104L)
-#define STATUS_MORE_ENTRIES ((NTSTATUS)0x00000105L)
-#define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS)0x00000106L)
-#define STATUS_SOME_NOT_MAPPED ((NTSTATUS)0x00000107L)
-#define STATUS_OPLOCK_BREAK_IN_PROGRESS ((NTSTATUS)0x00000108L)
-#define STATUS_VOLUME_MOUNTED ((NTSTATUS)0x00000109L)
-#define STATUS_RXACT_COMMITTED ((NTSTATUS)0x0000010AL)
-#define STATUS_NOTIFY_CLEANUP ((NTSTATUS)0x0000010BL)
-#define STATUS_NOTIFY_ENUM_DIR ((NTSTATUS)0x0000010CL)
-#define STATUS_NO_QUOTAS_FOR_ACCOUNT ((NTSTATUS)0x0000010DL)
-#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS)0x0000010EL)
-#define STATUS_PAGE_FAULT_TRANSITION ((NTSTATUS)0x00000110L)
-#define STATUS_PAGE_FAULT_DEMAND_ZERO ((NTSTATUS)0x00000111L)
-#define STATUS_PAGE_FAULT_COPY_ON_WRITE ((NTSTATUS)0x00000112L)
-#define STATUS_PAGE_FAULT_GUARD_PAGE ((NTSTATUS)0x00000113L)
-#define STATUS_PAGE_FAULT_PAGING_FILE ((NTSTATUS)0x00000114L)
-#define STATUS_CACHE_PAGE_LOCKED ((NTSTATUS)0x00000115L)
-#define STATUS_CRASH_DUMP ((NTSTATUS)0x00000116L)
-#define STATUS_BUFFER_ALL_ZEROS ((NTSTATUS)0x00000117L)
-#define STATUS_REPARSE_OBJECT ((NTSTATUS)0x00000118L)
-#define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS)0x00000119L)
-#define STATUS_TRANSLATION_COMPLETE ((NTSTATUS)0x00000120L)
-#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY ((NTSTATUS)0x00000121L)
-#define STATUS_NOTHING_TO_TERMINATE ((NTSTATUS)0x00000122L)
-#define STATUS_PROCESS_NOT_IN_JOB ((NTSTATUS)0x00000123L)
-#define STATUS_PROCESS_IN_JOB ((NTSTATUS)0x00000124L)
-#define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS)0x40000000L)
-#define STATUS_THREAD_WAS_SUSPENDED ((NTSTATUS)0x40000001L)
-#define STATUS_WORKING_SET_LIMIT_RANGE ((NTSTATUS)0x40000002L)
-#define STATUS_IMAGE_NOT_AT_BASE ((NTSTATUS)0x40000003L)
-#define STATUS_RXACT_STATE_CREATED ((NTSTATUS)0x40000004L)
-#define STATUS_SEGMENT_NOTIFICATION ((NTSTATUS)0x40000005L)
-#define STATUS_LOCAL_USER_SESSION_KEY ((NTSTATUS)0x40000006L)
-#define STATUS_BAD_CURRENT_DIRECTORY ((NTSTATUS)0x40000007L)
-#define STATUS_SERIAL_MORE_WRITES ((NTSTATUS)0x40000008L)
-#define STATUS_REGISTRY_RECOVERED ((NTSTATUS)0x40000009L)
-#define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS)0x4000000AL)
-#define STATUS_FT_WRITE_RECOVERY ((NTSTATUS)0x4000000BL)
-#define STATUS_SERIAL_COUNTER_TIMEOUT ((NTSTATUS)0x4000000CL)
-#define STATUS_NULL_LM_PASSWORD ((NTSTATUS)0x4000000DL)
-#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS)0x4000000EL)
-#define STATUS_RECEIVE_PARTIAL ((NTSTATUS)0x4000000FL)
-#define STATUS_RECEIVE_EXPEDITED ((NTSTATUS)0x40000010L)
-#define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS)0x40000011L)
-#define STATUS_EVENT_DONE ((NTSTATUS)0x40000012L)
-#define STATUS_EVENT_PENDING ((NTSTATUS)0x40000013L)
-#define STATUS_CHECKING_FILE_SYSTEM ((NTSTATUS)0x40000014L)
-#define STATUS_FATAL_APP_EXIT ((NTSTATUS)0x40000015L)
-#define STATUS_PREDEFINED_HANDLE ((NTSTATUS)0x40000016L)
-#define STATUS_WAS_UNLOCKED ((NTSTATUS)0x40000017L)
-#define STATUS_SERVICE_NOTIFICATION ((NTSTATUS)0x40000018L)
-#define STATUS_WAS_LOCKED ((NTSTATUS)0x40000019L)
-#define STATUS_LOG_HARD_ERROR ((NTSTATUS)0x4000001AL)
-#define STATUS_ALREADY_WIN32 ((NTSTATUS)0x4000001BL)
-#define STATUS_WX86_UNSIMULATE ((NTSTATUS)0x4000001CL)
-#define STATUS_WX86_CONTINUE ((NTSTATUS)0x4000001DL)
-#define STATUS_WX86_SINGLE_STEP ((NTSTATUS)0x4000001EL)
-#define STATUS_WX86_BREAKPOINT ((NTSTATUS)0x4000001FL)
-#define STATUS_WX86_EXCEPTION_CONTINUE ((NTSTATUS)0x40000020L)
-#define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS)0x40000021L)
-#define STATUS_WX86_EXCEPTION_CHAIN ((NTSTATUS)0x40000022L)
-#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS)0x40000023L)
-#define STATUS_NO_YIELD_PERFORMED ((NTSTATUS)0x40000024L)
-#define STATUS_TIMER_RESUME_IGNORED ((NTSTATUS)0x40000025L)
-#define STATUS_ARBITRATION_UNHANDLED ((NTSTATUS)0x40000026L)
-#define STATUS_CARDBUS_NOT_SUPPORTED ((NTSTATUS)0x40000027L)
-#define STATUS_WX86_CREATEWX86TIB ((NTSTATUS)0x40000028L)
-#define STATUS_MP_PROCESSOR_MISMATCH ((NTSTATUS)0x40000029L)
-#define STATUS_HIBERNATED ((NTSTATUS)0x4000002AL)
-#define STATUS_RESUME_HIBERNATION ((NTSTATUS)0x4000002BL)
-#define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS)0x80000001L)
-#define STATUS_DATATYPE_MISALIGNMENT ((NTSTATUS)0x80000002L)
-#define STATUS_BREAKPOINT ((NTSTATUS)0x80000003L)
-#define STATUS_SINGLE_STEP ((NTSTATUS)0x80000004L)
-#define STATUS_BUFFER_OVERFLOW ((NTSTATUS)0x80000005L)
-#define STATUS_NO_MORE_FILES ((NTSTATUS)0x80000006L)
-#define STATUS_WAKE_SYSTEM_DEBUGGER ((NTSTATUS)0x80000007L)
-#define STATUS_HANDLES_CLOSED ((NTSTATUS)0x8000000AL)
-#define STATUS_NO_INHERITANCE ((NTSTATUS)0x8000000BL)
-#define STATUS_GUID_SUBSTITUTION_MADE ((NTSTATUS)0x8000000CL)
-#define STATUS_PARTIAL_COPY ((NTSTATUS)0x8000000DL)
-#define STATUS_DEVICE_PAPER_EMPTY ((NTSTATUS)0x8000000EL)
-#define STATUS_DEVICE_POWERED_OFF ((NTSTATUS)0x8000000FL)
-#define STATUS_DEVICE_OFF_LINE ((NTSTATUS)0x80000010L)
-#define STATUS_DEVICE_BUSY ((NTSTATUS)0x80000011L)
-#define STATUS_NO_MORE_EAS ((NTSTATUS)0x80000012L)
-#define STATUS_INVALID_EA_NAME ((NTSTATUS)0x80000013L)
-#define STATUS_EA_LIST_INCONSISTENT ((NTSTATUS)0x80000014L)
-#define STATUS_INVALID_EA_FLAG ((NTSTATUS)0x80000015L)
-#define STATUS_VERIFY_REQUIRED ((NTSTATUS)0x80000016L)
-#define STATUS_EXTRANEOUS_INFORMATION ((NTSTATUS)0x80000017L)
-#define STATUS_RXACT_COMMIT_NECESSARY ((NTSTATUS)0x80000018L)
-#define STATUS_NO_MORE_ENTRIES ((NTSTATUS)0x8000001AL)
-#define STATUS_FILEMARK_DETECTED ((NTSTATUS)0x8000001BL)
-#define STATUS_MEDIA_CHANGED ((NTSTATUS)0x8000001CL)
-#define STATUS_BUS_RESET ((NTSTATUS)0x8000001DL)
-#define STATUS_END_OF_MEDIA ((NTSTATUS)0x8000001EL)
-#define STATUS_BEGINNING_OF_MEDIA ((NTSTATUS)0x8000001FL)
-#define STATUS_MEDIA_CHECK ((NTSTATUS)0x80000020L)
-#define STATUS_SETMARK_DETECTED ((NTSTATUS)0x80000021L)
-#define STATUS_NO_DATA_DETECTED ((NTSTATUS)0x80000022L)
-#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS)0x80000023L)
-#define STATUS_SERVER_HAS_OPEN_HANDLES ((NTSTATUS)0x80000024L)
-#define STATUS_ALREADY_DISCONNECTED ((NTSTATUS)0x80000025L)
-#define STATUS_LONGJUMP ((NTSTATUS)0x80000026L)
-#define STATUS_CLEANER_CARTRIDGE_INSTALLED ((NTSTATUS)0x80000027L)
-#define STATUS_PLUGPLAY_QUERY_VETOED ((NTSTATUS)0x80000028L)
-#define STATUS_UNWIND_CONSOLIDATE ((NTSTATUS)0x80000029L)
-#define STATUS_CLUSTER_NODE_ALREADY_UP ((NTSTATUS)0x80130001L)
-#define STATUS_CLUSTER_NODE_ALREADY_DOWN ((NTSTATUS)0x80130002L)
-#define STATUS_CLUSTER_NETWORK_ALREADY_ONLINE ((NTSTATUS)0x80130003L)
-#define STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE ((NTSTATUS)0x80130004L)
-#define STATUS_CLUSTER_NODE_ALREADY_MEMBER ((NTSTATUS)0x80130005L)
-#define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L)
-#define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002L)
-#define STATUS_INVALID_INFO_CLASS ((NTSTATUS)0xC0000003L)
-#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
-#define STATUS_ACCESS_VIOLATION ((NTSTATUS)0xC0000005L)
-#define STATUS_IN_PAGE_ERROR ((NTSTATUS)0xC0000006L)
-#define STATUS_PAGEFILE_QUOTA ((NTSTATUS)0xC0000007L)
-#define STATUS_INVALID_HANDLE ((NTSTATUS)0xC0000008L)
-#define STATUS_BAD_INITIAL_STACK ((NTSTATUS)0xC0000009L)
-#define STATUS_BAD_INITIAL_PC ((NTSTATUS)0xC000000AL)
-#define STATUS_INVALID_CID ((NTSTATUS)0xC000000BL)
-#define STATUS_TIMER_NOT_CANCELED ((NTSTATUS)0xC000000CL)
-#define STATUS_INVALID_PARAMETER ((NTSTATUS)0xC000000DL)
-#define STATUS_NO_SUCH_DEVICE ((NTSTATUS)0xC000000EL)
-#define STATUS_NO_SUCH_FILE ((NTSTATUS)0xC000000FL)
-#define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS)0xC0000010L)
-#define STATUS_END_OF_FILE ((NTSTATUS)0xC0000011L)
-#define STATUS_WRONG_VOLUME ((NTSTATUS)0xC0000012L)
-#define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS)0xC0000013L)
-#define STATUS_UNRECOGNIZED_MEDIA ((NTSTATUS)0xC0000014L)
-#define STATUS_NONEXISTENT_SECTOR ((NTSTATUS)0xC0000015L)
-#define STATUS_MORE_PROCESSING_REQUIRED ((NTSTATUS)0xC0000016L)
-#define STATUS_NO_MEMORY ((NTSTATUS)0xC0000017L)
-#define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS)0xC0000018L)
-#define STATUS_NOT_MAPPED_VIEW ((NTSTATUS)0xC0000019L)
-#define STATUS_UNABLE_TO_FREE_VM ((NTSTATUS)0xC000001AL)
-#define STATUS_UNABLE_TO_DELETE_SECTION ((NTSTATUS)0xC000001BL)
-#define STATUS_INVALID_SYSTEM_SERVICE ((NTSTATUS)0xC000001CL)
-#define STATUS_ILLEGAL_INSTRUCTION ((NTSTATUS)0xC000001DL)
-#define STATUS_INVALID_LOCK_SEQUENCE ((NTSTATUS)0xC000001EL)
-#define STATUS_INVALID_VIEW_SIZE ((NTSTATUS)0xC000001FL)
-#define STATUS_INVALID_FILE_FOR_SECTION ((NTSTATUS)0xC0000020L)
-#define STATUS_ALREADY_COMMITTED ((NTSTATUS)0xC0000021L)
-#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)
-#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L)
-#define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS)0xC0000024L)
-#define STATUS_NONCONTINUABLE_EXCEPTION ((NTSTATUS)0xC0000025L)
-#define STATUS_INVALID_DISPOSITION ((NTSTATUS)0xC0000026L)
-#define STATUS_UNWIND ((NTSTATUS)0xC0000027L)
-#define STATUS_BAD_STACK ((NTSTATUS)0xC0000028L)
-#define STATUS_INVALID_UNWIND_TARGET ((NTSTATUS)0xC0000029L)
-#define STATUS_NOT_LOCKED ((NTSTATUS)0xC000002AL)
-#define STATUS_PARITY_ERROR ((NTSTATUS)0xC000002BL)
-#define STATUS_UNABLE_TO_DECOMMIT_VM ((NTSTATUS)0xC000002CL)
-#define STATUS_NOT_COMMITTED ((NTSTATUS)0xC000002DL)
-#define STATUS_INVALID_PORT_ATTRIBUTES ((NTSTATUS)0xC000002EL)
-#define STATUS_PORT_MESSAGE_TOO_LONG ((NTSTATUS)0xC000002FL)
-#define STATUS_INVALID_PARAMETER_MIX ((NTSTATUS)0xC0000030L)
-#define STATUS_INVALID_QUOTA_LOWER ((NTSTATUS)0xC0000031L)
-#define STATUS_DISK_CORRUPT_ERROR ((NTSTATUS)0xC0000032L)
-#define STATUS_OBJECT_NAME_INVALID ((NTSTATUS)0xC0000033L)
-#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034L)
-#define STATUS_OBJECT_NAME_COLLISION ((NTSTATUS)0xC0000035L)
-#define STATUS_PORT_DISCONNECTED ((NTSTATUS)0xC0000037L)
-#define STATUS_DEVICE_ALREADY_ATTACHED ((NTSTATUS)0xC0000038L)
-#define STATUS_OBJECT_PATH_INVALID ((NTSTATUS)0xC0000039L)
-#define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS)0xC000003AL)
-#define STATUS_OBJECT_PATH_SYNTAX_BAD ((NTSTATUS)0xC000003BL)
-#define STATUS_DATA_OVERRUN ((NTSTATUS)0xC000003CL)
-#define STATUS_DATA_LATE_ERROR ((NTSTATUS)0xC000003DL)
-#define STATUS_DATA_ERROR ((NTSTATUS)0xC000003EL)
-#define STATUS_CRC_ERROR ((NTSTATUS)0xC000003FL)
-#define STATUS_SECTION_TOO_BIG ((NTSTATUS)0xC0000040L)
-#define STATUS_PORT_CONNECTION_REFUSED ((NTSTATUS)0xC0000041L)
-#define STATUS_INVALID_PORT_HANDLE ((NTSTATUS)0xC0000042L)
-#define STATUS_SHARING_VIOLATION ((NTSTATUS)0xC0000043L)
-#define STATUS_QUOTA_EXCEEDED ((NTSTATUS)0xC0000044L)
-#define STATUS_INVALID_PAGE_PROTECTION ((NTSTATUS)0xC0000045L)
-#define STATUS_MUTANT_NOT_OWNED ((NTSTATUS)0xC0000046L)
-#define STATUS_SEMAPHORE_LIMIT_EXCEEDED ((NTSTATUS)0xC0000047L)
-#define STATUS_PORT_ALREADY_SET ((NTSTATUS)0xC0000048L)
-#define STATUS_SECTION_NOT_IMAGE ((NTSTATUS)0xC0000049L)
-#define STATUS_SUSPEND_COUNT_EXCEEDED ((NTSTATUS)0xC000004AL)
-#define STATUS_THREAD_IS_TERMINATING ((NTSTATUS)0xC000004BL)
-#define STATUS_BAD_WORKING_SET_LIMIT ((NTSTATUS)0xC000004CL)
-#define STATUS_INCOMPATIBLE_FILE_MAP ((NTSTATUS)0xC000004DL)
-#define STATUS_SECTION_PROTECTION ((NTSTATUS)0xC000004EL)
-#define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS)0xC000004FL)
-#define STATUS_EA_TOO_LARGE ((NTSTATUS)0xC0000050L)
-#define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS)0xC0000051L)
-#define STATUS_NO_EAS_ON_FILE ((NTSTATUS)0xC0000052L)
-#define STATUS_EA_CORRUPT_ERROR ((NTSTATUS)0xC0000053L)
-#define STATUS_FILE_LOCK_CONFLICT ((NTSTATUS)0xC0000054L)
-#define STATUS_LOCK_NOT_GRANTED ((NTSTATUS)0xC0000055L)
-#define STATUS_DELETE_PENDING ((NTSTATUS)0xC0000056L)
-#define STATUS_CTL_FILE_NOT_SUPPORTED ((NTSTATUS)0xC0000057L)
-#define STATUS_UNKNOWN_REVISION ((NTSTATUS)0xC0000058L)
-#define STATUS_REVISION_MISMATCH ((NTSTATUS)0xC0000059L)
-#define STATUS_INVALID_OWNER ((NTSTATUS)0xC000005AL)
-#define STATUS_INVALID_PRIMARY_GROUP ((NTSTATUS)0xC000005BL)
-#define STATUS_NO_IMPERSONATION_TOKEN ((NTSTATUS)0xC000005CL)
-#define STATUS_CANT_DISABLE_MANDATORY ((NTSTATUS)0xC000005DL)
-#define STATUS_NO_LOGON_SERVERS ((NTSTATUS)0xC000005EL)
-#define STATUS_NO_SUCH_LOGON_SESSION ((NTSTATUS)0xC000005FL)
-#define STATUS_NO_SUCH_PRIVILEGE ((NTSTATUS)0xC0000060L)
-#define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS)0xC0000061L)
-#define STATUS_INVALID_ACCOUNT_NAME ((NTSTATUS)0xC0000062L)
-#define STATUS_USER_EXISTS ((NTSTATUS)0xC0000063L)
-#define STATUS_NO_SUCH_USER ((NTSTATUS)0xC0000064L)
-#define STATUS_GROUP_EXISTS ((NTSTATUS)0xC0000065L)
-#define STATUS_NO_SUCH_GROUP ((NTSTATUS)0xC0000066L)
-#define STATUS_MEMBER_IN_GROUP ((NTSTATUS)0xC0000067L)
-#define STATUS_MEMBER_NOT_IN_GROUP ((NTSTATUS)0xC0000068L)
-#define STATUS_LAST_ADMIN ((NTSTATUS)0xC0000069L)
-#define STATUS_WRONG_PASSWORD ((NTSTATUS)0xC000006AL)
-#define STATUS_ILL_FORMED_PASSWORD ((NTSTATUS)0xC000006BL)
-#define STATUS_PASSWORD_RESTRICTION ((NTSTATUS)0xC000006CL)
-#define STATUS_LOGON_FAILURE ((NTSTATUS)0xC000006DL)
-#define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS)0xC000006EL)
-#define STATUS_INVALID_LOGON_HOURS ((NTSTATUS)0xC000006FL)
-#define STATUS_INVALID_WORKSTATION ((NTSTATUS)0xC0000070L)
-#define STATUS_PASSWORD_EXPIRED ((NTSTATUS)0xC0000071L)
-#define STATUS_ACCOUNT_DISABLED ((NTSTATUS)0xC0000072L)
-#define STATUS_NONE_MAPPED ((NTSTATUS)0xC0000073L)
-#define STATUS_TOO_MANY_LUIDS_REQUESTED ((NTSTATUS)0xC0000074L)
-#define STATUS_LUIDS_EXHAUSTED ((NTSTATUS)0xC0000075L)
-#define STATUS_INVALID_SUB_AUTHORITY ((NTSTATUS)0xC0000076L)
-#define STATUS_INVALID_ACL ((NTSTATUS)0xC0000077L)
-#define STATUS_INVALID_SID ((NTSTATUS)0xC0000078L)
-#define STATUS_INVALID_SECURITY_DESCR ((NTSTATUS)0xC0000079L)
-#define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS)0xC000007AL)
-#define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS)0xC000007BL)
-#define STATUS_NO_TOKEN ((NTSTATUS)0xC000007CL)
-#define STATUS_BAD_INHERITANCE_ACL ((NTSTATUS)0xC000007DL)
-#define STATUS_RANGE_NOT_LOCKED ((NTSTATUS)0xC000007EL)
-#define STATUS_DISK_FULL ((NTSTATUS)0xC000007FL)
-#define STATUS_SERVER_DISABLED ((NTSTATUS)0xC0000080L)
-#define STATUS_SERVER_NOT_DISABLED ((NTSTATUS)0xC0000081L)
-#define STATUS_TOO_MANY_GUIDS_REQUESTED ((NTSTATUS)0xC0000082L)
-#define STATUS_GUIDS_EXHAUSTED ((NTSTATUS)0xC0000083L)
-#define STATUS_INVALID_ID_AUTHORITY ((NTSTATUS)0xC0000084L)
-#define STATUS_AGENTS_EXHAUSTED ((NTSTATUS)0xC0000085L)
-#define STATUS_INVALID_VOLUME_LABEL ((NTSTATUS)0xC0000086L)
-#define STATUS_SECTION_NOT_EXTENDED ((NTSTATUS)0xC0000087L)
-#define STATUS_NOT_MAPPED_DATA ((NTSTATUS)0xC0000088L)
-#define STATUS_RESOURCE_DATA_NOT_FOUND ((NTSTATUS)0xC0000089L)
-#define STATUS_RESOURCE_TYPE_NOT_FOUND ((NTSTATUS)0xC000008AL)
-#define STATUS_RESOURCE_NAME_NOT_FOUND ((NTSTATUS)0xC000008BL)
-#define STATUS_ARRAY_BOUNDS_EXCEEDED ((NTSTATUS)0xC000008CL)
-#define STATUS_FLOAT_DENORMAL_OPERAND ((NTSTATUS)0xC000008DL)
-#define STATUS_FLOAT_DIVIDE_BY_ZERO ((NTSTATUS)0xC000008EL)
-#define STATUS_FLOAT_INEXACT_RESULT ((NTSTATUS)0xC000008FL)
-#define STATUS_FLOAT_INVALID_OPERATION ((NTSTATUS)0xC0000090L)
-#define STATUS_FLOAT_OVERFLOW ((NTSTATUS)0xC0000091L)
-#define STATUS_FLOAT_STACK_CHECK ((NTSTATUS)0xC0000092L)
-#define STATUS_FLOAT_UNDERFLOW ((NTSTATUS)0xC0000093L)
-#define STATUS_INTEGER_DIVIDE_BY_ZERO ((NTSTATUS)0xC0000094L)
-#define STATUS_INTEGER_OVERFLOW ((NTSTATUS)0xC0000095L)
-#define STATUS_PRIVILEGED_INSTRUCTION ((NTSTATUS)0xC0000096L)
-#define STATUS_TOO_MANY_PAGING_FILES ((NTSTATUS)0xC0000097L)
-#define STATUS_FILE_INVALID ((NTSTATUS)0xC0000098L)
-#define STATUS_ALLOTTED_SPACE_EXCEEDED ((NTSTATUS)0xC0000099L)
-#define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009AL)
-#define STATUS_DFS_EXIT_PATH_FOUND ((NTSTATUS)0xC000009BL)
-#define STATUS_DEVICE_DATA_ERROR ((NTSTATUS)0xC000009CL)
-#define STATUS_DEVICE_NOT_CONNECTED ((NTSTATUS)0xC000009DL)
-#define STATUS_DEVICE_POWER_FAILURE ((NTSTATUS)0xC000009EL)
-#define STATUS_FREE_VM_NOT_AT_BASE ((NTSTATUS)0xC000009FL)
-#define STATUS_MEMORY_NOT_ALLOCATED ((NTSTATUS)0xC00000A0L)
-#define STATUS_WORKING_SET_QUOTA ((NTSTATUS)0xC00000A1L)
-#define STATUS_MEDIA_WRITE_PROTECTED ((NTSTATUS)0xC00000A2L)
-#define STATUS_DEVICE_NOT_READY ((NTSTATUS)0xC00000A3L)
-#define STATUS_INVALID_GROUP_ATTRIBUTES ((NTSTATUS)0xC00000A4L)
-#define STATUS_BAD_IMPERSONATION_LEVEL ((NTSTATUS)0xC00000A5L)
-#define STATUS_CANT_OPEN_ANONYMOUS ((NTSTATUS)0xC00000A6L)
-#define STATUS_BAD_VALIDATION_CLASS ((NTSTATUS)0xC00000A7L)
-#define STATUS_BAD_TOKEN_TYPE ((NTSTATUS)0xC00000A8L)
-#define STATUS_BAD_MASTER_BOOT_RECORD ((NTSTATUS)0xC00000A9L)
-#define STATUS_INSTRUCTION_MISALIGNMENT ((NTSTATUS)0xC00000AAL)
-#define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS)0xC00000ABL)
-#define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS)0xC00000ACL)
-#define STATUS_INVALID_PIPE_STATE ((NTSTATUS)0xC00000ADL)
-#define STATUS_PIPE_BUSY ((NTSTATUS)0xC00000AEL)
-#define STATUS_ILLEGAL_FUNCTION ((NTSTATUS)0xC00000AFL)
-#define STATUS_PIPE_DISCONNECTED ((NTSTATUS)0xC00000B0L)
-#define STATUS_PIPE_CLOSING ((NTSTATUS)0xC00000B1L)
-#define STATUS_PIPE_CONNECTED ((NTSTATUS)0xC00000B2L)
-#define STATUS_PIPE_LISTENING ((NTSTATUS)0xC00000B3L)
-#define STATUS_INVALID_READ_MODE ((NTSTATUS)0xC00000B4L)
-#define STATUS_IO_TIMEOUT ((NTSTATUS)0xC00000B5L)
-#define STATUS_FILE_FORCED_CLOSED ((NTSTATUS)0xC00000B6L)
-#define STATUS_PROFILING_NOT_STARTED ((NTSTATUS)0xC00000B7L)
-#define STATUS_PROFILING_NOT_STOPPED ((NTSTATUS)0xC00000B8L)
-#define STATUS_COULD_NOT_INTERPRET ((NTSTATUS)0xC00000B9L)
-#define STATUS_FILE_IS_A_DIRECTORY ((NTSTATUS)0xC00000BAL)
-#define STATUS_NOT_SUPPORTED ((NTSTATUS)0xC00000BBL)
-#define STATUS_REMOTE_NOT_LISTENING ((NTSTATUS)0xC00000BCL)
-#define STATUS_DUPLICATE_NAME ((NTSTATUS)0xC00000BDL)
-#define STATUS_BAD_NETWORK_PATH ((NTSTATUS)0xC00000BEL)
-#define STATUS_NETWORK_BUSY ((NTSTATUS)0xC00000BFL)
-#define STATUS_DEVICE_DOES_NOT_EXIST ((NTSTATUS)0xC00000C0L)
-#define STATUS_TOO_MANY_COMMANDS ((NTSTATUS)0xC00000C1L)
-#define STATUS_ADAPTER_HARDWARE_ERROR ((NTSTATUS)0xC00000C2L)
-#define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS)0xC00000C3L)
-#define STATUS_UNEXPECTED_NETWORK_ERROR ((NTSTATUS)0xC00000C4L)
-#define STATUS_BAD_REMOTE_ADAPTER ((NTSTATUS)0xC00000C5L)
-#define STATUS_PRINT_QUEUE_FULL ((NTSTATUS)0xC00000C6L)
-#define STATUS_NO_SPOOL_SPACE ((NTSTATUS)0xC00000C7L)
-#define STATUS_PRINT_CANCELLED ((NTSTATUS)0xC00000C8L)
-#define STATUS_NETWORK_NAME_DELETED ((NTSTATUS)0xC00000C9L)
-#define STATUS_NETWORK_ACCESS_DENIED ((NTSTATUS)0xC00000CAL)
-#define STATUS_BAD_DEVICE_TYPE ((NTSTATUS)0xC00000CBL)
-#define STATUS_BAD_NETWORK_NAME ((NTSTATUS)0xC00000CCL)
-#define STATUS_TOO_MANY_NAMES ((NTSTATUS)0xC00000CDL)
-#define STATUS_TOO_MANY_SESSIONS ((NTSTATUS)0xC00000CEL)
-#define STATUS_SHARING_PAUSED ((NTSTATUS)0xC00000CFL)
-#define STATUS_REQUEST_NOT_ACCEPTED ((NTSTATUS)0xC00000D0L)
-#define STATUS_REDIRECTOR_PAUSED ((NTSTATUS)0xC00000D1L)
-#define STATUS_NET_WRITE_FAULT ((NTSTATUS)0xC00000D2L)
-#define STATUS_PROFILING_AT_LIMIT ((NTSTATUS)0xC00000D3L)
-#define STATUS_NOT_SAME_DEVICE ((NTSTATUS)0xC00000D4L)
-#define STATUS_FILE_RENAMED ((NTSTATUS)0xC00000D5L)
-#define STATUS_VIRTUAL_CIRCUIT_CLOSED ((NTSTATUS)0xC00000D6L)
-#define STATUS_NO_SECURITY_ON_OBJECT ((NTSTATUS)0xC00000D7L)
-#define STATUS_CANT_WAIT ((NTSTATUS)0xC00000D8L)
-#define STATUS_PIPE_EMPTY ((NTSTATUS)0xC00000D9L)
-#define STATUS_CANT_ACCESS_DOMAIN_INFO ((NTSTATUS)0xC00000DAL)
-#define STATUS_CANT_TERMINATE_SELF ((NTSTATUS)0xC00000DBL)
-#define STATUS_INVALID_SERVER_STATE ((NTSTATUS)0xC00000DCL)
-#define STATUS_INVALID_DOMAIN_STATE ((NTSTATUS)0xC00000DDL)
-#define STATUS_INVALID_DOMAIN_ROLE ((NTSTATUS)0xC00000DEL)
-#define STATUS_NO_SUCH_DOMAIN ((NTSTATUS)0xC00000DFL)
-#define STATUS_DOMAIN_EXISTS ((NTSTATUS)0xC00000E0L)
-#define STATUS_DOMAIN_LIMIT_EXCEEDED ((NTSTATUS)0xC00000E1L)
-#define STATUS_OPLOCK_NOT_GRANTED ((NTSTATUS)0xC00000E2L)
-#define STATUS_INVALID_OPLOCK_PROTOCOL ((NTSTATUS)0xC00000E3L)
-#define STATUS_INTERNAL_DB_CORRUPTION ((NTSTATUS)0xC00000E4L)
-#define STATUS_INTERNAL_ERROR ((NTSTATUS)0xC00000E5L)
-#define STATUS_GENERIC_NOT_MAPPED ((NTSTATUS)0xC00000E6L)
-#define STATUS_BAD_DESCRIPTOR_FORMAT ((NTSTATUS)0xC00000E7L)
-#define STATUS_INVALID_USER_BUFFER ((NTSTATUS)0xC00000E8L)
-#define STATUS_UNEXPECTED_IO_ERROR ((NTSTATUS)0xC00000E9L)
-#define STATUS_UNEXPECTED_MM_CREATE_ERR ((NTSTATUS)0xC00000EAL)
-#define STATUS_UNEXPECTED_MM_MAP_ERROR ((NTSTATUS)0xC00000EBL)
-#define STATUS_UNEXPECTED_MM_EXTEND_ERR ((NTSTATUS)0xC00000ECL)
-#define STATUS_NOT_LOGON_PROCESS ((NTSTATUS)0xC00000EDL)
-#define STATUS_LOGON_SESSION_EXISTS ((NTSTATUS)0xC00000EEL)
-#define STATUS_INVALID_PARAMETER_1 ((NTSTATUS)0xC00000EFL)
-#define STATUS_INVALID_PARAMETER_2 ((NTSTATUS)0xC00000F0L)
-#define STATUS_INVALID_PARAMETER_3 ((NTSTATUS)0xC00000F1L)
-#define STATUS_INVALID_PARAMETER_4 ((NTSTATUS)0xC00000F2L)
-#define STATUS_INVALID_PARAMETER_5 ((NTSTATUS)0xC00000F3L)
-#define STATUS_INVALID_PARAMETER_6 ((NTSTATUS)0xC00000F4L)
-#define STATUS_INVALID_PARAMETER_7 ((NTSTATUS)0xC00000F5L)
-#define STATUS_INVALID_PARAMETER_8 ((NTSTATUS)0xC00000F6L)
-#define STATUS_INVALID_PARAMETER_9 ((NTSTATUS)0xC00000F7L)
-#define STATUS_INVALID_PARAMETER_10 ((NTSTATUS)0xC00000F8L)
-#define STATUS_INVALID_PARAMETER_11 ((NTSTATUS)0xC00000F9L)
-#define STATUS_INVALID_PARAMETER_12 ((NTSTATUS)0xC00000FAL)
-#define STATUS_REDIRECTOR_NOT_STARTED ((NTSTATUS)0xC00000FBL)
-#define STATUS_REDIRECTOR_STARTED ((NTSTATUS)0xC00000FCL)
-#define STATUS_STACK_OVERFLOW ((NTSTATUS)0xC00000FDL)
-#define STATUS_NO_SUCH_PACKAGE ((NTSTATUS)0xC00000FEL)
-#define STATUS_BAD_FUNCTION_TABLE ((NTSTATUS)0xC00000FFL)
-#define STATUS_VARIABLE_NOT_FOUND ((NTSTATUS)0xC0000100L)
-#define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS)0xC0000101L)
-#define STATUS_FILE_CORRUPT_ERROR ((NTSTATUS)0xC0000102L)
-#define STATUS_NOT_A_DIRECTORY ((NTSTATUS)0xC0000103L)
-#define STATUS_BAD_LOGON_SESSION_STATE ((NTSTATUS)0xC0000104L)
-#define STATUS_LOGON_SESSION_COLLISION ((NTSTATUS)0xC0000105L)
-#define STATUS_NAME_TOO_LONG ((NTSTATUS)0xC0000106L)
-#define STATUS_FILES_OPEN ((NTSTATUS)0xC0000107L)
-#define STATUS_CONNECTION_IN_USE ((NTSTATUS)0xC0000108L)
-#define STATUS_MESSAGE_NOT_FOUND ((NTSTATUS)0xC0000109L)
-#define STATUS_PROCESS_IS_TERMINATING ((NTSTATUS)0xC000010AL)
-#define STATUS_INVALID_LOGON_TYPE ((NTSTATUS)0xC000010BL)
-#define STATUS_NO_GUID_TRANSLATION ((NTSTATUS)0xC000010CL)
-#define STATUS_CANNOT_IMPERSONATE ((NTSTATUS)0xC000010DL)
-#define STATUS_IMAGE_ALREADY_LOADED ((NTSTATUS)0xC000010EL)
-#define STATUS_ABIOS_NOT_PRESENT ((NTSTATUS)0xC000010FL)
-#define STATUS_ABIOS_LID_NOT_EXIST ((NTSTATUS)0xC0000110L)
-#define STATUS_ABIOS_LID_ALREADY_OWNED ((NTSTATUS)0xC0000111L)
-#define STATUS_ABIOS_NOT_LID_OWNER ((NTSTATUS)0xC0000112L)
-#define STATUS_ABIOS_INVALID_COMMAND ((NTSTATUS)0xC0000113L)
-#define STATUS_ABIOS_INVALID_LID ((NTSTATUS)0xC0000114L)
-#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS)0xC0000115L)
-#define STATUS_ABIOS_INVALID_SELECTOR ((NTSTATUS)0xC0000116L)
-#define STATUS_NO_LDT ((NTSTATUS)0xC0000117L)
-#define STATUS_INVALID_LDT_SIZE ((NTSTATUS)0xC0000118L)
-#define STATUS_INVALID_LDT_OFFSET ((NTSTATUS)0xC0000119L)
-#define STATUS_INVALID_LDT_DESCRIPTOR ((NTSTATUS)0xC000011AL)
-#define STATUS_INVALID_IMAGE_NE_FORMAT ((NTSTATUS)0xC000011BL)
-#define STATUS_RXACT_INVALID_STATE ((NTSTATUS)0xC000011CL)
-#define STATUS_RXACT_COMMIT_FAILURE ((NTSTATUS)0xC000011DL)
-#define STATUS_MAPPED_FILE_SIZE_ZERO ((NTSTATUS)0xC000011EL)
-#define STATUS_TOO_MANY_OPENED_FILES ((NTSTATUS)0xC000011FL)
-#define STATUS_CANCELLED ((NTSTATUS)0xC0000120L)
-#define STATUS_CANNOT_DELETE ((NTSTATUS)0xC0000121L)
-#define STATUS_INVALID_COMPUTER_NAME ((NTSTATUS)0xC0000122L)
-#define STATUS_FILE_DELETED ((NTSTATUS)0xC0000123L)
-#define STATUS_SPECIAL_ACCOUNT ((NTSTATUS)0xC0000124L)
-#define STATUS_SPECIAL_GROUP ((NTSTATUS)0xC0000125L)
-#define STATUS_SPECIAL_USER ((NTSTATUS)0xC0000126L)
-#define STATUS_MEMBERS_PRIMARY_GROUP ((NTSTATUS)0xC0000127L)
-#define STATUS_FILE_CLOSED ((NTSTATUS)0xC0000128L)
-#define STATUS_TOO_MANY_THREADS ((NTSTATUS)0xC0000129L)
-#define STATUS_THREAD_NOT_IN_PROCESS ((NTSTATUS)0xC000012AL)
-#define STATUS_TOKEN_ALREADY_IN_USE ((NTSTATUS)0xC000012BL)
-#define STATUS_PAGEFILE_QUOTA_EXCEEDED ((NTSTATUS)0xC000012CL)
-#define STATUS_COMMITMENT_LIMIT ((NTSTATUS)0xC000012DL)
-#define STATUS_INVALID_IMAGE_LE_FORMAT ((NTSTATUS)0xC000012EL)
-#define STATUS_INVALID_IMAGE_NOT_MZ ((NTSTATUS)0xC000012FL)
-#define STATUS_INVALID_IMAGE_PROTECT ((NTSTATUS)0xC0000130L)
-#define STATUS_INVALID_IMAGE_WIN_16 ((NTSTATUS)0xC0000131L)
-#define STATUS_LOGON_SERVER_CONFLICT ((NTSTATUS)0xC0000132L)
-#define STATUS_TIME_DIFFERENCE_AT_DC ((NTSTATUS)0xC0000133L)
-#define STATUS_SYNCHRONIZATION_REQUIRED ((NTSTATUS)0xC0000134L)
-#define STATUS_DLL_NOT_FOUND ((NTSTATUS)0xC0000135L)
-#define STATUS_OPEN_FAILED ((NTSTATUS)0xC0000136L)
-#define STATUS_IO_PRIVILEGE_FAILED ((NTSTATUS)0xC0000137L)
-#define STATUS_ORDINAL_NOT_FOUND ((NTSTATUS)0xC0000138L)
-#define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000139L)
-#define STATUS_CONTROL_C_EXIT ((NTSTATUS)0xC000013AL)
-#define STATUS_LOCAL_DISCONNECT ((NTSTATUS)0xC000013BL)
-#define STATUS_REMOTE_DISCONNECT ((NTSTATUS)0xC000013CL)
-#define STATUS_REMOTE_RESOURCES ((NTSTATUS)0xC000013DL)
-#define STATUS_LINK_FAILED ((NTSTATUS)0xC000013EL)
-#define STATUS_LINK_TIMEOUT ((NTSTATUS)0xC000013FL)
-#define STATUS_INVALID_CONNECTION ((NTSTATUS)0xC0000140L)
-#define STATUS_INVALID_ADDRESS ((NTSTATUS)0xC0000141L)
-#define STATUS_DLL_INIT_FAILED ((NTSTATUS)0xC0000142L)
-#define STATUS_MISSING_SYSTEMFILE ((NTSTATUS)0xC0000143L)
-#define STATUS_UNHANDLED_EXCEPTION ((NTSTATUS)0xC0000144L)
-#define STATUS_APP_INIT_FAILURE ((NTSTATUS)0xC0000145L)
-#define STATUS_PAGEFILE_CREATE_FAILED ((NTSTATUS)0xC0000146L)
-#define STATUS_NO_PAGEFILE ((NTSTATUS)0xC0000147L)
-#define STATUS_INVALID_LEVEL ((NTSTATUS)0xC0000148L)
-#define STATUS_WRONG_PASSWORD_CORE ((NTSTATUS)0xC0000149L)
-#define STATUS_ILLEGAL_FLOAT_CONTEXT ((NTSTATUS)0xC000014AL)
-#define STATUS_PIPE_BROKEN ((NTSTATUS)0xC000014BL)
-#define STATUS_REGISTRY_CORRUPT ((NTSTATUS)0xC000014CL)
-#define STATUS_REGISTRY_IO_FAILED ((NTSTATUS)0xC000014DL)
-#define STATUS_NO_EVENT_PAIR ((NTSTATUS)0xC000014EL)
-#define STATUS_UNRECOGNIZED_VOLUME ((NTSTATUS)0xC000014FL)
-#define STATUS_SERIAL_NO_DEVICE_INITED ((NTSTATUS)0xC0000150L)
-#define STATUS_NO_SUCH_ALIAS ((NTSTATUS)0xC0000151L)
-#define STATUS_MEMBER_NOT_IN_ALIAS ((NTSTATUS)0xC0000152L)
-#define STATUS_MEMBER_IN_ALIAS ((NTSTATUS)0xC0000153L)
-#define STATUS_ALIAS_EXISTS ((NTSTATUS)0xC0000154L)
-#define STATUS_LOGON_NOT_GRANTED ((NTSTATUS)0xC0000155L)
-#define STATUS_TOO_MANY_SECRETS ((NTSTATUS)0xC0000156L)
-#define STATUS_SECRET_TOO_LONG ((NTSTATUS)0xC0000157L)
-#define STATUS_INTERNAL_DB_ERROR ((NTSTATUS)0xC0000158L)
-#define STATUS_FULLSCREEN_MODE ((NTSTATUS)0xC0000159L)
-#define STATUS_TOO_MANY_CONTEXT_IDS ((NTSTATUS)0xC000015AL)
-#define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS)0xC000015BL)
-#define STATUS_NOT_REGISTRY_FILE ((NTSTATUS)0xC000015CL)
-#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000015DL)
-#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS)0xC000015EL)
-#define STATUS_FT_MISSING_MEMBER ((NTSTATUS)0xC000015FL)
-#define STATUS_ILL_FORMED_SERVICE_ENTRY ((NTSTATUS)0xC0000160L)
-#define STATUS_ILLEGAL_CHARACTER ((NTSTATUS)0xC0000161L)
-#define STATUS_UNMAPPABLE_CHARACTER ((NTSTATUS)0xC0000162L)
-#define STATUS_UNDEFINED_CHARACTER ((NTSTATUS)0xC0000163L)
-#define STATUS_FLOPPY_VOLUME ((NTSTATUS)0xC0000164L)
-#define STATUS_FLOPPY_ID_MARK_NOT_FOUND ((NTSTATUS)0xC0000165L)
-#define STATUS_FLOPPY_WRONG_CYLINDER ((NTSTATUS)0xC0000166L)
-#define STATUS_FLOPPY_UNKNOWN_ERROR ((NTSTATUS)0xC0000167L)
-#define STATUS_FLOPPY_BAD_REGISTERS ((NTSTATUS)0xC0000168L)
-#define STATUS_DISK_RECALIBRATE_FAILED ((NTSTATUS)0xC0000169L)
-#define STATUS_DISK_OPERATION_FAILED ((NTSTATUS)0xC000016AL)
-#define STATUS_DISK_RESET_FAILED ((NTSTATUS)0xC000016BL)
-#define STATUS_SHARED_IRQ_BUSY ((NTSTATUS)0xC000016CL)
-#define STATUS_FT_ORPHANING ((NTSTATUS)0xC000016DL)
-#define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS)0xC000016EL)
-#define STATUS_PARTITION_FAILURE ((NTSTATUS)0xC0000172L)
-#define STATUS_INVALID_BLOCK_LENGTH ((NTSTATUS)0xC0000173L)
-#define STATUS_DEVICE_NOT_PARTITIONED ((NTSTATUS)0xC0000174L)
-#define STATUS_UNABLE_TO_LOCK_MEDIA ((NTSTATUS)0xC0000175L)
-#define STATUS_UNABLE_TO_UNLOAD_MEDIA ((NTSTATUS)0xC0000176L)
-#define STATUS_EOM_OVERFLOW ((NTSTATUS)0xC0000177L)
-#define STATUS_NO_MEDIA ((NTSTATUS)0xC0000178L)
-#define STATUS_NO_SUCH_MEMBER ((NTSTATUS)0xC000017AL)
-#define STATUS_INVALID_MEMBER ((NTSTATUS)0xC000017BL)
-#define STATUS_KEY_DELETED ((NTSTATUS)0xC000017CL)
-#define STATUS_NO_LOG_SPACE ((NTSTATUS)0xC000017DL)
-#define STATUS_TOO_MANY_SIDS ((NTSTATUS)0xC000017EL)
-#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000017FL)
-#define STATUS_KEY_HAS_CHILDREN ((NTSTATUS)0xC0000180L)
-#define STATUS_CHILD_MUST_BE_VOLATILE ((NTSTATUS)0xC0000181L)
-#define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS)0xC0000182L)
-#define STATUS_DRIVER_INTERNAL_ERROR ((NTSTATUS)0xC0000183L)
-#define STATUS_INVALID_DEVICE_STATE ((NTSTATUS)0xC0000184L)
-#define STATUS_IO_DEVICE_ERROR ((NTSTATUS)0xC0000185L)
-#define STATUS_DEVICE_PROTOCOL_ERROR ((NTSTATUS)0xC0000186L)
-#define STATUS_BACKUP_CONTROLLER ((NTSTATUS)0xC0000187L)
-#define STATUS_LOG_FILE_FULL ((NTSTATUS)0xC0000188L)
-#define STATUS_TOO_LATE ((NTSTATUS)0xC0000189L)
-#define STATUS_NO_TRUST_LSA_SECRET ((NTSTATUS)0xC000018AL)
-#define STATUS_NO_TRUST_SAM_ACCOUNT ((NTSTATUS)0xC000018BL)
-#define STATUS_TRUSTED_DOMAIN_FAILURE ((NTSTATUS)0xC000018CL)
-#define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS)0xC000018DL)
-#define STATUS_EVENTLOG_FILE_CORRUPT ((NTSTATUS)0xC000018EL)
-#define STATUS_EVENTLOG_CANT_START ((NTSTATUS)0xC000018FL)
-#define STATUS_TRUST_FAILURE ((NTSTATUS)0xC0000190L)
-#define STATUS_MUTANT_LIMIT_EXCEEDED ((NTSTATUS)0xC0000191L)
-#define STATUS_NETLOGON_NOT_STARTED ((NTSTATUS)0xC0000192L)
-#define STATUS_ACCOUNT_EXPIRED ((NTSTATUS)0xC0000193L)
-#define STATUS_POSSIBLE_DEADLOCK ((NTSTATUS)0xC0000194L)
-#define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS)0xC0000195L)
-#define STATUS_REMOTE_SESSION_LIMIT ((NTSTATUS)0xC0000196L)
-#define STATUS_EVENTLOG_FILE_CHANGED ((NTSTATUS)0xC0000197L)
-#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS)0xC0000198L)
-#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS)0xC0000199L)
-#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS)0xC000019AL)
-#define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS)0xC000019BL)
-#define STATUS_FS_DRIVER_REQUIRED ((NTSTATUS)0xC000019CL)
-#define STATUS_NO_USER_SESSION_KEY ((NTSTATUS)0xC0000202L)
-#define STATUS_USER_SESSION_DELETED ((NTSTATUS)0xC0000203L)
-#define STATUS_RESOURCE_LANG_NOT_FOUND ((NTSTATUS)0xC0000204L)
-#define STATUS_INSUFF_SERVER_RESOURCES ((NTSTATUS)0xC0000205L)
-#define STATUS_INVALID_BUFFER_SIZE ((NTSTATUS)0xC0000206L)
-#define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS)0xC0000207L)
-#define STATUS_INVALID_ADDRESS_WILDCARD ((NTSTATUS)0xC0000208L)
-#define STATUS_TOO_MANY_ADDRESSES ((NTSTATUS)0xC0000209L)
-#define STATUS_ADDRESS_ALREADY_EXISTS ((NTSTATUS)0xC000020AL)
-#define STATUS_ADDRESS_CLOSED ((NTSTATUS)0xC000020BL)
-#define STATUS_CONNECTION_DISCONNECTED ((NTSTATUS)0xC000020CL)
-#define STATUS_CONNECTION_RESET ((NTSTATUS)0xC000020DL)
-#define STATUS_TOO_MANY_NODES ((NTSTATUS)0xC000020EL)
-#define STATUS_TRANSACTION_ABORTED ((NTSTATUS)0xC000020FL)
-#define STATUS_TRANSACTION_TIMED_OUT ((NTSTATUS)0xC0000210L)
-#define STATUS_TRANSACTION_NO_RELEASE ((NTSTATUS)0xC0000211L)
-#define STATUS_TRANSACTION_NO_MATCH ((NTSTATUS)0xC0000212L)
-#define STATUS_TRANSACTION_RESPONDED ((NTSTATUS)0xC0000213L)
-#define STATUS_TRANSACTION_INVALID_ID ((NTSTATUS)0xC0000214L)
-#define STATUS_TRANSACTION_INVALID_TYPE ((NTSTATUS)0xC0000215L)
-#define STATUS_NOT_SERVER_SESSION ((NTSTATUS)0xC0000216L)
-#define STATUS_NOT_CLIENT_SESSION ((NTSTATUS)0xC0000217L)
-#define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS)0xC0000218L)
-#define STATUS_DEBUG_ATTACH_FAILED ((NTSTATUS)0xC0000219L)
-#define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS)0xC000021AL)
-#define STATUS_DATA_NOT_ACCEPTED ((NTSTATUS)0xC000021BL)
-#define STATUS_NO_BROWSER_SERVERS_FOUND ((NTSTATUS)0xC000021CL)
-#define STATUS_VDM_HARD_ERROR ((NTSTATUS)0xC000021DL)
-#define STATUS_DRIVER_CANCEL_TIMEOUT ((NTSTATUS)0xC000021EL)
-#define STATUS_REPLY_MESSAGE_MISMATCH ((NTSTATUS)0xC000021FL)
-#define STATUS_MAPPED_ALIGNMENT ((NTSTATUS)0xC0000220L)
-#define STATUS_IMAGE_CHECKSUM_MISMATCH ((NTSTATUS)0xC0000221L)
-#define STATUS_LOST_WRITEBEHIND_DATA ((NTSTATUS)0xC0000222L)
-#define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS)0xC0000223L)
-#define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS)0xC0000224L)
-#define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225L)
-#define STATUS_NOT_TINY_STREAM ((NTSTATUS)0xC0000226L)
-#define STATUS_RECOVERY_FAILURE ((NTSTATUS)0xC0000227L)
-#define STATUS_STACK_OVERFLOW_READ ((NTSTATUS)0xC0000228L)
-#define STATUS_FAIL_CHECK ((NTSTATUS)0xC0000229L)
-#define STATUS_DUPLICATE_OBJECTID ((NTSTATUS)0xC000022AL)
-#define STATUS_OBJECTID_EXISTS ((NTSTATUS)0xC000022BL)
-#define STATUS_CONVERT_TO_LARGE ((NTSTATUS)0xC000022CL)
-#define STATUS_RETRY ((NTSTATUS)0xC000022DL)
-#define STATUS_FOUND_OUT_OF_SCOPE ((NTSTATUS)0xC000022EL)
-#define STATUS_ALLOCATE_BUCKET ((NTSTATUS)0xC000022FL)
-#define STATUS_PROPSET_NOT_FOUND ((NTSTATUS)0xC0000230L)
-#define STATUS_MARSHALL_OVERFLOW ((NTSTATUS)0xC0000231L)
-#define STATUS_INVALID_VARIANT ((NTSTATUS)0xC0000232L)
-#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS)0xC0000233L)
-#define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS)0xC0000234L)
-#define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS)0xC0000235L)
-#define STATUS_CONNECTION_REFUSED ((NTSTATUS)0xC0000236L)
-#define STATUS_GRACEFUL_DISCONNECT ((NTSTATUS)0xC0000237L)
-#define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS)0xC0000238L)
-#define STATUS_ADDRESS_NOT_ASSOCIATED ((NTSTATUS)0xC0000239L)
-#define STATUS_CONNECTION_INVALID ((NTSTATUS)0xC000023AL)
-#define STATUS_CONNECTION_ACTIVE ((NTSTATUS)0xC000023BL)
-#define STATUS_NETWORK_UNREACHABLE ((NTSTATUS)0xC000023CL)
-#define STATUS_HOST_UNREACHABLE ((NTSTATUS)0xC000023DL)
-#define STATUS_PROTOCOL_UNREACHABLE ((NTSTATUS)0xC000023EL)
-#define STATUS_PORT_UNREACHABLE ((NTSTATUS)0xC000023FL)
-#define STATUS_REQUEST_ABORTED ((NTSTATUS)0xC0000240L)
-#define STATUS_CONNECTION_ABORTED ((NTSTATUS)0xC0000241L)
-#define STATUS_BAD_COMPRESSION_BUFFER ((NTSTATUS)0xC0000242L)
-#define STATUS_USER_MAPPED_FILE ((NTSTATUS)0xC0000243L)
-#define STATUS_AUDIT_FAILED ((NTSTATUS)0xC0000244L)
-#define STATUS_TIMER_RESOLUTION_NOT_SET ((NTSTATUS)0xC0000245L)
-#define STATUS_CONNECTION_COUNT_LIMIT ((NTSTATUS)0xC0000246L)
-#define STATUS_LOGIN_TIME_RESTRICTION ((NTSTATUS)0xC0000247L)
-#define STATUS_LOGIN_WKSTA_RESTRICTION ((NTSTATUS)0xC0000248L)
-#define STATUS_IMAGE_MP_UP_MISMATCH ((NTSTATUS)0xC0000249L)
-#define STATUS_INSUFFICIENT_LOGON_INFO ((NTSTATUS)0xC0000250L)
-#define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS)0xC0000251L)
-#define STATUS_BAD_SERVICE_ENTRYPOINT ((NTSTATUS)0xC0000252L)
-#define STATUS_LPC_REPLY_LOST ((NTSTATUS)0xC0000253L)
-#define STATUS_IP_ADDRESS_CONFLICT1 ((NTSTATUS)0xC0000254L)
-#define STATUS_IP_ADDRESS_CONFLICT2 ((NTSTATUS)0xC0000255L)
-#define STATUS_REGISTRY_QUOTA_LIMIT ((NTSTATUS)0xC0000256L)
-#define STATUS_PATH_NOT_COVERED ((NTSTATUS)0xC0000257L)
-#define STATUS_NO_CALLBACK_ACTIVE ((NTSTATUS)0xC0000258L)
-#define STATUS_LICENSE_QUOTA_EXCEEDED ((NTSTATUS)0xC0000259L)
-#define STATUS_PWD_TOO_SHORT ((NTSTATUS)0xC000025AL)
-#define STATUS_PWD_TOO_RECENT ((NTSTATUS)0xC000025BL)
-#define STATUS_PWD_HISTORY_CONFLICT ((NTSTATUS)0xC000025CL)
-#define STATUS_PLUGPLAY_NO_DEVICE ((NTSTATUS)0xC000025EL)
-#define STATUS_UNSUPPORTED_COMPRESSION ((NTSTATUS)0xC000025FL)
-#define STATUS_INVALID_HW_PROFILE ((NTSTATUS)0xC0000260L)
-#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS)0xC0000261L)
-#define STATUS_DRIVER_ORDINAL_NOT_FOUND ((NTSTATUS)0xC0000262L)
-#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000263L)
-#define STATUS_RESOURCE_NOT_OWNED ((NTSTATUS)0xC0000264L)
-#define STATUS_TOO_MANY_LINKS ((NTSTATUS)0xC0000265L)
-#define STATUS_QUOTA_LIST_INCONSISTENT ((NTSTATUS)0xC0000266L)
-#define STATUS_FILE_IS_OFFLINE ((NTSTATUS)0xC0000267L)
-#define STATUS_EVALUATION_EXPIRATION ((NTSTATUS)0xC0000268L)
-#define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS)0xC0000269L)
-#define STATUS_LICENSE_VIOLATION ((NTSTATUS)0xC000026AL)
-#define STATUS_DLL_INIT_FAILED_LOGOFF ((NTSTATUS)0xC000026BL)
-#define STATUS_DRIVER_UNABLE_TO_LOAD ((NTSTATUS)0xC000026CL)
-#define STATUS_DFS_UNAVAILABLE ((NTSTATUS)0xC000026DL)
-#define STATUS_VOLUME_DISMOUNTED ((NTSTATUS)0xC000026EL)
-#define STATUS_WX86_INTERNAL_ERROR ((NTSTATUS)0xC000026FL)
-#define STATUS_WX86_FLOAT_STACK_CHECK ((NTSTATUS)0xC0000270L)
-#define STATUS_VALIDATE_CONTINUE ((NTSTATUS)0xC0000271L)
-#define STATUS_NO_MATCH ((NTSTATUS)0xC0000272L)
-#define STATUS_NO_MORE_MATCHES ((NTSTATUS)0xC0000273L)
-#define STATUS_NOT_A_REPARSE_POINT ((NTSTATUS)0xC0000275L)
-#define STATUS_IO_REPARSE_TAG_INVALID ((NTSTATUS)0xC0000276L)
-#define STATUS_IO_REPARSE_TAG_MISMATCH ((NTSTATUS)0xC0000277L)
-#define STATUS_IO_REPARSE_DATA_INVALID ((NTSTATUS)0xC0000278L)
-#define STATUS_IO_REPARSE_TAG_NOT_HANDLED ((NTSTATUS)0xC0000279L)
-#define STATUS_REPARSE_POINT_NOT_RESOLVED ((NTSTATUS)0xC0000280L)
-#define STATUS_DIRECTORY_IS_A_REPARSE_POINT ((NTSTATUS)0xC0000281L)
-#define STATUS_RANGE_LIST_CONFLICT ((NTSTATUS)0xC0000282L)
-#define STATUS_SOURCE_ELEMENT_EMPTY ((NTSTATUS)0xC0000283L)
-#define STATUS_DESTINATION_ELEMENT_FULL ((NTSTATUS)0xC0000284L)
-#define STATUS_ILLEGAL_ELEMENT_ADDRESS ((NTSTATUS)0xC0000285L)
-#define STATUS_MAGAZINE_NOT_PRESENT ((NTSTATUS)0xC0000286L)
-#define STATUS_REINITIALIZATION_NEEDED ((NTSTATUS)0xC0000287L)
-#define STATUS_DEVICE_REQUIRES_CLEANING ((NTSTATUS)0x80000288L)
-#define STATUS_DEVICE_DOOR_OPEN ((NTSTATUS)0x80000289L)
-#define STATUS_ENCRYPTION_FAILED ((NTSTATUS)0xC000028AL)
-#define STATUS_DECRYPTION_FAILED ((NTSTATUS)0xC000028BL)
-#define STATUS_RANGE_NOT_FOUND ((NTSTATUS)0xC000028CL)
-#define STATUS_NO_RECOVERY_POLICY ((NTSTATUS)0xC000028DL)
-#define STATUS_NO_EFS ((NTSTATUS)0xC000028EL)
-#define STATUS_WRONG_EFS ((NTSTATUS)0xC000028FL)
-#define STATUS_NO_USER_KEYS ((NTSTATUS)0xC0000290L)
-#define STATUS_FILE_NOT_ENCRYPTED ((NTSTATUS)0xC0000291L)
-#define STATUS_NOT_EXPORT_FORMAT ((NTSTATUS)0xC0000292L)
-#define STATUS_FILE_ENCRYPTED ((NTSTATUS)0xC0000293L)
-#define STATUS_WAKE_SYSTEM ((NTSTATUS)0x40000294L)
-#define STATUS_WMI_GUID_NOT_FOUND ((NTSTATUS)0xC0000295L)
-#define STATUS_WMI_INSTANCE_NOT_FOUND ((NTSTATUS)0xC0000296L)
-#define STATUS_WMI_ITEMID_NOT_FOUND ((NTSTATUS)0xC0000297L)
-#define STATUS_WMI_TRY_AGAIN ((NTSTATUS)0xC0000298L)
-#define STATUS_SHARED_POLICY ((NTSTATUS)0xC0000299L)
-#define STATUS_POLICY_OBJECT_NOT_FOUND ((NTSTATUS)0xC000029AL)
-#define STATUS_POLICY_ONLY_IN_DS ((NTSTATUS)0xC000029BL)
-#define STATUS_VOLUME_NOT_UPGRADED ((NTSTATUS)0xC000029CL)
-#define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS)0xC000029DL)
-#define STATUS_REMOTE_STORAGE_MEDIA_ERROR ((NTSTATUS)0xC000029EL)
-#define STATUS_NO_TRACKING_SERVICE ((NTSTATUS)0xC000029FL)
-#define STATUS_SERVER_SID_MISMATCH ((NTSTATUS)0xC00002A0L)
-#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE ((NTSTATUS)0xC00002A1L)
-#define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX ((NTSTATUS)0xC00002A2L)
-#define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED ((NTSTATUS)0xC00002A3L)
-#define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS ((NTSTATUS)0xC00002A4L)
-#define STATUS_DS_BUSY ((NTSTATUS)0xC00002A5L)
-#define STATUS_DS_UNAVAILABLE ((NTSTATUS)0xC00002A6L)
-#define STATUS_DS_NO_RIDS_ALLOCATED ((NTSTATUS)0xC00002A7L)
-#define STATUS_DS_NO_MORE_RIDS ((NTSTATUS)0xC00002A8L)
-#define STATUS_DS_INCORRECT_ROLE_OWNER ((NTSTATUS)0xC00002A9L)
-#define STATUS_DS_RIDMGR_INIT_ERROR ((NTSTATUS)0xC00002AAL)
-#define STATUS_DS_OBJ_CLASS_VIOLATION ((NTSTATUS)0xC00002ABL)
-#define STATUS_DS_CANT_ON_NON_LEAF ((NTSTATUS)0xC00002ACL)
-#define STATUS_DS_CANT_ON_RDN ((NTSTATUS)0xC00002ADL)
-#define STATUS_DS_CANT_MOD_OBJ_CLASS ((NTSTATUS)0xC00002AEL)
-#define STATUS_DS_CROSS_DOM_MOVE_FAILED ((NTSTATUS)0xC00002AFL)
-#define STATUS_DS_GC_NOT_AVAILABLE ((NTSTATUS)0xC00002B0L)
-#define STATUS_DIRECTORY_SERVICE_REQUIRED ((NTSTATUS)0xC00002B1L)
-#define STATUS_REPARSE_ATTRIBUTE_CONFLICT ((NTSTATUS)0xC00002B2L)
-#define STATUS_CANT_ENABLE_DENY_ONLY ((NTSTATUS)0xC00002B3L)
-#define STATUS_FLOAT_MULTIPLE_FAULTS ((NTSTATUS)0xC00002B4L)
-#define STATUS_FLOAT_MULTIPLE_TRAPS ((NTSTATUS)0xC00002B5L)
-#define STATUS_DEVICE_REMOVED ((NTSTATUS)0xC00002B6L)
-#define STATUS_JOURNAL_DELETE_IN_PROGRESS ((NTSTATUS)0xC00002B7L)
-#define STATUS_JOURNAL_NOT_ACTIVE ((NTSTATUS)0xC00002B8L)
-#define STATUS_NOINTERFACE ((NTSTATUS)0xC00002B9L)
-#define STATUS_DS_ADMIN_LIMIT_EXCEEDED ((NTSTATUS)0xC00002C1L)
-#define STATUS_DRIVER_FAILED_SLEEP ((NTSTATUS)0xC00002C2L)
-#define STATUS_MUTUAL_AUTHENTICATION_FAILED ((NTSTATUS)0xC00002C3L)
-#define STATUS_CORRUPT_SYSTEM_FILE ((NTSTATUS)0xC00002C4L)
-#define STATUS_DATATYPE_MISALIGNMENT_ERROR ((NTSTATUS)0xC00002C5L)
-#define STATUS_WMI_READ_ONLY ((NTSTATUS)0xC00002C6L)
-#define STATUS_WMI_SET_FAILURE ((NTSTATUS)0xC00002C7L)
-#define STATUS_COMMITMENT_MINIMUM ((NTSTATUS)0xC00002C8L)
-#define STATUS_REG_NAT_CONSUMPTION ((NTSTATUS)0xC00002C9L)
-#define STATUS_TRANSPORT_FULL ((NTSTATUS)0xC00002CAL)
-#define STATUS_DS_SAM_INIT_FAILURE ((NTSTATUS)0xC00002CBL)
-#define STATUS_ONLY_IF_CONNECTED ((NTSTATUS)0xC00002CCL)
-#define STATUS_DS_SENSITIVE_GROUP_VIOLATION ((NTSTATUS)0xC00002CDL)
-#define STATUS_PNP_RESTART_ENUMERATION ((NTSTATUS)0xC00002CEL)
-#define STATUS_JOURNAL_ENTRY_DELETED ((NTSTATUS)0xC00002CFL)
-#define STATUS_DS_CANT_MOD_PRIMARYGROUPID ((NTSTATUS)0xC00002D0L)
-#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS)0xC00002D1L)
-#define STATUS_PNP_REBOOT_REQUIRED ((NTSTATUS)0xC00002D2L)
-#define STATUS_POWER_STATE_INVALID ((NTSTATUS)0xC00002D3L)
-#define STATUS_DS_INVALID_GROUP_TYPE ((NTSTATUS)0xC00002D4L)
-#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN ((NTSTATUS)0xC00002D5L)
-#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN ((NTSTATUS)0xC00002D6L)
-#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D7L)
-#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS)0xC00002D8L)
-#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D9L)
-#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER ((NTSTATUS)0xC00002DAL)
-#define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER ((NTSTATUS)0xC00002DBL)
-#define STATUS_DS_HAVE_PRIMARY_MEMBERS ((NTSTATUS)0xC00002DCL)
-#define STATUS_WMI_NOT_SUPPORTED ((NTSTATUS)0xC00002DDL)
-#define STATUS_INSUFFICIENT_POWER ((NTSTATUS)0xC00002DEL)
-#define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS)0xC00002DFL)
-#define STATUS_SAM_NEED_BOOTKEY_FLOPPY ((NTSTATUS)0xC00002E0L)
-#define STATUS_DS_CANT_START ((NTSTATUS)0xC00002E1L)
-#define STATUS_DS_INIT_FAILURE ((NTSTATUS)0xC00002E2L)
-#define STATUS_SAM_INIT_FAILURE ((NTSTATUS)0xC00002E3L)
-#define STATUS_DS_GC_REQUIRED ((NTSTATUS)0xC00002E4L)
-#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY ((NTSTATUS)0xC00002E5L)
-#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS ((NTSTATUS)0xC00002E6L)
-#define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED ((NTSTATUS)0xC00002E7L)
-#define STATUS_MULTIPLE_FAULT_VIOLATION ((NTSTATUS)0xC00002E8L)
-#define STATUS_CURRENT_DOMAIN_NOT_ALLOWED ((NTSTATUS)0xC00002E9L)
-#define STATUS_CANNOT_MAKE ((NTSTATUS)0xC00002EAL)
-#define STATUS_SYSTEM_SHUTDOWN ((NTSTATUS)0xC00002EBL)
-#define STATUS_DS_INIT_FAILURE_CONSOLE ((NTSTATUS)0xC00002ECL)
-#define STATUS_DS_SAM_INIT_FAILURE_CONSOLE ((NTSTATUS)0xC00002EDL)
-#define STATUS_UNFINISHED_CONTEXT_DELETED ((NTSTATUS)0xC00002EEL)
-#define STATUS_NO_TGT_REPLY ((NTSTATUS)0xC00002EFL)
-#define STATUS_OBJECTID_NOT_FOUND ((NTSTATUS)0xC00002F0L)
-#define STATUS_NO_IP_ADDRESSES ((NTSTATUS)0xC00002F1L)
-#define STATUS_WRONG_CREDENTIAL_HANDLE ((NTSTATUS)0xC00002F2L)
-#define STATUS_CRYPTO_SYSTEM_INVALID ((NTSTATUS)0xC00002F3L)
-#define STATUS_MAX_REFERRALS_EXCEEDED ((NTSTATUS)0xC00002F4L)
-#define STATUS_MUST_BE_KDC ((NTSTATUS)0xC00002F5L)
-#define STATUS_STRONG_CRYPTO_NOT_SUPPORTED ((NTSTATUS)0xC00002F6L)
-#define STATUS_TOO_MANY_PRINCIPALS ((NTSTATUS)0xC00002F7L)
-#define STATUS_NO_PA_DATA ((NTSTATUS)0xC00002F8L)
-#define STATUS_PKINIT_NAME_MISMATCH ((NTSTATUS)0xC00002F9L)
-#define STATUS_SMARTCARD_LOGON_REQUIRED ((NTSTATUS)0xC00002FAL)
-#define STATUS_KDC_INVALID_REQUEST ((NTSTATUS)0xC00002FBL)
-#define STATUS_KDC_UNABLE_TO_REFER ((NTSTATUS)0xC00002FCL)
-#define STATUS_KDC_UNKNOWN_ETYPE ((NTSTATUS)0xC00002FDL)
-#define STATUS_SHUTDOWN_IN_PROGRESS ((NTSTATUS)0xC00002FEL)
-#define STATUS_SERVER_SHUTDOWN_IN_PROGRESS ((NTSTATUS)0xC00002FFL)
-#define STATUS_NOT_SUPPORTED_ON_SBS ((NTSTATUS)0xC0000300L)
-#define STATUS_WMI_GUID_DISCONNECTED ((NTSTATUS)0xC0000301L)
-#define STATUS_WMI_ALREADY_DISABLED ((NTSTATUS)0xC0000302L)
-#define STATUS_WMI_ALREADY_ENABLED ((NTSTATUS)0xC0000303L)
-#define STATUS_MFT_TOO_FRAGMENTED ((NTSTATUS)0xC0000304L)
-#define STATUS_COPY_PROTECTION_FAILURE ((NTSTATUS)0xC0000305L)
-#define STATUS_CSS_AUTHENTICATION_FAILURE ((NTSTATUS)0xC0000306L)
-#define STATUS_CSS_KEY_NOT_PRESENT ((NTSTATUS)0xC0000307L)
-#define STATUS_CSS_KEY_NOT_ESTABLISHED ((NTSTATUS)0xC0000308L)
-#define STATUS_CSS_SCRAMBLED_SECTOR ((NTSTATUS)0xC0000309L)
-#define STATUS_CSS_REGION_MISMATCH ((NTSTATUS)0xC000030AL)
-#define STATUS_CSS_RESETS_EXHAUSTED ((NTSTATUS)0xC000030BL)
-#define STATUS_PKINIT_FAILURE ((NTSTATUS)0xC0000320L)
-#define STATUS_SMARTCARD_SUBSYSTEM_FAILURE ((NTSTATUS)0xC0000321L)
-#define STATUS_NO_KERB_KEY ((NTSTATUS)0xC0000322L)
-#define STATUS_HOST_DOWN ((NTSTATUS)0xC0000350L)
-#define STATUS_UNSUPPORTED_PREAUTH ((NTSTATUS)0xC0000351L)
-#define STATUS_EFS_ALG_BLOB_TOO_BIG ((NTSTATUS)0xC0000352L)
-#define STATUS_PORT_NOT_SET ((NTSTATUS)0xC0000353L)
-#define STATUS_DEBUGGER_INACTIVE ((NTSTATUS)0xC0000354L)
-#define STATUS_DS_VERSION_CHECK_FAILURE ((NTSTATUS)0xC0000355L)
-#define STATUS_AUDITING_DISABLED ((NTSTATUS)0xC0000356L)
-#define STATUS_PRENT4_MACHINE_ACCOUNT ((NTSTATUS)0xC0000357L)
-#define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS)0xC0000358L)
-#define STATUS_INVALID_IMAGE_WIN_32 ((NTSTATUS)0xC0000359L)
-#define STATUS_INVALID_IMAGE_WIN_64 ((NTSTATUS)0xC000035AL)
-#define STATUS_BAD_BINDINGS ((NTSTATUS)0xC000035BL)
-#define STATUS_NETWORK_SESSION_EXPIRED ((NTSTATUS)0xC000035CL)
-#define STATUS_APPHELP_BLOCK ((NTSTATUS)0xC000035DL)
-#define STATUS_ALL_SIDS_FILTERED ((NTSTATUS)0xC000035EL)
-#define STATUS_NOT_SAFE_MODE_DRIVER ((NTSTATUS)0xC000035FL)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT ((NTSTATUS)0xC0000361L)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH ((NTSTATUS)0xC0000362L)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER ((NTSTATUS)0xC0000363L)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER ((NTSTATUS)0xC0000364L)
-#define STATUS_FAILED_DRIVER_ENTRY ((NTSTATUS)0xC0000365L)
-#define STATUS_DEVICE_ENUMERATION_ERROR ((NTSTATUS)0xC0000366L)
-#define STATUS_WAIT_FOR_OPLOCK ((NTSTATUS)0x00000367L)
-#define STATUS_MOUNT_POINT_NOT_RESOLVED ((NTSTATUS)0xC0000368L)
-#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS)0xC0000369L)
-#define STATUS_MCA_OCCURED ((NTSTATUS)0xC000036AL)
-#define STATUS_DRIVER_BLOCKED_CRITICAL ((NTSTATUS)0xC000036BL)
-#define STATUS_DRIVER_BLOCKED ((NTSTATUS)0xC000036CL)
-#define STATUS_DRIVER_DATABASE_ERROR ((NTSTATUS)0xC000036DL)
-#define STATUS_SYSTEM_HIVE_TOO_LARGE ((NTSTATUS)0xC000036EL)
-#define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS)0xC000036FL)
-#define STATUS_DS_SHUTTING_DOWN ((NTSTATUS)0x40000370L)
-#define STATUS_SMARTCARD_WRONG_PIN ((NTSTATUS)0xC0000380L)
-#define STATUS_SMARTCARD_CARD_BLOCKED ((NTSTATUS)0xC0000381L)
-#define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS)0xC0000382L)
-#define STATUS_SMARTCARD_NO_CARD ((NTSTATUS)0xC0000383L)
-#define STATUS_SMARTCARD_NO_KEY_CONTAINER ((NTSTATUS)0xC0000384L)
-#define STATUS_SMARTCARD_NO_CERTIFICATE ((NTSTATUS)0xC0000385L)
-#define STATUS_SMARTCARD_NO_KEYSET ((NTSTATUS)0xC0000386L)
-#define STATUS_SMARTCARD_IO_ERROR ((NTSTATUS)0xC0000387L)
-#define STATUS_DOWNGRADE_DETECTED ((NTSTATUS)0xC0000388L)
-#define STATUS_SMARTCARD_CERT_REVOKED ((NTSTATUS)0xC0000389L)
-#define STATUS_ISSUING_CA_UNTRUSTED ((NTSTATUS)0xC000038AL)
-#define STATUS_REVOCATION_OFFLINE_C ((NTSTATUS)0xC000038BL)
-#define STATUS_PKINIT_CLIENT_FAILURE ((NTSTATUS)0xC000038CL)
-#define STATUS_SMARTCARD_CERT_EXPIRED ((NTSTATUS)0xC000038DL)
-#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS)0xC000038EL)
-#define STATUS_ASSERTION_FAILURE ((NTSTATUS)0xC0000420L)
-#define STATUS_CALLBACK_POP_STACK ((NTSTATUS)0xC0000423L)
-#define STATUS_WOW_ASSERTION ((NTSTATUS)0xC0009898L)
-#define RPC_NT_INVALID_STRING_BINDING ((NTSTATUS)0xC0020001L)
-#define RPC_NT_WRONG_KIND_OF_BINDING ((NTSTATUS)0xC0020002L)
-#define RPC_NT_INVALID_BINDING ((NTSTATUS)0xC0020003L)
-#define RPC_NT_PROTSEQ_NOT_SUPPORTED ((NTSTATUS)0xC0020004L)
-#define RPC_NT_INVALID_RPC_PROTSEQ ((NTSTATUS)0xC0020005L)
-#define RPC_NT_INVALID_STRING_UUID ((NTSTATUS)0xC0020006L)
-#define RPC_NT_INVALID_ENDPOINT_FORMAT ((NTSTATUS)0xC0020007L)
-#define RPC_NT_INVALID_NET_ADDR ((NTSTATUS)0xC0020008L)
-#define RPC_NT_NO_ENDPOINT_FOUND ((NTSTATUS)0xC0020009L)
-#define RPC_NT_INVALID_TIMEOUT ((NTSTATUS)0xC002000AL)
-#define RPC_NT_OBJECT_NOT_FOUND ((NTSTATUS)0xC002000BL)
-#define RPC_NT_ALREADY_REGISTERED ((NTSTATUS)0xC002000CL)
-#define RPC_NT_TYPE_ALREADY_REGISTERED ((NTSTATUS)0xC002000DL)
-#define RPC_NT_ALREADY_LISTENING ((NTSTATUS)0xC002000EL)
-#define RPC_NT_NO_PROTSEQS_REGISTERED ((NTSTATUS)0xC002000FL)
-#define RPC_NT_NOT_LISTENING ((NTSTATUS)0xC0020010L)
-#define RPC_NT_UNKNOWN_MGR_TYPE ((NTSTATUS)0xC0020011L)
-#define RPC_NT_UNKNOWN_IF ((NTSTATUS)0xC0020012L)
-#define RPC_NT_NO_BINDINGS ((NTSTATUS)0xC0020013L)
-#define RPC_NT_NO_PROTSEQS ((NTSTATUS)0xC0020014L)
-#define RPC_NT_CANT_CREATE_ENDPOINT ((NTSTATUS)0xC0020015L)
-#define RPC_NT_OUT_OF_RESOURCES ((NTSTATUS)0xC0020016L)
-#define RPC_NT_SERVER_UNAVAILABLE ((NTSTATUS)0xC0020017L)
-#define RPC_NT_SERVER_TOO_BUSY ((NTSTATUS)0xC0020018L)
-#define RPC_NT_INVALID_NETWORK_OPTIONS ((NTSTATUS)0xC0020019L)
-#define RPC_NT_NO_CALL_ACTIVE ((NTSTATUS)0xC002001AL)
-#define RPC_NT_CALL_FAILED ((NTSTATUS)0xC002001BL)
-#define RPC_NT_CALL_FAILED_DNE ((NTSTATUS)0xC002001CL)
-#define RPC_NT_PROTOCOL_ERROR ((NTSTATUS)0xC002001DL)
-#define RPC_NT_UNSUPPORTED_TRANS_SYN ((NTSTATUS)0xC002001FL)
-#define RPC_NT_UNSUPPORTED_TYPE ((NTSTATUS)0xC0020021L)
-#define RPC_NT_INVALID_TAG ((NTSTATUS)0xC0020022L)
-#define RPC_NT_INVALID_BOUND ((NTSTATUS)0xC0020023L)
-#define RPC_NT_NO_ENTRY_NAME ((NTSTATUS)0xC0020024L)
-#define RPC_NT_INVALID_NAME_SYNTAX ((NTSTATUS)0xC0020025L)
-#define RPC_NT_UNSUPPORTED_NAME_SYNTAX ((NTSTATUS)0xC0020026L)
-#define RPC_NT_UUID_NO_ADDRESS ((NTSTATUS)0xC0020028L)
-#define RPC_NT_DUPLICATE_ENDPOINT ((NTSTATUS)0xC0020029L)
-#define RPC_NT_UNKNOWN_AUTHN_TYPE ((NTSTATUS)0xC002002AL)
-#define RPC_NT_MAX_CALLS_TOO_SMALL ((NTSTATUS)0xC002002BL)
-#define RPC_NT_STRING_TOO_LONG ((NTSTATUS)0xC002002CL)
-#define RPC_NT_PROTSEQ_NOT_FOUND ((NTSTATUS)0xC002002DL)
-#define RPC_NT_PROCNUM_OUT_OF_RANGE ((NTSTATUS)0xC002002EL)
-#define RPC_NT_BINDING_HAS_NO_AUTH ((NTSTATUS)0xC002002FL)
-#define RPC_NT_UNKNOWN_AUTHN_SERVICE ((NTSTATUS)0xC0020030L)
-#define RPC_NT_UNKNOWN_AUTHN_LEVEL ((NTSTATUS)0xC0020031L)
-#define RPC_NT_INVALID_AUTH_IDENTITY ((NTSTATUS)0xC0020032L)
-#define RPC_NT_UNKNOWN_AUTHZ_SERVICE ((NTSTATUS)0xC0020033L)
-#define EPT_NT_INVALID_ENTRY ((NTSTATUS)0xC0020034L)
-#define EPT_NT_CANT_PERFORM_OP ((NTSTATUS)0xC0020035L)
-#define EPT_NT_NOT_REGISTERED ((NTSTATUS)0xC0020036L)
-#define RPC_NT_NOTHING_TO_EXPORT ((NTSTATUS)0xC0020037L)
-#define RPC_NT_INCOMPLETE_NAME ((NTSTATUS)0xC0020038L)
-#define RPC_NT_INVALID_VERS_OPTION ((NTSTATUS)0xC0020039L)
-#define RPC_NT_NO_MORE_MEMBERS ((NTSTATUS)0xC002003AL)
-#define RPC_NT_NOT_ALL_OBJS_UNEXPORTED ((NTSTATUS)0xC002003BL)
-#define RPC_NT_INTERFACE_NOT_FOUND ((NTSTATUS)0xC002003CL)
-#define RPC_NT_ENTRY_ALREADY_EXISTS ((NTSTATUS)0xC002003DL)
-#define RPC_NT_ENTRY_NOT_FOUND ((NTSTATUS)0xC002003EL)
-#define RPC_NT_NAME_SERVICE_UNAVAILABLE ((NTSTATUS)0xC002003FL)
-#define RPC_NT_INVALID_NAF_ID ((NTSTATUS)0xC0020040L)
-#define RPC_NT_CANNOT_SUPPORT ((NTSTATUS)0xC0020041L)
-#define RPC_NT_NO_CONTEXT_AVAILABLE ((NTSTATUS)0xC0020042L)
-#define RPC_NT_INTERNAL_ERROR ((NTSTATUS)0xC0020043L)
-#define RPC_NT_ZERO_DIVIDE ((NTSTATUS)0xC0020044L)
-#define RPC_NT_ADDRESS_ERROR ((NTSTATUS)0xC0020045L)
-#define RPC_NT_FP_DIV_ZERO ((NTSTATUS)0xC0020046L)
-#define RPC_NT_FP_UNDERFLOW ((NTSTATUS)0xC0020047L)
-#define RPC_NT_FP_OVERFLOW ((NTSTATUS)0xC0020048L)
-#define RPC_NT_NO_MORE_ENTRIES ((NTSTATUS)0xC0030001L)
-#define RPC_NT_SS_CHAR_TRANS_OPEN_FAIL ((NTSTATUS)0xC0030002L)
-#define RPC_NT_SS_CHAR_TRANS_SHORT_FILE ((NTSTATUS)0xC0030003L)
-#define RPC_NT_SS_IN_NULL_CONTEXT ((NTSTATUS)0xC0030004L)
-#define RPC_NT_SS_CONTEXT_MISMATCH ((NTSTATUS)0xC0030005L)
-#define RPC_NT_SS_CONTEXT_DAMAGED ((NTSTATUS)0xC0030006L)
-#define RPC_NT_SS_HANDLES_MISMATCH ((NTSTATUS)0xC0030007L)
-#define RPC_NT_SS_CANNOT_GET_CALL_HANDLE ((NTSTATUS)0xC0030008L)
-#define RPC_NT_NULL_REF_POINTER ((NTSTATUS)0xC0030009L)
-#define RPC_NT_ENUM_VALUE_OUT_OF_RANGE ((NTSTATUS)0xC003000AL)
-#define RPC_NT_BYTE_COUNT_TOO_SMALL ((NTSTATUS)0xC003000BL)
-#define RPC_NT_BAD_STUB_DATA ((NTSTATUS)0xC003000CL)
-#define RPC_NT_CALL_IN_PROGRESS ((NTSTATUS)0xC0020049L)
-#define RPC_NT_NO_MORE_BINDINGS ((NTSTATUS)0xC002004AL)
-#define RPC_NT_GROUP_MEMBER_NOT_FOUND ((NTSTATUS)0xC002004BL)
-#define EPT_NT_CANT_CREATE ((NTSTATUS)0xC002004CL)
-#define RPC_NT_INVALID_OBJECT ((NTSTATUS)0xC002004DL)
-#define RPC_NT_NO_INTERFACES ((NTSTATUS)0xC002004FL)
-#define RPC_NT_CALL_CANCELLED ((NTSTATUS)0xC0020050L)
-#define RPC_NT_BINDING_INCOMPLETE ((NTSTATUS)0xC0020051L)
-#define RPC_NT_COMM_FAILURE ((NTSTATUS)0xC0020052L)
-#define RPC_NT_UNSUPPORTED_AUTHN_LEVEL ((NTSTATUS)0xC0020053L)
-#define RPC_NT_NO_PRINC_NAME ((NTSTATUS)0xC0020054L)
-#define RPC_NT_NOT_RPC_ERROR ((NTSTATUS)0xC0020055L)
-#define RPC_NT_UUID_LOCAL_ONLY ((NTSTATUS)0x40020056L)
-#define RPC_NT_SEC_PKG_ERROR ((NTSTATUS)0xC0020057L)
-#define RPC_NT_NOT_CANCELLED ((NTSTATUS)0xC0020058L)
-#define RPC_NT_INVALID_ES_ACTION ((NTSTATUS)0xC0030059L)
-#define RPC_NT_WRONG_ES_VERSION ((NTSTATUS)0xC003005AL)
-#define RPC_NT_WRONG_STUB_VERSION ((NTSTATUS)0xC003005BL)
-#define RPC_NT_INVALID_PIPE_OBJECT ((NTSTATUS)0xC003005CL)
-#define RPC_NT_INVALID_PIPE_OPERATION ((NTSTATUS)0xC003005DL)
-#define RPC_NT_WRONG_PIPE_VERSION ((NTSTATUS)0xC003005EL)
-#define RPC_NT_PIPE_CLOSED ((NTSTATUS)0xC003005FL)
-#define RPC_NT_PIPE_DISCIPLINE_ERROR ((NTSTATUS)0xC0030060L)
-#define RPC_NT_PIPE_EMPTY ((NTSTATUS)0xC0030061L)
-#define RPC_NT_INVALID_ASYNC_HANDLE ((NTSTATUS)0xC0020062L)
-#define RPC_NT_INVALID_ASYNC_CALL ((NTSTATUS)0xC0020063L)
-#define RPC_NT_SEND_INCOMPLETE ((NTSTATUS)0x400200AFL)
-#define STATUS_ACPI_INVALID_OPCODE ((NTSTATUS)0xC0140001L)
-#define STATUS_ACPI_STACK_OVERFLOW ((NTSTATUS)0xC0140002L)
-#define STATUS_ACPI_ASSERT_FAILED ((NTSTATUS)0xC0140003L)
-#define STATUS_ACPI_INVALID_INDEX ((NTSTATUS)0xC0140004L)
-#define STATUS_ACPI_INVALID_ARGUMENT ((NTSTATUS)0xC0140005L)
-#define STATUS_ACPI_FATAL ((NTSTATUS)0xC0140006L)
-#define STATUS_ACPI_INVALID_SUPERNAME ((NTSTATUS)0xC0140007L)
-#define STATUS_ACPI_INVALID_ARGTYPE ((NTSTATUS)0xC0140008L)
-#define STATUS_ACPI_INVALID_OBJTYPE ((NTSTATUS)0xC0140009L)
-#define STATUS_ACPI_INVALID_TARGETTYPE ((NTSTATUS)0xC014000AL)
-#define STATUS_ACPI_INCORRECT_ARGUMENT_COUNT ((NTSTATUS)0xC014000BL)
-#define STATUS_ACPI_ADDRESS_NOT_MAPPED ((NTSTATUS)0xC014000CL)
-#define STATUS_ACPI_INVALID_EVENTTYPE ((NTSTATUS)0xC014000DL)
-#define STATUS_ACPI_HANDLER_COLLISION ((NTSTATUS)0xC014000EL)
-#define STATUS_ACPI_INVALID_DATA ((NTSTATUS)0xC014000FL)
-#define STATUS_ACPI_INVALID_REGION ((NTSTATUS)0xC0140010L)
-#define STATUS_ACPI_INVALID_ACCESS_SIZE ((NTSTATUS)0xC0140011L)
-#define STATUS_ACPI_ACQUIRE_GLOBAL_LOCK ((NTSTATUS)0xC0140012L)
-#define STATUS_ACPI_ALREADY_INITIALIZED ((NTSTATUS)0xC0140013L)
-#define STATUS_ACPI_NOT_INITIALIZED ((NTSTATUS)0xC0140014L)
-#define STATUS_ACPI_INVALID_MUTEX_LEVEL ((NTSTATUS)0xC0140015L)
-#define STATUS_ACPI_MUTEX_NOT_OWNED ((NTSTATUS)0xC0140016L)
-#define STATUS_ACPI_MUTEX_NOT_OWNER ((NTSTATUS)0xC0140017L)
-#define STATUS_ACPI_RS_ACCESS ((NTSTATUS)0xC0140018L)
-#define STATUS_ACPI_INVALID_TABLE ((NTSTATUS)0xC0140019L)
-#define STATUS_ACPI_REG_HANDLER_FAILED ((NTSTATUS)0xC0140020L)
-#define STATUS_ACPI_POWER_REQUEST_FAILED ((NTSTATUS)0xC0140021L)
-#define STATUS_CTX_WINSTATION_NAME_INVALID ((NTSTATUS)0xC00A0001L)
-#define STATUS_CTX_INVALID_PD ((NTSTATUS)0xC00A0002L)
-#define STATUS_CTX_PD_NOT_FOUND ((NTSTATUS)0xC00A0003L)
-#define STATUS_CTX_CDM_CONNECT ((NTSTATUS)0x400A0004L)
-#define STATUS_CTX_CDM_DISCONNECT ((NTSTATUS)0x400A0005L)
-#define STATUS_CTX_CLOSE_PENDING ((NTSTATUS)0xC00A0006L)
-#define STATUS_CTX_NO_OUTBUF ((NTSTATUS)0xC00A0007L)
-#define STATUS_CTX_MODEM_INF_NOT_FOUND ((NTSTATUS)0xC00A0008L)
-#define STATUS_CTX_INVALID_MODEMNAME ((NTSTATUS)0xC00A0009L)
-#define STATUS_CTX_RESPONSE_ERROR ((NTSTATUS)0xC00A000AL)
-#define STATUS_CTX_MODEM_RESPONSE_TIMEOUT ((NTSTATUS)0xC00A000BL)
-#define STATUS_CTX_MODEM_RESPONSE_NO_CARRIER ((NTSTATUS)0xC00A000CL)
-#define STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE ((NTSTATUS)0xC00A000DL)
-#define STATUS_CTX_MODEM_RESPONSE_BUSY ((NTSTATUS)0xC00A000EL)
-#define STATUS_CTX_MODEM_RESPONSE_VOICE ((NTSTATUS)0xC00A000FL)
-#define STATUS_CTX_TD_ERROR ((NTSTATUS)0xC00A0010L)
-#define STATUS_CTX_LICENSE_CLIENT_INVALID ((NTSTATUS)0xC00A0012L)
-#define STATUS_CTX_LICENSE_NOT_AVAILABLE ((NTSTATUS)0xC00A0013L)
-#define STATUS_CTX_LICENSE_EXPIRED ((NTSTATUS)0xC00A0014L)
-#define STATUS_CTX_WINSTATION_NOT_FOUND ((NTSTATUS)0xC00A0015L)
-#define STATUS_CTX_WINSTATION_NAME_COLLISION ((NTSTATUS)0xC00A0016L)
-#define STATUS_CTX_WINSTATION_BUSY ((NTSTATUS)0xC00A0017L)
-#define STATUS_CTX_BAD_VIDEO_MODE ((NTSTATUS)0xC00A0018L)
-#define STATUS_CTX_GRAPHICS_INVALID ((NTSTATUS)0xC00A0022L)
-#define STATUS_CTX_NOT_CONSOLE ((NTSTATUS)0xC00A0024L)
-#define STATUS_CTX_CLIENT_QUERY_TIMEOUT ((NTSTATUS)0xC00A0026L)
-#define STATUS_CTX_CONSOLE_DISCONNECT ((NTSTATUS)0xC00A0027L)
-#define STATUS_CTX_CONSOLE_CONNECT ((NTSTATUS)0xC00A0028L)
-#define STATUS_CTX_SHADOW_DENIED ((NTSTATUS)0xC00A002AL)
-#define STATUS_CTX_WINSTATION_ACCESS_DENIED ((NTSTATUS)0xC00A002BL)
-#define STATUS_CTX_INVALID_WD ((NTSTATUS)0xC00A002EL)
-#define STATUS_CTX_WD_NOT_FOUND ((NTSTATUS)0xC00A002FL)
-#define STATUS_CTX_SHADOW_INVALID ((NTSTATUS)0xC00A0030L)
-#define STATUS_CTX_SHADOW_DISABLED ((NTSTATUS)0xC00A0031L)
-#define STATUS_RDP_PROTOCOL_ERROR ((NTSTATUS)0xC00A0032L)
-#define STATUS_CTX_CLIENT_LICENSE_NOT_SET ((NTSTATUS)0xC00A0033L)
-#define STATUS_CTX_CLIENT_LICENSE_IN_USE ((NTSTATUS)0xC00A0034L)
-#define STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE ((NTSTATUS)0xC00A0035L)
-#define STATUS_CTX_SHADOW_NOT_RUNNING ((NTSTATUS)0xC00A0036L)
-#define STATUS_PNP_BAD_MPS_TABLE ((NTSTATUS)0xC0040035L)
-#define STATUS_PNP_TRANSLATION_FAILED ((NTSTATUS)0xC0040036L)
-#define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS)0xC0040037L)
-#define STATUS_SXS_SECTION_NOT_FOUND ((NTSTATUS)0xC0150001L)
-#define STATUS_SXS_CANT_GEN_ACTCTX ((NTSTATUS)0xC0150002L)
-#define STATUS_SXS_INVALID_ACTCTXDATA_FORMAT ((NTSTATUS)0xC0150003L)
-#define STATUS_SXS_ASSEMBLY_NOT_FOUND ((NTSTATUS)0xC0150004L)
-#define STATUS_SXS_MANIFEST_FORMAT_ERROR ((NTSTATUS)0xC0150005L)
-#define STATUS_SXS_MANIFEST_PARSE_ERROR ((NTSTATUS)0xC0150006L)
-#define STATUS_SXS_ACTIVATION_CONTEXT_DISABLED ((NTSTATUS)0xC0150007L)
-#define STATUS_SXS_KEY_NOT_FOUND ((NTSTATUS)0xC0150008L)
-#define STATUS_SXS_VERSION_CONFLICT ((NTSTATUS)0xC0150009L)
-#define STATUS_SXS_WRONG_SECTION_TYPE ((NTSTATUS)0xC015000AL)
-#define STATUS_SXS_THREAD_QUERIES_DISABLED ((NTSTATUS)0xC015000BL)
-#define STATUS_SXS_ASSEMBLY_MISSING ((NTSTATUS)0xC015000CL)
-#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT ((NTSTATUS)0x4015000DL)
-#define STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET ((NTSTATUS)0xC015000EL)
-#define STATUS_SXS_EARLY_DEACTIVATION ((NTSTATUS)0xC015000FL)
-#define STATUS_SXS_INVALID_DEACTIVATION ((NTSTATUS)0xC0150010L)
-#define STATUS_SXS_MULTIPLE_DEACTIVATION ((NTSTATUS)0xC0150011L)
-#define STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY ((NTSTATUS)0xC0150012L)
-#define STATUS_SXS_PROCESS_TERMINATION_REQUESTED ((NTSTATUS)0xC0150013L)
-#define STATUS_CLUSTER_INVALID_NODE ((NTSTATUS)0xC0130001L)
-#define STATUS_CLUSTER_NODE_EXISTS ((NTSTATUS)0xC0130002L)
-#define STATUS_CLUSTER_JOIN_IN_PROGRESS ((NTSTATUS)0xC0130003L)
-#define STATUS_CLUSTER_NODE_NOT_FOUND ((NTSTATUS)0xC0130004L)
-#define STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND ((NTSTATUS)0xC0130005L)
-#define STATUS_CLUSTER_NETWORK_EXISTS ((NTSTATUS)0xC0130006L)
-#define STATUS_CLUSTER_NETWORK_NOT_FOUND ((NTSTATUS)0xC0130007L)
-#define STATUS_CLUSTER_NETINTERFACE_EXISTS ((NTSTATUS)0xC0130008L)
-#define STATUS_CLUSTER_NETINTERFACE_NOT_FOUND ((NTSTATUS)0xC0130009L)
-#define STATUS_CLUSTER_INVALID_REQUEST ((NTSTATUS)0xC013000AL)
-#define STATUS_CLUSTER_INVALID_NETWORK_PROVIDER ((NTSTATUS)0xC013000BL)
-#define STATUS_CLUSTER_NODE_DOWN ((NTSTATUS)0xC013000CL)
-#define STATUS_CLUSTER_NODE_UNREACHABLE ((NTSTATUS)0xC013000DL)
-#define STATUS_CLUSTER_NODE_NOT_MEMBER ((NTSTATUS)0xC013000EL)
-#define STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS ((NTSTATUS)0xC013000FL)
-#define STATUS_CLUSTER_INVALID_NETWORK ((NTSTATUS)0xC0130010L)
-#define STATUS_CLUSTER_NO_NET_ADAPTERS ((NTSTATUS)0xC0130011L)
-#define STATUS_CLUSTER_NODE_UP ((NTSTATUS)0xC0130012L)
-#define STATUS_CLUSTER_NODE_PAUSED ((NTSTATUS)0xC0130013L)
-#define STATUS_CLUSTER_NODE_NOT_PAUSED ((NTSTATUS)0xC0130014L)
-#define STATUS_CLUSTER_NO_SECURITY_CONTEXT ((NTSTATUS)0xC0130015L)
-#define STATUS_CLUSTER_NETWORK_NOT_INTERNAL ((NTSTATUS)0xC0130016L)
-#define STATUS_CLUSTER_POISONED ((NTSTATUS)0xC0130017L)
-
-/*
-* Debug codes
-*/
-
-#define DBG_EXCEPTION_HANDLED            ((NTSTATUS)0x00010001)
-#define DBG_CONTINUE                     ((NTSTATUS)0x00010002)
-#define DBG_REPLY_LATER                  ((NTSTATUS)0x40010001)
-#define DBG_UNABLE_TO_PROVIDE_HANDLE     ((NTSTATUS)0x40010002)
-#define DBG_TERMINATE_THREAD             ((NTSTATUS)0x40010003)
-#define DBG_TERMINATE_PROCESS            ((NTSTATUS)0x40010004)
-#define DBG_CONTROL_C                    ((NTSTATUS)0x40010005)
-#define DBG_PRINTEXCEPTION_C             ((NTSTATUS)0x40010006)
-#define DBG_RIPEXCEPTION                 ((NTSTATUS)0x40010007)
-#define DBG_CONTROL_BREAK                ((NTSTATUS)0x40010008)
-#define DBG_COMMAND_EXCEPTION            ((NTSTATUS)0x40010009)
-#define DBG_EXCEPTION_NOT_HANDLED        ((NTSTATUS)0x80010001)
-#define DBG_NO_STATE_CHANGE              ((NTSTATUS)0xC0010001)
-#define DBG_APP_NOT_IDLE                 ((NTSTATUS)0xC0010002)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/reactos/include/ddk/xmldsodid.h b/reactos/include/ddk/xmldsodid.h
deleted file mode 100644 (file)
index d80d146..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#ifndef __XMLDSODID_H__
-#define __XMLDSODID_H__
-#define DISPID_XOBJ_MIN                         0x00010000
-#define DISPID_XOBJ_MAX                         0x0001FFFF
-#define DISPID_XOBJ_BASE                        DISPID_XOBJ_MIN
-#define  DISPID_XMLDSO                          DISPID_XOBJ_BASE
-#define  DISPID_XMLDSO_DOCUMENT                 DISPID_XMLDSO  +  1
-#define  DISPID_XMLDSO_JAVADSOCOMPATIBLE        DISPID_XMLDSO_DOCUMENT  +  1
-#endif
\ No newline at end of file
diff --git a/reactos/include/dxsdk/bdatif.idl b/reactos/include/dxsdk/bdatif.idl
new file mode 100644 (file)
index 0000000..6c8887e
--- /dev/null
@@ -0,0 +1,270 @@
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+import "strmif.idl";
+import "tuner.idl";
+import "bdaiface.idl";
+#endif
+
+interface IMPEG2_TIF_CONTROL;
+interface IATSCChannelInfo;
+interface IMPEG2PIDMap;
+
+[
+    object,
+    uuid(DFEF4A68-EE61-415f-9CCB-CD95F2F98A3A),
+    pointer_default(unique)
+]
+interface IBDA_TIF_REGISTRATION : IUnknown
+{
+    HRESULT
+    RegisterTIFEx(
+        [in]  IPin * pTIFInputPin,
+        [in, out] ULONG * ppvRegistrationContext,
+        [in, out] IUnknown ** ppMpeg2DataControl);
+
+    HRESULT
+    UnregisterTIF(
+        [in] ULONG pvRegistrationContext);
+}
+
+[
+    object,
+    uuid(F9BAC2F9-4149-4916-B2EF-FAA202326862),
+    pointer_default(unique)
+]
+interface IMPEG2_TIF_CONTROL : IUnknown
+{
+    HRESULT
+    RegisterTIF(
+        [in]  IUnknown * pUnkTIF,
+        [in, out] ULONG * ppvRegistrationContext);
+
+    HRESULT
+    UnregisterTIF(
+        [in] ULONG pvRegistrationContext);
+
+    HRESULT
+    AddPIDs(
+        [in] ULONG ulcPIDs,
+        [in] ULONG * pulPIDs);
+
+    HRESULT
+    DeletePIDs(
+        [in] ULONG ulcPIDs,
+        [in] ULONG * pulPIDs);
+
+    HRESULT
+    GetPIDCount(
+        [out] ULONG * pulcPIDs);
+
+    HRESULT
+    GetPIDs(
+        [out] ULONG * pulcPIDs,
+        [out] ULONG * pulPIDs);
+}
+
+[
+    object,
+    uuid(A3B152DF-7A90-4218-AC54-9830BEE8C0B6),
+    pointer_default(unique)
+]
+interface ITuneRequestInfo : IUnknown
+{
+    HRESULT
+    GetLocatorData(
+        [in]  ITuneRequest *Request);
+
+    HRESULT
+    GetComponentData(
+        [in]  ITuneRequest *CurrentRequest);
+
+    HRESULT
+    CreateComponentList(
+        [in]  ITuneRequest *CurrentRequest);
+
+    HRESULT
+    GetNextProgram (
+        [in]  ITuneRequest *CurrentRequest,
+        [out, retval] ITuneRequest **TuneRequest);
+
+    HRESULT
+    GetPreviousProgram(
+        [in]  ITuneRequest *CurrentRequest,
+        [out, retval] ITuneRequest **TuneRequest);
+
+    HRESULT
+    GetNextLocator(
+        [in]  ITuneRequest *CurrentRequest,
+        [out, retval] ITuneRequest **TuneRequest);
+
+    HRESULT
+    GetPreviousLocator(
+        [in]  ITuneRequest *CurrentRequest,
+        [out, retval] ITuneRequest **TuneRequest);
+}
+
+[
+    object,
+    uuid(EFDA0C80-F395-42c3-9B3C-56B37DEC7BB7),
+    pointer_default(unique)
+]
+interface IGuideDataEvent : IUnknown
+{
+    HRESULT
+    GuideDataAcquired();
+
+    HRESULT ProgramChanged(
+        [in] VARIANT varProgramDescriptionID);
+
+    HRESULT ServiceChanged(
+        [in] VARIANT varServiceDescriptionID);
+
+    HRESULT ScheduleEntryChanged(
+        [in] VARIANT varScheduleEntryDescriptionID);
+
+    HRESULT ProgramDeleted(
+        [in] VARIANT varProgramDescriptionID);
+
+    HRESULT ServiceDeleted(
+        [in] VARIANT varServiceDescriptionID);
+
+    HRESULT ScheduleDeleted(
+        [in] VARIANT varScheduleEntryDescriptionID);
+}
+
+[
+    object,
+    uuid(88EC5E58-BB73-41d6-99CE-66C524B8B591),
+    pointer_default(unique)
+]
+interface IGuideDataProperty : IUnknown
+{
+    HRESULT 
+    get_Name(
+        [out] BSTR *pbstrName);
+
+    HRESULT
+    get_Language(
+        [out] long *idLang);
+
+    HRESULT
+    get_Value(
+        [out] VARIANT *pvar);
+}
+
+[
+    object,
+    uuid(AE44423B-4571-475c-AD2C-F40A771D80EF),
+    pointer_default(unique)
+]
+interface IEnumGuideDataProperties : IUnknown
+{
+    HRESULT
+    Next(
+        [in] unsigned long celt, 
+        [out] IGuideDataProperty **ppprop,
+        [out] unsigned long *pcelt);
+
+    HRESULT
+    Skip(
+        [in] unsigned long celt);
+
+    HRESULT
+    Reset();
+
+    HRESULT
+    Clone(
+        [out] IEnumGuideDataProperties **ppenum);
+}
+
+[
+    object,
+    uuid(1993299C-CED6-4788-87A3-420067DCE0C7),
+    pointer_default(unique)
+]
+interface IEnumTuneRequests : IUnknown
+{
+    HRESULT
+    Next(
+        [in] unsigned long celt,
+        [out] ITuneRequest **ppprop,
+        [out] unsigned long *pcelt);
+
+    HRESULT
+    Skip(
+        [in] unsigned long celt);
+
+    HRESULT
+    Reset();
+
+    HRESULT
+    Clone(
+        [out] IEnumTuneRequests **ppenum);
+}
+
+[
+    object,
+    uuid(61571138-5B01-43cd-AEAF-60B784A0BF93),
+    pointer_default(unique)
+]
+interface IGuideData : IUnknown
+{
+    HRESULT
+    GetServices(
+        [out, retval] IEnumTuneRequests ** ppEnumTuneRequests);
+
+    HRESULT
+    GetServiceProperties(
+        [in] ITuneRequest * pTuneRequest,
+        [out, retval] IEnumGuideDataProperties ** ppEnumProperties);
+
+    HRESULT
+    GetGuideProgramIDs(
+        [out, retval] IEnumVARIANT ** pEnumPrograms);
+
+    HRESULT
+    GetProgramProperties(
+        [in] VARIANT varProgramDescriptionID,
+        [out, retval] IEnumGuideDataProperties ** ppEnumProperties);
+
+    HRESULT
+    GetScheduleEntryIDs(
+        [out, retval] IEnumVARIANT ** pEnumScheduleEntries);
+
+    HRESULT
+    GetScheduleEntryProperties(
+        [in] VARIANT varScheduleEntryDescriptionID,
+        [out, retval] IEnumGuideDataProperties ** ppEnumProperties);
+}
+
+[
+    object,
+    uuid(4764ff7c-fa95-4525-af4d-d32236db9e38),
+    pointer_default(unique)
+]
+interface IGuideDataLoader : IUnknown
+{
+    HRESULT Init([in] IGuideData *pGuideStore);
+    HRESULT Terminate();
+};
+
+[
+    uuid(8224A083-7F8C-432D-B83E-3C5E9BDE3528),
+    version(1.0),
+]
+library PSISLOADLib
+{
+    importlib("stdole32.tlb");
+    importlib("stdole2.tlb");
+
+    [
+        uuid(14EB8748-1753-4393-95AE-4F7E7A87AAD6),
+        helpstring("TIFLoad Class")
+    ]
+    coclass TIFLoad
+    {
+        interface IGuideDataLoader;
+        interface IGuideDataEvent;
+    };
+};
+
index 8183bd3..1d91680 100644 (file)
@@ -3,6 +3,7 @@
 <module name="dxsdk" type="idlheader">
        <file>amstream.idl</file>
        <file>austream.idl</file>
+       <file>bdatif.idl</file>
        <file>ddstream.idl</file>
        <file>dmodshow.idl</file>
        <file>mixerocx.idl</file>
index 3e04fab..ec4b2d3 100644 (file)
@@ -1,4 +1,3 @@
-
 #define PASTE2(x,y)       x##y
 #define PASTE(x,y)         PASTE2(x,y)
 
index 305f20e..ad68e98 100644 (file)
@@ -703,7 +703,7 @@ typedef struct _PROCESS_BASIC_INFORMATION
     KPRIORITY BasePriority;
     ULONG_PTR UniqueProcessId;
     ULONG_PTR InheritedFromUniqueProcessId;
-} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
+} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
 
 typedef struct _PROCESS_ACCESS_TOKEN
 {
diff --git a/reactos/include/psdk/atsmedia.h b/reactos/include/psdk/atsmedia.h
new file mode 100644 (file)
index 0000000..6f22e57
--- /dev/null
@@ -0,0 +1,7 @@
+#pragma once
+
+#define BDANETWORKTYPE_ATSC DEFINE_GUIDNAMED(BDANETWORKTYPE_ATSC)
+
+#define STATIC_BDANETWORKTYPE_ATSC 0x71985F51, 0x1CA1, 0x11D3, 0x9C, 0xC8, 0x0, 0xC0, 0x4F, 0x79, 0x71, 0xE0
+
+DEFINE_GUIDSTRUCT("71985F51-1CA1-11D3-9CC8-00C04F7971E0", BDANETWORKTYPE_ATSC);
index 4572125..24fc089 100644 (file)
@@ -180,11 +180,11 @@ typedef struct _BATTERY_WAIT_STATUS {
 
 
 typedef NTSTATUS
-(DDKAPI*BCLASS_DISABLE_STATUS_NOTIFY)(
+(NTAPI *BCLASS_DISABLE_STATUS_NOTIFY)(
   IN PVOID  Context);
 
 typedef NTSTATUS
-(DDKAPI*BCLASS_QUERY_INFORMATION)(
+(NTAPI *BCLASS_QUERY_INFORMATION)(
   IN PVOID  Context,
   IN ULONG  BatteryTag,
   IN BATTERY_QUERY_INFORMATION_LEVEL  Level,
@@ -194,25 +194,25 @@ typedef NTSTATUS
   OUT PULONG  ReturnedLength);
 
 typedef NTSTATUS
-(DDKAPI*BCLASS_QUERY_STATUS)(
+(NTAPI *BCLASS_QUERY_STATUS)(
   IN PVOID  Context,
   IN ULONG  BatteryTag,
   OUT PBATTERY_STATUS  BatteryStatus);
 
 typedef NTSTATUS
-(DDKAPI*BCLASS_QUERY_TAG)(
+(NTAPI *BCLASS_QUERY_TAG)(
   IN PVOID  Context,
   OUT PULONG  BatteryTag);
 
 typedef NTSTATUS
-(DDKAPI*BCLASS_SET_INFORMATION)(
+(NTAPI *BCLASS_SET_INFORMATION)(
   IN PVOID  Context,
   IN ULONG  BatteryTag,
   IN BATTERY_SET_INFORMATION_LEVEL  Level,
   IN PVOID  Buffer  OPTIONAL);
 
 typedef NTSTATUS
-(DDKAPI*BCLASS_SET_STATUS_NOTIFY)(
+(NTAPI *BCLASS_SET_STATUS_NOTIFY)(
   IN PVOID  Context,
   IN ULONG  BatteryTag,
   IN PBATTERY_NOTIFY  BatteryNotify);
@@ -239,21 +239,21 @@ typedef struct _BATTERY_MINIPORT_INFO {
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassInitializeDevice(
   IN PBATTERY_MINIPORT_INFO  MiniportInfo,
   IN PVOID  *ClassData);
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassIoctl(
   IN PVOID  ClassData,
   IN PIRP  Irp);
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassQueryWmiDataBlock(
   IN PVOID  ClassData,
   IN PDEVICE_OBJECT  DeviceObject,
@@ -265,13 +265,13 @@ BatteryClassQueryWmiDataBlock(
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassStatusNotify(
   IN PVOID  ClassData);
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassSystemControl(
   IN  PVOID  ClassData,
   IN  PVOID  WmiLibContext, /* PWMILIB_CONTEXT */
@@ -281,7 +281,7 @@ BatteryClassSystemControl(
 
 BCLASSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 BatteryClassUnload(
   IN PVOID  ClassData);
 
similarity index 65%
rename from reactos/include/ddk/cfg.h
rename to reactos/include/psdk/cfg.h
index d9a4802..3653dec 100644 (file)
@@ -20,7 +20,8 @@
  *
  */
 
-#ifndef _CFG_INCLUDED_
+#pragma once
+
 #define _CFG_INCLUDED_
 
 #ifdef __cplusplus
@@ -77,7 +78,26 @@ extern "C" {
 #define CM_PROB_DRIVER_BLOCKED              0x00000030
 #define CM_PROB_REGISTRY_TOO_LARGE          0x00000031
 #define CM_PROB_SETPROPERTIES_FAILED        0x00000032
-#define NUM_CM_PROB                         0x00000033
+#define CM_PROB_WAITING_ON_DEPENDENCY       0x00000033
+#define CM_PROB_UNSIGNED_DRIVER             0x00000034
+
+#define NUM_CM_PROB_V1                      0x00000025
+#define NUM_CM_PROB_V2                      0x00000032
+#define NUM_CM_PROB_V3                      0x00000033
+#define NUM_CM_PROB_V4                      0x00000034
+#define NUM_CM_PROB_V5                      0x00000035
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define NUM_CM_PROB NUM_CM_PROB_V5
+#elif (NTDDI_VERSION >= NTDDI_WS08)
+#define NUM_CM_PROB NUM_CM_PROB_V4
+#elif (NTDDI_VERSION >= NTDDI_WS03)
+#define NUM_CM_PROB NUM_CM_PROB_V3
+#elif (NTDDI_VERSION >= NTDDI_WINXP)
+#define NUM_CM_PROB NUM_CM_PROB_V2
+#elif (NTDDI_VERSION >= WIN2K)
+#define NUM_CM_PROB NUM_CM_PROB_V1
+#endif
 
 #define LCPRI_FORCECONFIG                 0x00000000
 #define LCPRI_BOOTCONFIG                  0x00000001
@@ -95,24 +115,24 @@ extern "C" {
 #define LCPRI_DISABLED                    0x0000FFFF
 #define MAX_LCPRI                         0x0000FFFF
 
-#define DN_ROOT_ENUMERATED  0x00000001 /* Was enumerated by ROOT */
-#define DN_DRIVER_LOADED    0x00000002 /* Has Register_Device_Driver */
-#define DN_ENUM_LOADED      0x00000004 /* Has Register_Enumerator */
-#define DN_STARTED          0x00000008 /* Is currently configured */
-#define DN_MANUAL           0x00000010 /* Manually installed */
-#define DN_NEED_TO_ENUM     0x00000020 /* May need reenumeration */
-#define DN_NOT_FIRST_TIME   0x00000040 /* Has received a config (Win9x only) */
-#define DN_HARDWARE_ENUM    0x00000080 /* Enum generates hardware ID */
-#define DN_LIAR             0x00000100 /* Lied about can reconfig once (Win9x only) */
-#define DN_HAS_MARK         0x00000200 /* Not CM_Create_DevNode lately (Win9x only) */
-#define DN_HAS_PROBLEM      0x00000400 /* Need device installer */
-#define DN_FILTERED         0x00000800 /* Is filtered */
-#define DN_MOVED            0x00001000 /* Has been moved (Win9x only) */
-#define DN_DISABLEABLE      0x00002000 /* Can be rebalanced */
-#define DN_REMOVABLE        0x00004000 /* Can be removed */
-#define DN_PRIVATE_PROBLEM  0x00008000 /* Has a private problem */
-#define DN_MF_PARENT        0x00010000 /* Multi function parent */
-#define DN_MF_CHILD         0x00020000 /* Multi function child */
+#define DN_ROOT_ENUMERATED  0x00000001 /* Was enumerated by ROOT */
+#define DN_DRIVER_LOADED    0x00000002 /* Has Register_Device_Driver */
+#define DN_ENUM_LOADED      0x00000004 /* Has Register_Enumerator */
+#define DN_STARTED          0x00000008 /* Is currently configured */
+#define DN_MANUAL           0x00000010 /* Manually installed */
+#define DN_NEED_TO_ENUM     0x00000020 /* May need reenumeration */
+#define DN_NOT_FIRST_TIME   0x00000040 /* Has received a config (Win9x only) */
+#define DN_HARDWARE_ENUM    0x00000080 /* Enum generates hardware ID */
+#define DN_LIAR             0x00000100 /* Lied about can reconfig once (Win9x only) */
+#define DN_HAS_MARK         0x00000200 /* Not CM_Create_DevNode lately (Win9x only) */
+#define DN_HAS_PROBLEM      0x00000400 /* Need device installer */
+#define DN_FILTERED         0x00000800 /* Is filtered */
+#define DN_MOVED            0x00001000 /* Has been moved (Win9x only) */
+#define DN_DISABLEABLE      0x00002000 /* Can be rebalanced */
+#define DN_REMOVABLE        0x00004000 /* Can be removed */
+#define DN_PRIVATE_PROBLEM  0x00008000 /* Has a private problem */
+#define DN_MF_PARENT        0x00010000 /* Multi function parent */
+#define DN_MF_CHILD         0x00020000 /* Multi function child */
 #define DN_WILL_BE_REMOVED  0x00040000
 #define DN_NOT_FIRST_TIMEE  0x00080000
 #define DN_STOP_FREE_RES    0x00100000
@@ -128,11 +148,33 @@ extern "C" {
 #define DN_NO_SHOW_IN_DM    0x40000000
 #define DN_BOOT_LOG_PROB    0x80000000
 
-#define DN_NEED_RESTART          DN_LIAR
-#define DN_DRIVER_BLOCKED        DN_NOT_FIRST_TIME
-#define DN_LEGACY_DRIVER         DN_MOVED
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+#define DN_NEED_RESTART DN_LIAR
+#define DN_DRIVER_BLOCKED DN_NOT_FIRST_TIME
+#define DN_LEGACY_DRIVER DN_MOVED
 #define DN_CHILD_WITH_INVALID_ID DN_HAS_MARK
 
+#elif (NTDDI_VERSION >= NTDDI_WIN2K)
+
+#define DN_NEED_RESTART 0x00000100
+
+#endif
+
+#define DN_CHANGEABLE_FLAGS (DN_NOT_FIRST_TIME + \
+                             DN_HARDWARE_ENUM + \
+                             DN_HAS_MARK + \
+                             DN_DISABLEABLE + \
+                             DN_REMOVABLE + \
+                             DN_MF_CHILD + \
+                             DN_MF_PARENT + \
+                             DN_NOT_FIRST_TIMEE + \
+                             DN_STOP_FREE_RES + \
+                             DN_REBAL_CANDIDATE + \
+                             DN_NT_ENUMERATOR + \
+                             DN_NT_DRIVER + \
+                             DN_SILENT_INSTALL + \
+                             DN_NO_SHOW_IN_DM)
 
 typedef enum _PNP_VETO_TYPE {
   PNP_VetoTypeUnknown,
@@ -149,14 +191,7 @@ typedef enum _PNP_VETO_TYPE {
   PNP_VetoLegacyDriver
 } PNP_VETO_TYPE, *PPNP_VETO_TYPE;
 
-#define CM_GLOBAL_STATE_CAN_DO_UI           0x00000001
-#define CM_GLOBAL_STATE_ON_BIG_STACK        0x00000002
-#define CM_GLOBAL_STATE_SERVICES_AVAILABLE  0x00000004
-#define CM_GLOBAL_STATE_SHUTTING_DOWN       0x00000008
-#define CM_GLOBAL_STATE_DETECTION_PENDING   0x00000010
-
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* _CFG_INCLUDED_ */
diff --git a/reactos/include/psdk/cfgmgr32.h b/reactos/include/psdk/cfgmgr32.h
new file mode 100644 (file)
index 0000000..4623a65
--- /dev/null
@@ -0,0 +1,3206 @@
+/*
+ * cfgmgr32.h
+ *
+ * PnP configuration manager
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#pragma once
+
+#define _CFGMGR32_H_
+
+#include <cfg.h>
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(_CFGMGR32_)
+#define CMAPI
+#else
+#define CMAPI DECLSPEC_IMPORT
+#endif
+
+typedef CONST VOID *PCVOID;
+
+#define MAX_CONFIG_VALUE         9999
+#define MAX_INSTANCE_VALUE       9999
+
+#define MAX_DEVICE_ID_LEN        200
+#define MAX_DEVNODE_ID_LEN       MAX_DEVICE_ID_LEN
+
+#define MAX_CLASS_NAME_LEN       32
+#define MAX_GUID_STRING_LEN      39
+#define MAX_PROFILE_LEN          80
+
+#define MAX_MEM_REGISTERS        9
+#define MAX_IO_PORTS             20
+#define MAX_IRQS                 7
+#define MAX_DMA_CHANNELS         7
+
+#define DWORD_MAX                0xffffffffUL
+#define DWORDLONG_MAX            0xffffffffffffffffui64
+
+#define CONFIGMG_VERSION         0x0400
+
+#ifdef NT_INCLUDED
+
+typedef unsigned __int64 DWORDLONG;
+typedef DWORDLONG *PDWORDLONG;
+
+#endif /* NT_INCLUDED */
+
+typedef DWORD RETURN_TYPE;
+typedef RETURN_TYPE CONFIGRET;
+
+typedef DWORD DEVNODE, DEVINST;
+typedef DEVNODE *PDEVNODE, *PDEVINST;
+
+typedef CHAR *DEVNODEID_A, *DEVINSTID_A;
+typedef WCHAR *DEVNODEID_W, *DEVINSTID_W;
+
+#ifdef UNICODE
+typedef DEVNODEID_W DEVNODEID;
+typedef DEVINSTID_W DEVINSTID;
+#else
+typedef DEVNODEID_A DEVNODEID;
+typedef DEVINSTID_A DEVINSTID;
+#endif
+
+typedef DWORD_PTR LOG_CONF;
+typedef LOG_CONF *PLOG_CONF;
+
+typedef DWORD_PTR RES_DES;
+typedef RES_DES *PRES_DES;
+
+typedef ULONG RESOURCEID;
+typedef RESOURCEID *PRESOURCEID;
+
+typedef ULONG PRIORITY;
+typedef PRIORITY *PPRIORITY;
+
+typedef DWORD_PTR RANGE_LIST;
+typedef RANGE_LIST *PRANGE_LIST;
+
+typedef DWORD_PTR RANGE_ELEMENT;
+typedef RANGE_ELEMENT *PRANGE_ELEMENT;
+
+typedef HANDLE HMACHINE;
+typedef HMACHINE *PHMACHINE;
+
+typedef ULONG_PTR CONFLICT_LIST;
+typedef CONFLICT_LIST *PCONFLICT_LIST;
+
+typedef struct _CONFLICT_DETAILS_A {
+  ULONG CD_ulSize;
+  ULONG CD_ulMask;
+  DEVINST CD_dnDevInst;
+  RES_DES CD_rdResDes;
+  ULONG CD_ulFlags;
+  CHAR CD_szDescription[MAX_PATH];
+} CONFLICT_DETAILS_A, *PCONFLICT_DETAILS_A;
+
+typedef struct _CONFLICT_DETAILS_W {
+  ULONG CD_ulSize;
+  ULONG CD_ulMask;
+  DEVINST CD_dnDevInst;
+  RES_DES CD_rdResDes;
+  ULONG CD_ulFlags;
+  WCHAR CD_szDescription[MAX_PATH];
+} CONFLICT_DETAILS_W, *PCONFLICT_DETAILS_W;
+
+#ifdef UNICODE
+typedef CONFLICT_DETAILS_W CONFLICT_DETAILS;
+typedef PCONFLICT_DETAILS_W PCONFLICT_DETAILS;
+#else
+typedef CONFLICT_DETAILS_A CONFLICT_DETAILS;
+typedef PCONFLICT_DETAILS_A PCONFLICT_DETAILS;
+#endif
+
+/* CONFLICT_DETAILS.CD.ulMask constants */
+#define CM_CDMASK_DEVINST                 0x00000001
+#define CM_CDMASK_RESDES                  0x00000002
+#define CM_CDMASK_FLAGS                   0x00000004
+#define CM_CDMASK_DESCRIPTION             0x00000008
+#define CM_CDMASK_VALID                   0x0000000F
+
+/* CONFLICT_DETAILS.CD.ulFlags constants */
+#define CM_CDFLAGS_DRIVER                 0x00000001
+#define CM_CDFLAGS_ROOT_OWNED             0x00000002
+#define CM_CDFLAGS_RESERVED               0x00000004
+
+typedef ULONG REGDISPOSITION;
+
+#include <pshpack1.h>
+
+/* MEM_DES.MD_Flags constants */
+#define mMD_MemoryType              0x1
+#define fMD_MemoryType              mMD_MemoryType
+#define fMD_ROM                     0x0
+#define fMD_RAM                     0x1
+
+#define mMD_32_24                   0x2
+#define fMD_32_24                   mMD_32_24
+#define fMD_24                      0x0
+#define fMD_32                      0x2
+
+#define mMD_Prefetchable            0x4
+#define fMD_Prefetchable            mMD_Prefetchable
+#define fMD_Pref                    mMD_Prefetchable
+#define fMD_PrefetchDisallowed      0x0
+#define fMD_PrefetchAllowed         0x4
+
+#define mMD_Readable                0x8
+#define fMD_Readable                mMD_Readable
+#define fMD_ReadAllowed             0x0
+#define fMD_ReadDisallowed          0x8
+
+#define mMD_CombinedWrite           0x10
+#define fMD_CombinedWrite           mMD_CombinedWrite
+#define fMD_CombinedWriteDisallowed 0x0
+#define fMD_CombinedWriteAllowed    0x10
+
+#define mMD_Cacheable               0x20
+#define fMD_NonCacheable            0x0
+#define fMD_Cacheable               0x20
+#define fMD_WINDOW_DECODE           0x40
+#define fMD_MEMORY_BAR              0x80
+
+typedef struct Mem_Range_s {
+  DWORDLONG MR_Align;
+  ULONG MR_nBytes;
+  DWORDLONG MR_Min;
+  DWORDLONG MR_Max;
+  DWORD MR_Flags;
+  DWORD MR_Reserved;
+} MEM_RANGE, *PMEM_RANGE;
+
+typedef struct Mem_Des_s {
+  DWORD MD_Count;
+  DWORD MD_Type;
+  DWORDLONG MD_Alloc_Base;
+  DWORDLONG MD_Alloc_End;
+  DWORD MD_Flags;
+  DWORD MD_Reserved;
+} MEM_DES, *PMEM_DES;
+
+typedef struct Mem_Resource_s {
+  MEM_DES MEM_Header;
+  MEM_RANGE MEM_Data[ANYSIZE_ARRAY];
+} MEM_RESOURCE, *PMEM_RESOURCE;
+
+#define MType_Range sizeof(MEM_RANGE)
+
+typedef struct Mem_Large_Range_s {
+  DWORDLONG MLR_Align;
+  ULONGLONG MLR_nBytes;
+  DWORDLONG MLR_Min;
+  DWORDLONG MLR_Max;
+  DWORD MLR_Flags;
+  DWORD MLR_Reserved;
+} MEM_LARGE_RANGE, *PMEM_LARGE_RANGE;
+
+typedef struct Mem_Large_Des_s {
+  DWORD MLD_Count;
+  DWORD MLD_Type;
+  DWORDLONG MLD_Alloc_Base;
+  DWORDLONG MLD_Alloc_End;
+  DWORD MLD_Flags;
+  DWORD MLD_Reserved;
+} MEM_LARGE_DES, *PMEM_LARGE_DES;
+
+typedef struct Mem_Large_Resource_s {
+  MEM_LARGE_DES MEM_LARGE_Header;
+  MEM_LARGE_RANGE MEM_LARGE_Data[ANYSIZE_ARRAY];
+} MEM_LARGE_RESOURCE, *PMEM_LARGE_RESOURCE;
+
+#define MLType_Range     sizeof(struct Mem_Large_Range_s)
+
+/* IO_DES.Type constants and masks */
+#define fIOD_PortType                     0x1
+#define fIOD_Memory                       0x0
+#define fIOD_IO                           0x1
+#define fIOD_DECODE                       0x00fc
+#define fIOD_10_BIT_DECODE                0x0004
+#define fIOD_12_BIT_DECODE                0x0008
+#define fIOD_16_BIT_DECODE                0x0010
+#define fIOD_POSITIVE_DECODE              0x0020
+#define fIOD_PASSIVE_DECODE               0x0040
+#define fIOD_WINDOW_DECODE                0x0080
+#define fIOD_PORT_BAR                     0x0100
+
+/* IO_RANGE.IOR_Alias constants */
+#define IO_ALIAS_10_BIT_DECODE            0x00000004
+#define IO_ALIAS_12_BIT_DECODE            0x00000010
+#define IO_ALIAS_16_BIT_DECODE            0x00000000
+#define IO_ALIAS_POSITIVE_DECODE          0x000000FF
+
+typedef struct IO_Range_s {
+  DWORDLONG IOR_Align;
+  DWORD IOR_nPorts;
+  DWORDLONG IOR_Min;
+  DWORDLONG IOR_Max;
+  DWORD IOR_RangeFlags;
+  DWORDLONG IOR_Alias;
+} IO_RANGE, *PIO_RANGE;
+
+typedef struct IO_Des_s {
+  DWORD IOD_Count;
+  DWORD IOD_Type;
+  DWORDLONG IOD_Alloc_Base;
+  DWORDLONG IOD_Alloc_End;
+  DWORD IOD_DesFlags;
+} IO_DES, *PIO_DES;
+
+typedef struct IO_Resource_s {
+  IO_DES IO_Header;
+  IO_RANGE IO_Data[ANYSIZE_ARRAY];
+} IO_RESOURCE, *PIO_RESOURCE;
+
+#define IOA_Local                         0xff
+
+#define IOType_Range sizeof(IO_RANGE)
+
+/* DMA_DES.DD_Flags constants and masks */
+#define mDD_Width                         0x3
+#define fDD_BYTE                          0x0
+#define fDD_WORD                          0x1
+#define fDD_DWORD                         0x2
+#define fDD_BYTE_AND_WORD                 0x3
+
+#define mDD_BusMaster                     0x4
+#define fDD_NoBusMaster                   0x0
+#define fDD_BusMaster                     0x4
+
+#define mDD_Type                          0x18
+#define fDD_TypeStandard                  0x00
+#define fDD_TypeA                         0x08
+#define fDD_TypeB                         0x10
+#define fDD_TypeF                         0x18
+
+typedef struct DMA_Des_s {
+  DWORD  DD_Count;
+  DWORD  DD_Type;
+  DWORD  DD_Flags;
+  ULONG  DD_Alloc_Chan;
+} DMA_DES, *PDMA_DES;
+
+typedef struct DMA_Range_s {
+  ULONG  DR_Min;
+  ULONG  DR_Max;
+  ULONG  DR_Flags;
+} DMA_RANGE, *PDMA_RANGE;
+
+#define DType_Range sizeof(DMA_RANGE)
+
+typedef struct DMA_Resource_s {
+  DMA_DES  DMA_Header;
+  DMA_RANGE  DMA_Data[ANYSIZE_ARRAY];
+} DMA_RESOURCE, *PDMA_RESOURCE;
+
+/* IRQ_DES.IRQD_flags constants */
+#define mIRQD_Share                       0x1
+#define fIRQD_Exclusive                   0x0
+#define fIRQD_Share                       0x1
+
+#define fIRQD_Share_Bit                   0
+#define fIRQD_Level_Bit                   1
+
+#define mIRQD_Edge_Level                  0x2
+#define fIRQD_Level                       0x0
+#define fIRQD_Edge                        0x2
+
+typedef struct IRQ_Range_s {
+  ULONG IRQR_Min;
+  ULONG IRQR_Max;
+#if defined(NT_PROCESSOR_GROUPS)
+  USHORT IRQR_Flags;
+  USHORT IRQR_Rsvdz;
+#else
+  ULONG IRQR_Flags;
+#endif
+} IRQ_RANGE, *PIRQ_RANGE;
+
+typedef struct IRQ_Des_32_s {
+  DWORD IRQD_Count;
+  DWORD IRQD_Type;
+#if defined(NT_PROCESSOR_GROUPS)
+  USHORT IRQD_Flags;
+  USHORT IRQD_Group;
+#else
+  DWORD IRQD_Flags;
+#endif
+  ULONG IRQD_Alloc_Num;
+  ULONG32 IRQD_Affinity;
+} IRQ_DES_32, *PIRQ_DES_32;
+
+typedef struct IRQ_Des_64_s {
+  DWORD IRQD_Count;
+  DWORD IRQD_Type;
+#if defined(NT_PROCESSOR_GROUPS)
+  USHORT IRQD_Flags;
+  USHORT IRQD_Group;
+#else
+  DWORD IRQD_Flags;
+#endif
+  ULONG IRQD_Alloc_Num;
+  ULONG64 IRQD_Affinity;
+} IRQ_DES_64, *PIRQ_DES_64;
+
+#ifdef _WIN64
+typedef IRQ_DES_64 IRQ_DES;
+typedef PIRQ_DES_64 PIRQ_DES;
+#else
+typedef IRQ_DES_32 IRQ_DES;
+typedef PIRQ_DES_32 PIRQ_DES;
+#endif
+
+typedef struct IRQ_Resource_32_s {
+  IRQ_DES_32 IRQ_Header;
+  IRQ_RANGE IRQ_Data[ANYSIZE_ARRAY];
+} IRQ_RESOURCE_32, *PIRQ_RESOURCE_32;
+
+typedef struct IRQ_Resource_64_s {
+  IRQ_DES_64 IRQ_Header;
+  IRQ_RANGE IRQ_Data[ANYSIZE_ARRAY];
+} IRQ_RESOURCE_64, *PIRQ_RESOURCE_64;
+
+#ifdef _WIN64
+typedef IRQ_RESOURCE_64 IRQ_RESOURCE;
+typedef PIRQ_RESOURCE_64 PIRQ_RESOURCE;
+#else
+typedef IRQ_RESOURCE_32 IRQ_RESOURCE;
+typedef PIRQ_RESOURCE_32 PIRQ_RESOURCE;
+#endif
+
+#define IRQType_Range sizeof(IRQ_RANGE)
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+#define CM_RESDES_WIDTH_DEFAULT  0x00000000
+#define CM_RESDES_WIDTH_32       0x00000001
+#define CM_RESDES_WIDTH_64       0x00000002
+#define CM_RESDES_WIDTH_BITS     0x00000003
+#endif
+
+typedef struct DevPrivate_Range_s {
+  DWORD PR_Data1;
+  DWORD PR_Data2;
+  DWORD PR_Data3;
+} DEVPRIVATE_RANGE, *PDEVPRIVATE_RANGE;
+
+typedef struct DevPrivate_Des_s {
+  DWORD PD_Count;
+  DWORD PD_Type;
+  DWORD PD_Data1;
+  DWORD PD_Data2;
+  DWORD PD_Data3;
+  DWORD PD_Flags;
+} DEVPRIVATE_DES, *PDEVPRIVATE_DES;
+
+#define PType_Range sizeof(DEVPRIVATE_RANGE)
+
+typedef struct DevPrivate_Resource_s {
+  DEVPRIVATE_DES PRV_Header;
+  DEVPRIVATE_RANGE PRV_Data[ANYSIZE_ARRAY];
+} DEVPRIVATE_RESOURCE, *PDEVPRIVATE_RESOURCE;
+
+typedef struct CS_Des_s {
+  DWORD CSD_SignatureLength;
+  DWORD CSD_LegacyDataOffset;
+  DWORD CSD_LegacyDataSize;
+  DWORD CSD_Flags;
+  GUID CSD_ClassGuid;
+  BYTE CSD_Signature[ANYSIZE_ARRAY];
+} CS_DES, *PCS_DES;
+
+typedef struct CS_Resource_s {
+  CS_DES CS_Header;
+} CS_RESOURCE, *PCS_RESOURCE;
+
+#define mPCD_IO_8_16                      0x1
+#define fPCD_IO_8                         0x0
+#define fPCD_IO_16                        0x1
+#define mPCD_MEM_8_16                     0x2
+#define fPCD_MEM_8                        0x0
+#define fPCD_MEM_16                       0x2
+#define mPCD_MEM_A_C                      0xC
+#define fPCD_MEM1_A                       0x4
+#define fPCD_MEM2_A                       0x8
+#define fPCD_IO_ZW_8                      0x10
+#define fPCD_IO_SRC_16                    0x20
+#define fPCD_IO_WS_16                     0x40
+#define mPCD_MEM_WS                       0x300
+#define fPCD_MEM_WS_ONE                   0x100
+#define fPCD_MEM_WS_TWO                   0x200
+#define fPCD_MEM_WS_THREE                 0x300
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+
+#define fPCD_MEM_A                        0x4
+
+#define fPCD_ATTRIBUTES_PER_WINDOW        0x8000
+
+#define fPCD_IO1_16                       0x00010000
+#define fPCD_IO1_ZW_8                     0x00020000
+#define fPCD_IO1_SRC_16                   0x00040000
+#define fPCD_IO1_WS_16                    0x00080000
+
+#define fPCD_IO2_16                       0x00100000
+#define fPCD_IO2_ZW_8                     0x00200000
+#define fPCD_IO2_SRC_16                   0x00400000
+#define fPCD_IO2_WS_16                    0x00800000
+
+#define mPCD_MEM1_WS                      0x03000000
+#define fPCD_MEM1_WS_ONE                  0x01000000
+#define fPCD_MEM1_WS_TWO                  0x02000000
+#define fPCD_MEM1_WS_THREE                0x03000000
+#define fPCD_MEM1_16                      0x04000000
+
+#define mPCD_MEM2_WS                      0x30000000
+#define fPCD_MEM2_WS_ONE                  0x10000000
+#define fPCD_MEM2_WS_TWO                  0x20000000
+#define fPCD_MEM2_WS_THREE                0x30000000
+#define fPCD_MEM2_16                      0x40000000
+
+#define PCD_MAX_MEMORY                    2
+#define PCD_MAX_IO                        2
+
+#endif /* (WINVER >= _WIN32_WINNT_WINXP) */
+
+typedef struct PcCard_Des_s {
+  DWORD PCD_Count;
+  DWORD PCD_Type;
+  DWORD PCD_Flags;
+  BYTE PCD_ConfigIndex;
+  BYTE PCD_Reserved[3];
+  DWORD PCD_MemoryCardBase1;
+  DWORD PCD_MemoryCardBase2;
+#if (WINVER >= _WIN32_WINNT_WINXP)
+  DWORD PCD_MemoryCardBase[PCD_MAX_MEMORY];
+  WORD PCD_MemoryFlags[PCD_MAX_MEMORY];
+  BYTE PCD_IoFlags[PCD_MAX_IO];
+#endif
+} PCCARD_DES, *PPCCARD_DES;
+
+typedef struct PcCard_Resource_s {
+  PCCARD_DES PcCard_Header;
+} PCCARD_RESOURCE, *PPCCARD_RESOURCE;
+
+/* MFCARD_DES.PMF_Flags constants */
+#define fPMF_AUDIO_ENABLE                 0x8
+#define mPMF_AUDIO_ENABLE                 fPMF_AUDIO_ENABLE
+
+typedef struct MfCard_Des_s {
+  DWORD PMF_Count;
+  DWORD PMF_Type;
+  DWORD PMF_Flags;
+  BYTE PMF_ConfigOptions;
+  BYTE PMF_IoResourceIndex;
+  BYTE PMF_Reserved[2];
+  DWORD PMF_ConfigRegisterBase;
+} MFCARD_DES, *PMFCARD_DES;
+
+typedef struct MfCard_Resource_s {
+  MFCARD_DES MfCard_Header;
+} MFCARD_RESOURCE, *PMFCARD_RESOURCE;
+
+typedef struct BusNumber_Des_s {
+  DWORD BUSD_Count;
+  DWORD BUSD_Type;
+  DWORD BUSD_Flags;
+  ULONG BUSD_Alloc_Base;
+  ULONG BUSD_Alloc_End;
+} BUSNUMBER_DES, *PBUSNUMBER_DES;
+
+typedef struct BusNumber_Range_s {
+  ULONG BUSR_Min;
+  ULONG BUSR_Max;
+  ULONG BUSR_nBusNumbers;
+  ULONG BUSR_Flags;
+} BUSNUMBER_RANGE, *PBUSNUMBER_RANGE;
+
+#define BusNumberType_Range sizeof(BUSNUMBER_RANGE)
+
+typedef struct BusNumber_Resource_s {
+  BUSNUMBER_DES BusNumber_Header;
+  BUSNUMBER_RANGE BusNumber_Data[ANYSIZE_ARRAY];
+} BUSNUMBER_RESOURCE, *PBUSNUMBER_RESOURCE;
+
+#define CM_HWPI_NOT_DOCKABLE           0x00000000
+#define CM_HWPI_UNDOCKED               0x00000001
+#define CM_HWPI_DOCKED                 0x00000002
+
+typedef struct HWProfileInfo_sA {
+  ULONG HWPI_ulHWProfile;
+  CHAR HWPI_szFriendlyName[MAX_PROFILE_LEN];
+  DWORD HWPI_dwFlags;
+} HWPROFILEINFO_A, *PHWPROFILEINFO_A;
+
+typedef struct HWProfileInfo_sW {
+  ULONG HWPI_ulHWProfile;
+  WCHAR HWPI_szFriendlyName[MAX_PROFILE_LEN];
+  DWORD HWPI_dwFlags;
+} HWPROFILEINFO_W, *PHWPROFILEINFO_W;
+
+#ifdef UNICODE
+typedef HWPROFILEINFO_W HWPROFILEINFO;
+typedef PHWPROFILEINFO_W PHWPROFILEINFO;
+#else
+typedef HWPROFILEINFO_A HWPROFILEINFO;
+typedef PHWPROFILEINFO_A PHWPROFILEINFO;
+#endif
+
+#include <poppack.h>
+
+#define ResType_All                       0x00000000
+#define ResType_None                      0x00000000
+#define ResType_Mem                       0x00000001
+#define ResType_IO                        0x00000002
+#define ResType_DMA                       0x00000003
+#define ResType_IRQ                       0x00000004
+#define ResType_DoNotUse                  0x00000005
+#define ResType_BusNumber                 0x00000006
+#define ResType_MemLarge                  0x00000007
+#define ResType_MAX                       0x00000007
+#define ResType_Ignored_Bit               0x00008000
+#define ResType_ClassSpecific             0x0000FFFF
+#define ResType_Reserved                  0x00008000
+#define ResType_DevicePrivate             0x00008001
+#define ResType_PcCardConfig              0x00008002
+#define ResType_MfCardConfig              0x00008003
+
+#define CM_ADD_RANGE_ADDIFCONFLICT        0x00000000
+#define CM_ADD_RANGE_DONOTADDIFCONFLICT   0x00000001
+#define CM_ADD_RANGE_BITS                 0x00000001
+
+#define BASIC_LOG_CONF                    0x00000000
+#define FILTERED_LOG_CONF                 0x00000001
+#define ALLOC_LOG_CONF                    0x00000002
+#define BOOT_LOG_CONF                     0x00000003
+#define FORCED_LOG_CONF                   0x00000004
+#define OVERRIDE_LOG_CONF                 0x00000005
+#define NUM_LOG_CONF                      0x00000006
+#define LOG_CONF_BITS                     0x00000007
+
+#define PRIORITY_EQUAL_FIRST              0x00000008
+#define PRIORITY_EQUAL_LAST               0x00000000
+#define PRIORITY_BIT                      0x00000008
+
+#define RegDisposition_OpenAlways         0x00000000
+#define RegDisposition_OpenExisting       0x00000001
+#define RegDisposition_Bits               0x00000001
+
+/* CM_Add_ID.ulFlags constants */
+#define CM_ADD_ID_HARDWARE                0x00000000
+#define CM_ADD_ID_COMPATIBLE              0x00000001
+#define CM_ADD_ID_BITS                    0x00000001
+
+/* Flags for CM_Create_DevNode[_Ex].ulFlags constants */
+#define CM_CREATE_DEVNODE_NORMAL          0x00000000
+#define CM_CREATE_DEVNODE_NO_WAIT_INSTALL 0x00000001
+#define CM_CREATE_DEVNODE_PHANTOM         0x00000002
+#define CM_CREATE_DEVNODE_GENERATE_ID     0x00000004
+#define CM_CREATE_DEVNODE_DO_NOT_INSTALL  0x00000008
+#define CM_CREATE_DEVNODE_BITS            0x0000000F
+
+#define CM_CREATE_DEVINST_NORMAL          CM_CREATE_DEVNODE_NORMAL
+#define CM_CREATE_DEVINST_NO_WAIT_INSTALL CM_CREATE_DEVNODE_NO_WAIT_INSTALL
+#define CM_CREATE_DEVINST_PHANTOM         CM_CREATE_DEVNODE_PHANTOM
+#define CM_CREATE_DEVINST_GENERATE_ID     CM_CREATE_DEVNODE_GENERATE_ID
+#define CM_CREATE_DEVINST_DO_NOT_INSTALL  CM_CREATE_DEVNODE_DO_NOT_INSTALL
+#define CM_CREATE_DEVINST_BITS            CM_CREATE_DEVNODE_BITS
+
+/* Flags for CM_Delete_Class_Key.ulFlags constants */
+#define CM_DELETE_CLASS_ONLY              0x00000000
+#define CM_DELETE_CLASS_SUBKEYS           0x00000001
+#if (WINVER >= _WIN32_WINNT_VISTA)
+#define CM_DELETE_CLASS_INTERFACE         0x00000002
+#endif
+#define CM_DELETE_CLASS_BITS              0x00000003
+
+/* CM_Run_Detection[_Ex].ulFlags constants */
+#define CM_DETECT_NEW_PROFILE       0x00000001
+#define CM_DETECT_CRASHED           0x00000002
+#define CM_DETECT_HWPROF_FIRST_BOOT 0x00000004
+#define CM_DETECT_RUN               0x80000000
+#define CM_DETECT_BITS              0x80000007
+
+#define CM_DISABLE_POLITE              0x00000000
+#define CM_DISABLE_ABSOLUTE            0x00000001
+#define CM_DISABLE_HARDWARE            0x00000002
+#define CM_DISABLE_UI_NOT_OK           0x00000004
+#define CM_DISABLE_BITS                0x00000007
+
+#define CM_GETIDLIST_FILTER_NONE               0x00000000
+#define CM_GETIDLIST_FILTER_ENUMERATOR         0x00000001
+#define CM_GETIDLIST_FILTER_SERVICE            0x00000002
+#define CM_GETIDLIST_FILTER_EJECTRELATIONS     0x00000004
+#define CM_GETIDLIST_FILTER_REMOVALRELATIONS   0x00000008
+#define CM_GETIDLIST_FILTER_POWERRELATIONS     0x00000010
+#define CM_GETIDLIST_FILTER_BUSRELATIONS       0x00000020
+#define CM_GETIDLIST_DONOTGENERATE             0x10000040
+#if (WINVER <= _WIN32_WINNT_VISTA)
+#define CM_GETIDLIST_FILTER_BITS               0x1000007F
+#endif
+#if (WINVER >= _WIN32_WINNT_WIN7)
+#define CM_GETIDLIST_FILTER_TRANSPORTRELATIONS 0x00000080
+#define CM_GETIDLIST_FILTER_PRESENT            0x00000100
+#define CM_GETIDLIST_FILTER_CLASS              0x00000200
+#define CM_GETIDLIST_FILTER_BITS               0x100003FF
+#endif
+
+#define CM_GET_DEVICE_INTERFACE_LIST_PRESENT      0x00000000
+#define CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES  0x00000001
+#define CM_GET_DEVICE_INTERFACE_LIST_BITS         0x00000001
+
+#define CM_DRP_DEVICEDESC                  0x00000001
+#define CM_DRP_HARDWAREID                  0x00000002
+#define CM_DRP_COMPATIBLEIDS               0x00000003
+#define CM_DRP_UNUSED0                     0x00000004
+#define CM_DRP_SERVICE                     0x00000005
+#define CM_DRP_UNUSED1                     0x00000006
+#define CM_DRP_UNUSED2                     0x00000007
+#define CM_DRP_CLASS                       0x00000008
+#define CM_DRP_CLASSGUID                   0x00000009
+#define CM_DRP_DRIVER                      0x0000000A
+#define CM_DRP_CONFIGFLAGS                 0x0000000B
+#define CM_DRP_MFG                         0x0000000C
+#define CM_DRP_FRIENDLYNAME                0x0000000D
+#define CM_DRP_LOCATION_INFORMATION        0x0000000E
+#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000F
+#define CM_DRP_CAPABILITIES                0x00000010
+#define CM_DRP_UI_NUMBER                   0x00000011
+#define CM_DRP_UPPERFILTERS                0x00000012
+#if (WINVER >= _WIN32_WINNT_VISTA)
+#define CM_CRP_UPPERFILTERS                CM_DRP_UPPERFILTERS
+#endif
+#define CM_DRP_LOWERFILTERS                0x00000013
+#if (WINVER >= _WIN32_WINNT_VISTA)
+#define CM_CRP_LOWERFILTERS                CM_DRP_LOWERFILTERS
+#endif
+#define CM_DRP_BUSTYPEGUID                 0x00000014
+#define CM_DRP_LEGACYBUSTYPE               0x00000015
+#define CM_DRP_BUSNUMBER                   0x00000016
+#define CM_DRP_ENUMERATOR_NAME             0x00000017
+#define CM_DRP_SECURITY                    0x00000018
+#define CM_CRP_SECURITY                    CM_DRP_SECURITY
+#define CM_DRP_SECURITY_SDS                0x00000019
+#define CM_CRP_SECURITY_SDS                CM_DRP_SECURITY_SDS
+#define CM_DRP_DEVTYPE                     0x0000001A
+#define CM_CRP_DEVTYPE                     CM_DRP_DEVTYPE
+#define CM_DRP_EXCLUSIVE                   0x0000001B
+#define CM_CRP_EXCLUSIVE                   CM_DRP_EXCLUSIVE
+#define CM_DRP_CHARACTERISTICS             0x0000001C
+#define CM_CRP_CHARACTERISTICS             CM_DRP_CHARACTERISTICS
+#define CM_DRP_ADDRESS                     0x0000001D
+#define CM_DRP_UI_NUMBER_DESC_FORMAT       0x0000001E
+#if (WINVER >= _WIN32_WINNT_WINXP)
+#define CM_DRP_DEVICE_POWER_DATA           0x0000001F
+#define CM_DRP_REMOVAL_POLICY              0x00000020
+#define CM_DRP_REMOVAL_POLICY_HW_DEFAULT   0x00000021
+#define CM_DRP_REMOVAL_POLICY_OVERRIDE     0x00000022
+#define CM_DRP_INSTALL_STATE               0x00000023
+#endif
+#if (WINVER >= _WIN32_WINNT_WS03)
+#define CM_DRP_LOCATION_PATHS              0x00000024
+#endif
+#if (WINVER >= _WIN32_WINNT_WIN7)
+#define CM_DRP_BASE_CONTAINERID            0x00000025
+#endif
+#define CM_DRP_MIN                         0x00000001
+#define CM_CRP_MIN                         CM_DRP_MIN
+#define CM_DRP_MAX                         0x00000025
+#define CM_CRP_MAX                         CM_DRP_MAX
+
+#define CM_DEVCAP_LOCKSUPPORTED            0x00000001
+#define CM_DEVCAP_EJECTSUPPORTED           0x00000002
+#define CM_DEVCAP_REMOVABLE                0x00000004
+#define CM_DEVCAP_DOCKDEVICE               0x00000008
+#define CM_DEVCAP_UNIQUEID                 0x00000010
+#define CM_DEVCAP_SILENTINSTALL            0x00000020
+#define CM_DEVCAP_RAWDEVICEOK              0x00000040
+#define CM_DEVCAP_SURPRISEREMOVALOK        0x00000080
+#define CM_DEVCAP_HARDWAREDISABLED         0x00000100
+#define CM_DEVCAP_NONDYNAMIC               0x00000200
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+
+#define CM_REMOVAL_POLICY_EXPECT_NO_REMOVAL           1
+#define CM_REMOVAL_POLICY_EXPECT_ORDERLY_REMOVAL      2
+#define CM_REMOVAL_POLICY_EXPECT_SURPRISE_REMOVAL     3
+
+#define CM_INSTALL_STATE_INSTALLED                    0
+#define CM_INSTALL_STATE_NEEDS_REINSTALL              1
+#define CM_INSTALL_STATE_FAILED_INSTALL               2
+#define CM_INSTALL_STATE_FINISH_INSTALL               3
+
+#endif /* (WINVER >= _WIN32_WINNT_WINXP) */
+
+/* CM_Locate_DevNode.ulFlags constants */
+#define CM_LOCATE_DEVNODE_NORMAL         0x00000000
+#define CM_LOCATE_DEVNODE_PHANTOM        0x00000001
+#define CM_LOCATE_DEVNODE_CANCELREMOVE   0x00000002
+#define CM_LOCATE_DEVNODE_NOVALIDATION   0x00000004
+#define CM_LOCATE_DEVNODE_BITS           0x00000007
+
+#define CM_LOCATE_DEVINST_NORMAL         CM_LOCATE_DEVNODE_NORMAL
+#define CM_LOCATE_DEVINST_PHANTOM        CM_LOCATE_DEVNODE_PHANTOM
+#define CM_LOCATE_DEVINST_CANCELREMOVE   CM_LOCATE_DEVNODE_CANCELREMOVE
+#define CM_LOCATE_DEVINST_NOVALIDATION   CM_LOCATE_DEVNODE_NOVALIDATION
+#define CM_LOCATE_DEVINST_BITS           CM_LOCATE_DEVNODE_BITS
+
+#define CM_OPEN_CLASS_KEY_INSTALLER        0x00000000
+#define CM_OPEN_CLASS_KEY_INTERFACE        0x00000001
+#define CM_OPEN_CLASS_KEY_BITS             0x00000001
+
+/* CM_Query_And_Remove_SubTree.ulFlags constants */
+#define CM_REMOVE_UI_OK                    0x00000000
+#define CM_REMOVE_UI_NOT_OK                0x00000001
+#define CM_REMOVE_NO_RESTART               0x00000002
+#define CM_REMOVE_BITS                     0x00000003
+
+#define CM_QUERY_REMOVE_UI_OK (CM_REMOVE_UI_OK)
+#define CM_QUERY_REMOVE_UI_NOT_OK (CM_REMOVE_UI_NOT_OK)
+#define CM_QUERY_REMOVE_BITS (CM_QUERY_REMOVE_UI_OK|CM_QUERY_REMOVE_UI_NOT_OK)
+
+/* CM_Reenumerate_DevNode.ulFlags constants */
+#define CM_REENUMERATE_NORMAL              0x00000000
+#define CM_REENUMERATE_SYNCHRONOUS         0x00000001
+#if (WINVER >= _WIN32_WINNT_WINXP)
+#define CM_REENUMERATE_RETRY_INSTALLATION  0x00000002
+#define CM_REENUMERATE_ASYNCHRONOUS        0x00000004
+#endif
+#define CM_REENUMERATE_BITS                0x00000007
+
+#define CM_REGISTER_DEVICE_DRIVER_STATIC         0x00000000
+#define CM_REGISTER_DEVICE_DRIVER_DISABLEABLE    0x00000001
+#define CM_REGISTER_DEVICE_DRIVER_REMOVABLE      0x00000002
+#define CM_REGISTER_DEVICE_DRIVER_BITS           0x00000003
+
+#define CM_REGISTRY_HARDWARE               0x00000000
+#define CM_REGISTRY_SOFTWARE               0x00000001
+#define CM_REGISTRY_USER                   0x00000100
+#define CM_REGISTRY_CONFIG                 0x00000200
+#define CM_REGISTRY_BITS                   0x00000301
+
+#define CM_SET_DEVNODE_PROBLEM_NORMAL      0x00000000
+#define CM_SET_DEVNODE_PROBLEM_OVERRIDE    0x00000001
+#define CM_SET_DEVNODE_PROBLEM_BITS        0x00000001
+
+#define CM_SET_DEVINST_PROBLEM_NORMAL CM_SET_DEVNODE_PROBLEM_NORMAL
+#define CM_SET_DEVINST_PROBLEM_OVERRIDE CM_SET_DEVNODE_PROBLEM_OVERRIDE
+#define CM_SET_DEVINST_PROBLEM_BITS CM_SET_DEVNODE_PROBLEM_BITS
+
+/* CM_Set_HW_Prof_Flags[_Ex].ulFlags constants */
+#define CM_SET_HW_PROF_FLAGS_UI_NOT_OK     0x00000001
+#define CM_SET_HW_PROF_FLAGS_BITS          0x00000001
+
+/* CM_Setup_DevInst[_Ex].ulFlags constants */
+#define CM_SETUP_DEVNODE_READY             0x00000000
+#define CM_SETUP_DEVINST_READY             CM_SETUP_DEVNODE_READY
+#define CM_SETUP_DOWNLOAD                  0x00000001
+#define CM_SETUP_WRITE_LOG_CONFS           0x00000002
+#define CM_SETUP_PROP_CHANGE               0x00000003
+#if (WINVER >= _WIN32_WINNT_WINXP)
+#define CM_SETUP_DEVNODE_RESET             0x00000004
+#define CM_SETUP_DEVINST_RESET             CM_SETUP_DEVNODE_RESET
+#endif
+#define CM_SETUP_BITS                      0x00000007
+
+#define CM_QUERY_ARBITRATOR_RAW            0x00000000
+#define CM_QUERY_ARBITRATOR_TRANSLATED     0x00000001
+#define CM_QUERY_ARBITRATOR_BITS           0x00000001
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+#define CM_CUSTOMDEVPROP_MERGE_MULTISZ     0x00000001
+#define CM_CUSTOMDEVPROP_BITS              0x00000001
+#endif
+
+#define CM_NAME_ATTRIBUTE_NAME_RETRIEVED_FROM_DEVICE 0x1
+#define CM_NAME_ATTRIBUTE_USER_ASSIGNED_NAME         0x2
+
+#define CR_SUCCESS                        0x00000000
+#define CR_DEFAULT                        0x00000001
+#define CR_OUT_OF_MEMORY                  0x00000002
+#define CR_INVALID_POINTER                0x00000003
+#define CR_INVALID_FLAG                   0x00000004
+#define CR_INVALID_DEVNODE                0x00000005
+#define CR_INVALID_DEVINST                CR_INVALID_DEVNODE
+#define CR_INVALID_RES_DES                0x00000006
+#define CR_INVALID_LOG_CONF               0x00000007
+#define CR_INVALID_ARBITRATOR             0x00000008
+#define CR_INVALID_NODELIST               0x00000009
+#define CR_DEVNODE_HAS_REQS               0x0000000A
+#define CR_DEVINST_HAS_REQS               CR_DEVNODE_HAS_REQS
+#define CR_INVALID_RESOURCEID             0x0000000B
+#define CR_DLVXD_NOT_FOUND                0x0000000C
+#define CR_NO_SUCH_DEVNODE                0x0000000D
+#define CR_NO_SUCH_DEVINST                CR_NO_SUCH_DEVNODE
+#define CR_NO_MORE_LOG_CONF               0x0000000E
+#define CR_NO_MORE_RES_DES                0x0000000F
+#define CR_ALREADY_SUCH_DEVNODE           0x00000010
+#define CR_ALREADY_SUCH_DEVINST           CR_ALREADY_SUCH_DEVNODE
+#define CR_INVALID_RANGE_LIST             0x00000011
+#define CR_INVALID_RANGE                  0x00000012
+#define CR_FAILURE                        0x00000013
+#define CR_NO_SUCH_LOGICAL_DEV            0x00000014
+#define CR_CREATE_BLOCKED                 0x00000015
+#define CR_NOT_SYSTEM_VM                  0x00000016
+#define CR_REMOVE_VETOED                  0x00000017
+#define CR_APM_VETOED                     0x00000018
+#define CR_INVALID_LOAD_TYPE              0x00000019
+#define CR_BUFFER_SMALL                   0x0000001A
+#define CR_NO_ARBITRATOR                  0x0000001B
+#define CR_NO_REGISTRY_HANDLE             0x0000001C
+#define CR_REGISTRY_ERROR                 0x0000001D
+#define CR_INVALID_DEVICE_ID              0x0000001E
+#define CR_INVALID_DATA                   0x0000001F
+#define CR_INVALID_API                    0x00000020
+#define CR_DEVLOADER_NOT_READY            0x00000021
+#define CR_NEED_RESTART                   0x00000022
+#define CR_NO_MORE_HW_PROFILES            0x00000023
+#define CR_DEVICE_NOT_THERE               0x00000024
+#define CR_NO_SUCH_VALUE                  0x00000025
+#define CR_WRONG_TYPE                     0x00000026
+#define CR_INVALID_PRIORITY               0x00000027
+#define CR_NOT_DISABLEABLE                0x00000028
+#define CR_FREE_RESOURCES                 0x00000029
+#define CR_QUERY_VETOED                   0x0000002A
+#define CR_CANT_SHARE_IRQ                 0x0000002B
+#define CR_NO_DEPENDENT                   0x0000002C
+#define CR_SAME_RESOURCES                 0x0000002D
+#define CR_NO_SUCH_REGISTRY_KEY           0x0000002E
+#define CR_INVALID_MACHINENAME            0x0000002F
+#define CR_REMOTE_COMM_FAILURE            0x00000030
+#define CR_MACHINE_UNAVAILABLE            0x00000031
+#define CR_NO_CM_SERVICES                 0x00000032
+#define CR_ACCESS_DENIED                  0x00000033
+#define CR_CALL_NOT_IMPLEMENTED           0x00000034
+#define CR_INVALID_PROPERTY               0x00000035
+#define CR_DEVICE_INTERFACE_ACTIVE        0x00000036
+#define CR_NO_SUCH_DEVICE_INTERFACE       0x00000037
+#define CR_INVALID_REFERENCE_STRING       0x00000038
+#define CR_INVALID_CONFLICT_LIST          0x00000039
+#define CR_INVALID_INDEX                  0x0000003A
+#define CR_INVALID_STRUCTURE_SIZE         0x0000003B
+#define NUM_CR_RESULTS                    0x0000003C
+
+#define CM_GLOBAL_STATE_CAN_DO_UI            0x00000001
+#define CM_GLOBAL_STATE_ON_BIG_STACK         0x00000002
+#define CM_GLOBAL_STATE_SERVICES_AVAILABLE   0x00000004
+#define CM_GLOBAL_STATE_SHUTTING_DOWN        0x00000008
+#define CM_GLOBAL_STATE_DETECTION_PENDING    0x00000010
+#if (WINVER >= _WIN32_WINNT_WIN7)
+#define CM_GLOBAL_STATE_REBOOT_REQUIRED      0x00000020
+#endif
+
+/* FIXME : These definitions don't exist in the official header
+
+#define CMP_MAGIC  0x01234567
+
+CMAPI
+CONFIGRET
+WINAPI
+CMP_Init_Detection(IN DWORD dwMagic);
+
+CMAPI
+CONFIGRET
+WINAPI
+CMP_RegisterNotification(
+  IN HANDLE hRecipient,
+  IN LPVOID lpvNotificationFilter,
+  IN DWORD dwFlags,
+  OUT PULONG pluhDevNotify);
+
+CMAPI
+CONFIGRET
+WINAPI
+CMP_Report_LogOn(
+  IN DWORD dwMagic,
+  IN DWORD dwProcessId);
+
+CMAPI
+CONFIGRET
+WINAPI
+CMP_UnregisterNotification(IN ULONG luhDevNotify);
+
+*/
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Empty_Log_Conf(
+  OUT PLOG_CONF plcLogConf,
+  IN DEVINST dnDevInst,
+  IN PRIORITY Priority,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Empty_Log_Conf_Ex(
+  OUT PLOG_CONF plcLogConf,
+  IN DEVINST dnDevInst,
+  IN PRIORITY Priority,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_IDA(
+  IN DEVINST dnDevInst,
+  IN PSTR pszID,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_ID_ExA(
+  IN DEVINST dnDevInst,
+  IN PSTR pszID,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_ID_ExW(
+  IN DEVINST dnDevInst,
+  IN PWSTR pszID,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_IDW(
+  IN DEVINST dnDevInst,
+  IN PWSTR pszID,
+  IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Add_ID CM_Add_IDW
+#define CM_Add_ID_Ex CM_Add_ID_ExW
+#else
+#define CM_Add_ID CM_Add_IDA
+#define CM_Add_ID_Ex CM_Add_ID_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Range(
+  IN DWORDLONG ullStartValue,
+  IN DWORDLONG ullEndValue,
+  IN RANGE_LIST rlh,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Res_Des(
+  OUT PRES_DES prdResDes OPTIONAL,
+  IN LOG_CONF lcLogConf,
+  IN RESOURCEID ResourceID,
+  IN PCVOID ResourceData,
+  IN ULONG ResourceLen,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Res_Des_Ex(
+  OUT PRES_DES prdResDes OPTIONAL,
+  IN LOG_CONF lcLogConf,
+  IN RESOURCEID ResourceID,
+  IN PCVOID ResourceData,
+  IN ULONG ResourceLen,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Connect_MachineA(
+  IN PCSTR UNCServerName OPTIONAL,
+  OUT PHMACHINE phMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Connect_MachineW(
+  IN PCWSTR UNCServerName OPTIONAL,
+  OUT PHMACHINE phMachine);
+
+#ifdef UNICODE
+#define CM_Connect_Machine CM_Connect_MachineW
+#else
+#define CM_Connect_Machine CM_Connect_MachineA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNodeA(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINSTID_A pDeviceID,
+  IN DEVINST dnParent,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNodeW(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINSTID_W pDeviceID,
+  IN DEVINST dnParent,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNode_ExA(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINSTID_A pDeviceID,
+  IN DEVINST dnParent,
+  IN ULONG ulFlags,
+  IN HANDLE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNode_ExW(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINSTID_W pDeviceID,
+  IN DEVINST dnParent,
+  IN ULONG ulFlags,
+  IN HANDLE hMachine);
+
+#define CM_Create_DevInstW CM_Create_DevNodeW
+#define CM_Create_DevInstA CM_Create_DevNodeA
+#define CM_Create_DevInst_ExW CM_Create_DevNode_ExW
+#define CM_Create_DevInst_ExA CM_Create_DevNode_ExA
+#ifdef UNICODE
+#define CM_Create_DevNode CM_Create_DevNodeW
+#define CM_Create_DevInst CM_Create_DevNodeW
+#define CM_Create_DevNode_Ex CM_Create_DevNode_ExW
+#define CM_Create_DevInst_Ex CM_Create_DevInst_ExW
+#else
+#define CM_Create_DevNode CM_Create_DevNodeA
+#define CM_Create_DevInst CM_Create_DevNodeA
+#define CM_Create_DevNode_Ex CM_Create_DevNode_ExA
+#define CM_Create_DevInst_Ex CM_Create_DevNode_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_Range_List(
+  OUT PRANGE_LIST prlh,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Class_Key(
+  IN LPGUID ClassGuid,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Class_Key_Ex(
+  IN LPGUID ClassGuid,
+  IN ULONG ulFlags,
+  IN HANDLE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_DevNode_Key(
+  IN DEVNODE dnDevNode,
+  IN ULONG ulHardwareProfile,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_DevNode_Key_Ex(
+  IN DEVNODE dnDevNode,
+  IN ULONG ulHardwareProfile,
+  IN ULONG ulFlags,
+  IN HANDLE hMachine);
+
+#define CM_Delete_DevInst_Key CM_Delete_DevNode_Key
+#define CM_Delete_DevInst_Key_Ex CM_Delete_DevNode_Key_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Range(
+  IN DWORDLONG ullStartValue,
+  IN DWORDLONG ullEndValue,
+  IN RANGE_LIST rlh,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Detect_Resource_Conflict(
+  IN DEVINST dnDevInst,
+  IN RESOURCEID ResourceID,
+  IN PCVOID ResourceData,
+  IN ULONG ResourceLen,
+  OUT PBOOL pbConflictDetected,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Detect_Resource_Conflict_Ex(
+  IN DEVINST dnDevInst,
+  IN RESOURCEID ResourceID,
+  IN PCVOID ResourceData,
+  IN ULONG ResourceLen,
+  OUT PBOOL pbConflictDetected,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Disable_DevNode(
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Disable_DevNode_Ex(
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#define CM_Disable_DevInst CM_Disable_DevNode
+#define CM_Disable_DevInst_Ex CM_Disable_DevNode_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Disconnect_Machine(
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Dup_Range_List(
+  IN RANGE_LIST rlhOld,
+  IN RANGE_LIST rlhNew,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enable_DevNode(
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enable_DevNode_Ex(
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#define CM_Enable_DevInst CM_Enable_DevNode
+#define CM_Enable_DevInst_Ex CM_Enable_DevNode_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes(
+  IN ULONG ulClassIndex,
+  OUT LPGUID ClassGuid,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes_Ex(
+  IN ULONG ulClassIndex,
+  OUT LPGUID ClassGuid,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_EnumeratorsA(
+  IN ULONG ulEnumIndex,
+  OUT PCHAR Buffer,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Enumerators_ExA(
+  IN ULONG ulEnumIndex,
+  OUT PCHAR Buffer,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Enumerators_ExW(
+  IN ULONG ulEnumIndex,
+  OUT PWCHAR Buffer,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_EnumeratorsW(
+  IN ULONG ulEnumIndex,
+  OUT PWCHAR Buffer,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsW
+#define CM_Enumerate_Enumerators_Ex CM_Enumerate_Enumerators_ExW
+#else
+#define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsA
+#define CM_Enumerate_Enumerators_Ex CM_Enumerate_Enumerators_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Find_Range(
+  OUT PDWORDLONG pullStart,
+  IN DWORDLONG ullStart,
+  IN ULONG ulLength,
+  IN DWORDLONG ullAlignment,
+  IN DWORDLONG ullEnd,
+  IN RANGE_LIST rlh,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_First_Range(
+  IN RANGE_LIST rlh,
+  OUT PDWORDLONG pullStart,
+  OUT PDWORDLONG pullEnd,
+  OUT PRANGE_ELEMENT preElement,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf(
+  IN LOG_CONF lcLogConfToBeFreed,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf_Ex(
+  IN LOG_CONF lcLogConfToBeFreed,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf_Handle(
+  IN LOG_CONF lcLogConf);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Range_List(
+  IN RANGE_LIST rlh,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Res_Des(
+  OUT PRES_DES prdResDes,
+  IN RES_DES rdResDes,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Res_Des_Ex(
+  OUT PRES_DES prdResDes,
+  IN RES_DES rdResDes,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Res_Des_Handle(
+  IN RES_DES rdResDes);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Resource_Conflict_Handle(
+  IN CONFLICT_LIST clConflictList);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Child(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Child_Ex(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_NameA(
+  IN LPGUID ClassGuid,
+  OUT PCHAR Buffer,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_NameW(
+  IN LPGUID ClassGuid,
+  OUT PWCHAR Buffer,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Name_ExA(
+  IN LPGUID ClassGuid,
+  OUT PCHAR Buffer,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Name_ExW(
+  IN LPGUID ClassGuid,
+  OUT PWCHAR Buffer,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Get_Class_Name CM_Get_Class_NameW
+#define CM_Get_Class_Name_Ex CM_Get_Class_Name_ExW
+#else
+#define CM_Get_Class_Name CM_Get_Class_NameA
+#define CM_Get_Class_Name_Ex CM_Get_Class_Name_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_NameA(
+  IN LPGUID ClassGuid,
+  OUT LPSTR pszKeyName,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_NameW(
+  IN LPGUID ClassGuid,
+  OUT LPWSTR pszKeyName,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_Name_ExA(
+  IN LPGUID ClassGuid,
+  OUT LPSTR pszKeyName,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_Name_ExW(
+  IN LPGUID ClassGuid,
+  OUT LPWSTR pszKeyName,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Get_Class_Key_Name CM_Get_Class_Key_NameW
+#define CM_Get_Class_Key_Name_Ex CM_Get_Class_Key_Name_ExW
+#else
+#define CM_Get_Class_Key_Name CM_Get_Class_Key_NameA
+#define CM_Get_Class_Key_Name_Ex CM_Get_Class_Key_Name_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Depth(
+  OUT PULONG pulDepth,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Depth_Ex(
+  OUT PULONG pulDepth,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_IDA(
+  IN DEVINST dnDevInst,
+  OUT PCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ExA(
+  IN DEVINST dnDevInst,
+  OUT PCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ExW(
+  IN DEVINST dnDevInst,
+  OUT PWCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_IDW(
+  IN DEVINST dnDevInst,
+  OUT PWCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Get_Device_ID CM_Get_Device_IDW
+#define CM_Get_Device_ID_Ex CM_Get_Device_ID_ExW
+#else
+#define CM_Get_Device_ID CM_Get_Device_IDA
+#define CM_Get_Device_ID_Ex CM_Get_Device_ID_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ListA(
+  IN PCSTR pszFilter OPTIONAL,
+  OUT PCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_ExA(
+  IN PCSTR pszFilter OPTIONAL,
+  OUT PCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_ExW(
+  IN PCWSTR pszFilter OPTIONAL,
+  OUT PWCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ListW(
+  IN PCWSTR pszFilter OPTIONAL,
+  OUT PWCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Get_Device_ID_List CM_Get_Device_ID_ListW
+#define CM_Get_Device_ID_List_Ex CM_Get_Device_ID_List_ExW
+#else
+#define CM_Get_Device_ID_List CM_Get_Device_ID_ListA
+#define CM_Get_Device_ID_List_Ex CM_Get_Device_ID_List_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_SizeA(
+  OUT PULONG pulLen,
+  IN PCSTR pszFilter OPTIONAL,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_Size_ExA(
+  OUT PULONG pulLen,
+  IN PCSTR pszFilter OPTIONAL,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_Size_ExW(
+  OUT PULONG pulLen,
+  IN PCWSTR pszFilter OPTIONAL,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_SizeW(
+  OUT PULONG pulLen,
+  IN PCWSTR pszFilter OPTIONAL,
+  IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeW
+#define CM_Get_Device_ID_List_Size_Ex CM_Get_Device_ID_List_Size_ExW
+#else
+#define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeA
+#define CM_Get_Device_ID_List_Size_Ex CM_Get_Device_ID_List_Size_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_Size(
+  OUT PULONG pulLen,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_Size_Ex(
+  OUT PULONG pulLen,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_PropertyA(
+  IN DEVINST dnDevInst,
+  IN ULONG ulProperty,
+  OUT PULONG pulRegDataType OPTIONAL,
+  OUT PVOID Buffer OPTIONAL,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_PropertyW(
+  IN DEVINST dnDevInst,
+  IN ULONG ulProperty,
+  OUT PULONG pulRegDataType OPTIONAL,
+  OUT PVOID Buffer OPTIONAL,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_Property_ExA(
+  IN DEVINST dnDevInst,
+  IN ULONG ulProperty,
+  OUT PULONG pulRegDataType OPTIONAL,
+  OUT PVOID Buffer OPTIONAL,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_Property_ExW(
+  IN DEVINST dnDevInst,
+  IN ULONG ulProperty,
+  OUT PULONG pulRegDataType OPTIONAL,
+  OUT PVOID Buffer OPTIONAL,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#define CM_Get_DevInst_Registry_PropertyW CM_Get_DevNode_Registry_PropertyW
+#define CM_Get_DevInst_Registry_PropertyA CM_Get_DevNode_Registry_PropertyA
+#define CM_Get_DevInst_Registry_Property_ExW CM_Get_DevNode_Registry_Property_ExW
+#define CM_Get_DevInst_Registry_Property_ExA CM_Get_DevNode_Registry_Property_ExA
+
+#ifdef UNICODE
+#define CM_Get_DevInst_Registry_Property CM_Get_DevNode_Registry_PropertyW
+#define CM_Get_DevInst_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExW
+#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyW
+#define CM_Get_DevNode_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExW
+#else
+#define CM_Get_DevInst_Registry_Property CM_Get_DevNode_Registry_PropertyA
+#define CM_Get_DevInst_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExA
+#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyA
+#define CM_Get_DevNode_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExA
+#endif /* UNICODE */
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_PropertyA(
+  IN DEVINST dnDevInst,
+  IN PCSTR pszCustomPropertyName,
+  OUT PULONG pulRegDataType OPTIONAL,
+  OUT PVOID Buffer OPTIONAL,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_PropertyW(
+  IN DEVINST dnDevInst,
+  IN PCWSTR pszCustomPropertyName,
+  OUT PULONG pulRegDataType OPTIONAL,
+  OUT PVOID Buffer OPTIONAL,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_Property_ExA(
+  IN DEVINST dnDevInst,
+  IN PCSTR pszCustomPropertyName,
+  OUT PULONG pulRegDataType OPTIONAL,
+  OUT PVOID Buffer OPTIONAL,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_Property_ExW(
+  IN DEVINST dnDevInst,
+  IN PCWSTR pszCustomPropertyName,
+  OUT PULONG pulRegDataType OPTIONAL,
+  OUT PVOID Buffer OPTIONAL,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#define CM_Get_DevInst_Custom_PropertyW     CM_Get_DevNode_Custom_PropertyW
+#define CM_Get_DevInst_Custom_PropertyA     CM_Get_DevNode_Custom_PropertyA
+#define CM_Get_DevInst_Custom_Property_ExW  CM_Get_DevNode_Custom_Property_ExW
+#define CM_Get_DevInst_Custom_Property_ExA  CM_Get_DevNode_Custom_Property_ExA
+#ifdef UNICODE
+#define CM_Get_DevInst_Custom_Property      CM_Get_DevNode_Custom_PropertyW
+#define CM_Get_DevInst_Custom_Property_Ex   CM_Get_DevNode_Custom_Property_ExW
+#define CM_Get_DevNode_Custom_Property      CM_Get_DevNode_Custom_PropertyW
+#define CM_Get_DevNode_Custom_Property_Ex   CM_Get_DevNode_Custom_Property_ExW
+#else
+#define CM_Get_DevInst_Custom_Property      CM_Get_DevNode_Custom_PropertyA
+#define CM_Get_DevInst_Custom_Property_Ex   CM_Get_DevNode_Custom_Property_ExA
+#define CM_Get_DevNode_Custom_Property      CM_Get_DevNode_Custom_PropertyA
+#define CM_Get_DevNode_Custom_Property_Ex   CM_Get_DevNode_Custom_Property_ExA
+#endif
+
+#endif /* (WINVER >= _WIN32_WINNT_WINXP) */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Status(
+  OUT PULONG pulStatus,
+  OUT PULONG pulProblemNumber,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Status_Ex(
+  OUT PULONG pulStatus,
+  OUT PULONG pulProblemNumber,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#define CM_Get_DevInst_Status CM_Get_DevNode_Status
+#define CM_Get_DevInst_Status_Ex CM_Get_DevNode_Status_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_First_Log_Conf(
+  OUT PLOG_CONF plcLogConf OPTIONAL,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_First_Log_Conf_Ex(
+  OUT PLOG_CONF plcLogConf OPTIONAL,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Global_State(
+  OUT PULONG pulState,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Global_State_Ex(
+  OUT PULONG pulState,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_InfoA(
+  IN ULONG ulIndex,
+  OUT PHWPROFILEINFO_A pHWProfileInfo,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_Info_ExA(
+  IN ULONG ulIndex,
+  OUT PHWPROFILEINFO_A pHWProfileInfo,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_InfoW(
+  IN ULONG ulIndex,
+  OUT PHWPROFILEINFO_W pHWProfileInfo,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_Info_ExW(
+  IN ULONG ulIndex,
+  OUT PHWPROFILEINFO_W pHWProfileInfo,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Get_Hardware_Profile_Info      CM_Get_Hardware_Profile_InfoW
+#define CM_Get_Hardware_Profile_Info_Ex   CM_Get_Hardware_Profile_Info_ExW
+#else
+#define CM_Get_Hardware_Profile_Info      CM_Get_Hardware_Profile_InfoA
+#define CM_Get_Hardware_Profile_Info_Ex   CM_Get_Hardware_Profile_Info_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_FlagsA(
+  IN DEVINSTID_A szDevInstName,
+  IN ULONG ulHardwareProfile,
+  OUT PULONG pulValue,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_FlagsW(
+  IN DEVINSTID_W szDevInstName,
+  IN ULONG ulHardwareProfile,
+  OUT PULONG pulValue,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_Flags_ExA(
+  IN DEVINSTID_A szDevInstName,
+  IN ULONG ulHardwareProfile,
+  OUT PULONG pulValue,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_Flags_ExW(
+  IN DEVINSTID_W szDevInstName,
+  IN ULONG ulHardwareProfile,
+  OUT PULONG pulValue,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Get_HW_Prof_Flags CM_Get_HW_Prof_FlagsW
+#define CM_Get_HW_Prof_Flags_Ex CM_Get_HW_Prof_Flags_ExW
+#else
+#define CM_Get_HW_Prof_Flags CM_Get_HW_Prof_FlagsA
+#define CM_Get_HW_Prof_Flags_Ex CM_Get_HW_Prof_Flags_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_AliasA(
+  IN LPCSTR pszDeviceInterface,
+  IN LPGUID AliasInterfaceGuid,
+  OUT LPSTR pszAliasDeviceInterface,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_AliasW(
+  IN LPCWSTR pszDeviceInterface,
+  IN LPGUID AliasInterfaceGuid,
+  OUT LPWSTR pszAliasDeviceInterface,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_Alias_ExA(
+  IN LPCSTR pszDeviceInterface,
+  IN LPGUID AliasInterfaceGuid,
+  OUT LPSTR pszAliasDeviceInterface,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_Alias_ExW(
+  IN LPCWSTR pszDeviceInterface,
+  IN LPGUID AliasInterfaceGuid,
+  OUT LPWSTR pszAliasDeviceInterface,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Get_Device_Interface_Alias     CM_Get_Device_Interface_AliasW
+#define CM_Get_Device_Interface_Alias_Ex  CM_Get_Device_Interface_Alias_ExW
+#else
+#define CM_Get_Device_Interface_Alias     CM_Get_Device_Interface_AliasA
+#define CM_Get_Device_Interface_Alias_Ex  CM_Get_Device_Interface_Alias_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_ListA(
+  IN LPGUID InterfaceClassGuid,
+  IN DEVINSTID_A pDeviceID OPTIONAL,
+  OUT PCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_ListW(
+  IN LPGUID InterfaceClassGuid,
+  IN DEVINSTID_W pDeviceID OPTIONAL,
+  OUT PWCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_ExA(
+  IN LPGUID InterfaceClassGuid,
+  IN DEVINSTID_A pDeviceID OPTIONAL,
+  OUT PCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_ExW(
+  IN LPGUID InterfaceClassGuid,
+  IN DEVINSTID_W pDeviceID OPTIONAL,
+  OUT PWCHAR Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Get_Device_Interface_List     CM_Get_Device_Interface_ListW
+#define CM_Get_Device_Interface_List_Ex  CM_Get_Device_Interface_List_ExW
+#else
+#define CM_Get_Device_Interface_List     CM_Get_Device_Interface_ListA
+#define CM_Get_Device_Interface_List_Ex  CM_Get_Device_Interface_List_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_SizeA(
+  OUT PULONG pulLen,
+  IN LPGUID InterfaceClassGuid,
+  IN DEVINSTID_A pDeviceID OPTIONAL,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_SizeW(
+  OUT PULONG pulLen,
+  IN LPGUID InterfaceClassGuid,
+  IN DEVINSTID_W pDeviceID OPTIONAL,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_Size_ExA(
+  OUT PULONG pulLen,
+  IN LPGUID InterfaceClassGuid,
+  IN DEVINSTID_A pDeviceID OPTIONAL,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_Size_ExW(
+  OUT PULONG pulLen,
+  IN LPGUID InterfaceClassGuid,
+  IN DEVINSTID_W pDeviceID OPTIONAL,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Get_Device_Interface_List_Size     CM_Get_Device_Interface_List_SizeW
+#define CM_Get_Device_Interface_List_Size_Ex  CM_Get_Device_Interface_List_Size_ExW
+#else
+#define CM_Get_Device_Interface_List_Size     CM_Get_Device_Interface_List_SizeA
+#define CM_Get_Device_Interface_List_Size_Ex  CM_Get_Device_Interface_List_Size_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Log_Conf_Priority(
+  IN LOG_CONF lcLogConf,
+  OUT PPRIORITY pPriority,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Log_Conf_Priority_Ex(
+  IN LOG_CONF lcLogConf,
+  OUT PPRIORITY pPriority,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Log_Conf(
+  OUT PLOG_CONF plcLogConf OPTIONAL,
+  IN LOG_CONF lcLogConf,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Log_Conf_Ex(
+  OUT PLOG_CONF plcLogConf OPTIONAL,
+  IN LOG_CONF lcLogConf,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Res_Des(
+  OUT PRES_DES prdResDes,
+  IN RES_DES rdResDes,
+  IN RESOURCEID ForResource,
+  OUT PRESOURCEID pResourceID,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Res_Des_Ex(
+  OUT PRES_DES prdResDes,
+  IN RES_DES rdResDes,
+  IN RESOURCEID ForResource,
+  OUT PRESOURCEID pResourceID,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Parent(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Parent_Ex(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data(
+  IN RES_DES rdResDes,
+  OUT PVOID Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Ex(
+  IN RES_DES rdResDes,
+  OUT PVOID Buffer,
+  IN ULONG BufferLen,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Size(
+  OUT PULONG pulSize,
+  IN RES_DES rdResDes,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Size_Ex(
+  OUT PULONG pulSize,
+  IN RES_DES rdResDes,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_Count(
+  IN CONFLICT_LIST clConflictList,
+  OUT PULONG pulCount);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_DetailsA(
+  IN CONFLICT_LIST clConflictList,
+  IN ULONG ulIndex,
+  IN OUT PCONFLICT_DETAILS_A pConflictDetails);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_DetailsW(
+  IN CONFLICT_LIST clConflictList,
+  IN ULONG ulIndex,
+  IN OUT PCONFLICT_DETAILS_W pConflictDetails);
+
+#ifdef UNICODE
+#define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsW
+#else
+#define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Registry_PropertyW(
+  IN LPGUID ClassGuid,
+  IN ULONG ulProperty,
+  OUT PULONG pulRegDataType OPTIONAL,
+  OUT PVOID Buffer OPTIONAL,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_Class_Registry_PropertyW(
+  IN LPGUID ClassGuid,
+  IN ULONG ulProperty,
+  IN PCVOID Buffer OPTIONAL,
+  IN ULONG ulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Registry_PropertyA(
+  IN LPGUID ClassGuid,
+  IN ULONG ulProperty,
+  OUT PULONG pulRegDataType OPTIONAL,
+  OUT PVOID Buffer OPTIONAL,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_Class_Registry_PropertyA(
+  IN LPGUID ClassGuid,
+  IN ULONG ulProperty,
+  IN PCVOID Buffer OPTIONAL,
+  IN  ULONG ulLength,
+  IN  ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Get_Class_Registry_Property CM_Get_Class_Registry_PropertyW
+#define CM_Set_Class_Registry_Property CM_Set_Class_Registry_PropertyW
+#else
+#define CM_Get_Class_Registry_Property CM_Get_Class_Registry_PropertyA
+#define CM_Set_Class_Registry_Property CM_Set_Class_Registry_PropertyA
+#endif // UNICODE
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Sibling(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINST DevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Sibling_Ex(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINST DevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+WORD
+WINAPI
+CM_Get_Version(VOID);
+
+CMAPI
+WORD
+WINAPI
+CM_Get_Version_Ex(
+  IN HMACHINE hMachine);
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+
+CMAPI
+BOOL
+WINAPI
+CM_Is_Version_Available(
+  IN WORD wVersion);
+
+CMAPI
+BOOL
+WINAPI
+CM_Is_Version_Available_Ex(
+  IN WORD wVersion,
+  IN HMACHINE hMachine OPTIONAL);
+
+#endif /* (WINVER >= _WIN32_WINNT_WINXP) */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Intersect_Range_List(
+  IN RANGE_LIST rlhOld1,
+  IN RANGE_LIST rlhOld2,
+  IN RANGE_LIST rlhNew,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Invert_Range_List(
+  IN RANGE_LIST rlhOld,
+  IN RANGE_LIST rlhNew,
+  IN DWORDLONG ullMaxValue,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Is_Dock_Station_Present(
+  OUT PBOOL pbPresent);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Is_Dock_Station_Present_Ex(
+  OUT PBOOL pbPresent,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNodeA(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINSTID_A pDeviceID OPTIONAL,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNode_ExA(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINSTID_A pDeviceID OPTIONAL,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNode_ExW(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINSTID_W pDeviceID OPTIONAL,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNodeW(
+  OUT PDEVINST pdnDevInst,
+  IN DEVINSTID_W pDeviceID OPTIONAL,
+  IN ULONG ulFlags);
+
+#define CM_Locate_DevInstA CM_Locate_DevNodeA
+#define CM_Locate_DevInstW CM_Locate_DevNodeW
+#define CM_Locate_DevInst_ExA CM_Locate_DevNode_ExA
+#define CM_Locate_DevInst_ExW CM_Locate_DevNode_ExW
+
+#ifdef UNICODE
+#define CM_Locate_DevNode CM_Locate_DevNodeW
+#define CM_Locate_DevInst CM_Locate_DevNodeW
+#define CM_Locate_DevNode_Ex CM_Locate_DevNode_ExW
+#define CM_Locate_DevInst_Ex CM_Locate_DevNode_ExW
+#else
+#define CM_Locate_DevNode CM_Locate_DevNodeA
+#define CM_Locate_DevInst CM_Locate_DevNodeA
+#define CM_Locate_DevNode_Ex CM_Locate_DevNode_ExA
+#define CM_Locate_DevInst_Ex CM_Locate_DevNode_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Merge_Range_List(
+  IN RANGE_LIST rlhOld1,
+  IN RANGE_LIST rlhOld2,
+  IN RANGE_LIST rlhNew,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Modify_Res_Des(
+  OUT PRES_DES prdResDes,
+  IN RES_DES rdResDes,
+  IN RESOURCEID ResourceID,
+  IN PCVOID ResourceData,
+  IN ULONG ResourceLen,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Modify_Res_Des_Ex(
+  OUT PRES_DES prdResDes,
+  IN RES_DES rdResDes,
+  IN RESOURCEID ResourceID,
+  IN PCVOID ResourceData,
+  IN ULONG ResourceLen,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Move_DevNode(
+  IN DEVINST dnFromDevInst,
+  IN DEVINST dnToDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Move_DevNode_Ex(
+  IN DEVINST dnFromDevInst,
+  IN DEVINST dnToDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#define CM_Move_DevInst                CM_Move_DevNode
+#define CM_Move_DevInst_Ex             CM_Move_DevNode_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Next_Range(
+  IN OUT PRANGE_ELEMENT preElement,
+  OUT PDWORDLONG pullStart,
+  OUT PDWORDLONG pullEnd,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Class_KeyA(
+  IN LPGUID ClassGuid OPTIONAL,
+  IN LPCSTR pszClassName OPTIONAL,
+  IN REGSAM samDesired,
+  IN REGDISPOSITION Disposition,
+  OUT PHKEY phkClass,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Class_KeyW(
+  IN LPGUID ClassGuid OPTIONAL,
+  IN LPCWSTR pszClassName OPTIONAL,
+  IN REGSAM samDesired,
+  IN REGDISPOSITION Disposition,
+  OUT PHKEY phkClass,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Class_Key_ExA(
+  IN LPGUID pszClassGuid OPTIONAL,
+  IN LPCSTR pszClassName OPTIONAL,
+  IN REGSAM samDesired,
+  IN REGDISPOSITION Disposition,
+  OUT PHKEY phkClass,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Class_Key_ExW(
+  IN LPGUID pszClassGuid OPTIONAL,
+  IN LPCWSTR pszClassName OPTIONAL,
+  IN REGSAM samDesired,
+  IN REGDISPOSITION Disposition,
+  OUT PHKEY phkClass,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Open_Class_Key CM_Open_Class_KeyW
+#define CM_Open_Class_Key_Ex CM_Open_Class_Key_ExW
+#else
+#define CM_Open_Class_Key CM_Open_Class_KeyA
+#define CM_Open_Class_Key_Ex CM_Open_Class_Key_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_DevNode_Key(
+  IN DEVINST dnDevNode,
+  IN REGSAM samDesired,
+  IN ULONG ulHardwareProfile,
+  IN REGDISPOSITION Disposition,
+  OUT PHKEY phkDevice,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_DevNode_Key_Ex(
+  IN DEVINST dnDevNode,
+  IN REGSAM samDesired,
+  IN ULONG ulHardwareProfile,
+  IN REGDISPOSITION Disposition,
+  OUT PHKEY phkDevice,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#define CM_Open_DevInst_Key CM_Open_DevNode_Key
+#define CM_Open_DevInst_Key_Ex CM_Open_DevNode_Key_Ex
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Device_Interface_KeyA(
+  IN LPCSTR pszDeviceInterface,
+  IN REGSAM samDesired,
+  IN REGDISPOSITION Disposition,
+  OUT PHKEY phkDeviceInterface,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Device_Interface_KeyW(
+  IN LPCWSTR pszDeviceInterface,
+  IN REGSAM samDesired,
+  IN REGDISPOSITION Disposition,
+  OUT PHKEY phkDeviceInterface,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Device_Interface_Key_ExA(
+  IN LPCSTR pszDeviceInterface,
+  IN REGSAM samDesired,
+  IN REGDISPOSITION Disposition,
+  OUT PHKEY phkDeviceInterface,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Device_Interface_Key_ExW(
+  IN LPCWSTR pszDeviceInterface,
+  IN REGSAM samDesired,
+  IN REGDISPOSITION Disposition,
+  OUT PHKEY phkDeviceInterface,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Open_Device_Interface_Key    CM_Open_Device_Interface_KeyW
+#define CM_Open_Device_Interface_Key_Ex CM_Open_Device_Interface_Key_ExW
+#else
+#define CM_Open_Device_Interface_Key    CM_Open_Device_Interface_KeyA
+#define CM_Open_Device_Interface_Key_Ex CM_Open_Device_Interface_Key_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Device_Interface_KeyA(
+  IN LPCSTR pszDeviceInterface,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Device_Interface_KeyW(
+  IN LPCWSTR pszDeviceInterface,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Device_Interface_Key_ExA(
+  IN LPCSTR pszDeviceInterface,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Device_Interface_Key_ExW(
+  IN LPCWSTR pszDeviceInterface,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Delete_Device_Interface_Key    CM_Delete_Device_Interface_KeyW
+#define CM_Delete_Device_Interface_Key_Ex CM_Delete_Device_Interface_Key_ExW
+#else
+#define CM_Delete_Device_Interface_Key    CM_Delete_Device_Interface_KeyA
+#define CM_Delete_Device_Interface_Key_Ex CM_Delete_Device_Interface_Key_ExA
+#endif
+
+#endif /* (WINVER >= _WIN32_WINNT_VISTA) */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Data(
+  OUT PVOID pData,
+  IN ULONG DataLen,
+  IN DEVINST dnDevInst,
+  IN RESOURCEID ResourceID,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Data_Ex(
+  OUT PVOID pData,
+  IN ULONG DataLen,
+  IN DEVINST dnDevInst,
+  IN RESOURCEID ResourceID,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Size(
+  OUT PULONG pulSize,
+  IN DEVINST dnDevInst,
+  IN RESOURCEID ResourceID,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Size_Ex(
+  OUT PULONG pulSize,
+  IN DEVINST dnDevInst,
+  IN RESOURCEID ResourceID,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Remove_SubTree(
+  IN DEVINST dnAncestor,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Remove_SubTree_Ex(
+  IN DEVINST dnAncestor,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTreeA(
+  IN DEVINST dnAncestor,
+  OUT PPNP_VETO_TYPE pVetoType,
+  OUT LPSTR pszVetoName,
+  IN ULONG ulNameLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTreeW(
+  IN DEVINST dnAncestor,
+  OUT PPNP_VETO_TYPE pVetoType,
+  OUT LPWSTR pszVetoName,
+  IN ULONG ulNameLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTree_ExA(
+  IN DEVINST dnAncestor,
+  OUT PPNP_VETO_TYPE pVetoType,
+  OUT LPSTR pszVetoName,
+  IN ULONG ulNameLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTree_ExW(
+  IN DEVINST dnAncestor,
+  OUT PPNP_VETO_TYPE pVetoType,
+  OUT LPWSTR pszVetoName,
+  IN ULONG ulNameLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Query_And_Remove_SubTree     CM_Query_And_Remove_SubTreeW
+#define CM_Query_And_Remove_SubTree_Ex  CM_Query_And_Remove_SubTree_ExW
+#else
+#define CM_Query_And_Remove_SubTree     CM_Query_And_Remove_SubTreeA
+#define CM_Query_And_Remove_SubTree_Ex  CM_Query_And_Remove_SubTree_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Resource_Conflict_List(
+  OUT PCONFLICT_LIST pclConflictList,
+  IN DEVINST dnDevInst,
+  IN RESOURCEID ResourceID,
+  IN PCVOID ResourceData,
+  IN ULONG ResourceLen,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Reenumerate_DevNode(
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Reenumerate_DevNode_Ex(
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#define CM_Reenumerate_DevInst CM_Reenumerate_DevNode
+#define CM_Reenumerate_DevInst_Ex CM_Reenumerate_DevNode_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_InterfaceA(
+  IN DEVINST dnDevInst,
+  IN LPGUID InterfaceClassGuid,
+  IN LPCSTR pszReference OPTIONAL,
+  OUT LPSTR pszDeviceInterface,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_InterfaceW(
+  IN DEVINST dnDevInst,
+  IN LPGUID InterfaceClassGuid,
+  IN LPCWSTR pszReference OPTIONAL,
+  OUT LPWSTR pszDeviceInterface,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_Interface_ExA(
+  IN DEVINST dnDevInst,
+  IN LPGUID InterfaceClassGuid,
+  IN LPCSTR pszReference OPTIONAL,
+  OUT LPSTR pszDeviceInterface,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_Interface_ExW(
+  IN DEVINST dnDevInst,
+  IN LPGUID InterfaceClassGuid,
+  IN LPCWSTR pszReference OPTIONAL,
+  OUT LPWSTR pszDeviceInterface,
+  IN OUT PULONG pulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Register_Device_Interface    CM_Register_Device_InterfaceW
+#define CM_Register_Device_Interface_Ex CM_Register_Device_Interface_ExW
+#else
+#define CM_Register_Device_Interface    CM_Register_Device_InterfaceA
+#define CM_Register_Device_Interface_Ex CM_Register_Device_Interface_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_EjectA(
+  IN DEVINST dnDevInst,
+  OUT PPNP_VETO_TYPE pVetoType,
+  OUT LPSTR pszVetoName,
+  IN ULONG ulNameLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_Eject_ExW(
+  IN DEVINST dnDevInst,
+  OUT PPNP_VETO_TYPE pVetoType,
+  OUT LPWSTR pszVetoName,
+  IN ULONG ulNameLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_Eject_ExA(
+  IN DEVINST dnDevInst,
+  OUT PPNP_VETO_TYPE pVetoType,
+  OUT LPSTR pszVetoName,
+  IN ULONG ulNameLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_EjectW(
+  IN DEVINST dnDevInst,
+  OUT PPNP_VETO_TYPE pVetoType,
+  OUT LPWSTR pszVetoName,
+  IN ULONG ulNameLength,
+  IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Request_Device_Eject CM_Request_Device_EjectW
+#define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExW
+#else
+#define CM_Request_Device_Eject CM_Request_Device_EjectA
+#define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Eject_PC(VOID);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Eject_PC_Ex(
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Run_Detection(
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Run_Detection_Ex(
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+
+CONFIGRET
+CM_Apply_PowerScheme(VOID);
+
+CONFIGRET
+CM_Write_UserPowerKey(
+  IN CONST GUID *SchemeGuid OPTIONAL,
+  IN CONST GUID *SubGroupOfPowerSettingsGuid OPTIONAL,
+  IN CONST GUID *PowerSettingGuid OPTIONAL,
+  IN ULONG AccessFlags,
+  IN ULONG Type,
+  IN UCHAR *Buffer,
+  IN DWORD BufferSize,
+  OUT PDWORD Error);
+
+CONFIGRET
+CM_Set_ActiveScheme(
+  IN CONST GUID *SchemeGuid,
+  OUT PDWORD Error);
+
+CONFIGRET
+CM_Restore_DefaultPowerScheme(
+  IN CONST GUID *SchemeGuid,
+  OUT PDWORD Error);
+
+CONFIGRET
+CM_RestoreAll_DefaultPowerSchemes(
+  OUT PDWORD Error);
+
+CONFIGRET
+CM_Duplicate_PowerScheme(
+  IN CONST GUID *SourceSchemeGuid,
+  IN GUID **DestinationSchemeGuid,
+  OUT PDWORD Error);
+
+CONFIGRET
+CM_Delete_PowerScheme(
+  IN CONST GUID *SchemeGuid,
+  OUT PDWORD Error);
+
+CONFIGRET
+CM_Import_PowerScheme(
+  IN LPCWSTR ImportFileNamePath,
+  IN OUT GUID **DestinationSchemeGuid,
+  OUT PDWORD Error);
+
+#endif /* (WINVER >= _WIN32_WINNT_VISTA) */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Problem(
+  IN DEVINST dnDevInst,
+  IN ULONG ulProblem,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Problem_Ex(
+  IN DEVINST dnDevInst,
+  IN ULONG ulProblem,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#define CM_Set_DevInst_Problem CM_Set_DevNode_Problem
+#define CM_Set_DevInst_Problem_Ex CM_Set_DevNode_Problem_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Unregister_Device_InterfaceA(
+  IN LPCSTR pszDeviceInterface,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Unregister_Device_InterfaceW(
+  IN LPCWSTR pszDeviceInterface,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Unregister_Device_Interface_ExA(
+  IN LPCSTR pszDeviceInterface,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Unregister_Device_Interface_ExW(
+  IN LPCWSTR pszDeviceInterface,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Unregister_Device_Interface    CM_Unregister_Device_InterfaceW
+#define CM_Unregister_Device_Interface_Ex CM_Unregister_Device_Interface_ExW
+#else
+#define CM_Unregister_Device_Interface    CM_Unregister_Device_InterfaceA
+#define CM_Unregister_Device_Interface_Ex CM_Unregister_Device_Interface_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_Driver(
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_Driver_Ex(
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Remove_SubTree(
+  IN DEVINST dnAncestor,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Remove_SubTree_Ex(
+  IN DEVINST dnAncestor,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_PropertyA(
+  IN DEVINST dnDevInst,
+  IN ULONG ulProperty,
+  IN PCVOID Buffer OPTIONAL,
+  IN ULONG ulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_PropertyW(
+  IN DEVINST dnDevInst,
+  IN ULONG ulProperty,
+  IN PCVOID Buffer OPTIONAL,
+  IN ULONG ulLength,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_Property_ExA(
+  IN DEVINST dnDevInst,
+  IN ULONG ulProperty,
+  IN PCVOID Buffer OPTIONAL,
+  IN ULONG ulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_Property_ExW(
+  IN DEVINST dnDevInst,
+  IN ULONG ulProperty,
+  IN PCVOID Buffer OPTIONAL,
+  IN ULONG ulLength,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#define CM_Set_DevInst_Registry_PropertyW CM_Set_DevNode_Registry_PropertyW
+#define CM_Set_DevInst_Registry_PropertyA CM_Set_DevNode_Registry_PropertyA
+#define CM_Set_DevInst_Registry_Property_ExW CM_Set_DevNode_Registry_Property_ExW
+#define CM_Set_DevInst_Registry_Property_ExA CM_Set_DevNode_Registry_Property_ExA
+
+#ifdef UNICODE
+#define CM_Set_DevInst_Registry_Property CM_Set_DevNode_Registry_PropertyW
+#define CM_Set_DevInst_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExW
+#define CM_Set_DevNode_Registry_Property CM_Set_DevNode_Registry_PropertyW
+#define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExW
+#else
+#define CM_Set_DevInst_Registry_Property CM_Set_DevNode_Registry_PropertyA
+#define CM_Set_DevInst_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA
+#define CM_Set_DevNode_Registry_Property CM_Set_DevNode_Registry_PropertyA
+#define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof(
+  IN ULONG ulHardwareProfile,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_Ex(
+  IN ULONG ulHardwareProfile,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_FlagsA(
+  IN DEVINSTID_A szDevInstName,
+  IN ULONG ulConfig,
+  IN ULONG ulValue,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_FlagsW(
+  IN DEVINSTID_W szDevInstName,
+  IN ULONG ulConfig,
+  IN ULONG ulValue,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_Flags_ExA(
+  IN DEVINSTID_A szDevInstName,
+  IN ULONG ulConfig,
+  IN ULONG ulValue,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_Flags_ExW(
+  IN DEVINSTID_W szDevInstName,
+  IN ULONG ulConfig,
+  IN ULONG ulValue,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Set_HW_Prof_Flags CM_Set_HW_Prof_FlagsW
+#define CM_Set_HW_Prof_Flags_Ex CM_Set_HW_Prof_Flags_ExW
+#else
+#define CM_Set_HW_Prof_Flags CM_Set_HW_Prof_FlagsA
+#define CM_Set_HW_Prof_Flags_Ex CM_Set_HW_Prof_Flags_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Setup_DevNode(
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Setup_DevNode_Ex(
+  IN DEVINST dnDevInst,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine OPTIONAL);
+
+#define CM_Setup_DevInst         CM_Setup_DevNode
+#define CM_Setup_DevInst_Ex      CM_Setup_DevNode_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Test_Range_Available(
+  IN DWORDLONG ullStartValue,
+  IN DWORDLONG ullEndValue,
+  IN RANGE_LIST rlh,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Uninstall_DevNode(
+  IN DEVINST dnPhantom,
+  IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Uninstall_DevNode_Ex(
+  IN DEVINST dnPhantom,
+  IN ULONG ulFlags,
+  IN HMACHINE hMachine);
+
+#define CM_Uninstall_DevInst     CM_Uninstall_DevNode
+#define CM_Uninstall_DevInst_Ex  CM_Uninstall_DevNode_Ex
+
+
+#if (WINVER >= _WIN32_WINNT_WIN2K)
+
+#define CM_WaitNoPendingInstallEvents CMP_WaitNoPendingInstallEvents
+
+CMAPI
+DWORD
+WINAPI
+CMP_WaitNoPendingInstallEvents(
+  IN DWORD dwTimeout);
+
+#endif /* (WINVER >= _WIN32_WINNT_WIN2K) */
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/reactos/include/psdk/devpropdef.h b/reactos/include/psdk/devpropdef.h
new file mode 100644 (file)
index 0000000..49e4c91
--- /dev/null
@@ -0,0 +1,84 @@
+#ifndef _DEVPROPDEF_H_
+#define _DEVPROPDEF_H_
+
+typedef ULONG DEVPROPTYPE, *PDEVPROPTYPE;
+
+#define DEVPROP_TYPEMOD_ARRAY                   0x00001000
+#define DEVPROP_TYPEMOD_LIST                    0x00002000
+
+#define DEVPROP_TYPE_EMPTY                      0x00000000
+#define DEVPROP_TYPE_NULL                       0x00000001
+#define DEVPROP_TYPE_SBYTE                      0x00000002
+#define DEVPROP_TYPE_BYTE                       0x00000003
+#define DEVPROP_TYPE_INT16                      0x00000004
+#define DEVPROP_TYPE_UINT16                     0x00000005
+#define DEVPROP_TYPE_INT32                      0x00000006
+#define DEVPROP_TYPE_UINT32                     0x00000007
+#define DEVPROP_TYPE_INT64                      0x00000008
+#define DEVPROP_TYPE_UINT64                     0x00000009
+#define DEVPROP_TYPE_FLOAT                      0x0000000A
+#define DEVPROP_TYPE_DOUBLE                     0x0000000B
+#define DEVPROP_TYPE_DECIMAL                    0x0000000C
+#define DEVPROP_TYPE_GUID                       0x0000000D
+#define DEVPROP_TYPE_CURRENCY                   0x0000000E
+#define DEVPROP_TYPE_DATE                       0x0000000F
+#define DEVPROP_TYPE_FILETIME                   0x00000010
+#define DEVPROP_TYPE_BOOLEAN                    0x00000011
+#define DEVPROP_TYPE_STRING                     0x00000012
+#define DEVPROP_TYPE_STRING_LIST (DEVPROP_TYPE_STRING|DEVPROP_TYPEMOD_LIST)
+#define DEVPROP_TYPE_SECURITY_DESCRIPTOR        0x00000013
+#define DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING 0x00000014
+#define DEVPROP_TYPE_DEVPROPKEY                 0x00000015
+#define DEVPROP_TYPE_DEVPROPTYPE                0x00000016
+#define DEVPROP_TYPE_BINARY      (DEVPROP_TYPE_BYTE|DEVPROP_TYPEMOD_ARRAY)
+#define DEVPROP_TYPE_ERROR                      0x00000017
+#define DEVPROP_TYPE_NTSTATUS                   0x00000018
+#define DEVPROP_TYPE_STRING_INDIRECT            0x00000019
+
+#define MAX_DEVPROP_TYPE                        0x00000019
+#define MAX_DEVPROP_TYPEMOD                     0x00002000
+
+#define DEVPROP_MASK_TYPE                       0x00000FFF
+#define DEVPROP_MASK_TYPEMOD                    0x0000F000
+
+typedef CHAR DEVPROP_BOOLEAN, *PDEVPROP_BOOLEAN;
+
+#define DEVPROP_TRUE ((DEVPROP_BOOLEAN)-1)
+#define DEVPROP_FALSE ((DEVPROP_BOOLEAN) 0)
+
+#ifndef DEVPROPKEY_DEFINED
+#define DEVPROPKEY_DEFINED
+
+typedef GUID DEVPROPGUID, *PDEVPROPGUID;
+typedef ULONG DEVPROPID, *PDEVPROPID;
+
+typedef struct _DEVPROPKEY {
+  DEVPROPGUID fmtid;
+  DEVPROPID pid;
+} DEVPROPKEY, *PDEVPROPKEY;
+
+#endif /* DEVPROPKEY_DEFINED */
+
+#define DEVPROPID_FIRST_USABLE 2
+
+#endif /* _DEVPROPDEF_H_ */
+
+#ifdef DEFINE_DEVPROPKEY
+#undef DEFINE_DEVPROPKEY
+#endif
+#ifdef INITGUID
+#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const DEVPROPKEY DECLSPEC_SELECTANY name = {{ l, w1, w2, {b1, b2, b3, b4, b5, b6, b7, b8}}, pid}
+#else
+#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const DEVPROPKEY name
+#endif /* INITGUID */
+
+#ifndef IsEqualDevPropKey
+
+#ifdef __cplusplus
+#define IsEqualDevPropKey(a, b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid, (b).fmtid))
+#else
+#define IsEqualDevPropKey(a, b) (((a).pid == (b).pid) && IsEqualIID(&(a).fmtid, &(b).fmtid))
+#endif
+
+#endif /* !IsEqualDevPropKey */
+
diff --git a/reactos/include/psdk/evntprov.h b/reactos/include/psdk/evntprov.h
new file mode 100644 (file)
index 0000000..69cc7ce
--- /dev/null
@@ -0,0 +1,335 @@
+#pragma once
+
+#ifndef EVNTAPI
+#ifndef MIDL_PASS
+#ifdef _EVNT_SOURCE_
+#define EVNTAPI __stdcall
+#else
+#define EVNTAPI DECLSPEC_IMPORT __stdcall
+#endif /* _EVNT_SOURCE_ */
+#endif /* MIDL_PASS */
+#endif /* EVNTAPI */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EVENT_MIN_LEVEL                      (0)
+#define EVENT_MAX_LEVEL                      (0xff)
+
+#define EVENT_ACTIVITY_CTRL_GET_ID           (1)
+#define EVENT_ACTIVITY_CTRL_SET_ID           (2)
+#define EVENT_ACTIVITY_CTRL_CREATE_ID        (3)
+#define EVENT_ACTIVITY_CTRL_GET_SET_ID       (4)
+#define EVENT_ACTIVITY_CTRL_CREATE_SET_ID    (5)
+
+typedef ULONGLONG REGHANDLE, *PREGHANDLE;
+
+#define MAX_EVENT_DATA_DESCRIPTORS           (128)
+#define MAX_EVENT_FILTER_DATA_SIZE           (1024)
+
+#define EVENT_FILTER_TYPE_SCHEMATIZED        (0x80000000)
+
+typedef struct _EVENT_DATA_DESCRIPTOR {
+  ULONGLONG Ptr;
+  ULONG Size;
+  ULONG Reserved;
+} EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR;
+
+typedef struct _EVENT_DESCRIPTOR {
+  USHORT Id;
+  UCHAR Version;
+  UCHAR Channel;
+  UCHAR Level;
+  UCHAR Opcode;
+  USHORT Task;
+  ULONGLONG Keyword;
+} EVENT_DESCRIPTOR, *PEVENT_DESCRIPTOR;
+typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
+
+typedef struct _EVENT_FILTER_DESCRIPTOR {
+  ULONGLONG Ptr;
+  ULONG Size;
+  ULONG Type;
+} EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR;
+
+typedef struct _EVENT_FILTER_HEADER {
+  USHORT Id;
+  UCHAR Version;
+  UCHAR Reserved[5];
+  ULONGLONG InstanceId;
+  ULONG Size;
+  ULONG NextOffset;
+} EVENT_FILTER_HEADER, *PEVENT_FILTER_HEADER;
+
+#ifndef _ETW_KM_
+
+typedef VOID
+(NTAPI *PENABLECALLBACK)(
+  IN LPCGUID SourceId,
+  IN ULONG IsEnabled,
+  IN UCHAR Level,
+  IN ULONGLONG MatchAnyKeyword,
+  IN ULONGLONG MatchAllKeyword,
+  IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL,
+  IN OUT PVOID CallbackContext OPTIONAL);
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+ULONG
+EVNTAPI
+EventRegister(
+  IN LPCGUID ProviderId,
+  IN PENABLECALLBACK EnableCallback OPTIONAL,
+  IN PVOID CallbackContext OPTIONAL,
+  OUT PREGHANDLE RegHandle);
+
+ULONG
+EVNTAPI
+EventUnregister(
+  IN REGHANDLE RegHandle);
+
+BOOLEAN
+EVNTAPI
+EventEnabled(
+  IN REGHANDLE RegHandle,
+  IN PCEVENT_DESCRIPTOR EventDescriptor);
+
+BOOLEAN
+EVNTAPI
+EventProviderEnabled(
+  IN REGHANDLE RegHandle,
+  IN UCHAR Level,
+  IN ULONGLONG Keyword);
+
+ULONG
+EVNTAPI
+EventWrite(
+  IN REGHANDLE RegHandle,
+  IN PCEVENT_DESCRIPTOR EventDescriptor,
+  IN ULONG UserDataCount,
+  IN PEVENT_DATA_DESCRIPTOR UserData);
+
+ULONG
+EVNTAPI
+EventWriteTransfer(
+  IN REGHANDLE RegHandle,
+  IN PCEVENT_DESCRIPTOR EventDescriptor,
+  IN LPCGUID ActivityId OPTIONAL,
+  IN LPCGUID RelatedActivityId OPTIONAL,
+  IN ULONG UserDataCount,
+  IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
+
+ULONG
+EVNTAPI
+EventWriteString(
+  IN REGHANDLE RegHandle,
+  IN UCHAR Level,
+  IN ULONGLONG Keyword,
+  IN PCWSTR String);
+
+ULONG
+EVNTAPI
+EventActivityIdControl(
+  IN ULONG ControlCode,
+  IN OUT LPGUID ActivityId);
+
+#endif /* (WINVER >= _WIN32_WINNT_VISTA) */
+
+#if (WINVER >= _WIN32_WINNT_WIN7)
+ULONG
+EVNTAPI
+EventWriteEx(
+  IN REGHANDLE RegHandle,
+  IN PCEVENT_DESCRIPTOR EventDescriptor,
+  IN ULONG64 Filter,
+  IN ULONG Flags,
+  IN LPCGUID ActivityId OPTIONAL,
+  IN LPCGUID RelatedActivityId OPTIONAL,
+  IN ULONG UserDataCount,
+  IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
+#endif
+
+#endif // _ETW_KM_ 
+
+FORCEINLINE
+VOID
+EventDataDescCreate(
+  OUT PEVENT_DATA_DESCRIPTOR EventDataDescriptor,
+  IN const VOID* DataPtr,
+  IN ULONG DataSize)
+{
+  EventDataDescriptor->Ptr = (ULONGLONG)(ULONG_PTR)DataPtr;
+  EventDataDescriptor->Size = DataSize;
+  EventDataDescriptor->Reserved = 0;
+}
+
+FORCEINLINE
+VOID
+EventDescCreate(
+  OUT PEVENT_DESCRIPTOR EventDescriptor,
+  IN USHORT Id,
+  IN UCHAR Version,
+  IN UCHAR Channel,
+  IN UCHAR Level,
+  IN USHORT Task,
+  IN UCHAR Opcode,
+  IN ULONGLONG Keyword)
+{
+  EventDescriptor->Id = Id;
+  EventDescriptor->Version = Version;
+  EventDescriptor->Channel = Channel;
+  EventDescriptor->Level = Level;
+  EventDescriptor->Task = Task;
+  EventDescriptor->Opcode = Opcode;
+  EventDescriptor->Keyword = Keyword;
+}
+
+FORCEINLINE
+VOID
+EventDescZero(
+  OUT PEVENT_DESCRIPTOR EventDescriptor)
+{
+  memset(EventDescriptor, 0, sizeof(EVENT_DESCRIPTOR));
+}
+
+FORCEINLINE
+USHORT
+EventDescGetId(
+  IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+  return (EventDescriptor->Id);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetVersion(
+  IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+  return (EventDescriptor->Version);
+}
+
+FORCEINLINE
+USHORT
+EventDescGetTask(
+  IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+  return (EventDescriptor->Task);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetOpcode(
+  IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+  return (EventDescriptor->Opcode);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetChannel(
+  IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+  return (EventDescriptor->Channel);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetLevel(
+  IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+  return (EventDescriptor->Level);
+}
+
+FORCEINLINE
+ULONGLONG
+EventDescGetKeyword(
+  IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+  return (EventDescriptor->Keyword);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetId(
+  IN PEVENT_DESCRIPTOR EventDescriptor,
+  IN USHORT Id)
+{
+  EventDescriptor->Id = Id;
+  return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetVersion(
+  IN PEVENT_DESCRIPTOR EventDescriptor,
+  IN UCHAR Version)
+{
+  EventDescriptor->Version = Version;
+  return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetTask(
+  IN PEVENT_DESCRIPTOR EventDescriptor,
+  IN USHORT Task)
+{
+  EventDescriptor->Task = Task;
+  return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetOpcode(
+  IN PEVENT_DESCRIPTOR EventDescriptor,
+  IN UCHAR Opcode)
+{
+  EventDescriptor->Opcode = Opcode;
+  return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetLevel(
+  IN PEVENT_DESCRIPTOR EventDescriptor,
+  IN UCHAR  Level)
+{
+  EventDescriptor->Level = Level;
+  return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetChannel(
+  IN PEVENT_DESCRIPTOR EventDescriptor,
+  IN UCHAR Channel)
+{
+  EventDescriptor->Channel = Channel;
+  return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetKeyword(
+  IN PEVENT_DESCRIPTOR EventDescriptor,
+  IN ULONGLONG Keyword)
+{
+  EventDescriptor->Keyword = Keyword;
+  return (EventDescriptor);
+}
+
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescOrKeyword(
+  IN PEVENT_DESCRIPTOR EventDescriptor,
+  IN ULONGLONG Keyword)
+{
+  EventDescriptor->Keyword |= Keyword;
+  return (EventDescriptor);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
index e4c5368..fdc3650 100644 (file)
@@ -173,11 +173,6 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!!
 
 #define NTAPI __stdcall
 
-//
-// Used by the DDK exclusively , don't put in drivers
-//
-#define DDKAPI __stdcall // Use NTAPI instead
-#define DDKCDECLAPI __cdecl // Just use __cdecl
 
 /* Import and Export Specifiers */
 
index 933de41..9237221 100644 (file)
 /*
- * Win32 definitions for Windows NT
+ * ntstatus.h
  *
- * Copyright 1996 Alexandre Julliard
+ * Windows NT status codes
  *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
+ * This file is part of the w32api package.
  *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
+ * Contributors:
+ *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
 #ifndef _NTSTATUS_
 #define _NTSTATUS_
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifndef WIN32_NO_STATUS
 
-/*
- * Debug codes
- */
+#define FACILITY_DEBUGGER               0x1
+#define FACILITY_RPC_RUNTIME            0x2
+#define FACILITY_RPC_STUBS              0x3
+#define FACILITY_IO_ERROR_CODE          0x4
+#define FACILITY_TERMINAL_SERVER        0xA
+#define FACILITY_USB_ERROR_CODE         0x10
+#define FACILITY_HID_ERROR_CODE         0x11
+#define FACILITY_FIREWIRE_ERROR_CODE    0x12
+#define FACILITY_CLUSTER_ERROR_CODE     0x13
+#define FACILITY_ACPI_ERROR_CODE        0x14
+#define FACILITY_SXS_ERROR_CODE         0x15
 
-#define DBG_EXCEPTION_HANDLED            ((NTSTATUS)0x00010001)
-#define DBG_CONTINUE                     ((NTSTATUS)0x00010002)
-#define DBG_REPLY_LATER                  ((NTSTATUS)0x40010001)
-#define DBG_UNABLE_TO_PROVIDE_HANDLE     ((NTSTATUS)0x40010002)
-#define DBG_TERMINATE_THREAD             ((NTSTATUS)0x40010003)
-#define DBG_TERMINATE_PROCESS            ((NTSTATUS)0x40010004)
-#define DBG_CONTROL_C                    ((NTSTATUS)0x40010005)
-#define DBG_PRINTEXCEPTION_C             ((NTSTATUS)0x40010006)
-#define DBG_RIPEXCEPTION                 ((NTSTATUS)0x40010007)
-#define DBG_CONTROL_BREAK                ((NTSTATUS)0x40010008)
-#define DBG_COMMAND_EXCEPTION            ((NTSTATUS)0x40010009)
-#define DBG_EXCEPTION_NOT_HANDLED        ((NTSTATUS)0x80010001)
-#define DBG_NO_STATE_CHANGE              ((NTSTATUS)0xC0010001)
-#define DBG_APP_NOT_IDLE                 ((NTSTATUS)0xC0010002)
+/* Debug codes */
 
-/*
- * Exception codes
- */
+#define DBG_EXCEPTION_HANDLED             ((NTSTATUS)0x00010001)
+#define DBG_CONTINUE                      ((NTSTATUS)0x00010002)
+#define DBG_REPLY_LATER                   ((NTSTATUS)0x40010001)
+#define DBG_UNABLE_TO_PROVIDE_HANDLE      ((NTSTATUS)0x40010002)
+#define DBG_TERMINATE_THREAD              ((NTSTATUS)0x40010003)
+#define DBG_TERMINATE_PROCESS             ((NTSTATUS)0x40010004)
+#define DBG_CONTROL_C                     ((NTSTATUS)0x40010005)
+#define DBG_PRINTEXCEPTION_C              ((NTSTATUS)0x40010006)
+#define DBG_RIPEXCEPTION                  ((NTSTATUS)0x40010007)
+#define DBG_CONTROL_BREAK                 ((NTSTATUS)0x40010008)
+#define DBG_COMMAND_EXCEPTION             ((NTSTATUS)0x40010009)
+#define DBG_EXCEPTION_NOT_HANDLED         ((NTSTATUS)0x80010001)
+#define DBG_NO_STATE_CHANGE               ((NTSTATUS)0xC0010001)
+#define DBG_APP_NOT_IDLE                  ((NTSTATUS)0xC0010002)
+
+/* Exception codes */
 
-#define STATUS_SUCCESS                   ((NTSTATUS)0x00000000)
-#define STATUS_SEVERITY_SUCCESS          0x0
-#define STATUS_SEVERITY_INFORMATIONAL    0x1
-#define STATUS_SEVERITY_WARNING          0x2
-#define STATUS_SEVERITY_ERROR            0x3
+#if !defined(STATUS_SUCCESS)
+#define STATUS_SUCCESS                    ((NTSTATUS)0x00000000)
+#endif
+#define STATUS_SEVERITY_SUCCESS           0x0
+#define STATUS_SEVERITY_INFORMATIONAL     0x1
+#define STATUS_SEVERITY_WARNING           0x2
+#define STATUS_SEVERITY_ERROR             0x3
 
-#define STATUS_WAIT_1                    ((NTSTATUS)0x00000001)
-#define STATUS_WAIT_2                    ((NTSTATUS)0x00000002)
-#define STATUS_WAIT_3                    ((NTSTATUS)0x00000003)
-#define STATUS_WAIT_63                   ((NTSTATUS)0x0000003f)
-#define STATUS_ABANDONED                 ((NTSTATUS)0x00000080)
-#define STATUS_ABANDONED_WAIT_63         ((NTSTATUS)0x000000BF)
-#define STATUS_USER_APC                  ((NTSTATUS)0x000000C0)
-#define STATUS_KERNEL_APC                ((NTSTATUS)0x00000100)
-#define STATUS_ALERTED                   ((NTSTATUS)0x00000101)
-#define STATUS_TIMEOUT                   ((NTSTATUS)0x00000102)
-#define STATUS_PENDING                   ((NTSTATUS)0x00000103)
-#define STATUS_REPARSE                   ((NTSTATUS)0x00000104)
-#define STATUS_MORE_ENTRIES              ((NTSTATUS)0x00000105)
-#define STATUS_NOT_ALL_ASSIGNED          ((NTSTATUS)0x00000106)
-#define STATUS_SOME_NOT_MAPPED           ((NTSTATUS)0x00000107)
-#define STATUS_OPLOCK_BREAK_IN_PROGRESS  ((NTSTATUS)0x00000108)
-#define STATUS_VOLUME_MOUNTED            ((NTSTATUS)0x00000109)
-#define STATUS_RXACT_COMMITTED           ((NTSTATUS)0x0000010A)
-#define STATUS_NOTIFY_CLEANUP            ((NTSTATUS)0x0000010B)
-#define STATUS_NOTIFY_ENUM_DIR           ((NTSTATUS)0x0000010C)
-#define STATUS_NO_QUOTAS_FOR_ACCOUNT     ((NTSTATUS)0x0000010D)
-#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS)0x0000010E)
-#define STATUS_PAGE_FAULT_TRANSITION     ((NTSTATUS)0x00000110)
-#define STATUS_PAGE_FAULT_DEMAND_ZERO    ((NTSTATUS)0x00000111)
-#define STATUS_PAGE_FAULT_COPY_ON_WRITE  ((NTSTATUS)0x00000112)
-#define STATUS_PAGE_FAULT_GUARD_PAGE     ((NTSTATUS)0x00000113)
-#define STATUS_PAGE_FAULT_PAGING_FILE    ((NTSTATUS)0x00000114)
-#define STATUS_CACHE_PAGE_LOCKED         ((NTSTATUS)0x00000115)
-#define STATUS_CRASH_DUMP                ((NTSTATUS)0x00000116)
-#define STATUS_BUFFER_ALL_ZEROS          ((NTSTATUS)0x00000117)
-#define STATUS_REPARSE_OBJECT            ((NTSTATUS)0x00000118)
-#define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS)0x00000119)
-#define STATUS_TRANSLATION_COMPLETE      ((NTSTATUS)0x00000120)
-#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY  ((NTSTATUS)0x00000121)
-#define STATUS_NOTHING_TO_TERMINATE      ((NTSTATUS)0x00000122)
-#define STATUS_PROCESS_NOT_IN_JOB        ((NTSTATUS)0x00000123)
-#define STATUS_PROCESS_IN_JOB            ((NTSTATUS)0x00000124)
-#define STATUS_VOLSNAP_HIBERNATE_READY   ((NTSTATUS)0x00000125)
+#define STATUS_WAIT_1                             ((NTSTATUS)0x00000001)
+#define STATUS_WAIT_2                             ((NTSTATUS)0x00000002)
+#define STATUS_WAIT_3                             ((NTSTATUS)0x00000003)
+#define STATUS_WAIT_63                            ((NTSTATUS)0x0000003f)
+#define STATUS_ABANDONED                          ((NTSTATUS)0x00000080)
+#define STATUS_ABANDONED_WAIT_63                  ((NTSTATUS)0x000000BF)
+#define STATUS_USER_APC                           ((NTSTATUS)0x000000C0)
+#define STATUS_KERNEL_APC                         ((NTSTATUS)0x00000100)
+#define STATUS_ALERTED                            ((NTSTATUS)0x00000101)
+#define STATUS_TIMEOUT                            ((NTSTATUS)0x00000102)
+#define STATUS_PENDING                            ((NTSTATUS)0x00000103)
+#define STATUS_REPARSE                            ((NTSTATUS)0x00000104)
+#define STATUS_MORE_ENTRIES                       ((NTSTATUS)0x00000105)
+#define STATUS_NOT_ALL_ASSIGNED                   ((NTSTATUS)0x00000106)
+#define STATUS_SOME_NOT_MAPPED                    ((NTSTATUS)0x00000107)
+#define STATUS_OPLOCK_BREAK_IN_PROGRESS           ((NTSTATUS)0x00000108)
+#define STATUS_VOLUME_MOUNTED                     ((NTSTATUS)0x00000109)
+#define STATUS_RXACT_COMMITTED                    ((NTSTATUS)0x0000010A)
+#define STATUS_NOTIFY_CLEANUP                     ((NTSTATUS)0x0000010B)
+#define STATUS_NOTIFY_ENUM_DIR                    ((NTSTATUS)0x0000010C)
+#define STATUS_NO_QUOTAS_FOR_ACCOUNT              ((NTSTATUS)0x0000010D)
+#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED   ((NTSTATUS)0x0000010E)
+#define STATUS_PAGE_FAULT_TRANSITION              ((NTSTATUS)0x00000110)
+#define STATUS_PAGE_FAULT_DEMAND_ZERO             ((NTSTATUS)0x00000111)
+#define STATUS_PAGE_FAULT_COPY_ON_WRITE           ((NTSTATUS)0x00000112)
+#define STATUS_PAGE_FAULT_GUARD_PAGE              ((NTSTATUS)0x00000113)
+#define STATUS_PAGE_FAULT_PAGING_FILE             ((NTSTATUS)0x00000114)
+#define STATUS_CACHE_PAGE_LOCKED                  ((NTSTATUS)0x00000115)
+#define STATUS_CRASH_DUMP                         ((NTSTATUS)0x00000116)
+#define STATUS_BUFFER_ALL_ZEROS                   ((NTSTATUS)0x00000117)
+#define STATUS_REPARSE_OBJECT                     ((NTSTATUS)0x00000118)
+#define STATUS_RESOURCE_REQUIREMENTS_CHANGED      ((NTSTATUS)0x00000119)
+#define STATUS_TRANSLATION_COMPLETE               ((NTSTATUS)0x00000120)
+#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY    ((NTSTATUS)0x00000121)
+#define STATUS_NOTHING_TO_TERMINATE               ((NTSTATUS)0x00000122)
+#define STATUS_PROCESS_NOT_IN_JOB                 ((NTSTATUS)0x00000123)
+#define STATUS_PROCESS_IN_JOB                     ((NTSTATUS)0x00000124)
+#define STATUS_VOLSNAP_HIBERNATE_READY            ((NTSTATUS)0x00000125)
 #define STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY ((NTSTATUS)0x00000126)
 
-#define STATUS_OBJECT_NAME_EXISTS        ((NTSTATUS)0x40000000)
-#define STATUS_THREAD_WAS_SUSPENDED      ((NTSTATUS)0x40000001)
-#define STATUS_WORKING_SET_LIMIT_RANGE   ((NTSTATUS)0x40000002)
-#define STATUS_IMAGE_NOT_AT_BASE         ((NTSTATUS)0x40000003)
-#define STATUS_RXACT_STATE_CREATED       ((NTSTATUS)0x40000004)
-#define STATUS_SEGMENT_NOTIFICATION      ((NTSTATUS)0x40000005)
-#define STATUS_LOCAL_USER_SESSION_KEY    ((NTSTATUS)0x40000006)
-#define STATUS_BAD_CURRENT_DIRECTORY     ((NTSTATUS)0x40000007)
-#define STATUS_SERIAL_MORE_WRITES        ((NTSTATUS)0x40000008)
-#define STATUS_REGISTRY_RECOVERED        ((NTSTATUS)0x40000009)
-#define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS)0x4000000A)
-#define STATUS_FT_WRITE_RECOVERY         ((NTSTATUS)0x4000000B)
-#define STATUS_SERIAL_COUNTER_TIMEOUT    ((NTSTATUS)0x4000000C)
-#define STATUS_NULL_LM_PASSWORD          ((NTSTATUS)0x4000000D)
-#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS)0x4000000E)
-#define STATUS_RECEIVE_PARTIAL           ((NTSTATUS)0x4000000F)
-#define STATUS_RECEIVE_EXPEDITED         ((NTSTATUS)0x40000010)
-#define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS)0x40000011)
-#define STATUS_EVENT_DONE                ((NTSTATUS)0x40000012)
-#define STATUS_EVENT_PENDING             ((NTSTATUS)0x40000013)
-#define STATUS_CHECKING_FILE_SYSTEM      ((NTSTATUS)0x40000014)
-#define STATUS_FATAL_APP_EXIT            ((NTSTATUS)0x40000015)
-#define STATUS_PREDEFINED_HANDLE         ((NTSTATUS)0x40000016)
-#define STATUS_WAS_UNLOCKED              ((NTSTATUS)0x40000017)
-#define STATUS_SERVICE_NOTIFICATION      ((NTSTATUS)0x40000018)
-#define STATUS_WAS_LOCKED                ((NTSTATUS)0x40000019)
-#define STATUS_LOG_HARD_ERROR            ((NTSTATUS)0x4000001A)
-#define STATUS_ALREADY_WIN32             ((NTSTATUS)0x4000001B)
-#define STATUS_WX86_UNSIMULATE           ((NTSTATUS)0x4000001C)
-#define STATUS_WX86_CONTINUE             ((NTSTATUS)0x4000001D)
-#define STATUS_WX86_SINGLE_STEP          ((NTSTATUS)0x4000001E)
-#define STATUS_WX86_BREAKPOINT           ((NTSTATUS)0x4000001F)
-#define STATUS_WX86_EXCEPTION_CONTINUE   ((NTSTATUS)0x40000020)
-#define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS)0x40000021)
-#define STATUS_WX86_EXCEPTION_CHAIN      ((NTSTATUS)0x40000022)
+#define STATUS_OBJECT_NAME_EXISTS              ((NTSTATUS)0x40000000)
+#define STATUS_THREAD_WAS_SUSPENDED            ((NTSTATUS)0x40000001)
+#define STATUS_WORKING_SET_LIMIT_RANGE         ((NTSTATUS)0x40000002)
+#define STATUS_IMAGE_NOT_AT_BASE               ((NTSTATUS)0x40000003)
+#define STATUS_RXACT_STATE_CREATED             ((NTSTATUS)0x40000004)
+#define STATUS_SEGMENT_NOTIFICATION            ((NTSTATUS)0x40000005)
+#define STATUS_LOCAL_USER_SESSION_KEY          ((NTSTATUS)0x40000006)
+#define STATUS_BAD_CURRENT_DIRECTORY           ((NTSTATUS)0x40000007)
+#define STATUS_SERIAL_MORE_WRITES              ((NTSTATUS)0x40000008)
+#define STATUS_REGISTRY_RECOVERED              ((NTSTATUS)0x40000009)
+#define STATUS_FT_READ_RECOVERY_FROM_BACKUP    ((NTSTATUS)0x4000000A)
+#define STATUS_FT_WRITE_RECOVERY               ((NTSTATUS)0x4000000B)
+#define STATUS_SERIAL_COUNTER_TIMEOUT          ((NTSTATUS)0x4000000C)
+#define STATUS_NULL_LM_PASSWORD                ((NTSTATUS)0x4000000D)
+#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH     ((NTSTATUS)0x4000000E)
+#define STATUS_RECEIVE_PARTIAL                 ((NTSTATUS)0x4000000F)
+#define STATUS_RECEIVE_EXPEDITED               ((NTSTATUS)0x40000010)
+#define STATUS_RECEIVE_PARTIAL_EXPEDITED       ((NTSTATUS)0x40000011)
+#define STATUS_EVENT_DONE                      ((NTSTATUS)0x40000012)
+#define STATUS_EVENT_PENDING                   ((NTSTATUS)0x40000013)
+#define STATUS_CHECKING_FILE_SYSTEM            ((NTSTATUS)0x40000014)
+#define STATUS_FATAL_APP_EXIT                  ((NTSTATUS)0x40000015)
+#define STATUS_PREDEFINED_HANDLE               ((NTSTATUS)0x40000016)
+#define STATUS_WAS_UNLOCKED                    ((NTSTATUS)0x40000017)
+#define STATUS_SERVICE_NOTIFICATION            ((NTSTATUS)0x40000018)
+#define STATUS_WAS_LOCKED                      ((NTSTATUS)0x40000019)
+#define STATUS_LOG_HARD_ERROR                  ((NTSTATUS)0x4000001A)
+#define STATUS_ALREADY_WIN32                   ((NTSTATUS)0x4000001B)
+#define STATUS_WX86_UNSIMULATE                 ((NTSTATUS)0x4000001C)
+#define STATUS_WX86_CONTINUE                   ((NTSTATUS)0x4000001D)
+#define STATUS_WX86_SINGLE_STEP                ((NTSTATUS)0x4000001E)
+#define STATUS_WX86_BREAKPOINT                 ((NTSTATUS)0x4000001F)
+#define STATUS_WX86_EXCEPTION_CONTINUE         ((NTSTATUS)0x40000020)
+#define STATUS_WX86_EXCEPTION_LASTCHANCE       ((NTSTATUS)0x40000021)
+#define STATUS_WX86_EXCEPTION_CHAIN            ((NTSTATUS)0x40000022)
 #define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS)0x40000023)
-#define STATUS_NO_YIELD_PERFORMED        ((NTSTATUS)0x40000024)
-#define STATUS_TIMER_RESUME_IGNORED      ((NTSTATUS)0x40000025)
-#define STATUS_ARBITRATION_UNHANDLED     ((NTSTATUS)0x40000026)
-#define STATUS_CARDBUS_NOT_SUPPORTED     ((NTSTATUS)0x40000027)
-#define STATUS_WX86_CREATEWX86TIB        ((NTSTATUS)0x40000028)
-#define STATUS_MP_PROCESSOR_MISMATCH     ((NTSTATUS)0x40000029)
-#define STATUS_HIBERNATED                ((NTSTATUS)0x4000002A)
-#define STATUS_RESUME_HIBERNATION        ((NTSTATUS)0x4000002B)
-#define STATUS_FIRMWARE_UPDATED          ((NTSTATUS)0x4000002C)
-#define STATUS_WAKE_SYSTEM               ((NTSTATUS)0x40000294)
-#define STATUS_DS_SHUTTING_DOWN          ((NTSTATUS)0x40000370)
+#define STATUS_NO_YIELD_PERFORMED              ((NTSTATUS)0x40000024)
+#define STATUS_TIMER_RESUME_IGNORED            ((NTSTATUS)0x40000025)
+#define STATUS_ARBITRATION_UNHANDLED           ((NTSTATUS)0x40000026)
+#define STATUS_CARDBUS_NOT_SUPPORTED           ((NTSTATUS)0x40000027)
+#define STATUS_WX86_CREATEWX86TIB              ((NTSTATUS)0x40000028)
+#define STATUS_MP_PROCESSOR_MISMATCH           ((NTSTATUS)0x40000029)
+#define STATUS_HIBERNATED                      ((NTSTATUS)0x4000002A)
+#define STATUS_RESUME_HIBERNATION              ((NTSTATUS)0x4000002B)
+#define STATUS_FIRMWARE_UPDATED                ((NTSTATUS)0x4000002C)
+#define STATUS_WAKE_SYSTEM                     ((NTSTATUS)0x40000294)
+#define STATUS_DS_SHUTTING_DOWN                ((NTSTATUS)0x40000370)
 
 #define RPC_NT_UUID_LOCAL_ONLY           ((NTSTATUS)0x40020056)
 #define RPC_NT_SEND_INCOMPLETE           ((NTSTATUS)0x400200AF)
 #define STATUS_CTX_CDM_CONNECT           ((NTSTATUS)0x400A0004)
 #define STATUS_CTX_CDM_DISCONNECT        ((NTSTATUS)0x400A0005)
 
-#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT ((NTSTATUS)0x4015000D)
+#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT  ((NTSTATUS)0x4015000D)
 
-#define STATUS_GUARD_PAGE_VIOLATION      ((NTSTATUS)0x80000001)
-#define STATUS_DATATYPE_MISALIGNMENT     ((NTSTATUS)0x80000002)
-#define STATUS_BREAKPOINT                ((NTSTATUS)0x80000003)
-#define STATUS_SINGLE_STEP               ((NTSTATUS)0x80000004)
-#define STATUS_BUFFER_OVERFLOW           ((NTSTATUS)0x80000005)
-#define STATUS_NO_MORE_FILES             ((NTSTATUS)0x80000006)
-#define STATUS_WAKE_SYSTEM_DEBUGGER      ((NTSTATUS)0x80000007)
+#define STATUS_GUARD_PAGE_VIOLATION             ((NTSTATUS)0x80000001)
+#define STATUS_DATATYPE_MISALIGNMENT            ((NTSTATUS)0x80000002)
+#define STATUS_BREAKPOINT                       ((NTSTATUS)0x80000003)
+#define STATUS_SINGLE_STEP                      ((NTSTATUS)0x80000004)
+#define STATUS_BUFFER_OVERFLOW                  ((NTSTATUS)0x80000005)
+#define STATUS_NO_MORE_FILES                    ((NTSTATUS)0x80000006)
+#define STATUS_WAKE_SYSTEM_DEBUGGER             ((NTSTATUS)0x80000007)
 
-#define STATUS_HANDLES_CLOSED            ((NTSTATUS)0x8000000A)
-#define STATUS_NO_INHERITANCE            ((NTSTATUS)0x8000000B)
-#define STATUS_GUID_SUBSTITUTION_MADE    ((NTSTATUS)0x8000000C)
-#define STATUS_PARTIAL_COPY              ((NTSTATUS)0x8000000D)
-#define STATUS_DEVICE_PAPER_EMPTY        ((NTSTATUS)0x8000000E)
-#define STATUS_DEVICE_POWERED_OFF        ((NTSTATUS)0x8000000F)
-#define STATUS_DEVICE_OFF_LINE           ((NTSTATUS)0x80000010)
-#define STATUS_DEVICE_BUSY               ((NTSTATUS)0x80000011)
-#define STATUS_NO_MORE_EAS               ((NTSTATUS)0x80000012)
-#define STATUS_INVALID_EA_NAME           ((NTSTATUS)0x80000013)
-#define STATUS_EA_LIST_INCONSISTENT      ((NTSTATUS)0x80000014)
-#define STATUS_INVALID_EA_FLAG           ((NTSTATUS)0x80000015)
-#define STATUS_VERIFY_REQUIRED           ((NTSTATUS)0x80000016)
-#define STATUS_EXTRANEOUS_INFORMATION    ((NTSTATUS)0x80000017)
-#define STATUS_RXACT_COMMIT_NECESSARY    ((NTSTATUS)0x80000018)
-#define STATUS_NO_MORE_ENTRIES           ((NTSTATUS)0x8000001A)
-#define STATUS_FILEMARK_DETECTED         ((NTSTATUS)0x8000001B)
-#define STATUS_MEDIA_CHANGED             ((NTSTATUS)0x8000001C)
-#define STATUS_BUS_RESET                 ((NTSTATUS)0x8000001D)
-#define STATUS_END_OF_MEDIA              ((NTSTATUS)0x8000001E)
-#define STATUS_BEGINNING_OF_MEDIA        ((NTSTATUS)0x8000001F)
-#define STATUS_MEDIA_CHECK               ((NTSTATUS)0x80000020)
-#define STATUS_SETMARK_DETECTED          ((NTSTATUS)0x80000021)
-#define STATUS_NO_DATA_DETECTED          ((NTSTATUS)0x80000022)
-#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS)0x80000023)
-#define STATUS_SERVER_HAS_OPEN_HANDLES   ((NTSTATUS)0x80000024)
-#define STATUS_ALREADY_DISCONNECTED      ((NTSTATUS)0x80000025)
-#define STATUS_LONGJUMP                  ((NTSTATUS)0x80000026)
+#define STATUS_HANDLES_CLOSED                   ((NTSTATUS)0x8000000A)
+#define STATUS_NO_INHERITANCE                   ((NTSTATUS)0x8000000B)
+#define STATUS_GUID_SUBSTITUTION_MADE           ((NTSTATUS)0x8000000C)
+#define STATUS_PARTIAL_COPY                     ((NTSTATUS)0x8000000D)
+#define STATUS_DEVICE_PAPER_EMPTY               ((NTSTATUS)0x8000000E)
+#define STATUS_DEVICE_POWERED_OFF               ((NTSTATUS)0x8000000F)
+#define STATUS_DEVICE_OFF_LINE                  ((NTSTATUS)0x80000010)
+#define STATUS_DEVICE_BUSY                      ((NTSTATUS)0x80000011)
+#define STATUS_NO_MORE_EAS                      ((NTSTATUS)0x80000012)
+#define STATUS_INVALID_EA_NAME                  ((NTSTATUS)0x80000013)
+#define STATUS_EA_LIST_INCONSISTENT             ((NTSTATUS)0x80000014)
+#define STATUS_INVALID_EA_FLAG                  ((NTSTATUS)0x80000015)
+#define STATUS_VERIFY_REQUIRED                  ((NTSTATUS)0x80000016)
+#define STATUS_EXTRANEOUS_INFORMATION           ((NTSTATUS)0x80000017)
+#define STATUS_RXACT_COMMIT_NECESSARY           ((NTSTATUS)0x80000018)
+#define STATUS_NO_MORE_ENTRIES                  ((NTSTATUS)0x8000001A)
+#define STATUS_FILEMARK_DETECTED                ((NTSTATUS)0x8000001B)
+#define STATUS_MEDIA_CHANGED                    ((NTSTATUS)0x8000001C)
+#define STATUS_BUS_RESET                        ((NTSTATUS)0x8000001D)
+#define STATUS_END_OF_MEDIA                     ((NTSTATUS)0x8000001E)
+#define STATUS_BEGINNING_OF_MEDIA               ((NTSTATUS)0x8000001F)
+#define STATUS_MEDIA_CHECK                      ((NTSTATUS)0x80000020)
+#define STATUS_SETMARK_DETECTED                 ((NTSTATUS)0x80000021)
+#define STATUS_NO_DATA_DETECTED                 ((NTSTATUS)0x80000022)
+#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES      ((NTSTATUS)0x80000023)
+#define STATUS_SERVER_HAS_OPEN_HANDLES          ((NTSTATUS)0x80000024)
+#define STATUS_ALREADY_DISCONNECTED             ((NTSTATUS)0x80000025)
+#define STATUS_LONGJUMP                         ((NTSTATUS)0x80000026)
 #define STATUS_CLEANER_CARTRIDGE_INSTALLED      ((NTSTATUS)0x80000027)
-#define STATUS_PLUGPLAY_QUERY_VETOED     ((NTSTATUS)0x80000028)
-#define STATUS_UNWIND_CONSOLIDATE        ((NTSTATUS)0x80000029)
-#define STATUS_REGISTRY_HIVE_RECOVERED   ((NTSTATUS)0x8000002A)
-#define STATUS_DLL_MIGHT_BE_INSECURE     ((NTSTATUS)0x8000002B)
-#define STATUS_DLL_MIGHT_BE_INCOMPATIBLE ((NTSTATUS)0x8000002C)
+#define STATUS_PLUGPLAY_QUERY_VETOED            ((NTSTATUS)0x80000028)
+#define STATUS_UNWIND_CONSOLIDATE               ((NTSTATUS)0x80000029)
+#define STATUS_REGISTRY_HIVE_RECOVERED          ((NTSTATUS)0x8000002A)
+#define STATUS_DLL_MIGHT_BE_INSECURE            ((NTSTATUS)0x8000002B)
+#define STATUS_DLL_MIGHT_BE_INCOMPATIBLE        ((NTSTATUS)0x8000002C)
 
-#define STATUS_DEVICE_REQUIRES_CLEANING  ((NTSTATUS)0x80000288)
-#define STATUS_DEVICE_DOOR_OPEN          ((NTSTATUS)0x80000289)
+#define STATUS_DEVICE_REQUIRES_CLEANING         ((NTSTATUS)0x80000288)
+#define STATUS_DEVICE_DOOR_OPEN                 ((NTSTATUS)0x80000289)
 
-#define STATUS_CLUSTER_NODE_ALREADY_UP   ((NTSTATUS)0x80130001)
-#define STATUS_CLUSTER_NODE_ALREADY_DOWN ((NTSTATUS)0x80130002)
+#define STATUS_CLUSTER_NODE_ALREADY_UP          ((NTSTATUS)0x80130001)
+#define STATUS_CLUSTER_NODE_ALREADY_DOWN        ((NTSTATUS)0x80130002)
 #define STATUS_CLUSTER_NETWORK_ALREADY_ONLINE   ((NTSTATUS)0x80130003)
 #define STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE  ((NTSTATUS)0x80130004)
 #define STATUS_CLUSTER_NODE_ALREADY_MEMBER      ((NTSTATUS)0x80130005)
 
-#define STATUS_WAIT_0                    ((NTSTATUS)0x00000000)
-#define STATUS_UNSUCCESSFUL              ((NTSTATUS)0xC0000001)
-#define STATUS_NOT_IMPLEMENTED           ((NTSTATUS)0xC0000002)
-#define STATUS_INVALID_INFO_CLASS        ((NTSTATUS)0xC0000003)
-#define STATUS_INFO_LENGTH_MISMATCH      ((NTSTATUS)0xC0000004)
-#define STATUS_ACCESS_VIOLATION          ((NTSTATUS)0xC0000005)
-#define STATUS_IN_PAGE_ERROR             ((NTSTATUS)0xC0000006)
-#define STATUS_PAGEFILE_QUOTA            ((NTSTATUS)0xC0000007)
-#define STATUS_INVALID_HANDLE            ((NTSTATUS)0xC0000008)
-#define STATUS_BAD_INITIAL_STACK         ((NTSTATUS)0xC0000009)
-#define STATUS_BAD_INITIAL_PC            ((NTSTATUS)0xC000000A)
-#define STATUS_INVALID_CID               ((NTSTATUS)0xC000000B)
-#define STATUS_TIMER_NOT_CANCELED        ((NTSTATUS)0xC000000C)
-#define STATUS_INVALID_PARAMETER         ((NTSTATUS)0xC000000D)
-#define STATUS_NO_SUCH_DEVICE            ((NTSTATUS)0xC000000E)
-#define STATUS_NO_SUCH_FILE              ((NTSTATUS)0xC000000F)
-#define STATUS_INVALID_DEVICE_REQUEST    ((NTSTATUS)0xC0000010)
-#define STATUS_END_OF_FILE               ((NTSTATUS)0xC0000011)
-#define STATUS_WRONG_VOLUME              ((NTSTATUS)0xC0000012)
-#define STATUS_NO_MEDIA_IN_DEVICE        ((NTSTATUS)0xC0000013)
-#define STATUS_UNRECOGNIZED_MEDIA        ((NTSTATUS)0xC0000014)
-#define STATUS_NONEXISTENT_SECTOR        ((NTSTATUS)0xC0000015)
-#define STATUS_MORE_PROCESSING_REQUIRED  ((NTSTATUS)0xC0000016)
-#define STATUS_NO_MEMORY                 ((NTSTATUS)0xC0000017)
-#define STATUS_CONFLICTING_ADDRESSES     ((NTSTATUS)0xC0000018)
-#define STATUS_NOT_MAPPED_VIEW           ((NTSTATUS)0xC0000019)
-#define STATUS_UNABLE_TO_FREE_VM         ((NTSTATUS)0xC000001A)
-#define STATUS_UNABLE_TO_DELETE_SECTION  ((NTSTATUS)0xC000001B)
-#define STATUS_INVALID_SYSTEM_SERVICE    ((NTSTATUS)0xC000001C)
-#define STATUS_ILLEGAL_INSTRUCTION       ((NTSTATUS)0xC000001D)
-#define STATUS_INVALID_LOCK_SEQUENCE     ((NTSTATUS)0xC000001E)
-#define STATUS_INVALID_VIEW_SIZE         ((NTSTATUS)0xC000001F)
-#define STATUS_INVALID_FILE_FOR_SECTION  ((NTSTATUS)0xC0000020)
-#define STATUS_ALREADY_COMMITTED         ((NTSTATUS)0xC0000021)
-#define STATUS_ACCESS_DENIED             ((NTSTATUS)0xC0000022)
-#define STATUS_BUFFER_TOO_SMALL          ((NTSTATUS)0xC0000023)
-#define STATUS_OBJECT_TYPE_MISMATCH      ((NTSTATUS)0xC0000024)
-#define STATUS_NONCONTINUABLE_EXCEPTION  ((NTSTATUS)0xC0000025)
-#define STATUS_INVALID_DISPOSITION       ((NTSTATUS)0xC0000026)
-#define STATUS_UNWIND                    ((NTSTATUS)0xC0000027)
-#define STATUS_BAD_STACK                 ((NTSTATUS)0xC0000028)
-#define STATUS_INVALID_UNWIND_TARGET     ((NTSTATUS)0xC0000029)
-#define STATUS_NOT_LOCKED                ((NTSTATUS)0xC000002A)
-#define STATUS_PARITY_ERROR              ((NTSTATUS)0xC000002B)
-#define STATUS_UNABLE_TO_DECOMMIT_VM     ((NTSTATUS)0xC000002C)
-#define STATUS_NOT_COMMITTED             ((NTSTATUS)0xC000002D)
-#define STATUS_INVALID_PORT_ATTRIBUTES   ((NTSTATUS)0xC000002E)
-#define STATUS_PORT_MESSAGE_TOO_LONG     ((NTSTATUS)0xC000002F)
-#define STATUS_INVALID_PARAMETER_MIX     ((NTSTATUS)0xC0000030)
-#define STATUS_INVALID_QUOTA_LOWER       ((NTSTATUS)0xC0000031)
-#define STATUS_DISK_CORRUPT_ERROR        ((NTSTATUS)0xC0000032)
-#define STATUS_OBJECT_NAME_INVALID       ((NTSTATUS)0xC0000033)
-#define STATUS_OBJECT_NAME_NOT_FOUND     ((NTSTATUS)0xC0000034)
-#define STATUS_OBJECT_NAME_COLLISION     ((NTSTATUS)0xC0000035)
-#define STATUS_PORT_DISCONNECTED         ((NTSTATUS)0xC0000037)
-#define STATUS_DEVICE_ALREADY_ATTACHED   ((NTSTATUS)0xC0000038)
-#define STATUS_OBJECT_PATH_INVALID       ((NTSTATUS)0xC0000039)
-#define STATUS_OBJECT_PATH_NOT_FOUND     ((NTSTATUS)0xC000003A)
-#define STATUS_OBJECT_PATH_SYNTAX_BAD    ((NTSTATUS)0xC000003B)
-#define STATUS_DATA_OVERRUN              ((NTSTATUS)0xC000003C)
-#define STATUS_DATA_LATE_ERROR           ((NTSTATUS)0xC000003D)
-#define STATUS_DATA_ERROR                ((NTSTATUS)0xC000003E)
-#define STATUS_CRC_ERROR                 ((NTSTATUS)0xC000003F)
-#define STATUS_SECTION_TOO_BIG           ((NTSTATUS)0xC0000040)
-#define STATUS_PORT_CONNECTION_REFUSED   ((NTSTATUS)0xC0000041)
-#define STATUS_INVALID_PORT_HANDLE       ((NTSTATUS)0xC0000042)
-#define STATUS_SHARING_VIOLATION         ((NTSTATUS)0xC0000043)
-#define STATUS_QUOTA_EXCEEDED            ((NTSTATUS)0xC0000044)
-#define STATUS_INVALID_PAGE_PROTECTION   ((NTSTATUS)0xC0000045)
-#define STATUS_MUTANT_NOT_OWNED          ((NTSTATUS)0xC0000046)
-#define STATUS_SEMAPHORE_LIMIT_EXCEEDED  ((NTSTATUS)0xC0000047)
-#define STATUS_PORT_ALREADY_SET          ((NTSTATUS)0xC0000048)
-#define STATUS_SECTION_NOT_IMAGE         ((NTSTATUS)0xC0000049)
-#define STATUS_SUSPEND_COUNT_EXCEEDED    ((NTSTATUS)0xC000004A)
-#define STATUS_THREAD_IS_TERMINATING     ((NTSTATUS)0xC000004B)
-#define STATUS_BAD_WORKING_SET_LIMIT     ((NTSTATUS)0xC000004C)
-#define STATUS_INCOMPATIBLE_FILE_MAP     ((NTSTATUS)0xC000004D)
-#define STATUS_SECTION_PROTECTION        ((NTSTATUS)0xC000004E)
-#define STATUS_EAS_NOT_SUPPORTED         ((NTSTATUS)0xC000004F)
-#define STATUS_EA_TOO_LARGE              ((NTSTATUS)0xC0000050)
-#define STATUS_NONEXISTENT_EA_ENTRY      ((NTSTATUS)0xC0000051)
-#define STATUS_NO_EAS_ON_FILE            ((NTSTATUS)0xC0000052)
-#define STATUS_EA_CORRUPT_ERROR          ((NTSTATUS)0xC0000053)
-#define STATUS_FILE_LOCK_CONFLICT        ((NTSTATUS)0xC0000054)
-#define STATUS_LOCK_NOT_GRANTED          ((NTSTATUS)0xC0000055)
-#define STATUS_DELETE_PENDING            ((NTSTATUS)0xC0000056)
-#define STATUS_CTL_FILE_NOT_SUPPORTED    ((NTSTATUS)0xC0000057)
-#define STATUS_UNKNOWN_REVISION          ((NTSTATUS)0xC0000058)
-#define STATUS_REVISION_MISMATCH         ((NTSTATUS)0xC0000059)
-#define STATUS_INVALID_OWNER             ((NTSTATUS)0xC000005A)
-#define STATUS_INVALID_PRIMARY_GROUP     ((NTSTATUS)0xC000005B)
-#define STATUS_NO_IMPERSONATION_TOKEN    ((NTSTATUS)0xC000005C)
-#define STATUS_CANT_DISABLE_MANDATORY    ((NTSTATUS)0xC000005D)
-#define STATUS_NO_LOGON_SERVERS          ((NTSTATUS)0xC000005E)
-#define STATUS_NO_SUCH_LOGON_SESSION     ((NTSTATUS)0xC000005F)
-#define STATUS_NO_SUCH_PRIVILEGE         ((NTSTATUS)0xC0000060)
-#define STATUS_PRIVILEGE_NOT_HELD        ((NTSTATUS)0xC0000061)
-#define STATUS_INVALID_ACCOUNT_NAME      ((NTSTATUS)0xC0000062)
-#define STATUS_USER_EXISTS               ((NTSTATUS)0xC0000063)
-#define STATUS_NO_SUCH_USER              ((NTSTATUS)0xC0000064)
-#define STATUS_GROUP_EXISTS              ((NTSTATUS)0xC0000065)
-#define STATUS_NO_SUCH_GROUP             ((NTSTATUS)0xC0000066)
-#define STATUS_MEMBER_IN_GROUP           ((NTSTATUS)0xC0000067)
-#define STATUS_MEMBER_NOT_IN_GROUP       ((NTSTATUS)0xC0000068)
-#define STATUS_LAST_ADMIN                ((NTSTATUS)0xC0000069)
-#define STATUS_WRONG_PASSWORD            ((NTSTATUS)0xC000006A)
-#define STATUS_ILL_FORMED_PASSWORD       ((NTSTATUS)0xC000006B)
-#define STATUS_PASSWORD_RESTRICTION      ((NTSTATUS)0xC000006C)
-#define STATUS_LOGON_FAILURE             ((NTSTATUS)0xC000006D)
-#define STATUS_ACCOUNT_RESTRICTION       ((NTSTATUS)0xC000006E)
-#define STATUS_INVALID_LOGON_HOURS       ((NTSTATUS)0xC000006F)
-#define STATUS_INVALID_WORKSTATION       ((NTSTATUS)0xC0000070)
-#define STATUS_PASSWORD_EXPIRED          ((NTSTATUS)0xC0000071)
-#define STATUS_ACCOUNT_DISABLED          ((NTSTATUS)0xC0000072)
-#define STATUS_NONE_MAPPED               ((NTSTATUS)0xC0000073)
-#define STATUS_TOO_MANY_LUIDS_REQUESTED  ((NTSTATUS)0xC0000074)
-#define STATUS_LUIDS_EXHAUSTED           ((NTSTATUS)0xC0000075)
-#define STATUS_INVALID_SUB_AUTHORITY     ((NTSTATUS)0xC0000076)
-#define STATUS_INVALID_ACL               ((NTSTATUS)0xC0000077)
-#define STATUS_INVALID_SID               ((NTSTATUS)0xC0000078)
-#define STATUS_INVALID_SECURITY_DESCR    ((NTSTATUS)0xC0000079)
-#define STATUS_PROCEDURE_NOT_FOUND       ((NTSTATUS)0xC000007A)
-#define STATUS_INVALID_IMAGE_FORMAT      ((NTSTATUS)0xC000007B)
-#define STATUS_NO_TOKEN                  ((NTSTATUS)0xC000007C)
-#define STATUS_BAD_INHERITANCE_ACL       ((NTSTATUS)0xC000007D)
-#define STATUS_RANGE_NOT_LOCKED          ((NTSTATUS)0xC000007E)
-#define STATUS_DISK_FULL                 ((NTSTATUS)0xC000007F)
-#define STATUS_SERVER_DISABLED           ((NTSTATUS)0xC0000080)
-#define STATUS_SERVER_NOT_DISABLED       ((NTSTATUS)0xC0000081)
-#define STATUS_TOO_MANY_GUIDS_REQUESTED  ((NTSTATUS)0xC0000082)
-#define STATUS_GUIDS_EXHAUSTED           ((NTSTATUS)0xC0000083)
-#define STATUS_INVALID_ID_AUTHORITY      ((NTSTATUS)0xC0000084)
-#define STATUS_AGENTS_EXHAUSTED          ((NTSTATUS)0xC0000085)
-#define STATUS_INVALID_VOLUME_LABEL      ((NTSTATUS)0xC0000086)
-#define STATUS_SECTION_NOT_EXTENDED      ((NTSTATUS)0xC0000087)
-#define STATUS_NOT_MAPPED_DATA           ((NTSTATUS)0xC0000088)
-#define STATUS_RESOURCE_DATA_NOT_FOUND   ((NTSTATUS)0xC0000089)
-#define STATUS_RESOURCE_TYPE_NOT_FOUND   ((NTSTATUS)0xC000008A)
-#define STATUS_RESOURCE_NAME_NOT_FOUND   ((NTSTATUS)0xC000008B)
-#define STATUS_ARRAY_BOUNDS_EXCEEDED     ((NTSTATUS)0xC000008C)
-#define STATUS_FLOAT_DENORMAL_OPERAND    ((NTSTATUS)0xC000008D)
-#define STATUS_FLOAT_DIVIDE_BY_ZERO      ((NTSTATUS)0xC000008E)
-#define STATUS_FLOAT_INEXACT_RESULT      ((NTSTATUS)0xC000008F)
-#define STATUS_FLOAT_INVALID_OPERATION   ((NTSTATUS)0xC0000090)
-#define STATUS_FLOAT_OVERFLOW            ((NTSTATUS)0xC0000091)
-#define STATUS_FLOAT_STACK_CHECK         ((NTSTATUS)0xC0000092)
-#define STATUS_FLOAT_UNDERFLOW           ((NTSTATUS)0xC0000093)
-#define STATUS_INTEGER_DIVIDE_BY_ZERO    ((NTSTATUS)0xC0000094)
-#define STATUS_INTEGER_OVERFLOW          ((NTSTATUS)0xC0000095)
-#define STATUS_PRIVILEGED_INSTRUCTION    ((NTSTATUS)0xC0000096)
-#define STATUS_TOO_MANY_PAGING_FILES     ((NTSTATUS)0xC0000097)
-#define STATUS_FILE_INVALID              ((NTSTATUS)0xC0000098)
-#define STATUS_ALLOTTED_SPACE_EXCEEDED   ((NTSTATUS)0xC0000099)
-#define STATUS_INSUFFICIENT_RESOURCES    ((NTSTATUS)0xC000009A)
-#define STATUS_DFS_EXIT_PATH_FOUND       ((NTSTATUS)0xC000009B)
-#define STATUS_DEVICE_DATA_ERROR         ((NTSTATUS)0xC000009C)
-#define STATUS_DEVICE_NOT_CONNECTED      ((NTSTATUS)0xC000009D)
-#define STATUS_DEVICE_POWER_FAILURE      ((NTSTATUS)0xC000009E)
-#define STATUS_FREE_VM_NOT_AT_BASE       ((NTSTATUS)0xC000009F)
-#define STATUS_MEMORY_NOT_ALLOCATED      ((NTSTATUS)0xC00000A0)
-#define STATUS_WORKING_SET_QUOTA         ((NTSTATUS)0xC00000A1)
-#define STATUS_MEDIA_WRITE_PROTECTED     ((NTSTATUS)0xC00000A2)
-#define STATUS_DEVICE_NOT_READY          ((NTSTATUS)0xC00000A3)
-#define STATUS_INVALID_GROUP_ATTRIBUTES  ((NTSTATUS)0xC00000A4)
-#define STATUS_BAD_IMPERSONATION_LEVEL   ((NTSTATUS)0xC00000A5)
-#define STATUS_CANT_OPEN_ANONYMOUS       ((NTSTATUS)0xC00000A6)
-#define STATUS_BAD_VALIDATION_CLASS      ((NTSTATUS)0xC00000A7)
-#define STATUS_BAD_TOKEN_TYPE            ((NTSTATUS)0xC00000A8)
-#define STATUS_BAD_MASTER_BOOT_RECORD    ((NTSTATUS)0xC00000A9)
-#define STATUS_INSTRUCTION_MISALIGNMENT  ((NTSTATUS)0xC00000AA)
-#define STATUS_INSTANCE_NOT_AVAILABLE    ((NTSTATUS)0xC00000AB)
-#define STATUS_PIPE_NOT_AVAILABLE        ((NTSTATUS)0xC00000AC)
-#define STATUS_INVALID_PIPE_STATE        ((NTSTATUS)0xC00000AD)
-#define STATUS_PIPE_BUSY                 ((NTSTATUS)0xC00000AE)
-#define STATUS_ILLEGAL_FUNCTION          ((NTSTATUS)0xC00000AF)
-#define STATUS_PIPE_DISCONNECTED         ((NTSTATUS)0xC00000B0)
-#define STATUS_PIPE_CLOSING              ((NTSTATUS)0xC00000B1)
-#define STATUS_PIPE_CONNECTED            ((NTSTATUS)0xC00000B2)
-#define STATUS_PIPE_LISTENING            ((NTSTATUS)0xC00000B3)
-#define STATUS_INVALID_READ_MODE         ((NTSTATUS)0xC00000B4)
-#define STATUS_IO_TIMEOUT                ((NTSTATUS)0xC00000B5)
-#define STATUS_FILE_FORCED_CLOSED        ((NTSTATUS)0xC00000B6)
-#define STATUS_PROFILING_NOT_STARTED     ((NTSTATUS)0xC00000B7)
-#define STATUS_PROFILING_NOT_STOPPED     ((NTSTATUS)0xC00000B8)
-#define STATUS_COULD_NOT_INTERPRET       ((NTSTATUS)0xC00000B9)
-#define STATUS_FILE_IS_A_DIRECTORY       ((NTSTATUS)0xC00000BA)
-#define STATUS_NOT_SUPPORTED             ((NTSTATUS)0xC00000BB)
-#define STATUS_REMOTE_NOT_LISTENING      ((NTSTATUS)0xC00000BC)
-#define STATUS_DUPLICATE_NAME            ((NTSTATUS)0xC00000BD)
-#define STATUS_BAD_NETWORK_PATH          ((NTSTATUS)0xC00000BE)
-#define STATUS_NETWORK_BUSY              ((NTSTATUS)0xC00000BF)
-#define STATUS_DEVICE_DOES_NOT_EXIST     ((NTSTATUS)0xC00000C0)
-#define STATUS_TOO_MANY_COMMANDS         ((NTSTATUS)0xC00000C1)
-#define STATUS_ADAPTER_HARDWARE_ERROR    ((NTSTATUS)0xC00000C2)
-#define STATUS_INVALID_NETWORK_RESPONSE  ((NTSTATUS)0xC00000C3)
-#define STATUS_UNEXPECTED_NETWORK_ERROR  ((NTSTATUS)0xC00000C4)
-#define STATUS_BAD_REMOTE_ADAPTER        ((NTSTATUS)0xC00000C5)
-#define STATUS_PRINT_QUEUE_FULL          ((NTSTATUS)0xC00000C6)
-#define STATUS_NO_SPOOL_SPACE            ((NTSTATUS)0xC00000C7)
-#define STATUS_PRINT_CANCELLED           ((NTSTATUS)0xC00000C8)
-#define STATUS_NETWORK_NAME_DELETED      ((NTSTATUS)0xC00000C9)
-#define STATUS_NETWORK_ACCESS_DENIED     ((NTSTATUS)0xC00000CA)
-#define STATUS_BAD_DEVICE_TYPE           ((NTSTATUS)0xC00000CB)
-#define STATUS_BAD_NETWORK_NAME          ((NTSTATUS)0xC00000CC)
-#define STATUS_TOO_MANY_NAMES            ((NTSTATUS)0xC00000CD)
-#define STATUS_TOO_MANY_SESSIONS         ((NTSTATUS)0xC00000CE)
-#define STATUS_SHARING_PAUSED            ((NTSTATUS)0xC00000CF)
-#define STATUS_REQUEST_NOT_ACCEPTED      ((NTSTATUS)0xC00000D0)
-#define STATUS_REDIRECTOR_PAUSED         ((NTSTATUS)0xC00000D1)
-#define STATUS_NET_WRITE_FAULT           ((NTSTATUS)0xC00000D2)
-#define STATUS_PROFILING_AT_LIMIT        ((NTSTATUS)0xC00000D3)
-#define STATUS_NOT_SAME_DEVICE           ((NTSTATUS)0xC00000D4)
-#define STATUS_FILE_RENAMED              ((NTSTATUS)0xC00000D5)
-#define STATUS_VIRTUAL_CIRCUIT_CLOSED    ((NTSTATUS)0xC00000D6)
-#define STATUS_NO_SECURITY_ON_OBJECT     ((NTSTATUS)0xC00000D7)
-#define STATUS_CANT_WAIT                 ((NTSTATUS)0xC00000D8)
-#define STATUS_PIPE_EMPTY                ((NTSTATUS)0xC00000D9)
-#define STATUS_CANT_ACCESS_DOMAIN_INFO   ((NTSTATUS)0xC00000DA)
-#define STATUS_CANT_TERMINATE_SELF       ((NTSTATUS)0xC00000DB)
-#define STATUS_INVALID_SERVER_STATE      ((NTSTATUS)0xC00000DC)
-#define STATUS_INVALID_DOMAIN_STATE      ((NTSTATUS)0xC00000DD)
-#define STATUS_INVALID_DOMAIN_ROLE       ((NTSTATUS)0xC00000DE)
-#define STATUS_NO_SUCH_DOMAIN            ((NTSTATUS)0xC00000DF)
-#define STATUS_DOMAIN_EXISTS             ((NTSTATUS)0xC00000E0)
-#define STATUS_DOMAIN_LIMIT_EXCEEDED     ((NTSTATUS)0xC00000E1)
-#define STATUS_OPLOCK_NOT_GRANTED        ((NTSTATUS)0xC00000E2)
-#define STATUS_INVALID_OPLOCK_PROTOCOL   ((NTSTATUS)0xC00000E3)
-#define STATUS_INTERNAL_DB_CORRUPTION    ((NTSTATUS)0xC00000E4)
-#define STATUS_INTERNAL_ERROR            ((NTSTATUS)0xC00000E5)
-#define STATUS_GENERIC_NOT_MAPPED        ((NTSTATUS)0xC00000E6)
-#define STATUS_BAD_DESCRIPTOR_FORMAT     ((NTSTATUS)0xC00000E7)
-#define STATUS_INVALID_USER_BUFFER       ((NTSTATUS)0xC00000E8)
-#define STATUS_UNEXPECTED_IO_ERROR       ((NTSTATUS)0xC00000E9)
-#define STATUS_UNEXPECTED_MM_CREATE_ERR  ((NTSTATUS)0xC00000EA)
-#define STATUS_UNEXPECTED_MM_MAP_ERROR   ((NTSTATUS)0xC00000EB)
-#define STATUS_UNEXPECTED_MM_EXTEND_ERR  ((NTSTATUS)0xC00000EC)
-#define STATUS_NOT_LOGON_PROCESS         ((NTSTATUS)0xC00000ED)
-#define STATUS_LOGON_SESSION_EXISTS      ((NTSTATUS)0xC00000EE)
-#define STATUS_INVALID_PARAMETER_1       ((NTSTATUS)0xC00000EF)
-#define STATUS_INVALID_PARAMETER_2       ((NTSTATUS)0xC00000F0)
-#define STATUS_INVALID_PARAMETER_3       ((NTSTATUS)0xC00000F1)
-#define STATUS_INVALID_PARAMETER_4       ((NTSTATUS)0xC00000F2)
-#define STATUS_INVALID_PARAMETER_5       ((NTSTATUS)0xC00000F3)
-#define STATUS_INVALID_PARAMETER_6       ((NTSTATUS)0xC00000F4)
-#define STATUS_INVALID_PARAMETER_7       ((NTSTATUS)0xC00000F5)
-#define STATUS_INVALID_PARAMETER_8       ((NTSTATUS)0xC00000F6)
-#define STATUS_INVALID_PARAMETER_9       ((NTSTATUS)0xC00000F7)
-#define STATUS_INVALID_PARAMETER_10      ((NTSTATUS)0xC00000F8)
-#define STATUS_INVALID_PARAMETER_11      ((NTSTATUS)0xC00000F9)
-#define STATUS_INVALID_PARAMETER_12      ((NTSTATUS)0xC00000FA)
-#define STATUS_REDIRECTOR_NOT_STARTED    ((NTSTATUS)0xC00000FB)
-#define STATUS_REDIRECTOR_STARTED        ((NTSTATUS)0xC00000FC)
-#define STATUS_STACK_OVERFLOW            ((NTSTATUS)0xC00000FD)
-#define STATUS_NO_SUCH_PACKAGE           ((NTSTATUS)0xC00000FE)
-#define STATUS_BAD_FUNCTION_TABLE        ((NTSTATUS)0xC00000FF)
-#define STATUS_VARIABLE_NOT_FOUND        ((NTSTATUS)0xC0000100)
-#define STATUS_DIRECTORY_NOT_EMPTY       ((NTSTATUS)0xC0000101)
-#define STATUS_FILE_CORRUPT_ERROR        ((NTSTATUS)0xC0000102)
-#define STATUS_NOT_A_DIRECTORY           ((NTSTATUS)0xC0000103)
-#define STATUS_BAD_LOGON_SESSION_STATE   ((NTSTATUS)0xC0000104)
-#define STATUS_LOGON_SESSION_COLLISION   ((NTSTATUS)0xC0000105)
-#define STATUS_NAME_TOO_LONG             ((NTSTATUS)0xC0000106)
-#define STATUS_FILES_OPEN                ((NTSTATUS)0xC0000107)
-#define STATUS_CONNECTION_IN_USE         ((NTSTATUS)0xC0000108)
-#define STATUS_MESSAGE_NOT_FOUND         ((NTSTATUS)0xC0000109)
-#define STATUS_PROCESS_IS_TERMINATING    ((NTSTATUS)0xC000010A)
-#define STATUS_INVALID_LOGON_TYPE        ((NTSTATUS)0xC000010B)
-#define STATUS_NO_GUID_TRANSLATION       ((NTSTATUS)0xC000010C)
-#define STATUS_CANNOT_IMPERSONATE        ((NTSTATUS)0xC000010D)
-#define STATUS_IMAGE_ALREADY_LOADED      ((NTSTATUS)0xC000010E)
-#define STATUS_ABIOS_NOT_PRESENT         ((NTSTATUS)0xC000010F)
-#define STATUS_ABIOS_LID_NOT_EXIST       ((NTSTATUS)0xC0000110)
-#define STATUS_ABIOS_LID_ALREADY_OWNED   ((NTSTATUS)0xC0000111)
-#define STATUS_ABIOS_NOT_LID_OWNER       ((NTSTATUS)0xC0000112)
-#define STATUS_ABIOS_INVALID_COMMAND     ((NTSTATUS)0xC0000113)
-#define STATUS_ABIOS_INVALID_LID         ((NTSTATUS)0xC0000114)
-#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS)0xC0000115)
-#define STATUS_ABIOS_INVALID_SELECTOR    ((NTSTATUS)0xC0000116)
-#define STATUS_NO_LDT                    ((NTSTATUS)0xC0000117)
-#define STATUS_INVALID_LDT_SIZE          ((NTSTATUS)0xC0000118)
-#define STATUS_INVALID_LDT_OFFSET        ((NTSTATUS)0xC0000119)
-#define STATUS_INVALID_LDT_DESCRIPTOR    ((NTSTATUS)0xC000011A)
-#define STATUS_INVALID_IMAGE_NE_FORMAT   ((NTSTATUS)0xC000011B)
-#define STATUS_RXACT_INVALID_STATE       ((NTSTATUS)0xC000011C)
-#define STATUS_RXACT_COMMIT_FAILURE      ((NTSTATUS)0xC000011D)
-#define STATUS_MAPPED_FILE_SIZE_ZERO     ((NTSTATUS)0xC000011E)
-#define STATUS_TOO_MANY_OPENED_FILES     ((NTSTATUS)0xC000011F)
-#define STATUS_CANCELLED                 ((NTSTATUS)0xC0000120)
-#define STATUS_CANNOT_DELETE             ((NTSTATUS)0xC0000121)
-#define STATUS_INVALID_COMPUTER_NAME     ((NTSTATUS)0xC0000122)
-#define STATUS_FILE_DELETED              ((NTSTATUS)0xC0000123)
-#define STATUS_SPECIAL_ACCOUNT           ((NTSTATUS)0xC0000124)
-#define STATUS_SPECIAL_GROUP             ((NTSTATUS)0xC0000125)
-#define STATUS_SPECIAL_USER              ((NTSTATUS)0xC0000126)
-#define STATUS_MEMBERS_PRIMARY_GROUP     ((NTSTATUS)0xC0000127)
-#define STATUS_FILE_CLOSED               ((NTSTATUS)0xC0000128)
-#define STATUS_TOO_MANY_THREADS          ((NTSTATUS)0xC0000129)
-#define STATUS_THREAD_NOT_IN_PROCESS     ((NTSTATUS)0xC000012A)
-#define STATUS_TOKEN_ALREADY_IN_USE      ((NTSTATUS)0xC000012B)
-#define STATUS_PAGEFILE_QUOTA_EXCEEDED   ((NTSTATUS)0xC000012C)
-#define STATUS_COMMITMENT_LIMIT          ((NTSTATUS)0xC000012D)
-#define STATUS_INVALID_IMAGE_LE_FORMAT   ((NTSTATUS)0xC000012E)
-#define STATUS_INVALID_IMAGE_NOT_MZ      ((NTSTATUS)0xC000012F)
-#define STATUS_INVALID_IMAGE_PROTECT     ((NTSTATUS)0xC0000130)
-#define STATUS_INVALID_IMAGE_WIN_16      ((NTSTATUS)0xC0000131)
-#define STATUS_LOGON_SERVER_CONFLICT     ((NTSTATUS)0xC0000132)
-#define STATUS_TIME_DIFFERENCE_AT_DC     ((NTSTATUS)0xC0000133)
-#define STATUS_SYNCHRONIZATION_REQUIRED  ((NTSTATUS)0xC0000134)
-#define STATUS_DLL_NOT_FOUND             ((NTSTATUS)0xC0000135)
-#define STATUS_OPEN_FAILED               ((NTSTATUS)0xC0000136)
-#define STATUS_IO_PRIVILEGE_FAILED       ((NTSTATUS)0xC0000137)
-#define STATUS_ORDINAL_NOT_FOUND         ((NTSTATUS)0xC0000138)
-#define STATUS_ENTRYPOINT_NOT_FOUND      ((NTSTATUS)0xC0000139)
-#define STATUS_CONTROL_C_EXIT            ((NTSTATUS)0xC000013A)
-#define STATUS_LOCAL_DISCONNECT          ((NTSTATUS)0xC000013B)
-#define STATUS_REMOTE_DISCONNECT         ((NTSTATUS)0xC000013C)
-#define STATUS_REMOTE_RESOURCES          ((NTSTATUS)0xC000013D)
-#define STATUS_LINK_FAILED               ((NTSTATUS)0xC000013E)
-#define STATUS_LINK_TIMEOUT              ((NTSTATUS)0xC000013F)
-#define STATUS_INVALID_CONNECTION        ((NTSTATUS)0xC0000140)
-#define STATUS_INVALID_ADDRESS           ((NTSTATUS)0xC0000141)
-#define STATUS_DLL_INIT_FAILED           ((NTSTATUS)0xC0000142)
-#define STATUS_MISSING_SYSTEMFILE        ((NTSTATUS)0xC0000143)
-#define STATUS_UNHANDLED_EXCEPTION       ((NTSTATUS)0xC0000144)
-#define STATUS_APP_INIT_FAILURE          ((NTSTATUS)0xC0000145)
-#define STATUS_PAGEFILE_CREATE_FAILED    ((NTSTATUS)0xC0000146)
-#define STATUS_NO_PAGEFILE               ((NTSTATUS)0xC0000147)
-#define STATUS_INVALID_LEVEL             ((NTSTATUS)0xC0000148)
-#define STATUS_WRONG_PASSWORD_CORE       ((NTSTATUS)0xC0000149)
-#define STATUS_ILLEGAL_FLOAT_CONTEXT     ((NTSTATUS)0xC000014A)
-#define STATUS_PIPE_BROKEN               ((NTSTATUS)0xC000014B)
-#define STATUS_REGISTRY_CORRUPT          ((NTSTATUS)0xC000014C)
-#define STATUS_REGISTRY_IO_FAILED        ((NTSTATUS)0xC000014D)
-#define STATUS_NO_EVENT_PAIR             ((NTSTATUS)0xC000014E)
-#define STATUS_UNRECOGNIZED_VOLUME       ((NTSTATUS)0xC000014F)
-#define STATUS_SERIAL_NO_DEVICE_INITED   ((NTSTATUS)0xC0000150)
-#define STATUS_NO_SUCH_ALIAS             ((NTSTATUS)0xC0000151)
-#define STATUS_MEMBER_NOT_IN_ALIAS       ((NTSTATUS)0xC0000152)
-#define STATUS_MEMBER_IN_ALIAS           ((NTSTATUS)0xC0000153)
-#define STATUS_ALIAS_EXISTS              ((NTSTATUS)0xC0000154)
-#define STATUS_LOGON_NOT_GRANTED         ((NTSTATUS)0xC0000155)
-#define STATUS_TOO_MANY_SECRETS          ((NTSTATUS)0xC0000156)
-#define STATUS_SECRET_TOO_LONG           ((NTSTATUS)0xC0000157)
-#define STATUS_INTERNAL_DB_ERROR         ((NTSTATUS)0xC0000158)
-#define STATUS_FULLSCREEN_MODE           ((NTSTATUS)0xC0000159)
-#define STATUS_TOO_MANY_CONTEXT_IDS      ((NTSTATUS)0xC000015A)
-#define STATUS_LOGON_TYPE_NOT_GRANTED    ((NTSTATUS)0xC000015B)
-#define STATUS_NOT_REGISTRY_FILE         ((NTSTATUS)0xC000015C)
-#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000015D)
-#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS)0xC000015E)
-#define STATUS_FT_MISSING_MEMBER         ((NTSTATUS)0xC000015F)
-#define STATUS_ILL_FORMED_SERVICE_ENTRY  ((NTSTATUS)0xC0000160)
-#define STATUS_ILLEGAL_CHARACTER         ((NTSTATUS)0xC0000161)
-#define STATUS_UNMAPPABLE_CHARACTER      ((NTSTATUS)0xC0000162)
-#define STATUS_UNDEFINED_CHARACTER       ((NTSTATUS)0xC0000163)
-#define STATUS_FLOPPY_VOLUME             ((NTSTATUS)0xC0000164)
-#define STATUS_FLOPPY_ID_MARK_NOT_FOUND  ((NTSTATUS)0xC0000165)
-#define STATUS_FLOPPY_WRONG_CYLINDER     ((NTSTATUS)0xC0000166)
-#define STATUS_FLOPPY_UNKNOWN_ERROR      ((NTSTATUS)0xC0000167)
-#define STATUS_FLOPPY_BAD_REGISTERS      ((NTSTATUS)0xC0000168)
-#define STATUS_DISK_RECALIBRATE_FAILED   ((NTSTATUS)0xC0000169)
-#define STATUS_DISK_OPERATION_FAILED     ((NTSTATUS)0xC000016A)
-#define STATUS_DISK_RESET_FAILED         ((NTSTATUS)0xC000016B)
-#define STATUS_SHARED_IRQ_BUSY           ((NTSTATUS)0xC000016C)
-#define STATUS_FT_ORPHANING              ((NTSTATUS)0xC000016D)
+#define STATUS_WAIT_0                           ((NTSTATUS)0x00000000)
+#define STATUS_UNSUCCESSFUL                     ((NTSTATUS)0xC0000001)
+#define STATUS_NOT_IMPLEMENTED                  ((NTSTATUS)0xC0000002)
+#define STATUS_INVALID_INFO_CLASS               ((NTSTATUS)0xC0000003)
+#define STATUS_INFO_LENGTH_MISMATCH             ((NTSTATUS)0xC0000004)
+#define STATUS_ACCESS_VIOLATION                 ((NTSTATUS)0xC0000005)
+#define STATUS_IN_PAGE_ERROR                    ((NTSTATUS)0xC0000006)
+#define STATUS_PAGEFILE_QUOTA                   ((NTSTATUS)0xC0000007)
+#define STATUS_INVALID_HANDLE                   ((NTSTATUS)0xC0000008)
+#define STATUS_BAD_INITIAL_STACK                ((NTSTATUS)0xC0000009)
+#define STATUS_BAD_INITIAL_PC                   ((NTSTATUS)0xC000000A)
+#define STATUS_INVALID_CID                      ((NTSTATUS)0xC000000B)
+#define STATUS_TIMER_NOT_CANCELED               ((NTSTATUS)0xC000000C)
+#define STATUS_INVALID_PARAMETER                ((NTSTATUS)0xC000000D)
+#define STATUS_NO_SUCH_DEVICE                   ((NTSTATUS)0xC000000E)
+#define STATUS_NO_SUCH_FILE                     ((NTSTATUS)0xC000000F)
+#define STATUS_INVALID_DEVICE_REQUEST           ((NTSTATUS)0xC0000010)
+#define STATUS_END_OF_FILE                      ((NTSTATUS)0xC0000011)
+#define STATUS_WRONG_VOLUME                     ((NTSTATUS)0xC0000012)
+#define STATUS_NO_MEDIA_IN_DEVICE               ((NTSTATUS)0xC0000013)
+#define STATUS_UNRECOGNIZED_MEDIA               ((NTSTATUS)0xC0000014)
+#define STATUS_NONEXISTENT_SECTOR               ((NTSTATUS)0xC0000015)
+#define STATUS_MORE_PROCESSING_REQUIRED         ((NTSTATUS)0xC0000016)
+#define STATUS_NO_MEMORY                        ((NTSTATUS)0xC0000017)
+#define STATUS_CONFLICTING_ADDRESSES            ((NTSTATUS)0xC0000018)
+#define STATUS_NOT_MAPPED_VIEW                  ((NTSTATUS)0xC0000019)
+#define STATUS_UNABLE_TO_FREE_VM                ((NTSTATUS)0xC000001A)
+#define STATUS_UNABLE_TO_DELETE_SECTION         ((NTSTATUS)0xC000001B)
+#define STATUS_INVALID_SYSTEM_SERVICE           ((NTSTATUS)0xC000001C)
+#define STATUS_ILLEGAL_INSTRUCTION              ((NTSTATUS)0xC000001D)
+#define STATUS_INVALID_LOCK_SEQUENCE            ((NTSTATUS)0xC000001E)
+#define STATUS_INVALID_VIEW_SIZE                ((NTSTATUS)0xC000001F)
+#define STATUS_INVALID_FILE_FOR_SECTION         ((NTSTATUS)0xC0000020)
+#define STATUS_ALREADY_COMMITTED                ((NTSTATUS)0xC0000021)
+#define STATUS_ACCESS_DENIED                    ((NTSTATUS)0xC0000022)
+#define STATUS_BUFFER_TOO_SMALL                 ((NTSTATUS)0xC0000023)
+#define STATUS_OBJECT_TYPE_MISMATCH             ((NTSTATUS)0xC0000024)
+#define STATUS_NONCONTINUABLE_EXCEPTION         ((NTSTATUS)0xC0000025)
+#define STATUS_INVALID_DISPOSITION              ((NTSTATUS)0xC0000026)
+#define STATUS_UNWIND                           ((NTSTATUS)0xC0000027)
+#define STATUS_BAD_STACK                        ((NTSTATUS)0xC0000028)
+#define STATUS_INVALID_UNWIND_TARGET            ((NTSTATUS)0xC0000029)
+#define STATUS_NOT_LOCKED                       ((NTSTATUS)0xC000002A)
+#define STATUS_PARITY_ERROR                     ((NTSTATUS)0xC000002B)
+#define STATUS_UNABLE_TO_DECOMMIT_VM            ((NTSTATUS)0xC000002C)
+#define STATUS_NOT_COMMITTED                    ((NTSTATUS)0xC000002D)
+#define STATUS_INVALID_PORT_ATTRIBUTES          ((NTSTATUS)0xC000002E)
+#define STATUS_PORT_MESSAGE_TOO_LONG            ((NTSTATUS)0xC000002F)
+#define STATUS_INVALID_PARAMETER_MIX            ((NTSTATUS)0xC0000030)
+#define STATUS_INVALID_QUOTA_LOWER              ((NTSTATUS)0xC0000031)
+#define STATUS_DISK_CORRUPT_ERROR               ((NTSTATUS)0xC0000032)
+#define STATUS_OBJECT_NAME_INVALID              ((NTSTATUS)0xC0000033)
+#define STATUS_OBJECT_NAME_NOT_FOUND            ((NTSTATUS)0xC0000034)
+#define STATUS_OBJECT_NAME_COLLISION            ((NTSTATUS)0xC0000035)
+#define STATUS_PORT_DISCONNECTED                ((NTSTATUS)0xC0000037)
+#define STATUS_DEVICE_ALREADY_ATTACHED          ((NTSTATUS)0xC0000038)
+#define STATUS_OBJECT_PATH_INVALID              ((NTSTATUS)0xC0000039)
+#define STATUS_OBJECT_PATH_NOT_FOUND            ((NTSTATUS)0xC000003A)
+#define STATUS_OBJECT_PATH_SYNTAX_BAD           ((NTSTATUS)0xC000003B)
+#define STATUS_DATA_OVERRUN                     ((NTSTATUS)0xC000003C)
+#define STATUS_DATA_LATE_ERROR                  ((NTSTATUS)0xC000003D)
+#define STATUS_DATA_ERROR                       ((NTSTATUS)0xC000003E)
+#define STATUS_CRC_ERROR                        ((NTSTATUS)0xC000003F)
+#define STATUS_SECTION_TOO_BIG                  ((NTSTATUS)0xC0000040)
+#define STATUS_PORT_CONNECTION_REFUSED          ((NTSTATUS)0xC0000041)
+#define STATUS_INVALID_PORT_HANDLE              ((NTSTATUS)0xC0000042)
+#define STATUS_SHARING_VIOLATION                ((NTSTATUS)0xC0000043)
+#define STATUS_QUOTA_EXCEEDED                   ((NTSTATUS)0xC0000044)
+#define STATUS_INVALID_PAGE_PROTECTION          ((NTSTATUS)0xC0000045)
+#define STATUS_MUTANT_NOT_OWNED                 ((NTSTATUS)0xC0000046)
+#define STATUS_SEMAPHORE_LIMIT_EXCEEDED         ((NTSTATUS)0xC0000047)
+#define STATUS_PORT_ALREADY_SET                 ((NTSTATUS)0xC0000048)
+#define STATUS_SECTION_NOT_IMAGE                ((NTSTATUS)0xC0000049)
+#define STATUS_SUSPEND_COUNT_EXCEEDED           ((NTSTATUS)0xC000004A)
+#define STATUS_THREAD_IS_TERMINATING            ((NTSTATUS)0xC000004B)
+#define STATUS_BAD_WORKING_SET_LIMIT            ((NTSTATUS)0xC000004C)
+#define STATUS_INCOMPATIBLE_FILE_MAP            ((NTSTATUS)0xC000004D)
+#define STATUS_SECTION_PROTECTION               ((NTSTATUS)0xC000004E)
+#define STATUS_EAS_NOT_SUPPORTED                ((NTSTATUS)0xC000004F)
+#define STATUS_EA_TOO_LARGE                     ((NTSTATUS)0xC0000050)
+#define STATUS_NONEXISTENT_EA_ENTRY             ((NTSTATUS)0xC0000051)
+#define STATUS_NO_EAS_ON_FILE                   ((NTSTATUS)0xC0000052)
+#define STATUS_EA_CORRUPT_ERROR                 ((NTSTATUS)0xC0000053)
+#define STATUS_FILE_LOCK_CONFLICT               ((NTSTATUS)0xC0000054)
+#define STATUS_LOCK_NOT_GRANTED                 ((NTSTATUS)0xC0000055)
+#define STATUS_DELETE_PENDING                   ((NTSTATUS)0xC0000056)
+#define STATUS_CTL_FILE_NOT_SUPPORTED           ((NTSTATUS)0xC0000057)
+#define STATUS_UNKNOWN_REVISION                 ((NTSTATUS)0xC0000058)
+#define STATUS_REVISION_MISMATCH                ((NTSTATUS)0xC0000059)
+#define STATUS_INVALID_OWNER                    ((NTSTATUS)0xC000005A)
+#define STATUS_INVALID_PRIMARY_GROUP            ((NTSTATUS)0xC000005B)
+#define STATUS_NO_IMPERSONATION_TOKEN           ((NTSTATUS)0xC000005C)
+#define STATUS_CANT_DISABLE_MANDATORY           ((NTSTATUS)0xC000005D)
+#define STATUS_NO_LOGON_SERVERS                 ((NTSTATUS)0xC000005E)
+#define STATUS_NO_SUCH_LOGON_SESSION            ((NTSTATUS)0xC000005F)
+#define STATUS_NO_SUCH_PRIVILEGE                ((NTSTATUS)0xC0000060)
+#define STATUS_PRIVILEGE_NOT_HELD               ((NTSTATUS)0xC0000061)
+#define STATUS_INVALID_ACCOUNT_NAME             ((NTSTATUS)0xC0000062)
+#define STATUS_USER_EXISTS                      ((NTSTATUS)0xC0000063)
+#define STATUS_NO_SUCH_USER                     ((NTSTATUS)0xC0000064)
+#define STATUS_GROUP_EXISTS                     ((NTSTATUS)0xC0000065)
+#define STATUS_NO_SUCH_GROUP                    ((NTSTATUS)0xC0000066)
+#define STATUS_MEMBER_IN_GROUP                  ((NTSTATUS)0xC0000067)
+#define STATUS_MEMBER_NOT_IN_GROUP              ((NTSTATUS)0xC0000068)
+#define STATUS_LAST_ADMIN                       ((NTSTATUS)0xC0000069)
+#define STATUS_WRONG_PASSWORD                   ((NTSTATUS)0xC000006A)
+#define STATUS_ILL_FORMED_PASSWORD              ((NTSTATUS)0xC000006B)
+#define STATUS_PASSWORD_RESTRICTION             ((NTSTATUS)0xC000006C)
+#define STATUS_LOGON_FAILURE                    ((NTSTATUS)0xC000006D)
+#define STATUS_ACCOUNT_RESTRICTION              ((NTSTATUS)0xC000006E)
+#define STATUS_INVALID_LOGON_HOURS              ((NTSTATUS)0xC000006F)
+#define STATUS_INVALID_WORKSTATION              ((NTSTATUS)0xC0000070)
+#define STATUS_PASSWORD_EXPIRED                 ((NTSTATUS)0xC0000071)
+#define STATUS_ACCOUNT_DISABLED                 ((NTSTATUS)0xC0000072)
+#define STATUS_NONE_MAPPED                      ((NTSTATUS)0xC0000073)
+#define STATUS_TOO_MANY_LUIDS_REQUESTED         ((NTSTATUS)0xC0000074)
+#define STATUS_LUIDS_EXHAUSTED                  ((NTSTATUS)0xC0000075)
+#define STATUS_INVALID_SUB_AUTHORITY            ((NTSTATUS)0xC0000076)
+#define STATUS_INVALID_ACL                      ((NTSTATUS)0xC0000077)
+#define STATUS_INVALID_SID                      ((NTSTATUS)0xC0000078)
+#define STATUS_INVALID_SECURITY_DESCR           ((NTSTATUS)0xC0000079)
+#define STATUS_PROCEDURE_NOT_FOUND              ((NTSTATUS)0xC000007A)
+#define STATUS_INVALID_IMAGE_FORMAT             ((NTSTATUS)0xC000007B)
+#define STATUS_NO_TOKEN                         ((NTSTATUS)0xC000007C)
+#define STATUS_BAD_INHERITANCE_ACL              ((NTSTATUS)0xC000007D)
+#define STATUS_RANGE_NOT_LOCKED                 ((NTSTATUS)0xC000007E)
+#define STATUS_DISK_FULL                        ((NTSTATUS)0xC000007F)
+#define STATUS_SERVER_DISABLED                  ((NTSTATUS)0xC0000080)
+#define STATUS_SERVER_NOT_DISABLED              ((NTSTATUS)0xC0000081)
+#define STATUS_TOO_MANY_GUIDS_REQUESTED         ((NTSTATUS)0xC0000082)
+#define STATUS_GUIDS_EXHAUSTED                  ((NTSTATUS)0xC0000083)
+#define STATUS_INVALID_ID_AUTHORITY             ((NTSTATUS)0xC0000084)
+#define STATUS_AGENTS_EXHAUSTED                 ((NTSTATUS)0xC0000085)
+#define STATUS_INVALID_VOLUME_LABEL             ((NTSTATUS)0xC0000086)
+#define STATUS_SECTION_NOT_EXTENDED             ((NTSTATUS)0xC0000087)
+#define STATUS_NOT_MAPPED_DATA                  ((NTSTATUS)0xC0000088)
+#define STATUS_RESOURCE_DATA_NOT_FOUND          ((NTSTATUS)0xC0000089)
+#define STATUS_RESOURCE_TYPE_NOT_FOUND          ((NTSTATUS)0xC000008A)
+#define STATUS_RESOURCE_NAME_NOT_FOUND          ((NTSTATUS)0xC000008B)
+#define STATUS_ARRAY_BOUNDS_EXCEEDED            ((NTSTATUS)0xC000008C)
+#define STATUS_FLOAT_DENORMAL_OPERAND           ((NTSTATUS)0xC000008D)
+#define STATUS_FLOAT_DIVIDE_BY_ZERO             ((NTSTATUS)0xC000008E)
+#define STATUS_FLOAT_INEXACT_RESULT             ((NTSTATUS)0xC000008F)
+#define STATUS_FLOAT_INVALID_OPERATION          ((NTSTATUS)0xC0000090)
+#define STATUS_FLOAT_OVERFLOW                   ((NTSTATUS)0xC0000091)
+#define STATUS_FLOAT_STACK_CHECK                ((NTSTATUS)0xC0000092)
+#define STATUS_FLOAT_UNDERFLOW                  ((NTSTATUS)0xC0000093)
+#define STATUS_INTEGER_DIVIDE_BY_ZERO           ((NTSTATUS)0xC0000094)
+#define STATUS_INTEGER_OVERFLOW                 ((NTSTATUS)0xC0000095)
+#define STATUS_PRIVILEGED_INSTRUCTION           ((NTSTATUS)0xC0000096)
+#define STATUS_TOO_MANY_PAGING_FILES            ((NTSTATUS)0xC0000097)
+#define STATUS_FILE_INVALID                     ((NTSTATUS)0xC0000098)
+#define STATUS_ALLOTTED_SPACE_EXCEEDED          ((NTSTATUS)0xC0000099)
+#define STATUS_INSUFFICIENT_RESOURCES           ((NTSTATUS)0xC000009A)
+#define STATUS_DFS_EXIT_PATH_FOUND              ((NTSTATUS)0xC000009B)
+#define STATUS_DEVICE_DATA_ERROR                ((NTSTATUS)0xC000009C)
+#define STATUS_DEVICE_NOT_CONNECTED             ((NTSTATUS)0xC000009D)
+#define STATUS_DEVICE_POWER_FAILURE             ((NTSTATUS)0xC000009E)
+#define STATUS_FREE_VM_NOT_AT_BASE              ((NTSTATUS)0xC000009F)
+#define STATUS_MEMORY_NOT_ALLOCATED             ((NTSTATUS)0xC00000A0)
+#define STATUS_WORKING_SET_QUOTA                ((NTSTATUS)0xC00000A1)
+#define STATUS_MEDIA_WRITE_PROTECTED            ((NTSTATUS)0xC00000A2)
+#define STATUS_DEVICE_NOT_READY                 ((NTSTATUS)0xC00000A3)
+#define STATUS_INVALID_GROUP_ATTRIBUTES         ((NTSTATUS)0xC00000A4)
+#define STATUS_BAD_IMPERSONATION_LEVEL          ((NTSTATUS)0xC00000A5)
+#define STATUS_CANT_OPEN_ANONYMOUS              ((NTSTATUS)0xC00000A6)
+#define STATUS_BAD_VALIDATION_CLASS             ((NTSTATUS)0xC00000A7)
+#define STATUS_BAD_TOKEN_TYPE                   ((NTSTATUS)0xC00000A8)
+#define STATUS_BAD_MASTER_BOOT_RECORD           ((NTSTATUS)0xC00000A9)
+#define STATUS_INSTRUCTION_MISALIGNMENT         ((NTSTATUS)0xC00000AA)
+#define STATUS_INSTANCE_NOT_AVAILABLE           ((NTSTATUS)0xC00000AB)
+#define STATUS_PIPE_NOT_AVAILABLE               ((NTSTATUS)0xC00000AC)
+#define STATUS_INVALID_PIPE_STATE               ((NTSTATUS)0xC00000AD)
+#define STATUS_PIPE_BUSY                        ((NTSTATUS)0xC00000AE)
+#define STATUS_ILLEGAL_FUNCTION                 ((NTSTATUS)0xC00000AF)
+#define STATUS_PIPE_DISCONNECTED                ((NTSTATUS)0xC00000B0)
+#define STATUS_PIPE_CLOSING                     ((NTSTATUS)0xC00000B1)
+#define STATUS_PIPE_CONNECTED                   ((NTSTATUS)0xC00000B2)
+#define STATUS_PIPE_LISTENING                   ((NTSTATUS)0xC00000B3)
+#define STATUS_INVALID_READ_MODE                ((NTSTATUS)0xC00000B4)
+#define STATUS_IO_TIMEOUT                       ((NTSTATUS)0xC00000B5)
+#define STATUS_FILE_FORCED_CLOSED               ((NTSTATUS)0xC00000B6)
+#define STATUS_PROFILING_NOT_STARTED            ((NTSTATUS)0xC00000B7)
+#define STATUS_PROFILING_NOT_STOPPED            ((NTSTATUS)0xC00000B8)
+#define STATUS_COULD_NOT_INTERPRET              ((NTSTATUS)0xC00000B9)
+#define STATUS_FILE_IS_A_DIRECTORY              ((NTSTATUS)0xC00000BA)
+#define STATUS_NOT_SUPPORTED                    ((NTSTATUS)0xC00000BB)
+#define STATUS_REMOTE_NOT_LISTENING             ((NTSTATUS)0xC00000BC)
+#define STATUS_DUPLICATE_NAME                   ((NTSTATUS)0xC00000BD)
+#define STATUS_BAD_NETWORK_PATH                 ((NTSTATUS)0xC00000BE)
+#define STATUS_NETWORK_BUSY                     ((NTSTATUS)0xC00000BF)
+#define STATUS_DEVICE_DOES_NOT_EXIST            ((NTSTATUS)0xC00000C0)
+#define STATUS_TOO_MANY_COMMANDS                ((NTSTATUS)0xC00000C1)
+#define STATUS_ADAPTER_HARDWARE_ERROR           ((NTSTATUS)0xC00000C2)
+#define STATUS_INVALID_NETWORK_RESPONSE         ((NTSTATUS)0xC00000C3)
+#define STATUS_UNEXPECTED_NETWORK_ERROR         ((NTSTATUS)0xC00000C4)
+#define STATUS_BAD_REMOTE_ADAPTER               ((NTSTATUS)0xC00000C5)
+#define STATUS_PRINT_QUEUE_FULL                 ((NTSTATUS)0xC00000C6)
+#define STATUS_NO_SPOOL_SPACE                   ((NTSTATUS)0xC00000C7)
+#define STATUS_PRINT_CANCELLED                  ((NTSTATUS)0xC00000C8)
+#define STATUS_NETWORK_NAME_DELETED             ((NTSTATUS)0xC00000C9)
+#define STATUS_NETWORK_ACCESS_DENIED            ((NTSTATUS)0xC00000CA)
+#define STATUS_BAD_DEVICE_TYPE                  ((NTSTATUS)0xC00000CB)
+#define STATUS_BAD_NETWORK_NAME                 ((NTSTATUS)0xC00000CC)
+#define STATUS_TOO_MANY_NAMES                   ((NTSTATUS)0xC00000CD)
+#define STATUS_TOO_MANY_SESSIONS                ((NTSTATUS)0xC00000CE)
+#define STATUS_SHARING_PAUSED                   ((NTSTATUS)0xC00000CF)
+#define STATUS_REQUEST_NOT_ACCEPTED             ((NTSTATUS)0xC00000D0)
+#define STATUS_REDIRECTOR_PAUSED                ((NTSTATUS)0xC00000D1)
+#define STATUS_NET_WRITE_FAULT                  ((NTSTATUS)0xC00000D2)
+#define STATUS_PROFILING_AT_LIMIT               ((NTSTATUS)0xC00000D3)
+#define STATUS_NOT_SAME_DEVICE                  ((NTSTATUS)0xC00000D4)
+#define STATUS_FILE_RENAMED                     ((NTSTATUS)0xC00000D5)
+#define STATUS_VIRTUAL_CIRCUIT_CLOSED           ((NTSTATUS)0xC00000D6)
+#define STATUS_NO_SECURITY_ON_OBJECT            ((NTSTATUS)0xC00000D7)
+#define STATUS_CANT_WAIT                        ((NTSTATUS)0xC00000D8)
+#define STATUS_PIPE_EMPTY                       ((NTSTATUS)0xC00000D9)
+#define STATUS_CANT_ACCESS_DOMAIN_INFO          ((NTSTATUS)0xC00000DA)
+#define STATUS_CANT_TERMINATE_SELF              ((NTSTATUS)0xC00000DB)
+#define STATUS_INVALID_SERVER_STATE             ((NTSTATUS)0xC00000DC)
+#define STATUS_INVALID_DOMAIN_STATE             ((NTSTATUS)0xC00000DD)
+#define STATUS_INVALID_DOMAIN_ROLE              ((NTSTATUS)0xC00000DE)
+#define STATUS_NO_SUCH_DOMAIN                   ((NTSTATUS)0xC00000DF)
+#define STATUS_DOMAIN_EXISTS                    ((NTSTATUS)0xC00000E0)
+#define STATUS_DOMAIN_LIMIT_EXCEEDED            ((NTSTATUS)0xC00000E1)
+#define STATUS_OPLOCK_NOT_GRANTED               ((NTSTATUS)0xC00000E2)
+#define STATUS_INVALID_OPLOCK_PROTOCOL          ((NTSTATUS)0xC00000E3)
+#define STATUS_INTERNAL_DB_CORRUPTION           ((NTSTATUS)0xC00000E4)
+#define STATUS_INTERNAL_ERROR                   ((NTSTATUS)0xC00000E5)
+#define STATUS_GENERIC_NOT_MAPPED               ((NTSTATUS)0xC00000E6)
+#define STATUS_BAD_DESCRIPTOR_FORMAT            ((NTSTATUS)0xC00000E7)
+#define STATUS_INVALID_USER_BUFFER              ((NTSTATUS)0xC00000E8)
+#define STATUS_UNEXPECTED_IO_ERROR              ((NTSTATUS)0xC00000E9)
+#define STATUS_UNEXPECTED_MM_CREATE_ERR         ((NTSTATUS)0xC00000EA)
+#define STATUS_UNEXPECTED_MM_MAP_ERROR          ((NTSTATUS)0xC00000EB)
+#define STATUS_UNEXPECTED_MM_EXTEND_ERR         ((NTSTATUS)0xC00000EC)
+#define STATUS_NOT_LOGON_PROCESS                ((NTSTATUS)0xC00000ED)
+#define STATUS_LOGON_SESSION_EXISTS             ((NTSTATUS)0xC00000EE)
+#define STATUS_INVALID_PARAMETER_1              ((NTSTATUS)0xC00000EF)
+#define STATUS_INVALID_PARAMETER_2              ((NTSTATUS)0xC00000F0)
+#define STATUS_INVALID_PARAMETER_3              ((NTSTATUS)0xC00000F1)
+#define STATUS_INVALID_PARAMETER_4              ((NTSTATUS)0xC00000F2)
+#define STATUS_INVALID_PARAMETER_5              ((NTSTATUS)0xC00000F3)
+#define STATUS_INVALID_PARAMETER_6              ((NTSTATUS)0xC00000F4)
+#define STATUS_INVALID_PARAMETER_7              ((NTSTATUS)0xC00000F5)
+#define STATUS_INVALID_PARAMETER_8              ((NTSTATUS)0xC00000F6)
+#define STATUS_INVALID_PARAMETER_9              ((NTSTATUS)0xC00000F7)
+#define STATUS_INVALID_PARAMETER_10             ((NTSTATUS)0xC00000F8)
+#define STATUS_INVALID_PARAMETER_11             ((NTSTATUS)0xC00000F9)
+#define STATUS_INVALID_PARAMETER_12             ((NTSTATUS)0xC00000FA)
+#define STATUS_REDIRECTOR_NOT_STARTED           ((NTSTATUS)0xC00000FB)
+#define STATUS_REDIRECTOR_STARTED               ((NTSTATUS)0xC00000FC)
+#define STATUS_STACK_OVERFLOW                   ((NTSTATUS)0xC00000FD)
+#define STATUS_NO_SUCH_PACKAGE                  ((NTSTATUS)0xC00000FE)
+#define STATUS_BAD_FUNCTION_TABLE               ((NTSTATUS)0xC00000FF)
+#define STATUS_VARIABLE_NOT_FOUND               ((NTSTATUS)0xC0000100)
+#define STATUS_DIRECTORY_NOT_EMPTY              ((NTSTATUS)0xC0000101)
+#define STATUS_FILE_CORRUPT_ERROR               ((NTSTATUS)0xC0000102)
+#define STATUS_NOT_A_DIRECTORY                  ((NTSTATUS)0xC0000103)
+#define STATUS_BAD_LOGON_SESSION_STATE          ((NTSTATUS)0xC0000104)
+#define STATUS_LOGON_SESSION_COLLISION          ((NTSTATUS)0xC0000105)
+#define STATUS_NAME_TOO_LONG                    ((NTSTATUS)0xC0000106)
+#define STATUS_FILES_OPEN                       ((NTSTATUS)0xC0000107)
+#define STATUS_CONNECTION_IN_USE                ((NTSTATUS)0xC0000108)
+#define STATUS_MESSAGE_NOT_FOUND                ((NTSTATUS)0xC0000109)
+#define STATUS_PROCESS_IS_TERMINATING           ((NTSTATUS)0xC000010A)
+#define STATUS_INVALID_LOGON_TYPE               ((NTSTATUS)0xC000010B)
+#define STATUS_NO_GUID_TRANSLATION              ((NTSTATUS)0xC000010C)
+#define STATUS_CANNOT_IMPERSONATE               ((NTSTATUS)0xC000010D)
+#define STATUS_IMAGE_ALREADY_LOADED             ((NTSTATUS)0xC000010E)
+#define STATUS_ABIOS_NOT_PRESENT                ((NTSTATUS)0xC000010F)
+#define STATUS_ABIOS_LID_NOT_EXIST              ((NTSTATUS)0xC0000110)
+#define STATUS_ABIOS_LID_ALREADY_OWNED          ((NTSTATUS)0xC0000111)
+#define STATUS_ABIOS_NOT_LID_OWNER              ((NTSTATUS)0xC0000112)
+#define STATUS_ABIOS_INVALID_COMMAND            ((NTSTATUS)0xC0000113)
+#define STATUS_ABIOS_INVALID_LID                ((NTSTATUS)0xC0000114)
+#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE     ((NTSTATUS)0xC0000115)
+#define STATUS_ABIOS_INVALID_SELECTOR           ((NTSTATUS)0xC0000116)
+#define STATUS_NO_LDT                           ((NTSTATUS)0xC0000117)
+#define STATUS_INVALID_LDT_SIZE                 ((NTSTATUS)0xC0000118)
+#define STATUS_INVALID_LDT_OFFSET               ((NTSTATUS)0xC0000119)
+#define STATUS_INVALID_LDT_DESCRIPTOR           ((NTSTATUS)0xC000011A)
+#define STATUS_INVALID_IMAGE_NE_FORMAT          ((NTSTATUS)0xC000011B)
+#define STATUS_RXACT_INVALID_STATE              ((NTSTATUS)0xC000011C)
+#define STATUS_RXACT_COMMIT_FAILURE             ((NTSTATUS)0xC000011D)
+#define STATUS_MAPPED_FILE_SIZE_ZERO            ((NTSTATUS)0xC000011E)
+#define STATUS_TOO_MANY_OPENED_FILES            ((NTSTATUS)0xC000011F)
+#define STATUS_CANCELLED                        ((NTSTATUS)0xC0000120)
+#define STATUS_CANNOT_DELETE                    ((NTSTATUS)0xC0000121)
+#define STATUS_INVALID_COMPUTER_NAME            ((NTSTATUS)0xC0000122)
+#define STATUS_FILE_DELETED                     ((NTSTATUS)0xC0000123)
+#define STATUS_SPECIAL_ACCOUNT                  ((NTSTATUS)0xC0000124)
+#define STATUS_SPECIAL_GROUP                    ((NTSTATUS)0xC0000125)
+#define STATUS_SPECIAL_USER                     ((NTSTATUS)0xC0000126)
+#define STATUS_MEMBERS_PRIMARY_GROUP            ((NTSTATUS)0xC0000127)
+#define STATUS_FILE_CLOSED                      ((NTSTATUS)0xC0000128)
+#define STATUS_TOO_MANY_THREADS                 ((NTSTATUS)0xC0000129)
+#define STATUS_THREAD_NOT_IN_PROCESS            ((NTSTATUS)0xC000012A)
+#define STATUS_TOKEN_ALREADY_IN_USE             ((NTSTATUS)0xC000012B)
+#define STATUS_PAGEFILE_QUOTA_EXCEEDED          ((NTSTATUS)0xC000012C)
+#define STATUS_COMMITMENT_LIMIT                 ((NTSTATUS)0xC000012D)
+#define STATUS_INVALID_IMAGE_LE_FORMAT          ((NTSTATUS)0xC000012E)
+#define STATUS_INVALID_IMAGE_NOT_MZ             ((NTSTATUS)0xC000012F)
+#define STATUS_INVALID_IMAGE_PROTECT            ((NTSTATUS)0xC0000130)
+#define STATUS_INVALID_IMAGE_WIN_16             ((NTSTATUS)0xC0000131)
+#define STATUS_LOGON_SERVER_CONFLICT            ((NTSTATUS)0xC0000132)
+#define STATUS_TIME_DIFFERENCE_AT_DC            ((NTSTATUS)0xC0000133)
+#define STATUS_SYNCHRONIZATION_REQUIRED         ((NTSTATUS)0xC0000134)
+#define STATUS_DLL_NOT_FOUND                    ((NTSTATUS)0xC0000135)
+#define STATUS_OPEN_FAILED                      ((NTSTATUS)0xC0000136)
+#define STATUS_IO_PRIVILEGE_FAILED              ((NTSTATUS)0xC0000137)
+#define STATUS_ORDINAL_NOT_FOUND                ((NTSTATUS)0xC0000138)
+#define STATUS_ENTRYPOINT_NOT_FOUND             ((NTSTATUS)0xC0000139)
+#define STATUS_CONTROL_C_EXIT                   ((NTSTATUS)0xC000013A)
+#define STATUS_LOCAL_DISCONNECT                 ((NTSTATUS)0xC000013B)
+#define STATUS_REMOTE_DISCONNECT                ((NTSTATUS)0xC000013C)
+#define STATUS_REMOTE_RESOURCES                 ((NTSTATUS)0xC000013D)
+#define STATUS_LINK_FAILED                      ((NTSTATUS)0xC000013E)
+#define STATUS_LINK_TIMEOUT                     ((NTSTATUS)0xC000013F)
+#define STATUS_INVALID_CONNECTION               ((NTSTATUS)0xC0000140)
+#define STATUS_INVALID_ADDRESS                  ((NTSTATUS)0xC0000141)
+#define STATUS_DLL_INIT_FAILED                  ((NTSTATUS)0xC0000142)
+#define STATUS_MISSING_SYSTEMFILE               ((NTSTATUS)0xC0000143)
+#define STATUS_UNHANDLED_EXCEPTION              ((NTSTATUS)0xC0000144)
+#define STATUS_APP_INIT_FAILURE                 ((NTSTATUS)0xC0000145)
+#define STATUS_PAGEFILE_CREATE_FAILED           ((NTSTATUS)0xC0000146)
+#define STATUS_NO_PAGEFILE                      ((NTSTATUS)0xC0000147)
+#define STATUS_INVALID_LEVEL                    ((NTSTATUS)0xC0000148)
+#define STATUS_WRONG_PASSWORD_CORE              ((NTSTATUS)0xC0000149)
+#define STATUS_ILLEGAL_FLOAT_CONTEXT            ((NTSTATUS)0xC000014A)
+#define STATUS_PIPE_BROKEN                      ((NTSTATUS)0xC000014B)
+#define STATUS_REGISTRY_CORRUPT                 ((NTSTATUS)0xC000014C)
+#define STATUS_REGISTRY_IO_FAILED               ((NTSTATUS)0xC000014D)
+#define STATUS_NO_EVENT_PAIR                    ((NTSTATUS)0xC000014E)
+#define STATUS_UNRECOGNIZED_VOLUME              ((NTSTATUS)0xC000014F)
+#define STATUS_SERIAL_NO_DEVICE_INITED          ((NTSTATUS)0xC0000150)
+#define STATUS_NO_SUCH_ALIAS                    ((NTSTATUS)0xC0000151)
+#define STATUS_MEMBER_NOT_IN_ALIAS              ((NTSTATUS)0xC0000152)
+#define STATUS_MEMBER_IN_ALIAS                  ((NTSTATUS)0xC0000153)
+#define STATUS_ALIAS_EXISTS                     ((NTSTATUS)0xC0000154)
+#define STATUS_LOGON_NOT_GRANTED                ((NTSTATUS)0xC0000155)
+#define STATUS_TOO_MANY_SECRETS                 ((NTSTATUS)0xC0000156)
+#define STATUS_SECRET_TOO_LONG                  ((NTSTATUS)0xC0000157)
+#define STATUS_INTERNAL_DB_ERROR                ((NTSTATUS)0xC0000158)
+#define STATUS_FULLSCREEN_MODE                  ((NTSTATUS)0xC0000159)
+#define STATUS_TOO_MANY_CONTEXT_IDS             ((NTSTATUS)0xC000015A)
+#define STATUS_LOGON_TYPE_NOT_GRANTED           ((NTSTATUS)0xC000015B)
+#define STATUS_NOT_REGISTRY_FILE                ((NTSTATUS)0xC000015C)
+#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED     ((NTSTATUS)0xC000015D)
+#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR        ((NTSTATUS)0xC000015E)
+#define STATUS_FT_MISSING_MEMBER                ((NTSTATUS)0xC000015F)
+#define STATUS_ILL_FORMED_SERVICE_ENTRY         ((NTSTATUS)0xC0000160)
+#define STATUS_ILLEGAL_CHARACTER                ((NTSTATUS)0xC0000161)
+#define STATUS_UNMAPPABLE_CHARACTER             ((NTSTATUS)0xC0000162)
+#define STATUS_UNDEFINED_CHARACTER              ((NTSTATUS)0xC0000163)
+#define STATUS_FLOPPY_VOLUME                    ((NTSTATUS)0xC0000164)
+#define STATUS_FLOPPY_ID_MARK_NOT_FOUND         ((NTSTATUS)0xC0000165)
+#define STATUS_FLOPPY_WRONG_CYLINDER            ((NTSTATUS)0xC0000166)
+#define STATUS_FLOPPY_UNKNOWN_ERROR             ((NTSTATUS)0xC0000167)
+#define STATUS_FLOPPY_BAD_REGISTERS             ((NTSTATUS)0xC0000168)
+#define STATUS_DISK_RECALIBRATE_FAILED          ((NTSTATUS)0xC0000169)
+#define STATUS_DISK_OPERATION_FAILED            ((NTSTATUS)0xC000016A)
+#define STATUS_DISK_RESET_FAILED                ((NTSTATUS)0xC000016B)
+#define STATUS_SHARED_IRQ_BUSY                  ((NTSTATUS)0xC000016C)
+#define STATUS_FT_ORPHANING                     ((NTSTATUS)0xC000016D)
 #define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS)0xC000016E)
 
-#define STATUS_PARTITION_FAILURE         ((NTSTATUS)0xC0000172)
-#define STATUS_INVALID_BLOCK_LENGTH      ((NTSTATUS)0xC0000173)
-#define STATUS_DEVICE_NOT_PARTITIONED    ((NTSTATUS)0xC0000174)
-#define STATUS_UNABLE_TO_LOCK_MEDIA      ((NTSTATUS)0xC0000175)
-#define STATUS_UNABLE_TO_UNLOAD_MEDIA    ((NTSTATUS)0xC0000176)
-#define STATUS_EOM_OVERFLOW              ((NTSTATUS)0xC0000177)
-#define STATUS_NO_MEDIA                  ((NTSTATUS)0xC0000178)
-#define STATUS_NO_SUCH_MEMBER            ((NTSTATUS)0xC000017A)
-#define STATUS_INVALID_MEMBER            ((NTSTATUS)0xC000017B)
-#define STATUS_KEY_DELETED               ((NTSTATUS)0xC000017C)
-#define STATUS_NO_LOG_SPACE              ((NTSTATUS)0xC000017D)
-#define STATUS_TOO_MANY_SIDS             ((NTSTATUS)0xC000017E)
-#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000017F)
-#define STATUS_KEY_HAS_CHILDREN          ((NTSTATUS)0xC0000180)
-#define STATUS_CHILD_MUST_BE_VOLATILE    ((NTSTATUS)0xC0000181)
-#define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS)0xC0000182)
-#define STATUS_DRIVER_INTERNAL_ERROR     ((NTSTATUS)0xC0000183)
-#define STATUS_INVALID_DEVICE_STATE      ((NTSTATUS)0xC0000184)
-#define STATUS_IO_DEVICE_ERROR           ((NTSTATUS)0xC0000185)
-#define STATUS_DEVICE_PROTOCOL_ERROR     ((NTSTATUS)0xC0000186)
-#define STATUS_BACKUP_CONTROLLER         ((NTSTATUS)0xC0000187)
-#define STATUS_LOG_FILE_FULL             ((NTSTATUS)0xC0000188)
-#define STATUS_TOO_LATE                  ((NTSTATUS)0xC0000189)
-#define STATUS_NO_TRUST_LSA_SECRET       ((NTSTATUS)0xC000018A)
-#define STATUS_NO_TRUST_SAM_ACCOUNT      ((NTSTATUS)0xC000018B)
-#define STATUS_TRUSTED_DOMAIN_FAILURE    ((NTSTATUS)0xC000018C)
-#define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS)0xC000018D)
-#define STATUS_EVENTLOG_FILE_CORRUPT     ((NTSTATUS)0xC000018E)
-#define STATUS_EVENTLOG_CANT_START       ((NTSTATUS)0xC000018F)
-#define STATUS_TRUST_FAILURE             ((NTSTATUS)0xC0000190)
-#define STATUS_MUTANT_LIMIT_EXCEEDED     ((NTSTATUS)0xC0000191)
-#define STATUS_NETLOGON_NOT_STARTED      ((NTSTATUS)0xC0000192)
-#define STATUS_ACCOUNT_EXPIRED           ((NTSTATUS)0xC0000193)
-#define STATUS_POSSIBLE_DEADLOCK         ((NTSTATUS)0xC0000194)
-#define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS)0xC0000195)
-#define STATUS_REMOTE_SESSION_LIMIT      ((NTSTATUS)0xC0000196)
-#define STATUS_EVENTLOG_FILE_CHANGED     ((NTSTATUS)0xC0000197)
+#define STATUS_PARTITION_FAILURE                ((NTSTATUS)0xC0000172)
+#define STATUS_INVALID_BLOCK_LENGTH             ((NTSTATUS)0xC0000173)
+#define STATUS_DEVICE_NOT_PARTITIONED           ((NTSTATUS)0xC0000174)
+#define STATUS_UNABLE_TO_LOCK_MEDIA             ((NTSTATUS)0xC0000175)
+#define STATUS_UNABLE_TO_UNLOAD_MEDIA           ((NTSTATUS)0xC0000176)
+#define STATUS_EOM_OVERFLOW                     ((NTSTATUS)0xC0000177)
+#define STATUS_NO_MEDIA                         ((NTSTATUS)0xC0000178)
+#define STATUS_NO_SUCH_MEMBER                   ((NTSTATUS)0xC000017A)
+#define STATUS_INVALID_MEMBER                   ((NTSTATUS)0xC000017B)
+#define STATUS_KEY_DELETED                      ((NTSTATUS)0xC000017C)
+#define STATUS_NO_LOG_SPACE                     ((NTSTATUS)0xC000017D)
+#define STATUS_TOO_MANY_SIDS                    ((NTSTATUS)0xC000017E)
+#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED     ((NTSTATUS)0xC000017F)
+#define STATUS_KEY_HAS_CHILDREN                 ((NTSTATUS)0xC0000180)
+#define STATUS_CHILD_MUST_BE_VOLATILE           ((NTSTATUS)0xC0000181)
+#define STATUS_DEVICE_CONFIGURATION_ERROR       ((NTSTATUS)0xC0000182)
+#define STATUS_DRIVER_INTERNAL_ERROR            ((NTSTATUS)0xC0000183)
+#define STATUS_INVALID_DEVICE_STATE             ((NTSTATUS)0xC0000184)
+#define STATUS_IO_DEVICE_ERROR                  ((NTSTATUS)0xC0000185)
+#define STATUS_DEVICE_PROTOCOL_ERROR            ((NTSTATUS)0xC0000186)
+#define STATUS_BACKUP_CONTROLLER                ((NTSTATUS)0xC0000187)
+#define STATUS_LOG_FILE_FULL                    ((NTSTATUS)0xC0000188)
+#define STATUS_TOO_LATE                         ((NTSTATUS)0xC0000189)
+#define STATUS_NO_TRUST_LSA_SECRET              ((NTSTATUS)0xC000018A)
+#define STATUS_NO_TRUST_SAM_ACCOUNT             ((NTSTATUS)0xC000018B)
+#define STATUS_TRUSTED_DOMAIN_FAILURE           ((NTSTATUS)0xC000018C)
+#define STATUS_TRUSTED_RELATIONSHIP_FAILURE     ((NTSTATUS)0xC000018D)
+#define STATUS_EVENTLOG_FILE_CORRUPT            ((NTSTATUS)0xC000018E)
+#define STATUS_EVENTLOG_CANT_START              ((NTSTATUS)0xC000018F)
+#define STATUS_TRUST_FAILURE                    ((NTSTATUS)0xC0000190)
+#define STATUS_MUTANT_LIMIT_EXCEEDED            ((NTSTATUS)0xC0000191)
+#define STATUS_NETLOGON_NOT_STARTED             ((NTSTATUS)0xC0000192)
+#define STATUS_ACCOUNT_EXPIRED                  ((NTSTATUS)0xC0000193)
+#define STATUS_POSSIBLE_DEADLOCK                ((NTSTATUS)0xC0000194)
+#define STATUS_NETWORK_CREDENTIAL_CONFLICT      ((NTSTATUS)0xC0000195)
+#define STATUS_REMOTE_SESSION_LIMIT             ((NTSTATUS)0xC0000196)
+#define STATUS_EVENTLOG_FILE_CHANGED            ((NTSTATUS)0xC0000197)
 #define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS)0xC0000198)
 #define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS)0xC0000199)
-#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS)0xC000019A)
-#define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS)0xC000019B)
-#define STATUS_FS_DRIVER_REQUIRED        ((NTSTATUS)0xC000019C)
-#define STATUS_NO_USER_SESSION_KEY       ((NTSTATUS)0xC0000202)
-#define STATUS_USER_SESSION_DELETED      ((NTSTATUS)0xC0000203)
-#define STATUS_RESOURCE_LANG_NOT_FOUND   ((NTSTATUS)0xC0000204)
-#define STATUS_INSUFF_SERVER_RESOURCES   ((NTSTATUS)0xC0000205)
-#define STATUS_INVALID_BUFFER_SIZE       ((NTSTATUS)0xC0000206)
-#define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS)0xC0000207)
-#define STATUS_INVALID_ADDRESS_WILDCARD  ((NTSTATUS)0xC0000208)
-#define STATUS_TOO_MANY_ADDRESSES        ((NTSTATUS)0xC0000209)
-#define STATUS_ADDRESS_ALREADY_EXISTS    ((NTSTATUS)0xC000020A)
-#define STATUS_ADDRESS_CLOSED            ((NTSTATUS)0xC000020B)
-#define STATUS_CONNECTION_DISCONNECTED   ((NTSTATUS)0xC000020C)
-#define STATUS_CONNECTION_RESET          ((NTSTATUS)0xC000020D)
-#define STATUS_TOO_MANY_NODES            ((NTSTATUS)0xC000020E)
-#define STATUS_TRANSACTION_ABORTED       ((NTSTATUS)0xC000020F)
-#define STATUS_TRANSACTION_TIMED_OUT     ((NTSTATUS)0xC0000210)
-#define STATUS_TRANSACTION_NO_RELEASE    ((NTSTATUS)0xC0000211)
-#define STATUS_TRANSACTION_NO_MATCH      ((NTSTATUS)0xC0000212)
-#define STATUS_TRANSACTION_RESPONDED     ((NTSTATUS)0xC0000213)
-#define STATUS_TRANSACTION_INVALID_ID    ((NTSTATUS)0xC0000214)
-#define STATUS_TRANSACTION_INVALID_TYPE  ((NTSTATUS)0xC0000215)
-#define STATUS_NOT_SERVER_SESSION        ((NTSTATUS)0xC0000216)
-#define STATUS_NOT_CLIENT_SESSION        ((NTSTATUS)0xC0000217)
-#define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS)0xC0000218)
-#define STATUS_DEBUG_ATTACH_FAILED       ((NTSTATUS)0xC0000219)
-#define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS)0xC000021A)
-#define STATUS_DATA_NOT_ACCEPTED         ((NTSTATUS)0xC000021B)
-#define STATUS_NO_BROWSER_SERVERS_FOUND  ((NTSTATUS)0xC000021C)
-#define STATUS_VDM_HARD_ERROR            ((NTSTATUS)0xC000021D)
-#define STATUS_DRIVER_CANCEL_TIMEOUT     ((NTSTATUS)0xC000021E)
-#define STATUS_REPLY_MESSAGE_MISMATCH    ((NTSTATUS)0xC000021F)
-#define STATUS_MAPPED_ALIGNMENT          ((NTSTATUS)0xC0000220)
-#define STATUS_IMAGE_CHECKSUM_MISMATCH   ((NTSTATUS)0xC0000221)
-#define STATUS_LOST_WRITEBEHIND_DATA     ((NTSTATUS)0xC0000222)
+#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT     ((NTSTATUS)0xC000019A)
+#define STATUS_DOMAIN_TRUST_INCONSISTENT        ((NTSTATUS)0xC000019B)
+#define STATUS_FS_DRIVER_REQUIRED               ((NTSTATUS)0xC000019C)
+#define STATUS_NO_USER_SESSION_KEY              ((NTSTATUS)0xC0000202)
+#define STATUS_USER_SESSION_DELETED             ((NTSTATUS)0xC0000203)
+#define STATUS_RESOURCE_LANG_NOT_FOUND          ((NTSTATUS)0xC0000204)
+#define STATUS_INSUFF_SERVER_RESOURCES          ((NTSTATUS)0xC0000205)
+#define STATUS_INVALID_BUFFER_SIZE              ((NTSTATUS)0xC0000206)
+#define STATUS_INVALID_ADDRESS_COMPONENT        ((NTSTATUS)0xC0000207)
+#define STATUS_INVALID_ADDRESS_WILDCARD         ((NTSTATUS)0xC0000208)
+#define STATUS_TOO_MANY_ADDRESSES               ((NTSTATUS)0xC0000209)
+#define STATUS_ADDRESS_ALREADY_EXISTS           ((NTSTATUS)0xC000020A)
+#define STATUS_ADDRESS_CLOSED                   ((NTSTATUS)0xC000020B)
+#define STATUS_CONNECTION_DISCONNECTED          ((NTSTATUS)0xC000020C)
+#define STATUS_CONNECTION_RESET                 ((NTSTATUS)0xC000020D)
+#define STATUS_TOO_MANY_NODES                   ((NTSTATUS)0xC000020E)
+#define STATUS_TRANSACTION_ABORTED              ((NTSTATUS)0xC000020F)
+#define STATUS_TRANSACTION_TIMED_OUT            ((NTSTATUS)0xC0000210)
+#define STATUS_TRANSACTION_NO_RELEASE           ((NTSTATUS)0xC0000211)
+#define STATUS_TRANSACTION_NO_MATCH             ((NTSTATUS)0xC0000212)
+#define STATUS_TRANSACTION_RESPONDED            ((NTSTATUS)0xC0000213)
+#define STATUS_TRANSACTION_INVALID_ID           ((NTSTATUS)0xC0000214)
+#define STATUS_TRANSACTION_INVALID_TYPE         ((NTSTATUS)0xC0000215)
+#define STATUS_NOT_SERVER_SESSION               ((NTSTATUS)0xC0000216)
+#define STATUS_NOT_CLIENT_SESSION               ((NTSTATUS)0xC0000217)
+#define STATUS_CANNOT_LOAD_REGISTRY_FILE        ((NTSTATUS)0xC0000218)
+#define STATUS_DEBUG_ATTACH_FAILED              ((NTSTATUS)0xC0000219)
+#define STATUS_SYSTEM_PROCESS_TERMINATED        ((NTSTATUS)0xC000021A)
+#define STATUS_DATA_NOT_ACCEPTED                ((NTSTATUS)0xC000021B)
+#define STATUS_NO_BROWSER_SERVERS_FOUND         ((NTSTATUS)0xC000021C)
+#define STATUS_VDM_HARD_ERROR                   ((NTSTATUS)0xC000021D)
+#define STATUS_DRIVER_CANCEL_TIMEOUT            ((NTSTATUS)0xC000021E)
+#define STATUS_REPLY_MESSAGE_MISMATCH           ((NTSTATUS)0xC000021F)
+#define STATUS_MAPPED_ALIGNMENT                 ((NTSTATUS)0xC0000220)
+#define STATUS_IMAGE_CHECKSUM_MISMATCH          ((NTSTATUS)0xC0000221)
+#define STATUS_LOST_WRITEBEHIND_DATA            ((NTSTATUS)0xC0000222)
 #define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS)0xC0000223)
-#define STATUS_PASSWORD_MUST_CHANGE      ((NTSTATUS)0xC0000224)
-#define STATUS_NOT_FOUND                 ((NTSTATUS)0xC0000225)
-#define STATUS_NOT_TINY_STREAM           ((NTSTATUS)0xC0000226)
-#define STATUS_RECOVERY_FAILURE          ((NTSTATUS)0xC0000227)
-#define STATUS_STACK_OVERFLOW_READ       ((NTSTATUS)0xC0000228)
-#define STATUS_FAIL_CHECK                ((NTSTATUS)0xC0000229)
-#define STATUS_DUPLICATE_OBJECTID        ((NTSTATUS)0xC000022A)
-#define STATUS_OBJECTID_EXISTS           ((NTSTATUS)0xC000022B)
-#define STATUS_CONVERT_TO_LARGE          ((NTSTATUS)0xC000022C)
-#define STATUS_RETRY                     ((NTSTATUS)0xC000022D)
-#define STATUS_FOUND_OUT_OF_SCOPE        ((NTSTATUS)0xC000022E)
-#define STATUS_ALLOCATE_BUCKET           ((NTSTATUS)0xC000022F)
-#define STATUS_PROPSET_NOT_FOUND         ((NTSTATUS)0xC0000230)
-#define STATUS_MARSHALL_OVERFLOW         ((NTSTATUS)0xC0000231)
-#define STATUS_INVALID_VARIANT           ((NTSTATUS)0xC0000232)
-#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS)0xC0000233)
-#define STATUS_ACCOUNT_LOCKED_OUT        ((NTSTATUS)0xC0000234)
-#define STATUS_HANDLE_NOT_CLOSABLE       ((NTSTATUS)0xC0000235)
-#define STATUS_CONNECTION_REFUSED        ((NTSTATUS)0xC0000236)
-#define STATUS_GRACEFUL_DISCONNECT       ((NTSTATUS)0xC0000237)
-#define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS)0xC0000238)
-#define STATUS_ADDRESS_NOT_ASSOCIATED    ((NTSTATUS)0xC0000239)
-#define STATUS_CONNECTION_INVALID        ((NTSTATUS)0xC000023A)
-#define STATUS_CONNECTION_ACTIVE         ((NTSTATUS)0xC000023B)
-#define STATUS_NETWORK_UNREACHABLE       ((NTSTATUS)0xC000023C)
-#define STATUS_HOST_UNREACHABLE          ((NTSTATUS)0xC000023D)
-#define STATUS_PROTOCOL_UNREACHABLE      ((NTSTATUS)0xC000023E)
-#define STATUS_PORT_UNREACHABLE          ((NTSTATUS)0xC000023F)
-#define STATUS_REQUEST_ABORTED           ((NTSTATUS)0xC0000240)
-#define STATUS_CONNECTION_ABORTED        ((NTSTATUS)0xC0000241)
-#define STATUS_BAD_COMPRESSION_BUFFER    ((NTSTATUS)0xC0000242)
-#define STATUS_USER_MAPPED_FILE          ((NTSTATUS)0xC0000243)
-#define STATUS_AUDIT_FAILED              ((NTSTATUS)0xC0000244)
-#define STATUS_TIMER_RESOLUTION_NOT_SET  ((NTSTATUS)0xC0000245)
-#define STATUS_CONNECTION_COUNT_LIMIT    ((NTSTATUS)0xC0000246)
-#define STATUS_LOGIN_TIME_RESTRICTION    ((NTSTATUS)0xC0000247)
-#define STATUS_LOGIN_WKSTA_RESTRICTION   ((NTSTATUS)0xC0000248)
-#define STATUS_IMAGE_MP_UP_MISMATCH      ((NTSTATUS)0xC0000249)
-#define STATUS_INSUFFICIENT_LOGON_INFO   ((NTSTATUS)0xC0000250)
-#define STATUS_BAD_DLL_ENTRYPOINT        ((NTSTATUS)0xC0000251)
-#define STATUS_BAD_SERVICE_ENTRYPOINT    ((NTSTATUS)0xC0000252)
-#define STATUS_LPC_REPLY_LOST            ((NTSTATUS)0xC0000253)
-#define STATUS_IP_ADDRESS_CONFLICT1      ((NTSTATUS)0xC0000254)
-#define STATUS_IP_ADDRESS_CONFLICT2      ((NTSTATUS)0xC0000255)
-#define STATUS_REGISTRY_QUOTA_LIMIT      ((NTSTATUS)0xC0000256)
-#define STATUS_PATH_NOT_COVERED          ((NTSTATUS)0xC0000257)
-#define STATUS_NO_CALLBACK_ACTIVE        ((NTSTATUS)0xC0000258)
-#define STATUS_LICENSE_QUOTA_EXCEEDED    ((NTSTATUS)0xC0000259)
-#define STATUS_PWD_TOO_SHORT             ((NTSTATUS)0xC000025A)
-#define STATUS_PWD_TOO_RECENT            ((NTSTATUS)0xC000025B)
-#define STATUS_PWD_HISTORY_CONFLICT      ((NTSTATUS)0xC000025C)
-#define STATUS_PLUGPLAY_NO_DEVICE        ((NTSTATUS)0xC000025E)
-#define STATUS_UNSUPPORTED_COMPRESSION   ((NTSTATUS)0xC000025F)
-#define STATUS_INVALID_HW_PROFILE        ((NTSTATUS)0xC0000260)
-#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS)0xC0000261)
-#define STATUS_DRIVER_ORDINAL_NOT_FOUND  ((NTSTATUS)0xC0000262)
-#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000263)
-#define STATUS_RESOURCE_NOT_OWNED        ((NTSTATUS)0xC0000264)
-#define STATUS_TOO_MANY_LINKS            ((NTSTATUS)0xC0000265)
-#define STATUS_QUOTA_LIST_INCONSISTENT   ((NTSTATUS)0xC0000266)
-#define STATUS_FILE_IS_OFFLINE           ((NTSTATUS)0xC0000267)
-#define STATUS_EVALUATION_EXPIRATION     ((NTSTATUS)0xC0000268)
-#define STATUS_ILLEGAL_DLL_RELOCATION    ((NTSTATUS)0xC0000269)
-#define STATUS_LICENSE_VIOLATION         ((NTSTATUS)0xC000026A)
-#define STATUS_DLL_INIT_FAILED_LOGOFF    ((NTSTATUS)0xC000026B)
-#define STATUS_DRIVER_UNABLE_TO_LOAD     ((NTSTATUS)0xC000026C)
-#define STATUS_DFS_UNAVAILABLE           ((NTSTATUS)0xC000026D)
-#define STATUS_VOLUME_DISMOUNTED         ((NTSTATUS)0xC000026E)
-#define STATUS_WX86_INTERNAL_ERROR       ((NTSTATUS)0xC000026F)
-#define STATUS_WX86_FLOAT_STACK_CHECK    ((NTSTATUS)0xC0000270)
-#define STATUS_VALIDATE_CONTINUE         ((NTSTATUS)0xC0000271)
-#define STATUS_NO_MATCH                  ((NTSTATUS)0xC0000272)
-#define STATUS_NO_MORE_MATCHES           ((NTSTATUS)0xC0000273)
-#define STATUS_NOT_A_REPARSE_POINT       ((NTSTATUS)0xC0000275)
-#define STATUS_IO_REPARSE_TAG_INVALID    ((NTSTATUS)0xC0000276)
-#define STATUS_IO_REPARSE_TAG_MISMATCH   ((NTSTATUS)0xC0000277)
-#define STATUS_IO_REPARSE_DATA_INVALID   ((NTSTATUS)0xC0000278)
+#define STATUS_PASSWORD_MUST_CHANGE             ((NTSTATUS)0xC0000224)
+#define STATUS_NOT_FOUND                        ((NTSTATUS)0xC0000225)
+#define STATUS_NOT_TINY_STREAM                  ((NTSTATUS)0xC0000226)
+#define STATUS_RECOVERY_FAILURE                 ((NTSTATUS)0xC0000227)
+#define STATUS_STACK_OVERFLOW_READ              ((NTSTATUS)0xC0000228)
+#define STATUS_FAIL_CHECK                       ((NTSTATUS)0xC0000229)
+#define STATUS_DUPLICATE_OBJECTID               ((NTSTATUS)0xC000022A)
+#define STATUS_OBJECTID_EXISTS                  ((NTSTATUS)0xC000022B)
+#define STATUS_CONVERT_TO_LARGE                 ((NTSTATUS)0xC000022C)
+#define STATUS_RETRY                            ((NTSTATUS)0xC000022D)
+#define STATUS_FOUND_OUT_OF_SCOPE               ((NTSTATUS)0xC000022E)
+#define STATUS_ALLOCATE_BUCKET                  ((NTSTATUS)0xC000022F)
+#define STATUS_PROPSET_NOT_FOUND                ((NTSTATUS)0xC0000230)
+#define STATUS_MARSHALL_OVERFLOW                ((NTSTATUS)0xC0000231)
+#define STATUS_INVALID_VARIANT                  ((NTSTATUS)0xC0000232)
+#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND      ((NTSTATUS)0xC0000233)
+#define STATUS_ACCOUNT_LOCKED_OUT               ((NTSTATUS)0xC0000234)
+#define STATUS_HANDLE_NOT_CLOSABLE              ((NTSTATUS)0xC0000235)
+#define STATUS_CONNECTION_REFUSED               ((NTSTATUS)0xC0000236)
+#define STATUS_GRACEFUL_DISCONNECT              ((NTSTATUS)0xC0000237)
+#define STATUS_ADDRESS_ALREADY_ASSOCIATED       ((NTSTATUS)0xC0000238)
+#define STATUS_ADDRESS_NOT_ASSOCIATED           ((NTSTATUS)0xC0000239)
+#define STATUS_CONNECTION_INVALID               ((NTSTATUS)0xC000023A)
+#define STATUS_CONNECTION_ACTIVE                ((NTSTATUS)0xC000023B)
+#define STATUS_NETWORK_UNREACHABLE              ((NTSTATUS)0xC000023C)
+#define STATUS_HOST_UNREACHABLE                 ((NTSTATUS)0xC000023D)
+#define STATUS_PROTOCOL_UNREACHABLE             ((NTSTATUS)0xC000023E)
+#define STATUS_PORT_UNREACHABLE                 ((NTSTATUS)0xC000023F)
+#define STATUS_REQUEST_ABORTED                  ((NTSTATUS)0xC0000240)
+#define STATUS_CONNECTION_ABORTED               ((NTSTATUS)0xC0000241)
+#define STATUS_BAD_COMPRESSION_BUFFER           ((NTSTATUS)0xC0000242)
+#define STATUS_USER_MAPPED_FILE                 ((NTSTATUS)0xC0000243)
+#define STATUS_AUDIT_FAILED                     ((NTSTATUS)0xC0000244)
+#define STATUS_TIMER_RESOLUTION_NOT_SET         ((NTSTATUS)0xC0000245)
+#define STATUS_CONNECTION_COUNT_LIMIT           ((NTSTATUS)0xC0000246)
+#define STATUS_LOGIN_TIME_RESTRICTION           ((NTSTATUS)0xC0000247)
+#define STATUS_LOGIN_WKSTA_RESTRICTION          ((NTSTATUS)0xC0000248)
+#define STATUS_IMAGE_MP_UP_MISMATCH             ((NTSTATUS)0xC0000249)
+#define STATUS_INSUFFICIENT_LOGON_INFO          ((NTSTATUS)0xC0000250)
+#define STATUS_BAD_DLL_ENTRYPOINT               ((NTSTATUS)0xC0000251)
+#define STATUS_BAD_SERVICE_ENTRYPOINT           ((NTSTATUS)0xC0000252)
+#define STATUS_LPC_REPLY_LOST                   ((NTSTATUS)0xC0000253)
+#define STATUS_IP_ADDRESS_CONFLICT1             ((NTSTATUS)0xC0000254)
+#define STATUS_IP_ADDRESS_CONFLICT2             ((NTSTATUS)0xC0000255)
+#define STATUS_REGISTRY_QUOTA_LIMIT             ((NTSTATUS)0xC0000256)
+#define STATUS_PATH_NOT_COVERED                 ((NTSTATUS)0xC0000257)
+#define STATUS_NO_CALLBACK_ACTIVE               ((NTSTATUS)0xC0000258)
+#define STATUS_LICENSE_QUOTA_EXCEEDED           ((NTSTATUS)0xC0000259)
+#define STATUS_PWD_TOO_SHORT                    ((NTSTATUS)0xC000025A)
+#define STATUS_PWD_TOO_RECENT                   ((NTSTATUS)0xC000025B)
+#define STATUS_PWD_HISTORY_CONFLICT             ((NTSTATUS)0xC000025C)
+#define STATUS_PLUGPLAY_NO_DEVICE               ((NTSTATUS)0xC000025E)
+#define STATUS_UNSUPPORTED_COMPRESSION          ((NTSTATUS)0xC000025F)
+#define STATUS_INVALID_HW_PROFILE               ((NTSTATUS)0xC0000260)
+#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH     ((NTSTATUS)0xC0000261)
+#define STATUS_DRIVER_ORDINAL_NOT_FOUND         ((NTSTATUS)0xC0000262)
+#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND      ((NTSTATUS)0xC0000263)
+#define STATUS_RESOURCE_NOT_OWNED               ((NTSTATUS)0xC0000264)
+#define STATUS_TOO_MANY_LINKS                   ((NTSTATUS)0xC0000265)
+#define STATUS_QUOTA_LIST_INCONSISTENT          ((NTSTATUS)0xC0000266)
+#define STATUS_FILE_IS_OFFLINE                  ((NTSTATUS)0xC0000267)
+#define STATUS_EVALUATION_EXPIRATION            ((NTSTATUS)0xC0000268)
+#define STATUS_ILLEGAL_DLL_RELOCATION           ((NTSTATUS)0xC0000269)
+#define STATUS_LICENSE_VIOLATION                ((NTSTATUS)0xC000026A)
+#define STATUS_DLL_INIT_FAILED_LOGOFF           ((NTSTATUS)0xC000026B)
+#define STATUS_DRIVER_UNABLE_TO_LOAD            ((NTSTATUS)0xC000026C)
+#define STATUS_DFS_UNAVAILABLE                  ((NTSTATUS)0xC000026D)
+#define STATUS_VOLUME_DISMOUNTED                ((NTSTATUS)0xC000026E)
+#define STATUS_WX86_INTERNAL_ERROR              ((NTSTATUS)0xC000026F)
+#define STATUS_WX86_FLOAT_STACK_CHECK           ((NTSTATUS)0xC0000270)
+#define STATUS_VALIDATE_CONTINUE                ((NTSTATUS)0xC0000271)
+#define STATUS_NO_MATCH                         ((NTSTATUS)0xC0000272)
+#define STATUS_NO_MORE_MATCHES                  ((NTSTATUS)0xC0000273)
+#define STATUS_NOT_A_REPARSE_POINT              ((NTSTATUS)0xC0000275)
+#define STATUS_IO_REPARSE_TAG_INVALID           ((NTSTATUS)0xC0000276)
+#define STATUS_IO_REPARSE_TAG_MISMATCH          ((NTSTATUS)0xC0000277)
+#define STATUS_IO_REPARSE_DATA_INVALID          ((NTSTATUS)0xC0000278)
 #define STATUS_IO_REPARSE_TAG_NOT_HANDLED       ((NTSTATUS)0xC0000279)
 #define STATUS_REPARSE_POINT_NOT_RESOLVED       ((NTSTATUS)0xC0000280)
 #define STATUS_DIRECTORY_IS_A_REPARSE_POINT     ((NTSTATUS)0xC0000281)
-#define STATUS_RANGE_LIST_CONFLICT       ((NTSTATUS)0xC0000282)
-#define STATUS_SOURCE_ELEMENT_EMPTY      ((NTSTATUS)0xC0000283)
-#define STATUS_DESTINATION_ELEMENT_FULL  ((NTSTATUS)0xC0000284)
-#define STATUS_ILLEGAL_ELEMENT_ADDRESS   ((NTSTATUS)0xC0000285)
-#define STATUS_MAGAZINE_NOT_PRESENT      ((NTSTATUS)0xC0000286)
-#define STATUS_REINITIALIZATION_NEEDED   ((NTSTATUS)0xC0000287)
-#define STATUS_ENCRYPTION_FAILED         ((NTSTATUS)0xC000028A)
-#define STATUS_DECRYPTION_FAILED         ((NTSTATUS)0xC000028B)
-#define STATUS_RANGE_NOT_FOUND           ((NTSTATUS)0xC000028C)
-#define STATUS_NO_RECOVERY_POLICY        ((NTSTATUS)0xC000028D)
-#define STATUS_NO_EFS                    ((NTSTATUS)0xC000028E)
-#define STATUS_WRONG_EFS                 ((NTSTATUS)0xC000028F)
-#define STATUS_NO_USER_KEYS              ((NTSTATUS)0xC0000290)
-#define STATUS_FILE_NOT_ENCRYPTED        ((NTSTATUS)0xC0000291)
-#define STATUS_NOT_EXPORT_FORMAT         ((NTSTATUS)0xC0000292)
-#define STATUS_FILE_ENCRYPTED            ((NTSTATUS)0xC0000293)
-#define STATUS_WMI_GUID_NOT_FOUND        ((NTSTATUS)0xC0000295)
-#define STATUS_WMI_INSTANCE_NOT_FOUND    ((NTSTATUS)0xC0000296)
-#define STATUS_WMI_ITEMID_NOT_FOUND      ((NTSTATUS)0xC0000297)
-#define STATUS_WMI_TRY_AGAIN             ((NTSTATUS)0xC0000298)
-#define STATUS_SHARED_POLICY             ((NTSTATUS)0xC0000299)
-#define STATUS_POLICY_OBJECT_NOT_FOUND   ((NTSTATUS)0xC000029A)
-#define STATUS_POLICY_ONLY_IN_DS         ((NTSTATUS)0xC000029B)
-#define STATUS_VOLUME_NOT_UPGRADED       ((NTSTATUS)0xC000029C)
-#define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS)0xC000029D)
+#define STATUS_RANGE_LIST_CONFLICT              ((NTSTATUS)0xC0000282)
+#define STATUS_SOURCE_ELEMENT_EMPTY             ((NTSTATUS)0xC0000283)
+#define STATUS_DESTINATION_ELEMENT_FULL         ((NTSTATUS)0xC0000284)
+#define STATUS_ILLEGAL_ELEMENT_ADDRESS          ((NTSTATUS)0xC0000285)
+#define STATUS_MAGAZINE_NOT_PRESENT             ((NTSTATUS)0xC0000286)
+#define STATUS_REINITIALIZATION_NEEDED          ((NTSTATUS)0xC0000287)
+#define STATUS_ENCRYPTION_FAILED                ((NTSTATUS)0xC000028A)
+#define STATUS_DECRYPTION_FAILED                ((NTSTATUS)0xC000028B)
+#define STATUS_RANGE_NOT_FOUND                  ((NTSTATUS)0xC000028C)
+#define STATUS_NO_RECOVERY_POLICY               ((NTSTATUS)0xC000028D)
+#define STATUS_NO_EFS                           ((NTSTATUS)0xC000028E)
+#define STATUS_WRONG_EFS                        ((NTSTATUS)0xC000028F)
+#define STATUS_NO_USER_KEYS                     ((NTSTATUS)0xC0000290)
+#define STATUS_FILE_NOT_ENCRYPTED               ((NTSTATUS)0xC0000291)
+#define STATUS_NOT_EXPORT_FORMAT                ((NTSTATUS)0xC0000292)
+#define STATUS_FILE_ENCRYPTED                   ((NTSTATUS)0xC0000293)
+#define STATUS_WMI_GUID_NOT_FOUND               ((NTSTATUS)0xC0000295)
+#define STATUS_WMI_INSTANCE_NOT_FOUND           ((NTSTATUS)0xC0000296)
+#define STATUS_WMI_ITEMID_NOT_FOUND             ((NTSTATUS)0xC0000297)
+#define STATUS_WMI_TRY_AGAIN                    ((NTSTATUS)0xC0000298)
+#define STATUS_SHARED_POLICY                    ((NTSTATUS)0xC0000299)
+#define STATUS_POLICY_OBJECT_NOT_FOUND          ((NTSTATUS)0xC000029A)
+#define STATUS_POLICY_ONLY_IN_DS                ((NTSTATUS)0xC000029B)
+#define STATUS_VOLUME_NOT_UPGRADED              ((NTSTATUS)0xC000029C)
+#define STATUS_REMOTE_STORAGE_NOT_ACTIVE        ((NTSTATUS)0xC000029D)
 #define STATUS_REMOTE_STORAGE_MEDIA_ERROR       ((NTSTATUS)0xC000029E)
-#define STATUS_NO_TRACKING_SERVICE       ((NTSTATUS)0xC000029F)
-#define STATUS_SERVER_SID_MISMATCH       ((NTSTATUS)0xC00002A0)
-#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE  ((NTSTATUS)0xC00002A1)
+#define STATUS_NO_TRACKING_SERVICE              ((NTSTATUS)0xC000029F)
+#define STATUS_SERVER_SID_MISMATCH              ((NTSTATUS)0xC00002A0)
+#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE         ((NTSTATUS)0xC00002A1)
 #define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX      ((NTSTATUS)0xC00002A2)
 #define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED      ((NTSTATUS)0xC00002A3)
 #define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS     ((NTSTATUS)0xC00002A4)
-#define STATUS_DS_BUSY                   ((NTSTATUS)0xC00002A5)
-#define STATUS_DS_UNAVAILABLE            ((NTSTATUS)0xC00002A6)
-#define STATUS_DS_NO_RIDS_ALLOCATED      ((NTSTATUS)0xC00002A7)
-#define STATUS_DS_NO_MORE_RIDS           ((NTSTATUS)0xC00002A8)
-#define STATUS_DS_INCORRECT_ROLE_OWNER   ((NTSTATUS)0xC00002A9)
-#define STATUS_DS_RIDMGR_INIT_ERROR      ((NTSTATUS)0xC00002AA)
-#define STATUS_DS_OBJ_CLASS_VIOLATION    ((NTSTATUS)0xC00002AB)
-#define STATUS_DS_CANT_ON_NON_LEAF       ((NTSTATUS)0xC00002AC)
-#define STATUS_DS_CANT_ON_RDN            ((NTSTATUS)0xC00002AD)
-#define STATUS_DS_CANT_MOD_OBJ_CLASS     ((NTSTATUS)0xC00002AE)
-#define STATUS_DS_CROSS_DOM_MOVE_FAILED  ((NTSTATUS)0xC00002AF)
-#define STATUS_DS_GC_NOT_AVAILABLE       ((NTSTATUS)0xC00002B0)
+#define STATUS_DS_BUSY                          ((NTSTATUS)0xC00002A5)
+#define STATUS_DS_UNAVAILABLE                   ((NTSTATUS)0xC00002A6)
+#define STATUS_DS_NO_RIDS_ALLOCATED             ((NTSTATUS)0xC00002A7)
+#define STATUS_DS_NO_MORE_RIDS                  ((NTSTATUS)0xC00002A8)
+#define STATUS_DS_INCORRECT_ROLE_OWNER          ((NTSTATUS)0xC00002A9)
+#define STATUS_DS_RIDMGR_INIT_ERROR             ((NTSTATUS)0xC00002AA)
+#define STATUS_DS_OBJ_CLASS_VIOLATION           ((NTSTATUS)0xC00002AB)
+#define STATUS_DS_CANT_ON_NON_LEAF              ((NTSTATUS)0xC00002AC)
+#define STATUS_DS_CANT_ON_RDN                   ((NTSTATUS)0xC00002AD)
+#define STATUS_DS_CANT_MOD_OBJ_CLASS            ((NTSTATUS)0xC00002AE)
+#define STATUS_DS_CROSS_DOM_MOVE_FAILED         ((NTSTATUS)0xC00002AF)
+#define STATUS_DS_GC_NOT_AVAILABLE              ((NTSTATUS)0xC00002B0)
 #define STATUS_DIRECTORY_SERVICE_REQUIRED       ((NTSTATUS)0xC00002B1)
 #define STATUS_REPARSE_ATTRIBUTE_CONFLICT       ((NTSTATUS)0xC00002B2)
-#define STATUS_CANT_ENABLE_DENY_ONLY     ((NTSTATUS)0xC00002B3)
-#define STATUS_FLOAT_MULTIPLE_FAULTS     ((NTSTATUS)0xC00002B4)
-#define STATUS_FLOAT_MULTIPLE_TRAPS      ((NTSTATUS)0xC00002B5)
-#define STATUS_DEVICE_REMOVED            ((NTSTATUS)0xC00002B6)
+#define STATUS_CANT_ENABLE_DENY_ONLY            ((NTSTATUS)0xC00002B3)
+#define STATUS_FLOAT_MULTIPLE_FAULTS            ((NTSTATUS)0xC00002B4)
+#define STATUS_FLOAT_MULTIPLE_TRAPS             ((NTSTATUS)0xC00002B5)
+#define STATUS_DEVICE_REMOVED                   ((NTSTATUS)0xC00002B6)
 #define STATUS_JOURNAL_DELETE_IN_PROGRESS       ((NTSTATUS)0xC00002B7)
-#define STATUS_JOURNAL_NOT_ACTIVE        ((NTSTATUS)0xC00002B8)
-#define STATUS_NOINTERFACE               ((NTSTATUS)0xC00002B9)
-#define STATUS_DS_ADMIN_LIMIT_EXCEEDED   ((NTSTATUS)0xC00002C1)
-#define STATUS_DRIVER_FAILED_SLEEP       ((NTSTATUS)0xC00002C2)
+#define STATUS_JOURNAL_NOT_ACTIVE               ((NTSTATUS)0xC00002B8)
+#define STATUS_NOINTERFACE                      ((NTSTATUS)0xC00002B9)
+#define STATUS_DS_ADMIN_LIMIT_EXCEEDED          ((NTSTATUS)0xC00002C1)
+#define STATUS_DRIVER_FAILED_SLEEP              ((NTSTATUS)0xC00002C2)
 #define STATUS_MUTUAL_AUTHENTICATION_FAILED     ((NTSTATUS)0xC00002C3)
-#define STATUS_CORRUPT_SYSTEM_FILE       ((NTSTATUS)0xC00002C4)
+#define STATUS_CORRUPT_SYSTEM_FILE              ((NTSTATUS)0xC00002C4)
 #define STATUS_DATATYPE_MISALIGNMENT_ERROR      ((NTSTATUS)0xC00002C5)
-#define STATUS_WMI_READ_ONLY             ((NTSTATUS)0xC00002C6)
-#define STATUS_WMI_SET_FAILURE           ((NTSTATUS)0xC00002C7)
-#define STATUS_COMMITMENT_MINIMUM        ((NTSTATUS)0xC00002C8)
-#define STATUS_REG_NAT_CONSUMPTION       ((NTSTATUS)0xC00002C9)
-#define STATUS_TRANSPORT_FULL            ((NTSTATUS)0xC00002CA)
-#define STATUS_DS_SAM_INIT_FAILURE       ((NTSTATUS)0xC00002CB)
-#define STATUS_ONLY_IF_CONNECTED         ((NTSTATUS)0xC00002CC)
+#define STATUS_WMI_READ_ONLY                    ((NTSTATUS)0xC00002C6)
+#define STATUS_WMI_SET_FAILURE                  ((NTSTATUS)0xC00002C7)
+#define STATUS_COMMITMENT_MINIMUM               ((NTSTATUS)0xC00002C8)
+#define STATUS_REG_NAT_CONSUMPTION              ((NTSTATUS)0xC00002C9)
+#define STATUS_TRANSPORT_FULL                   ((NTSTATUS)0xC00002CA)
+#define STATUS_DS_SAM_INIT_FAILURE              ((NTSTATUS)0xC00002CB)
+#define STATUS_ONLY_IF_CONNECTED                ((NTSTATUS)0xC00002CC)
 #define STATUS_DS_SENSITIVE_GROUP_VIOLATION     ((NTSTATUS)0xC00002CD)
-#define STATUS_PNP_RESTART_ENUMERATION   ((NTSTATUS)0xC00002CE)
-#define STATUS_JOURNAL_ENTRY_DELETED     ((NTSTATUS)0xC00002CF)
+#define STATUS_PNP_RESTART_ENUMERATION          ((NTSTATUS)0xC00002CE)
+#define STATUS_JOURNAL_ENTRY_DELETED            ((NTSTATUS)0xC00002CF)
 #define STATUS_DS_CANT_MOD_PRIMARYGROUPID       ((NTSTATUS)0xC00002D0)
-#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS)0xC00002D1)
-#define STATUS_PNP_REBOOT_REQUIRED       ((NTSTATUS)0xC00002D2)
-#define STATUS_POWER_STATE_INVALID       ((NTSTATUS)0xC00002D3)
-#define STATUS_DS_INVALID_GROUP_TYPE     ((NTSTATUS)0xC00002D4)
-#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN    ((NTSTATUS)0xC00002D5)
-#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN     ((NTSTATUS)0xC00002D6)
-#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D7)
-#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER     ((NTSTATUS)0xC00002D8)
-#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER      ((NTSTATUS)0xC00002D9)
-#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER   ((NTSTATUS)0xC00002DA)
+#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE       ((NTSTATUS)0xC00002D1)
+#define STATUS_PNP_REBOOT_REQUIRED              ((NTSTATUS)0xC00002D2)
+#define STATUS_POWER_STATE_INVALID              ((NTSTATUS)0xC00002D3)
+#define STATUS_DS_INVALID_GROUP_TYPE                            ((NTSTATUS)0xC00002D4)
+#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN            ((NTSTATUS)0xC00002D5)
+#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN             ((NTSTATUS)0xC00002D6)
+#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER                 ((NTSTATUS)0xC00002D7)
+#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER             ((NTSTATUS)0xC00002D8)
+#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER              ((NTSTATUS)0xC00002D9)
+#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER           ((NTSTATUS)0xC00002DA)
 #define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER      ((NTSTATUS)0xC00002DB)
-#define STATUS_DS_HAVE_PRIMARY_MEMBERS   ((NTSTATUS)0xC00002DC)
-#define STATUS_WMI_NOT_SUPPORTED         ((NTSTATUS)0xC00002DD)
-#define STATUS_INSUFFICIENT_POWER        ((NTSTATUS)0xC00002DE)
-#define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS)0xC00002DF)
-#define STATUS_SAM_NEED_BOOTKEY_FLOPPY   ((NTSTATUS)0xC00002E0)
-#define STATUS_DS_CANT_START             ((NTSTATUS)0xC00002E1)
-#define STATUS_DS_INIT_FAILURE           ((NTSTATUS)0xC00002E2)
-#define STATUS_SAM_INIT_FAILURE          ((NTSTATUS)0xC00002E3)
-#define STATUS_DS_GC_REQUIRED            ((NTSTATUS)0xC00002E4)
-#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY    ((NTSTATUS)0xC00002E5)
-#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS    ((NTSTATUS)0xC00002E6)
+#define STATUS_DS_HAVE_PRIMARY_MEMBERS                          ((NTSTATUS)0xC00002DC)
+#define STATUS_WMI_NOT_SUPPORTED                        ((NTSTATUS)0xC00002DD)
+#define STATUS_INSUFFICIENT_POWER                       ((NTSTATUS)0xC00002DE)
+#define STATUS_SAM_NEED_BOOTKEY_PASSWORD                ((NTSTATUS)0xC00002DF)
+#define STATUS_SAM_NEED_BOOTKEY_FLOPPY                  ((NTSTATUS)0xC00002E0)
+#define STATUS_DS_CANT_START                            ((NTSTATUS)0xC00002E1)
+#define STATUS_DS_INIT_FAILURE                          ((NTSTATUS)0xC00002E2)
+#define STATUS_SAM_INIT_FAILURE                         ((NTSTATUS)0xC00002E3)
+#define STATUS_DS_GC_REQUIRED                           ((NTSTATUS)0xC00002E4)
+#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY            ((NTSTATUS)0xC00002E5)
+#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS            ((NTSTATUS)0xC00002E6)
 #define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED        ((NTSTATUS)0xC00002E7)
-#define STATUS_MULTIPLE_FAULT_VIOLATION  ((NTSTATUS)0xC00002E8)
+#define STATUS_MULTIPLE_FAULT_VIOLATION         ((NTSTATUS)0xC00002E8)
 #define STATUS_CURRENT_DOMAIN_NOT_ALLOWED       ((NTSTATUS)0xC00002E9)
-#define STATUS_CANNOT_MAKE               ((NTSTATUS)0xC00002EA)
-#define STATUS_SYSTEM_SHUTDOWN           ((NTSTATUS)0xC00002EB)
-#define STATUS_DS_INIT_FAILURE_CONSOLE   ((NTSTATUS)0xC00002EC)
+#define STATUS_CANNOT_MAKE                      ((NTSTATUS)0xC00002EA)
+#define STATUS_SYSTEM_SHUTDOWN                  ((NTSTATUS)0xC00002EB)
+#define STATUS_DS_INIT_FAILURE_CONSOLE          ((NTSTATUS)0xC00002EC)
 #define STATUS_DS_SAM_INIT_FAILURE_CONSOLE      ((NTSTATUS)0xC00002ED)
 #define STATUS_UNFINISHED_CONTEXT_DELETED       ((NTSTATUS)0xC00002EE)
-#define STATUS_NO_TGT_REPLY              ((NTSTATUS)0xC00002EF)
-#define STATUS_OBJECTID_NOT_FOUND        ((NTSTATUS)0xC00002F0)
-#define STATUS_NO_IP_ADDRESSES           ((NTSTATUS)0xC00002F1)
-#define STATUS_WRONG_CREDENTIAL_HANDLE   ((NTSTATUS)0xC00002F2)
-#define STATUS_CRYPTO_SYSTEM_INVALID     ((NTSTATUS)0xC00002F3)
-#define STATUS_MAX_REFERRALS_EXCEEDED    ((NTSTATUS)0xC00002F4)
-#define STATUS_MUST_BE_KDC               ((NTSTATUS)0xC00002F5)
+#define STATUS_NO_TGT_REPLY                     ((NTSTATUS)0xC00002EF)
+#define STATUS_OBJECTID_NOT_FOUND               ((NTSTATUS)0xC00002F0)
+#define STATUS_NO_IP_ADDRESSES                  ((NTSTATUS)0xC00002F1)
+#define STATUS_WRONG_CREDENTIAL_HANDLE          ((NTSTATUS)0xC00002F2)
+#define STATUS_CRYPTO_SYSTEM_INVALID            ((NTSTATUS)0xC00002F3)
+#define STATUS_MAX_REFERRALS_EXCEEDED           ((NTSTATUS)0xC00002F4)
+#define STATUS_MUST_BE_KDC                      ((NTSTATUS)0xC00002F5)
 #define STATUS_STRONG_CRYPTO_NOT_SUPPORTED      ((NTSTATUS)0xC00002F6)
-#define STATUS_TOO_MANY_PRINCIPALS       ((NTSTATUS)0xC00002F7)
-#define STATUS_NO_PA_DATA                ((NTSTATUS)0xC00002F8)
-#define STATUS_PKINIT_NAME_MISMATCH      ((NTSTATUS)0xC00002F9)
-#define STATUS_SMARTCARD_LOGON_REQUIRED  ((NTSTATUS)0xC00002FA)
-#define STATUS_KDC_INVALID_REQUEST       ((NTSTATUS)0xC00002FB)
-#define STATUS_KDC_UNABLE_TO_REFER       ((NTSTATUS)0xC00002FC)
-#define STATUS_KDC_UNKNOWN_ETYPE         ((NTSTATUS)0xC00002FD)
-#define STATUS_SHUTDOWN_IN_PROGRESS      ((NTSTATUS)0xC00002FE)
+#define STATUS_TOO_MANY_PRINCIPALS              ((NTSTATUS)0xC00002F7)
+#define STATUS_NO_PA_DATA                       ((NTSTATUS)0xC00002F8)
+#define STATUS_PKINIT_NAME_MISMATCH             ((NTSTATUS)0xC00002F9)
+#define STATUS_SMARTCARD_LOGON_REQUIRED         ((NTSTATUS)0xC00002FA)
+#define STATUS_KDC_INVALID_REQUEST              ((NTSTATUS)0xC00002FB)
+#define STATUS_KDC_UNABLE_TO_REFER              ((NTSTATUS)0xC00002FC)
+#define STATUS_KDC_UNKNOWN_ETYPE                ((NTSTATUS)0xC00002FD)
+#define STATUS_SHUTDOWN_IN_PROGRESS             ((NTSTATUS)0xC00002FE)
 #define STATUS_SERVER_SHUTDOWN_IN_PROGRESS      ((NTSTATUS)0xC00002FF)
-#define STATUS_NOT_SUPPORTED_ON_SBS      ((NTSTATUS)0xC0000300)
-#define STATUS_WMI_GUID_DISCONNECTED     ((NTSTATUS)0xC0000301)
-#define STATUS_WMI_ALREADY_DISABLED      ((NTSTATUS)0xC0000302)
-#define STATUS_WMI_ALREADY_ENABLED       ((NTSTATUS)0xC0000303)
-#define STATUS_MFT_TOO_FRAGMENTED        ((NTSTATUS)0xC0000304)
-#define STATUS_COPY_PROTECTION_FAILURE   ((NTSTATUS)0xC0000305)
+#define STATUS_NOT_SUPPORTED_ON_SBS             ((NTSTATUS)0xC0000300)
+#define STATUS_WMI_GUID_DISCONNECTED            ((NTSTATUS)0xC0000301)
+#define STATUS_WMI_ALREADY_DISABLED             ((NTSTATUS)0xC0000302)
+#define STATUS_WMI_ALREADY_ENABLED              ((NTSTATUS)0xC0000303)
+#define STATUS_MFT_TOO_FRAGMENTED               ((NTSTATUS)0xC0000304)
+#define STATUS_COPY_PROTECTION_FAILURE          ((NTSTATUS)0xC0000305)
 #define STATUS_CSS_AUTHENTICATION_FAILURE       ((NTSTATUS)0xC0000306)
-#define STATUS_CSS_KEY_NOT_PRESENT       ((NTSTATUS)0xC0000307)
-#define STATUS_CSS_KEY_NOT_ESTABLISHED   ((NTSTATUS)0xC0000308)
-#define STATUS_CSS_SCRAMBLED_SECTOR      ((NTSTATUS)0xC0000309)
-#define STATUS_CSS_REGION_MISMATCH       ((NTSTATUS)0xC000030A)
-#define STATUS_CSS_RESETS_EXHAUSTED      ((NTSTATUS)0xC000030B)
-#define STATUS_PKINIT_FAILURE            ((NTSTATUS)0xC0000320)
+#define STATUS_CSS_KEY_NOT_PRESENT              ((NTSTATUS)0xC0000307)
+#define STATUS_CSS_KEY_NOT_ESTABLISHED          ((NTSTATUS)0xC0000308)
+#define STATUS_CSS_SCRAMBLED_SECTOR             ((NTSTATUS)0xC0000309)
+#define STATUS_CSS_REGION_MISMATCH              ((NTSTATUS)0xC000030A)
+#define STATUS_CSS_RESETS_EXHAUSTED             ((NTSTATUS)0xC000030B)
+#define STATUS_PKINIT_FAILURE                   ((NTSTATUS)0xC0000320)
 #define STATUS_SMARTCARD_SUBSYSTEM_FAILURE      ((NTSTATUS)0xC0000321)
-#define STATUS_NO_KERB_KEY               ((NTSTATUS)0xC0000322)
-#define STATUS_HOST_DOWN                 ((NTSTATUS)0xC0000350)
-#define STATUS_UNSUPPORTED_PREAUTH       ((NTSTATUS)0xC0000351)
-#define STATUS_EFS_ALG_BLOB_TOO_BIG      ((NTSTATUS)0xC0000352)
-#define STATUS_PORT_NOT_SET              ((NTSTATUS)0xC0000353)
-#define STATUS_DEBUGGER_INACTIVE         ((NTSTATUS)0xC0000354)
-#define STATUS_DS_VERSION_CHECK_FAILURE  ((NTSTATUS)0xC0000355)
-#define STATUS_AUDITING_DISABLED         ((NTSTATUS)0xC0000356)
-#define STATUS_PRENT4_MACHINE_ACCOUNT    ((NTSTATUS)0xC0000357)
+#define STATUS_NO_KERB_KEY                      ((NTSTATUS)0xC0000322)
+#define STATUS_HOST_DOWN                        ((NTSTATUS)0xC0000350)
+#define STATUS_UNSUPPORTED_PREAUTH              ((NTSTATUS)0xC0000351)
+#define STATUS_EFS_ALG_BLOB_TOO_BIG             ((NTSTATUS)0xC0000352)
+#define STATUS_PORT_NOT_SET                     ((NTSTATUS)0xC0000353)
+#define STATUS_DEBUGGER_INACTIVE                ((NTSTATUS)0xC0000354)
+#define STATUS_DS_VERSION_CHECK_FAILURE         ((NTSTATUS)0xC0000355)
+#define STATUS_AUDITING_DISABLED                ((NTSTATUS)0xC0000356)
+#define STATUS_PRENT4_MACHINE_ACCOUNT           ((NTSTATUS)0xC0000357)
 #define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS)0xC0000358)
-#define STATUS_INVALID_IMAGE_WIN_32      ((NTSTATUS)0xC0000359)
-#define STATUS_INVALID_IMAGE_WIN_64      ((NTSTATUS)0xC000035A)
-#define STATUS_BAD_BINDINGS              ((NTSTATUS)0xC000035B)
-#define STATUS_NETWORK_SESSION_EXPIRED   ((NTSTATUS)0xC000035C)
-#define STATUS_APPHELP_BLOCK             ((NTSTATUS)0xC000035D)
-#define STATUS_ALL_SIDS_FILTERED         ((NTSTATUS)0xC000035E)
-#define STATUS_NOT_SAFE_MODE_DRIVER      ((NTSTATUS)0xC000035F)
+#define STATUS_INVALID_IMAGE_WIN_32             ((NTSTATUS)0xC0000359)
+#define STATUS_INVALID_IMAGE_WIN_64             ((NTSTATUS)0xC000035A)
+#define STATUS_BAD_BINDINGS                     ((NTSTATUS)0xC000035B)
+#define STATUS_NETWORK_SESSION_EXPIRED          ((NTSTATUS)0xC000035C)
+#define STATUS_APPHELP_BLOCK                    ((NTSTATUS)0xC000035D)
+#define STATUS_ALL_SIDS_FILTERED                ((NTSTATUS)0xC000035E)
+#define STATUS_NOT_SAFE_MODE_DRIVER             ((NTSTATUS)0xC000035F)
 #define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT        ((NTSTATUS)0xC0000361)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH   ((NTSTATUS)0xC0000362)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH           ((NTSTATUS)0xC0000362)
 #define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER      ((NTSTATUS)0xC0000363)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER  ((NTSTATUS)0xC0000364)
-#define STATUS_FAILED_DRIVER_ENTRY       ((NTSTATUS)0xC0000365)
-#define STATUS_DEVICE_ENUMERATION_ERROR  ((NTSTATUS)0xC0000366)
-#define STATUS_WAIT_FOR_OPLOCK           ((NTSTATUS)0x00000367)
-#define STATUS_MOUNT_POINT_NOT_RESOLVED  ((NTSTATUS)0xC0000368)
-#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS)0xC0000369)
-#define STATUS_MCA_OCCURED               ((NTSTATUS)0xC000036A)
-#define STATUS_DRIVER_BLOCKED_CRITICAL   ((NTSTATUS)0xC000036B)
-#define STATUS_DRIVER_BLOCKED            ((NTSTATUS)0xC000036C)
-#define STATUS_DRIVER_DATABASE_ERROR     ((NTSTATUS)0xC000036D)
-#define STATUS_SYSTEM_HIVE_TOO_LARGE     ((NTSTATUS)0xC000036E)
-#define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS)0xC000036F)
-#define STATUS_SMARTCARD_WRONG_PIN       ((NTSTATUS)0xC0000380)
-#define STATUS_SMARTCARD_CARD_BLOCKED    ((NTSTATUS)0xC0000381)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER          ((NTSTATUS)0xC0000364)
+#define STATUS_FAILED_DRIVER_ENTRY              ((NTSTATUS)0xC0000365)
+#define STATUS_DEVICE_ENUMERATION_ERROR         ((NTSTATUS)0xC0000366)
+#define STATUS_WAIT_FOR_OPLOCK                  ((NTSTATUS)0x00000367)
+#define STATUS_MOUNT_POINT_NOT_RESOLVED         ((NTSTATUS)0xC0000368)
+#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER  ((NTSTATUS)0xC0000369)
+#define STATUS_MCA_OCCURED                      ((NTSTATUS)0xC000036A)
+#define STATUS_DRIVER_BLOCKED_CRITICAL          ((NTSTATUS)0xC000036B)
+#define STATUS_DRIVER_BLOCKED                   ((NTSTATUS)0xC000036C)
+#define STATUS_DRIVER_DATABASE_ERROR            ((NTSTATUS)0xC000036D)
+#define STATUS_SYSTEM_HIVE_TOO_LARGE            ((NTSTATUS)0xC000036E)
+#define STATUS_INVALID_IMPORT_OF_NON_DLL        ((NTSTATUS)0xC000036F)
+#define STATUS_SMARTCARD_WRONG_PIN              ((NTSTATUS)0xC0000380)
+#define STATUS_SMARTCARD_CARD_BLOCKED           ((NTSTATUS)0xC0000381)
 #define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS)0xC0000382)
-#define STATUS_SMARTCARD_NO_CARD         ((NTSTATUS)0xC0000383)
+#define STATUS_SMARTCARD_NO_CARD                ((NTSTATUS)0xC0000383)
 #define STATUS_SMARTCARD_NO_KEY_CONTAINER       ((NTSTATUS)0xC0000384)
-#define STATUS_SMARTCARD_NO_CERTIFICATE  ((NTSTATUS)0xC0000385)
-#define STATUS_SMARTCARD_NO_KEYSET       ((NTSTATUS)0xC0000386)
-#define STATUS_SMARTCARD_IO_ERROR        ((NTSTATUS)0xC0000387)
-#define STATUS_DOWNGRADE_DETECTED        ((NTSTATUS)0xC0000388)
-#define STATUS_SMARTCARD_CERT_REVOKED    ((NTSTATUS)0xC0000389)
-#define STATUS_ISSUING_CA_UNTRUSTED      ((NTSTATUS)0xC000038A)
-#define STATUS_REVOCATION_OFFLINE_C      ((NTSTATUS)0xC000038B)
-#define STATUS_PKINIT_CLIENT_FAILURE     ((NTSTATUS)0xC000038C)
-#define STATUS_SMARTCARD_CERT_EXPIRED    ((NTSTATUS)0xC000038D)
-#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS)0xC000038E)
-#define STATUS_SMARTCARD_SILENT_CONTEXT  ((NTSTATUS)0xC000038F)
-#define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS)0xC0000401)
-#define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS)0xC0000402)
+#define STATUS_SMARTCARD_NO_CERTIFICATE         ((NTSTATUS)0xC0000385)
+#define STATUS_SMARTCARD_NO_KEYSET              ((NTSTATUS)0xC0000386)
+#define STATUS_SMARTCARD_IO_ERROR               ((NTSTATUS)0xC0000387)
+#define STATUS_DOWNGRADE_DETECTED               ((NTSTATUS)0xC0000388)
+#define STATUS_SMARTCARD_CERT_REVOKED           ((NTSTATUS)0xC0000389)
+#define STATUS_ISSUING_CA_UNTRUSTED             ((NTSTATUS)0xC000038A)
+#define STATUS_REVOCATION_OFFLINE_C             ((NTSTATUS)0xC000038B)
+#define STATUS_PKINIT_CLIENT_FAILURE            ((NTSTATUS)0xC000038C)
+#define STATUS_SMARTCARD_CERT_EXPIRED           ((NTSTATUS)0xC000038D)
+#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD       ((NTSTATUS)0xC000038E)
+#define STATUS_SMARTCARD_SILENT_CONTEXT         ((NTSTATUS)0xC000038F)
+#define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED    ((NTSTATUS)0xC0000401)
+#define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED    ((NTSTATUS)0xC0000402)
 #define STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED ((NTSTATUS)0xC0000403)
-#define STATUS_DS_NAME_NOT_UNIQUE        ((NTSTATUS)0xC0000404)
-#define STATUS_DS_DUPLICATE_ID_FOUND     ((NTSTATUS)0xC0000405)
-#define STATUS_DS_GROUP_CONVERSION_ERROR ((NTSTATUS)0xC0000406)
-#define STATUS_VOLSNAP_PREPARE_HIBERNATE ((NTSTATUS)0xC0000407)
-#define STATUS_USER2USER_REQUIRED        ((NTSTATUS)0xC0000408)
-#define STATUS_STACK_BUFFER_OVERRUN      ((NTSTATUS)0xC0000409)
-#define STATUS_NO_S4U_PROT_SUPPORT       ((NTSTATUS)0xC000040A)
-#define STATUS_CROSSREALM_DELEGATION_FAILURE ((NTSTATUS)0xC000040B)
-#define STATUS_REVOCATION_OFFLINE_KDC    ((NTSTATUS)0xC000040C)
-#define STATUS_ISSUING_CA_UNTRUSTED_KDC  ((NTSTATUS)0xC000040D)
-#define STATUS_KDC_CERT_EXPIRED          ((NTSTATUS)0xC000040E)
-#define STATUS_KDC_CERT_REVOKED          ((NTSTATUS)0xC000040F)
-#define STATUS_PARAMETER_QUOTA_EXCEEDED  ((NTSTATUS)0xC0000410)
-#define STATUS_HIBERNATION_FAILURE       ((NTSTATUS)0xC0000411)
-#define STATUS_DELAY_LOAD_FAILED         ((NTSTATUS)0xC0000412)
-#define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS)0xC0000413)
-#define STATUS_VDM_DISALLOWED            ((NTSTATUS)0xC0000414)
-#define STATUS_HUNG_DISPLAY_DRIVER_THREAD ((NTSTATUS)0xC0000415)
-#define STATUS_ASSERTION_FAILURE         ((NTSTATUS)0xC0000420L)
-#define STATUS_CALLBACK_POP_STACK        ((NTSTATUS)0xC0000423)
-#define STATUS_WOW_ASSERTION             ((NTSTATUS)0xC0009898)
+#define STATUS_DS_NAME_NOT_UNIQUE               ((NTSTATUS)0xC0000404)
+#define STATUS_DS_DUPLICATE_ID_FOUND            ((NTSTATUS)0xC0000405)
+#define STATUS_DS_GROUP_CONVERSION_ERROR        ((NTSTATUS)0xC0000406)
+#define STATUS_VOLSNAP_PREPARE_HIBERNATE        ((NTSTATUS)0xC0000407)
+#define STATUS_USER2USER_REQUIRED               ((NTSTATUS)0xC0000408)
+#define STATUS_STACK_BUFFER_OVERRUN             ((NTSTATUS)0xC0000409)
+#define STATUS_NO_S4U_PROT_SUPPORT              ((NTSTATUS)0xC000040A)
+#define STATUS_CROSSREALM_DELEGATION_FAILURE    ((NTSTATUS)0xC000040B)
+#define STATUS_REVOCATION_OFFLINE_KDC           ((NTSTATUS)0xC000040C)
+#define STATUS_ISSUING_CA_UNTRUSTED_KDC         ((NTSTATUS)0xC000040D)
+#define STATUS_KDC_CERT_EXPIRED                 ((NTSTATUS)0xC000040E)
+#define STATUS_KDC_CERT_REVOKED                 ((NTSTATUS)0xC000040F)
+#define STATUS_PARAMETER_QUOTA_EXCEEDED         ((NTSTATUS)0xC0000410)
+#define STATUS_HIBERNATION_FAILURE              ((NTSTATUS)0xC0000411)
+#define STATUS_DELAY_LOAD_FAILED                ((NTSTATUS)0xC0000412)
+#define STATUS_AUTHENTICATION_FIREWALL_FAILED   ((NTSTATUS)0xC0000413)
+#define STATUS_VDM_DISALLOWED                   ((NTSTATUS)0xC0000414)
+#define STATUS_HUNG_DISPLAY_DRIVER_THREAD       ((NTSTATUS)0xC0000415)
+#define STATUS_ASSERTION_FAILURE                ((NTSTATUS)0xC0000420L)
+#define STATUS_CALLBACK_POP_STACK               ((NTSTATUS)0xC0000423)
+#define STATUS_WOW_ASSERTION                    ((NTSTATUS)0xC0009898)
 
 #define RPC_NT_INVALID_STRING_BINDING    ((NTSTATUS)0xC0020001)
 #define RPC_NT_WRONG_KIND_OF_BINDING     ((NTSTATUS)0xC0020002)
 #define RPC_NT_PIPE_DISCIPLINE_ERROR     ((NTSTATUS)0xC0030060)
 #define RPC_NT_PIPE_EMPTY                ((NTSTATUS)0xC0030061)
 
-#define STATUS_PNP_BAD_MPS_TABLE         ((NTSTATUS)0xC0040035)
-#define STATUS_PNP_TRANSLATION_FAILED    ((NTSTATUS)0xC0040036)
+#define STATUS_PNP_BAD_MPS_TABLE          ((NTSTATUS)0xC0040035)
+#define STATUS_PNP_TRANSLATION_FAILED     ((NTSTATUS)0xC0040036)
 #define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS)0xC0040037)
-#define STATUS_PNP_INVALID_ID            ((NTSTATUS)0xC0040038)
+#define STATUS_PNP_INVALID_ID             ((NTSTATUS)0xC0040038)
+
+#define STATUS_ACPI_INVALID_OPCODE              ((NTSTATUS)0xC0140001L)
+#define STATUS_ACPI_STACK_OVERFLOW              ((NTSTATUS)0xC0140002L)
+#define STATUS_ACPI_ASSERT_FAILED               ((NTSTATUS)0xC0140003L)
+#define STATUS_ACPI_INVALID_INDEX               ((NTSTATUS)0xC0140004L)
+#define STATUS_ACPI_INVALID_ARGUMENT            ((NTSTATUS)0xC0140005L)
+#define STATUS_ACPI_FATAL                       ((NTSTATUS)0xC0140006L)
+#define STATUS_ACPI_INVALID_SUPERNAME           ((NTSTATUS)0xC0140007L)
+#define STATUS_ACPI_INVALID_ARGTYPE             ((NTSTATUS)0xC0140008L)
+#define STATUS_ACPI_INVALID_OBJTYPE             ((NTSTATUS)0xC0140009L)
+#define STATUS_ACPI_INVALID_TARGETTYPE          ((NTSTATUS)0xC014000AL)
+#define STATUS_ACPI_INCORRECT_ARGUMENT_COUNT    ((NTSTATUS)0xC014000BL)
+#define STATUS_ACPI_ADDRESS_NOT_MAPPED          ((NTSTATUS)0xC014000CL)
+#define STATUS_ACPI_INVALID_EVENTTYPE           ((NTSTATUS)0xC014000DL)
+#define STATUS_ACPI_HANDLER_COLLISION           ((NTSTATUS)0xC014000EL)
+#define STATUS_ACPI_INVALID_DATA                ((NTSTATUS)0xC014000FL)
+#define STATUS_ACPI_INVALID_REGION              ((NTSTATUS)0xC0140010L)
+#define STATUS_ACPI_INVALID_ACCESS_SIZE         ((NTSTATUS)0xC0140011L)
+#define STATUS_ACPI_ACQUIRE_GLOBAL_LOCK         ((NTSTATUS)0xC0140012L)
+#define STATUS_ACPI_ALREADY_INITIALIZED         ((NTSTATUS)0xC0140013L)
+#define STATUS_ACPI_NOT_INITIALIZED             ((NTSTATUS)0xC0140014L)
+#define STATUS_ACPI_INVALID_MUTEX_LEVEL         ((NTSTATUS)0xC0140015L)
+#define STATUS_ACPI_MUTEX_NOT_OWNED             ((NTSTATUS)0xC0140016L)
+#define STATUS_ACPI_MUTEX_NOT_OWNER             ((NTSTATUS)0xC0140017L)
+#define STATUS_ACPI_RS_ACCESS                   ((NTSTATUS)0xC0140018L)
+#define STATUS_ACPI_INVALID_TABLE               ((NTSTATUS)0xC0140019L)
+#define STATUS_ACPI_REG_HANDLER_FAILED          ((NTSTATUS)0xC0140020L)
+#define STATUS_ACPI_POWER_REQUEST_FAILED        ((NTSTATUS)0xC0140021L)
 
 #define STATUS_CTX_WINSTATION_NAME_INVALID      ((NTSTATUS)0xC00A0001)
-#define STATUS_CTX_INVALID_PD            ((NTSTATUS)0xC00A0002)
-#define STATUS_CTX_PD_NOT_FOUND          ((NTSTATUS)0xC00A0003)
-#define STATUS_CTX_CLOSE_PENDING         ((NTSTATUS)0xC00A0006)
-#define STATUS_CTX_NO_OUTBUF             ((NTSTATUS)0xC00A0007)
-#define STATUS_CTX_MODEM_INF_NOT_FOUND   ((NTSTATUS)0xC00A0008)
-#define STATUS_CTX_INVALID_MODEMNAME     ((NTSTATUS)0xC00A0009)
-#define STATUS_CTX_RESPONSE_ERROR        ((NTSTATUS)0xC00A000A)
+#define STATUS_CTX_INVALID_PD                   ((NTSTATUS)0xC00A0002)
+#define STATUS_CTX_PD_NOT_FOUND                 ((NTSTATUS)0xC00A0003)
+#define STATUS_CTX_CLOSE_PENDING                ((NTSTATUS)0xC00A0006)
+#define STATUS_CTX_NO_OUTBUF                    ((NTSTATUS)0xC00A0007)
+#define STATUS_CTX_MODEM_INF_NOT_FOUND          ((NTSTATUS)0xC00A0008)
+#define STATUS_CTX_INVALID_MODEMNAME            ((NTSTATUS)0xC00A0009)
+#define STATUS_CTX_RESPONSE_ERROR               ((NTSTATUS)0xC00A000A)
 #define STATUS_CTX_MODEM_RESPONSE_TIMEOUT       ((NTSTATUS)0xC00A000B)
 #define STATUS_CTX_MODEM_RESPONSE_NO_CARRIER    ((NTSTATUS)0xC00A000C)
 #define STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE   ((NTSTATUS)0xC00A000D)
-#define STATUS_CTX_MODEM_RESPONSE_BUSY   ((NTSTATUS)0xC00A000E)
-#define STATUS_CTX_MODEM_RESPONSE_VOICE  ((NTSTATUS)0xC00A000F)
-#define STATUS_CTX_TD_ERROR              ((NTSTATUS)0xC00A0010)
+#define STATUS_CTX_MODEM_RESPONSE_BUSY          ((NTSTATUS)0xC00A000E)
+#define STATUS_CTX_MODEM_RESPONSE_VOICE         ((NTSTATUS)0xC00A000F)
+#define STATUS_CTX_TD_ERROR                     ((NTSTATUS)0xC00A0010)
 #define STATUS_CTX_LICENSE_CLIENT_INVALID       ((NTSTATUS)0xC00A0012)
-#define STATUS_CTX_LICENSE_NOT_AVAILABLE ((NTSTATUS)0xC00A0013)
-#define STATUS_CTX_LICENSE_EXPIRED       ((NTSTATUS)0xC00A0014)
-#define STATUS_CTX_WINSTATION_NOT_FOUND  ((NTSTATUS)0xC00A0015)
+#define STATUS_CTX_LICENSE_NOT_AVAILABLE        ((NTSTATUS)0xC00A0013)
+#define STATUS_CTX_LICENSE_EXPIRED              ((NTSTATUS)0xC00A0014)
+#define STATUS_CTX_WINSTATION_NOT_FOUND         ((NTSTATUS)0xC00A0015)
 #define STATUS_CTX_WINSTATION_NAME_COLLISION    ((NTSTATUS)0xC00A0016)
-#define STATUS_CTX_WINSTATION_BUSY       ((NTSTATUS)0xC00A0017)
-#define STATUS_CTX_BAD_VIDEO_MODE        ((NTSTATUS)0xC00A0018)
-#define STATUS_CTX_GRAPHICS_INVALID      ((NTSTATUS)0xC00A0022)
-#define STATUS_CTX_NOT_CONSOLE           ((NTSTATUS)0xC00A0024)
-#define STATUS_CTX_CLIENT_QUERY_TIMEOUT  ((NTSTATUS)0xC00A0026)
-#define STATUS_CTX_CONSOLE_DISCONNECT    ((NTSTATUS)0xC00A0027)
-#define STATUS_CTX_CONSOLE_CONNECT       ((NTSTATUS)0xC00A0028)
-#define STATUS_CTX_SHADOW_DENIED         ((NTSTATUS)0xC00A002A)
+#define STATUS_CTX_WINSTATION_BUSY              ((NTSTATUS)0xC00A0017)
+#define STATUS_CTX_BAD_VIDEO_MODE               ((NTSTATUS)0xC00A0018)
+#define STATUS_CTX_GRAPHICS_INVALID             ((NTSTATUS)0xC00A0022)
+#define STATUS_CTX_NOT_CONSOLE                  ((NTSTATUS)0xC00A0024)
+#define STATUS_CTX_CLIENT_QUERY_TIMEOUT         ((NTSTATUS)0xC00A0026)
+#define STATUS_CTX_CONSOLE_DISCONNECT           ((NTSTATUS)0xC00A0027)
+#define STATUS_CTX_CONSOLE_CONNECT              ((NTSTATUS)0xC00A0028)
+#define STATUS_CTX_SHADOW_DENIED                ((NTSTATUS)0xC00A002A)
 #define STATUS_CTX_WINSTATION_ACCESS_DENIED     ((NTSTATUS)0xC00A002B)
-#define STATUS_CTX_INVALID_WD            ((NTSTATUS)0xC00A002E)
-#define STATUS_CTX_WD_NOT_FOUND          ((NTSTATUS)0xC00A002F)
-#define STATUS_CTX_SHADOW_INVALID        ((NTSTATUS)0xC00A0030)
-#define STATUS_CTX_SHADOW_DISABLED       ((NTSTATUS)0xC00A0031)
-#define STATUS_RDP_PROTOCOL_ERROR        ((NTSTATUS)0xC00A0032)
+#define STATUS_CTX_INVALID_WD                   ((NTSTATUS)0xC00A002E)
+#define STATUS_CTX_WD_NOT_FOUND                 ((NTSTATUS)0xC00A002F)
+#define STATUS_CTX_SHADOW_INVALID               ((NTSTATUS)0xC00A0030)
+#define STATUS_CTX_SHADOW_DISABLED              ((NTSTATUS)0xC00A0031)
+#define STATUS_RDP_PROTOCOL_ERROR               ((NTSTATUS)0xC00A0032)
 #define STATUS_CTX_CLIENT_LICENSE_NOT_SET       ((NTSTATUS)0xC00A0033)
-#define STATUS_CTX_CLIENT_LICENSE_IN_USE ((NTSTATUS)0xC00A0034)
+#define STATUS_CTX_CLIENT_LICENSE_IN_USE        ((NTSTATUS)0xC00A0034)
 #define STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE  ((NTSTATUS)0xC00A0035)
-#define STATUS_CTX_SHADOW_NOT_RUNNING    ((NTSTATUS)0xC00A0036)
+#define STATUS_CTX_SHADOW_NOT_RUNNING           ((NTSTATUS)0xC00A0036)
 
-#define STATUS_CLUSTER_INVALID_NODE      ((NTSTATUS)0xC0130001)
-#define STATUS_CLUSTER_NODE_EXISTS       ((NTSTATUS)0xC0130002)
-#define STATUS_CLUSTER_JOIN_IN_PROGRESS  ((NTSTATUS)0xC0130003)
-#define STATUS_CLUSTER_NODE_NOT_FOUND    ((NTSTATUS)0xC0130004)
+#define STATUS_CLUSTER_INVALID_NODE             ((NTSTATUS)0xC0130001)
+#define STATUS_CLUSTER_NODE_EXISTS              ((NTSTATUS)0xC0130002)
+#define STATUS_CLUSTER_JOIN_IN_PROGRESS         ((NTSTATUS)0xC0130003)
+#define STATUS_CLUSTER_NODE_NOT_FOUND           ((NTSTATUS)0xC0130004)
 #define STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND     ((NTSTATUS)0xC0130005)
-#define STATUS_CLUSTER_NETWORK_EXISTS    ((NTSTATUS)0xC0130006)
-#define STATUS_CLUSTER_NETWORK_NOT_FOUND ((NTSTATUS)0xC0130007)
+#define STATUS_CLUSTER_NETWORK_EXISTS           ((NTSTATUS)0xC0130006)
+#define STATUS_CLUSTER_NETWORK_NOT_FOUND        ((NTSTATUS)0xC0130007)
 #define STATUS_CLUSTER_NETINTERFACE_EXISTS      ((NTSTATUS)0xC0130008)
 #define STATUS_CLUSTER_NETINTERFACE_NOT_FOUND   ((NTSTATUS)0xC0130009)
-#define STATUS_CLUSTER_INVALID_REQUEST   ((NTSTATUS)0xC013000A)
+#define STATUS_CLUSTER_INVALID_REQUEST          ((NTSTATUS)0xC013000A)
 #define STATUS_CLUSTER_INVALID_NETWORK_PROVIDER ((NTSTATUS)0xC013000B)
-#define STATUS_CLUSTER_NODE_DOWN         ((NTSTATUS)0xC013000C)
-#define STATUS_CLUSTER_NODE_UNREACHABLE  ((NTSTATUS)0xC013000D)
-#define STATUS_CLUSTER_NODE_NOT_MEMBER   ((NTSTATUS)0xC013000E)
+#define STATUS_CLUSTER_NODE_DOWN                ((NTSTATUS)0xC013000C)
+#define STATUS_CLUSTER_NODE_UNREACHABLE         ((NTSTATUS)0xC013000D)
+#define STATUS_CLUSTER_NODE_NOT_MEMBER          ((NTSTATUS)0xC013000E)
 #define STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS     ((NTSTATUS)0xC013000F)
-#define STATUS_CLUSTER_INVALID_NETWORK   ((NTSTATUS)0xC0130010)
-#define STATUS_CLUSTER_NO_NET_ADAPTERS   ((NTSTATUS)0xC0130011)
-#define STATUS_CLUSTER_NODE_UP           ((NTSTATUS)0xC0130012)
-#define STATUS_CLUSTER_NODE_PAUSED       ((NTSTATUS)0xC0130013)
-#define STATUS_CLUSTER_NODE_NOT_PAUSED   ((NTSTATUS)0xC0130014)
+#define STATUS_CLUSTER_INVALID_NETWORK          ((NTSTATUS)0xC0130010)
+#define STATUS_CLUSTER_NO_NET_ADAPTERS          ((NTSTATUS)0xC0130011)
+#define STATUS_CLUSTER_NODE_UP                  ((NTSTATUS)0xC0130012)
+#define STATUS_CLUSTER_NODE_PAUSED              ((NTSTATUS)0xC0130013)
+#define STATUS_CLUSTER_NODE_NOT_PAUSED          ((NTSTATUS)0xC0130014)
 #define STATUS_CLUSTER_NO_SECURITY_CONTEXT      ((NTSTATUS)0xC0130015)
 #define STATUS_CLUSTER_NETWORK_NOT_INTERNAL     ((NTSTATUS)0xC0130016)
-#define STATUS_CLUSTER_POISONED          ((NTSTATUS)0xC0130017)
+#define STATUS_CLUSTER_POISONED                 ((NTSTATUS)0xC0130017)
 
-#define STATUS_SXS_SECTION_NOT_FOUND     ((NTSTATUS)0xC0150001)
-#define STATUS_SXS_CANT_GEN_ACTCTX       ((NTSTATUS)0xC0150002)
+#define STATUS_SXS_SECTION_NOT_FOUND            ((NTSTATUS)0xC0150001)
+#define STATUS_SXS_CANT_GEN_ACTCTX              ((NTSTATUS)0xC0150002)
 #define STATUS_SXS_INVALID_ACTCTXDATA_FORMAT    ((NTSTATUS)0xC0150003)
-#define STATUS_SXS_ASSEMBLY_NOT_FOUND    ((NTSTATUS)0xC0150004)
-#define STATUS_SXS_MANIFEST_FORMAT_ERROR ((NTSTATUS)0xC0150005)
-#define STATUS_SXS_MANIFEST_PARSE_ERROR  ((NTSTATUS)0xC0150006)
+#define STATUS_SXS_ASSEMBLY_NOT_FOUND           ((NTSTATUS)0xC0150004)
+#define STATUS_SXS_MANIFEST_FORMAT_ERROR        ((NTSTATUS)0xC0150005)
+#define STATUS_SXS_MANIFEST_PARSE_ERROR         ((NTSTATUS)0xC0150006)
 #define STATUS_SXS_ACTIVATION_CONTEXT_DISABLED  ((NTSTATUS)0xC0150007)
-#define STATUS_SXS_KEY_NOT_FOUND         ((NTSTATUS)0xC0150008)
-#define STATUS_SXS_VERSION_CONFLICT      ((NTSTATUS)0xC0150009)
-#define STATUS_SXS_WRONG_SECTION_TYPE    ((NTSTATUS)0xC015000A)
+#define STATUS_SXS_KEY_NOT_FOUND                ((NTSTATUS)0xC0150008)
+#define STATUS_SXS_VERSION_CONFLICT             ((NTSTATUS)0xC0150009)
+#define STATUS_SXS_WRONG_SECTION_TYPE           ((NTSTATUS)0xC015000A)
 #define STATUS_SXS_THREAD_QUERIES_DISABLED      ((NTSTATUS)0xC015000B)
-#define STATUS_SXS_ASSEMBLY_MISSING      ((NTSTATUS)0xC015000C)
+#define STATUS_SXS_ASSEMBLY_MISSING             ((NTSTATUS)0xC015000C)
 #define STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET  ((NTSTATUS)0xC015000E)
-#define STATUS_SXS_EARLY_DEACTIVATION    ((NTSTATUS)0xC015000F)
-#define STATUS_SXS_INVALID_DEACTIVATION  ((NTSTATUS)0xC0150010)
-#define STATUS_SXS_MULTIPLE_DEACTIVATION ((NTSTATUS)0xC0150011)
+#define STATUS_SXS_EARLY_DEACTIVATION           ((NTSTATUS)0xC015000F)
+#define STATUS_SXS_INVALID_DEACTIVATION         ((NTSTATUS)0xC0150010)
+#define STATUS_SXS_MULTIPLE_DEACTIVATION        ((NTSTATUS)0xC0150011)
 #define STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY ((NTSTATUS)0xC0150012)
 #define STATUS_SXS_PROCESS_TERMINATION_REQUESTED ((NTSTATUS)0xC0150013)
 #define STATUS_SXS_CORRUPT_ACTIVATION_STACK ((NTSTATUS)0xC0150014)
-#define STATUS_SXS_CORRUPTION            ((NTSTATUS)0xC0150015)
+#define STATUS_SXS_CORRUPTION                   ((NTSTATUS)0xC0150015)
 
 #endif /* WIN32_NO_STATUS */
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _NTSTATUS_ */
similarity index 81%
rename from reactos/include/ddk/tvout.h
rename to reactos/include/psdk/tvout.h
index d2e33c2..8174614 100644 (file)
  *
  */
 
-#ifndef __TVOUT_H
-#define __TVOUT_H
-
-
-#if _MSC_VER > 1000
 #pragma once
-#endif
-
 
 #ifndef GUID_DEFINED
 #include <guiddef.h>
 #define VP_CP_CMD_CHANGE                  0x00000004
 
 typedef struct _VIDEOPARAMETERS {
-  GUID  Guid;
-  ULONG  dwOffset;
-  ULONG  dwCommand;
-  ULONG  dwFlags;
-  ULONG  dwMode;
-  ULONG  dwTVStandard;
-  ULONG  dwAvailableModes;
-  ULONG  dwAvailableTVStandard;
-  ULONG  dwFlickerFilter;
-  ULONG  dwOverScanX;
-  ULONG  dwOverScanY;
-  ULONG  dwMaxUnscaledX;
-  ULONG  dwMaxUnscaledY;
-  ULONG  dwPositionX;
-  ULONG  dwPositionY;
-  ULONG  dwBrightness;
-  ULONG  dwContrast;
-  ULONG  dwCPType;
-  ULONG  dwCPCommand;
-  ULONG  dwCPStandard;
-  ULONG  dwCPKey;
-  ULONG  bCP_APSTriggerBits;
-  UCHAR  bOEMCopyProtection[256];
-} VIDEOPARAMETERS, *PVIDEOPARAMETERS, FAR *LPVIDEOPARAMETERS;
-
-
-#endif /* __TVOUT_H */
+  GUID Guid;
+  ULONG dwOffset;
+  ULONG dwCommand;
+  ULONG dwFlags;
+  ULONG dwMode;
+  ULONG dwTVStandard;
+  ULONG dwAvailableModes;
+  ULONG dwAvailableTVStandard;
+  ULONG dwFlickerFilter;
+  ULONG dwOverScanX;
+  ULONG dwOverScanY;
+  ULONG dwMaxUnscaledX;
+  ULONG dwMaxUnscaledY;
+  ULONG dwPositionX;
+  ULONG dwPositionY;
+  ULONG dwBrightness;
+  ULONG dwContrast;
+  ULONG dwCPType;
+  ULONG dwCPCommand;
+  ULONG dwCPStandard;
+  ULONG dwCPKey;
+  ULONG bCP_APSTriggerBits;
+  UCHAR bOEMCopyProtection[256];
+} VIDEOPARAMETERS, *PVIDEOPARAMETERS, *LPVIDEOPARAMETERS;
index 69541cb..d9aebda 100644 (file)
@@ -665,6 +665,8 @@ typedef struct _USB_DEVICE_PERFORMANCE_INFO {
 
 #include <poppack.h>
 
+#endif /* USB_KERNEL_IOCTL */
+
 #ifdef __cplusplus
 }
 #endif
index b7a5fd2..6b38dac 100644 (file)
@@ -1505,14 +1505,14 @@ DWORD WINAPI GetFirmwareEnvironmentVariableA(LPCSTR,LPCSTR,PVOID,DWORD);
 DWORD WINAPI GetFirmwareEnvironmentVariableW(LPCWSTR,LPCWSTR,PVOID,DWORD);
 #endif
 BOOL WINAPI FlushFileBuffers(HANDLE);
-BOOL WINAPI FlushInstructionCache(HANDLE,PCVOID,DWORD);
-BOOL WINAPI FlushViewOfFile(PCVOID,SIZE_T);
+BOOL WINAPI FlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
+BOOL WINAPI FlushViewOfFile(LPCVOID,SIZE_T);
 DWORD WINAPI FlsAlloc(PFLS_CALLBACK_FUNCTION);
 PVOID WINAPI FlsGetValue(DWORD);
 BOOL WINAPI FlsSetValue(DWORD,PVOID);
 BOOL WINAPI FlsFree(DWORD);
-DWORD WINAPI FormatMessageA(DWORD,PCVOID,DWORD,DWORD,LPSTR,DWORD,va_list*);
-DWORD WINAPI FormatMessageW(DWORD,PCVOID,DWORD,DWORD,LPWSTR,DWORD,va_list*);
+DWORD WINAPI FormatMessageA(DWORD,LPCVOID,DWORD,DWORD,LPSTR,DWORD,va_list*);
+DWORD WINAPI FormatMessageW(DWORD,LPCVOID,DWORD,DWORD,LPWSTR,DWORD,va_list*);
 BOOL WINAPI FreeEnvironmentStringsA(LPSTR);
 BOOL WINAPI FreeEnvironmentStringsW(LPWSTR);
 BOOL WINAPI FreeLibrary(HMODULE);
@@ -1763,7 +1763,7 @@ UINT WINAPI GlobalFlags(HGLOBAL); /* Obsolete: Has no effect. */
 HGLOBAL WINAPI GlobalFree(HGLOBAL);
 UINT WINAPI GlobalGetAtomNameA(ATOM,LPSTR,int);
 UINT WINAPI GlobalGetAtomNameW(ATOM,LPWSTR,int);
-HGLOBAL WINAPI GlobalHandle(PCVOID);
+HGLOBAL WINAPI GlobalHandle(LPCVOID);
 LPVOID WINAPI GlobalLock(HGLOBAL);
 VOID WINAPI GlobalMemoryStatus(LPMEMORYSTATUS);
 #if (_WIN32_WINNT >= 0x0500)
@@ -1789,9 +1789,9 @@ PVOID WINAPI HeapReAlloc(HANDLE,DWORD,PVOID,DWORD);
 #if (_WIN32_WINNT >= 0x0501)
 BOOL WINAPI HeapSetInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T);
 #endif
-DWORD WINAPI HeapSize(HANDLE,DWORD,PCVOID);
+SIZE_T WINAPI HeapSize(HANDLE,DWORD,LPCVOID);
 BOOL WINAPI HeapUnlock(HANDLE);
-BOOL WINAPI HeapValidate(HANDLE,DWORD,PCVOID);
+BOOL WINAPI HeapValidate(HANDLE,DWORD,LPCVOID);
 BOOL WINAPI HeapWalk(HANDLE,LPPROCESS_HEAP_ENTRY);
 BOOL WINAPI ImpersonateAnonymousToken(HANDLE);
 BOOL WINAPI ImpersonateLoggedOnUser(HANDLE);
@@ -1948,9 +1948,9 @@ InterlockedOr_Inline(IN OUT volatile LONG *Target,
 #endif /* __INTERLOCKED_DECLARED */
 
 BOOL WINAPI IsBadCodePtr(FARPROC);
-BOOL WINAPI IsBadHugeReadPtr(PCVOID,UINT_PTR);
+BOOL WINAPI IsBadHugeReadPtr(CONST VOID*,UINT_PTR);
 BOOL WINAPI IsBadHugeWritePtr(PVOID,UINT_PTR);
-BOOL WINAPI IsBadReadPtr(PCVOID,UINT_PTR);
+BOOL WINAPI IsBadReadPtr(CONST VOID*,UINT_PTR);
 BOOL WINAPI IsBadStringPtrA(LPCSTR,UINT_PTR);
 BOOL WINAPI IsBadStringPtrW(LPCWSTR,UINT_PTR);
 BOOL WINAPI IsBadWritePtr(PVOID,UINT_PTR);
@@ -1960,7 +1960,7 @@ BOOL WINAPI IsProcessInJob(HANDLE,HANDLE,PBOOL);
 #endif
 BOOL WINAPI IsProcessorFeaturePresent(DWORD);
 BOOL WINAPI IsSystemResumeAutomatic(void);
-BOOL WINAPI IsTextUnicode(PCVOID,int,LPINT);
+BOOL WINAPI IsTextUnicode(CONST VOID*,int,LPINT);
 #if (_WIN32_WINNT >= 0x0600)
 BOOL WINAPI IsThreadAFiber(VOID);
 #endif
@@ -2100,7 +2100,7 @@ BOOL WINAPI ReadEventLogW(HANDLE,DWORD,DWORD,PVOID,DWORD,DWORD *,DWORD *);
 BOOL WINAPI ReadFile(HANDLE,PVOID,DWORD,PDWORD,LPOVERLAPPED);
 BOOL WINAPI ReadFileEx(HANDLE,PVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
 BOOL WINAPI ReadFileScatter(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
-BOOL WINAPI ReadProcessMemory(HANDLE,PCVOID,PVOID,SIZE_T,PSIZE_T);
+BOOL WINAPI ReadProcessMemory(HANDLE,LPCVOID,LPVOID,SIZE_T,PSIZE_T);
 #if (_WIN32_WINNT >= 0x0600)
 VOID WINAPI RecoveryFinished(BOOL);
 HRESULT WINAPI RecoveryInProgress(OUT PBOOL);
@@ -2301,8 +2301,8 @@ VOID WINAPI WakeConditionVariable(PCONDITION_VARIABLE);
 VOID WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE);
 #endif
 BOOL WINAPI WinLoadTrustProvider(GUID*);
-BOOL WINAPI WriteFile(HANDLE,PCVOID,DWORD,PDWORD,LPOVERLAPPED);
-BOOL WINAPI WriteFileEx(HANDLE,PCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+BOOL WINAPI WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
+BOOL WINAPI WriteFileEx(HANDLE,LPCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
 BOOL WINAPI WriteFileGather(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
 BOOL WINAPI WritePrivateProfileSectionA(LPCSTR,LPCSTR,LPCSTR);
 BOOL WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR);
index f2dd6fa..a7916b4 100644 (file)
@@ -223,8 +223,8 @@ BOOL WINAPI SetConsoleTextAttribute(HANDLE,WORD);
 BOOL WINAPI SetConsoleTitleA(LPCSTR);
 BOOL WINAPI SetConsoleTitleW(LPCWSTR);
 BOOL WINAPI SetConsoleWindowInfo(HANDLE,BOOL,const SMALL_RECT*);
-BOOL WINAPI WriteConsoleA(HANDLE,PCVOID,DWORD,PDWORD,PVOID);
-BOOL WINAPI WriteConsoleW(HANDLE,PCVOID,DWORD,PDWORD,PVOID);
+BOOL WINAPI WriteConsoleA(HANDLE,CONST VOID*,DWORD,LPDWORD,LPVOID);
+BOOL WINAPI WriteConsoleW(HANDLE,CONST VOID*,DWORD,LPDWORD,LPVOID);
 BOOL WINAPI WriteConsoleInputA(HANDLE,const INPUT_RECORD*,DWORD,PDWORD);
 BOOL WINAPI WriteConsoleInputW(HANDLE,const INPUT_RECORD*,DWORD,PDWORD);
 BOOL WINAPI WriteConsoleOutputA(HANDLE,const CHAR_INFO*,COORD,COORD,PSMALL_RECT);
index a168b26..a29a959 100644 (file)
@@ -305,7 +305,7 @@ typedef long *LPLONG;
 typedef int *LPLONG;
 #endif
 typedef DWORD *PDWORD,*LPDWORD;
-typedef CONST void *PCVOID,*LPCVOID;
+typedef CONST void *LPCVOID;
 
 typedef unsigned int UINT,*PUINT,*LPUINT;
 
index f67ab61..a1bf2f9 100644 (file)
@@ -2831,7 +2831,7 @@ HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE,LPCSTR);
 HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE,LPCWSTR);
 HMETAFILE WINAPI CopyMetaFileA(HMETAFILE,LPCSTR);
 HMETAFILE WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR);
-HBITMAP WINAPI CreateBitmap(int,int,UINT,UINT,PCVOID);
+HBITMAP WINAPI CreateBitmap(int,int,UINT,UINT,CONST VOID*);
 HBITMAP WINAPI CreateBitmapIndirect(const BITMAP*);
 HBRUSH WINAPI CreateBrushIndirect(const LOGBRUSH*);
 HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA);
@@ -2840,9 +2840,9 @@ HBITMAP WINAPI CreateCompatibleBitmap(HDC,int,int);
 HDC WINAPI CreateCompatibleDC(HDC);
 HDC WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
 HDC WINAPI CreateDCW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
-HBITMAP WINAPI CreateDIBitmap(HDC,const BITMAPINFOHEADER*,DWORD,PCVOID,const BITMAPINFO*,UINT);
+HBITMAP WINAPI CreateDIBitmap(HDC,CONST BITMAPINFOHEADER*,DWORD,CONST VOID*,CONST BITMAPINFO*,UINT);
 HBRUSH WINAPI CreateDIBPatternBrush(HGLOBAL,UINT);
-HBRUSH WINAPI CreateDIBPatternBrushPt(PCVOID,UINT);
+HBRUSH WINAPI CreateDIBPatternBrushPt(CONST VOID*,UINT);
 HBITMAP WINAPI CreateDIBSection(HDC,const BITMAPINFO*,UINT,PVOID*,HANDLE,DWORD);
 HBITMAP WINAPI CreateDiscardableBitmap(HDC,int,int);
 HRGN WINAPI CreateEllipticRgn(int,int,int,int);
@@ -3096,7 +3096,7 @@ HGDIOBJ WINAPI SelectObject(HDC,HGDIOBJ);
 HPALETTE WINAPI SelectPalette(HDC,HPALETTE,BOOL);
 int WINAPI SetAbortProc(HDC,ABORTPROC);
 int WINAPI SetArcDirection(HDC,int);
-LONG WINAPI SetBitmapBits(HBITMAP,DWORD,PCVOID);
+LONG WINAPI SetBitmapBits(HBITMAP,DWORD,CONST VOID*);
 BOOL WINAPI SetBitmapDimensionEx(HBITMAP,int,int,LPSIZE);
 COLORREF WINAPI SetBkColor(HDC,COLORREF);
 int WINAPI SetBkMode(HDC,int);
@@ -3110,8 +3110,8 @@ COLORREF WINAPI SetDCPenColor(HDC,COLORREF);
 #endif
 BOOL WINAPI SetDeviceGammaRamp(HDC,PVOID);
 UINT WINAPI SetDIBColorTable(HDC,UINT,UINT,const RGBQUAD*);
-int WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,PCVOID,const BITMAPINFO*,UINT);
-int WINAPI SetDIBitsToDevice(HDC,int,int,DWORD,DWORD,int,int,UINT,UINT,PCVOID,const BITMAPINFO*,UINT);
+int WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,CONST VOID*,CONST BITMAPINFO*,UINT);
+int WINAPI SetDIBitsToDevice(HDC,int,int,DWORD,DWORD,int,int,UINT,UINT,CONST VOID*,CONST BITMAPINFO*,UINT);
 HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE*);
 int WINAPI SetGraphicsMode(HDC,int);
 int WINAPI SetICMMode(HDC,int);
index f84a8ac..fa1dcc2 100644 (file)
@@ -3414,6 +3414,12 @@ typedef LONG
     struct _EXCEPTION_POINTERS *ExceptionInfo
 );
 
+typedef struct _GROUP_AFFINITY {
+  KAFFINITY Mask;
+  WORD Group;
+  WORD Reserved[3];
+} GROUP_AFFINITY, *PGROUP_AFFINITY;
+
 typedef struct _EVENTLOGRECORD {
        DWORD Length;
        DWORD Reserved;
index 17d17df..131a818 100644 (file)
@@ -3879,7 +3879,7 @@ int WINAPI CountClipboardFormats(void);
 HACCEL WINAPI CreateAcceleratorTableA(LPACCEL,int);
 HACCEL WINAPI CreateAcceleratorTableW(LPACCEL,int);
 BOOL WINAPI CreateCaret(HWND,HBITMAP,int,int);
-HCURSOR WINAPI CreateCursor(HINSTANCE,int,int,int,int,PCVOID,PCVOID);
+HCURSOR WINAPI CreateCursor(HINSTANCE,int,int,int,int,CONST VOID*,CONST VOID*);
 #if defined(_WINGDI_) && !defined(NOGDI)
 HDESK WINAPI CreateDesktopA(LPCSTR,LPCSTR,LPDEVMODEA,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
 HDESK WINAPI CreateDesktopW(LPCWSTR,LPCWSTR,LPDEVMODEW,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
index 44fd06a..ff5f5cc 100644 (file)
@@ -16,6 +16,13 @@ const unsigned long PNP_MAX_BUFFER_SIZE = 16000000;
 
 cpp_quote("#ifndef _CFGMGR32_H_")
 typedef unsigned long RESOURCEID;
+
+typedef struct _HWPROFILEINFO {
+    DWORD HWPI_ulHWProfile;
+    WCHAR HWPI_szFriendlyName[80];
+    DWORD HWPI_dwFlags;
+} HWPROFILEINFO;
+
 cpp_quote("#endif")
 typedef unsigned long DEVPROPTYPE;
 typedef [range(0, PNP_MAX_PROP_SIZE)] unsigned long PNP_PROP_SIZE;
@@ -242,12 +249,6 @@ typedef struct _DEVPROPKEY {
     DWORD pid;
 } DEVPROPKEY;
 
-typedef struct _HWPROFILEINFO {
-    DWORD HWPI_ulHWProfile;
-    WCHAR HWPI_szFriendlyName[80];
-    DWORD HWPI_dwFlags;
-} HWPROFILEINFO;
-
 [
   uuid (809F4e40-A03D-11CE-8F69-08003E30051B),
   version(1.0),
diff --git a/reactos/include/reactos/wine/cfgmgr32.h b/reactos/include/reactos/wine/cfgmgr32.h
deleted file mode 100644 (file)
index 7837f2a..0000000
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * Copyright (C) 2005 Mike McCormack
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef _CFGMGR32_H_
-#define _CFGMGR32_H_
-
-/* cfgmgr32 doesn't use the normal convention, it adds an underscore before A/W */
-#ifdef __WINESRC__
-# define DECL_WINELIB_CFGMGR32_TYPE_AW(type)  /* nothing */
-#else   /* __WINESRC__ */
-# define DECL_WINELIB_CFGMGR32_TYPE_AW(type)  typedef WINELIB_NAME_AW(type##_) type;
-#endif  /* __WINESRC__ */
-
-typedef DWORD CONFIGRET;
-typedef HANDLE HMACHINE;
-typedef HMACHINE *PHMACHINE;
-typedef DWORD DEVINST;
-typedef DEVINST *PDEVINST;
-typedef DWORD DEVNODE;
-typedef DEVNODE *PDEVNODE;
-typedef ULONG REGDISPOSITION;
-typedef DWORD_PTR LOG_CONF;
-typedef LOG_CONF *PLOG_CONF;
-typedef ULONG PRIORITY;
-typedef PRIORITY *PPRIORITY;
-
-
-typedef CHAR  *DEVINSTID_A;
-typedef WCHAR *DEVINSTID_W;
-DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID)
-
-#define CR_SUCCESS              0x00000000
-#define CR_OUT_OF_MEMORY        0x00000002
-#define CR_INVALID_POINTER      0x00000003
-#define CR_INVALID_FLAG         0x00000004
-#define CR_INVALID_DEVNODE      0x00000005
-#define CR_INVALID_DEVINST      CR_INVALID_DEVNODE
-#define CR_INVALID_LOG_CONF     0x00000007
-#define CR_NO_SUCH_DEVNODE      0x0000000D
-#define CR_NO_SUCH_DEVINST      CR_NO_SUCH_DEVNODE
-#define CR_FAILURE              0x00000013
-#define CR_BUFFER_SMALL         0x0000001A
-#define CR_REGISTRY_ERROR       0x0000001D
-#define CR_INVALID_DEVICE_ID    0x0000001E
-#define CR_INVALID_DATA         0x0000001F
-#define CR_NO_SUCH_VALUE        0x00000025
-#define CR_INVALID_PRIORITY     0x00000027
-#define CR_NO_SUCH_REGISTRY_KEY 0x0000002E
-#define CR_INVALID_MACHINENAME  0x0000002F
-#define CR_ACCESS_DENIED        0x00000033
-#define CR_CALL_NOT_IMPLEMENTED 0x00000034
-#define CR_INVALID_PROPERTY     0x00000035
-
-#define MAX_CLASS_NAME_LEN  32
-#define MAX_GUID_STRING_LEN 39
-#define MAX_PROFILE_LEN     80
-#define MAX_DEVICE_ID_LEN      200
-#define MAX_DEVNODE_ID_LEN     MAX_DEVICE_ID_LEN
-
-/* Disposition values for CM_Open_Class_Key[_Ex] */
-#define RegDisposition_OpenAlways   0x00000000
-#define RegDisposition_OpenExisting 0x00000001
-#define RegDisposition_Bits         0x00000001
-
-/* ulFlags for CM_Add_ID[_Ex] */
-#define CM_ADD_ID_HARDWARE   0x00000000
-#define CM_ADD_ID_COMPATIBLE 0x00000001
-#define CM_ADD_ID_BITS       0x00000001
-
-/* ulFlags for CM_Open_Class_Key[_Ex] */
-#define CM_OPEN_CLASS_KEY_INSTALLER 0x00000000
-#define CM_OPEN_CLASS_KEY_INTERFACE 0x00000001
-#define CM_OPEN_CLASS_KEY_BITS      0x00000001
-
-/* ulFlags for CM_Locate_DevNode[_Ex] */
-#define CM_LOCATE_DEVNODE_NORMAL       0x00000000
-#define CM_LOCATE_DEVNODE_PHANTOM      0x00000001
-#define CM_LOCATE_DEVNODE_CANCELREMOVE 0x00000002
-#define CM_LOCATE_DEVNODE_NOVALIDATION 0x00000004
-#define CM_LOCATE_DEVNODE_BITS         0x00000007
-
-#define CM_LOCATE_DEVINST_NORMAL       CM_LOCATE_DEVNODE_NORMAL
-#define CM_LOCATE_DEVINST_PHANTOM      CM_LOCATE_DEVNODE_PHANTOM
-#define CM_LOCATE_DEVINST_CANCELREMOVE CM_LOCATE_DEVNODE_CANCELREMOVE
-#define CM_LOCATE_DEVINST_NOVALIDATION CM_LOCATE_DEVNODE_NOVALIDATION
-#define CM_LOCATE_DEVINST_BITS         CM_LOCATE_DEVNODE_BITS
-
-/* ulFlags for CM_Set_DevNode_Problem[_Ex] */
-#define CM_SET_DEVNODE_PROBLEM_NORMAL   0x00000000
-#define CM_SET_DEVNODE_PROBLEM_OVERRIDE 0x00000001
-#define CM_SET_DEVNODE_PROBLEM_BITS     0x00000001
-
-#define CM_SET_DEVINST_PROBLEM_NORMAL   CM_SET_DEVNODE_PROBLEM_NORMAL
-#define CM_SET_DEVINST_PROBLEM_OVERRIDE CM_SET_DEVNODE_PROBLEM_OVERRIDE
-#define CM_SET_DEVINST_PROBLEM_BITS     CM_SET_DEVNODE_PROBLEM_BITS
-
-/* Properties for CM_Get/Set_DevNode_Registry_Property[_Ex]A/W */
-#define CM_DRP_DEVICEDESC                  0x00000001
-#define CM_DRP_HARDWAREID                  0x00000002
-#define CM_DRP_COMPATIBLEIDS               0x00000003
-#define CM_DRP_UNUSED0                     0x00000004
-#define CM_DRP_SERVICE                     0x00000005
-#define CM_DRP_UNUSED1                     0x00000006
-#define CM_DRP_UNUSED2                     0x00000007
-#define CM_DRP_CLASS                       0x00000008
-#define CM_DRP_CLASSGUID                   0x00000009
-#define CM_DRP_DRIVER                      0x0000000A
-#define CM_DRP_CONFIGFLAGS                 0x0000000B
-#define CM_DRP_MFG                         0x0000000C
-#define CM_DRP_FRIENDLYNAME                0x0000000D
-#define CM_DRP_LOCATION_INFORMATION        0x0000000E
-#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000F
-#define CM_DRP_CAPABILITIES                0x00000010
-#define CM_DRP_UI_NUMBER                   0x00000011
-#define CM_DRP_UPPERFILTERS                0x00000012
-#define CM_DRP_LOWERFILTERS                0x00000013
-#define CM_DRP_BUSTYPEGUID                 0x00000014
-#define CM_DRP_LEGACYBUSTYPE               0x00000015
-#define CM_DRP_BUSNUMBER                   0x00000016
-#define CM_DRP_ENUMERATOR_NAME             0x00000017
-
-#define CM_DRP_MIN                         0x00000001
-#define CM_DRP_MAX                         0x00000017
-
-/* ulFlags for CM_Delete_Class_Key[_Ex] */
-#define CM_DELETE_CLASS_ONLY    0x00000000
-#define CM_DELETE_CLASS_SUBKEYS 0x00000001
-#define CM_DELETE_CLASS_BITS    0x00000001
-
-/* ulFlags for CM_Get_Device_ID_List and CM_Get_Device_ID_List_Size */
-#define CM_GETIDLIST_FILTER_NONE                (0x00000000)
-#define CM_GETIDLIST_FILTER_ENUMERATOR          (0x00000001)
-#define CM_GETIDLIST_FILTER_SERVICE             (0x00000002)
-#define CM_GETIDLIST_FILTER_EJECTRELATIONS      (0x00000004)
-#define CM_GETIDLIST_FILTER_REMOVALRELATIONS    (0x00000008)
-#define CM_GETIDLIST_FILTER_POWERRELATIONS      (0x00000010)
-#define CM_GETIDLIST_FILTER_BUSRELATIONS        (0x00000020)
-#define CM_GETIDLIST_DONOTGENERATE              (0x10000040)
-#define CM_GETIDLIST_FILTER_BITS                (0x1000007F)
-
-/* ulFlags for CM_Reenumerate_DevNode[_Ex] */
-#define CM_REENUMERATE_NORMAL             0x00000000
-#define CM_REENUMERATE_SYNCHRONOUS        0x00000001
-#define CM_REENUMERATE_RETRY_INSTALLATION 0x00000002
-#define CM_REENUMERATE_ASYNCHRONOUS       0x00000004
-#define CM_REENUMERATE_BITS               0x00000007
-
-/* ulFlags for CM_Run_Detection[_Ex] */
-#define CM_DETECT_NEW_PROFILE       0x00000001
-#define CM_DETECT_CRASHED           0x00000002
-#define CM_DETECT_HWPROF_FIRST_BOOT 0x00000004
-#define CM_DETECT_RUN               0x80000000
-#define CM_DETECT_BITS              0x80000007
-
-/* ulFlags for CM_Setup_DevInst[_Ex] */
-#define CM_SETUP_DEVNODE_READY   0x00000000
-#define CM_SETUP_DEVINST_READY   CM_SETUP_DEVNODE_READY
-#define CM_SETUP_DOWNLOAD        0x00000001
-#define CM_SETUP_WRITE_LOG_CONFS 0x00000002
-#define CM_SETUP_PROP_CHANGE     0x00000003
-#define CM_SETUP_DEVNODE_RESET   0x00000004
-#define CM_SETUP_DEVINST_RESET   CM_SETUP_DEVNODE_RESET
-#define CM_SETUP_BITS            0x00000007
-
-/* ulFlags for CM_Create_DevNode[_Ex]A/W */
-#define CM_CREATE_DEVNODE_NORMAL          0x00000000
-#define CM_CREATE_DEVNODE_NO_WAIT_INSTALL 0x00000001
-#define CM_CREATE_DEVNODE_PHANTOM         0x00000002
-#define CM_CREATE_DEVNODE_GENERATE_ID     0x00000004
-#define CM_CREATE_DEVNODE_DO_NOT_INSTALL  0x00000008
-#define CM_CREATE_DEVNODE_BITS            0x0000000F
-
-#define CM_CREATE_DEVINST_NORMAL          CM_CREATE_DEVNODE_NORMAL
-#define CM_CREATE_DEVINST_NO_WAIT_INSTALL CM_CREATE_DEVNODE_NO_WAIT_INSTALL
-#define CM_CREATE_DEVINST_PHANTOM         CM_CREATE_DEVNODE_PHANTOM
-#define CM_CREATE_DEVINST_GENERATE_ID     CM_CREATE_DEVNODE_GENERATE_ID
-#define CM_CREATE_DEVINST_DO_NOT_INSTALL  CM_CREATE_DEVNODE_DO_NOT_INSTALL
-#define CM_CREATE_DEVINST_BITS            CM_CREATE_DEVNODE_BITS
-
-/* ulFlags for CM_Set_HW_Prof_Flags[_Ex]A/W */
-#define CM_SET_HW_PROF_FLAGS_UI_NOT_OK 0x00000001
-#define CM_SET_HW_PROF_FLAGS_BITS      0x00000001
-
-/* ulFlags for Log_Conf functions */
-#define BASIC_LOG_CONF    0x00000000
-#define FILTERED_LOG_CONF 0x00000001
-#define ALLOC_LOG_CONF    0x00000002
-#define BOOT_LOG_CONF     0x00000003
-#define FORCED_LOG_CONF   0x00000004
-#define OVERRIDE_LOG_CONF 0x00000005
-#define NUM_LOG_CONF      0x00000006
-#define LOG_CONF_BITS     0x00000007
-
-#define PRIORITY_EQUAL_FIRST  0x00000008
-#define PRIORITY_EQUAL_LAST   0x00000000
-#define PRIORITY_BIT          0x00000008
-
-#define CMP_MAGIC  0x01234567
-
-
-CONFIGRET WINAPI CMP_Init_Detection( DWORD );
-CONFIGRET WINAPI CMP_Report_LogOn( DWORD, DWORD );
-
-CONFIGRET WINAPI CM_Add_Empty_Log_Conf( PLOG_CONF, DEVINST, PRIORITY, ULONG );
-CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex( PLOG_CONF, DEVINST, PRIORITY, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Add_IDA( DEVINST, PSTR, ULONG );
-CONFIGRET WINAPI CM_Add_IDW( DEVINST, PWSTR, ULONG );
-#define     CM_Add_ID WINELIB_NAME_AW(CM_Add_ID)
-CONFIGRET WINAPI CM_Add_ID_ExA( DEVINST, PSTR, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Add_ID_ExW( DEVINST, PWSTR, ULONG, HMACHINE );
-#define     CM_Add_ID_Ex WINELIB_NAME_AW(CM_Add_ID_Ex)
-CONFIGRET WINAPI CM_Connect_MachineA( PCSTR, PHMACHINE );
-CONFIGRET WINAPI CM_Connect_MachineW( PCWSTR, PHMACHINE );
-#define     CM_Connect_Machine WINELIB_NAME_AW(CM_Connect_Machine)
-CONFIGRET WINAPI CM_Create_DevNodeA( PDEVINST, DEVINSTID_A, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Create_DevNodeW( PDEVINST, DEVINSTID_W, DEVINST, ULONG );
-#define     CM_Create_DevNode WINELIB_NAME_AW(CM_Create_DevNode)
-CONFIGRET WINAPI CM_Create_DevNode_ExA( PDEVINST, DEVINSTID_A, DEVINST, ULONG, HANDLE );
-CONFIGRET WINAPI CM_Create_DevNode_ExW( PDEVINST, DEVINSTID_W, DEVINST, ULONG, HANDLE );
-#define     CM_Create_DevNode_Ex WINELIB_NAME_AW(CM_Create_DevNode_Ex)
-CONFIGRET WINAPI CM_Delete_Class_Key( LPGUID, ULONG );
-CONFIGRET WINAPI CM_Delete_Class_Key_Ex( LPGUID, ULONG, HANDLE );
-CONFIGRET WINAPI CM_Delete_DevNode_Key( DEVNODE, ULONG, ULONG );
-CONFIGRET WINAPI CM_Delete_DevNode_Key_Ex( DEVNODE, ULONG, ULONG, HANDLE );
-CONFIGRET WINAPI CM_Disable_DevNode( DEVINST, ULONG );
-CONFIGRET WINAPI CM_Disable_DevNode_Ex( DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Disconnect_Machine( HMACHINE );
-CONFIGRET WINAPI CM_Enable_DevNode( DEVINST, ULONG );
-CONFIGRET WINAPI CM_Enable_DevNode_Ex( DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Enumerate_Classes( ULONG, LPGUID, ULONG );
-CONFIGRET WINAPI CM_Enumerate_Classes_Ex( ULONG, LPGUID, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Enumerate_EnumeratorsA( ULONG, PCHAR, PULONG, ULONG );
-CONFIGRET WINAPI CM_Enumerate_EnumeratorsW( ULONG, PWCHAR, PULONG, ULONG );
-#define     CM_Enumerate_Enumerators WINELIB_NAME_AW(CM_Enumerate_Enumerators)
-CONFIGRET WINAPI CM_Enumerate_Enumerators_ExA( ULONG, PCHAR, PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Enumerate_Enumerators_ExW( ULONG, PWCHAR, PULONG, ULONG, HMACHINE );
-#define     CM_Enumerate_Enumerators_Ex WINELIB_NAME_AW(CM_Enumerate_Enumerators_Ex)
-CONFIGRET WINAPI CM_Free_Log_Conf( LOG_CONF, ULONG );
-CONFIGRET WINAPI CM_Free_Log_Conf_Ex( LOG_CONF, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Free_Log_Conf_Handle( LOG_CONF );
-CONFIGRET WINAPI CM_Get_Child( PDEVINST, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_Child_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Class_Key_NameA( LPGUID, LPSTR, PULONG, ULONG );
-CONFIGRET WINAPI CM_Get_Class_Key_NameW( LPGUID, LPWSTR, PULONG, ULONG );
-#define     CM_Get_Class_Key_Name WINELIB_NAME_AW(CM_Get_Class_Key_Name)
-CONFIGRET WINAPI CM_Get_Class_Key_Name_ExA( LPGUID, LPSTR, PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Class_Key_Name_ExW( LPGUID, LPWSTR, PULONG, ULONG, HMACHINE );
-#define     CM_Get_Class_Key_Name_Ex WINELIB_NAME_AW(CM_Get_Class_Key_Name_Ex)
-CONFIGRET WINAPI CM_Get_Class_NameA( LPGUID, PCHAR, PULONG, ULONG );
-CONFIGRET WINAPI CM_Get_Class_NameW( LPGUID, PWCHAR, PULONG, ULONG );
-#define     CM_Get_Class_Name WINELIB_NAME_AW(CM_Get_Class_Name)
-CONFIGRET WINAPI CM_Get_Class_Name_ExA( LPGUID, PCHAR, PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Class_Name_ExW( LPGUID, PWCHAR, PULONG, ULONG, HMACHINE );
-#define     CM_Get_Class_Name_Ex WINELIB_NAME_AW(CM_Get_Class_Name_Ex)
-CONFIGRET WINAPI CM_Get_Depth( PULONG, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_Depth_Ex( PULONG, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG );
-CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyW( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG );
-#define     CM_Get_DevNode_Registry_Property WINELIB_NAME_AW(CM_Get_DevNode_Registry_Property)
-CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExA( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG, HMACHINE );
-#define     CM_Get_DevNode_Registry_Property_Ex WINELIB_NAME_AW(CM_Get_DevNode_Registry_Property_Ex)
-CONFIGRET WINAPI CM_Get_DevNode_Status( PULONG, PULONG, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_DevNode_Status_Ex( PULONG, PULONG, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Device_IDA( DEVINST, PCHAR, ULONG, ULONG );
-CONFIGRET WINAPI CM_Get_Device_IDW( DEVINST, PWCHAR, ULONG, ULONG );
-#define     CM_Get_Device_ID WINELIB_NAME_AW(CM_Get_Device_ID)
-CONFIGRET WINAPI CM_Get_Device_ID_ExW( DEVINST, PWCHAR, ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Device_ID_ExA( DEVINST, PCHAR, ULONG, ULONG, HMACHINE );
-#define     CM_Get_Device_ID_Ex WINELIB_NAME_AW(CM_Get_Device_ID_Ex)
-CONFIGRET WINAPI CM_Get_Device_ID_ListA( PCSTR, PCHAR, ULONG, ULONG );
-CONFIGRET WINAPI CM_Get_Device_ID_ListW( PCWSTR, PWCHAR, ULONG, ULONG );
-#define     CM_Get_Device_ID_List WINELIB_NAME_AW(CM_Get_Device_ID_List)
-CONFIGRET WINAPI CM_Get_Device_ID_List_ExA( PCSTR, PCHAR, ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Device_ID_List_ExW( PCWSTR, PWCHAR, ULONG, ULONG, HMACHINE );
-#define     CM_Get_Device_ID_List_Ex WINELIB_NAME_AW(CM_Get_Device_ID_List_Ex)
-CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA( PULONG, PCSTR, ULONG );
-CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW( PULONG, PCWSTR, ULONG );
-#define     CM_Get_Device_ID_List_Size WINELIB_NAME_AW(CM_Get_Device_ID_List_Size)
-CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA( PULONG, PCSTR, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW( PULONG, PCWSTR, ULONG, HMACHINE );
-#define     CM_Get_Device_ID_List_Size_Ex WINELIB_NAME_AW(CM_Get_Device_ID_List_Size_Ex)
-CONFIGRET WINAPI CM_Get_Device_ID_Size( PULONG, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex( PULONG, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_First_Log_Conf( PLOG_CONF, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex( PLOG_CONF, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Global_State( PULONG, ULONG );
-CONFIGRET WINAPI CM_Get_Global_State_Ex( PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Set_HW_Prof( ULONG, ULONG );
-CONFIGRET WINAPI CM_Set_HW_Prof_Ex( ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_HW_Prof_FlagsA( DEVINSTID_A, ULONG, PULONG, ULONG );
-CONFIGRET WINAPI CM_Get_HW_Prof_FlagsW( DEVINSTID_W, ULONG, PULONG, ULONG );
-#define     CM_Get_HW_Prof_Flags WINELIB_NAME_AW(CM_Get_HW_Prof_Flags)
-CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExA( DEVINSTID_A, ULONG, PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExW( DEVINSTID_W, ULONG, PULONG, ULONG, HMACHINE );
-#define     CM_Get_HW_Prof_Flags_Ex WINELIB_NAME_AW(CM_Get_HW_Prof_Flags_Ex)
-CONFIGRET WINAPI CM_Get_Log_Conf_Priority( LOG_CONF, PPRIORITY, ULONG );
-CONFIGRET WINAPI CM_Get_Log_Conf_Priority_Ex( LOG_CONF, PPRIORITY, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Next_Log_Conf( PLOG_CONF, LOG_CONF, ULONG );
-CONFIGRET WINAPI CM_Get_Next_Log_Conf_Ex( PLOG_CONF, LOG_CONF, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Parent( PDEVINST, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_Parent_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Sibling( PDEVINST, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_Sibling_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
-WORD WINAPI CM_Get_Version( VOID );
-WORD WINAPI CM_Get_Version_Ex( HMACHINE );
-
-CONFIGRET WINAPI CM_Is_Dock_Station_Present( PBOOL );
-CONFIGRET WINAPI CM_Is_Dock_Station_Present_Ex( PBOOL, HMACHINE );
-CONFIGRET WINAPI CM_Locate_DevNodeA( PDEVINST, DEVINSTID_A, ULONG );
-CONFIGRET WINAPI CM_Locate_DevNodeW( PDEVINST, DEVINSTID_W, ULONG );
-#define     CM_Locate_DevNode WINELIB_NAME_AW(CM_Locate_DevNode)
-CONFIGRET WINAPI CM_Locate_DevNode_ExA( PDEVINST, DEVINSTID_A, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Locate_DevNode_ExW( PDEVINST, DEVINSTID_W, ULONG, HMACHINE );
-#define     CM_Locate_DevNode_Ex WINELIB_NAME_AW(CM_Locate_DevNode_Ex)
-
-CONFIGRET WINAPI CM_Move_DevNode( DEVINST, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Move_DevNode_Ex( DEVINST, DEVINST, ULONG, HMACHINE );
-
-CONFIGRET WINAPI CM_Open_Class_KeyA( LPGUID, LPCSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG );
-CONFIGRET WINAPI CM_Open_Class_KeyW( LPGUID, LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG );
-#define     CM_Open_Class_Key WINELIB_NAME_AW(CM_Open_Class_Key)
-CONFIGRET WINAPI CM_Open_Class_Key_ExA( LPGUID, LPCSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Open_Class_Key_ExW( LPGUID, LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
-#define     CM_Open_Class_Key_Ex WINELIB_NAME_AW(CM_Open_Class_Key_Ex)
-CONFIGRET WINAPI CM_Open_DevNode_Key( DEVINST, REGSAM, ULONG, REGDISPOSITION, PHKEY, ULONG );
-CONFIGRET WINAPI CM_Open_DevNode_Key_Ex( DEVINST, REGSAM, ULONG, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
-
-CONFIGRET WINAPI CM_Reenumerate_DevNode( DEVINST, ULONG );
-CONFIGRET WINAPI CM_Reenumerate_DevNode_Ex( DEVINST, ULONG, HMACHINE );
-
-CONFIGRET WINAPI CM_Request_Eject_PC( VOID );
-CONFIGRET WINAPI CM_Request_Eject_PC_Ex( HMACHINE );
-
-CONFIGRET WINAPI CM_Run_Detection( ULONG );
-CONFIGRET WINAPI CM_Run_Detection_Ex( ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Set_DevNode_Problem( DEVINST, ULONG, ULONG );
-CONFIGRET WINAPI CM_Set_DevNode_Problem_Ex( DEVINST, ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyA( DEVINST, ULONG, PCVOID, ULONG, ULONG );
-CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyW( DEVINST, ULONG, PCVOID, ULONG, ULONG );
-#define     CM_Set_DevNode_Registry_Property WINELIB_NAME_AW(CM_Set_DevNode_Registry_Property)
-CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExA( DEVINST, ULONG, PCVOID, ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW( DEVINST, ULONG, PCVOID, ULONG, ULONG, HMACHINE );
-#define     CM_Set_DevNode_Registry_Property_Ex WINELIB_NAME_AW(CM_Set_DevNode_Registry_Property_Ex)
-
-CONFIGRET WINAPI CM_Set_HW_Prof_FlagsA( DEVINSTID_A, ULONG, ULONG, ULONG );
-CONFIGRET WINAPI CM_Set_HW_Prof_FlagsW( DEVINSTID_W, ULONG, ULONG, ULONG );
-#define     CM_Set_HW_Prof_Flags WINELIB_NAME_AW(CM_Set_HW_Prof_Flags)
-CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExA( DEVINSTID_A, ULONG, ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExW( DEVINSTID_W, ULONG, ULONG, ULONG, HMACHINE );
-#define     CM_Set_HW_Prof_Flags_Ex WINELIB_NAME_AW(CM_Set_HW_Prof_Flags_Ex)
-CONFIGRET WINAPI CM_Setup_DevNode( DEVINST, ULONG );
-CONFIGRET WINAPI CM_Setup_DevNode_Ex( DEVINST, ULONG, HMACHINE );
-
-CONFIGRET WINAPI CM_Uninstall_DevNode( DEVINST, ULONG );
-CONFIGRET WINAPI CM_Uninstall_DevNode_Ex( DEVINST, ULONG, HMACHINE );
-
-#endif /* _CFGMGR32_H_ */
diff --git a/reactos/include/xdk/amd64/ke.h b/reactos/include/xdk/amd64/ke.h
new file mode 100644 (file)
index 0000000..d744cd5
--- /dev/null
@@ -0,0 +1,278 @@
+$if (_WDMDDK_)
+/** Kernel definitions for AMD64 **/
+
+/* Interrupt request levels */
+#define PASSIVE_LEVEL           0
+#define LOW_LEVEL               0
+#define APC_LEVEL               1
+#define DISPATCH_LEVEL          2
+#define CMCI_LEVEL              5
+#define CLOCK_LEVEL             13
+#define IPI_LEVEL               14
+#define DRS_LEVEL               14
+#define POWER_LEVEL             14
+#define PROFILE_LEVEL           15
+#define HIGH_LEVEL              15
+
+#define KI_USER_SHARED_DATA     0xFFFFF78000000000ULL
+#define SharedUserData          ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
+#define SharedInterruptTime     (KI_USER_SHARED_DATA + 0x8)
+#define SharedSystemTime        (KI_USER_SHARED_DATA + 0x14)
+#define SharedTickCount         (KI_USER_SHARED_DATA + 0x320)
+
+#define PAGE_SIZE               0x1000
+#define PAGE_SHIFT              12L
+
+#define EFLAG_SIGN              0x8000
+#define EFLAG_ZERO              0x4000
+#define EFLAG_SELECT            (EFLAG_SIGN | EFLAG_ZERO)
+
+#define RESULT_NEGATIVE         ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+#define RESULT_ZERO             ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
+#define RESULT_POSITIVE         ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+
+
+typedef struct _KFLOATING_SAVE {
+  ULONG Dummy;
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
+
+typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
+
+#define KeQueryInterruptTime() \
+    (*(volatile ULONG64*)SharedInterruptTime)
+
+#define KeQuerySystemTime(CurrentCount) \
+    *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
+
+#define KeQueryTickCount(CurrentCount) \
+    *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
+
+#define KeGetDcacheFillSize() 1L
+
+#define YieldProcessor _mm_pause
+
+FORCEINLINE
+KIRQL
+KeGetCurrentIrql(VOID)
+{
+  return (KIRQL)__readcr8();
+}
+
+FORCEINLINE
+VOID
+KeLowerIrql(IN KIRQL NewIrql)
+{
+  //ASSERT(KeGetCurrentIrql() >= NewIrql);
+  __writecr8(NewIrql);
+}
+
+FORCEINLINE
+KIRQL
+KfRaiseIrql(IN KIRQL NewIrql)
+{
+  KIRQL OldIrql;
+
+  OldIrql = __readcr8();
+  //ASSERT(OldIrql <= NewIrql);
+  __writecr8(NewIrql);
+  return OldIrql;
+}
+#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+
+FORCEINLINE
+KIRQL
+KeRaiseIrqlToDpcLevel(VOID)
+{
+  return KfRaiseIrql(DISPATCH_LEVEL);
+}
+
+FORCEINLINE
+KIRQL
+KeRaiseIrqlToSynchLevel(VOID)
+{
+  return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
+}
+
+FORCEINLINE
+PKTHREAD
+KeGetCurrentThread(VOID)
+{
+  return (struct _KTHREAD *)__readgsqword(0x188);
+}
+
+/* VOID
+ * KeFlushIoBuffers(
+ *   IN PMDL Mdl,
+ *   IN BOOLEAN ReadOperation,
+ *   IN BOOLEAN DmaOperation)
+ */
+#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
+
+/* x86 and x64 performs a 0x2C interrupt */
+#define DbgRaiseAssertionFailure __int2c
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+#define PAUSE_PROCESSOR YieldProcessor();
+
+#define KERNEL_STACK_SIZE 0x6000
+#define KERNEL_LARGE_STACK_SIZE 0x12000
+#define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
+
+#define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
+
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+#if !defined(RC_INVOKED)
+
+#define CONTEXT_AMD64 0x100000
+
+#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
+#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
+#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
+
+#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
+
+#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
+#define CONTEXT_SERVICE_ACTIVE 0x10000000
+#define CONTEXT_EXCEPTION_REQUEST 0x40000000
+#define CONTEXT_EXCEPTION_REPORTING 0x80000000
+
+#endif /* !defined(RC_INVOKED) */
+
+#define INITIAL_MXCSR                  0x1f80
+#define INITIAL_FPCSR                  0x027f
+
+typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
+  ULONG64 P1Home;
+  ULONG64 P2Home;
+  ULONG64 P3Home;
+  ULONG64 P4Home;
+  ULONG64 P5Home;
+  ULONG64 P6Home;
+  ULONG ContextFlags;
+  ULONG MxCsr;
+  USHORT SegCs;
+  USHORT SegDs;
+  USHORT SegEs;
+  USHORT SegFs;
+  USHORT SegGs;
+  USHORT SegSs;
+  ULONG EFlags;
+  ULONG64 Dr0;
+  ULONG64 Dr1;
+  ULONG64 Dr2;
+  ULONG64 Dr3;
+  ULONG64 Dr6;
+  ULONG64 Dr7;
+  ULONG64 Rax;
+  ULONG64 Rcx;
+  ULONG64 Rdx;
+  ULONG64 Rbx;
+  ULONG64 Rsp;
+  ULONG64 Rbp;
+  ULONG64 Rsi;
+  ULONG64 Rdi;
+  ULONG64 R8;
+  ULONG64 R9;
+  ULONG64 R10;
+  ULONG64 R11;
+  ULONG64 R12;
+  ULONG64 R13;
+  ULONG64 R14;
+  ULONG64 R15;
+  ULONG64 Rip;
+  union {
+    XMM_SAVE_AREA32 FltSave;
+    struct {
+      M128A Header[2];
+      M128A Legacy[8];
+      M128A Xmm0;
+      M128A Xmm1;
+      M128A Xmm2;
+      M128A Xmm3;
+      M128A Xmm4;
+      M128A Xmm5;
+      M128A Xmm6;
+      M128A Xmm7;
+      M128A Xmm8;
+      M128A Xmm9;
+      M128A Xmm10;
+      M128A Xmm11;
+      M128A Xmm12;
+      M128A Xmm13;
+      M128A Xmm14;
+      M128A Xmm15;
+    } DUMMYSTRUCTNAME;
+  } DUMMYUNIONNAME;
+  M128A VectorRegister[26];
+  ULONG64 VectorControl;
+  ULONG64 DebugControl;
+  ULONG64 LastBranchToRip;
+  ULONG64 LastBranchFromRip;
+  ULONG64 LastExceptionToRip;
+  ULONG64 LastExceptionFromRip;
+} CONTEXT;
+
+#define PCR_MINOR_VERSION 1
+#define PCR_MAJOR_VERSION 1
+
+typedef struct _KPCR
+{
+    _ANONYMOUS_UNION union
+    {
+        NT_TIB NtTib;
+        _ANONYMOUS_STRUCT struct
+        {
+            union _KGDTENTRY64 *GdtBase;
+            struct _KTSS64 *TssBase;
+            ULONG64 UserRsp;
+            struct _KPCR *Self;
+            struct _KPRCB *CurrentPrcb;
+            PKSPIN_LOCK_QUEUE LockArray;
+            PVOID Used_Self;
+        };
+    };
+    union _KIDTENTRY64 *IdtBase;
+    ULONG64 Unused[2];
+    KIRQL Irql;
+    UCHAR SecondLevelCacheAssociativity;
+    UCHAR ObsoleteNumber;
+    UCHAR Fill0;
+    ULONG Unused0[3];
+    USHORT MajorVersion;
+    USHORT MinorVersion;
+    ULONG StallScaleFactor;
+    PVOID Unused1[3];
+    ULONG KernelReserved[15];
+    ULONG SecondLevelCacheSize;
+    ULONG HalReserved[16];
+    ULONG Unused2;
+    PVOID KdVersionBlock;
+    PVOID Unused3;
+    ULONG PcrAlign1[24];
+} KPCR, *PKPCR;
+
+FORCEINLINE
+PKPCR
+KeGetPcr(VOID)
+{
+    return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self));
+}
+
+FORCEINLINE
+ULONG
+KeGetCurrentProcessorNumber(VOID)
+{
+    return (ULONG)__readgsword(0x184);
+}
+
+$endif /* _NTDDK_ */
diff --git a/reactos/include/xdk/amd64/mm.h b/reactos/include/xdk/amd64/mm.h
new file mode 100644 (file)
index 0000000..2c390a1
--- /dev/null
@@ -0,0 +1,37 @@
+$if (_NTDDK_)
+
+#define PTI_SHIFT  12L
+#define PDI_SHIFT  21L
+#define PPI_SHIFT  30L
+#define PXI_SHIFT  39L
+#define PTE_PER_PAGE 512
+#define PDE_PER_PAGE 512
+#define PPE_PER_PAGE 512
+#define PXE_PER_PAGE 512
+#define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
+#define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
+#define PPI_MASK (PPE_PER_PAGE - 1)
+#define PXI_MASK (PXE_PER_PAGE - 1)
+
+#define PXE_BASE    0xFFFFF6FB7DBED000ULL
+#define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
+#define PPE_BASE    0xFFFFF6FB7DA00000ULL
+#define PDE_BASE    0xFFFFF6FB40000000ULL
+#define PTE_BASE    0xFFFFF68000000000ULL
+#define PXE_TOP     0xFFFFF6FB7DBEDFFFULL
+#define PPE_TOP     0xFFFFF6FB7DBFFFFFULL
+#define PDE_TOP     0xFFFFF6FB7FFFFFFFULL
+#define PTE_TOP     0xFFFFF6FFFFFFFFFFULL
+
+extern NTKERNELAPI PVOID MmHighestUserAddress;
+extern NTKERNELAPI PVOID MmSystemRangeStart;
+extern NTKERNELAPI ULONG64 MmUserProbeAddress;
+
+#define MM_HIGHEST_USER_ADDRESS           MmHighestUserAddress
+#define MM_SYSTEM_RANGE_START             MmSystemRangeStart
+#define MM_USER_PROBE_ADDRESS             MmUserProbeAddress
+#define MM_LOWEST_USER_ADDRESS   (PVOID)0x10000
+#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
+
+$endif /* _NTDDK_ */
+
diff --git a/reactos/include/xdk/arm/ke.h b/reactos/include/xdk/arm/ke.h
new file mode 100644 (file)
index 0000000..372e565
--- /dev/null
@@ -0,0 +1,3 @@
+$if (_WDMDDK_)
+#include <armddk.h>
+$endif
diff --git a/reactos/include/xdk/cmfuncs.h b/reactos/include/xdk/cmfuncs.h
new file mode 100644 (file)
index 0000000..9fb3de0
--- /dev/null
@@ -0,0 +1,70 @@
+/******************************************************************************
+ *                         Configuration Manager Functions                    *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+CmRegisterCallback(
+  IN PEX_CALLBACK_FUNCTION Function,
+  IN PVOID Context OPTIONAL,
+  OUT PLARGE_INTEGER Cookie);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+CmUnRegisterCallback(
+  IN LARGE_INTEGER Cookie);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+CmRegisterCallbackEx(
+  PEX_CALLBACK_FUNCTION Function,
+  PCUNICODE_STRING Altitude,
+  PVOID Driver,
+  PVOID Context,
+  PLARGE_INTEGER Cookie,
+  PVOID Reserved);
+
+NTKERNELAPI
+VOID
+NTAPI
+CmGetCallbackVersion(
+  OUT PULONG Major OPTIONAL,
+  OUT PULONG Minor OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+CmSetCallbackObjectContext(
+  IN OUT PVOID Object,
+  IN PLARGE_INTEGER Cookie,
+  IN PVOID NewContext,
+  OUT PVOID *OldContext OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+CmCallbackGetKeyObjectID(
+  IN PLARGE_INTEGER Cookie,
+  IN PVOID Object,
+  OUT PULONG_PTR ObjectID OPTIONAL,
+  OUT PCUNICODE_STRING *ObjectName OPTIONAL);
+
+NTKERNELAPI
+PVOID
+NTAPI
+CmGetBoundTransaction(
+  IN PLARGE_INTEGER Cookie,
+  IN PVOID Object);
+
+#endif // NTDDI_VERSION >= NTDDI_VISTA
+
+$endif
+
diff --git a/reactos/include/xdk/cmtypes.h b/reactos/include/xdk/cmtypes.h
new file mode 100644 (file)
index 0000000..2599a78
--- /dev/null
@@ -0,0 +1,1048 @@
+/******************************************************************************
+ *                            Configuration Manager Types                     *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+/* Resource list definitions */
+typedef int CM_RESOURCE_TYPE;
+
+#define CmResourceTypeNull              0
+#define CmResourceTypePort              1
+#define CmResourceTypeInterrupt         2
+#define CmResourceTypeMemory            3
+#define CmResourceTypeDma               4
+#define CmResourceTypeDeviceSpecific    5
+#define CmResourceTypeBusNumber         6
+#define CmResourceTypeNonArbitrated     128
+#define CmResourceTypeConfigData        128
+#define CmResourceTypeDevicePrivate     129
+#define CmResourceTypePcCardConfig      130
+#define CmResourceTypeMfCardConfig      131
+
+/* KEY_VALUE_Xxx.Type */
+#define REG_NONE                           0
+#define REG_SZ                             1
+#define REG_EXPAND_SZ                      2
+#define REG_BINARY                         3
+#define REG_DWORD                          4
+#define REG_DWORD_LITTLE_ENDIAN            4
+#define REG_DWORD_BIG_ENDIAN               5
+#define REG_LINK                           6
+#define REG_MULTI_SZ                       7
+#define REG_RESOURCE_LIST                  8
+#define REG_FULL_RESOURCE_DESCRIPTOR       9
+#define REG_RESOURCE_REQUIREMENTS_LIST     10
+#define REG_QWORD                          11
+#define REG_QWORD_LITTLE_ENDIAN            11
+
+/* Registry Access Rights */
+#define KEY_QUERY_VALUE         (0x0001)
+#define KEY_SET_VALUE           (0x0002)
+#define KEY_CREATE_SUB_KEY      (0x0004)
+#define KEY_ENUMERATE_SUB_KEYS  (0x0008)
+#define KEY_NOTIFY              (0x0010)
+#define KEY_CREATE_LINK         (0x0020)
+#define KEY_WOW64_32KEY         (0x0200)
+#define KEY_WOW64_64KEY         (0x0100)
+#define KEY_WOW64_RES           (0x0300)
+
+#define KEY_READ                ((STANDARD_RIGHTS_READ       |\
+                                  KEY_QUERY_VALUE            |\
+                                  KEY_ENUMERATE_SUB_KEYS     |\
+                                  KEY_NOTIFY)                 \
+                                  &                           \
+                                 (~SYNCHRONIZE))
+
+#define KEY_WRITE               ((STANDARD_RIGHTS_WRITE      |\
+                                  KEY_SET_VALUE              |\
+                                  KEY_CREATE_SUB_KEY)         \
+                                  &                           \
+                                 (~SYNCHRONIZE))
+
+#define KEY_EXECUTE             ((KEY_READ)                   \
+                                  &                           \
+                                 (~SYNCHRONIZE))
+
+#define KEY_ALL_ACCESS          ((STANDARD_RIGHTS_ALL        |\
+                                  KEY_QUERY_VALUE            |\
+                                  KEY_SET_VALUE              |\
+                                  KEY_CREATE_SUB_KEY         |\
+                                  KEY_ENUMERATE_SUB_KEYS     |\
+                                  KEY_NOTIFY                 |\
+                                  KEY_CREATE_LINK)            \
+                                  &                           \
+                                 (~SYNCHRONIZE))
+
+/* Registry Open/Create Options */
+#define REG_OPTION_RESERVED         (0x00000000L)
+#define REG_OPTION_NON_VOLATILE     (0x00000000L)
+#define REG_OPTION_VOLATILE         (0x00000001L)
+#define REG_OPTION_CREATE_LINK      (0x00000002L)
+#define REG_OPTION_BACKUP_RESTORE   (0x00000004L)
+#define REG_OPTION_OPEN_LINK        (0x00000008L)
+
+#define REG_LEGAL_OPTION            \
+                (REG_OPTION_RESERVED            |\
+                 REG_OPTION_NON_VOLATILE        |\
+                 REG_OPTION_VOLATILE            |\
+                 REG_OPTION_CREATE_LINK         |\
+                 REG_OPTION_BACKUP_RESTORE      |\
+                 REG_OPTION_OPEN_LINK)
+
+#define REG_OPEN_LEGAL_OPTION       \
+                (REG_OPTION_RESERVED            |\
+                 REG_OPTION_BACKUP_RESTORE      |\
+                 REG_OPTION_OPEN_LINK)
+
+#define REG_STANDARD_FORMAT            1
+#define REG_LATEST_FORMAT              2
+#define REG_NO_COMPRESSION             4
+
+/* Key creation/open disposition */
+#define REG_CREATED_NEW_KEY         (0x00000001L)
+#define REG_OPENED_EXISTING_KEY     (0x00000002L)
+
+/* Key restore & hive load flags */
+#define REG_WHOLE_HIVE_VOLATILE         (0x00000001L)
+#define REG_REFRESH_HIVE                (0x00000002L)
+#define REG_NO_LAZY_FLUSH               (0x00000004L)
+#define REG_FORCE_RESTORE               (0x00000008L)
+#define REG_APP_HIVE                    (0x00000010L)
+#define REG_PROCESS_PRIVATE             (0x00000020L)
+#define REG_START_JOURNAL               (0x00000040L)
+#define REG_HIVE_EXACT_FILE_GROWTH      (0x00000080L)
+#define REG_HIVE_NO_RM                  (0x00000100L)
+#define REG_HIVE_SINGLE_LOG             (0x00000200L)
+#define REG_BOOT_HIVE                   (0x00000400L)
+
+/* Unload Flags */
+#define REG_FORCE_UNLOAD            1
+
+/* Notify Filter Values */
+#define REG_NOTIFY_CHANGE_NAME          (0x00000001L)
+#define REG_NOTIFY_CHANGE_ATTRIBUTES    (0x00000002L)
+#define REG_NOTIFY_CHANGE_LAST_SET      (0x00000004L)
+#define REG_NOTIFY_CHANGE_SECURITY      (0x00000008L)
+
+#define REG_LEGAL_CHANGE_FILTER                 \
+                (REG_NOTIFY_CHANGE_NAME          |\
+                 REG_NOTIFY_CHANGE_ATTRIBUTES    |\
+                 REG_NOTIFY_CHANGE_LAST_SET      |\
+                 REG_NOTIFY_CHANGE_SECURITY)
+
+#include <pshpack4.h>
+typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
+  UCHAR Type;
+  UCHAR ShareDisposition;
+  USHORT Flags;
+  union {
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length;
+    } Generic;
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length;
+    } Port;
+    struct {
+#if defined(NT_PROCESSOR_GROUPS)
+      USHORT Level;
+      USHORT Group;
+#else
+      ULONG Level;
+#endif
+      ULONG Vector;
+      KAFFINITY Affinity;
+    } Interrupt;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    struct {
+      __GNU_EXTENSION union {
+        struct {
+#if defined(NT_PROCESSOR_GROUPS)
+          USHORT Group;
+#else
+          USHORT Reserved;
+#endif
+          USHORT MessageCount;
+          ULONG Vector;
+          KAFFINITY Affinity;
+        } Raw;
+        struct {
+#if defined(NT_PROCESSOR_GROUPS)
+          USHORT Level;
+          USHORT Group;
+#else
+          ULONG Level;
+#endif
+          ULONG Vector;
+          KAFFINITY Affinity;
+        } Translated;
+      } DUMMYUNIONNAME;
+    } MessageInterrupt;
+#endif
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length;
+    } Memory;
+    struct {
+      ULONG Channel;
+      ULONG Port;
+      ULONG Reserved1;
+    } Dma;
+    struct {
+      ULONG Data[3];
+    } DevicePrivate;
+    struct {
+      ULONG Start;
+      ULONG Length;
+      ULONG Reserved;
+    } BusNumber;
+    struct {
+      ULONG DataSize;
+      ULONG Reserved1;
+      ULONG Reserved2;
+    } DeviceSpecificData;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length40;
+    } Memory40;
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length48;
+    } Memory48;
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length64;
+    } Memory64;
+#endif
+  } u;
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
+#include <poppack.h>
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
+#define CmResourceTypeNull                0
+#define CmResourceTypePort                1
+#define CmResourceTypeInterrupt           2
+#define CmResourceTypeMemory              3
+#define CmResourceTypeDma                 4
+#define CmResourceTypeDeviceSpecific      5
+#define CmResourceTypeBusNumber           6
+#define CmResourceTypeMemoryLarge         7
+#define CmResourceTypeNonArbitrated       128
+#define CmResourceTypeConfigData          128
+#define CmResourceTypeDevicePrivate       129
+#define CmResourceTypePcCardConfig        130
+#define CmResourceTypeMfCardConfig        131
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
+typedef enum _CM_SHARE_DISPOSITION {
+  CmResourceShareUndetermined = 0,
+  CmResourceShareDeviceExclusive,
+  CmResourceShareDriverExclusive,
+  CmResourceShareShared
+} CM_SHARE_DISPOSITION;
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
+#define CM_RESOURCE_PORT_MEMORY           0x0000
+#define CM_RESOURCE_PORT_IO               0x0001
+#define CM_RESOURCE_PORT_10_BIT_DECODE    0x0004
+#define CM_RESOURCE_PORT_12_BIT_DECODE    0x0008
+#define CM_RESOURCE_PORT_16_BIT_DECODE    0x0010
+#define CM_RESOURCE_PORT_POSITIVE_DECODE  0x0020
+#define CM_RESOURCE_PORT_PASSIVE_DECODE   0x0040
+#define CM_RESOURCE_PORT_WINDOW_DECODE    0x0080
+#define CM_RESOURCE_PORT_BAR              0x0100
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
+#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
+#define CM_RESOURCE_INTERRUPT_LATCHED         0x0001
+#define CM_RESOURCE_INTERRUPT_MESSAGE         0x0002
+#define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
+
+#define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
+
+#define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN   ((ULONG)-2)
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
+#define CM_RESOURCE_MEMORY_READ_WRITE                    0x0000
+#define CM_RESOURCE_MEMORY_READ_ONLY                     0x0001
+#define CM_RESOURCE_MEMORY_WRITE_ONLY                    0x0002
+#define CM_RESOURCE_MEMORY_WRITEABILITY_MASK             0x0003
+#define CM_RESOURCE_MEMORY_PREFETCHABLE                  0x0004
+#define CM_RESOURCE_MEMORY_COMBINEDWRITE                 0x0008
+#define CM_RESOURCE_MEMORY_24                            0x0010
+#define CM_RESOURCE_MEMORY_CACHEABLE                     0x0020
+#define CM_RESOURCE_MEMORY_WINDOW_DECODE                 0x0040
+#define CM_RESOURCE_MEMORY_BAR                           0x0080
+#define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
+
+#define CM_RESOURCE_MEMORY_LARGE                         0x0E00
+#define CM_RESOURCE_MEMORY_LARGE_40                      0x0200
+#define CM_RESOURCE_MEMORY_LARGE_48                      0x0400
+#define CM_RESOURCE_MEMORY_LARGE_64                      0x0800
+
+#define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN               0x000000FFFFFFFF00
+#define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN               0x0000FFFFFFFF0000
+#define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN               0xFFFFFFFF00000000
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
+#define CM_RESOURCE_DMA_8                 0x0000
+#define CM_RESOURCE_DMA_16                0x0001
+#define CM_RESOURCE_DMA_32                0x0002
+#define CM_RESOURCE_DMA_8_AND_16          0x0004
+#define CM_RESOURCE_DMA_BUS_MASTER        0x0008
+#define CM_RESOURCE_DMA_TYPE_A            0x0010
+#define CM_RESOURCE_DMA_TYPE_B            0x0020
+#define CM_RESOURCE_DMA_TYPE_F            0x0040
+
+typedef struct _DEVICE_FLAGS {
+  ULONG Failed:1;
+  ULONG ReadOnly:1;
+  ULONG Removable:1;
+  ULONG ConsoleIn:1;
+  ULONG ConsoleOut:1;
+  ULONG Input:1;
+  ULONG Output:1;
+} DEVICE_FLAGS, *PDEVICE_FLAGS;
+
+typedef enum _INTERFACE_TYPE {
+  InterfaceTypeUndefined = -1,
+  Internal,
+  Isa,
+  Eisa,
+  MicroChannel,
+  TurboChannel,
+  PCIBus,
+  VMEBus,
+  NuBus,
+  PCMCIABus,
+  CBus,
+  MPIBus,
+  MPSABus,
+  ProcessorInternal,
+  InternalPowerBus,
+  PNPISABus,
+  PNPBus,
+  Vmcs,
+  MaximumInterfaceType
+} INTERFACE_TYPE, *PINTERFACE_TYPE;
+
+typedef struct _CM_COMPONENT_INFORMATION {
+  DEVICE_FLAGS Flags;
+  ULONG Version;
+  ULONG Key;
+  KAFFINITY AffinityMask;
+} CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION;
+
+typedef struct _CM_ROM_BLOCK {
+  ULONG Address;
+  ULONG Size;
+} CM_ROM_BLOCK, *PCM_ROM_BLOCK;
+
+typedef struct _CM_PARTIAL_RESOURCE_LIST {
+  USHORT Version;
+  USHORT Revision;
+  ULONG Count;
+  CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
+} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
+
+typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
+  INTERFACE_TYPE InterfaceType;
+  ULONG BusNumber;
+  CM_PARTIAL_RESOURCE_LIST PartialResourceList;
+} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
+
+typedef struct _CM_RESOURCE_LIST {
+  ULONG Count;
+  CM_FULL_RESOURCE_DESCRIPTOR List[1];
+} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
+
+typedef struct _PNP_BUS_INFORMATION {
+  GUID BusTypeGuid;
+  INTERFACE_TYPE LegacyBusType;
+  ULONG BusNumber;
+} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
+
+#include <pshpack1.h>
+
+typedef struct _CM_INT13_DRIVE_PARAMETER {
+  USHORT DriveSelect;
+  ULONG MaxCylinders;
+  USHORT SectorsPerTrack;
+  USHORT MaxHeads;
+  USHORT NumberDrives;
+} CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
+
+typedef struct _CM_MCA_POS_DATA {
+  USHORT AdapterId;
+  UCHAR PosData1;
+  UCHAR PosData2;
+  UCHAR PosData3;
+  UCHAR PosData4;
+} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
+
+typedef struct _CM_PNP_BIOS_DEVICE_NODE {
+  USHORT Size;
+  UCHAR Node;
+  ULONG ProductId;
+  UCHAR DeviceType[3];
+  USHORT DeviceAttributes;
+} CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE;
+
+typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK {
+  UCHAR Signature[4];
+  UCHAR Revision;
+  UCHAR Length;
+  USHORT ControlField;
+  UCHAR Checksum;
+  ULONG EventFlagAddress;
+  USHORT RealModeEntryOffset;
+  USHORT RealModeEntrySegment;
+  USHORT ProtectedModeEntryOffset;
+  ULONG ProtectedModeCodeBaseAddress;
+  ULONG OemDeviceId;
+  USHORT RealModeDataBaseAddress;
+  ULONG ProtectedModeDataBaseAddress;
+} CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK;
+
+#include <poppack.h>
+
+typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA {
+  ULONG BytesPerSector;
+  ULONG NumberOfCylinders;
+  ULONG SectorsPerTrack;
+  ULONG NumberOfHeads;
+} CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
+
+typedef struct _CM_KEYBOARD_DEVICE_DATA {
+  USHORT Version;
+  USHORT Revision;
+  UCHAR Type;
+  UCHAR Subtype;
+  USHORT KeyboardFlags;
+} CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA;
+
+typedef struct _CM_SCSI_DEVICE_DATA {
+  USHORT Version;
+  USHORT Revision;
+  UCHAR HostIdentifier;
+} CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA;
+
+typedef struct _CM_VIDEO_DEVICE_DATA {
+  USHORT Version;
+  USHORT Revision;
+  ULONG VideoClock;
+} CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA;
+
+typedef struct _CM_SONIC_DEVICE_DATA {
+  USHORT Version;
+  USHORT Revision;
+  USHORT DataConfigurationRegister;
+  UCHAR EthernetAddress[8];
+} CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA;
+
+typedef struct _CM_SERIAL_DEVICE_DATA {
+  USHORT Version;
+  USHORT Revision;
+  ULONG BaudClock;
+} CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
+
+typedef struct _CM_MONITOR_DEVICE_DATA {
+  USHORT Version;
+  USHORT Revision;
+  USHORT HorizontalScreenSize;
+  USHORT VerticalScreenSize;
+  USHORT HorizontalResolution;
+  USHORT VerticalResolution;
+  USHORT HorizontalDisplayTimeLow;
+  USHORT HorizontalDisplayTime;
+  USHORT HorizontalDisplayTimeHigh;
+  USHORT HorizontalBackPorchLow;
+  USHORT HorizontalBackPorch;
+  USHORT HorizontalBackPorchHigh;
+  USHORT HorizontalFrontPorchLow;
+  USHORT HorizontalFrontPorch;
+  USHORT HorizontalFrontPorchHigh;
+  USHORT HorizontalSyncLow;
+  USHORT HorizontalSync;
+  USHORT HorizontalSyncHigh;
+  USHORT VerticalBackPorchLow;
+  USHORT VerticalBackPorch;
+  USHORT VerticalBackPorchHigh;
+  USHORT VerticalFrontPorchLow;
+  USHORT VerticalFrontPorch;
+  USHORT VerticalFrontPorchHigh;
+  USHORT VerticalSyncLow;
+  USHORT VerticalSync;
+  USHORT VerticalSyncHigh;
+} CM_MONITOR_DEVICE_DATA, *PCM_MONITOR_DEVICE_DATA;
+
+typedef struct _CM_FLOPPY_DEVICE_DATA {
+  USHORT Version;
+  USHORT Revision;
+  CHAR Size[8];
+  ULONG MaxDensity;
+  ULONG MountDensity;
+  UCHAR StepRateHeadUnloadTime;
+  UCHAR HeadLoadTime;
+  UCHAR MotorOffTime;
+  UCHAR SectorLengthCode;
+  UCHAR SectorPerTrack;
+  UCHAR ReadWriteGapLength;
+  UCHAR DataTransferLength;
+  UCHAR FormatGapLength;
+  UCHAR FormatFillCharacter;
+  UCHAR HeadSettleTime;
+  UCHAR MotorSettleTime;
+  UCHAR MaximumTrackValue;
+  UCHAR DataTransferRate;
+} CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
+
+typedef enum _KEY_INFORMATION_CLASS {
+  KeyBasicInformation,
+  KeyNodeInformation,
+  KeyFullInformation,
+  KeyNameInformation,
+  KeyCachedInformation,
+  KeyFlagsInformation,
+  KeyVirtualizationInformation,
+  KeyHandleTagsInformation,
+  MaxKeyInfoClass
+} KEY_INFORMATION_CLASS;
+
+typedef struct _KEY_BASIC_INFORMATION {
+  LARGE_INTEGER LastWriteTime;
+  ULONG TitleIndex;
+  ULONG NameLength;
+  WCHAR Name[1];
+} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
+
+typedef struct _KEY_CONTROL_FLAGS_INFORMATION {
+  ULONG ControlFlags;
+} KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION;
+
+typedef struct _KEY_FULL_INFORMATION {
+  LARGE_INTEGER LastWriteTime;
+  ULONG TitleIndex;
+  ULONG ClassOffset;
+  ULONG ClassLength;
+  ULONG SubKeys;
+  ULONG MaxNameLen;
+  ULONG MaxClassLen;
+  ULONG Values;
+  ULONG MaxValueNameLen;
+  ULONG MaxValueDataLen;
+  WCHAR Class[1];
+} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
+
+typedef struct _KEY_HANDLE_TAGS_INFORMATION {
+  ULONG HandleTags;
+} KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION;
+
+typedef struct _KEY_NODE_INFORMATION {
+  LARGE_INTEGER LastWriteTime;
+  ULONG TitleIndex;
+  ULONG ClassOffset;
+  ULONG ClassLength;
+  ULONG NameLength;
+  WCHAR Name[1];
+} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
+
+typedef enum _KEY_SET_INFORMATION_CLASS {
+  KeyWriteTimeInformation,
+  KeyWow64FlagsInformation,
+  KeyControlFlagsInformation,
+  KeySetVirtualizationInformation,
+  KeySetDebugInformation,
+  KeySetHandleTagsInformation,
+  MaxKeySetInfoClass
+} KEY_SET_INFORMATION_CLASS;
+
+typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION {
+  ULONG VirtualTarget:1;
+  ULONG VirtualStore:1;
+  ULONG VirtualSource:1;
+  ULONG Reserved:29;
+} KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION;
+
+typedef struct _KEY_VALUE_BASIC_INFORMATION {
+  ULONG TitleIndex;
+  ULONG Type;
+  ULONG NameLength;
+  WCHAR Name[1];
+} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
+
+typedef struct _KEY_VALUE_FULL_INFORMATION {
+  ULONG TitleIndex;
+  ULONG Type;
+  ULONG DataOffset;
+  ULONG DataLength;
+  ULONG NameLength;
+  WCHAR Name[1];
+} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
+  ULONG TitleIndex;
+  ULONG Type;
+  ULONG DataLength;
+  UCHAR Data[1];
+} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 {
+  ULONG Type;
+  ULONG DataLength;
+  UCHAR Data[1];
+} KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
+
+typedef struct _KEY_VALUE_ENTRY {
+  PUNICODE_STRING ValueName;
+  ULONG DataLength;
+  ULONG DataOffset;
+  ULONG Type;
+} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
+
+typedef enum _KEY_VALUE_INFORMATION_CLASS {
+  KeyValueBasicInformation,
+  KeyValueFullInformation,
+  KeyValuePartialInformation,
+  KeyValueFullInformationAlign64,
+  KeyValuePartialInformationAlign64
+} KEY_VALUE_INFORMATION_CLASS;
+
+typedef struct _KEY_WOW64_FLAGS_INFORMATION {
+  ULONG UserFlags;
+} KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION;
+
+typedef struct _KEY_WRITE_TIME_INFORMATION {
+  LARGE_INTEGER LastWriteTime;
+} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
+
+typedef enum _REG_NOTIFY_CLASS {
+  RegNtDeleteKey,
+  RegNtPreDeleteKey = RegNtDeleteKey,
+  RegNtSetValueKey,
+  RegNtPreSetValueKey = RegNtSetValueKey,
+  RegNtDeleteValueKey,
+  RegNtPreDeleteValueKey = RegNtDeleteValueKey,
+  RegNtSetInformationKey,
+  RegNtPreSetInformationKey = RegNtSetInformationKey,
+  RegNtRenameKey,
+  RegNtPreRenameKey = RegNtRenameKey,
+  RegNtEnumerateKey,
+  RegNtPreEnumerateKey = RegNtEnumerateKey,
+  RegNtEnumerateValueKey,
+  RegNtPreEnumerateValueKey = RegNtEnumerateValueKey,
+  RegNtQueryKey,
+  RegNtPreQueryKey = RegNtQueryKey,
+  RegNtQueryValueKey,
+  RegNtPreQueryValueKey = RegNtQueryValueKey,
+  RegNtQueryMultipleValueKey,
+  RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey,
+  RegNtPreCreateKey,
+  RegNtPostCreateKey,
+  RegNtPreOpenKey,
+  RegNtPostOpenKey,
+  RegNtKeyHandleClose,
+  RegNtPreKeyHandleClose = RegNtKeyHandleClose,
+  RegNtPostDeleteKey,
+  RegNtPostSetValueKey,
+  RegNtPostDeleteValueKey,
+  RegNtPostSetInformationKey,
+  RegNtPostRenameKey,
+  RegNtPostEnumerateKey,
+  RegNtPostEnumerateValueKey,
+  RegNtPostQueryKey,
+  RegNtPostQueryValueKey,
+  RegNtPostQueryMultipleValueKey,
+  RegNtPostKeyHandleClose,
+  RegNtPreCreateKeyEx,
+  RegNtPostCreateKeyEx,
+  RegNtPreOpenKeyEx,
+  RegNtPostOpenKeyEx,
+  RegNtPreFlushKey,
+  RegNtPostFlushKey,
+  RegNtPreLoadKey,
+  RegNtPostLoadKey,
+  RegNtPreUnLoadKey,
+  RegNtPostUnLoadKey,
+  RegNtPreQueryKeySecurity,
+  RegNtPostQueryKeySecurity,
+  RegNtPreSetKeySecurity,
+  RegNtPostSetKeySecurity,
+  RegNtCallbackObjectContextCleanup,
+  RegNtPreRestoreKey,
+  RegNtPostRestoreKey,
+  RegNtPreSaveKey,
+  RegNtPostSaveKey,
+  RegNtPreReplaceKey,
+  RegNtPostReplaceKey,
+  MaxRegNtNotifyClass
+} REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS;
+
+typedef NTSTATUS
+(NTAPI EX_CALLBACK_FUNCTION)(
+  IN PVOID CallbackContext,
+  IN PVOID Argument1,
+  IN PVOID Argument2);
+typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION;
+
+typedef struct _REG_DELETE_KEY_INFORMATION {
+  PVOID Object;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+, REG_FLUSH_KEY_INFORMATION, *PREG_FLUSH_KEY_INFORMATION
+#endif
+;
+
+typedef struct _REG_SET_VALUE_KEY_INFORMATION {
+  PVOID Object;
+  PUNICODE_STRING ValueName;
+  ULONG TitleIndex;
+  ULONG Type;
+  PVOID Data;
+  ULONG DataSize;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_DELETE_VALUE_KEY_INFORMATION {
+  PVOID Object;
+  PUNICODE_STRING ValueName;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_SET_INFORMATION_KEY_INFORMATION {
+  PVOID Object;
+  KEY_SET_INFORMATION_CLASS KeySetInformationClass;
+  PVOID KeySetInformation;
+  ULONG KeySetInformationLength;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION;
+
+typedef struct _REG_ENUMERATE_KEY_INFORMATION {
+  PVOID Object;
+  ULONG Index;
+  KEY_INFORMATION_CLASS KeyInformationClass;
+  PVOID KeyInformation;
+  ULONG Length;
+  PULONG ResultLength;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION;
+
+typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION {
+  PVOID Object;
+  ULONG Index;
+  KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
+  PVOID KeyValueInformation;
+  ULONG Length;
+  PULONG ResultLength;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_QUERY_KEY_INFORMATION {
+  PVOID Object;
+  KEY_INFORMATION_CLASS KeyInformationClass;
+  PVOID KeyInformation;
+  ULONG Length;
+  PULONG ResultLength;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION;
+
+typedef struct _REG_QUERY_VALUE_KEY_INFORMATION {
+  PVOID Object;
+  PUNICODE_STRING ValueName;
+  KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
+  PVOID KeyValueInformation;
+  ULONG Length;
+  PULONG ResultLength;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION {
+  PVOID Object;
+  PKEY_VALUE_ENTRY ValueEntries;
+  ULONG EntryCount;
+  PVOID ValueBuffer;
+  PULONG BufferLength;
+  PULONG RequiredBufferLength;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_RENAME_KEY_INFORMATION {
+  PVOID Object;
+  PUNICODE_STRING NewName;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_RENAME_KEY_INFORMATION, *PREG_RENAME_KEY_INFORMATION;
+
+typedef struct _REG_CREATE_KEY_INFORMATION {
+  PUNICODE_STRING CompleteName;
+  PVOID RootObject;
+  PVOID ObjectType;
+  ULONG CreateOptions;
+  PUNICODE_STRING Class;
+  PVOID SecurityDescriptor;
+  PVOID SecurityQualityOfService;
+  ACCESS_MASK DesiredAccess;
+  ACCESS_MASK GrantedAccess;
+  PULONG Disposition;
+  PVOID *ResultObject;
+  PVOID CallContext;
+  PVOID RootObjectContext;
+  PVOID Transaction;
+  PVOID Reserved;
+} REG_CREATE_KEY_INFORMATION, REG_OPEN_KEY_INFORMATION,*PREG_CREATE_KEY_INFORMATION, *PREG_OPEN_KEY_INFORMATION;
+
+typedef struct _REG_CREATE_KEY_INFORMATION_V1 {
+  PUNICODE_STRING CompleteName;
+  PVOID RootObject;
+  PVOID ObjectType;
+  ULONG Options;
+  PUNICODE_STRING Class;
+  PVOID SecurityDescriptor;
+  PVOID SecurityQualityOfService;
+  ACCESS_MASK DesiredAccess;
+  ACCESS_MASK GrantedAccess;
+  PULONG Disposition;
+  PVOID *ResultObject;
+  PVOID CallContext;
+  PVOID RootObjectContext;
+  PVOID Transaction;
+  ULONG_PTR Version;
+  PUNICODE_STRING RemainingName;
+  ULONG Wow64Flags;
+  ULONG Attributes;
+  KPROCESSOR_MODE CheckAccessMode;
+} REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION_V1,*PREG_CREATE_KEY_INFORMATION_V1, *PREG_OPEN_KEY_INFORMATION_V1;
+
+typedef struct _REG_PRE_CREATE_KEY_INFORMATION {
+  PUNICODE_STRING CompleteName;
+} REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;;
+
+typedef struct _REG_POST_CREATE_KEY_INFORMATION {
+  PUNICODE_STRING CompleteName;
+  PVOID Object;
+  NTSTATUS Status;
+} REG_POST_CREATE_KEY_INFORMATION,REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION;
+
+typedef struct _REG_POST_OPERATION_INFORMATION {
+  PVOID Object;
+  NTSTATUS Status;
+  PVOID PreInformation;
+  NTSTATUS ReturnStatus;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
+
+typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION {
+  PVOID Object;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION;
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+typedef struct _REG_LOAD_KEY_INFORMATION {
+  PVOID Object;
+  PUNICODE_STRING KeyName;
+  PUNICODE_STRING SourceFile;
+  ULONG Flags;
+  PVOID TrustClassObject;
+  PVOID UserEvent;
+  ACCESS_MASK DesiredAccess;
+  PHANDLE RootHandle;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_LOAD_KEY_INFORMATION, *PREG_LOAD_KEY_INFORMATION;
+
+typedef struct _REG_UNLOAD_KEY_INFORMATION {
+  PVOID Object;
+  PVOID UserEvent;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION;
+
+typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION {
+  PVOID Object;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION;
+
+typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION {
+  PVOID Object;
+  PSECURITY_INFORMATION SecurityInformation;
+  PSECURITY_DESCRIPTOR SecurityDescriptor;
+  PULONG Length;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_QUERY_KEY_SECURITY_INFORMATION, *PREG_QUERY_KEY_SECURITY_INFORMATION;
+
+typedef struct _REG_SET_KEY_SECURITY_INFORMATION {
+  PVOID Object;
+  PSECURITY_INFORMATION SecurityInformation;
+  PSECURITY_DESCRIPTOR SecurityDescriptor;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_SET_KEY_SECURITY_INFORMATION, *PREG_SET_KEY_SECURITY_INFORMATION;
+
+typedef struct _REG_RESTORE_KEY_INFORMATION {
+  PVOID Object;
+  HANDLE FileHandle;
+  ULONG Flags;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_RESTORE_KEY_INFORMATION, *PREG_RESTORE_KEY_INFORMATION;
+
+typedef struct _REG_SAVE_KEY_INFORMATION {
+  PVOID Object;
+  HANDLE FileHandle;
+  ULONG Format;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_SAVE_KEY_INFORMATION, *PREG_SAVE_KEY_INFORMATION;
+
+typedef struct _REG_REPLACE_KEY_INFORMATION {
+  PVOID Object;
+  PUNICODE_STRING OldFileName;
+  PUNICODE_STRING NewFileName;
+  PVOID CallContext;
+  PVOID ObjectContext;
+  PVOID Reserved;
+} REG_REPLACE_KEY_INFORMATION, *PREG_REPLACE_KEY_INFORMATION;
+
+#endif /* NTDDI_VERSION >= NTDDI_VISTA */
+
+#define SERVICE_KERNEL_DRIVER          0x00000001
+#define SERVICE_FILE_SYSTEM_DRIVER     0x00000002
+#define SERVICE_ADAPTER                0x00000004
+#define SERVICE_RECOGNIZER_DRIVER      0x00000008
+
+#define SERVICE_DRIVER                 (SERVICE_KERNEL_DRIVER | \
+                                        SERVICE_FILE_SYSTEM_DRIVER | \
+                                        SERVICE_RECOGNIZER_DRIVER)
+
+#define SERVICE_WIN32_OWN_PROCESS      0x00000010
+#define SERVICE_WIN32_SHARE_PROCESS    0x00000020
+#define SERVICE_WIN32                  (SERVICE_WIN32_OWN_PROCESS | \
+                                        SERVICE_WIN32_SHARE_PROCESS)
+
+#define SERVICE_INTERACTIVE_PROCESS    0x00000100
+
+#define SERVICE_TYPE_ALL               (SERVICE_WIN32  | \
+                                        SERVICE_ADAPTER | \
+                                        SERVICE_DRIVER  | \
+                                        SERVICE_INTERACTIVE_PROCESS)
+
+/* Service Start Types */
+#define SERVICE_BOOT_START             0x00000000
+#define SERVICE_SYSTEM_START           0x00000001
+#define SERVICE_AUTO_START             0x00000002
+#define SERVICE_DEMAND_START           0x00000003
+#define SERVICE_DISABLED               0x00000004
+
+#define SERVICE_ERROR_IGNORE           0x00000000
+#define SERVICE_ERROR_NORMAL           0x00000001
+#define SERVICE_ERROR_SEVERE           0x00000002
+#define SERVICE_ERROR_CRITICAL         0x00000003
+
+typedef enum _CM_SERVICE_NODE_TYPE {
+  DriverType = SERVICE_KERNEL_DRIVER,
+  FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
+  Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
+  Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
+  AdapterType = SERVICE_ADAPTER,
+  RecognizerType = SERVICE_RECOGNIZER_DRIVER
+} SERVICE_NODE_TYPE;
+
+typedef enum _CM_SERVICE_LOAD_TYPE {
+  BootLoad = SERVICE_BOOT_START,
+  SystemLoad = SERVICE_SYSTEM_START,
+  AutoLoad = SERVICE_AUTO_START,
+  DemandLoad = SERVICE_DEMAND_START,
+  DisableLoad = SERVICE_DISABLED
+} SERVICE_LOAD_TYPE;
+
+typedef enum _CM_ERROR_CONTROL_TYPE {
+  IgnoreError = SERVICE_ERROR_IGNORE,
+  NormalError = SERVICE_ERROR_NORMAL,
+  SevereError = SERVICE_ERROR_SEVERE,
+  CriticalError = SERVICE_ERROR_CRITICAL
+} SERVICE_ERROR_TYPE;
+
+#define CM_SERVICE_NETWORK_BOOT_LOAD      0x00000001
+#define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
+#define CM_SERVICE_USB_DISK_BOOT_LOAD     0x00000004
+
+#define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD |       \
+                                         CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD |  \
+                                         CM_SERVICE_USB_DISK_BOOT_LOAD)
+
+$endif
+$if (_NTDDK_)
+
+typedef struct _KEY_NAME_INFORMATION {
+  ULONG NameLength;
+  WCHAR Name[1];
+} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
+
+typedef struct _KEY_CACHED_INFORMATION {
+  LARGE_INTEGER LastWriteTime;
+  ULONG TitleIndex;
+  ULONG SubKeys;
+  ULONG MaxNameLen;
+  ULONG Values;
+  ULONG MaxValueNameLen;
+  ULONG MaxValueDataLen;
+  ULONG NameLength;
+} KEY_CACHED_INFORMATION, *PKEY_CACHED_INFORMATION;
+
+typedef struct _KEY_VIRTUALIZATION_INFORMATION {
+  ULONG VirtualizationCandidate:1;
+  ULONG VirtualizationEnabled:1;
+  ULONG VirtualTarget:1;
+  ULONG VirtualStore:1;
+  ULONG VirtualSource:1;
+  ULONG Reserved:27;
+} KEY_VIRTUALIZATION_INFORMATION, *PKEY_VIRTUALIZATION_INFORMATION;
+
+#define CmResourceTypeMaximum             8
+
+typedef struct _CM_PCCARD_DEVICE_DATA {
+  UCHAR Flags;
+  UCHAR ErrorCode;
+  USHORT Reserved;
+  ULONG BusData;
+  ULONG DeviceId;
+  ULONG LegacyBaseAddress;
+  UCHAR IRQMap[16];
+} CM_PCCARD_DEVICE_DATA, *PCM_PCCARD_DEVICE_DATA;
+
+$endif /* _NTDDK_ */
diff --git a/reactos/include/xdk/exfuncs.h b/reactos/include/xdk/exfuncs.h
new file mode 100644 (file)
index 0000000..46a5387
--- /dev/null
@@ -0,0 +1,1040 @@
+/******************************************************************************
+ *                          Executive Functions                               *
+ ******************************************************************************/
+$if (_NTDDK_)
+static __inline PVOID
+ExAllocateFromZone(
+  IN PZONE_HEADER Zone)
+{
+  if (Zone->FreeList.Next)
+    Zone->FreeList.Next = Zone->FreeList.Next->Next;
+  return (PVOID) Zone->FreeList.Next;
+}
+
+static __inline PVOID
+ExFreeToZone(
+  IN PZONE_HEADER Zone,
+  IN PVOID Block)
+{
+  ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
+  Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
+  return ((PSINGLE_LIST_ENTRY) Block)->Next;
+}
+
+/*
+ * PVOID
+ * ExInterlockedAllocateFromZone(
+ *   IN PZONE_HEADER  Zone,
+ *   IN PKSPIN_LOCK  Lock)
+ */
+#define ExInterlockedAllocateFromZone(Zone, Lock) \
+    ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
+
+/* PVOID
+ * ExInterlockedFreeToZone(
+ *  IN PZONE_HEADER  Zone,
+ *  IN PVOID  Block,
+ *  IN PKSPIN_LOCK  Lock);
+ */
+#define ExInterlockedFreeToZone(Zone, Block, Lock) \
+    ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
+
+/*
+ * BOOLEAN
+ * ExIsFullZone(
+ *  IN PZONE_HEADER  Zone)
+ */
+#define ExIsFullZone(Zone) \
+  ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
+
+/* BOOLEAN
+ * ExIsObjectInFirstZoneSegment(
+ *     IN PZONE_HEADER Zone,
+ *     IN PVOID Object);
+ */
+#define ExIsObjectInFirstZoneSegment(Zone,Object) \
+    ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
+                ((PUCHAR)(Object) <  (PUCHAR)(Zone)->SegmentList.Next + \
+                         (Zone)->TotalSegmentSize)) )
+
+#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
+#define ExAcquireResourceShared ExAcquireResourceSharedLite
+#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
+#define ExDeleteResource ExDeleteResourceLite
+#define ExInitializeResource ExInitializeResourceLite
+#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
+#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
+#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
+#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
+
+typedef enum _INTERLOCKED_RESULT {
+  ResultNegative = RESULT_NEGATIVE,
+  ResultZero = RESULT_ZERO,
+  ResultPositive = RESULT_POSITIVE
+} INTERLOCKED_RESULT;
+
+#ifdef _X86_
+NTKERNELAPI
+INTERLOCKED_RESULT
+FASTCALL
+Exfi386InterlockedIncrementLong(
+  IN OUT LONG volatile *Addend);
+
+NTKERNELAPI
+INTERLOCKED_RESULT
+FASTCALL
+Exfi386InterlockedDecrementLong(
+  IN PLONG  Addend);
+
+NTKERNELAPI
+ULONG
+FASTCALL
+Exfi386InterlockedExchangeUlong(
+  IN PULONG  Target,
+  IN ULONG  Value);
+#endif
+
+$endif
+
+$if (_WDMDDK_)
+#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
+#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
+#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
+
+#define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
+#define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
+#define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
+#define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
+
+#define ExInitializeSListHead InitializeSListHead
+
+#if defined(_NTHAL_) && defined(_X86_)
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExiAcquireFastMutex(
+  IN OUT PFAST_MUTEX FastMutex);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExiReleaseFastMutex(
+  IN OUT PFAST_MUTEX FastMutex);
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExiTryToAcquireFastMutex(
+    IN OUT PFAST_MUTEX FastMutex);
+
+#define ExAcquireFastMutex ExiAcquireFastMutex
+#define ExReleaseFastMutex ExiReleaseFastMutex
+#define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
+
+#else
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExAcquireFastMutex(
+  IN OUT PFAST_MUTEX FastMutex);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseFastMutex(
+  IN OUT PFAST_MUTEX FastMutex);
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExTryToAcquireFastMutex(
+  IN OUT PFAST_MUTEX FastMutex);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#endif /* defined(_NTHAL_) && defined(_X86_) */
+
+#if defined(_X86_)
+#define ExInterlockedAddUlong ExfInterlockedAddUlong
+#define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
+#define ExInterlockedInsertTailList ExfInterlockedInsertTailList
+#define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
+#define ExInterlockedPopEntryList ExfInterlockedPopEntryList
+#define ExInterlockedPushEntryList ExfInterlockedPushEntryList
+#endif /* defined(_X86_) */
+
+#if defined(_WIN64)
+
+#if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
+    defined(_NTHAL_) || defined(_NTOSP_)
+NTKERNELAPI
+USHORT
+ExQueryDepthSList(IN PSLIST_HEADER ListHead);
+#else
+FORCEINLINE
+USHORT
+ExQueryDepthSList(IN PSLIST_HEADER ListHead)
+{
+  return (USHORT)(ListHead->Alignment & 0xffff);
+}
+#endif
+
+NTKERNELAPI
+PSLIST_ENTRY
+ExpInterlockedFlushSList(
+  PSLIST_HEADER ListHead);
+
+NTKERNELAPI
+PSLIST_ENTRY
+ExpInterlockedPopEntrySList(
+  PSLIST_HEADER ListHead);
+
+NTKERNELAPI
+PSLIST_ENTRY
+ExpInterlockedPushEntrySList(
+  PSLIST_HEADER ListHead,
+  PSLIST_ENTRY ListEntry);
+
+#define ExInterlockedFlushSList(Head) \
+    ExpInterlockedFlushSList(Head)
+#define ExInterlockedPopEntrySList(Head, Lock) \
+    ExpInterlockedPopEntrySList(Head)
+#define ExInterlockedPushEntrySList(Head, Entry, Lock) \
+    ExpInterlockedPushEntrySList(Head, Entry)
+
+#else /* !defined(_WIN64) */
+
+#define ExQueryDepthSList(listhead) (listhead)->Depth
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedFlushSList(
+  IN OUT PSLIST_HEADER ListHead);
+
+#endif /* !defined(_WIN64) */
+
+#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY 
+FASTCALL
+ExInterlockedPopEntrySList(
+  IN PSLIST_HEADER ListHead,
+  IN PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY 
+FASTCALL
+ExInterlockedPushEntrySList(
+  IN PSLIST_HEADER ListHead,
+  IN PSINGLE_LIST_ENTRY ListEntry,
+  IN PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocateFromPagedLookasideList(
+  IN OUT PPAGED_LOOKASIDE_LIST Lookaside);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExFreeToPagedLookasideList(
+  IN OUT PPAGED_LOOKASIDE_LIST Lookaside,
+  IN PVOID Entry);
+
+#else /* !_WIN2K_COMPAT_SLIST_USAGE */
+
+#if !defined(_WIN64)
+#define ExInterlockedPopEntrySList(_ListHead, _Lock) \
+    InterlockedPopEntrySList(_ListHead)
+#define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
+    InterlockedPushEntrySList(_ListHead, _ListEntry)
+#endif
+
+static __inline
+PVOID
+ExAllocateFromPagedLookasideList(
+  IN OUT PPAGED_LOOKASIDE_LIST Lookaside)
+{
+  PVOID Entry;
+
+  Lookaside->L.TotalAllocates++;
+  Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
+  if (Entry == NULL) {
+    Lookaside->L.AllocateMisses++;
+    Entry = (Lookaside->L.Allocate)(Lookaside->L.Type,
+                                    Lookaside->L.Size,
+                                    Lookaside->L.Tag);
+  }
+  return Entry;
+}
+
+static __inline
+VOID
+ExFreeToPagedLookasideList(
+  IN OUT PPAGED_LOOKASIDE_LIST Lookaside,
+  IN PVOID Entry)
+{
+  Lookaside->L.TotalFrees++;
+  if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
+    Lookaside->L.FreeMisses++;
+    (Lookaside->L.Free)(Entry);
+  } else {
+    InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
+  }
+}
+
+#endif /* _WIN2K_COMPAT_SLIST_USAGE */
+
+
+/* ERESOURCE_THREAD
+ * ExGetCurrentResourceThread(
+ *     VOID);
+ */
+#define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
+
+#define ExReleaseResource(R) (ExReleaseResourceLite(R))
+
+/* VOID
+ * ExInitializeWorkItem(
+ *     IN PWORK_QUEUE_ITEM Item,
+ *     IN PWORKER_THREAD_ROUTINE Routine,
+ *     IN PVOID Context)
+ */
+#define ExInitializeWorkItem(Item, Routine, Context) \
+{ \
+  (Item)->WorkerRoutine = Routine; \
+  (Item)->Parameter = Context; \
+  (Item)->List.Flink = NULL; \
+}
+
+FORCEINLINE
+VOID
+ExInitializeFastMutex(
+  OUT PFAST_MUTEX FastMutex)
+{
+  FastMutex->Count = FM_LOCK_BIT;
+  FastMutex->Owner = NULL;
+  FastMutex->Contention = 0;
+  KeInitializeEvent(&FastMutex->Event, SynchronizationEvent, FALSE);
+  return;
+}
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+$if (_NTDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExExtendZone(
+  IN OUT PZONE_HEADER Zone,
+  IN OUT PVOID Segment,
+  IN ULONG SegmentSize);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExInitializeZone(
+  OUT PZONE_HEADER Zone,
+  IN ULONG BlockSize,
+  IN OUT PVOID InitialSegment,
+  IN ULONG InitialSegmentSize);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExInterlockedExtendZone(
+  IN OUT PZONE_HEADER Zone,
+  IN OUT PVOID Segment,
+  IN ULONG SegmentSize,
+  IN OUT PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExUuidCreate(
+  OUT UUID *Uuid);
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+ExRaiseAccessViolation(VOID);
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+ExRaiseDatatypeMisalignment(VOID);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+FASTCALL
+ExAcquireFastMutexUnsafe(
+  IN OUT PFAST_MUTEX FastMutex);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseFastMutexUnsafe(
+  IN OUT PFAST_MUTEX FastMutex);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireResourceExclusiveLite(
+  IN OUT PERESOURCE Resource,
+  IN BOOLEAN Wait);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireResourceSharedLite(
+  IN OUT PERESOURCE Resource,
+  IN BOOLEAN Wait);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireSharedStarveExclusive(
+  IN OUT PERESOURCE Resource,
+  IN BOOLEAN Wait);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireSharedWaitForExclusive(
+  IN OUT PERESOURCE Resource,
+  IN BOOLEAN Wait);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePool(
+  IN POOL_TYPE PoolType,
+  IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithQuota(
+  IN POOL_TYPE PoolType,
+  IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithQuotaTag(
+  IN POOL_TYPE PoolType,
+  IN SIZE_T NumberOfBytes,
+  IN ULONG Tag);
+
+#ifndef POOL_TAGGING
+#define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
+#endif
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithTag(
+  IN POOL_TYPE PoolType,
+  IN SIZE_T NumberOfBytes,
+  IN ULONG Tag);
+
+#ifndef POOL_TAGGING
+#define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
+#endif
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithTagPriority(
+  IN POOL_TYPE PoolType,
+  IN SIZE_T NumberOfBytes,
+  IN ULONG Tag,
+  IN EX_POOL_PRIORITY Priority);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExConvertExclusiveToSharedLite(
+  IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExCreateCallback(
+  OUT PCALLBACK_OBJECT *CallbackObject,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN BOOLEAN Create,
+  IN BOOLEAN AllowMultipleCallbacks);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExDeleteNPagedLookasideList(
+  IN OUT PNPAGED_LOOKASIDE_LIST Lookaside);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExDeletePagedLookasideList(
+  IN PPAGED_LOOKASIDE_LIST Lookaside);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExDeleteResourceLite(
+  IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExFreePool(
+  IN PVOID P);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExFreePoolWithTag(
+  IN PVOID P,
+  IN ULONG Tag);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExGetExclusiveWaiterCount(
+  IN PERESOURCE Resource);
+
+NTKERNELAPI
+KPROCESSOR_MODE
+NTAPI
+ExGetPreviousMode(VOID);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExGetSharedWaiterCount(
+  IN PERESOURCE Resource);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExInitializeNPagedLookasideList(
+  IN PNPAGED_LOOKASIDE_LIST Lookaside,
+  IN PALLOCATE_FUNCTION Allocate OPTIONAL,
+  IN PFREE_FUNCTION Free OPTIONAL,
+  IN ULONG Flags,
+  IN SIZE_T Size,
+  IN ULONG Tag,
+  IN USHORT Depth);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExInitializePagedLookasideList(
+  IN PPAGED_LOOKASIDE_LIST Lookaside,
+  IN PALLOCATE_FUNCTION Allocate OPTIONAL,
+  IN PFREE_FUNCTION Free OPTIONAL,
+  IN ULONG Flags,
+  IN SIZE_T Size,
+  IN ULONG Tag,
+  IN USHORT Depth);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExInitializeResourceLite(
+  OUT PERESOURCE Resource);
+
+NTKERNELAPI
+LARGE_INTEGER
+NTAPI
+ExInterlockedAddLargeInteger(
+  IN PLARGE_INTEGER Addend,
+  IN LARGE_INTEGER Increment,
+  IN PKSPIN_LOCK Lock);
+
+#if defined(_WIN64)
+#define ExInterlockedAddLargeStatistic(Addend, Increment) \
+    (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
+#else
+#define ExInterlockedAddLargeStatistic(Addend, Increment) \
+    _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
+#endif
+
+NTKERNELAPI
+ULONG
+FASTCALL
+ExInterlockedAddUlong(
+  IN PULONG Addend,
+  IN ULONG Increment,
+  IN OUT PKSPIN_LOCK Lock);
+
+#if defined(_AMD64_) || defined(_IA64_)
+
+#define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
+    InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
+
+#elif defined(_X86_)
+
+NTKERNELAPI
+LONGLONG
+FASTCALL
+ExfInterlockedCompareExchange64(
+  IN OUT LONGLONG volatile *Destination,
+  IN PLONGLONG Exchange,
+  IN PLONGLONG Comperand);
+
+#define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
+    ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
+
+#else
+
+NTKERNELAPI
+LONGLONG
+FASTCALL
+ExInterlockedCompareExchange64(
+  IN OUT LONGLONG volatile *Destination,
+  IN PLONGLONG Exchange,
+  IN PLONGLONG Comparand,
+  IN PKSPIN_LOCK Lock);
+
+#endif /* defined(_AMD64_) || defined(_IA64_) */
+
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExInterlockedInsertHeadList(
+  IN OUT PLIST_ENTRY ListHead,
+  IN OUT PLIST_ENTRY ListEntry,
+  IN OUT PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExInterlockedInsertTailList(
+  IN OUT PLIST_ENTRY ListHead,
+  IN OUT PLIST_ENTRY ListEntry,
+  IN OUT PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedPopEntryList(
+  IN OUT PSINGLE_LIST_ENTRY ListHead,
+  IN OUT PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedPushEntryList(
+  IN OUT PSINGLE_LIST_ENTRY ListHead,
+  IN OUT PSINGLE_LIST_ENTRY ListEntry,
+  IN OUT PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExInterlockedRemoveHeadList(
+  IN OUT PLIST_ENTRY ListHead,
+  IN OUT PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExIsProcessorFeaturePresent(
+  IN ULONG ProcessorFeature);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExIsResourceAcquiredExclusiveLite(
+  IN PERESOURCE Resource);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExIsResourceAcquiredSharedLite(
+  IN PERESOURCE Resource);
+
+#define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
+
+NTKERNELAPI
+VOID
+NTAPI
+ExLocalTimeToSystemTime(
+  IN PLARGE_INTEGER LocalTime,
+  OUT PLARGE_INTEGER SystemTime);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExNotifyCallback(
+  IN PCALLBACK_OBJECT CallbackObject,
+  IN PVOID Argument1 OPTIONAL,
+  IN PVOID Argument2 OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExQueueWorkItem(
+  IN OUT PWORK_QUEUE_ITEM WorkItem,
+  IN WORK_QUEUE_TYPE QueueType);
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+ExRaiseStatus(
+  IN NTSTATUS Status);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExRegisterCallback(
+  IN PCALLBACK_OBJECT CallbackObject,
+  IN PCALLBACK_FUNCTION CallbackFunction,
+  IN PVOID CallbackContext OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExReinitializeResourceLite(
+  IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExReleaseResourceForThreadLite(
+  IN OUT PERESOURCE Resource,
+  IN ERESOURCE_THREAD ResourceThreadId);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseResourceLite(
+  IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExSetResourceOwnerPointer(
+  IN OUT PERESOURCE Resource,
+  IN PVOID OwnerPointer);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExSetTimerResolution(
+  IN ULONG DesiredTime,
+  IN BOOLEAN SetResolution);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExSystemTimeToLocalTime(
+  IN PLARGE_INTEGER SystemTime,
+  OUT PLARGE_INTEGER LocalTime);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExUnregisterCallback(
+  IN OUT PVOID CbRegistration);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtection(
+  IN OUT PEX_RUNDOWN_REF RunRef);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExInitializeRundownProtection(
+  OUT PEX_RUNDOWN_REF RunRef);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReInitializeRundownProtection(
+  IN OUT PEX_RUNDOWN_REF RunRef);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseRundownProtection(
+  IN OUT PEX_RUNDOWN_REF RunRef);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExRundownCompleted(
+  OUT PEX_RUNDOWN_REF RunRef);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExVerifySuite(
+  IN SUITE_TYPE SuiteType);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExWaitForRundownProtectionRelease(
+  IN OUT PEX_RUNDOWN_REF RunRef);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionEx(
+  IN OUT PEX_RUNDOWN_REF RunRef,
+  IN ULONG Count);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseRundownProtectionEx(
+  IN OUT PEX_RUNDOWN_REF RunRef,
+  IN ULONG Count);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+
+NTKERNELAPI
+PEX_RUNDOWN_REF_CACHE_AWARE
+NTAPI
+ExAllocateCacheAwareRundownProtection(
+  IN POOL_TYPE PoolType,
+  IN ULONG PoolTag);
+
+NTKERNELAPI
+SIZE_T
+NTAPI
+ExSizeOfRundownProtectionCacheAware(VOID);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExEnterCriticalRegionAndAcquireResourceShared(
+  IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExEnterCriticalRegionAndAcquireResourceExclusive(
+  IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
+  IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseResourceAndLeaveCriticalRegion(
+  IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExInitializeRundownProtectionCacheAware(
+  OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
+  IN SIZE_T RunRefSize);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExFreeCacheAwareRundownProtection(
+  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionCacheAware(
+  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseRundownProtectionCacheAware(
+  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionCacheAwareEx(
+  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
+  IN ULONG Count);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseRundownProtectionCacheAwareEx(
+  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef,
+  IN ULONG Count);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExWaitForRundownProtectionReleaseCacheAware(
+  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReInitializeRundownProtectionCacheAware(
+  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExRundownCompletedCacheAware(
+  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExInitializeLookasideListEx(
+  OUT PLOOKASIDE_LIST_EX Lookaside,
+  IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL,
+  IN PFREE_FUNCTION_EX Free OPTIONAL,
+  IN POOL_TYPE PoolType,
+  IN ULONG Flags,
+  IN SIZE_T Size,
+  IN ULONG Tag,
+  IN USHORT Depth);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExDeleteLookasideListEx(
+  IN OUT PLOOKASIDE_LIST_EX Lookaside);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExFlushLookasideListEx(
+  IN OUT PLOOKASIDE_LIST_EX Lookaside);
+
+FORCEINLINE
+PVOID
+ExAllocateFromLookasideListEx(
+  IN OUT PLOOKASIDE_LIST_EX Lookaside)
+{
+  PVOID Entry;
+
+  Lookaside->L.TotalAllocates += 1;
+  Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
+  if (Entry == NULL) {
+    Lookaside->L.AllocateMisses += 1;
+    Entry = (Lookaside->L.AllocateEx)(Lookaside->L.Type,
+                                      Lookaside->L.Size,
+                                      Lookaside->L.Tag,
+                                      Lookaside);
+  }
+  return Entry;
+}
+
+FORCEINLINE
+VOID
+ExFreeToLookasideListEx(
+  IN OUT PLOOKASIDE_LIST_EX Lookaside,
+  IN PVOID Entry)
+{
+  Lookaside->L.TotalFrees += 1;
+  if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
+    Lookaside->L.FreeMisses += 1;
+    (Lookaside->L.FreeEx)(Entry, Lookaside);
+  } else {
+    InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
+  }
+  return;
+}
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+NTKERNELAPI
+VOID
+NTAPI
+ExSetResourceOwnerPointerEx(
+  IN OUT PERESOURCE Resource,
+  IN PVOID OwnerPointer,
+  IN ULONG Flags);
+
+#define FLAG_OWNER_POINTER_IS_THREAD 0x1
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+static __inline PVOID
+ExAllocateFromNPagedLookasideList(
+  IN OUT PNPAGED_LOOKASIDE_LIST Lookaside)
+{
+  PVOID Entry;
+
+  Lookaside->L.TotalAllocates++;
+#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+  Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead,
+                                     &Lookaside->Lock__ObsoleteButDoNotDelete);
+#else
+  Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
+#endif
+  if (Entry == NULL) {
+    Lookaside->L.AllocateMisses++;
+    Entry = (Lookaside->L.Allocate)(Lookaside->L.Type,
+                                    Lookaside->L.Size,
+                                    Lookaside->L.Tag);
+  }
+  return Entry;
+}
+
+static __inline VOID
+ExFreeToNPagedLookasideList(
+  IN OUT PNPAGED_LOOKASIDE_LIST Lookaside,
+  IN PVOID Entry)
+{
+  Lookaside->L.TotalFrees++;
+  if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
+    Lookaside->L.FreeMisses++;
+    (Lookaside->L.Free)(Entry);
+  } else {
+#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+      ExInterlockedPushEntrySList(&Lookaside->L.ListHead,
+                                  (PSLIST_ENTRY)Entry,
+                                  &Lookaside->Lock__ObsoleteButDoNotDelete);
+#else
+      InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
+#endif
+   }
+}
+
+$endif
+
diff --git a/reactos/include/xdk/extypes.h b/reactos/include/xdk/extypes.h
new file mode 100644 (file)
index 0000000..4d18ac1
--- /dev/null
@@ -0,0 +1,289 @@
+/******************************************************************************
+ *                            Executive Types                                 *
+ ******************************************************************************/
+$if (_WDMDDK_)
+
+#define EX_RUNDOWN_ACTIVE                 0x1
+#define EX_RUNDOWN_COUNT_SHIFT            0x1
+#define EX_RUNDOWN_COUNT_INC              (1 << EX_RUNDOWN_COUNT_SHIFT)
+
+typedef struct _FAST_MUTEX {
+  volatile LONG Count;
+  PKTHREAD Owner;
+  ULONG Contention;
+  KEVENT Event;
+  ULONG OldIrql;
+} FAST_MUTEX, *PFAST_MUTEX;
+
+typedef enum _SUITE_TYPE {
+  SmallBusiness,
+  Enterprise,
+  BackOffice,
+  CommunicationServer,
+  TerminalServer,
+  SmallBusinessRestricted,
+  EmbeddedNT,
+  DataCenter,
+  SingleUserTS,
+  Personal,
+  Blade,
+  EmbeddedRestricted,
+  SecurityAppliance,
+  StorageServer,
+  ComputeServer,
+  WHServer,
+  MaxSuiteType
+} SUITE_TYPE;
+
+typedef enum _EX_POOL_PRIORITY {
+  LowPoolPriority,
+  LowPoolPrioritySpecialPoolOverrun = 8,
+  LowPoolPrioritySpecialPoolUnderrun = 9,
+  NormalPoolPriority = 16,
+  NormalPoolPrioritySpecialPoolOverrun = 24,
+  NormalPoolPrioritySpecialPoolUnderrun = 25,
+  HighPoolPriority = 32,
+  HighPoolPrioritySpecialPoolOverrun = 40,
+  HighPoolPrioritySpecialPoolUnderrun = 41
+} EX_POOL_PRIORITY;
+
+#if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
+#define LOOKASIDE_ALIGN
+#else
+#define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */
+#endif
+
+typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX;
+
+typedef PVOID
+(NTAPI *PALLOCATE_FUNCTION)(
+  IN POOL_TYPE PoolType,
+  IN SIZE_T NumberOfBytes,
+  IN ULONG Tag);
+
+typedef PVOID
+(NTAPI *PALLOCATE_FUNCTION_EX)(
+  IN POOL_TYPE PoolType,
+  IN SIZE_T NumberOfBytes,
+  IN ULONG Tag,
+  IN OUT PLOOKASIDE_LIST_EX Lookaside);
+
+typedef VOID
+(NTAPI *PFREE_FUNCTION)(
+  IN PVOID Buffer);
+
+typedef VOID
+(NTAPI *PFREE_FUNCTION_EX)(
+  IN PVOID Buffer,
+  IN OUT PLOOKASIDE_LIST_EX Lookaside);
+
+typedef VOID
+(NTAPI CALLBACK_FUNCTION)(
+  IN PVOID CallbackContext OPTIONAL,
+  IN PVOID Argument1 OPTIONAL,
+  IN PVOID Argument2 OPTIONAL);
+typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION;
+
+#define GENERAL_LOOKASIDE_LAYOUT                \
+    union {                                     \
+        SLIST_HEADER ListHead;                  \
+        SINGLE_LIST_ENTRY SingleListHead;       \
+    } DUMMYUNIONNAME;                           \
+    USHORT Depth;                               \
+    USHORT MaximumDepth;                        \
+    ULONG TotalAllocates;                       \
+    union {                                     \
+        ULONG AllocateMisses;                   \
+        ULONG AllocateHits;                     \
+    } DUMMYUNIONNAME2;                          \
+                                                \
+    ULONG TotalFrees;                           \
+    union {                                     \
+        ULONG FreeMisses;                       \
+        ULONG FreeHits;                         \
+    } DUMMYUNIONNAME3;                          \
+                                                \
+    POOL_TYPE Type;                             \
+    ULONG Tag;                                  \
+    ULONG Size;                                 \
+    union {                                     \
+        PALLOCATE_FUNCTION_EX AllocateEx;       \
+        PALLOCATE_FUNCTION Allocate;            \
+    } DUMMYUNIONNAME4;                          \
+                                                \
+    union {                                     \
+        PFREE_FUNCTION_EX FreeEx;               \
+        PFREE_FUNCTION Free;                    \
+    } DUMMYUNIONNAME5;                          \
+                                                \
+    LIST_ENTRY ListEntry;                       \
+    ULONG LastTotalAllocates;                   \
+    union {                                     \
+        ULONG LastAllocateMisses;               \
+        ULONG LastAllocateHits;                 \
+    } DUMMYUNIONNAME6;                          \
+    ULONG Future[2];
+
+typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE {
+  GENERAL_LOOKASIDE_LAYOUT
+} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
+
+typedef struct _GENERAL_LOOKASIDE_POOL {
+  GENERAL_LOOKASIDE_LAYOUT
+} GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL;
+
+#define LOOKASIDE_CHECK(f)  \
+    C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
+
+LOOKASIDE_CHECK(TotalFrees);
+LOOKASIDE_CHECK(Tag);
+LOOKASIDE_CHECK(Future);
+
+typedef struct _PAGED_LOOKASIDE_LIST {
+  GENERAL_LOOKASIDE L;
+#if !defined(_AMD64_) && !defined(_IA64_)
+  FAST_MUTEX Lock__ObsoleteButDoNotDelete;
+#endif
+} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
+
+typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST {
+  GENERAL_LOOKASIDE L;
+#if !defined(_AMD64_) && !defined(_IA64_)
+  KSPIN_LOCK Lock__ObsoleteButDoNotDelete;
+#endif
+} NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
+
+#define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
+
+typedef struct _LOOKASIDE_LIST_EX {
+  GENERAL_LOOKASIDE_POOL L;
+} LOOKASIDE_LIST_EX;
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+#define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
+#define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
+
+#define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE          256
+#define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT         1024
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+typedef struct _EX_RUNDOWN_REF {
+  __GNU_EXTENSION union {
+    volatile ULONG_PTR Count;
+    volatile PVOID Ptr;
+  };
+} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
+
+typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
+
+typedef enum _WORK_QUEUE_TYPE {
+  CriticalWorkQueue,
+  DelayedWorkQueue,
+  HyperCriticalWorkQueue,
+  MaximumWorkQueue
+} WORK_QUEUE_TYPE;
+
+typedef VOID
+(NTAPI WORKER_THREAD_ROUTINE)(
+  IN PVOID Parameter);
+typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE;
+
+typedef struct _WORK_QUEUE_ITEM {
+  LIST_ENTRY List;
+  PWORKER_THREAD_ROUTINE WorkerRoutine;
+  volatile PVOID Parameter;
+} WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
+
+typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
+
+typedef struct _OWNER_ENTRY {
+  ERESOURCE_THREAD OwnerThread;
+  union {
+    struct {
+      ULONG IoPriorityBoosted:1;
+      ULONG OwnerReferenced:1;
+      ULONG OwnerCount:30;
+    };
+    ULONG TableSize;
+  };
+} OWNER_ENTRY, *POWNER_ENTRY;
+
+typedef struct _ERESOURCE {
+  LIST_ENTRY SystemResourcesList;
+  POWNER_ENTRY OwnerTable;
+  SHORT ActiveCount;
+  USHORT Flag;
+  volatile PKSEMAPHORE SharedWaiters;
+  volatile PKEVENT ExclusiveWaiters;
+  OWNER_ENTRY OwnerEntry;
+  ULONG ActiveEntries;
+  ULONG ContentionCount;
+  ULONG NumberOfSharedWaiters;
+  ULONG NumberOfExclusiveWaiters;
+#if defined(_WIN64)
+  PVOID Reserved2;
+#endif
+  __GNU_EXTENSION union {
+    PVOID Address;
+    ULONG_PTR CreatorBackTraceIndex;
+  };
+  KSPIN_LOCK SpinLock;
+} ERESOURCE, *PERESOURCE;
+
+/* ERESOURCE.Flag */
+#define ResourceNeverExclusive            0x0010
+#define ResourceReleaseByOtherThread      0x0020
+#define ResourceOwnedExclusive            0x0080
+
+#define RESOURCE_HASH_TABLE_SIZE          64
+
+typedef struct _RESOURCE_HASH_ENTRY {
+  LIST_ENTRY ListEntry;
+  PVOID Address;
+  ULONG ContentionCount;
+  ULONG Number;
+} RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY;
+
+typedef struct _RESOURCE_PERFORMANCE_DATA {
+  ULONG ActiveResourceCount;
+  ULONG TotalResourceCount;
+  ULONG ExclusiveAcquire;
+  ULONG SharedFirstLevel;
+  ULONG SharedSecondLevel;
+  ULONG StarveFirstLevel;
+  ULONG StarveSecondLevel;
+  ULONG WaitForExclusive;
+  ULONG OwnerTableExpands;
+  ULONG MaximumTableExpand;
+  LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE];
+} RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA;
+
+/* Global debug flag */
+#if DEVL
+extern ULONG NtGlobalFlag;
+#define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
+#else
+#define IF_NTOS_DEBUG(FlagName) if(FALSE)
+#endif
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+typedef struct _ZONE_SEGMENT_HEADER {
+  SINGLE_LIST_ENTRY SegmentList;
+  PVOID Reserved;
+} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
+
+typedef struct _ZONE_HEADER {
+  SINGLE_LIST_ENTRY FreeList;
+  SINGLE_LIST_ENTRY SegmentList;
+  ULONG BlockSize;
+  ULONG TotalSegmentSize;
+} ZONE_HEADER, *PZONE_HEADER;
+
+#define PROTECTED_POOL                    0x80000000
+
+$endif /* _NTDDK_ */
+
diff --git a/reactos/include/xdk/generate.bat b/reactos/include/xdk/generate.bat
new file mode 100644 (file)
index 0000000..e26f34a
--- /dev/null
@@ -0,0 +1,4 @@
+
+
+..\..\output-i386\tools\hpp\hpp.exe wdm.template.h wdm.h
+..\..\output-i386\tools\hpp\hpp.exe ntddk.template.h ntddk.h
diff --git a/reactos/include/xdk/halfuncs.h b/reactos/include/xdk/halfuncs.h
new file mode 100644 (file)
index 0000000..547f4e4
--- /dev/null
@@ -0,0 +1,346 @@
+/* Hardware Abstraction Layer Functions */
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+$if (_WDMDDK_)
+
+FORCEINLINE
+PVOID
+NTAPI
+HalAllocateCommonBuffer(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN ULONG Length,
+  OUT PPHYSICAL_ADDRESS LogicalAddress,
+  IN BOOLEAN CacheEnabled)
+{
+  PALLOCATE_COMMON_BUFFER allocateCommonBuffer;
+  PVOID commonBuffer;
+
+  allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer;
+  ASSERT( allocateCommonBuffer != NULL );
+  commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled );
+  return commonBuffer;
+}
+
+FORCEINLINE
+VOID
+NTAPI
+HalFreeCommonBuffer(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN ULONG Length,
+  IN PHYSICAL_ADDRESS LogicalAddress,
+  IN PVOID VirtualAddress,
+  IN BOOLEAN CacheEnabled)
+{
+  PFREE_COMMON_BUFFER freeCommonBuffer;
+
+  freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer;
+  ASSERT( freeCommonBuffer != NULL );
+  freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled );
+}
+
+FORCEINLINE
+ULONG
+NTAPI
+HalReadDmaCounter(
+  IN PDMA_ADAPTER DmaAdapter)
+{
+  PREAD_DMA_COUNTER readDmaCounter;
+  ULONG counter;
+
+  readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter;
+  ASSERT( readDmaCounter != NULL );
+  counter = readDmaCounter( DmaAdapter );
+  return counter;
+}
+
+FORCEINLINE
+ULONG
+HalGetDmaAlignment(
+  IN PDMA_ADAPTER DmaAdapter)
+{
+  PGET_DMA_ALIGNMENT getDmaAlignment;
+  ULONG alignment;
+
+  getDmaAlignment = *(DmaAdapter)->DmaOperations->GetDmaAlignment;
+  ASSERT( getDmaAlignment != NULL );
+  alignment = getDmaAlignment( DmaAdapter );
+  return alignment;
+}
+
+$endif
+$if (_NTDDK_)
+
+/* Nothing here */
+
+#else /* USE_DMA_MACROS ... */
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
+NTAPI
+IoFreeAdapterChannel(
+  IN PADAPTER_OBJECT AdapterObject);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+BOOLEAN
+NTAPI
+IoFlushAdapterBuffers(
+  IN PADAPTER_OBJECT AdapterObject,
+  IN PMDL Mdl,
+  IN PVOID MapRegisterBase,
+  IN PVOID CurrentVa,
+  IN ULONG Length,
+  IN BOOLEAN WriteToDevice);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
+NTAPI
+IoFreeMapRegisters(
+  IN PADAPTER_OBJECT AdapterObject,
+  IN PVOID MapRegisterBase,
+  IN ULONG NumberOfMapRegisters);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+PVOID
+NTAPI
+HalAllocateCommonBuffer(
+  IN PADAPTER_OBJECT AdapterObject,
+  IN ULONG Length,
+  OUT PPHYSICAL_ADDRESS LogicalAddress,
+  IN BOOLEAN CacheEnabled);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
+NTAPI
+HalFreeCommonBuffer(
+  IN PADAPTER_OBJECT AdapterObject,
+  IN ULONG Length,
+  IN PHYSICAL_ADDRESS LogicalAddress,
+  IN PVOID VirtualAddress,
+  IN BOOLEAN CacheEnabled);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+ULONG
+NTAPI
+HalReadDmaCounter(
+  IN PADAPTER_OBJECT AdapterObject);
+
+NTHALAPI
+NTSTATUS
+NTAPI
+HalAllocateAdapterChannel(
+  IN PADAPTER_OBJECT  AdapterObject,
+  IN PWAIT_CONTEXT_BLOCK  Wcb,
+  IN ULONG  NumberOfMapRegisters,
+  IN PDRIVER_CONTROL  ExecutionRoutine);
+
+$endif /* _NTDDK_ */
+#endif /* USE_DMA_MACROS ... */
+$if (_NTDDK_)
+
+#if !defined(NO_LEGACY_DRIVERS)
+NTHALAPI
+NTSTATUS
+NTAPI
+HalAssignSlotResources(
+  IN PUNICODE_STRING RegistryPath,
+  IN PUNICODE_STRING DriverClassName,
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN INTERFACE_TYPE BusType,
+  IN ULONG BusNumber,
+  IN ULONG SlotNumber,
+  IN OUT PCM_RESOURCE_LIST *AllocatedResources);
+
+NTHALAPI
+ULONG
+NTAPI
+HalGetInterruptVector(
+  IN INTERFACE_TYPE InterfaceType,
+  IN ULONG BusNumber,
+  IN ULONG BusInterruptLevel,
+  IN ULONG BusInterruptVector,
+  OUT PKIRQL Irql,
+  OUT PKAFFINITY Affinity);
+
+NTHALAPI
+ULONG
+NTAPI
+HalSetBusData(
+  IN BUS_DATA_TYPE BusDataType,
+  IN ULONG BusNumber,
+  IN ULONG SlotNumber,
+  IN PVOID Buffer,
+  IN ULONG Length);
+
+NTHALAPI
+ULONG
+NTAPI
+HalGetBusData(
+  IN BUS_DATA_TYPE BusDataType,
+  IN ULONG BusNumber,
+  IN ULONG SlotNumber,
+  OUT PVOID Buffer,
+  IN ULONG Length);
+
+NTHALAPI
+BOOLEAN
+NTAPI
+HalMakeBeep(
+  IN ULONG Frequency);
+#endif /* !defined(NO_LEGACY_DRIVERS) */
+
+NTHALAPI
+PADAPTER_OBJECT
+NTAPI
+HalGetAdapter(
+  IN PDEVICE_DESCRIPTION DeviceDescription,
+  OUT PULONG NumberOfMapRegisters);
+
+VOID
+NTAPI
+HalPutDmaAdapter(
+  IN PADAPTER_OBJECT DmaAdapter);
+
+NTHALAPI
+VOID
+NTAPI
+HalAcquireDisplayOwnership(
+  IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
+
+NTHALAPI
+ULONG
+NTAPI
+HalGetBusDataByOffset(
+  IN BUS_DATA_TYPE BusDataType,
+  IN ULONG BusNumber,
+  IN ULONG SlotNumber,
+  OUT PVOID Buffer,
+  IN ULONG Offset,
+  IN ULONG Length);
+
+NTHALAPI
+ULONG
+NTAPI
+HalSetBusDataByOffset(
+  IN BUS_DATA_TYPE BusDataType,
+  IN ULONG BusNumber,
+  IN ULONG SlotNumber,
+  IN PVOID Buffer,
+  IN ULONG Offset,
+  IN ULONG Length);
+
+NTHALAPI
+BOOLEAN
+NTAPI
+HalTranslateBusAddress(
+  IN INTERFACE_TYPE InterfaceType,
+  IN ULONG BusNumber,
+  IN PHYSICAL_ADDRESS BusAddress,
+  IN OUT PULONG AddressSpace,
+  OUT PPHYSICAL_ADDRESS TranslatedAddress);
+
+NTHALAPI
+PVOID
+NTAPI
+HalAllocateCrashDumpRegisters(
+  IN PADAPTER_OBJECT AdapterObject,
+  IN OUT PULONG NumberOfMapRegisters);
+
+NTSTATUS
+NTAPI
+HalGetScatterGatherList(
+  IN PADAPTER_OBJECT DmaAdapter,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PMDL Mdl,
+  IN PVOID CurrentVa,
+  IN ULONG Length,
+  IN PDRIVER_LIST_CONTROL ExecutionRoutine,
+  IN PVOID Context,
+  IN BOOLEAN WriteToDevice);
+
+VOID
+NTAPI
+HalPutScatterGatherList(
+  IN PADAPTER_OBJECT DmaAdapter,
+  IN PSCATTER_GATHER_LIST ScatterGather,
+  IN BOOLEAN WriteToDevice);
+
+$endif /* _NTDDK_ */
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+$if (_NTDDK_)
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+VOID
+FASTCALL
+HalExamineMBR(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN ULONG MBRTypeIdentifier,
+  OUT PVOID *Buffer);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+NTSTATUS
+NTAPI
+HalAllocateHardwareCounters(
+  IN PGROUP_AFFINITY GroupAffinty,
+  IN ULONG GroupCount,
+  IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList,
+  OUT PHANDLE CounterSetHandle);
+
+NTSTATUS
+NTAPI
+HalFreeHardwareCounters(
+  IN HANDLE CounterSetHandle);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+#if defined(_IA64_)
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTHALAPI
+ULONG
+NTAPI
+HalGetDmaAlignmentRequirement(VOID);
+#endif
+#endif /* defined(_IA64_) */
+
+#if defined(_M_IX86) || defined(_M_AMD64)
+#define HalGetDmaAlignmentRequirement() 1L
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR;
+typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
+
+NTHALAPI
+VOID
+NTAPI
+HalBugCheckSystem(
+  IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource,
+  IN PWHEA_ERROR_RECORD ErrorRecord);
+
+#else
+
+typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
+
+NTHALAPI
+VOID
+NTAPI
+HalBugCheckSystem(
+  IN PWHEA_ERROR_RECORD ErrorRecord);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+$endif /* _NTDDK_ */
+
diff --git a/reactos/include/xdk/haltypes.h b/reactos/include/xdk/haltypes.h
new file mode 100644 (file)
index 0000000..a9a0317
--- /dev/null
@@ -0,0 +1,551 @@
+/* Hardware Abstraction Layer Types */
+
+$if (_NTDDK_)
+typedef BOOLEAN
+(NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
+  IN ULONG Columns,
+  IN ULONG Rows);
+
+typedef PBUS_HANDLER
+(FASTCALL *pHalHandlerForBus)(
+  IN INTERFACE_TYPE InterfaceType,
+  IN ULONG BusNumber);
+
+typedef VOID
+(FASTCALL *pHalReferenceBusHandler)(
+  IN PBUS_HANDLER BusHandler);
+
+typedef enum _HAL_QUERY_INFORMATION_CLASS {
+  HalInstalledBusInformation,
+  HalProfileSourceInformation,
+  HalInformationClassUnused1,
+  HalPowerInformation,
+  HalProcessorSpeedInformation,
+  HalCallbackInformation,
+  HalMapRegisterInformation,
+  HalMcaLogInformation,
+  HalFrameBufferCachingInformation,
+  HalDisplayBiosInformation,
+  HalProcessorFeatureInformation,
+  HalNumaTopologyInterface,
+  HalErrorInformation,
+  HalCmcLogInformation,
+  HalCpeLogInformation,
+  HalQueryMcaInterface,
+  HalQueryAMLIIllegalIOPortAddresses,
+  HalQueryMaxHotPlugMemoryAddress,
+  HalPartitionIpiInterface,
+  HalPlatformInformation,
+  HalQueryProfileSourceList,
+  HalInitLogInformation,
+  HalFrequencyInformation,
+  HalProcessorBrandString,
+  HalHypervisorInformation,
+  HalPlatformTimerInformation,
+  HalAcpiAuditInformation
+} HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
+
+typedef enum _HAL_SET_INFORMATION_CLASS {
+  HalProfileSourceInterval,
+  HalProfileSourceInterruptHandler,
+  HalMcaRegisterDriver,
+  HalKernelErrorHandler,
+  HalCmcRegisterDriver,
+  HalCpeRegisterDriver,
+  HalMcaLog,
+  HalCmcLog,
+  HalCpeLog,
+  HalGenerateCmcInterrupt,
+  HalProfileSourceTimerHandler,
+  HalEnlightenment,
+  HalProfileDpgoSourceInterruptHandler
+} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
+
+typedef NTSTATUS
+(NTAPI *pHalQuerySystemInformation)(
+  IN HAL_QUERY_INFORMATION_CLASS InformationClass,
+  IN ULONG BufferSize,
+  IN OUT PVOID Buffer,
+  OUT PULONG ReturnedLength);
+
+typedef NTSTATUS
+(NTAPI *pHalSetSystemInformation)(
+  IN HAL_SET_INFORMATION_CLASS InformationClass,
+  IN ULONG BufferSize,
+  IN PVOID Buffer);
+
+typedef VOID
+(FASTCALL *pHalExamineMBR)(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN ULONG MBRTypeIdentifier,
+  OUT PVOID *Buffer);
+
+typedef NTSTATUS
+(FASTCALL *pHalIoReadPartitionTable)(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN BOOLEAN ReturnRecognizedPartitions,
+  OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
+
+typedef NTSTATUS
+(FASTCALL *pHalIoSetPartitionInformation)(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN ULONG PartitionNumber,
+  IN ULONG PartitionType);
+
+typedef NTSTATUS
+(FASTCALL *pHalIoWritePartitionTable)(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN ULONG SectorsPerTrack,
+  IN ULONG NumberOfHeads,
+  IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
+
+typedef NTSTATUS
+(NTAPI *pHalQueryBusSlots)(
+  IN PBUS_HANDLER BusHandler,
+  IN ULONG BufferSize,
+  OUT PULONG SlotNumbers,
+  OUT PULONG ReturnedLength);
+
+typedef NTSTATUS
+(NTAPI *pHalInitPnpDriver)(
+  VOID);
+
+typedef struct _PM_DISPATCH_TABLE {
+  ULONG Signature;
+  ULONG Version;
+  PVOID Function[1];
+} PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
+
+typedef NTSTATUS
+(NTAPI *pHalInitPowerManagement)(
+  IN PPM_DISPATCH_TABLE PmDriverDispatchTable,
+  OUT PPM_DISPATCH_TABLE *PmHalDispatchTable);
+
+typedef struct _DMA_ADAPTER*
+(NTAPI *pHalGetDmaAdapter)(
+  IN PVOID Context,
+  IN struct _DEVICE_DESCRIPTION *DeviceDescriptor,
+  OUT PULONG NumberOfMapRegisters);
+
+typedef NTSTATUS
+(NTAPI *pHalGetInterruptTranslator)(
+  IN INTERFACE_TYPE ParentInterfaceType,
+  IN ULONG ParentBusNumber,
+  IN INTERFACE_TYPE BridgeInterfaceType,
+  IN USHORT Size,
+  IN USHORT Version,
+  OUT PTRANSLATOR_INTERFACE Translator,
+  OUT PULONG BridgeBusNumber);
+
+typedef NTSTATUS
+(NTAPI *pHalStartMirroring)(
+  VOID);
+
+typedef NTSTATUS
+(NTAPI *pHalEndMirroring)(
+  IN ULONG PassNumber);
+
+typedef NTSTATUS
+(NTAPI *pHalMirrorPhysicalMemory)(
+  IN PHYSICAL_ADDRESS PhysicalAddress,
+  IN LARGE_INTEGER NumberOfBytes);
+
+typedef NTSTATUS
+(NTAPI *pHalMirrorVerify)(
+  IN PHYSICAL_ADDRESS PhysicalAddress,
+  IN LARGE_INTEGER NumberOfBytes);
+
+typedef BOOLEAN
+(NTAPI *pHalTranslateBusAddress)(
+  IN INTERFACE_TYPE InterfaceType,
+  IN ULONG BusNumber,
+  IN PHYSICAL_ADDRESS BusAddress,
+  IN OUT PULONG AddressSpace,
+  OUT PPHYSICAL_ADDRESS TranslatedAddress);
+
+typedef NTSTATUS
+(NTAPI *pHalAssignSlotResources)(
+  IN PUNICODE_STRING RegistryPath,
+  IN PUNICODE_STRING DriverClassName OPTIONAL,
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN INTERFACE_TYPE BusType,
+  IN ULONG BusNumber,
+  IN ULONG SlotNumber,
+  IN OUT PCM_RESOURCE_LIST *AllocatedResources);
+
+typedef VOID
+(NTAPI *pHalHaltSystem)(
+  VOID);
+
+typedef BOOLEAN
+(NTAPI *pHalResetDisplay)(
+  VOID);
+
+typedef struct _MAP_REGISTER_ENTRY {
+  PVOID MapRegister;
+  BOOLEAN WriteToDevice;
+} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
+
+typedef UCHAR
+(NTAPI *pHalVectorToIDTEntry)(
+  ULONG Vector);
+
+typedef BOOLEAN
+(NTAPI *pHalFindBusAddressTranslation)(
+  IN PHYSICAL_ADDRESS BusAddress,
+  IN OUT PULONG AddressSpace,
+  OUT PPHYSICAL_ADDRESS TranslatedAddress,
+  IN OUT PULONG_PTR Context,
+  IN BOOLEAN NextBus);
+
+typedef VOID
+(NTAPI *pHalEndOfBoot)(
+  VOID);
+
+typedef PVOID
+(NTAPI *pHalGetAcpiTable)(
+  IN ULONG Signature,
+  IN PCSTR OemId OPTIONAL,
+  IN PCSTR OemTableId OPTIONAL);
+
+#if defined(_IA64_)
+typedef NTSTATUS
+(*pHalGetErrorCapList)(
+  IN OUT PULONG CapsListLength,
+  IN OUT PUCHAR ErrorCapList);
+
+typedef NTSTATUS
+(*pHalInjectError)(
+  IN ULONG BufferLength,
+  IN PUCHAR Buffer);
+#endif
+
+typedef VOID
+(NTAPI *PCI_ERROR_HANDLER_CALLBACK)(
+  VOID);
+
+typedef VOID
+(NTAPI *pHalSetPciErrorHandlerCallback)(
+  IN PCI_ERROR_HANDLER_CALLBACK Callback);
+
+#if 1 /* Not present in WDK 7600 */
+typedef VOID
+(FASTCALL *pHalIoAssignDriveLetters)(
+  IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
+  IN PSTRING NtDeviceName,
+  OUT PUCHAR NtSystemPath,
+  OUT PSTRING NtSystemPathString);
+#endif
+
+typedef struct {
+  ULONG Version;
+  pHalQuerySystemInformation HalQuerySystemInformation;
+  pHalSetSystemInformation HalSetSystemInformation;
+  pHalQueryBusSlots HalQueryBusSlots;
+  ULONG Spare1;
+  pHalExamineMBR HalExamineMBR;
+#if 1 /* Not present in WDK 7600 */
+  pHalIoAssignDriveLetters HalIoAssignDriveLetters;
+#endif
+  pHalIoReadPartitionTable HalIoReadPartitionTable;
+  pHalIoSetPartitionInformation HalIoSetPartitionInformation;
+  pHalIoWritePartitionTable HalIoWritePartitionTable;
+  pHalHandlerForBus HalReferenceHandlerForBus;
+  pHalReferenceBusHandler HalReferenceBusHandler;
+  pHalReferenceBusHandler HalDereferenceBusHandler;
+  pHalInitPnpDriver HalInitPnpDriver;
+  pHalInitPowerManagement HalInitPowerManagement;
+  pHalGetDmaAdapter HalGetDmaAdapter;
+  pHalGetInterruptTranslator HalGetInterruptTranslator;
+  pHalStartMirroring HalStartMirroring;
+  pHalEndMirroring HalEndMirroring;
+  pHalMirrorPhysicalMemory HalMirrorPhysicalMemory;
+  pHalEndOfBoot HalEndOfBoot;
+  pHalMirrorVerify HalMirrorVerify;
+  pHalGetAcpiTable HalGetCachedAcpiTable;
+  pHalSetPciErrorHandlerCallback  HalSetPciErrorHandlerCallback;
+#if defined(_IA64_)
+  pHalGetErrorCapList HalGetErrorCapList;
+  pHalInjectError HalInjectError;
+#endif
+} HAL_DISPATCH, *PHAL_DISPATCH;
+
+/* GCC/MSVC and WDK compatible declaration */
+extern NTKERNELAPI HAL_DISPATCH HalDispatchTable;
+
+#if defined(_NTOSKRNL_) || defined(_BLDR_)
+#define HALDISPATCH (&HalDispatchTable)
+#else
+/* This is a WDK compatibility definition */
+#define HalDispatchTable (&HalDispatchTable)
+#define HALDISPATCH HalDispatchTable
+#endif
+
+#define HAL_DISPATCH_VERSION            3 /* FIXME: when to use 4? */
+#define HalDispatchTableVersion         HALDISPATCH->Version
+#define HalQuerySystemInformation       HALDISPATCH->HalQuerySystemInformation
+#define HalSetSystemInformation         HALDISPATCH->HalSetSystemInformation
+#define HalQueryBusSlots                HALDISPATCH->HalQueryBusSlots
+#define HalReferenceHandlerForBus       HALDISPATCH->HalReferenceHandlerForBus
+#define HalReferenceBusHandler          HALDISPATCH->HalReferenceBusHandler
+#define HalDereferenceBusHandler        HALDISPATCH->HalDereferenceBusHandler
+#define HalInitPnpDriver                HALDISPATCH->HalInitPnpDriver
+#define HalInitPowerManagement          HALDISPATCH->HalInitPowerManagement
+#define HalGetDmaAdapter                HALDISPATCH->HalGetDmaAdapter
+#define HalGetInterruptTranslator       HALDISPATCH->HalGetInterruptTranslator
+#define HalStartMirroring               HALDISPATCH->HalStartMirroring
+#define HalEndMirroring                 HALDISPATCH->HalEndMirroring
+#define HalMirrorPhysicalMemory         HALDISPATCH->HalMirrorPhysicalMemory
+#define HalEndOfBoot                    HALDISPATCH->HalEndOfBoot
+#define HalMirrorVerify                 HALDISPATCH->HalMirrorVerify
+#define HalGetCachedAcpiTable           HALDISPATCH->HalGetCachedAcpiTable
+#define HalSetPciErrorHandlerCallback   HALDISPATCH->HalSetPciErrorHandlerCallback
+#if defined(_IA64_)
+#define HalGetErrorCapList              HALDISPATCH->HalGetErrorCapList
+#define HalInjectError                  HALDISPATCH->HalInjectError
+#endif
+
+typedef struct _HAL_BUS_INFORMATION {
+  INTERFACE_TYPE BusType;
+  BUS_DATA_TYPE ConfigurationType;
+  ULONG BusNumber;
+  ULONG Reserved;
+} HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION;
+
+typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
+  KPROFILE_SOURCE Source;
+  BOOLEAN Supported;
+  ULONG Interval;
+} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
+
+typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX {
+  KPROFILE_SOURCE Source;
+  BOOLEAN Supported;
+  ULONG_PTR Interval;
+  ULONG_PTR DefInterval;
+  ULONG_PTR MaxInterval;
+  ULONG_PTR MinInterval;
+} HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX;
+
+typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
+  KPROFILE_SOURCE Source;
+  ULONG_PTR Interval;
+} HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
+
+typedef struct _HAL_PROFILE_SOURCE_LIST {
+  KPROFILE_SOURCE Source;
+  PWSTR Description;
+} HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST;
+
+typedef enum _HAL_DISPLAY_BIOS_INFORMATION {
+  HalDisplayInt10Bios,
+  HalDisplayEmulatedBios,
+  HalDisplayNoBios
+} HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION;
+
+typedef struct _HAL_POWER_INFORMATION {
+  ULONG TBD;
+} HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION;
+
+typedef struct _HAL_PROCESSOR_SPEED_INFO {
+  ULONG ProcessorSpeed;
+} HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION;
+
+typedef struct _HAL_CALLBACKS {
+  PCALLBACK_OBJECT SetSystemInformation;
+  PCALLBACK_OBJECT BusCheck;
+} HAL_CALLBACKS, *PHAL_CALLBACKS;
+
+typedef struct _HAL_PROCESSOR_FEATURE {
+  ULONG UsableFeatureBits;
+} HAL_PROCESSOR_FEATURE;
+
+typedef NTSTATUS
+(NTAPI *PHALIOREADWRITEHANDLER)(
+  IN BOOLEAN fRead,
+  IN ULONG dwAddr,
+  IN ULONG dwSize,
+  IN OUT PULONG pdwData);
+
+typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST {
+  ULONG BadAddrBegin;
+  ULONG BadAddrSize;
+  ULONG OSVersionTrigger;
+  PHALIOREADWRITEHANDLER IOHandler;
+} HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST;
+
+#if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
+
+typedef VOID
+(NTAPI *PHALMCAINTERFACELOCK)(
+  VOID);
+
+typedef VOID
+(NTAPI *PHALMCAINTERFACEUNLOCK)(
+  VOID);
+
+typedef NTSTATUS
+(NTAPI *PHALMCAINTERFACEREADREGISTER)(
+  IN UCHAR BankNumber,
+  IN OUT PVOID Exception);
+
+typedef struct _HAL_MCA_INTERFACE {
+  PHALMCAINTERFACELOCK Lock;
+  PHALMCAINTERFACEUNLOCK Unlock;
+  PHALMCAINTERFACEREADREGISTER ReadRegister;
+} HAL_MCA_INTERFACE;
+
+typedef enum {
+  ApicDestinationModePhysical = 1,
+  ApicDestinationModeLogicalFlat,
+  ApicDestinationModeLogicalClustered,
+  ApicDestinationModeUnknown
+} HAL_APIC_DESTINATION_MODE, *PHAL_APIC_DESTINATION_MODE;
+
+#if defined(_AMD64_)
+
+struct _KTRAP_FRAME;
+struct _KEXCEPTION_FRAME;
+
+typedef ERROR_SEVERITY
+(NTAPI *PDRIVER_EXCPTN_CALLBACK)(
+  IN PVOID Context,
+  IN struct _KTRAP_FRAME *TrapFrame,
+  IN struct _KEXCEPTION_FRAME *ExceptionFrame,
+  IN PMCA_EXCEPTION Exception);
+
+#endif
+
+#if defined(_X86_) || defined(_IA64_)
+typedef
+#if defined(_IA64_)
+ERROR_SEVERITY
+#else
+VOID
+#endif
+(NTAPI *PDRIVER_EXCPTN_CALLBACK)(
+  IN PVOID Context,
+  IN PMCA_EXCEPTION BankLog);
+#endif
+
+typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK;
+
+typedef struct _MCA_DRIVER_INFO {
+  PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback;
+  PKDEFERRED_ROUTINE DpcCallback;
+  PVOID DeviceContext;
+} MCA_DRIVER_INFO, *PMCA_DRIVER_INFO;
+
+typedef struct _HAL_ERROR_INFO {
+  ULONG Version;
+  ULONG InitMaxSize;
+  ULONG McaMaxSize;
+  ULONG McaPreviousEventsCount;
+  ULONG McaCorrectedEventsCount;
+  ULONG McaKernelDeliveryFails;
+  ULONG McaDriverDpcQueueFails;
+  ULONG McaReserved;
+  ULONG CmcMaxSize;
+  ULONG CmcPollingInterval;
+  ULONG CmcInterruptsCount;
+  ULONG CmcKernelDeliveryFails;
+  ULONG CmcDriverDpcQueueFails;
+  ULONG CmcGetStateFails;
+  ULONG CmcClearStateFails;
+  ULONG CmcReserved;
+  ULONGLONG CmcLogId;
+  ULONG CpeMaxSize;
+  ULONG CpePollingInterval;
+  ULONG CpeInterruptsCount;
+  ULONG CpeKernelDeliveryFails;
+  ULONG CpeDriverDpcQueueFails;
+  ULONG CpeGetStateFails;
+  ULONG CpeClearStateFails;
+  ULONG CpeInterruptSources;
+  ULONGLONG CpeLogId;
+  ULONGLONG KernelReserved[4];
+} HAL_ERROR_INFO, *PHAL_ERROR_INFO;
+
+#define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
+#define HAL_MCE_DISABLED          ((ULONG)0)
+
+#define HAL_CMC_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
+#define HAL_CMC_DISABLED          HAL_MCE_DISABLED
+
+#define HAL_CPE_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
+#define HAL_CPE_DISABLED          HAL_MCE_DISABLED
+
+#define HAL_MCA_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
+#define HAL_MCA_DISABLED          HAL_MCE_DISABLED
+
+typedef VOID
+(NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)(
+  IN PVOID Context,
+  IN PCMC_EXCEPTION CmcLog);
+
+typedef VOID
+(NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)(
+  IN PVOID Context,
+  IN PCPE_EXCEPTION CmcLog);
+
+typedef struct _CMC_DRIVER_INFO {
+  PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback;
+  PKDEFERRED_ROUTINE DpcCallback;
+  PVOID DeviceContext;
+} CMC_DRIVER_INFO, *PCMC_DRIVER_INFO;
+
+typedef struct _CPE_DRIVER_INFO {
+  PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback;
+  PKDEFERRED_ROUTINE DpcCallback;
+  PVOID DeviceContext;
+} CPE_DRIVER_INFO, *PCPE_DRIVER_INFO;
+
+#endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
+
+#if defined(_IA64_)
+
+typedef NTSTATUS
+(*HALSENDCROSSPARTITIONIPI)(
+  IN USHORT ProcessorID,
+  IN UCHAR HardwareVector);
+
+typedef NTSTATUS
+(*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)(
+  OUT PULONG Vector,
+  OUT PKIRQL Irql,
+  IN OUT PGROUP_AFFINITY Affinity,
+  OUT PUCHAR HardwareVector);
+
+typedef VOID
+(*HALFREECROSSPARTITIONINTERRUPTVECTOR)(
+  IN ULONG Vector,
+  IN PGROUP_AFFINITY Affinity);
+
+typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE {
+  HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi;
+  HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector;
+  HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector;
+} HAL_CROSS_PARTITION_IPI_INTERFACE;
+
+#define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
+    FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE,    \
+                 HalFreeCrossPartitionInterruptVector)
+
+#endif /* defined(_IA64_) */
+
+typedef struct _HAL_PLATFORM_INFORMATION {
+  ULONG PlatformFlags;
+} HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION;
+
+#define HAL_PLATFORM_DISABLE_WRITE_COMBINING      0x01L
+#define HAL_PLATFORM_DISABLE_PTCG                 0x04L
+#define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY       0x08L
+#define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO  0x10L
+#define HAL_PLATFORM_ACPI_TABLES_CACHED           0x20L
+$endif
+
diff --git a/reactos/include/xdk/ia64/ke.h b/reactos/include/xdk/ia64/ke.h
new file mode 100644 (file)
index 0000000..2920636
--- /dev/null
@@ -0,0 +1,38 @@
+$if (_WDMDDK_)
+/** Kernel definitions for IA64 **/
+
+/* Interrupt request levels */
+#define PASSIVE_LEVEL           0
+#define LOW_LEVEL               0
+#define APC_LEVEL               1
+#define DISPATCH_LEVEL          2
+#define CMC_LEVEL               3
+#define DEVICE_LEVEL_BASE       4
+#define PC_LEVEL                12
+#define IPI_LEVEL               14
+#define DRS_LEVEL               14
+#define CLOCK_LEVEL             13
+#define POWER_LEVEL             15
+#define PROFILE_LEVEL           15
+#define HIGH_LEVEL              15
+
+#define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
+extern volatile LARGE_INTEGER KeTickCount;
+
+#define PAUSE_PROCESSOR __yield();
+
+FORCEINLINE
+VOID
+KeFlushWriteBuffer(VOID)
+{
+  __mf ();
+  return;
+}
+
+NTSYSAPI
+PKTHREAD
+NTAPI
+KeGetCurrentThread(VOID);
+
+$endif
+
diff --git a/reactos/include/xdk/interlocked.h b/reactos/include/xdk/interlocked.h
new file mode 100644 (file)
index 0000000..722096b
--- /dev/null
@@ -0,0 +1,193 @@
+/******************************************************************************
+ *                           INTERLOCKED Functions                            *
+ ******************************************************************************/
+//
+// Intrinsics (note: taken from our winnt.h)
+// FIXME: 64-bit
+//
+#if defined(__GNUC__)
+
+static __inline__ BOOLEAN
+InterlockedBitTestAndSet(
+  IN LONG volatile *Base,
+  IN LONG Bit)
+{
+#if defined(_M_IX86)
+  LONG OldBit;
+  __asm__ __volatile__("lock "
+                       "btsl %2,%1\n\t"
+                       "sbbl %0,%0\n\t"
+                       :"=r" (OldBit),"+m" (*Base)
+                       :"Ir" (Bit)
+                       : "memory");
+  return OldBit;
+#else
+  return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1;
+#endif
+}
+
+static __inline__ BOOLEAN
+InterlockedBitTestAndReset(
+  IN LONG volatile *Base,
+  IN LONG Bit)
+{
+#if defined(_M_IX86)
+  LONG OldBit;
+  __asm__ __volatile__("lock "
+                       "btrl %2,%1\n\t"
+                       "sbbl %0,%0\n\t"
+                       :"=r" (OldBit),"+m" (*Base)
+                       :"Ir" (Bit)
+                       : "memory");
+  return OldBit;
+#else
+  return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1;
+#endif
+}
+
+#endif /* defined(__GNUC__) */
+
+#define BitScanForward _BitScanForward
+#define BitScanReverse _BitScanReverse
+#define BitTest _bittest
+#define BitTestAndComplement _bittestandcomplement
+#define BitTestAndSet _bittestandset
+#define BitTestAndReset _bittestandreset
+#define InterlockedBitTestAndSet _interlockedbittestandset
+#define InterlockedBitTestAndReset _interlockedbittestandreset
+
+#ifdef _M_AMD64
+#define BitTest64 _bittest64
+#define BitTestAndComplement64 _bittestandcomplement64
+#define BitTestAndSet64 _bittestandset64
+#define BitTestAndReset64 _bittestandreset64
+#define InterlockedBitTestAndSet64 _interlockedbittestandset64
+#define InterlockedBitTestAndReset64 _interlockedbittestandreset64
+#endif
+
+#if !defined(__INTERLOCKED_DECLARED)
+#define __INTERLOCKED_DECLARED
+
+#if defined (_X86_)
+#if defined(NO_INTERLOCKED_INTRINSICS)
+NTKERNELAPI
+LONG
+FASTCALL
+InterlockedIncrement(
+  IN OUT LONG volatile *Addend);
+
+NTKERNELAPI
+LONG
+FASTCALL
+InterlockedDecrement(
+  IN OUT LONG volatile *Addend);
+
+NTKERNELAPI
+LONG
+FASTCALL
+InterlockedCompareExchange(
+  IN OUT LONG volatile *Destination,
+  IN LONG Exchange,
+  IN LONG Comparand);
+
+NTKERNELAPI
+LONG
+FASTCALL
+InterlockedExchange(
+  IN OUT LONG volatile *Destination,
+  IN LONG Value);
+
+NTKERNELAPI
+LONG
+FASTCALL
+InterlockedExchangeAdd(
+  IN OUT LONG volatile *Addend,
+  IN LONG  Value);
+
+#else /* !defined(NO_INTERLOCKED_INTRINSICS) */
+
+#define InterlockedExchange _InterlockedExchange
+#define InterlockedIncrement _InterlockedIncrement
+#define InterlockedDecrement _InterlockedDecrement
+#define InterlockedExchangeAdd _InterlockedExchangeAdd
+#define InterlockedCompareExchange _InterlockedCompareExchange
+#define InterlockedOr _InterlockedOr
+#define InterlockedAnd _InterlockedAnd
+#define InterlockedXor _InterlockedXor
+
+#endif /* !defined(NO_INTERLOCKED_INTRINSICS) */
+
+#endif /* defined (_X86_) */
+
+#if !defined (_WIN64)
+/*
+ * PVOID
+ * InterlockedExchangePointer(
+ *   IN OUT PVOID volatile  *Target,
+ *   IN PVOID  Value)
+ */
+#define InterlockedExchangePointer(Target, Value) \
+  ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
+
+/*
+ * PVOID
+ * InterlockedCompareExchangePointer(
+ *   IN OUT PVOID  *Destination,
+ *   IN PVOID  Exchange,
+ *   IN PVOID  Comparand)
+ */
+#define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
+  ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
+
+#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
+#define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
+#define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
+
+#endif // !defined (_WIN64)
+
+#if defined (_M_AMD64)
+
+#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b)
+#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
+#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
+#define InterlockedAnd _InterlockedAnd
+#define InterlockedOr _InterlockedOr
+#define InterlockedXor _InterlockedXor
+#define InterlockedIncrement _InterlockedIncrement
+#define InterlockedDecrement _InterlockedDecrement
+#define InterlockedAdd _InterlockedAdd
+#define InterlockedExchange _InterlockedExchange
+#define InterlockedExchangeAdd _InterlockedExchangeAdd
+#define InterlockedCompareExchange _InterlockedCompareExchange
+#define InterlockedAnd64 _InterlockedAnd64
+#define InterlockedOr64 _InterlockedOr64
+#define InterlockedXor64 _InterlockedXor64
+#define InterlockedIncrement64 _InterlockedIncrement64
+#define InterlockedDecrement64 _InterlockedDecrement64
+#define InterlockedAdd64 _InterlockedAdd64
+#define InterlockedExchange64 _InterlockedExchange64
+#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
+#define InterlockedCompareExchange64 _InterlockedCompareExchange64
+#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
+#define InterlockedExchangePointer _InterlockedExchangePointer
+#define InterlockedBitTestAndSet64 _interlockedbittestandset64
+#define InterlockedBitTestAndReset64 _interlockedbittestandreset64
+
+#endif // _M_AMD64
+
+#if defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
+//#if !defined(_X86AMD64_) // FIXME: what's _X86AMD64_ used for?
+FORCEINLINE
+LONG64
+InterlockedAdd64(
+  IN OUT LONG64 volatile *Addend,
+  IN LONG64 Value)
+{
+  return InterlockedExchangeAdd64(Addend, Value) + Value;
+}
+//#endif
+#endif
+
+#endif /* !__INTERLOCKED_DECLARED */
+
+
diff --git a/reactos/include/xdk/iofuncs.h b/reactos/include/xdk/iofuncs.h
new file mode 100644 (file)
index 0000000..a1a2fcf
--- /dev/null
@@ -0,0 +1,2284 @@
+/******************************************************************************
+ *                         I/O Manager Functions                              *
+ ******************************************************************************/
+$if (_NTDDK_)
+/*
+ * VOID IoAssignArcName(
+ *   IN PUNICODE_STRING  ArcName,
+ *   IN PUNICODE_STRING  DeviceName);
+ */
+#define IoAssignArcName(_ArcName, _DeviceName) ( \
+  IoCreateSymbolicLink((_ArcName), (_DeviceName)))
+
+/*
+ * VOID
+ * IoDeassignArcName(
+ *   IN PUNICODE_STRING  ArcName)
+ */
+#define IoDeassignArcName IoDeleteSymbolicLink
+
+VOID
+FORCEINLINE
+NTAPI
+IoInitializeDriverCreateContext(
+  PIO_DRIVER_CREATE_CONTEXT DriverContext)
+{
+  RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT));
+  DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT);
+}
+$endif
+
+
+$if (_WDMDDK_)
+/*
+ * NTSTATUS
+ * IoAcquireRemoveLock(
+ *   IN PIO_REMOVE_LOCK  RemoveLock,
+ *   IN OPTIONAL PVOID  Tag)
+ */
+#if DBG
+#define IoAcquireRemoveLock(RemoveLock, Tag) \
+  IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
+#else
+#define IoAcquireRemoveLock(RemoveLock, Tag) \
+  IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
+#endif
+
+/*
+ * VOID
+ * IoAdjustPagingPathCount(
+ *   IN PLONG  Count,
+ *   IN BOOLEAN  Increment)
+ */
+#define IoAdjustPagingPathCount(_Count, \
+                                _Increment) \
+{ \
+  if (_Increment) \
+    { \
+      InterlockedIncrement(_Count); \
+    } \
+  else \
+    { \
+      InterlockedDecrement(_Count); \
+    } \
+}
+
+#if !defined(_M_AMD64)
+NTHALAPI
+VOID
+NTAPI
+READ_PORT_BUFFER_UCHAR(
+  IN PUCHAR Port,
+  IN PUCHAR Buffer,
+  IN ULONG Count);
+
+NTHALAPI
+VOID
+NTAPI
+READ_PORT_BUFFER_ULONG(
+  IN PULONG Port,
+  IN PULONG Buffer,
+  IN ULONG Count);
+
+NTHALAPI
+VOID
+NTAPI
+READ_PORT_BUFFER_USHORT(
+  IN PUSHORT Port,
+  IN PUSHORT Buffer,
+  IN ULONG Count);
+
+NTHALAPI
+UCHAR
+NTAPI
+READ_PORT_UCHAR(
+  IN PUCHAR Port);
+
+NTHALAPI
+ULONG
+NTAPI
+READ_PORT_ULONG(
+  IN PULONG Port);
+
+NTHALAPI
+USHORT
+NTAPI
+READ_PORT_USHORT(
+  IN PUSHORT Port);
+
+NTKERNELAPI
+VOID
+NTAPI
+READ_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR Register,
+  IN PUCHAR Buffer,
+  IN ULONG Count);
+
+NTKERNELAPI
+VOID
+NTAPI
+READ_REGISTER_BUFFER_ULONG(
+  IN PULONG Register,
+  IN PULONG Buffer,
+  IN ULONG Count);
+
+NTKERNELAPI
+VOID
+NTAPI
+READ_REGISTER_BUFFER_USHORT(
+  IN PUSHORT Register,
+  IN PUSHORT Buffer,
+  IN ULONG Count);
+
+NTKERNELAPI
+UCHAR
+NTAPI
+READ_REGISTER_UCHAR(
+  IN PUCHAR Register);
+
+NTKERNELAPI
+ULONG
+NTAPI
+READ_REGISTER_ULONG(
+  IN PULONG Register);
+
+NTKERNELAPI
+USHORT
+NTAPI
+READ_REGISTER_USHORT(
+  IN PUSHORT Register);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_BUFFER_UCHAR(
+  IN PUCHAR Port,
+  IN PUCHAR Buffer,
+  IN ULONG Count);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_BUFFER_ULONG(
+  IN PULONG Port,
+  IN PULONG Buffer,
+  IN ULONG Count);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_BUFFER_USHORT(
+  IN PUSHORT Port,
+  IN PUSHORT Buffer,
+  IN ULONG Count);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_UCHAR(
+  IN PUCHAR Port,
+  IN UCHAR Value);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_ULONG(
+  IN PULONG Port,
+  IN ULONG Value);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_USHORT(
+  IN PUSHORT Port,
+  IN USHORT Value);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR Register,
+  IN PUCHAR Buffer,
+  IN ULONG Count);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_BUFFER_ULONG(
+  IN PULONG Register,
+  IN PULONG Buffer,
+  IN ULONG Count);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_BUFFER_USHORT(
+  IN PUSHORT Register,
+  IN PUSHORT Buffer,
+  IN ULONG Count);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_UCHAR(
+  IN PUCHAR Register,
+  IN UCHAR Value);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_ULONG(
+  IN PULONG Register,
+  IN ULONG Value);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_USHORT(
+  IN PUSHORT Register,
+  IN USHORT Value);
+
+#else
+
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_UCHAR(
+  IN PUCHAR Port,
+  IN PUCHAR Buffer,
+  IN ULONG Count)
+{
+  __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_ULONG(
+  IN PULONG Port,
+  IN PULONG Buffer,
+  IN ULONG Count)
+{
+  __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_USHORT(
+  IN PUSHORT Port,
+  IN PUSHORT Buffer,
+  IN ULONG Count)
+{
+  __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+UCHAR
+READ_PORT_UCHAR(
+  IN PUCHAR Port)
+{
+  return __inbyte((USHORT)(ULONG_PTR)Port);
+}
+
+FORCEINLINE
+ULONG
+READ_PORT_ULONG(
+  IN PULONG Port)
+{
+  return __indword((USHORT)(ULONG_PTR)Port);
+}
+
+FORCEINLINE
+USHORT
+READ_PORT_USHORT(
+  IN PUSHORT Port)
+{
+  return __inword((USHORT)(ULONG_PTR)Port);
+}
+
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR Register,
+  IN PUCHAR Buffer,
+  IN ULONG Count)
+{
+  __movsb(Register, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_ULONG(
+  IN PULONG Register,
+  IN PULONG Buffer,
+  IN ULONG Count)
+{
+  __movsd(Register, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_USHORT(
+  IN PUSHORT Register,
+  IN PUSHORT Buffer,
+  IN ULONG Count)
+{
+  __movsw(Register, Buffer, Count);
+}
+
+FORCEINLINE
+UCHAR
+READ_REGISTER_UCHAR(
+  IN volatile UCHAR *Register)
+{
+  return *Register;
+}
+
+FORCEINLINE
+ULONG
+READ_REGISTER_ULONG(
+  IN volatile ULONG *Register)
+{
+  return *Register;
+}
+
+FORCEINLINE
+USHORT
+READ_REGISTER_USHORT(
+  IN volatile USHORT *Register)
+{
+  return *Register;
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_UCHAR(
+  IN PUCHAR Port,
+  IN PUCHAR Buffer,
+  IN ULONG Count)
+{
+  __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_ULONG(
+  IN PULONG Port,
+  IN PULONG Buffer,
+  IN ULONG Count)
+{
+  __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_USHORT(
+  IN PUSHORT Port,
+  IN PUSHORT Buffer,
+  IN ULONG Count)
+{
+  __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_UCHAR(
+  IN PUCHAR Port,
+  IN UCHAR Value)
+{
+  __outbyte((USHORT)(ULONG_PTR)Port, Value);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_ULONG(
+  IN PULONG Port,
+  IN ULONG Value)
+{
+  __outdword((USHORT)(ULONG_PTR)Port, Value);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_USHORT(
+  IN PUSHORT Port,
+  IN USHORT Value)
+{
+  __outword((USHORT)(ULONG_PTR)Port, Value);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR Register,
+  IN PUCHAR Buffer,
+  IN ULONG Count)
+{
+  LONG Synch;
+  __movsb(Register, Buffer, Count);
+  InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_BUFFER_ULONG(
+  IN PULONG Register,
+  IN PULONG Buffer,
+  IN ULONG Count)
+{
+  LONG Synch;
+  __movsd(Register, Buffer, Count);
+  InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_BUFFER_USHORT(
+  IN PUSHORT Register,
+  IN PUSHORT Buffer,
+  IN ULONG Count)
+{
+  LONG Synch;
+  __movsw(Register, Buffer, Count);
+  InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_UCHAR(
+  IN volatile UCHAR *Register,
+  IN UCHAR Value)
+{
+  LONG Synch;
+  *Register = Value;
+  InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_ULONG(
+  IN volatile ULONG *Register,
+  IN ULONG Value)
+{
+  LONG Synch;
+  *Register = Value;
+  InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_USHORT(
+  IN volatile USHORT *Register,
+  IN USHORT Value)
+{
+  LONG Sync;
+  *Register = Value;
+  InterlockedOr(&Sync, 1);
+}
+#endif
+
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
+   (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+
+#define DMA_MACROS_DEFINED
+
+FORCEINLINE
+NTSTATUS
+IoAllocateAdapterChannel(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG NumberOfMapRegisters,
+  IN PDRIVER_CONTROL ExecutionRoutine,
+  IN PVOID Context)
+{
+  PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
+  AllocateAdapterChannel =
+      *(DmaAdapter)->DmaOperations->AllocateAdapterChannel;
+  ASSERT(AllocateAdapterChannel);
+  return AllocateAdapterChannel(DmaAdapter,
+                                DeviceObject,
+                                NumberOfMapRegisters,
+                                ExecutionRoutine,
+                                Context );
+}
+
+FORCEINLINE
+BOOLEAN
+NTAPI
+IoFlushAdapterBuffers(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PMDL Mdl,
+  IN PVOID MapRegisterBase,
+  IN PVOID CurrentVa,
+  IN ULONG Length,
+  IN BOOLEAN WriteToDevice)
+{
+  PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
+  FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers;
+  ASSERT(FlushAdapterBuffers);
+  return FlushAdapterBuffers(DmaAdapter,
+                             Mdl,
+                             MapRegisterBase,
+                             CurrentVa,
+                             Length,
+                             WriteToDevice);
+}
+
+FORCEINLINE
+VOID
+NTAPI
+IoFreeAdapterChannel(
+  IN PDMA_ADAPTER DmaAdapter)
+{
+  PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
+  FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel;
+  ASSERT(FreeAdapterChannel);
+  FreeAdapterChannel(DmaAdapter);
+}
+
+FORCEINLINE
+VOID
+NTAPI
+IoFreeMapRegisters(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PVOID MapRegisterBase,
+  IN ULONG NumberOfMapRegisters)
+{
+  PFREE_MAP_REGISTERS FreeMapRegisters;
+  FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters;
+  ASSERT(FreeMapRegisters);
+  FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters);
+}
+
+FORCEINLINE
+PHYSICAL_ADDRESS
+NTAPI
+IoMapTransfer(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PMDL Mdl,
+  IN PVOID MapRegisterBase,
+  IN PVOID CurrentVa,
+  IN OUT PULONG Length,
+  IN BOOLEAN WriteToDevice)
+{
+  PMAP_TRANSFER MapTransfer;
+
+  MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer;
+  ASSERT(MapTransfer);
+  return MapTransfer(DmaAdapter,
+                     Mdl,
+                     MapRegisterBase,
+                     CurrentVa,
+                     Length,
+                     WriteToDevice);
+}
+#endif
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+$if (_NTDDK_)
+#if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAllocateAdapterChannel(
+  IN PADAPTER_OBJECT AdapterObject,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG NumberOfMapRegisters,
+  IN PDRIVER_CONTROL ExecutionRoutine,
+  IN PVOID Context);
+#endif
+
+#if !defined(DMA_MACROS_DEFINED)
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+PHYSICAL_ADDRESS
+NTAPI
+IoMapTransfer(
+  IN PADAPTER_OBJECT AdapterObject,
+  IN PMDL Mdl,
+  IN PVOID MapRegisterBase,
+  IN PVOID CurrentVa,
+  IN OUT PULONG Length,
+  IN BOOLEAN WriteToDevice);
+#endif
+
+NTKERNELAPI
+VOID
+NTAPI
+IoAllocateController(
+  IN PCONTROLLER_OBJECT ControllerObject,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PDRIVER_CONTROL ExecutionRoutine,
+  IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+PCONTROLLER_OBJECT
+NTAPI
+IoCreateController(
+  IN ULONG Size);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoDeleteController(
+  IN PCONTROLLER_OBJECT ControllerObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeController(
+  IN PCONTROLLER_OBJECT ControllerObject);
+
+NTKERNELAPI
+PCONFIGURATION_INFORMATION
+NTAPI
+IoGetConfigurationInformation(VOID);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetDeviceToVerify(
+  IN PETHREAD Thread);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoCancelFileOpen(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PFILE_OBJECT FileObject);
+
+NTKERNELAPI
+PGENERIC_MAPPING
+NTAPI
+IoGetFileObjectGenericMapping(VOID);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoMakeAssociatedIrp(
+  IN PIRP Irp,
+  IN CCHAR StackSize);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoQueryDeviceDescription(
+  IN PINTERFACE_TYPE BusType OPTIONAL,
+  IN PULONG BusNumber OPTIONAL,
+  IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
+  IN PULONG ControllerNumber OPTIONAL,
+  IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
+  IN PULONG PeripheralNumber OPTIONAL,
+  IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
+  IN OUT PVOID Context OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRaiseHardError(
+  IN PIRP Irp,
+  IN PVPB Vpb OPTIONAL,
+  IN PDEVICE_OBJECT RealDeviceObject);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoRaiseInformationalHardError(
+  IN NTSTATUS ErrorStatus,
+  IN PUNICODE_STRING String OPTIONAL,
+  IN PKTHREAD Thread OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRegisterBootDriverReinitialization(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+  IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRegisterDriverReinitialization(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+  IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAttachDeviceByPointer(
+  IN PDEVICE_OBJECT SourceDevice,
+  IN PDEVICE_OBJECT TargetDevice);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReportDetectedDevice(
+  IN PDRIVER_OBJECT DriverObject,
+  IN INTERFACE_TYPE LegacyBusType,
+  IN ULONG BusNumber,
+  IN ULONG SlotNumber,
+  IN PCM_RESOURCE_LIST ResourceList OPTIONAL,
+  IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
+  IN BOOLEAN ResourceAssigned,
+  IN OUT PDEVICE_OBJECT *DeviceObject OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReportResourceForDetection(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PCM_RESOURCE_LIST DriverList OPTIONAL,
+  IN ULONG DriverListSize OPTIONAL,
+  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+  IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
+  IN ULONG DeviceListSize OPTIONAL,
+  OUT PBOOLEAN ConflictDetected);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReportResourceUsage(
+  IN PUNICODE_STRING DriverClassName OPTIONAL,
+  IN PDRIVER_OBJECT DriverObject,
+  IN PCM_RESOURCE_LIST DriverList OPTIONAL,
+  IN ULONG DriverListSize OPTIONAL,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
+  IN ULONG DeviceListSize OPTIONAL,
+  IN BOOLEAN OverrideConflict,
+  OUT PBOOLEAN ConflictDetected);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetHardErrorOrVerifyDevice(
+  IN PIRP Irp,
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAssignResources(
+  IN PUNICODE_STRING RegistryPath,
+  IN PUNICODE_STRING DriverClassName OPTIONAL,
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+  IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL,
+  IN OUT PCM_RESOURCE_LIST *AllocatedResources);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoSetThreadHardErrorMode(
+  IN BOOLEAN EnableHardErrors);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+IoAcquireCancelSpinLock(
+  OUT PKIRQL Irql);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAcquireRemoveLockEx(
+  IN PIO_REMOVE_LOCK RemoveLock,
+  IN PVOID Tag OPTIONAL,
+  IN PCSTR File,
+  IN ULONG Line,
+  IN ULONG RemlockSize);
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAllocateDriverObjectExtension(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PVOID ClientIdentificationAddress,
+  IN ULONG DriverObjectExtensionSize,
+  OUT PVOID *DriverObjectExtension);
+
+NTKERNELAPI
+PVOID
+NTAPI
+IoAllocateErrorLogEntry(
+  IN PVOID IoObject,
+  IN UCHAR EntrySize);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoAllocateIrp(
+  IN CCHAR StackSize,
+  IN BOOLEAN ChargeQuota);
+
+NTKERNELAPI
+PMDL
+NTAPI
+IoAllocateMdl(
+  IN PVOID VirtualAddress OPTIONAL,
+  IN ULONG Length,
+  IN BOOLEAN SecondaryBuffer,
+  IN BOOLEAN ChargeQuota,
+  IN OUT PIRP Irp OPTIONAL);
+
+NTKERNELAPI
+PIO_WORKITEM
+NTAPI
+IoAllocateWorkItem(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAttachDevice(
+  IN PDEVICE_OBJECT SourceDevice,
+  IN PUNICODE_STRING TargetDevice,
+  OUT PDEVICE_OBJECT *AttachedDevice);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoAttachDeviceToDeviceStack(
+  IN PDEVICE_OBJECT SourceDevice,
+  IN PDEVICE_OBJECT TargetDevice);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoBuildAsynchronousFsdRequest(
+  IN ULONG MajorFunction,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN OUT PVOID Buffer OPTIONAL,
+  IN ULONG Length OPTIONAL,
+  IN PLARGE_INTEGER StartingOffset OPTIONAL,
+  IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoBuildDeviceIoControlRequest(
+  IN ULONG IoControlCode,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PVOID InputBuffer OPTIONAL,
+  IN ULONG InputBufferLength,
+  OUT PVOID OutputBuffer OPTIONAL,
+  IN ULONG OutputBufferLength,
+  IN BOOLEAN InternalDeviceIoControl,
+  IN PKEVENT Event,
+  OUT PIO_STATUS_BLOCK IoStatusBlock);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoBuildPartialMdl(
+  IN PMDL SourceMdl,
+  IN OUT PMDL TargetMdl,
+  IN PVOID VirtualAddress,
+  IN ULONG Length);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoBuildSynchronousFsdRequest(
+  IN ULONG MajorFunction,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN OUT PVOID Buffer OPTIONAL,
+  IN ULONG Length OPTIONAL,
+  IN PLARGE_INTEGER StartingOffset OPTIONAL,
+  IN PKEVENT Event,
+  OUT PIO_STATUS_BLOCK IoStatusBlock);
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IofCallDriver(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN OUT PIRP Irp);
+#define IoCallDriver IofCallDriver
+
+NTKERNELAPI
+VOID
+FASTCALL
+IofCompleteRequest(
+  IN PIRP Irp,
+  IN CCHAR PriorityBoost);
+#define IoCompleteRequest IofCompleteRequest
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoCancelIrp(
+  IN PIRP Irp);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCheckShareAccess(
+  IN ACCESS_MASK DesiredAccess,
+  IN ULONG DesiredShareAccess,
+  IN OUT PFILE_OBJECT FileObject,
+  IN OUT PSHARE_ACCESS ShareAccess,
+  IN BOOLEAN Update);
+
+NTKERNELAPI
+VOID
+FASTCALL
+IofCompleteRequest(
+  IN PIRP Irp,
+  IN CCHAR PriorityBoost);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoConnectInterrupt(
+  OUT PKINTERRUPT *InterruptObject,
+  IN PKSERVICE_ROUTINE ServiceRoutine,
+  IN PVOID ServiceContext OPTIONAL,
+  IN PKSPIN_LOCK SpinLock OPTIONAL,
+  IN ULONG Vector,
+  IN KIRQL Irql,
+  IN KIRQL SynchronizeIrql,
+  IN KINTERRUPT_MODE InterruptMode,
+  IN BOOLEAN ShareVector,
+  IN KAFFINITY ProcessorEnableMask,
+  IN BOOLEAN FloatingSave);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateDevice(
+  IN PDRIVER_OBJECT DriverObject,
+  IN ULONG DeviceExtensionSize,
+  IN PUNICODE_STRING DeviceName OPTIONAL,
+  IN DEVICE_TYPE DeviceType,
+  IN ULONG DeviceCharacteristics,
+  IN BOOLEAN Exclusive,
+  OUT PDEVICE_OBJECT *DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateFile(
+  OUT PHANDLE FileHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN PLARGE_INTEGER AllocationSize OPTIONAL,
+  IN ULONG FileAttributes,
+  IN ULONG ShareAccess,
+  IN ULONG Disposition,
+  IN ULONG CreateOptions,
+  IN PVOID EaBuffer OPTIONAL,
+  IN ULONG EaLength,
+  IN CREATE_FILE_TYPE CreateFileType,
+  IN PVOID InternalParameters OPTIONAL,
+  IN ULONG Options);
+
+NTKERNELAPI
+PKEVENT
+NTAPI
+IoCreateNotificationEvent(
+  IN PUNICODE_STRING EventName,
+  OUT PHANDLE EventHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateSymbolicLink(
+  IN PUNICODE_STRING SymbolicLinkName,
+  IN PUNICODE_STRING DeviceName);
+
+NTKERNELAPI
+PKEVENT
+NTAPI
+IoCreateSynchronizationEvent(
+  IN PUNICODE_STRING EventName,
+  OUT PHANDLE EventHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateUnprotectedSymbolicLink(
+  IN PUNICODE_STRING SymbolicLinkName,
+  IN PUNICODE_STRING DeviceName);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoDeleteDevice(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoDeleteSymbolicLink(
+  IN PUNICODE_STRING SymbolicLinkName);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoDetachDevice(
+  IN OUT PDEVICE_OBJECT TargetDevice);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoDisconnectInterrupt(
+  IN PKINTERRUPT InterruptObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeIrp(
+  IN PIRP Irp);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeMdl(
+  IN PMDL Mdl);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeWorkItem(
+  IN PIO_WORKITEM IoWorkItem);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetAttachedDevice(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetAttachedDeviceReference(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetBootDiskInformation(
+  IN OUT PBOOTDISK_INFORMATION BootDiskInformation,
+  IN ULONG Size);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDeviceInterfaceAlias(
+  IN PUNICODE_STRING SymbolicLinkName,
+  IN CONST GUID *AliasInterfaceClassGuid,
+  OUT PUNICODE_STRING AliasSymbolicLinkName);
+
+NTKERNELAPI
+PEPROCESS
+NTAPI
+IoGetCurrentProcess(VOID);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDeviceInterfaces(
+  IN CONST GUID *InterfaceClassGuid,
+  IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
+  IN ULONG Flags,
+  OUT PWSTR *SymbolicLinkList);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDeviceObjectPointer(
+  IN PUNICODE_STRING ObjectName,
+  IN ACCESS_MASK DesiredAccess,
+  OUT PFILE_OBJECT *FileObject,
+  OUT PDEVICE_OBJECT *DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDeviceProperty(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
+  IN ULONG BufferLength,
+  OUT PVOID PropertyBuffer,
+  OUT PULONG ResultLength);
+
+NTKERNELAPI
+PDMA_ADAPTER
+NTAPI
+IoGetDmaAdapter(
+  IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
+  IN PDEVICE_DESCRIPTION DeviceDescription,
+  IN OUT PULONG NumberOfMapRegisters);
+
+NTKERNELAPI
+PVOID
+NTAPI
+IoGetDriverObjectExtension(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PVOID ClientIdentificationAddress);
+
+NTKERNELAPI
+PVOID
+NTAPI
+IoGetInitialStack(VOID);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetRelatedDeviceObject(
+  IN PFILE_OBJECT FileObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoQueueWorkItem(
+  IN PIO_WORKITEM IoWorkItem,
+  IN PIO_WORKITEM_ROUTINE WorkerRoutine,
+  IN WORK_QUEUE_TYPE QueueType,
+  IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoInitializeIrp(
+  IN OUT PIRP Irp,
+  IN USHORT PacketSize,
+  IN CCHAR StackSize);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoInitializeRemoveLockEx(
+  IN PIO_REMOVE_LOCK Lock,
+  IN ULONG AllocateTag,
+  IN ULONG MaxLockedMinutes,
+  IN ULONG HighWatermark,
+  IN ULONG RemlockSize);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoInitializeTimer(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIO_TIMER_ROUTINE TimerRoutine,
+  IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoInvalidateDeviceRelations(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN DEVICE_RELATION_TYPE Type);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoInvalidateDeviceState(
+  IN PDEVICE_OBJECT PhysicalDeviceObject);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoIsWdmVersionAvailable(
+  IN UCHAR MajorVersion,
+  IN UCHAR MinorVersion);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoOpenDeviceInterfaceRegistryKey(
+  IN PUNICODE_STRING SymbolicLinkName,
+  IN ACCESS_MASK DesiredAccess,
+  OUT PHANDLE DeviceInterfaceKey);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoOpenDeviceRegistryKey(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG DevInstKeyType,
+  IN ACCESS_MASK DesiredAccess,
+  OUT PHANDLE DevInstRegKey);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterDeviceInterface(
+  IN PDEVICE_OBJECT PhysicalDeviceObject,
+  IN CONST GUID *InterfaceClassGuid,
+  IN PUNICODE_STRING ReferenceString OPTIONAL,
+  OUT PUNICODE_STRING SymbolicLinkName);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterPlugPlayNotification(
+  IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
+  IN ULONG EventCategoryFlags,
+  IN PVOID EventCategoryData OPTIONAL,
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine,
+  IN OUT PVOID Context OPTIONAL,
+  OUT PVOID *NotificationEntry);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterShutdownNotification(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoReleaseCancelSpinLock(
+  IN KIRQL Irql);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoReleaseRemoveLockAndWaitEx(
+  IN PIO_REMOVE_LOCK RemoveLock,
+  IN PVOID Tag OPTIONAL,
+  IN ULONG RemlockSize);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoReleaseRemoveLockEx(
+  IN PIO_REMOVE_LOCK RemoveLock,
+  IN PVOID Tag OPTIONAL,
+  IN ULONG RemlockSize);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRemoveShareAccess(
+  IN PFILE_OBJECT FileObject,
+  IN OUT PSHARE_ACCESS ShareAccess);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReportTargetDeviceChange(
+  IN PDEVICE_OBJECT PhysicalDeviceObject,
+  IN PVOID NotificationStructure);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReportTargetDeviceChangeAsynchronous(
+  IN PDEVICE_OBJECT PhysicalDeviceObject,
+  IN PVOID NotificationStructure,
+  IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL,
+  IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRequestDeviceEject(
+  IN PDEVICE_OBJECT PhysicalDeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoReuseIrp(
+  IN OUT PIRP Irp,
+  IN NTSTATUS Status);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetDeviceInterfaceState(
+  IN PUNICODE_STRING SymbolicLinkName,
+  IN BOOLEAN Enable);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetShareAccess(
+  IN ACCESS_MASK DesiredAccess,
+  IN ULONG DesiredShareAccess,
+  IN OUT PFILE_OBJECT FileObject,
+  OUT PSHARE_ACCESS ShareAccess);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoStartNextPacket(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN BOOLEAN Cancelable);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoStartNextPacketByKey(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN BOOLEAN Cancelable,
+  IN ULONG Key);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoStartPacket(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIRP Irp,
+  IN PULONG Key OPTIONAL,
+  IN PDRIVER_CANCEL CancelFunction OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoStartTimer(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoStopTimer(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoUnregisterPlugPlayNotification(
+  IN PVOID NotificationEntry);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoUnregisterShutdownNotification(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoUpdateShareAccess(
+  IN PFILE_OBJECT FileObject,
+  IN OUT PSHARE_ACCESS ShareAccess);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIAllocateInstanceIds(
+  IN GUID *Guid,
+  IN ULONG InstanceCount,
+  OUT ULONG *FirstInstanceId);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIQuerySingleInstanceMultiple(
+  IN PVOID *DataBlockObjectList,
+  IN PUNICODE_STRING InstanceNames,
+  IN ULONG ObjectCount,
+  IN OUT ULONG *InOutBufferSize,
+  OUT PVOID OutBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIRegistrationControl(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG Action);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMISuggestInstanceName(
+  IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
+  IN PUNICODE_STRING SymbolicLinkName OPTIONAL,
+  IN BOOLEAN CombineNames,
+  OUT PUNICODE_STRING SuggestedInstanceName);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIWriteEvent(
+  IN OUT PVOID WnodeEventItem);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoWriteErrorLogEntry(
+  IN PVOID ElEntry);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoGetTopLevelIrp(VOID);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterLastChanceShutdownNotification(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetTopLevelIrp(
+  IN PIRP Irp OPTIONAL);
+
+$endif
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_NTDDK_)
+#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoIsFileOriginRemote(
+  IN PFILE_OBJECT FileObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetFileOrigin(
+  IN PFILE_OBJECT FileObject,
+  IN BOOLEAN Remote);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+$if (_NTDDK_)
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoReadPartitionTable(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN BOOLEAN ReturnRecognizedPartitions,
+  OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoSetPartitionInformation(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN ULONG PartitionNumber,
+  IN ULONG PartitionType);
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoWritePartitionTable(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN ULONG SectorsPerTrack,
+  IN ULONG NumberOfHeads,
+  IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateDisk(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN struct _CREATE_DISK* Disk OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReadDiskSignature(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG BytesPerSector,
+  OUT PDISK_SIGNATURE Signature);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReadPartitionTableEx(
+  IN PDEVICE_OBJECT DeviceObject,
+  OUT struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetPartitionInformationEx(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG PartitionNumber,
+  IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetSystemPartition(
+  IN PUNICODE_STRING VolumeNameString);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoVerifyPartitionTable(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN BOOLEAN FixErrors);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoVolumeDeviceToDosName(
+  IN PVOID VolumeDeviceObject,
+  OUT PUNICODE_STRING DosName);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWritePartitionTableEx(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateFileSpecifyDeviceObjectHint(
+  OUT PHANDLE FileHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN PLARGE_INTEGER AllocationSize OPTIONAL,
+  IN ULONG FileAttributes,
+  IN ULONG ShareAccess,
+  IN ULONG Disposition,
+  IN ULONG CreateOptions,
+  IN PVOID EaBuffer OPTIONAL,
+  IN ULONG EaLength,
+  IN CREATE_FILE_TYPE CreateFileType,
+  IN PVOID InternalParameters OPTIONAL,
+  IN ULONG Options,
+  IN PVOID DeviceObject OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAttachDeviceToDeviceStackSafe(
+  IN PDEVICE_OBJECT SourceDevice,
+  IN PDEVICE_OBJECT TargetDevice,
+  OUT PDEVICE_OBJECT *AttachedToDeviceObject);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCsqInitialize(
+  IN PIO_CSQ Csq,
+  IN PIO_CSQ_INSERT_IRP CsqInsertIrp,
+  IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
+  IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
+  IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
+  IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
+  IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoCsqInsertIrp(
+  IN PIO_CSQ Csq,
+  IN PIRP Irp,
+  IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoCsqRemoveIrp(
+  IN PIO_CSQ Csq,
+  IN PIO_CSQ_IRP_CONTEXT Context);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoCsqRemoveNextIrp(
+  IN PIO_CSQ Csq,
+  IN PVOID PeekContext OPTIONAL);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoForwardIrpSynchronously(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIRP Irp);
+
+#define IoForwardAndCatchIrp IoForwardIrpSynchronously
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeErrorLogEntry(
+  PVOID ElEntry);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetCompletionRoutineEx(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIRP Irp,
+  IN PIO_COMPLETION_ROUTINE CompletionRoutine,
+  IN PVOID Context,
+  IN BOOLEAN InvokeOnSuccess,
+  IN BOOLEAN InvokeOnError,
+  IN BOOLEAN InvokeOnCancel);
+
+VOID
+NTAPI
+IoSetStartIoAttributes(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN BOOLEAN DeferredStartIo,
+  IN BOOLEAN NonCancelable);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIDeviceObjectToInstanceName(
+  IN PVOID DataBlockObject,
+  IN PDEVICE_OBJECT DeviceObject,
+  OUT PUNICODE_STRING InstanceName);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIExecuteMethod(
+  IN PVOID DataBlockObject,
+  IN PUNICODE_STRING InstanceName,
+  IN ULONG MethodId,
+  IN ULONG InBufferSize,
+  IN OUT PULONG OutBufferSize,
+  IN OUT  PUCHAR InOutBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIHandleToInstanceName(
+  IN PVOID DataBlockObject,
+  IN HANDLE FileHandle,
+  OUT PUNICODE_STRING InstanceName);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIOpenBlock(
+  IN GUID *DataBlockGuid,
+  IN ULONG DesiredAccess,
+  OUT PVOID *DataBlockObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIQueryAllData(
+  IN PVOID DataBlockObject,
+  IN OUT ULONG *InOutBufferSize,
+  OUT PVOID OutBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIQueryAllDataMultiple(
+  IN PVOID *DataBlockObjectList,
+  IN ULONG ObjectCount,
+  IN OUT ULONG *InOutBufferSize,
+  OUT PVOID OutBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIQuerySingleInstance(
+  IN PVOID DataBlockObject,
+  IN PUNICODE_STRING InstanceName,
+  IN OUT ULONG *InOutBufferSize,
+  OUT PVOID OutBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMISetNotificationCallback(
+  IN OUT PVOID Object,
+  IN WMI_NOTIFICATION_CALLBACK Callback,
+  IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMISetSingleInstance(
+  IN PVOID DataBlockObject,
+  IN PUNICODE_STRING InstanceName,
+  IN ULONG Version,
+  IN ULONG ValueBufferSize,
+  IN PVOID ValueBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMISetSingleItem(
+  IN PVOID DataBlockObject,
+  IN PUNICODE_STRING InstanceName,
+  IN ULONG DataItemId,
+  IN ULONG Version,
+  IN ULONG ValueBufferSize,
+  IN PVOID ValueBuffer);
+$endif
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoValidateDeviceIoControlAccess(
+  IN PIRP Irp,
+  IN ULONG RequiredAccess);
+#endif
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+$if (_NTDDK_)
+NTKERNELAPI
+IO_PAGING_PRIORITY
+FASTCALL
+IoGetPagingIoPriority(
+  IN PIRP Irp);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCsqInitializeEx(
+  IN PIO_CSQ Csq,
+  IN PIO_CSQ_INSERT_IRP_EX CsqInsertIrp,
+  IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
+  IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
+  IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
+  IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
+  IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCsqInsertIrpEx(
+  IN PIO_CSQ Csq,
+  IN PIRP Irp,
+  IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL,
+  IN PVOID InsertContext OPTIONAL);
+$endif
+#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+
+$if (_NTDDK_)
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+BOOLEAN
+NTAPI
+IoTranslateBusAddress(
+  IN INTERFACE_TYPE InterfaceType,
+  IN ULONG BusNumber,
+  IN PHYSICAL_ADDRESS BusAddress,
+  IN OUT PULONG AddressSpace,
+  OUT PPHYSICAL_ADDRESS TranslatedAddress);
+#endif
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+$if (_NTDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoUpdateDiskGeometry(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN struct _DISK_GEOMETRY_EX* OldDiskGeometry,
+  IN struct _DISK_GEOMETRY_EX* NewDiskGeometry);
+
+PTXN_PARAMETER_BLOCK
+NTAPI
+IoGetTransactionParameterBlock(
+  IN PFILE_OBJECT FileObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateFileEx(
+  OUT PHANDLE FileHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN PLARGE_INTEGER AllocationSize OPTIONAL,
+  IN ULONG FileAttributes,
+  IN ULONG ShareAccess,
+  IN ULONG Disposition,
+  IN ULONG CreateOptions,
+  IN PVOID EaBuffer OPTIONAL,
+  IN ULONG EaLength,
+  IN CREATE_FILE_TYPE CreateFileType,
+  IN PVOID InternalParameters OPTIONAL,
+  IN ULONG Options,
+  IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL);
+
+NTSTATUS
+NTAPI
+IoSetIrpExtraCreateParameter(
+  IN OUT PIRP Irp,
+  IN struct _ECP_LIST *ExtraCreateParameter);
+
+VOID
+NTAPI
+IoClearIrpExtraCreateParameter(
+  IN OUT PIRP Irp);
+
+NTSTATUS
+NTAPI
+IoGetIrpExtraCreateParameter(
+  IN PIRP Irp,
+  OUT struct _ECP_LIST **ExtraCreateParameter OPTIONAL);
+
+BOOLEAN
+NTAPI
+IoIsFileObjectIgnoringSharing(
+  IN PFILE_OBJECT FileObject);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetBootDiskInformationLite(
+  OUT PBOOTDISK_INFORMATION_LITE *BootDiskInformation);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCheckShareAccessEx(
+  IN ACCESS_MASK DesiredAccess,
+  IN ULONG DesiredShareAccess,
+  IN OUT PFILE_OBJECT FileObject,
+  IN OUT PSHARE_ACCESS ShareAccess,
+  IN BOOLEAN Update,
+  IN PBOOLEAN WritePermission);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoConnectInterruptEx(
+  IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoDisconnectInterruptEx(
+  IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters);
+
+LOGICAL
+NTAPI
+IoWithinStackLimits(
+  IN ULONG_PTR RegionStart,
+  IN SIZE_T RegionSize);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetShareAccessEx(
+  IN ACCESS_MASK DesiredAccess,
+  IN ULONG DesiredShareAccess,
+  IN OUT PFILE_OBJECT FileObject,
+  OUT PSHARE_ACCESS ShareAccess,
+  IN PBOOLEAN WritePermission);
+
+ULONG
+NTAPI
+IoSizeofWorkItem(VOID);
+
+VOID
+NTAPI
+IoInitializeWorkItem(
+  IN PVOID IoObject,
+  IN PIO_WORKITEM IoWorkItem);
+
+VOID
+NTAPI
+IoUninitializeWorkItem(
+  IN PIO_WORKITEM IoWorkItem);
+
+VOID
+NTAPI
+IoQueueWorkItemEx(
+  IN PIO_WORKITEM IoWorkItem,
+  IN PIO_WORKITEM_ROUTINE_EX WorkerRoutine,
+  IN WORK_QUEUE_TYPE QueueType,
+  IN PVOID Context OPTIONAL);
+
+IO_PRIORITY_HINT
+NTAPI
+IoGetIoPriorityHint(
+  IN PIRP Irp);
+
+NTSTATUS
+NTAPI
+IoSetIoPriorityHint(
+  IN PIRP Irp,
+  IN IO_PRIORITY_HINT PriorityHint);
+
+NTSTATUS
+NTAPI
+IoAllocateSfioStreamIdentifier(
+  IN PFILE_OBJECT FileObject,
+  IN ULONG Length,
+  IN PVOID Signature,
+  OUT PVOID *StreamIdentifier);
+
+PVOID
+NTAPI
+IoGetSfioStreamIdentifier(
+  IN PFILE_OBJECT FileObject,
+  IN PVOID Signature);
+
+NTSTATUS
+NTAPI
+IoFreeSfioStreamIdentifier(
+  IN PFILE_OBJECT FileObject,
+  IN PVOID Signature);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRequestDeviceEjectEx(
+  IN PDEVICE_OBJECT PhysicalDeviceObject,
+  IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL,
+  IN PVOID Context OPTIONAL,
+  IN PDRIVER_OBJECT DriverObject OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetDevicePropertyData(
+  IN PDEVICE_OBJECT     Pdo,
+  IN CONST DEVPROPKEY   *PropertyKey,
+  IN LCID               Lcid,
+  IN ULONG              Flags,
+  IN DEVPROPTYPE        Type,
+  IN ULONG              Size,
+  IN PVOID          Data OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDevicePropertyData(
+  PDEVICE_OBJECT Pdo,
+  CONST DEVPROPKEY *PropertyKey,
+  LCID Lcid,
+  ULONG Flags,
+  ULONG Size,
+  PVOID Data,
+  PULONG RequiredSize,
+  PDEVPROPTYPE Type);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+$if (_WDMDDK_)
+#define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
+
+#if (NTDDI_VERSION >= NTDDI_WS08)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReplacePartitionUnit(
+  IN PDEVICE_OBJECT TargetPdo,
+  IN PDEVICE_OBJECT SparePdo,
+  IN ULONG Flags);
+#endif
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+$if (_NTDDK_)
+NTSTATUS
+NTAPI
+IoSetFileObjectIgnoreSharing(
+  IN PFILE_OBJECT FileObject);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetAffinityInterrupt(
+  IN PKINTERRUPT InterruptObject,
+  OUT PGROUP_AFFINITY GroupAffinity);
+
+NTSTATUS
+NTAPI
+IoGetContainerInformation(
+  IN IO_CONTAINER_INFORMATION_CLASS InformationClass,
+  IN PVOID ContainerObject OPTIONAL,
+  IN OUT PVOID Buffer OPTIONAL,
+  IN ULONG BufferLength);
+
+NTSTATUS
+NTAPI
+IoRegisterContainerNotification(
+  IN IO_CONTAINER_NOTIFICATION_CLASS NotificationClass,
+  IN PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction,
+  IN PVOID NotificationInformation OPTIONAL,
+  IN ULONG NotificationInformationLength,
+  OUT PVOID CallbackRegistration);
+
+VOID
+NTAPI
+IoUnregisterContainerNotification(
+  IN PVOID CallbackRegistration);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoUnregisterPlugPlayNotificationEx(
+  IN PVOID NotificationEntry);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDeviceNumaNode(
+  IN PDEVICE_OBJECT Pdo,
+  OUT PUSHORT NodeNumber);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+$if (_WDMDDK_)
+#if defined(_WIN64)
+NTKERNELAPI
+ULONG
+NTAPI
+IoWMIDeviceObjectToProviderId(
+  IN PDEVICE_OBJECT DeviceObject);
+#else
+#define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
+#endif
+
+/*
+ * USHORT
+ * IoSizeOfIrp(
+ *   IN CCHAR  StackSize)
+ */
+#define IoSizeOfIrp(_StackSize) \
+  ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
+
+FORCEINLINE
+VOID
+IoSkipCurrentIrpStackLocation(
+  IN OUT PIRP Irp)
+{
+  ASSERT(Irp->CurrentLocation <= Irp->StackCount);
+  Irp->CurrentLocation++;
+  Irp->Tail.Overlay.CurrentStackLocation++;
+}
+
+FORCEINLINE
+VOID
+IoSetNextIrpStackLocation(
+  IN OUT PIRP Irp)
+{
+  ASSERT(Irp->CurrentLocation > 0);
+  Irp->CurrentLocation--;
+  Irp->Tail.Overlay.CurrentStackLocation--;
+}
+
+FORCEINLINE
+PIO_STACK_LOCATION
+IoGetNextIrpStackLocation(
+  IN PIRP Irp)
+{
+  ASSERT(Irp->CurrentLocation > 0);
+  return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
+}
+
+FORCEINLINE
+VOID
+IoSetCompletionRoutine(
+  IN PIRP Irp,
+  IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL,
+  IN PVOID Context OPTIONAL,
+  IN BOOLEAN InvokeOnSuccess,
+  IN BOOLEAN InvokeOnError,
+  IN BOOLEAN InvokeOnCancel)
+{
+  PIO_STACK_LOCATION irpSp;
+  ASSERT( (InvokeOnSuccess || InvokeOnError || InvokeOnCancel) ? (CompletionRoutine != NULL) : TRUE );
+  irpSp = IoGetNextIrpStackLocation(Irp);
+  irpSp->CompletionRoutine = CompletionRoutine;
+  irpSp->Context = Context;
+  irpSp->Control = 0;
+
+  if (InvokeOnSuccess) {
+    irpSp->Control = SL_INVOKE_ON_SUCCESS;
+  }
+
+  if (InvokeOnError) {
+    irpSp->Control |= SL_INVOKE_ON_ERROR;
+  }
+
+  if (InvokeOnCancel) {
+    irpSp->Control |= SL_INVOKE_ON_CANCEL;
+  }
+}
+
+/*
+ * PDRIVER_CANCEL
+ * IoSetCancelRoutine(
+ *   IN PIRP  Irp,
+ *   IN PDRIVER_CANCEL  CancelRoutine)
+ */
+#define IoSetCancelRoutine(_Irp, \
+                           _CancelRoutine) \
+  ((PDRIVER_CANCEL) (ULONG_PTR) InterlockedExchangePointer( \
+    (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (ULONG_PTR) (_CancelRoutine)))
+
+/*
+ * VOID
+ * IoRequestDpc(
+ *   IN PDEVICE_OBJECT  DeviceObject,
+ *   IN PIRP  Irp,
+ *   IN PVOID  Context);
+ */
+#define IoRequestDpc(DeviceObject, Irp, Context)( \
+  KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
+
+/*
+ * VOID
+ * IoReleaseRemoveLock(
+ *   IN PIO_REMOVE_LOCK  RemoveLock,
+ *   IN PVOID  Tag)
+ */
+#define IoReleaseRemoveLock(_RemoveLock, \
+                            _Tag) \
+  IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+
+/*
+ * VOID
+ * IoReleaseRemoveLockAndWait(
+ *   IN PIO_REMOVE_LOCK  RemoveLock,
+ *   IN PVOID  Tag)
+ */
+#define IoReleaseRemoveLockAndWait(_RemoveLock, \
+                                   _Tag) \
+  IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+
+#if defined(_WIN64)
+NTKERNELAPI
+BOOLEAN
+IoIs32bitProcess(
+  IN PIRP Irp OPTIONAL);
+#endif
+
+#define PLUGPLAY_REGKEY_DEVICE                            1
+#define PLUGPLAY_REGKEY_DRIVER                            2
+#define PLUGPLAY_REGKEY_CURRENT_HWPROFILE                 4
+
+FORCEINLINE
+PIO_STACK_LOCATION
+IoGetCurrentIrpStackLocation(
+  IN PIRP Irp)
+{
+  ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
+  return Irp->Tail.Overlay.CurrentStackLocation;
+}
+
+FORCEINLINE
+VOID
+IoMarkIrpPending(
+  IN OUT PIRP Irp)
+{
+  IoGetCurrentIrpStackLocation( (Irp) )->Control |= SL_PENDING_RETURNED;
+}
+
+/*
+ * BOOLEAN
+ * IoIsErrorUserInduced(
+ *   IN NTSTATUS  Status);
+ */
+#define IoIsErrorUserInduced(Status) \
+   ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
+   ((Status) == STATUS_IO_TIMEOUT) || \
+   ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
+   ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
+   ((Status) == STATUS_VERIFY_REQUIRED) || \
+   ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
+   ((Status) == STATUS_WRONG_VOLUME)))
+
+/* VOID
+ * IoInitializeRemoveLock(
+ *   IN PIO_REMOVE_LOCK  Lock,
+ *   IN ULONG  AllocateTag,
+ *   IN ULONG  MaxLockedMinutes,
+ *   IN ULONG  HighWatermark)
+ */
+#define IoInitializeRemoveLock( \
+  Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
+  IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
+    HighWatermark, sizeof(IO_REMOVE_LOCK))
+
+VOID
+FORCEINLINE
+IoInitializeDpcRequest(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIO_DPC_ROUTINE DpcRoutine)
+{
+  KeInitializeDpc( &DeviceObject->Dpc,
+                   (PKDEFERRED_ROUTINE) DpcRoutine,
+                   DeviceObject );
+}
+
+#define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
+
+/*
+ * ULONG
+ * IoGetFunctionCodeFromCtlCode(
+ *   IN ULONG  ControlCode)
+ */
+#define IoGetFunctionCodeFromCtlCode(_ControlCode) \
+  (((_ControlCode) >> 2) & 0x00000FFF)
+
+FORCEINLINE
+VOID
+IoCopyCurrentIrpStackLocationToNext(
+  IN OUT PIRP Irp)
+{
+  PIO_STACK_LOCATION irpSp;
+  PIO_STACK_LOCATION nextIrpSp;
+  irpSp = IoGetCurrentIrpStackLocation(Irp);
+  nextIrpSp = IoGetNextIrpStackLocation(Irp);
+  RtlCopyMemory( nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine));
+  nextIrpSp->Control = 0;
+}
+
+NTKERNELAPI
+VOID
+NTAPI
+IoGetStackLimits(
+  OUT PULONG_PTR LowLimit,
+  OUT PULONG_PTR HighLimit);
+
+FORCEINLINE
+ULONG_PTR
+IoGetRemainingStackSize(VOID)
+{
+  ULONG_PTR End, Begin;
+  ULONG_PTR Result;
+
+  IoGetStackLimits(&Begin, &End);
+  Result = (ULONG_PTR)(&End) - Begin;
+  return Result;
+}
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+VOID
+FORCEINLINE
+IoInitializeThreadedDpcRequest(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIO_DPC_ROUTINE DpcRoutine)
+{
+  KeInitializeThreadedDpc(&DeviceObject->Dpc,
+                          (PKDEFERRED_ROUTINE) DpcRoutine,
+                          DeviceObject );
+}
+#endif
+$endif
+
diff --git a/reactos/include/xdk/iotypes.h b/reactos/include/xdk/iotypes.h
new file mode 100644 (file)
index 0000000..aac22cb
--- /dev/null
@@ -0,0 +1,4869 @@
+/******************************************************************************
+ *                         I/O Manager Types                                  *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+#define WDM_MAJORVERSION        0x06
+#define WDM_MINORVERSION        0x00
+
+#if defined(_WIN64)
+
+#ifndef USE_DMA_MACROS
+#define USE_DMA_MACROS
+#endif
+
+#ifndef NO_LEGACY_DRIVERS
+#define NO_LEGACY_DRIVERS
+#endif
+
+#endif /* defined(_WIN64) */
+
+#define STATUS_CONTINUE_COMPLETION      STATUS_SUCCESS
+
+#define CONNECT_FULLY_SPECIFIED         0x1
+#define CONNECT_LINE_BASED              0x2
+#define CONNECT_MESSAGE_BASED           0x3
+#define CONNECT_FULLY_SPECIFIED_GROUP   0x4
+#define CONNECT_CURRENT_VERSION         0x4
+
+#define POOL_COLD_ALLOCATION                256
+#define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE    8
+#define POOL_RAISE_IF_ALLOCATION_FAILURE    16
+
+#define IO_TYPE_ADAPTER                 1
+#define IO_TYPE_CONTROLLER              2
+#define IO_TYPE_DEVICE                  3
+#define IO_TYPE_DRIVER                  4
+#define IO_TYPE_FILE                    5
+#define IO_TYPE_IRP                     6
+#define IO_TYPE_MASTER_ADAPTER          7
+#define IO_TYPE_OPEN_PACKET             8
+#define IO_TYPE_TIMER                   9
+#define IO_TYPE_VPB                     10
+#define IO_TYPE_ERROR_LOG               11
+#define IO_TYPE_ERROR_MESSAGE           12
+#define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
+
+#define IO_TYPE_CSQ_IRP_CONTEXT 1
+#define IO_TYPE_CSQ 2
+#define IO_TYPE_CSQ_EX 3
+
+/* IO_RESOURCE_DESCRIPTOR.Option */
+#define IO_RESOURCE_PREFERRED             0x01
+#define IO_RESOURCE_DEFAULT               0x02
+#define IO_RESOURCE_ALTERNATIVE           0x08
+
+#define FILE_DEVICE_BEEP                  0x00000001
+#define FILE_DEVICE_CD_ROM                0x00000002
+#define FILE_DEVICE_CD_ROM_FILE_SYSTEM    0x00000003
+#define FILE_DEVICE_CONTROLLER            0x00000004
+#define FILE_DEVICE_DATALINK              0x00000005
+#define FILE_DEVICE_DFS                   0x00000006
+#define FILE_DEVICE_DISK                  0x00000007
+#define FILE_DEVICE_DISK_FILE_SYSTEM      0x00000008
+#define FILE_DEVICE_FILE_SYSTEM           0x00000009
+#define FILE_DEVICE_INPORT_PORT           0x0000000a
+#define FILE_DEVICE_KEYBOARD              0x0000000b
+#define FILE_DEVICE_MAILSLOT              0x0000000c
+#define FILE_DEVICE_MIDI_IN               0x0000000d
+#define FILE_DEVICE_MIDI_OUT              0x0000000e
+#define FILE_DEVICE_MOUSE                 0x0000000f
+#define FILE_DEVICE_MULTI_UNC_PROVIDER    0x00000010
+#define FILE_DEVICE_NAMED_PIPE            0x00000011
+#define FILE_DEVICE_NETWORK               0x00000012
+#define FILE_DEVICE_NETWORK_BROWSER       0x00000013
+#define FILE_DEVICE_NETWORK_FILE_SYSTEM   0x00000014
+#define FILE_DEVICE_NULL                  0x00000015
+#define FILE_DEVICE_PARALLEL_PORT         0x00000016
+#define FILE_DEVICE_PHYSICAL_NETCARD      0x00000017
+#define FILE_DEVICE_PRINTER               0x00000018
+#define FILE_DEVICE_SCANNER               0x00000019
+#define FILE_DEVICE_SERIAL_MOUSE_PORT     0x0000001a
+#define FILE_DEVICE_SERIAL_PORT           0x0000001b
+#define FILE_DEVICE_SCREEN                0x0000001c
+#define FILE_DEVICE_SOUND                 0x0000001d
+#define FILE_DEVICE_STREAMS               0x0000001e
+#define FILE_DEVICE_TAPE                  0x0000001f
+#define FILE_DEVICE_TAPE_FILE_SYSTEM      0x00000020
+#define FILE_DEVICE_TRANSPORT             0x00000021
+#define FILE_DEVICE_UNKNOWN               0x00000022
+#define FILE_DEVICE_VIDEO                 0x00000023
+#define FILE_DEVICE_VIRTUAL_DISK          0x00000024
+#define FILE_DEVICE_WAVE_IN               0x00000025
+#define FILE_DEVICE_WAVE_OUT              0x00000026
+#define FILE_DEVICE_8042_PORT             0x00000027
+#define FILE_DEVICE_NETWORK_REDIRECTOR    0x00000028
+#define FILE_DEVICE_BATTERY               0x00000029
+#define FILE_DEVICE_BUS_EXTENDER          0x0000002a
+#define FILE_DEVICE_MODEM                 0x0000002b
+#define FILE_DEVICE_VDM                   0x0000002c
+#define FILE_DEVICE_MASS_STORAGE          0x0000002d
+#define FILE_DEVICE_SMB                   0x0000002e
+#define FILE_DEVICE_KS                    0x0000002f
+#define FILE_DEVICE_CHANGER               0x00000030
+#define FILE_DEVICE_SMARTCARD             0x00000031
+#define FILE_DEVICE_ACPI                  0x00000032
+#define FILE_DEVICE_DVD                   0x00000033
+#define FILE_DEVICE_FULLSCREEN_VIDEO      0x00000034
+#define FILE_DEVICE_DFS_FILE_SYSTEM       0x00000035
+#define FILE_DEVICE_DFS_VOLUME            0x00000036
+#define FILE_DEVICE_SERENUM               0x00000037
+#define FILE_DEVICE_TERMSRV               0x00000038
+#define FILE_DEVICE_KSEC                  0x00000039
+#define FILE_DEVICE_FIPS                  0x0000003A
+#define FILE_DEVICE_INFINIBAND            0x0000003B
+#define FILE_DEVICE_VMBUS                 0x0000003E
+#define FILE_DEVICE_CRYPT_PROVIDER        0x0000003F
+#define FILE_DEVICE_WPD                   0x00000040
+#define FILE_DEVICE_BLUETOOTH             0x00000041
+#define FILE_DEVICE_MT_COMPOSITE          0x00000042
+#define FILE_DEVICE_MT_TRANSPORT          0x00000043
+#define FILE_DEVICE_BIOMETRIC             0x00000044
+#define FILE_DEVICE_PMI                   0x00000045
+
+#if defined(NT_PROCESSOR_GROUPS)
+
+typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
+
+typedef enum _IRQ_DEVICE_POLICY_USHORT {
+  IrqPolicyMachineDefault = 0,
+  IrqPolicyAllCloseProcessors = 1,
+  IrqPolicyOneCloseProcessor = 2,
+  IrqPolicyAllProcessorsInMachine = 3,
+  IrqPolicyAllProcessorsInGroup = 3,
+  IrqPolicySpecifiedProcessors = 4,
+  IrqPolicySpreadMessagesAcrossAllProcessors = 5};
+
+#else /* defined(NT_PROCESSOR_GROUPS) */
+
+typedef enum _IRQ_DEVICE_POLICY {
+  IrqPolicyMachineDefault = 0,
+  IrqPolicyAllCloseProcessors,
+  IrqPolicyOneCloseProcessor,
+  IrqPolicyAllProcessorsInMachine,
+  IrqPolicySpecifiedProcessors,
+  IrqPolicySpreadMessagesAcrossAllProcessors
+} IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
+
+#endif
+
+typedef enum _IRQ_PRIORITY {
+  IrqPriorityUndefined = 0,
+  IrqPriorityLow,
+  IrqPriorityNormal,
+  IrqPriorityHigh
+} IRQ_PRIORITY, *PIRQ_PRIORITY;
+
+typedef enum _IRQ_GROUP_POLICY {
+  GroupAffinityAllGroupZero = 0,
+  GroupAffinityDontCare
+} IRQ_GROUP_POLICY, *PIRQ_GROUP_POLICY;
+
+#define MAXIMUM_VOLUME_LABEL_LENGTH       (32 * sizeof(WCHAR))
+
+typedef struct _OBJECT_HANDLE_INFORMATION {
+  ULONG HandleAttributes;
+  ACCESS_MASK GrantedAccess;
+} OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
+
+typedef struct _CLIENT_ID {
+  HANDLE UniqueProcess;
+  HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
+
+typedef struct _VPB {
+  CSHORT Type;
+  CSHORT Size;
+  USHORT Flags;
+  USHORT VolumeLabelLength;
+  struct _DEVICE_OBJECT *DeviceObject;
+  struct _DEVICE_OBJECT *RealDevice;
+  ULONG SerialNumber;
+  ULONG ReferenceCount;
+  WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
+} VPB, *PVPB;
+
+typedef enum _IO_ALLOCATION_ACTION {
+  KeepObject = 1,
+  DeallocateObject,
+  DeallocateObjectKeepRegisters
+} IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION;
+
+typedef IO_ALLOCATION_ACTION
+(NTAPI DRIVER_CONTROL)(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN struct _IRP *Irp,
+  IN PVOID MapRegisterBase,
+  IN PVOID Context);
+typedef DRIVER_CONTROL *PDRIVER_CONTROL;
+
+typedef struct _WAIT_CONTEXT_BLOCK {
+  KDEVICE_QUEUE_ENTRY WaitQueueEntry;
+  PDRIVER_CONTROL DeviceRoutine;
+  PVOID DeviceContext;
+  ULONG NumberOfMapRegisters;
+  PVOID DeviceObject;
+  PVOID CurrentIrp;
+  PKDPC BufferChainingDpc;
+} WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
+
+$endif
+/* DEVICE_OBJECT.Flags */
+$if (_NTDDK_)
+#define DO_DEVICE_HAS_NAME                0x00000040
+#define DO_SYSTEM_BOOT_PARTITION          0x00000100
+#define DO_LONG_TERM_REQUESTS             0x00000200
+#define DO_NEVER_LAST_DEVICE              0x00000400
+#define DO_LOW_PRIORITY_FILESYSTEM        0x00010000
+#define DO_SUPPORTS_TRANSACTIONS          0x00040000
+#define DO_FORCE_NEITHER_IO               0x00080000
+#define DO_VOLUME_DEVICE_OBJECT           0x00100000
+#define DO_SYSTEM_SYSTEM_PARTITION        0x00200000
+#define DO_SYSTEM_CRITICAL_PARTITION      0x00400000
+#define DO_DISALLOW_EXECUTE               0x00800000
+$endif
+$if (_WDMDDK_)
+#define DO_VERIFY_VOLUME                  0x00000002
+#define DO_BUFFERED_IO                    0x00000004
+#define DO_EXCLUSIVE                      0x00000008
+#define DO_DIRECT_IO                      0x00000010
+#define DO_MAP_IO_BUFFER                  0x00000020
+#define DO_DEVICE_INITIALIZING            0x00000080
+#define DO_SHUTDOWN_REGISTERED            0x00000800
+#define DO_BUS_ENUMERATED_DEVICE          0x00001000
+#define DO_POWER_PAGABLE                  0x00002000
+#define DO_POWER_INRUSH                   0x00004000
+
+/* DEVICE_OBJECT.Characteristics */
+#define FILE_REMOVABLE_MEDIA              0x00000001
+#define FILE_READ_ONLY_DEVICE             0x00000002
+#define FILE_FLOPPY_DISKETTE              0x00000004
+#define FILE_WRITE_ONCE_MEDIA             0x00000008
+#define FILE_REMOTE_DEVICE                0x00000010
+#define FILE_DEVICE_IS_MOUNTED            0x00000020
+#define FILE_VIRTUAL_VOLUME               0x00000040
+#define FILE_AUTOGENERATED_DEVICE_NAME    0x00000080
+#define FILE_DEVICE_SECURE_OPEN           0x00000100
+#define FILE_CHARACTERISTIC_PNP_DEVICE    0x00000800
+#define FILE_CHARACTERISTIC_TS_DEVICE     0x00001000
+#define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
+
+/* DEVICE_OBJECT.AlignmentRequirement */
+#define FILE_BYTE_ALIGNMENT             0x00000000
+#define FILE_WORD_ALIGNMENT             0x00000001
+#define FILE_LONG_ALIGNMENT             0x00000003
+#define FILE_QUAD_ALIGNMENT             0x00000007
+#define FILE_OCTA_ALIGNMENT             0x0000000f
+#define FILE_32_BYTE_ALIGNMENT          0x0000001f
+#define FILE_64_BYTE_ALIGNMENT          0x0000003f
+#define FILE_128_BYTE_ALIGNMENT         0x0000007f
+#define FILE_256_BYTE_ALIGNMENT         0x000000ff
+#define FILE_512_BYTE_ALIGNMENT         0x000001ff
+
+/* DEVICE_OBJECT.DeviceType */
+#define DEVICE_TYPE ULONG
+
+typedef struct _DEVICE_OBJECT {
+  CSHORT Type;
+  USHORT Size;
+  LONG ReferenceCount;
+  struct _DRIVER_OBJECT *DriverObject;
+  struct _DEVICE_OBJECT *NextDevice;
+  struct _DEVICE_OBJECT *AttachedDevice;
+  struct _IRP *CurrentIrp;
+  PIO_TIMER Timer;
+  ULONG Flags;
+  ULONG Characteristics;
+  volatile PVPB Vpb;
+  PVOID DeviceExtension;
+  DEVICE_TYPE DeviceType;
+  CCHAR StackSize;
+  union {
+    LIST_ENTRY ListEntry;
+    WAIT_CONTEXT_BLOCK Wcb;
+  } Queue;
+  ULONG AlignmentRequirement;
+  KDEVICE_QUEUE DeviceQueue;
+  KDPC Dpc;
+  ULONG ActiveThreadCount;
+  PSECURITY_DESCRIPTOR SecurityDescriptor;
+  KEVENT DeviceLock;
+  USHORT SectorSize;
+  USHORT Spare1;
+  struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
+  PVOID Reserved;
+} DEVICE_OBJECT, *PDEVICE_OBJECT;
+
+typedef enum _IO_SESSION_STATE {
+  IoSessionStateCreated = 1,
+  IoSessionStateInitialized,
+  IoSessionStateConnected,
+  IoSessionStateDisconnected,
+  IoSessionStateDisconnectedLoggedOn,
+  IoSessionStateLoggedOn,
+  IoSessionStateLoggedOff,
+  IoSessionStateTerminated,
+  IoSessionStateMax
+} IO_SESSION_STATE, *PIO_SESSION_STATE;
+
+typedef enum _IO_COMPLETION_ROUTINE_RESULT {
+  ContinueCompletion = STATUS_CONTINUE_COMPLETION,
+  StopCompletion = STATUS_MORE_PROCESSING_REQUIRED
+} IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT;
+
+typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY {
+  PHYSICAL_ADDRESS MessageAddress;
+  KAFFINITY TargetProcessorSet;
+  PKINTERRUPT InterruptObject;
+  ULONG MessageData;
+  ULONG Vector;
+  KIRQL Irql;
+  KINTERRUPT_MODE Mode;
+  KINTERRUPT_POLARITY Polarity;
+} IO_INTERRUPT_MESSAGE_INFO_ENTRY, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY;
+
+typedef struct _IO_INTERRUPT_MESSAGE_INFO {
+  KIRQL UnifiedIrql;
+  ULONG MessageCount;
+  IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1];
+} IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO;
+
+typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS {
+  IN PDEVICE_OBJECT PhysicalDeviceObject;
+  OUT PKINTERRUPT *InterruptObject;
+  IN PKSERVICE_ROUTINE ServiceRoutine;
+  IN PVOID ServiceContext;
+  IN PKSPIN_LOCK SpinLock OPTIONAL;
+  IN KIRQL SynchronizeIrql;
+  IN BOOLEAN FloatingSave;
+  IN BOOLEAN ShareVector;
+  IN ULONG Vector;
+  IN KIRQL Irql;
+  IN KINTERRUPT_MODE InterruptMode;
+  IN KAFFINITY ProcessorEnableMask;
+  IN USHORT Group;
+} IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS;
+
+typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS {
+  IN PDEVICE_OBJECT PhysicalDeviceObject;
+  OUT PKINTERRUPT *InterruptObject;
+  IN PKSERVICE_ROUTINE ServiceRoutine;
+  IN PVOID ServiceContext;
+  IN PKSPIN_LOCK SpinLock OPTIONAL;
+  IN KIRQL SynchronizeIrql OPTIONAL;
+  IN BOOLEAN FloatingSave;
+} IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS;
+
+typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS {
+  IN PDEVICE_OBJECT PhysicalDeviceObject;
+  union {
+    OUT PVOID *Generic;
+    OUT PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable;
+    OUT PKINTERRUPT *InterruptObject;
+  } ConnectionContext;
+  IN PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine;
+  IN PVOID ServiceContext;
+  IN PKSPIN_LOCK SpinLock OPTIONAL;
+  IN KIRQL SynchronizeIrql OPTIONAL;
+  IN BOOLEAN FloatingSave;
+  IN PKSERVICE_ROUTINE FallBackServiceRoutine OPTIONAL;
+} IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS;
+
+typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
+  IN OUT ULONG Version;
+  union {
+    IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
+    IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
+    IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
+  };
+} IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;
+
+typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS {
+  IN ULONG Version;
+  union {
+    IN PVOID Generic;
+    IN PKINTERRUPT InterruptObject;
+    IN PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable;
+  } ConnectionContext;
+} IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS;
+
+typedef enum _IO_ACCESS_TYPE {
+  ReadAccess,
+  WriteAccess,
+  ModifyAccess
+} IO_ACCESS_TYPE;
+
+typedef enum _IO_ACCESS_MODE {
+  SequentialAccess,
+  RandomAccess
+} IO_ACCESS_MODE;
+
+typedef enum _IO_CONTAINER_NOTIFICATION_CLASS {
+  IoSessionStateNotification,
+  IoMaxContainerNotificationClass
+} IO_CONTAINER_NOTIFICATION_CLASS;
+
+typedef struct _IO_SESSION_STATE_NOTIFICATION {
+  ULONG Size;
+  ULONG Flags;
+  PVOID IoObject;
+  ULONG EventMask;
+  PVOID Context;
+} IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION;
+
+typedef enum _IO_CONTAINER_INFORMATION_CLASS {
+  IoSessionStateInformation,
+  IoMaxContainerInformationClass
+} IO_CONTAINER_INFORMATION_CLASS;
+
+typedef struct _IO_SESSION_STATE_INFORMATION {
+  ULONG SessionId;
+  IO_SESSION_STATE SessionState;
+  BOOLEAN LocalSession;
+} IO_SESSION_STATE_INFORMATION, *PIO_SESSION_STATE_INFORMATION;
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+typedef NTSTATUS
+(NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)(
+  VOID);
+
+typedef NTSTATUS
+(NTAPI IO_SESSION_NOTIFICATION_FUNCTION)(
+  IN PVOID SessionObject,
+  IN PVOID IoObject,
+  IN ULONG Event,
+  IN PVOID Context,
+  IN PVOID NotificationPayload,
+  IN ULONG PayloadLength);
+
+typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION;
+
+#endif
+
+typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
+  BOOLEAN Removed;
+  BOOLEAN Reserved[3];
+  volatile LONG IoCount;
+  KEVENT RemoveEvent;
+} IO_REMOVE_LOCK_COMMON_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
+  LONG Signature;
+  LONG HighWatermark;
+  LONGLONG MaxLockedTicks;
+  LONG AllocateTag;
+  LIST_ENTRY LockList;
+  KSPIN_LOCK Spin;
+  volatile LONG LowMemoryCount;
+  ULONG Reserved1[4];
+  PVOID Reserved2;
+  PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
+} IO_REMOVE_LOCK_DBG_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK {
+  IO_REMOVE_LOCK_COMMON_BLOCK Common;
+#if DBG
+  IO_REMOVE_LOCK_DBG_BLOCK Dbg;
+#endif
+} IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
+
+typedef struct _IO_WORKITEM *PIO_WORKITEM;
+
+typedef VOID
+(NTAPI IO_WORKITEM_ROUTINE)(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PVOID Context);
+typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE;
+
+typedef VOID
+(NTAPI IO_WORKITEM_ROUTINE_EX)(
+  IN PVOID IoObject,
+  IN PVOID Context OPTIONAL,
+  IN PIO_WORKITEM IoWorkItem);
+typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX;
+
+typedef struct _SHARE_ACCESS {
+  ULONG OpenCount;
+  ULONG Readers;
+  ULONG Writers;
+  ULONG Deleters;
+  ULONG SharedRead;
+  ULONG SharedWrite;
+  ULONG SharedDelete;
+} SHARE_ACCESS, *PSHARE_ACCESS;
+
+/* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
+   inheritance, even from a struct renders the type non-POD. So we use
+   this hack */
+#define PCI_COMMON_HEADER_LAYOUT \
+  USHORT VendorID; \
+  USHORT DeviceID; \
+  USHORT Command; \
+  USHORT Status; \
+  UCHAR RevisionID; \
+  UCHAR ProgIf; \
+  UCHAR SubClass; \
+  UCHAR BaseClass; \
+  UCHAR CacheLineSize; \
+  UCHAR LatencyTimer; \
+  UCHAR HeaderType; \
+  UCHAR BIST; \
+  union { \
+    struct _PCI_HEADER_TYPE_0 { \
+      ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
+      ULONG CIS; \
+      USHORT SubVendorID; \
+      USHORT SubSystemID; \
+      ULONG ROMBaseAddress; \
+      UCHAR CapabilitiesPtr; \
+      UCHAR Reserved1[3]; \
+      ULONG Reserved2; \
+      UCHAR InterruptLine; \
+      UCHAR InterruptPin; \
+      UCHAR MinimumGrant; \
+      UCHAR MaximumLatency; \
+    } type0; \
+    struct _PCI_HEADER_TYPE_1 { \
+      ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
+      UCHAR PrimaryBus; \
+      UCHAR SecondaryBus; \
+      UCHAR SubordinateBus; \
+      UCHAR SecondaryLatency; \
+      UCHAR IOBase; \
+      UCHAR IOLimit; \
+      USHORT SecondaryStatus; \
+      USHORT MemoryBase; \
+      USHORT MemoryLimit; \
+      USHORT PrefetchBase; \
+      USHORT PrefetchLimit; \
+      ULONG PrefetchBaseUpper32; \
+      ULONG PrefetchLimitUpper32; \
+      USHORT IOBaseUpper16; \
+      USHORT IOLimitUpper16; \
+      UCHAR CapabilitiesPtr; \
+      UCHAR Reserved1[3]; \
+      ULONG ROMBaseAddress; \
+      UCHAR InterruptLine; \
+      UCHAR InterruptPin; \
+      USHORT BridgeControl; \
+    } type1; \
+    struct _PCI_HEADER_TYPE_2 { \
+      ULONG SocketRegistersBaseAddress; \
+      UCHAR CapabilitiesPtr; \
+      UCHAR Reserved; \
+      USHORT SecondaryStatus; \
+      UCHAR PrimaryBus; \
+      UCHAR SecondaryBus; \
+      UCHAR SubordinateBus; \
+      UCHAR SecondaryLatency; \
+      struct { \
+        ULONG Base; \
+        ULONG Limit; \
+      } Range[PCI_TYPE2_ADDRESSES-1]; \
+      UCHAR InterruptLine; \
+      UCHAR InterruptPin; \
+      USHORT BridgeControl; \
+    } type2; \
+  } u;
+
+typedef enum _CREATE_FILE_TYPE {
+  CreateFileTypeNone,
+  CreateFileTypeNamedPipe,
+  CreateFileTypeMailslot
+} CREATE_FILE_TYPE;
+
+#define IO_FORCE_ACCESS_CHECK               0x001
+#define IO_NO_PARAMETER_CHECKING            0x100
+
+#define IO_REPARSE                      0x0
+#define IO_REMOUNT                      0x1
+
+typedef struct _IO_STATUS_BLOCK {
+  _ANONYMOUS_UNION union {
+    NTSTATUS Status;
+    PVOID Pointer;
+  } DUMMYUNIONNAME;
+  ULONG_PTR Information;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+
+#if defined(_WIN64)
+typedef struct _IO_STATUS_BLOCK32 {
+  NTSTATUS Status;
+  ULONG Information;
+} IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32;
+#endif
+
+typedef VOID
+(NTAPI *PIO_APC_ROUTINE)(
+  IN PVOID ApcContext,
+  IN PIO_STATUS_BLOCK IoStatusBlock,
+  IN ULONG Reserved);
+
+#define PIO_APC_ROUTINE_DEFINED
+
+typedef enum _IO_SESSION_EVENT {
+  IoSessionEventIgnore = 0,
+  IoSessionEventCreated,
+  IoSessionEventTerminated,
+  IoSessionEventConnected,
+  IoSessionEventDisconnected,
+  IoSessionEventLogon,
+  IoSessionEventLogoff,
+  IoSessionEventMax
+} IO_SESSION_EVENT, *PIO_SESSION_EVENT;
+
+#define IO_SESSION_STATE_ALL_EVENTS        0xffffffff
+#define IO_SESSION_STATE_CREATION_EVENT    0x00000001
+#define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
+#define IO_SESSION_STATE_CONNECT_EVENT     0x00000004
+#define IO_SESSION_STATE_DISCONNECT_EVENT  0x00000008
+#define IO_SESSION_STATE_LOGON_EVENT       0x00000010
+#define IO_SESSION_STATE_LOGOFF_EVENT      0x00000020
+
+#define IO_SESSION_STATE_VALID_EVENT_MASK  0x0000003f
+
+#define IO_SESSION_MAX_PAYLOAD_SIZE        256L
+
+typedef struct _IO_SESSION_CONNECT_INFO {
+  ULONG SessionId;
+  BOOLEAN LocalSession;
+} IO_SESSION_CONNECT_INFO, *PIO_SESSION_CONNECT_INFO;
+
+#define EVENT_INCREMENT                   1
+#define IO_NO_INCREMENT                   0
+#define IO_CD_ROM_INCREMENT               1
+#define IO_DISK_INCREMENT                 1
+#define IO_KEYBOARD_INCREMENT             6
+#define IO_MAILSLOT_INCREMENT             2
+#define IO_MOUSE_INCREMENT                6
+#define IO_NAMED_PIPE_INCREMENT           2
+#define IO_NETWORK_INCREMENT              2
+#define IO_PARALLEL_INCREMENT             1
+#define IO_SERIAL_INCREMENT               2
+#define IO_SOUND_INCREMENT                8
+#define IO_VIDEO_INCREMENT                1
+#define SEMAPHORE_INCREMENT               1
+
+#define MM_MAXIMUM_DISK_IO_SIZE          (0x10000)
+
+typedef struct _BOOTDISK_INFORMATION {
+  LONGLONG BootPartitionOffset;
+  LONGLONG SystemPartitionOffset;
+  ULONG BootDeviceSignature;
+  ULONG SystemDeviceSignature;
+} BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION;
+
+typedef struct _BOOTDISK_INFORMATION_EX {
+  LONGLONG BootPartitionOffset;
+  LONGLONG SystemPartitionOffset;
+  ULONG BootDeviceSignature;
+  ULONG SystemDeviceSignature;
+  GUID BootDeviceGuid;
+  GUID SystemDeviceGuid;
+  BOOLEAN BootDeviceIsGpt;
+  BOOLEAN SystemDeviceIsGpt;
+} BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX;
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+typedef struct _LOADER_PARTITION_INFORMATION_EX {
+  ULONG PartitionStyle;
+  ULONG PartitionNumber;
+  union {
+    ULONG Signature;
+    GUID DeviceId;
+  };
+  ULONG Flags;
+} LOADER_PARTITION_INFORMATION_EX, *PLOADER_PARTITION_INFORMATION_EX;
+
+typedef struct _BOOTDISK_INFORMATION_LITE {
+  ULONG NumberEntries;
+  LOADER_PARTITION_INFORMATION_EX Entries[1];
+} BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE;
+
+#else
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+typedef struct _BOOTDISK_INFORMATION_LITE {
+  ULONG BootDeviceSignature;
+  ULONG SystemDeviceSignature;
+  GUID BootDeviceGuid;
+  GUID SystemDeviceGuid;
+  BOOLEAN BootDeviceIsGpt;
+  BOOLEAN SystemDeviceIsGpt;
+} BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE;
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+#include <pshpack1.h>
+
+typedef struct _EISA_MEMORY_TYPE {
+  UCHAR ReadWrite:1;
+  UCHAR Cached:1;
+  UCHAR Reserved0:1;
+  UCHAR Type:2;
+  UCHAR Shared:1;
+  UCHAR Reserved1:1;
+  UCHAR MoreEntries:1;
+} EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
+
+typedef struct _EISA_MEMORY_CONFIGURATION {
+  EISA_MEMORY_TYPE ConfigurationByte;
+  UCHAR DataSize;
+  USHORT AddressLowWord;
+  UCHAR AddressHighByte;
+  USHORT MemorySize;
+} EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
+
+typedef struct _EISA_IRQ_DESCRIPTOR {
+  UCHAR Interrupt:4;
+  UCHAR Reserved:1;
+  UCHAR LevelTriggered:1;
+  UCHAR Shared:1;
+  UCHAR MoreEntries:1;
+} EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
+
+typedef struct _EISA_IRQ_CONFIGURATION {
+  EISA_IRQ_DESCRIPTOR ConfigurationByte;
+  UCHAR Reserved;
+} EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
+
+typedef struct _DMA_CONFIGURATION_BYTE0 {
+  UCHAR Channel:3;
+  UCHAR Reserved:3;
+  UCHAR Shared:1;
+  UCHAR MoreEntries:1;
+} DMA_CONFIGURATION_BYTE0;
+
+typedef struct _DMA_CONFIGURATION_BYTE1 {
+  UCHAR Reserved0:2;
+  UCHAR TransferSize:2;
+  UCHAR Timing:2;
+  UCHAR Reserved1:2;
+} DMA_CONFIGURATION_BYTE1;
+
+typedef struct _EISA_DMA_CONFIGURATION {
+  DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
+  DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
+} EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
+
+typedef struct _EISA_PORT_DESCRIPTOR {
+  UCHAR NumberPorts:5;
+  UCHAR Reserved:1;
+  UCHAR Shared:1;
+  UCHAR MoreEntries:1;
+} EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
+
+typedef struct _EISA_PORT_CONFIGURATION {
+  EISA_PORT_DESCRIPTOR Configuration;
+  USHORT PortAddress;
+} EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
+
+typedef struct _CM_EISA_SLOT_INFORMATION {
+  UCHAR ReturnCode;
+  UCHAR ReturnFlags;
+  UCHAR MajorRevision;
+  UCHAR MinorRevision;
+  USHORT Checksum;
+  UCHAR NumberFunctions;
+  UCHAR FunctionInformation;
+  ULONG CompressedId;
+} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
+
+typedef struct _CM_EISA_FUNCTION_INFORMATION {
+  ULONG CompressedId;
+  UCHAR IdSlotFlags1;
+  UCHAR IdSlotFlags2;
+  UCHAR MinorRevision;
+  UCHAR MajorRevision;
+  UCHAR Selections[26];
+  UCHAR FunctionFlags;
+  UCHAR TypeString[80];
+  EISA_MEMORY_CONFIGURATION EisaMemory[9];
+  EISA_IRQ_CONFIGURATION EisaIrq[7];
+  EISA_DMA_CONFIGURATION EisaDma[4];
+  EISA_PORT_CONFIGURATION EisaPort[20];
+  UCHAR InitializationData[60];
+} CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
+
+#include <poppack.h>
+
+/* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
+
+#define EISA_FUNCTION_ENABLED           0x80
+#define EISA_FREE_FORM_DATA             0x40
+#define EISA_HAS_PORT_INIT_ENTRY        0x20
+#define EISA_HAS_PORT_RANGE             0x10
+#define EISA_HAS_DMA_ENTRY              0x08
+#define EISA_HAS_IRQ_ENTRY              0x04
+#define EISA_HAS_MEMORY_ENTRY           0x02
+#define EISA_HAS_TYPE_ENTRY             0x01
+#define EISA_HAS_INFORMATION \
+  (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
+  + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
+
+#define EISA_MORE_ENTRIES               0x80
+#define EISA_SYSTEM_MEMORY              0x00
+#define EISA_MEMORY_TYPE_RAM            0x01
+
+/* CM_EISA_SLOT_INFORMATION.ReturnCode */
+
+#define EISA_INVALID_SLOT               0x80
+#define EISA_INVALID_FUNCTION           0x81
+#define EISA_INVALID_CONFIGURATION      0x82
+#define EISA_EMPTY_SLOT                 0x83
+#define EISA_INVALID_BIOS_CALL          0x86
+
+/*
+** Plug and Play structures
+*/
+
+typedef VOID
+(NTAPI *PINTERFACE_REFERENCE)(
+  PVOID Context);
+
+typedef VOID
+(NTAPI *PINTERFACE_DEREFERENCE)(
+  PVOID Context);
+
+typedef BOOLEAN
+(NTAPI TRANSLATE_BUS_ADDRESS)(
+  IN PVOID Context,
+  IN PHYSICAL_ADDRESS BusAddress,
+  IN ULONG Length,
+  IN OUT PULONG AddressSpace,
+  OUT PPHYSICAL_ADDRESS  TranslatedAddress);
+typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS;
+
+typedef struct _DMA_ADAPTER*
+(NTAPI GET_DMA_ADAPTER)(
+  IN PVOID Context,
+  IN struct _DEVICE_DESCRIPTION *DeviceDescriptor,
+  OUT PULONG NumberOfMapRegisters);
+typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER;
+
+typedef ULONG
+(NTAPI GET_SET_DEVICE_DATA)(
+  IN PVOID Context,
+  IN ULONG DataType,
+  IN PVOID Buffer,
+  IN ULONG Offset,
+  IN ULONG Length);
+typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA;
+
+typedef enum _DEVICE_INSTALL_STATE {
+  InstallStateInstalled,
+  InstallStateNeedsReinstall,
+  InstallStateFailedInstall,
+  InstallStateFinishInstall
+} DEVICE_INSTALL_STATE, *PDEVICE_INSTALL_STATE;
+
+typedef struct _LEGACY_BUS_INFORMATION {
+  GUID BusTypeGuid;
+  INTERFACE_TYPE LegacyBusType;
+  ULONG BusNumber;
+} LEGACY_BUS_INFORMATION, *PLEGACY_BUS_INFORMATION;
+
+typedef enum _DEVICE_REMOVAL_POLICY {
+  RemovalPolicyExpectNoRemoval = 1,
+  RemovalPolicyExpectOrderlyRemoval = 2,
+  RemovalPolicyExpectSurpriseRemoval = 3
+} DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY;
+
+typedef VOID
+(NTAPI*PREENUMERATE_SELF)(
+  IN PVOID Context);
+
+typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf;
+} REENUMERATE_SELF_INTERFACE_STANDARD, *PREENUMERATE_SELF_INTERFACE_STANDARD;
+
+typedef VOID
+(NTAPI *PIO_DEVICE_EJECT_CALLBACK)(
+  IN NTSTATUS Status,
+  IN OUT PVOID Context OPTIONAL);
+
+#define PCI_DEVICE_PRESENT_INTERFACE_VERSION     1
+
+/* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
+#define PCI_USE_SUBSYSTEM_IDS   0x00000001
+#define PCI_USE_REVISION        0x00000002
+#define PCI_USE_VENDEV_IDS      0x00000004
+#define PCI_USE_CLASS_SUBCLASS  0x00000008
+#define PCI_USE_PROGIF          0x00000010
+#define PCI_USE_LOCAL_BUS       0x00000020
+#define PCI_USE_LOCAL_DEVICE    0x00000040
+
+typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS {
+  ULONG Size;
+  ULONG Flags;
+  USHORT VendorID;
+  USHORT DeviceID;
+  UCHAR RevisionID;
+  USHORT SubVendorID;
+  USHORT SubSystemID;
+  UCHAR BaseClass;
+  UCHAR SubClass;
+  UCHAR ProgIf;
+} PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS;
+
+typedef BOOLEAN
+(NTAPI PCI_IS_DEVICE_PRESENT)(
+  IN USHORT VendorID,
+  IN USHORT DeviceID,
+  IN UCHAR RevisionID,
+  IN USHORT SubVendorID,
+  IN USHORT SubSystemID,
+  IN ULONG Flags);
+typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT;
+
+typedef BOOLEAN
+(NTAPI PCI_IS_DEVICE_PRESENT_EX)(
+  IN PVOID Context,
+  IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters);
+typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX;
+
+typedef struct _BUS_INTERFACE_STANDARD {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
+  PGET_DMA_ADAPTER GetDmaAdapter;
+  PGET_SET_DEVICE_DATA SetBusData;
+  PGET_SET_DEVICE_DATA GetBusData;
+} BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD;
+
+typedef struct _PCI_DEVICE_PRESENT_INTERFACE {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PPCI_IS_DEVICE_PRESENT IsDevicePresent;
+  PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx;
+} PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE;
+
+typedef struct _DEVICE_CAPABILITIES {
+  USHORT Size;
+  USHORT Version;
+  ULONG DeviceD1:1;
+  ULONG DeviceD2:1;
+  ULONG LockSupported:1;
+  ULONG EjectSupported:1;
+  ULONG Removable:1;
+  ULONG DockDevice:1;
+  ULONG UniqueID:1;
+  ULONG SilentInstall:1;
+  ULONG RawDeviceOK:1;
+  ULONG SurpriseRemovalOK:1;
+  ULONG WakeFromD0:1;
+  ULONG WakeFromD1:1;
+  ULONG WakeFromD2:1;
+  ULONG WakeFromD3:1;
+  ULONG HardwareDisabled:1;
+  ULONG NonDynamic:1;
+  ULONG WarmEjectSupported:1;
+  ULONG NoDisplayInUI:1;
+  ULONG Reserved:14;
+  ULONG Address;
+  ULONG UINumber;
+  DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
+  SYSTEM_POWER_STATE SystemWake;
+  DEVICE_POWER_STATE DeviceWake;
+  ULONG D1Latency;
+  ULONG D2Latency;
+  ULONG D3Latency;
+} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
+
+typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
+  USHORT Version;
+  USHORT Size;
+  GUID Event;
+  GUID InterfaceClassGuid;
+  PUNICODE_STRING SymbolicLinkName;
+} DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
+
+typedef struct _HWPROFILE_CHANGE_NOTIFICATION {
+  USHORT Version;
+  USHORT Size;
+  GUID Event;
+} HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION;
+
+#undef INTERFACE
+
+typedef struct _INTERFACE {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+} INTERFACE, *PINTERFACE;
+
+typedef struct _PLUGPLAY_NOTIFICATION_HEADER {
+  USHORT Version;
+  USHORT Size;
+  GUID Event;
+} PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
+
+typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
+
+/* PNP_DEVICE_STATE */
+
+#define PNP_DEVICE_DISABLED                      0x00000001
+#define PNP_DEVICE_DONT_DISPLAY_IN_UI            0x00000002
+#define PNP_DEVICE_FAILED                        0x00000004
+#define PNP_DEVICE_REMOVED                       0x00000008
+#define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
+#define PNP_DEVICE_NOT_DISABLEABLE               0x00000020
+
+typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION {
+  USHORT Version;
+  USHORT Size;
+  GUID Event;
+  struct _FILE_OBJECT *FileObject;
+  LONG NameBufferOffset;
+  UCHAR CustomDataBuffer[1];
+} TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION;
+
+typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
+  USHORT Version;
+  USHORT Size;
+  GUID Event;
+  struct _FILE_OBJECT *FileObject;
+} TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#include <devpropdef.h>
+#define PLUGPLAY_PROPERTY_PERSISTENT   0x00000001
+#endif
+
+#define PNP_REPLACE_NO_MAP             MAXLONGLONG
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_MAP_MEMORY)(
+  IN PHYSICAL_ADDRESS TargetPhysicalAddress,
+  IN PHYSICAL_ADDRESS SparePhysicalAddress,
+  IN OUT PLARGE_INTEGER NumberOfBytes,
+  OUT PVOID *TargetAddress,
+  OUT PVOID *SpareAddress);
+
+typedef struct _PNP_REPLACE_MEMORY_LIST {
+  ULONG AllocatedCount;
+  ULONG Count;
+  ULONGLONG TotalLength;
+  struct {
+    PHYSICAL_ADDRESS Address;
+    ULONGLONG Length;
+  } Ranges[ANYSIZE_ARRAY];
+} PNP_REPLACE_MEMORY_LIST, *PPNP_REPLACE_MEMORY_LIST;
+
+typedef struct _PNP_REPLACE_PROCESSOR_LIST {
+  PKAFFINITY Affinity;
+  ULONG GroupCount;
+  ULONG AllocatedCount;
+  ULONG Count;
+  ULONG ApicIds[ANYSIZE_ARRAY];
+} PNP_REPLACE_PROCESSOR_LIST, *PPNP_REPLACE_PROCESSOR_LIST;
+
+typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 {
+  KAFFINITY AffinityMask;
+  ULONG AllocatedCount;
+  ULONG Count;
+  ULONG ApicIds[ANYSIZE_ARRAY];
+} PNP_REPLACE_PROCESSOR_LIST_V1, *PPNP_REPLACE_PROCESSOR_LIST_V1;
+
+#define PNP_REPLACE_PARAMETERS_VERSION           2
+
+typedef struct _PNP_REPLACE_PARAMETERS {
+  ULONG Size;
+  ULONG Version;
+  ULONG64 Target;
+  ULONG64 Spare;
+  PPNP_REPLACE_PROCESSOR_LIST TargetProcessors;
+  PPNP_REPLACE_PROCESSOR_LIST SpareProcessors;
+  PPNP_REPLACE_MEMORY_LIST TargetMemory;
+  PPNP_REPLACE_MEMORY_LIST SpareMemory;
+  PREPLACE_MAP_MEMORY MapMemory;
+} PNP_REPLACE_PARAMETERS, *PPNP_REPLACE_PARAMETERS;
+
+typedef VOID
+(NTAPI *PREPLACE_UNLOAD)(
+  VOID);
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_BEGIN)(
+  IN PPNP_REPLACE_PARAMETERS Parameters,
+  OUT PVOID *Context);
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_END)(
+  IN PVOID Context);
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)(
+  IN PVOID Context,
+  IN PHYSICAL_ADDRESS PhysicalAddress,
+  IN LARGE_INTEGER ByteCount);
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_SET_PROCESSOR_ID)(
+  IN PVOID Context,
+  IN ULONG ApicId,
+  IN BOOLEAN Target);
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_SWAP)(
+  IN PVOID Context);
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)(
+  IN PVOID Context);
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)(
+  IN PVOID Context);
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_GET_MEMORY_DESTINATION)(
+  IN PVOID Context,
+  IN PHYSICAL_ADDRESS SourceAddress,
+  OUT PPHYSICAL_ADDRESS DestinationAddress);
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)(
+  IN PVOID Context,
+  IN BOOLEAN Enable);
+
+#define PNP_REPLACE_DRIVER_INTERFACE_VERSION      1
+#define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
+             FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
+
+#define PNP_REPLACE_MEMORY_SUPPORTED             0x0001
+#define PNP_REPLACE_PROCESSOR_SUPPORTED          0x0002
+#define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING    0x0004
+#define PNP_REPLACE_HARDWARE_PAGE_COPY           0x0008
+#define PNP_REPLACE_HARDWARE_QUIESCE             0x0010
+
+typedef struct _PNP_REPLACE_DRIVER_INTERFACE {
+  ULONG Size;
+  ULONG Version;
+  ULONG Flags;
+  PREPLACE_UNLOAD Unload;
+  PREPLACE_BEGIN BeginReplace;
+  PREPLACE_END EndReplace;
+  PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory;
+  PREPLACE_SET_PROCESSOR_ID SetProcessorId;
+  PREPLACE_SWAP Swap;
+  PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror;
+  PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory;
+  PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination;
+  PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce;
+} PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE;
+
+typedef NTSTATUS
+(NTAPI *PREPLACE_DRIVER_INIT)(
+  IN OUT PPNP_REPLACE_DRIVER_INTERFACE Interface,
+  IN PVOID Unused);
+
+typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
+  DeviceUsageTypeUndefined,
+  DeviceUsageTypePaging,
+  DeviceUsageTypeHibernation,
+  DeviceUsageTypeDumpFile
+} DEVICE_USAGE_NOTIFICATION_TYPE;
+
+typedef struct _POWER_SEQUENCE {
+  ULONG SequenceD1;
+  ULONG SequenceD2;
+  ULONG SequenceD3;
+} POWER_SEQUENCE, *PPOWER_SEQUENCE;
+
+typedef enum {
+  DevicePropertyDeviceDescription = 0x0,
+  DevicePropertyHardwareID = 0x1,
+  DevicePropertyCompatibleIDs = 0x2,
+  DevicePropertyBootConfiguration = 0x3,
+  DevicePropertyBootConfigurationTranslated = 0x4,
+  DevicePropertyClassName = 0x5,
+  DevicePropertyClassGuid = 0x6,
+  DevicePropertyDriverKeyName = 0x7,
+  DevicePropertyManufacturer = 0x8,
+  DevicePropertyFriendlyName = 0x9,
+  DevicePropertyLocationInformation = 0xa,
+  DevicePropertyPhysicalDeviceObjectName = 0xb,
+  DevicePropertyBusTypeGuid = 0xc,
+  DevicePropertyLegacyBusType = 0xd,
+  DevicePropertyBusNumber = 0xe,
+  DevicePropertyEnumeratorName = 0xf,
+  DevicePropertyAddress = 0x10,
+  DevicePropertyUINumber = 0x11,
+  DevicePropertyInstallState = 0x12,
+  DevicePropertyRemovalPolicy = 0x13,
+  DevicePropertyResourceRequirements = 0x14,
+  DevicePropertyAllocatedResources = 0x15,
+  DevicePropertyContainerID = 0x16
+} DEVICE_REGISTRY_PROPERTY;
+
+typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
+  EventCategoryReserved,
+  EventCategoryHardwareProfileChange,
+  EventCategoryDeviceInterfaceChange,
+  EventCategoryTargetDeviceChange
+} IO_NOTIFICATION_EVENT_CATEGORY;
+
+typedef enum _IO_PRIORITY_HINT {
+  IoPriorityVeryLow = 0,
+  IoPriorityLow,
+  IoPriorityNormal,
+  IoPriorityHigh,
+  IoPriorityCritical,
+  MaxIoPriorityTypes
+} IO_PRIORITY_HINT;
+
+#define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES    0x00000001
+
+typedef NTSTATUS
+(NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)(
+  IN PVOID NotificationStructure,
+  IN PVOID Context);
+typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE;
+
+typedef VOID
+(NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)(
+  IN PVOID Context);
+typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK;
+
+typedef enum _FILE_INFORMATION_CLASS {
+  FileDirectoryInformation = 1,
+  FileFullDirectoryInformation,
+  FileBothDirectoryInformation,
+  FileBasicInformation,
+  FileStandardInformation,
+  FileInternalInformation,
+  FileEaInformation,
+  FileAccessInformation,
+  FileNameInformation,
+  FileRenameInformation,
+  FileLinkInformation,
+  FileNamesInformation,
+  FileDispositionInformation,
+  FilePositionInformation,
+  FileFullEaInformation,
+  FileModeInformation,
+  FileAlignmentInformation,
+  FileAllInformation,
+  FileAllocationInformation,
+  FileEndOfFileInformation,
+  FileAlternateNameInformation,
+  FileStreamInformation,
+  FilePipeInformation,
+  FilePipeLocalInformation,
+  FilePipeRemoteInformation,
+  FileMailslotQueryInformation,
+  FileMailslotSetInformation,
+  FileCompressionInformation,
+  FileObjectIdInformation,
+  FileCompletionInformation,
+  FileMoveClusterInformation,
+  FileQuotaInformation,
+  FileReparsePointInformation,
+  FileNetworkOpenInformation,
+  FileAttributeTagInformation,
+  FileTrackingInformation,
+  FileIdBothDirectoryInformation,
+  FileIdFullDirectoryInformation,
+  FileValidDataLengthInformation,
+  FileShortNameInformation,
+  FileIoCompletionNotificationInformation,
+  FileIoStatusBlockRangeInformation,
+  FileIoPriorityHintInformation,
+  FileSfioReserveInformation,
+  FileSfioVolumeInformation,
+  FileHardLinkInformation,
+  FileProcessIdsUsingFileInformation,
+  FileNormalizedNameInformation,
+  FileNetworkPhysicalNameInformation,
+  FileIdGlobalTxDirectoryInformation,
+  FileIsRemoteDeviceInformation,
+  FileAttributeCacheInformation,
+  FileNumaNodeInformation,
+  FileStandardLinkInformation,
+  FileRemoteProtocolInformation,
+  FileMaximumInformation
+} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
+
+typedef struct _FILE_POSITION_INFORMATION {
+  LARGE_INTEGER CurrentByteOffset;
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
+
+typedef struct _FILE_BASIC_INFORMATION {
+  LARGE_INTEGER CreationTime;
+  LARGE_INTEGER LastAccessTime;
+  LARGE_INTEGER LastWriteTime;
+  LARGE_INTEGER ChangeTime;
+  ULONG FileAttributes;
+} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
+
+typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION {
+  IO_PRIORITY_HINT PriorityHint;
+} FILE_IO_PRIORITY_HINT_INFORMATION, *PFILE_IO_PRIORITY_HINT_INFORMATION;
+
+typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION {
+  ULONG Flags;
+} FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
+
+typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION {
+  PUCHAR IoStatusBlockRange;
+  ULONG Length;
+} FILE_IOSTATUSBLOCK_RANGE_INFORMATION, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION;
+
+typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION {
+  BOOLEAN IsRemote;
+} FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION;
+
+typedef struct _FILE_NUMA_NODE_INFORMATION {
+  USHORT NodeNumber;
+} FILE_NUMA_NODE_INFORMATION, *PFILE_NUMA_NODE_INFORMATION;
+
+typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION {
+  ULONG NumberOfProcessIdsInList;
+  ULONG_PTR ProcessIdList[1];
+} FILE_PROCESS_IDS_USING_FILE_INFORMATION, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION;
+
+typedef struct _FILE_STANDARD_INFORMATION {
+  LARGE_INTEGER AllocationSize;
+  LARGE_INTEGER EndOfFile;
+  ULONG NumberOfLinks;
+  BOOLEAN DeletePending;
+  BOOLEAN Directory;
+} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
+
+typedef struct _FILE_NETWORK_OPEN_INFORMATION {
+  LARGE_INTEGER CreationTime;
+  LARGE_INTEGER LastAccessTime;
+  LARGE_INTEGER LastWriteTime;
+  LARGE_INTEGER ChangeTime;
+  LARGE_INTEGER AllocationSize;
+  LARGE_INTEGER EndOfFile;
+  ULONG FileAttributes;
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
+
+typedef enum _FSINFOCLASS {
+  FileFsVolumeInformation = 1,
+  FileFsLabelInformation,
+  FileFsSizeInformation,
+  FileFsDeviceInformation,
+  FileFsAttributeInformation,
+  FileFsControlInformation,
+  FileFsFullSizeInformation,
+  FileFsObjectIdInformation,
+  FileFsDriverPathInformation,
+  FileFsVolumeFlagsInformation,
+  FileFsMaximumInformation
+} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
+
+typedef struct _FILE_FS_DEVICE_INFORMATION {
+  DEVICE_TYPE DeviceType;
+  ULONG Characteristics;
+} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
+
+typedef struct _FILE_FULL_EA_INFORMATION {
+  ULONG NextEntryOffset;
+  UCHAR Flags;
+  UCHAR EaNameLength;
+  USHORT EaValueLength;
+  CHAR EaName[1];
+} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
+
+typedef struct _FILE_SFIO_RESERVE_INFORMATION {
+  ULONG RequestsPerPeriod;
+  ULONG Period;
+  BOOLEAN RetryFailures;
+  BOOLEAN Discardable;
+  ULONG RequestSize;
+  ULONG NumOutstandingRequests;
+} FILE_SFIO_RESERVE_INFORMATION, *PFILE_SFIO_RESERVE_INFORMATION;
+
+typedef struct _FILE_SFIO_VOLUME_INFORMATION {
+  ULONG MaximumRequestsPerPeriod;
+  ULONG MinimumPeriod;
+  ULONG MinimumTransferSize;
+} FILE_SFIO_VOLUME_INFORMATION, *PFILE_SFIO_VOLUME_INFORMATION;
+
+#define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS     0x1
+#define FILE_SKIP_SET_EVENT_ON_HANDLE            0x2
+#define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO      0x4
+
+#define FM_LOCK_BIT             (0x1)
+#define FM_LOCK_BIT_V           (0x0)
+#define FM_LOCK_WAITER_WOKEN    (0x2)
+#define FM_LOCK_WAITER_INC      (0x4)
+
+typedef BOOLEAN
+(NTAPI FAST_IO_CHECK_IF_POSSIBLE)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN ULONG Length,
+  IN BOOLEAN Wait,
+  IN ULONG LockKey,
+  IN BOOLEAN CheckForReadOperation,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_READ)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN ULONG Length,
+  IN BOOLEAN Wait,
+  IN ULONG LockKey,
+  OUT PVOID Buffer,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_READ *PFAST_IO_READ;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_WRITE)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN ULONG Length,
+  IN BOOLEAN Wait,
+  IN ULONG LockKey,
+  IN PVOID Buffer,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_WRITE *PFAST_IO_WRITE;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_QUERY_BASIC_INFO)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN BOOLEAN Wait,
+  OUT PFILE_BASIC_INFORMATION Buffer,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_QUERY_STANDARD_INFO)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN BOOLEAN Wait,
+  OUT PFILE_STANDARD_INFORMATION Buffer,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_LOCK)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN PLARGE_INTEGER Length,
+  PEPROCESS ProcessId,
+  ULONG Key,
+  BOOLEAN FailImmediately,
+  BOOLEAN ExclusiveLock,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_LOCK *PFAST_IO_LOCK;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_UNLOCK_SINGLE)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN PLARGE_INTEGER Length,
+  PEPROCESS ProcessId,
+  ULONG Key,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_UNLOCK_ALL)(
+  IN struct _FILE_OBJECT *FileObject,
+  PEPROCESS ProcessId,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)(
+  IN struct _FILE_OBJECT *FileObject,
+  PVOID ProcessId,
+  ULONG Key,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_DEVICE_CONTROL)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN BOOLEAN Wait,
+  IN PVOID InputBuffer OPTIONAL,
+  IN ULONG InputBufferLength,
+  OUT PVOID OutputBuffer OPTIONAL,
+  IN ULONG OutputBufferLength,
+  IN ULONG IoControlCode,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL;
+
+typedef VOID
+(NTAPI FAST_IO_ACQUIRE_FILE)(
+  IN struct _FILE_OBJECT *FileObject);
+typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE;
+
+typedef VOID
+(NTAPI FAST_IO_RELEASE_FILE)(
+  IN struct _FILE_OBJECT *FileObject);
+typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE;
+
+typedef VOID
+(NTAPI FAST_IO_DETACH_DEVICE)(
+  IN struct _DEVICE_OBJECT *SourceDevice,
+  IN struct _DEVICE_OBJECT *TargetDevice);
+typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN BOOLEAN Wait,
+  OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer,
+  OUT struct _IO_STATUS_BLOCK *IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO;
+
+typedef NTSTATUS
+(NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER EndingOffset,
+  OUT struct _ERESOURCE **ResourceToRelease,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_MDL_READ)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN ULONG Length,
+  IN ULONG LockKey,
+  OUT PMDL *MdlChain,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_MDL_READ_COMPLETE)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PMDL MdlChain,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_PREPARE_MDL_WRITE)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN ULONG Length,
+  IN ULONG LockKey,
+  OUT PMDL *MdlChain,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_MDL_WRITE_COMPLETE)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN PMDL MdlChain,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_READ_COMPRESSED)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN ULONG Length,
+  IN ULONG LockKey,
+  OUT PVOID Buffer,
+  OUT PMDL *MdlChain,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
+  IN ULONG CompressedDataInfoLength,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_WRITE_COMPRESSED)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN ULONG Length,
+  IN ULONG LockKey,
+  IN PVOID Buffer,
+  OUT PMDL *MdlChain,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
+  IN ULONG CompressedDataInfoLength,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PMDL MdlChain,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN PLARGE_INTEGER FileOffset,
+  IN PMDL MdlChain,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED;
+
+typedef BOOLEAN
+(NTAPI FAST_IO_QUERY_OPEN)(
+  IN struct _IRP *Irp,
+  OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN;
+
+typedef NTSTATUS
+(NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN struct _ERESOURCE *ResourceToRelease,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE;
+
+typedef NTSTATUS
+(NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH;
+
+typedef NTSTATUS
+(NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)(
+  IN struct _FILE_OBJECT *FileObject,
+  IN struct _DEVICE_OBJECT *DeviceObject);
+typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH;
+
+typedef struct _FAST_IO_DISPATCH {
+  ULONG SizeOfFastIoDispatch;
+  PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible;
+  PFAST_IO_READ FastIoRead;
+  PFAST_IO_WRITE FastIoWrite;
+  PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo;
+  PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo;
+  PFAST_IO_LOCK FastIoLock;
+  PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle;
+  PFAST_IO_UNLOCK_ALL FastIoUnlockAll;
+  PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey;
+  PFAST_IO_DEVICE_CONTROL FastIoDeviceControl;
+  PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection;
+  PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection;
+  PFAST_IO_DETACH_DEVICE FastIoDetachDevice;
+  PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo;
+  PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite;
+  PFAST_IO_MDL_READ MdlRead;
+  PFAST_IO_MDL_READ_COMPLETE MdlReadComplete;
+  PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite;
+  PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete;
+  PFAST_IO_READ_COMPRESSED FastIoReadCompressed;
+  PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed;
+  PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed;
+  PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed;
+  PFAST_IO_QUERY_OPEN FastIoQueryOpen;
+  PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite;
+  PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush;
+  PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush;
+} FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
+
+typedef struct _SECTION_OBJECT_POINTERS {
+  PVOID DataSectionObject;
+  PVOID SharedCacheMap;
+  PVOID ImageSectionObject;
+} SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
+
+typedef struct _IO_COMPLETION_CONTEXT {
+  PVOID Port;
+  PVOID Key;
+} IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
+
+/* FILE_OBJECT.Flags */
+#define FO_FILE_OPEN                 0x00000001
+#define FO_SYNCHRONOUS_IO            0x00000002
+#define FO_ALERTABLE_IO              0x00000004
+#define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
+#define FO_WRITE_THROUGH             0x00000010
+#define FO_SEQUENTIAL_ONLY           0x00000020
+#define FO_CACHE_SUPPORTED           0x00000040
+#define FO_NAMED_PIPE                0x00000080
+#define FO_STREAM_FILE               0x00000100
+#define FO_MAILSLOT                  0x00000200
+#define FO_GENERATE_AUDIT_ON_CLOSE   0x00000400
+#define FO_QUEUE_IRP_TO_THREAD       0x00000400
+#define FO_DIRECT_DEVICE_OPEN        0x00000800
+#define FO_FILE_MODIFIED             0x00001000
+#define FO_FILE_SIZE_CHANGED         0x00002000
+#define FO_CLEANUP_COMPLETE          0x00004000
+#define FO_TEMPORARY_FILE            0x00008000
+#define FO_DELETE_ON_CLOSE           0x00010000
+#define FO_OPENED_CASE_SENSITIVE     0x00020000
+#define FO_HANDLE_CREATED            0x00040000
+#define FO_FILE_FAST_IO_READ         0x00080000
+#define FO_RANDOM_ACCESS             0x00100000
+#define FO_FILE_OPEN_CANCELLED       0x00200000
+#define FO_VOLUME_OPEN               0x00400000
+#define FO_REMOTE_ORIGIN             0x01000000
+#define FO_DISALLOW_EXCLUSIVE        0x02000000
+#define FO_SKIP_COMPLETION_PORT      0x02000000
+#define FO_SKIP_SET_EVENT            0x04000000
+#define FO_SKIP_SET_FAST_IO          0x08000000
+#define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
+
+/* VPB.Flags */
+#define VPB_MOUNTED                       0x0001
+#define VPB_LOCKED                        0x0002
+#define VPB_PERSISTENT                    0x0004
+#define VPB_REMOVE_PENDING                0x0008
+#define VPB_RAW_MOUNT                     0x0010
+#define VPB_DIRECT_WRITES_ALLOWED         0x0020
+
+/* IRP.Flags */
+
+#define SL_FORCE_ACCESS_CHECK             0x01
+#define SL_OPEN_PAGING_FILE               0x02
+#define SL_OPEN_TARGET_DIRECTORY          0x04
+#define SL_STOP_ON_SYMLINK                0x08
+#define SL_CASE_SENSITIVE                 0x80
+
+#define SL_KEY_SPECIFIED                  0x01
+#define SL_OVERRIDE_VERIFY_VOLUME         0x02
+#define SL_WRITE_THROUGH                  0x04
+#define SL_FT_SEQUENTIAL_WRITE            0x08
+#define SL_FORCE_DIRECT_WRITE             0x10
+#define SL_REALTIME_STREAM                0x20
+
+#define SL_READ_ACCESS_GRANTED            0x01
+#define SL_WRITE_ACCESS_GRANTED           0x04
+
+#define SL_FAIL_IMMEDIATELY               0x01
+#define SL_EXCLUSIVE_LOCK                 0x02
+
+#define SL_RESTART_SCAN                   0x01
+#define SL_RETURN_SINGLE_ENTRY            0x02
+#define SL_INDEX_SPECIFIED                0x04
+
+#define SL_WATCH_TREE                     0x01
+
+#define SL_ALLOW_RAW_MOUNT                0x01
+
+#define CTL_CODE(DeviceType, Function, Method, Access) \
+  (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
+
+#define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
+
+#define METHOD_FROM_CTL_CODE(ctrlCode)          ((ULONG)(ctrlCode & 3))
+
+#define IRP_NOCACHE                     0x00000001
+#define IRP_PAGING_IO                   0x00000002
+#define IRP_MOUNT_COMPLETION            0x00000002
+#define IRP_SYNCHRONOUS_API             0x00000004
+#define IRP_ASSOCIATED_IRP              0x00000008
+#define IRP_BUFFERED_IO                 0x00000010
+#define IRP_DEALLOCATE_BUFFER           0x00000020
+#define IRP_INPUT_OPERATION             0x00000040
+#define IRP_SYNCHRONOUS_PAGING_IO       0x00000040
+#define IRP_CREATE_OPERATION            0x00000080
+#define IRP_READ_OPERATION              0x00000100
+#define IRP_WRITE_OPERATION             0x00000200
+#define IRP_CLOSE_OPERATION             0x00000400
+#define IRP_DEFER_IO_COMPLETION         0x00000800
+#define IRP_OB_QUERY_NAME               0x00001000
+#define IRP_HOLD_DEVICE_QUEUE           0x00002000
+
+#define IRP_QUOTA_CHARGED                 0x01
+#define IRP_ALLOCATED_MUST_SUCCEED        0x02
+#define IRP_ALLOCATED_FIXED_SIZE          0x04
+#define IRP_LOOKASIDE_ALLOCATION          0x08
+
+/*
+** IRP function codes
+*/
+
+#define IRP_MJ_CREATE                     0x00
+#define IRP_MJ_CREATE_NAMED_PIPE          0x01
+#define IRP_MJ_CLOSE                      0x02
+#define IRP_MJ_READ                       0x03
+#define IRP_MJ_WRITE                      0x04
+#define IRP_MJ_QUERY_INFORMATION          0x05
+#define IRP_MJ_SET_INFORMATION            0x06
+#define IRP_MJ_QUERY_EA                   0x07
+#define IRP_MJ_SET_EA                     0x08
+#define IRP_MJ_FLUSH_BUFFERS              0x09
+#define IRP_MJ_QUERY_VOLUME_INFORMATION   0x0a
+#define IRP_MJ_SET_VOLUME_INFORMATION     0x0b
+#define IRP_MJ_DIRECTORY_CONTROL          0x0c
+#define IRP_MJ_FILE_SYSTEM_CONTROL        0x0d
+#define IRP_MJ_DEVICE_CONTROL             0x0e
+#define IRP_MJ_INTERNAL_DEVICE_CONTROL    0x0f
+#define IRP_MJ_SCSI                       0x0f
+#define IRP_MJ_SHUTDOWN                   0x10
+#define IRP_MJ_LOCK_CONTROL               0x11
+#define IRP_MJ_CLEANUP                    0x12
+#define IRP_MJ_CREATE_MAILSLOT            0x13
+#define IRP_MJ_QUERY_SECURITY             0x14
+#define IRP_MJ_SET_SECURITY               0x15
+#define IRP_MJ_POWER                      0x16
+#define IRP_MJ_SYSTEM_CONTROL             0x17
+#define IRP_MJ_DEVICE_CHANGE              0x18
+#define IRP_MJ_QUERY_QUOTA                0x19
+#define IRP_MJ_SET_QUOTA                  0x1a
+#define IRP_MJ_PNP                        0x1b
+#define IRP_MJ_PNP_POWER                  0x1b
+#define IRP_MJ_MAXIMUM_FUNCTION           0x1b
+
+#define IRP_MN_SCSI_CLASS                 0x01
+
+#define IRP_MN_START_DEVICE               0x00
+#define IRP_MN_QUERY_REMOVE_DEVICE        0x01
+#define IRP_MN_REMOVE_DEVICE              0x02
+#define IRP_MN_CANCEL_REMOVE_DEVICE       0x03
+#define IRP_MN_STOP_DEVICE                0x04
+#define IRP_MN_QUERY_STOP_DEVICE          0x05
+#define IRP_MN_CANCEL_STOP_DEVICE         0x06
+
+#define IRP_MN_QUERY_DEVICE_RELATIONS       0x07
+#define IRP_MN_QUERY_INTERFACE              0x08
+#define IRP_MN_QUERY_CAPABILITIES           0x09
+#define IRP_MN_QUERY_RESOURCES              0x0A
+#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS  0x0B
+#define IRP_MN_QUERY_DEVICE_TEXT            0x0C
+#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
+
+#define IRP_MN_READ_CONFIG                  0x0F
+#define IRP_MN_WRITE_CONFIG                 0x10
+#define IRP_MN_EJECT                        0x11
+#define IRP_MN_SET_LOCK                     0x12
+#define IRP_MN_QUERY_ID                     0x13
+#define IRP_MN_QUERY_PNP_DEVICE_STATE       0x14
+#define IRP_MN_QUERY_BUS_INFORMATION        0x15
+#define IRP_MN_DEVICE_USAGE_NOTIFICATION    0x16
+#define IRP_MN_SURPRISE_REMOVAL             0x17
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define IRP_MN_DEVICE_ENUMERATED            0x19
+#endif
+
+#define IRP_MN_WAIT_WAKE                  0x00
+#define IRP_MN_POWER_SEQUENCE             0x01
+#define IRP_MN_SET_POWER                  0x02
+#define IRP_MN_QUERY_POWER                0x03
+
+#define IRP_MN_QUERY_ALL_DATA             0x00
+#define IRP_MN_QUERY_SINGLE_INSTANCE      0x01
+#define IRP_MN_CHANGE_SINGLE_INSTANCE     0x02
+#define IRP_MN_CHANGE_SINGLE_ITEM         0x03
+#define IRP_MN_ENABLE_EVENTS              0x04
+#define IRP_MN_DISABLE_EVENTS             0x05
+#define IRP_MN_ENABLE_COLLECTION          0x06
+#define IRP_MN_DISABLE_COLLECTION         0x07
+#define IRP_MN_REGINFO                    0x08
+#define IRP_MN_EXECUTE_METHOD             0x09
+
+#define IRP_MN_REGINFO_EX                 0x0b
+
+typedef struct _FILE_OBJECT {
+  CSHORT Type;
+  CSHORT Size;
+  PDEVICE_OBJECT DeviceObject;
+  PVPB Vpb;
+  PVOID FsContext;
+  PVOID FsContext2;
+  PSECTION_OBJECT_POINTERS SectionObjectPointer;
+  PVOID PrivateCacheMap;
+  NTSTATUS FinalStatus;
+  struct _FILE_OBJECT *RelatedFileObject;
+  BOOLEAN LockOperation;
+  BOOLEAN DeletePending;
+  BOOLEAN ReadAccess;
+  BOOLEAN WriteAccess;
+  BOOLEAN DeleteAccess;
+  BOOLEAN SharedRead;
+  BOOLEAN SharedWrite;
+  BOOLEAN SharedDelete;
+  ULONG Flags;
+  UNICODE_STRING FileName;
+  LARGE_INTEGER CurrentByteOffset;
+  volatile ULONG Waiters;
+  volatile ULONG Busy;
+  PVOID LastLock;
+  KEVENT Lock;
+  KEVENT Event;
+  volatile PIO_COMPLETION_CONTEXT CompletionContext;
+  KSPIN_LOCK IrpListLock;
+  LIST_ENTRY IrpList;
+  volatile PVOID FileObjectExtension;
+} FILE_OBJECT, *PFILE_OBJECT;
+
+typedef struct _IO_ERROR_LOG_PACKET {
+  UCHAR MajorFunctionCode;
+  UCHAR RetryCount;
+  USHORT DumpDataSize;
+  USHORT NumberOfStrings;
+  USHORT StringOffset;
+  USHORT EventCategory;
+  NTSTATUS ErrorCode;
+  ULONG UniqueErrorValue;
+  NTSTATUS FinalStatus;
+  ULONG SequenceNumber;
+  ULONG IoControlCode;
+  LARGE_INTEGER DeviceOffset;
+  ULONG DumpData[1];
+} IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
+
+typedef struct _IO_ERROR_LOG_MESSAGE {
+  USHORT Type;
+  USHORT Size;
+  USHORT DriverNameLength;
+  LARGE_INTEGER TimeStamp;
+  ULONG DriverNameOffset;
+  IO_ERROR_LOG_PACKET EntryData;
+} IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
+
+#define ERROR_LOG_LIMIT_SIZE               240
+#define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
+                                            sizeof(IO_ERROR_LOG_PACKET) + \
+                                            (sizeof(WCHAR) * 40))
+#define ERROR_LOG_MESSAGE_LIMIT_SIZE                                          \
+    (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
+#define IO_ERROR_LOG_MESSAGE_LENGTH                                           \
+    ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ?           \
+        ERROR_LOG_MESSAGE_LIMIT_SIZE :                                        \
+        PORT_MAXIMUM_MESSAGE_LENGTH)
+#define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH -                 \
+                                IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
+
+#ifdef _WIN64
+#define PORT_MAXIMUM_MESSAGE_LENGTH    512
+#else
+#define PORT_MAXIMUM_MESSAGE_LENGTH    256
+#endif
+
+typedef enum _DMA_WIDTH {
+  Width8Bits,
+  Width16Bits,
+  Width32Bits,
+  MaximumDmaWidth
+} DMA_WIDTH, *PDMA_WIDTH;
+
+typedef enum _DMA_SPEED {
+  Compatible,
+  TypeA,
+  TypeB,
+  TypeC,
+  TypeF,
+  MaximumDmaSpeed
+} DMA_SPEED, *PDMA_SPEED;
+
+/* DEVICE_DESCRIPTION.Version */
+
+#define DEVICE_DESCRIPTION_VERSION        0x0000
+#define DEVICE_DESCRIPTION_VERSION1       0x0001
+#define DEVICE_DESCRIPTION_VERSION2       0x0002
+
+typedef struct _DEVICE_DESCRIPTION {
+  ULONG Version;
+  BOOLEAN Master;
+  BOOLEAN ScatterGather;
+  BOOLEAN DemandMode;
+  BOOLEAN AutoInitialize;
+  BOOLEAN Dma32BitAddresses;
+  BOOLEAN IgnoreCount;
+  BOOLEAN Reserved1;
+  BOOLEAN Dma64BitAddresses;
+  ULONG BusNumber;
+  ULONG DmaChannel;
+  INTERFACE_TYPE InterfaceType;
+  DMA_WIDTH DmaWidth;
+  DMA_SPEED DmaSpeed;
+  ULONG MaximumLength;
+  ULONG DmaPort;
+} DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
+
+typedef enum _DEVICE_RELATION_TYPE {
+  BusRelations,
+  EjectionRelations,
+  PowerRelations,
+  RemovalRelations,
+  TargetDeviceRelation,
+  SingleBusRelations,
+  TransportRelations
+} DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
+
+typedef struct _DEVICE_RELATIONS {
+  ULONG Count;
+  PDEVICE_OBJECT Objects[1];
+} DEVICE_RELATIONS, *PDEVICE_RELATIONS;
+
+typedef struct _DEVOBJ_EXTENSION {
+  CSHORT Type;
+  USHORT Size;
+  PDEVICE_OBJECT DeviceObject;
+} DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
+
+typedef struct _SCATTER_GATHER_ELEMENT {
+  PHYSICAL_ADDRESS Address;
+  ULONG Length;
+  ULONG_PTR Reserved;
+} SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
+
+#if defined(_MSC_EXTENSIONS)
+
+#if _MSC_VER >= 1200
+#pragma warning(push)
+#endif
+#pragma warning(disable:4200)
+typedef struct _SCATTER_GATHER_LIST {
+  ULONG NumberOfElements;
+  ULONG_PTR Reserved;
+  SCATTER_GATHER_ELEMENT Elements[1];
+} SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
+
+#if _MSC_VER >= 1200
+#pragma warning(pop)
+#else
+#pragma warning(default:4200)
+#endif
+
+#else
+
+struct _SCATTER_GATHER_LIST;
+typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
+
+#endif
+
+typedef NTSTATUS
+(NTAPI DRIVER_ADD_DEVICE)(
+  IN struct _DRIVER_OBJECT *DriverObject,
+  IN struct _DEVICE_OBJECT *PhysicalDeviceObject);
+typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE;
+
+typedef struct _DRIVER_EXTENSION {
+  struct _DRIVER_OBJECT *DriverObject;
+  PDRIVER_ADD_DEVICE AddDevice;
+  ULONG Count;
+  UNICODE_STRING ServiceKeyName;
+} DRIVER_EXTENSION, *PDRIVER_EXTENSION;
+
+#define DRVO_UNLOAD_INVOKED               0x00000001
+#define DRVO_LEGACY_DRIVER                0x00000002
+#define DRVO_BUILTIN_DRIVER               0x00000004
+
+typedef NTSTATUS
+(NTAPI DRIVER_INITIALIZE)(
+  IN struct _DRIVER_OBJECT *DriverObject,
+  IN PUNICODE_STRING RegistryPath);
+typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE;
+
+typedef VOID
+(NTAPI DRIVER_STARTIO)(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN struct _IRP *Irp);
+typedef DRIVER_STARTIO *PDRIVER_STARTIO;
+
+typedef VOID
+(NTAPI DRIVER_UNLOAD)(
+  IN struct _DRIVER_OBJECT *DriverObject);
+typedef DRIVER_UNLOAD *PDRIVER_UNLOAD;
+
+typedef NTSTATUS
+(NTAPI DRIVER_DISPATCH)(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN struct _IRP *Irp);
+typedef DRIVER_DISPATCH *PDRIVER_DISPATCH;
+
+typedef struct _DRIVER_OBJECT {
+  CSHORT Type;
+  CSHORT Size;
+  PDEVICE_OBJECT DeviceObject;
+  ULONG Flags;
+  PVOID DriverStart;
+  ULONG DriverSize;
+  PVOID DriverSection;
+  PDRIVER_EXTENSION DriverExtension;
+  UNICODE_STRING DriverName;
+  PUNICODE_STRING HardwareDatabase;
+  struct _FAST_IO_DISPATCH *FastIoDispatch;
+  PDRIVER_INITIALIZE DriverInit;
+  PDRIVER_STARTIO DriverStartIo;
+  PDRIVER_UNLOAD DriverUnload;
+  PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
+} DRIVER_OBJECT, *PDRIVER_OBJECT;
+
+typedef struct _DMA_ADAPTER {
+  USHORT Version;
+  USHORT Size;
+  struct _DMA_OPERATIONS* DmaOperations;
+} DMA_ADAPTER, *PDMA_ADAPTER;
+
+typedef VOID
+(NTAPI *PPUT_DMA_ADAPTER)(
+  IN PDMA_ADAPTER DmaAdapter);
+
+typedef PVOID
+(NTAPI *PALLOCATE_COMMON_BUFFER)(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN ULONG Length,
+  OUT PPHYSICAL_ADDRESS LogicalAddress,
+  IN BOOLEAN CacheEnabled);
+
+typedef VOID
+(NTAPI *PFREE_COMMON_BUFFER)(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN ULONG Length,
+  IN PHYSICAL_ADDRESS LogicalAddress,
+  IN PVOID VirtualAddress,
+  IN BOOLEAN CacheEnabled);
+
+typedef NTSTATUS
+(NTAPI *PALLOCATE_ADAPTER_CHANNEL)(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG NumberOfMapRegisters,
+  IN PDRIVER_CONTROL ExecutionRoutine,
+  IN PVOID Context);
+
+typedef BOOLEAN
+(NTAPI *PFLUSH_ADAPTER_BUFFERS)(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PMDL Mdl,
+  IN PVOID MapRegisterBase,
+  IN PVOID CurrentVa,
+  IN ULONG Length,
+  IN BOOLEAN WriteToDevice);
+
+typedef VOID
+(NTAPI *PFREE_ADAPTER_CHANNEL)(
+  IN PDMA_ADAPTER DmaAdapter);
+
+typedef VOID
+(NTAPI *PFREE_MAP_REGISTERS)(
+  IN PDMA_ADAPTER DmaAdapter,
+  PVOID MapRegisterBase,
+  ULONG NumberOfMapRegisters);
+
+typedef PHYSICAL_ADDRESS
+(NTAPI *PMAP_TRANSFER)(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PMDL Mdl,
+  IN PVOID MapRegisterBase,
+  IN PVOID CurrentVa,
+  IN OUT PULONG Length,
+  IN BOOLEAN WriteToDevice);
+
+typedef ULONG
+(NTAPI *PGET_DMA_ALIGNMENT)(
+  IN PDMA_ADAPTER DmaAdapter);
+
+typedef ULONG
+(NTAPI *PREAD_DMA_COUNTER)(
+  IN PDMA_ADAPTER DmaAdapter);
+
+typedef VOID
+(NTAPI DRIVER_LIST_CONTROL)(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN struct _IRP *Irp,
+  IN struct _SCATTER_GATHER_LIST *ScatterGather,
+  IN PVOID Context);
+typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL;
+
+typedef NTSTATUS
+(NTAPI *PGET_SCATTER_GATHER_LIST)(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PMDL Mdl,
+  IN PVOID CurrentVa,
+  IN ULONG Length,
+  IN PDRIVER_LIST_CONTROL ExecutionRoutine,
+  IN PVOID Context,
+  IN BOOLEAN WriteToDevice);
+
+typedef VOID
+(NTAPI *PPUT_SCATTER_GATHER_LIST)(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PSCATTER_GATHER_LIST ScatterGather,
+  IN BOOLEAN WriteToDevice);
+
+typedef NTSTATUS
+(NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PMDL Mdl OPTIONAL,
+  IN PVOID CurrentVa,
+  IN ULONG Length,
+  OUT PULONG ScatterGatherListSize,
+  OUT PULONG pNumberOfMapRegisters OPTIONAL);
+
+typedef NTSTATUS
+(NTAPI *PBUILD_SCATTER_GATHER_LIST)(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PMDL Mdl,
+  IN PVOID CurrentVa,
+  IN ULONG Length,
+  IN PDRIVER_LIST_CONTROL ExecutionRoutine,
+  IN PVOID Context,
+  IN BOOLEAN WriteToDevice,
+  IN PVOID ScatterGatherBuffer,
+  IN ULONG ScatterGatherLength);
+
+typedef NTSTATUS
+(NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PSCATTER_GATHER_LIST ScatterGather,
+  IN PMDL OriginalMdl,
+  OUT PMDL *TargetMdl);
+
+typedef struct _DMA_OPERATIONS {
+  ULONG Size;
+  PPUT_DMA_ADAPTER PutDmaAdapter;
+  PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
+  PFREE_COMMON_BUFFER FreeCommonBuffer;
+  PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
+  PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
+  PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
+  PFREE_MAP_REGISTERS FreeMapRegisters;
+  PMAP_TRANSFER MapTransfer;
+  PGET_DMA_ALIGNMENT GetDmaAlignment;
+  PREAD_DMA_COUNTER ReadDmaCounter;
+  PGET_SCATTER_GATHER_LIST GetScatterGatherList;
+  PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
+  PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList;
+  PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
+  PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
+} DMA_OPERATIONS, *PDMA_OPERATIONS;
+
+typedef struct _IO_RESOURCE_DESCRIPTOR {
+  UCHAR Option;
+  UCHAR Type;
+  UCHAR ShareDisposition;
+  UCHAR Spare1;
+  USHORT Flags;
+  USHORT Spare2;
+  union {
+    struct {
+      ULONG Length;
+      ULONG Alignment;
+      PHYSICAL_ADDRESS MinimumAddress;
+      PHYSICAL_ADDRESS MaximumAddress;
+    } Port;
+    struct {
+      ULONG Length;
+      ULONG Alignment;
+      PHYSICAL_ADDRESS MinimumAddress;
+      PHYSICAL_ADDRESS MaximumAddress;
+    } Memory;
+    struct {
+      ULONG MinimumVector;
+      ULONG MaximumVector;
+    } Interrupt;
+    struct {
+      ULONG MinimumChannel;
+      ULONG MaximumChannel;
+    } Dma;
+    struct {
+      ULONG Length;
+      ULONG Alignment;
+      PHYSICAL_ADDRESS MinimumAddress;
+      PHYSICAL_ADDRESS MaximumAddress;
+    } Generic;
+    struct {
+      ULONG Data[3];
+    } DevicePrivate;
+    struct {
+      ULONG Length;
+      ULONG MinBusNumber;
+      ULONG MaxBusNumber;
+      ULONG Reserved;
+    } BusNumber;
+    struct {
+      ULONG Priority;
+      ULONG Reserved1;
+      ULONG Reserved2;
+    } ConfigData;
+  } u;
+} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
+
+typedef struct _IO_RESOURCE_LIST {
+  USHORT Version;
+  USHORT Revision;
+  ULONG Count;
+  IO_RESOURCE_DESCRIPTOR Descriptors[1];
+} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
+
+typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
+  ULONG ListSize;
+  INTERFACE_TYPE InterfaceType;
+  ULONG BusNumber;
+  ULONG SlotNumber;
+  ULONG Reserved[3];
+  ULONG AlternativeLists;
+  IO_RESOURCE_LIST List[1];
+} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
+
+typedef VOID
+(NTAPI DRIVER_CANCEL)(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN struct _IRP *Irp);
+typedef DRIVER_CANCEL *PDRIVER_CANCEL;
+
+typedef struct _IRP {
+  CSHORT Type;
+  USHORT Size;
+  struct _MDL *MdlAddress;
+  ULONG Flags;
+  union {
+    struct _IRP *MasterIrp;
+    volatile LONG IrpCount;
+    PVOID SystemBuffer;
+  } AssociatedIrp;
+  LIST_ENTRY ThreadListEntry;
+  IO_STATUS_BLOCK IoStatus;
+  KPROCESSOR_MODE RequestorMode;
+  BOOLEAN PendingReturned;
+  CHAR StackCount;
+  CHAR CurrentLocation;
+  BOOLEAN Cancel;
+  KIRQL CancelIrql;
+  CCHAR ApcEnvironment;
+  UCHAR AllocationFlags;
+  PIO_STATUS_BLOCK UserIosb;
+  PKEVENT UserEvent;
+  union {
+    struct {
+      _ANONYMOUS_UNION union {
+        PIO_APC_ROUTINE UserApcRoutine;
+        PVOID IssuingProcess;
+      } DUMMYUNIONNAME;
+      PVOID UserApcContext;
+    } AsynchronousParameters;
+    LARGE_INTEGER AllocationSize;
+  } Overlay;
+  volatile PDRIVER_CANCEL CancelRoutine;
+  PVOID UserBuffer;
+  union {
+    struct {
+      _ANONYMOUS_UNION union {
+        KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
+        _ANONYMOUS_STRUCT struct {
+          PVOID DriverContext[4];
+        } DUMMYSTRUCTNAME;
+      } DUMMYUNIONNAME;
+      PETHREAD Thread;
+      PCHAR AuxiliaryBuffer;
+      _ANONYMOUS_STRUCT struct {
+        LIST_ENTRY ListEntry;
+        _ANONYMOUS_UNION union {
+          struct _IO_STACK_LOCATION *CurrentStackLocation;
+          ULONG PacketType;
+        } DUMMYUNIONNAME;
+      } DUMMYSTRUCTNAME;
+      struct _FILE_OBJECT *OriginalFileObject;
+    } Overlay;
+    KAPC Apc;
+    PVOID CompletionKey;
+  } Tail;
+} IRP, *PIRP;
+
+typedef enum _IO_PAGING_PRIORITY {
+  IoPagingPriorityInvalid,
+  IoPagingPriorityNormal,
+  IoPagingPriorityHigh,
+  IoPagingPriorityReserved1,
+  IoPagingPriorityReserved2
+} IO_PAGING_PRIORITY;
+
+typedef NTSTATUS
+(NTAPI IO_COMPLETION_ROUTINE)(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN struct _IRP *Irp,
+  IN PVOID Context);
+typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE;
+
+typedef VOID
+(NTAPI IO_DPC_ROUTINE)(
+  IN struct _KDPC *Dpc,
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN struct _IRP *Irp,
+  IN PVOID Context);
+typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE;
+
+typedef NTSTATUS
+(NTAPI *PMM_DLL_INITIALIZE)(
+  IN PUNICODE_STRING RegistryPath);
+
+typedef NTSTATUS
+(NTAPI *PMM_DLL_UNLOAD)(
+  VOID);
+
+typedef VOID
+(NTAPI IO_TIMER_ROUTINE)(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN PVOID Context);
+typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
+
+typedef struct _IO_SECURITY_CONTEXT {
+  PSECURITY_QUALITY_OF_SERVICE SecurityQos;
+  PACCESS_STATE AccessState;
+  ACCESS_MASK DesiredAccess;
+  ULONG FullCreateOptions;
+} IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
+
+struct _IO_CSQ;
+
+typedef struct _IO_CSQ_IRP_CONTEXT {
+  ULONG Type;
+  struct _IRP *Irp;
+  struct _IO_CSQ *Csq;
+} IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT;
+
+typedef VOID
+(NTAPI *PIO_CSQ_INSERT_IRP)(
+  IN struct _IO_CSQ *Csq,
+  IN PIRP Irp);
+
+typedef NTSTATUS
+(NTAPI IO_CSQ_INSERT_IRP_EX)(
+  IN struct _IO_CSQ *Csq,
+  IN PIRP Irp,
+  IN PVOID InsertContext);
+typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX;
+
+typedef VOID
+(NTAPI *PIO_CSQ_REMOVE_IRP)(
+  IN struct _IO_CSQ *Csq,
+  IN PIRP Irp);
+
+typedef PIRP
+(NTAPI *PIO_CSQ_PEEK_NEXT_IRP)(
+  IN struct _IO_CSQ *Csq,
+  IN PIRP Irp,
+  IN PVOID PeekContext);
+
+typedef VOID
+(NTAPI *PIO_CSQ_ACQUIRE_LOCK)(
+  IN struct _IO_CSQ *Csq,
+  OUT PKIRQL Irql);
+
+typedef VOID
+(NTAPI *PIO_CSQ_RELEASE_LOCK)(
+  IN struct _IO_CSQ *Csq,
+  IN KIRQL Irql);
+
+typedef VOID
+(NTAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)(
+  IN struct _IO_CSQ *Csq,
+  IN PIRP Irp);
+
+typedef struct _IO_CSQ {
+  ULONG Type;
+  PIO_CSQ_INSERT_IRP CsqInsertIrp;
+  PIO_CSQ_REMOVE_IRP CsqRemoveIrp;
+  PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp;
+  PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock;
+  PIO_CSQ_RELEASE_LOCK CsqReleaseLock;
+  PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp;
+  PVOID ReservePointer;
+} IO_CSQ, *PIO_CSQ;
+
+typedef enum _BUS_QUERY_ID_TYPE {
+  BusQueryDeviceID,
+  BusQueryHardwareIDs,
+  BusQueryCompatibleIDs,
+  BusQueryInstanceID,
+  BusQueryDeviceSerialNumber
+} BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
+
+typedef enum _DEVICE_TEXT_TYPE {
+  DeviceTextDescription,
+  DeviceTextLocationInformation
+} DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
+
+typedef BOOLEAN
+(NTAPI *PGPE_SERVICE_ROUTINE)(
+  PVOID,
+  PVOID);
+
+typedef NTSTATUS
+(NTAPI *PGPE_CONNECT_VECTOR)(
+  PDEVICE_OBJECT,
+  ULONG,
+  KINTERRUPT_MODE,
+  BOOLEAN,
+  PGPE_SERVICE_ROUTINE,
+  PVOID,
+  PVOID);
+
+typedef NTSTATUS
+(NTAPI *PGPE_DISCONNECT_VECTOR)(
+  PVOID);
+
+typedef NTSTATUS
+(NTAPI *PGPE_ENABLE_EVENT)(
+  PDEVICE_OBJECT,
+  PVOID);
+
+typedef NTSTATUS
+(NTAPI *PGPE_DISABLE_EVENT)(
+  PDEVICE_OBJECT,
+  PVOID);
+
+typedef NTSTATUS
+(NTAPI *PGPE_CLEAR_STATUS)(
+  PDEVICE_OBJECT,
+  PVOID);
+
+typedef VOID
+(NTAPI *PDEVICE_NOTIFY_CALLBACK)(
+  PVOID,
+  ULONG);
+
+typedef NTSTATUS
+(NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)(
+  PDEVICE_OBJECT,
+  PDEVICE_NOTIFY_CALLBACK,
+  PVOID);
+
+typedef VOID
+(NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)(
+  PDEVICE_OBJECT,
+  PDEVICE_NOTIFY_CALLBACK);
+
+typedef struct _ACPI_INTERFACE_STANDARD {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PGPE_CONNECT_VECTOR GpeConnectVector;
+  PGPE_DISCONNECT_VECTOR GpeDisconnectVector;
+  PGPE_ENABLE_EVENT GpeEnableEvent;
+  PGPE_DISABLE_EVENT GpeDisableEvent;
+  PGPE_CLEAR_STATUS GpeClearStatus;
+  PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications;
+  PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications;
+} ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD;
+
+typedef BOOLEAN
+(NTAPI *PGPE_SERVICE_ROUTINE2)(
+  PVOID ObjectContext,
+  PVOID ServiceContext);
+
+typedef NTSTATUS
+(NTAPI *PGPE_CONNECT_VECTOR2)(
+  PVOID Context,
+  ULONG GpeNumber,
+  KINTERRUPT_MODE Mode,
+  BOOLEAN Shareable,
+  PGPE_SERVICE_ROUTINE ServiceRoutine,
+  PVOID ServiceContext,
+  PVOID *ObjectContext);
+
+typedef NTSTATUS
+(NTAPI *PGPE_DISCONNECT_VECTOR2)(
+  PVOID Context,
+  PVOID ObjectContext);
+
+typedef NTSTATUS
+(NTAPI *PGPE_ENABLE_EVENT2)(
+  PVOID Context,
+  PVOID ObjectContext);
+
+typedef NTSTATUS
+(NTAPI *PGPE_DISABLE_EVENT2)(
+  PVOID Context,
+  PVOID ObjectContext);
+
+typedef NTSTATUS
+(NTAPI *PGPE_CLEAR_STATUS2)(
+  PVOID Context,
+  PVOID ObjectContext);
+
+typedef VOID
+(NTAPI *PDEVICE_NOTIFY_CALLBACK2)(
+  PVOID NotificationContext,
+  ULONG NotifyCode);
+
+typedef NTSTATUS
+(NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
+  PVOID Context,
+  PDEVICE_NOTIFY_CALLBACK2 NotificationHandler,
+  PVOID NotificationContext);
+
+typedef VOID
+(NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
+  PVOID Context);
+
+typedef struct _ACPI_INTERFACE_STANDARD2 {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PGPE_CONNECT_VECTOR2 GpeConnectVector;
+  PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector;
+  PGPE_ENABLE_EVENT2 GpeEnableEvent;
+  PGPE_DISABLE_EVENT2 GpeDisableEvent;
+  PGPE_CLEAR_STATUS2 GpeClearStatus;
+  PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications;
+  PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications;
+} ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2;
+
+#if !defined(_AMD64_) && !defined(_IA64_)
+#include <pshpack4.h>
+#endif
+typedef struct _IO_STACK_LOCATION {
+  UCHAR MajorFunction;
+  UCHAR MinorFunction;
+  UCHAR Flags;
+  UCHAR Control;
+  union {
+    struct {
+      PIO_SECURITY_CONTEXT SecurityContext;
+      ULONG Options;
+      USHORT POINTER_ALIGNMENT FileAttributes;
+      USHORT ShareAccess;
+      ULONG POINTER_ALIGNMENT EaLength;
+    } Create;
+    struct {
+      ULONG Length;
+      ULONG POINTER_ALIGNMENT Key;
+      LARGE_INTEGER ByteOffset;
+    } Read;
+    struct {
+      ULONG Length;
+      ULONG POINTER_ALIGNMENT Key;
+      LARGE_INTEGER ByteOffset;
+    } Write;
+    struct {
+      ULONG Length;
+      PUNICODE_STRING FileName;
+      FILE_INFORMATION_CLASS FileInformationClass;
+      ULONG FileIndex;
+    } QueryDirectory;
+    struct {
+      ULONG Length;
+      ULONG CompletionFilter;
+    } NotifyDirectory;
+    struct {
+      ULONG Length;
+      FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+    } QueryFile;
+    struct {
+      ULONG Length;
+      FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+      PFILE_OBJECT FileObject;
+      _ANONYMOUS_UNION union {
+        _ANONYMOUS_STRUCT struct {
+          BOOLEAN ReplaceIfExists;
+          BOOLEAN AdvanceOnly;
+        } DUMMYSTRUCTNAME;
+        ULONG ClusterCount;
+        HANDLE DeleteHandle;
+      } DUMMYUNIONNAME;
+    } SetFile;
+    struct {
+      ULONG Length;
+      PVOID EaList;
+      ULONG EaListLength;
+      ULONG EaIndex;
+    } QueryEa;
+    struct {
+      ULONG Length;
+    } SetEa;
+    struct {
+      ULONG Length;
+      FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
+    } QueryVolume;
+    struct {
+      ULONG Length;
+      FS_INFORMATION_CLASS FsInformationClass;
+    } SetVolume;
+    struct {
+      ULONG OutputBufferLength;
+      ULONG InputBufferLength;
+      ULONG FsControlCode;
+      PVOID Type3InputBuffer;
+    } FileSystemControl;
+    struct {
+      PLARGE_INTEGER Length;
+      ULONG Key;
+      LARGE_INTEGER ByteOffset;
+    } LockControl;
+    struct {
+      ULONG OutputBufferLength;
+      ULONG POINTER_ALIGNMENT InputBufferLength;
+      ULONG POINTER_ALIGNMENT IoControlCode;
+      PVOID Type3InputBuffer;
+    } DeviceIoControl;
+    struct {
+      SECURITY_INFORMATION SecurityInformation;
+      ULONG POINTER_ALIGNMENT Length;
+    } QuerySecurity;
+    struct {
+      SECURITY_INFORMATION SecurityInformation;
+      PSECURITY_DESCRIPTOR SecurityDescriptor;
+    } SetSecurity;
+    struct {
+      PVPB Vpb;
+      PDEVICE_OBJECT DeviceObject;
+    } MountVolume;
+    struct {
+      PVPB Vpb;
+      PDEVICE_OBJECT DeviceObject;
+    } VerifyVolume;
+    struct {
+      struct _SCSI_REQUEST_BLOCK *Srb;
+    } Scsi;
+    struct {
+      ULONG Length;
+      PSID StartSid;
+      struct _FILE_GET_QUOTA_INFORMATION *SidList;
+      ULONG SidListLength;
+    } QueryQuota;
+    struct {
+      ULONG Length;
+    } SetQuota;
+    struct {
+      DEVICE_RELATION_TYPE Type;
+    } QueryDeviceRelations;
+    struct {
+      CONST GUID *InterfaceType;
+      USHORT Size;
+      USHORT Version;
+      PINTERFACE Interface;
+      PVOID InterfaceSpecificData;
+    } QueryInterface;
+    struct {
+      PDEVICE_CAPABILITIES Capabilities;
+    } DeviceCapabilities;
+    struct {
+      PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
+    } FilterResourceRequirements;
+    struct {
+      ULONG WhichSpace;
+      PVOID Buffer;
+      ULONG Offset;
+      ULONG POINTER_ALIGNMENT Length;
+    } ReadWriteConfig;
+    struct {
+      BOOLEAN Lock;
+    } SetLock;
+    struct {
+      BUS_QUERY_ID_TYPE IdType;
+    } QueryId;
+    struct {
+      DEVICE_TEXT_TYPE DeviceTextType;
+      LCID POINTER_ALIGNMENT LocaleId;
+    } QueryDeviceText;
+    struct {
+      BOOLEAN InPath;
+      BOOLEAN Reserved[3];
+      DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
+    } UsageNotification;
+    struct {
+      SYSTEM_POWER_STATE PowerState;
+    } WaitWake;
+    struct {
+      PPOWER_SEQUENCE PowerSequence;
+    } PowerSequence;
+    struct {
+      ULONG SystemContext;
+      POWER_STATE_TYPE POINTER_ALIGNMENT Type;
+      POWER_STATE POINTER_ALIGNMENT State;
+      POWER_ACTION POINTER_ALIGNMENT ShutdownType;
+    } Power;
+    struct {
+      PCM_RESOURCE_LIST AllocatedResources;
+      PCM_RESOURCE_LIST AllocatedResourcesTranslated;
+    } StartDevice;
+    struct {
+      ULONG_PTR ProviderId;
+      PVOID DataPath;
+      ULONG BufferSize;
+      PVOID Buffer;
+    } WMI;
+    struct {
+      PVOID Argument1;
+      PVOID Argument2;
+      PVOID Argument3;
+      PVOID Argument4;
+    } Others;
+  } Parameters;
+  PDEVICE_OBJECT DeviceObject;
+  PFILE_OBJECT FileObject;
+  PIO_COMPLETION_ROUTINE CompletionRoutine;
+  PVOID Context;
+} IO_STACK_LOCATION, *PIO_STACK_LOCATION;
+#if !defined(_AMD64_) && !defined(_IA64_)
+#include <poppack.h>
+#endif
+
+/* IO_STACK_LOCATION.Control */
+
+#define SL_PENDING_RETURNED               0x01
+#define SL_ERROR_RETURNED                 0x02
+#define SL_INVOKE_ON_CANCEL               0x20
+#define SL_INVOKE_ON_SUCCESS              0x40
+#define SL_INVOKE_ON_ERROR                0x80
+
+#define METHOD_BUFFERED                   0
+#define METHOD_IN_DIRECT                  1
+#define METHOD_OUT_DIRECT                 2
+#define METHOD_NEITHER                    3
+
+#define METHOD_DIRECT_TO_HARDWARE       METHOD_IN_DIRECT
+#define METHOD_DIRECT_FROM_HARDWARE     METHOD_OUT_DIRECT
+
+#define FILE_SUPERSEDED                   0x00000000
+#define FILE_OPENED                       0x00000001
+#define FILE_CREATED                      0x00000002
+#define FILE_OVERWRITTEN                  0x00000003
+#define FILE_EXISTS                       0x00000004
+#define FILE_DOES_NOT_EXIST               0x00000005
+
+#define FILE_USE_FILE_POINTER_POSITION    0xfffffffe
+#define FILE_WRITE_TO_END_OF_FILE         0xffffffff
+
+/* also in winnt.h */
+#define FILE_LIST_DIRECTORY               0x00000001
+#define FILE_READ_DATA                    0x00000001
+#define FILE_ADD_FILE                     0x00000002
+#define FILE_WRITE_DATA                   0x00000002
+#define FILE_ADD_SUBDIRECTORY             0x00000004
+#define FILE_APPEND_DATA                  0x00000004
+#define FILE_CREATE_PIPE_INSTANCE         0x00000004
+#define FILE_READ_EA                      0x00000008
+#define FILE_WRITE_EA                     0x00000010
+#define FILE_EXECUTE                      0x00000020
+#define FILE_TRAVERSE                     0x00000020
+#define FILE_DELETE_CHILD                 0x00000040
+#define FILE_READ_ATTRIBUTES              0x00000080
+#define FILE_WRITE_ATTRIBUTES             0x00000100
+
+#define FILE_SHARE_READ                   0x00000001
+#define FILE_SHARE_WRITE                  0x00000002
+#define FILE_SHARE_DELETE                 0x00000004
+#define FILE_SHARE_VALID_FLAGS            0x00000007
+
+#define FILE_ATTRIBUTE_READONLY           0x00000001
+#define FILE_ATTRIBUTE_HIDDEN             0x00000002
+#define FILE_ATTRIBUTE_SYSTEM             0x00000004
+#define FILE_ATTRIBUTE_DIRECTORY          0x00000010
+#define FILE_ATTRIBUTE_ARCHIVE            0x00000020
+#define FILE_ATTRIBUTE_DEVICE             0x00000040
+#define FILE_ATTRIBUTE_NORMAL             0x00000080
+#define FILE_ATTRIBUTE_TEMPORARY          0x00000100
+#define FILE_ATTRIBUTE_SPARSE_FILE        0x00000200
+#define FILE_ATTRIBUTE_REPARSE_POINT      0x00000400
+#define FILE_ATTRIBUTE_COMPRESSED         0x00000800
+#define FILE_ATTRIBUTE_OFFLINE            0x00001000
+#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
+#define FILE_ATTRIBUTE_ENCRYPTED          0x00004000
+#define FILE_ATTRIBUTE_VIRTUAL            0x00010000
+
+#define FILE_ATTRIBUTE_VALID_FLAGS        0x00007fb7
+#define FILE_ATTRIBUTE_VALID_SET_FLAGS    0x000031a7
+
+#define FILE_VALID_OPTION_FLAGS           0x00ffffff
+#define FILE_VALID_PIPE_OPTION_FLAGS      0x00000032
+#define FILE_VALID_MAILSLOT_OPTION_FLAGS  0x00000032
+#define FILE_VALID_SET_FLAGS              0x00000036
+
+#define FILE_SUPERSEDE                    0x00000000
+#define FILE_OPEN                         0x00000001
+#define FILE_CREATE                       0x00000002
+#define FILE_OPEN_IF                      0x00000003
+#define FILE_OVERWRITE                    0x00000004
+#define FILE_OVERWRITE_IF                 0x00000005
+#define FILE_MAXIMUM_DISPOSITION          0x00000005
+
+#define FILE_DIRECTORY_FILE               0x00000001
+#define FILE_WRITE_THROUGH                0x00000002
+#define FILE_SEQUENTIAL_ONLY              0x00000004
+#define FILE_NO_INTERMEDIATE_BUFFERING    0x00000008
+#define FILE_SYNCHRONOUS_IO_ALERT         0x00000010
+#define FILE_SYNCHRONOUS_IO_NONALERT      0x00000020
+#define FILE_NON_DIRECTORY_FILE           0x00000040
+#define FILE_CREATE_TREE_CONNECTION       0x00000080
+#define FILE_COMPLETE_IF_OPLOCKED         0x00000100
+#define FILE_NO_EA_KNOWLEDGE              0x00000200
+#define FILE_OPEN_REMOTE_INSTANCE         0x00000400
+#define FILE_RANDOM_ACCESS                0x00000800
+#define FILE_DELETE_ON_CLOSE              0x00001000
+#define FILE_OPEN_BY_FILE_ID              0x00002000
+#define FILE_OPEN_FOR_BACKUP_INTENT       0x00004000
+#define FILE_NO_COMPRESSION               0x00008000
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define FILE_OPEN_REQUIRING_OPLOCK        0x00010000
+#define FILE_DISALLOW_EXCLUSIVE           0x00020000
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+#define FILE_RESERVE_OPFILTER             0x00100000
+#define FILE_OPEN_REPARSE_POINT           0x00200000
+#define FILE_OPEN_NO_RECALL               0x00400000
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY    0x00800000
+
+#define FILE_ANY_ACCESS                   0x00000000
+#define FILE_SPECIAL_ACCESS               FILE_ANY_ACCESS
+#define FILE_READ_ACCESS                  0x00000001
+#define FILE_WRITE_ACCESS                 0x00000002
+
+#define FILE_ALL_ACCESS \
+  (STANDARD_RIGHTS_REQUIRED | \
+   SYNCHRONIZE | \
+   0x1FF)
+
+#define FILE_GENERIC_EXECUTE \
+  (STANDARD_RIGHTS_EXECUTE | \
+   FILE_READ_ATTRIBUTES | \
+   FILE_EXECUTE | \
+   SYNCHRONIZE)
+
+#define FILE_GENERIC_READ \
+  (STANDARD_RIGHTS_READ | \
+   FILE_READ_DATA | \
+   FILE_READ_ATTRIBUTES | \
+   FILE_READ_EA | \
+   SYNCHRONIZE)
+
+#define FILE_GENERIC_WRITE \
+  (STANDARD_RIGHTS_WRITE | \
+   FILE_WRITE_DATA | \
+   FILE_WRITE_ATTRIBUTES | \
+   FILE_WRITE_EA | \
+   FILE_APPEND_DATA | \
+   SYNCHRONIZE)
+
+/* end winnt.h */
+
+#define WMIREG_ACTION_REGISTER      1
+#define WMIREG_ACTION_DEREGISTER    2
+#define WMIREG_ACTION_REREGISTER    3
+#define WMIREG_ACTION_UPDATE_GUIDS  4
+#define WMIREG_ACTION_BLOCK_IRPS    5
+
+#define WMIREGISTER                 0
+#define WMIUPDATE                   1
+
+typedef VOID
+(NTAPI FWMI_NOTIFICATION_CALLBACK)(
+  PVOID Wnode,
+  PVOID Context);
+typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK;
+
+#ifndef _PCI_X_
+#define _PCI_X_
+
+typedef struct _PCI_SLOT_NUMBER {
+  union {
+    struct {
+      ULONG DeviceNumber:5;
+      ULONG FunctionNumber:3;
+      ULONG Reserved:24;
+    } bits;
+    ULONG AsULONG;
+  } u;
+} PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
+
+#define PCI_TYPE0_ADDRESSES               6
+#define PCI_TYPE1_ADDRESSES               2
+#define PCI_TYPE2_ADDRESSES               5
+
+typedef struct _PCI_COMMON_HEADER {
+  PCI_COMMON_HEADER_LAYOUT
+} PCI_COMMON_HEADER, *PPCI_COMMON_HEADER;
+
+#ifdef __cplusplus
+typedef struct _PCI_COMMON_CONFIG {
+  PCI_COMMON_HEADER_LAYOUT
+  UCHAR DeviceSpecific[192];
+} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
+#else
+typedef struct _PCI_COMMON_CONFIG {
+  PCI_COMMON_HEADER DUMMYSTRUCTNAME;
+  UCHAR DeviceSpecific[192];
+} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
+#endif
+
+#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
+
+#define PCI_EXTENDED_CONFIG_LENGTH               0x1000
+
+#define PCI_MAX_DEVICES        32
+#define PCI_MAX_FUNCTION       8
+#define PCI_MAX_BRIDGE_NUMBER  0xFF
+#define PCI_INVALID_VENDORID   0xFFFF
+
+/* PCI_COMMON_CONFIG.HeaderType */
+#define PCI_MULTIFUNCTION                 0x80
+#define PCI_DEVICE_TYPE                   0x00
+#define PCI_BRIDGE_TYPE                   0x01
+#define PCI_CARDBUS_BRIDGE_TYPE           0x02
+
+#define PCI_CONFIGURATION_TYPE(PciData) \
+  (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
+
+#define PCI_MULTIFUNCTION_DEVICE(PciData) \
+  ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
+
+/* PCI_COMMON_CONFIG.Command */
+#define PCI_ENABLE_IO_SPACE               0x0001
+#define PCI_ENABLE_MEMORY_SPACE           0x0002
+#define PCI_ENABLE_BUS_MASTER             0x0004
+#define PCI_ENABLE_SPECIAL_CYCLES         0x0008
+#define PCI_ENABLE_WRITE_AND_INVALIDATE   0x0010
+#define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
+#define PCI_ENABLE_PARITY                 0x0040
+#define PCI_ENABLE_WAIT_CYCLE             0x0080
+#define PCI_ENABLE_SERR                   0x0100
+#define PCI_ENABLE_FAST_BACK_TO_BACK      0x0200
+#define PCI_DISABLE_LEVEL_INTERRUPT       0x0400
+
+/* PCI_COMMON_CONFIG.Status */
+#define PCI_STATUS_INTERRUPT_PENDING      0x0008
+#define PCI_STATUS_CAPABILITIES_LIST      0x0010
+#define PCI_STATUS_66MHZ_CAPABLE          0x0020
+#define PCI_STATUS_UDF_SUPPORTED          0x0040
+#define PCI_STATUS_FAST_BACK_TO_BACK      0x0080
+#define PCI_STATUS_DATA_PARITY_DETECTED   0x0100
+#define PCI_STATUS_DEVSEL                 0x0600
+#define PCI_STATUS_SIGNALED_TARGET_ABORT  0x0800
+#define PCI_STATUS_RECEIVED_TARGET_ABORT  0x1000
+#define PCI_STATUS_RECEIVED_MASTER_ABORT  0x2000
+#define PCI_STATUS_SIGNALED_SYSTEM_ERROR  0x4000
+#define PCI_STATUS_DETECTED_PARITY_ERROR  0x8000
+
+/* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
+
+#define PCI_WHICHSPACE_CONFIG             0x0
+#define PCI_WHICHSPACE_ROM                0x52696350 /* 'PciR' */
+
+#define PCI_CAPABILITY_ID_POWER_MANAGEMENT  0x01
+#define PCI_CAPABILITY_ID_AGP               0x02
+#define PCI_CAPABILITY_ID_VPD               0x03
+#define PCI_CAPABILITY_ID_SLOT_ID           0x04
+#define PCI_CAPABILITY_ID_MSI               0x05
+#define PCI_CAPABILITY_ID_CPCI_HOTSWAP      0x06
+#define PCI_CAPABILITY_ID_PCIX              0x07
+#define PCI_CAPABILITY_ID_HYPERTRANSPORT    0x08
+#define PCI_CAPABILITY_ID_VENDOR_SPECIFIC   0x09
+#define PCI_CAPABILITY_ID_DEBUG_PORT        0x0A
+#define PCI_CAPABILITY_ID_CPCI_RES_CTRL     0x0B
+#define PCI_CAPABILITY_ID_SHPC              0x0C
+#define PCI_CAPABILITY_ID_P2P_SSID          0x0D
+#define PCI_CAPABILITY_ID_AGP_TARGET        0x0E
+#define PCI_CAPABILITY_ID_SECURE            0x0F
+#define PCI_CAPABILITY_ID_PCI_EXPRESS       0x10
+#define PCI_CAPABILITY_ID_MSIX              0x11
+
+typedef struct _PCI_CAPABILITIES_HEADER {
+  UCHAR CapabilityID;
+  UCHAR Next;
+} PCI_CAPABILITIES_HEADER, *PPCI_CAPABILITIES_HEADER;
+
+typedef struct _PCI_PMC {
+  UCHAR Version:3;
+  UCHAR PMEClock:1;
+  UCHAR Rsvd1:1;
+  UCHAR DeviceSpecificInitialization:1;
+  UCHAR Rsvd2:2;
+  struct _PM_SUPPORT {
+    UCHAR Rsvd2:1;
+    UCHAR D1:1;
+    UCHAR D2:1;
+    UCHAR PMED0:1;
+    UCHAR PMED1:1;
+    UCHAR PMED2:1;
+    UCHAR PMED3Hot:1;
+    UCHAR PMED3Cold:1;
+  } Support;
+} PCI_PMC, *PPCI_PMC;
+
+typedef struct _PCI_PMCSR {
+  USHORT PowerState:2;
+  USHORT Rsvd1:6;
+  USHORT PMEEnable:1;
+  USHORT DataSelect:4;
+  USHORT DataScale:2;
+  USHORT PMEStatus:1;
+} PCI_PMCSR, *PPCI_PMCSR;
+
+typedef struct _PCI_PMCSR_BSE {
+  UCHAR Rsvd1:6;
+  UCHAR D3HotSupportsStopClock:1;
+  UCHAR BusPowerClockControlEnabled:1;
+} PCI_PMCSR_BSE, *PPCI_PMCSR_BSE;
+
+typedef struct _PCI_PM_CAPABILITY {
+  PCI_CAPABILITIES_HEADER Header;
+  union {
+    PCI_PMC Capabilities;
+    USHORT AsUSHORT;
+  } PMC;
+    union {
+      PCI_PMCSR ControlStatus;
+      USHORT AsUSHORT;
+    } PMCSR;
+    union {
+      PCI_PMCSR_BSE BridgeSupport;
+      UCHAR AsUCHAR;
+    } PMCSR_BSE;
+  UCHAR Data;
+} PCI_PM_CAPABILITY, *PPCI_PM_CAPABILITY;
+
+typedef struct {
+  PCI_CAPABILITIES_HEADER Header;
+  union {
+    struct {
+      USHORT DataParityErrorRecoveryEnable:1;
+      USHORT EnableRelaxedOrdering:1;
+      USHORT MaxMemoryReadByteCount:2;
+      USHORT MaxOutstandingSplitTransactions:3;
+      USHORT Reserved:9;
+    } bits;
+    USHORT AsUSHORT;
+  } Command;
+  union {
+    struct {
+      ULONG FunctionNumber:3;
+      ULONG DeviceNumber:5;
+      ULONG BusNumber:8;
+      ULONG Device64Bit:1;
+      ULONG Capable133MHz:1;
+      ULONG SplitCompletionDiscarded:1;
+      ULONG UnexpectedSplitCompletion:1;
+      ULONG DeviceComplexity:1;
+      ULONG DesignedMaxMemoryReadByteCount:2;
+      ULONG DesignedMaxOutstandingSplitTransactions:3;
+      ULONG DesignedMaxCumulativeReadSize:3;
+      ULONG ReceivedSplitCompletionErrorMessage:1;
+      ULONG CapablePCIX266:1;
+      ULONG CapablePCIX533:1;
+      } bits;
+    ULONG AsULONG;
+  } Status;
+} PCI_X_CAPABILITY, *PPCI_X_CAPABILITY;
+
+#define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID                     0x0001
+#define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID                              0x0002
+#define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID                         0x0003
+#define PCI_EXPRESS_POWER_BUDGETING_CAP_ID                              0x0004
+#define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID                          0x0005
+#define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID                     0x0006
+#define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID      0x0007
+#define PCI_EXPRESS_MFVC_CAP_ID                                         0x0008
+#define PCI_EXPRESS_VC_AND_MFVC_CAP_ID                                  0x0009
+#define PCI_EXPRESS_RCRB_HEADER_CAP_ID                                  0x000A
+#define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID                0x0010
+
+typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER {
+  USHORT CapabilityID;
+  USHORT Version:4;
+  USHORT Next:12;
+} PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER;
+
+typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY {
+  PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
+  ULONG LowSerialNumber;
+  ULONG HighSerialNumber;
+} PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY;
+
+typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS {
+  struct {
+    ULONG Undefined:1;
+    ULONG Reserved1:3;
+    ULONG DataLinkProtocolError:1;
+    ULONG SurpriseDownError:1;
+    ULONG Reserved2:6;
+    ULONG PoisonedTLP:1;
+    ULONG FlowControlProtocolError:1;
+    ULONG CompletionTimeout:1;
+    ULONG CompleterAbort:1;
+    ULONG UnexpectedCompletion:1;
+    ULONG ReceiverOverflow:1;
+    ULONG MalformedTLP:1;
+    ULONG ECRCError:1;
+    ULONG UnsupportedRequestError:1;
+    ULONG Reserved3:11;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS;
+
+typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK {
+  struct {
+    ULONG Undefined:1;
+    ULONG Reserved1:3;
+    ULONG DataLinkProtocolError:1;
+    ULONG SurpriseDownError:1;
+    ULONG Reserved2:6;
+    ULONG PoisonedTLP:1;
+    ULONG FlowControlProtocolError:1;
+    ULONG CompletionTimeout:1;
+    ULONG CompleterAbort:1;
+    ULONG UnexpectedCompletion:1;
+    ULONG ReceiverOverflow:1;
+    ULONG MalformedTLP:1;
+    ULONG ECRCError:1;
+    ULONG UnsupportedRequestError:1;
+    ULONG Reserved3:11;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK;
+
+typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY {
+  struct {
+    ULONG Undefined:1;
+    ULONG Reserved1:3;
+    ULONG DataLinkProtocolError:1;
+    ULONG SurpriseDownError:1;
+    ULONG Reserved2:6;
+    ULONG PoisonedTLP:1;
+    ULONG FlowControlProtocolError:1;
+    ULONG CompletionTimeout:1;
+    ULONG CompleterAbort:1;
+    ULONG UnexpectedCompletion:1;
+    ULONG ReceiverOverflow:1;
+    ULONG MalformedTLP:1;
+    ULONG ECRCError:1;
+    ULONG UnsupportedRequestError:1;
+    ULONG Reserved3:11;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY;
+
+typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS {
+  struct {
+    ULONG ReceiverError:1;
+    ULONG Reserved1:5;
+    ULONG BadTLP:1;
+    ULONG BadDLLP:1;
+    ULONG ReplayNumRollover:1;
+    ULONG Reserved2:3;
+    ULONG ReplayTimerTimeout:1;
+    ULONG AdvisoryNonFatalError:1;
+    ULONG Reserved3:18;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_CORRECTABLE_ERROR_STATUS, *PPCI_CORRECTABLE_ERROR_STATUS;
+
+typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK {
+  struct {
+    ULONG ReceiverError:1;
+    ULONG Reserved1:5;
+    ULONG BadTLP:1;
+    ULONG BadDLLP:1;
+    ULONG ReplayNumRollover:1;
+    ULONG Reserved2:3;
+    ULONG ReplayTimerTimeout:1;
+    ULONG AdvisoryNonFatalError:1;
+    ULONG Reserved3:18;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_CORRECTABLE_ERROR_MASK, *PPCI_CORRECTABLE_ERROR_MASK;
+
+typedef union _PCI_EXPRESS_AER_CAPABILITIES {
+  struct {
+    ULONG FirstErrorPointer:5;
+    ULONG ECRCGenerationCapable:1;
+    ULONG ECRCGenerationEnable:1;
+    ULONG ECRCCheckCapable:1;
+    ULONG ECRCCheckEnable:1;
+    ULONG Reserved:23;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_AER_CAPABILITIES, *PPCI_EXPRESS_AER_CAPABILITIES;
+
+typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND {
+  struct {
+    ULONG CorrectableErrorReportingEnable:1;
+    ULONG NonFatalErrorReportingEnable:1;
+    ULONG FatalErrorReportingEnable:1;
+    ULONG Reserved:29;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_ROOT_ERROR_COMMAND, *PPCI_EXPRESS_ROOT_ERROR_COMMAND;
+
+typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS {
+  struct {
+    ULONG CorrectableErrorReceived:1;
+    ULONG MultipleCorrectableErrorsReceived:1;
+    ULONG UncorrectableErrorReceived:1;
+    ULONG MultipleUncorrectableErrorsReceived:1;
+    ULONG FirstUncorrectableFatal:1;
+    ULONG NonFatalErrorMessagesReceived:1;
+    ULONG FatalErrorMessagesReceived:1;
+    ULONG Reserved:20;
+    ULONG AdvancedErrorInterruptMessageNumber:5;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_ROOT_ERROR_STATUS, *PPCI_EXPRESS_ROOT_ERROR_STATUS;
+
+typedef union _PCI_EXPRESS_ERROR_SOURCE_ID {
+  struct {
+    USHORT CorrectableSourceIdFun:3;
+    USHORT CorrectableSourceIdDev:5;
+    USHORT CorrectableSourceIdBus:8;
+    USHORT UncorrectableSourceIdFun:3;
+    USHORT UncorrectableSourceIdDev:5;
+    USHORT UncorrectableSourceIdBus:8;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_ERROR_SOURCE_ID, *PPCI_EXPRESS_ERROR_SOURCE_ID;
+
+typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS {
+  struct {
+    ULONG TargetAbortOnSplitCompletion:1;
+    ULONG MasterAbortOnSplitCompletion:1;
+    ULONG ReceivedTargetAbort:1;
+    ULONG ReceivedMasterAbort:1;
+    ULONG RsvdZ:1;
+    ULONG UnexpectedSplitCompletionError:1;
+    ULONG UncorrectableSplitCompletion:1;
+    ULONG UncorrectableDataError:1;
+    ULONG UncorrectableAttributeError:1;
+    ULONG UncorrectableAddressError:1;
+    ULONG DelayedTransactionDiscardTimerExpired:1;
+    ULONG PERRAsserted:1;
+    ULONG SERRAsserted:1;
+    ULONG InternalBridgeError:1;
+    ULONG Reserved:18;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS;
+
+typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK {
+  struct {
+    ULONG TargetAbortOnSplitCompletion:1;
+    ULONG MasterAbortOnSplitCompletion:1;
+    ULONG ReceivedTargetAbort:1;
+    ULONG ReceivedMasterAbort:1;
+    ULONG RsvdZ:1;
+    ULONG UnexpectedSplitCompletionError:1;
+    ULONG UncorrectableSplitCompletion:1;
+    ULONG UncorrectableDataError:1;
+    ULONG UncorrectableAttributeError:1;
+    ULONG UncorrectableAddressError:1;
+    ULONG DelayedTransactionDiscardTimerExpired:1;
+    ULONG PERRAsserted:1;
+    ULONG SERRAsserted:1;
+    ULONG InternalBridgeError:1;
+    ULONG Reserved:18;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK;
+
+typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY {
+  struct {
+    ULONG TargetAbortOnSplitCompletion:1;
+    ULONG MasterAbortOnSplitCompletion:1;
+    ULONG ReceivedTargetAbort:1;
+    ULONG ReceivedMasterAbort:1;
+    ULONG RsvdZ:1;
+    ULONG UnexpectedSplitCompletionError:1;
+    ULONG UncorrectableSplitCompletion:1;
+    ULONG UncorrectableDataError:1;
+    ULONG UncorrectableAttributeError:1;
+    ULONG UncorrectableAddressError:1;
+    ULONG DelayedTransactionDiscardTimerExpired:1;
+    ULONG PERRAsserted:1;
+    ULONG SERRAsserted:1;
+    ULONG InternalBridgeError:1;
+    ULONG Reserved:18;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY;
+
+typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES {
+  struct {
+    ULONG SecondaryUncorrectableFirstErrorPtr:5;
+    ULONG Reserved:27;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_SEC_AER_CAPABILITIES, *PPCI_EXPRESS_SEC_AER_CAPABILITIES;
+
+#define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING  0x00000001
+#define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING     0x00000002
+#define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING        0x00000004
+
+#define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
+    (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
+     ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
+     ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
+
+typedef struct _PCI_EXPRESS_AER_CAPABILITY {
+  PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
+  PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
+  PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
+  PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
+  PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
+  PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
+  PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
+  ULONG HeaderLog[4];
+  PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
+  PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
+  PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
+  PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
+  ULONG SecHeaderLog[4];
+} PCI_EXPRESS_AER_CAPABILITY, *PPCI_EXPRESS_AER_CAPABILITY;
+
+typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY {
+  PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
+  PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
+  PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
+  PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
+  PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
+  PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
+  PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
+  ULONG HeaderLog[4];
+  PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand;
+  PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus;
+  PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId;
+} PCI_EXPRESS_ROOTPORT_AER_CAPABILITY, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY;
+
+typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY {
+  PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
+  PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
+  PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
+  PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
+  PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
+  PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
+  PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
+  ULONG HeaderLog[4];
+  PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
+  PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
+  PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
+  PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
+  ULONG SecHeaderLog[4];
+} PCI_EXPRESS_BRIDGE_AER_CAPABILITY, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY;
+
+typedef union _PCI_EXPRESS_SRIOV_CAPS {
+  struct {
+    ULONG VFMigrationCapable:1;
+    ULONG Reserved1:20;
+    ULONG VFMigrationInterruptNumber:11;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_SRIOV_CAPS, *PPCI_EXPRESS_SRIOV_CAPS;
+
+typedef union _PCI_EXPRESS_SRIOV_CONTROL {
+  struct {
+    USHORT VFEnable:1;
+    USHORT VFMigrationEnable:1;
+    USHORT VFMigrationInterruptEnable:1;
+    USHORT VFMemorySpaceEnable:1;
+    USHORT ARICapableHierarchy:1;
+    USHORT Reserved1:11;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_SRIOV_CONTROL, *PPCI_EXPRESS_SRIOV_CONTROL;
+
+typedef union _PCI_EXPRESS_SRIOV_STATUS {
+  struct {
+    USHORT VFMigrationStatus:1;
+    USHORT Reserved1:15;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_SRIOV_STATUS, *PPCI_EXPRESS_SRIOV_STATUS;
+
+typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY {
+  struct {
+    ULONG VFMigrationStateBIR:3;
+    ULONG VFMigrationStateOffset:29;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY;
+
+typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY {
+  PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
+  PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities;
+  PCI_EXPRESS_SRIOV_CONTROL SRIOVControl;
+  PCI_EXPRESS_SRIOV_STATUS SRIOVStatus;
+  USHORT InitialVFs;
+  USHORT TotalVFs;
+  USHORT NumVFs;
+  UCHAR FunctionDependencyLink;
+  UCHAR RsvdP1;
+  USHORT FirstVFOffset;
+  USHORT VFStride;
+  USHORT RsvdP2;
+  USHORT VFDeviceId;
+  ULONG SupportedPageSizes;
+  ULONG SystemPageSize;
+  ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
+  PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset;
+} PCI_EXPRESS_SRIOV_CAPABILITY, *PPCI_EXPRESS_SRIOV_CAPABILITY;
+
+/* PCI device classes */
+#define PCI_CLASS_PRE_20                    0x00
+#define PCI_CLASS_MASS_STORAGE_CTLR         0x01
+#define PCI_CLASS_NETWORK_CTLR              0x02
+#define PCI_CLASS_DISPLAY_CTLR              0x03
+#define PCI_CLASS_MULTIMEDIA_DEV            0x04
+#define PCI_CLASS_MEMORY_CTLR               0x05
+#define PCI_CLASS_BRIDGE_DEV                0x06
+#define PCI_CLASS_SIMPLE_COMMS_CTLR         0x07
+#define PCI_CLASS_BASE_SYSTEM_DEV           0x08
+#define PCI_CLASS_INPUT_DEV                 0x09
+#define PCI_CLASS_DOCKING_STATION           0x0a
+#define PCI_CLASS_PROCESSOR                 0x0b
+#define PCI_CLASS_SERIAL_BUS_CTLR           0x0c
+#define PCI_CLASS_WIRELESS_CTLR             0x0d
+#define PCI_CLASS_INTELLIGENT_IO_CTLR       0x0e
+#define PCI_CLASS_SATELLITE_COMMS_CTLR      0x0f
+#define PCI_CLASS_ENCRYPTION_DECRYPTION     0x10
+#define PCI_CLASS_DATA_ACQ_SIGNAL_PROC      0x11
+#define PCI_CLASS_NOT_DEFINED               0xff
+
+/* PCI device subclasses for class 0 */
+#define PCI_SUBCLASS_PRE_20_NON_VGA         0x00
+#define PCI_SUBCLASS_PRE_20_VGA             0x01
+
+/* PCI device subclasses for class 1 (mass storage controllers)*/
+#define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR      0x00
+#define PCI_SUBCLASS_MSC_IDE_CTLR           0x01
+#define PCI_SUBCLASS_MSC_FLOPPY_CTLR        0x02
+#define PCI_SUBCLASS_MSC_IPI_CTLR           0x03
+#define PCI_SUBCLASS_MSC_RAID_CTLR          0x04
+#define PCI_SUBCLASS_MSC_OTHER              0x80
+
+/* PCI device subclasses for class 2 (network controllers)*/
+#define PCI_SUBCLASS_NET_ETHERNET_CTLR      0x00
+#define PCI_SUBCLASS_NET_TOKEN_RING_CTLR    0x01
+#define PCI_SUBCLASS_NET_FDDI_CTLR          0x02
+#define PCI_SUBCLASS_NET_ATM_CTLR           0x03
+#define PCI_SUBCLASS_NET_ISDN_CTLR          0x04
+#define PCI_SUBCLASS_NET_OTHER              0x80
+
+/* PCI device subclasses for class 3 (display controllers)*/
+#define PCI_SUBCLASS_VID_VGA_CTLR           0x00
+#define PCI_SUBCLASS_VID_XGA_CTLR           0x01
+#define PCI_SUBCLASS_VID_3D_CTLR            0x02
+#define PCI_SUBCLASS_VID_OTHER              0x80
+
+/* PCI device subclasses for class 4 (multimedia device)*/
+#define PCI_SUBCLASS_MM_VIDEO_DEV           0x00
+#define PCI_SUBCLASS_MM_AUDIO_DEV           0x01
+#define PCI_SUBCLASS_MM_TELEPHONY_DEV       0x02
+#define PCI_SUBCLASS_MM_OTHER               0x80
+
+/* PCI device subclasses for class 5 (memory controller)*/
+#define PCI_SUBCLASS_MEM_RAM                0x00
+#define PCI_SUBCLASS_MEM_FLASH              0x01
+#define PCI_SUBCLASS_MEM_OTHER              0x80
+
+/* PCI device subclasses for class 6 (bridge device)*/
+#define PCI_SUBCLASS_BR_HOST                0x00
+#define PCI_SUBCLASS_BR_ISA                 0x01
+#define PCI_SUBCLASS_BR_EISA                0x02
+#define PCI_SUBCLASS_BR_MCA                 0x03
+#define PCI_SUBCLASS_BR_PCI_TO_PCI          0x04
+#define PCI_SUBCLASS_BR_PCMCIA              0x05
+#define PCI_SUBCLASS_BR_NUBUS               0x06
+#define PCI_SUBCLASS_BR_CARDBUS             0x07
+#define PCI_SUBCLASS_BR_RACEWAY             0x08
+#define PCI_SUBCLASS_BR_OTHER               0x80
+
+#define PCI_SUBCLASS_COM_SERIAL             0x00
+#define PCI_SUBCLASS_COM_PARALLEL           0x01
+#define PCI_SUBCLASS_COM_MULTIPORT          0x02
+#define PCI_SUBCLASS_COM_MODEM              0x03
+#define PCI_SUBCLASS_COM_OTHER              0x80
+
+#define PCI_SUBCLASS_SYS_INTERRUPT_CTLR     0x00
+#define PCI_SUBCLASS_SYS_DMA_CTLR           0x01
+#define PCI_SUBCLASS_SYS_SYSTEM_TIMER       0x02
+#define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK    0x03
+#define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR   0x04
+#define PCI_SUBCLASS_SYS_SDIO_CTRL          0x05
+#define PCI_SUBCLASS_SYS_OTHER              0x80
+
+#define PCI_SUBCLASS_INP_KEYBOARD           0x00
+#define PCI_SUBCLASS_INP_DIGITIZER          0x01
+#define PCI_SUBCLASS_INP_MOUSE              0x02
+#define PCI_SUBCLASS_INP_SCANNER            0x03
+#define PCI_SUBCLASS_INP_GAMEPORT           0x04
+#define PCI_SUBCLASS_INP_OTHER              0x80
+
+#define PCI_SUBCLASS_DOC_GENERIC            0x00
+#define PCI_SUBCLASS_DOC_OTHER              0x80
+
+#define PCI_SUBCLASS_PROC_386               0x00
+#define PCI_SUBCLASS_PROC_486               0x01
+#define PCI_SUBCLASS_PROC_PENTIUM           0x02
+#define PCI_SUBCLASS_PROC_ALPHA             0x10
+#define PCI_SUBCLASS_PROC_POWERPC           0x20
+#define PCI_SUBCLASS_PROC_COPROCESSOR       0x40
+
+/* PCI device subclasses for class C (serial bus controller)*/
+#define PCI_SUBCLASS_SB_IEEE1394            0x00
+#define PCI_SUBCLASS_SB_ACCESS              0x01
+#define PCI_SUBCLASS_SB_SSA                 0x02
+#define PCI_SUBCLASS_SB_USB                 0x03
+#define PCI_SUBCLASS_SB_FIBRE_CHANNEL       0x04
+#define PCI_SUBCLASS_SB_SMBUS               0x05
+
+#define PCI_SUBCLASS_WIRELESS_IRDA          0x00
+#define PCI_SUBCLASS_WIRELESS_CON_IR        0x01
+#define PCI_SUBCLASS_WIRELESS_RF            0x10
+#define PCI_SUBCLASS_WIRELESS_OTHER         0x80
+
+#define PCI_SUBCLASS_INTIO_I2O              0x00
+
+#define PCI_SUBCLASS_SAT_TV                 0x01
+#define PCI_SUBCLASS_SAT_AUDIO              0x02
+#define PCI_SUBCLASS_SAT_VOICE              0x03
+#define PCI_SUBCLASS_SAT_DATA               0x04
+
+#define PCI_SUBCLASS_CRYPTO_NET_COMP        0x00
+#define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT   0x10
+#define PCI_SUBCLASS_CRYPTO_OTHER           0x80
+
+#define PCI_SUBCLASS_DASP_DPIO              0x00
+#define PCI_SUBCLASS_DASP_OTHER             0x80
+
+#define PCI_ADDRESS_IO_SPACE                0x00000001
+#define PCI_ADDRESS_MEMORY_TYPE_MASK        0x00000006
+#define PCI_ADDRESS_MEMORY_PREFETCHABLE     0x00000008
+#define PCI_ADDRESS_IO_ADDRESS_MASK         0xfffffffc
+#define PCI_ADDRESS_MEMORY_ADDRESS_MASK     0xfffffff0
+#define PCI_ADDRESS_ROM_ADDRESS_MASK        0xfffff800
+
+#define PCI_TYPE_32BIT                      0
+#define PCI_TYPE_20BIT                      2
+#define PCI_TYPE_64BIT                      4
+
+#define PCI_ROMADDRESS_ENABLED              0x00000001
+
+#endif /* _PCI_X_ */
+
+#define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION       1
+
+typedef NTSTATUS
+(NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)(
+  IN OUT PVOID Context);
+typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE;
+
+typedef NTSTATUS
+(NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)(
+  IN OUT PVOID Context);
+typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE;
+
+typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode;
+  PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode;
+} PCI_EXPRESS_LINK_QUIESCENT_INTERFACE, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE;
+
+#define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION            1
+
+typedef ULONG
+(NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)(
+  IN PVOID Context,
+  OUT PVOID Buffer,
+  IN ULONG Offset,
+  IN ULONG Length);
+
+typedef ULONG
+(NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)(
+  IN PVOID Context,
+  IN PVOID Buffer,
+  IN ULONG Offset,
+  IN ULONG Length);
+
+typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace;
+  PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace;
+} PCI_EXPRESS_ROOT_PORT_INTERFACE, *PPCI_EXPRESS_ROOT_PORT_INTERFACE;
+
+#define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION            1
+
+typedef NTSTATUS
+(NTAPI PCI_MSIX_SET_ENTRY)(
+  IN PVOID Context,
+  IN ULONG TableEntry,
+  IN ULONG MessageNumber);
+typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY;
+
+typedef NTSTATUS
+(NTAPI PCI_MSIX_MASKUNMASK_ENTRY)(
+  IN PVOID Context,
+  IN ULONG TableEntry);
+typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY;
+
+typedef NTSTATUS
+(NTAPI PCI_MSIX_GET_ENTRY)(
+  IN PVOID Context,
+  IN ULONG TableEntry,
+  OUT PULONG MessageNumber,
+  OUT PBOOLEAN Masked);
+typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY;
+
+typedef NTSTATUS
+(NTAPI PCI_MSIX_GET_TABLE_SIZE)(
+  IN PVOID Context,
+  OUT PULONG TableSize);
+typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE;
+
+typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PPCI_MSIX_SET_ENTRY SetTableEntry;
+  PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry;
+  PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry;
+  PPCI_MSIX_GET_ENTRY GetTableEntry;
+  PPCI_MSIX_GET_TABLE_SIZE GetTableSize;
+} PCI_MSIX_TABLE_CONFIG_INTERFACE, *PPCI_MSIX_TABLE_CONFIG_INTERFACE;
+
+#define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
+        RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
+$endif
+$if (_NTDDK_)
+
+#ifndef _ARC_DDK_
+#define _ARC_DDK_
+typedef enum _CONFIGURATION_TYPE {
+  ArcSystem,
+  CentralProcessor,
+  FloatingPointProcessor,
+  PrimaryIcache,
+  PrimaryDcache,
+  SecondaryIcache,
+  SecondaryDcache,
+  SecondaryCache,
+  EisaAdapter,
+  TcAdapter,
+  ScsiAdapter,
+  DtiAdapter,
+  MultiFunctionAdapter,
+  DiskController,
+  TapeController,
+  CdromController,
+  WormController,
+  SerialController,
+  NetworkController,
+  DisplayController,
+  ParallelController,
+  PointerController,
+  KeyboardController,
+  AudioController,
+  OtherController,
+  DiskPeripheral,
+  FloppyDiskPeripheral,
+  TapePeripheral,
+  ModemPeripheral,
+  MonitorPeripheral,
+  PrinterPeripheral,
+  PointerPeripheral,
+  KeyboardPeripheral,
+  TerminalPeripheral,
+  OtherPeripheral,
+  LinePeripheral,
+  NetworkPeripheral,
+  SystemMemory,
+  DockingInformation,
+  RealModeIrqRoutingTable,
+  RealModePCIEnumeration,
+  MaximumType
+} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
+#endif /* !_ARC_DDK_ */
+
+/*
+** IRP function codes
+*/
+
+#define IRP_MN_QUERY_DIRECTORY            0x01
+#define IRP_MN_NOTIFY_CHANGE_DIRECTORY    0x02
+
+#define IRP_MN_USER_FS_REQUEST            0x00
+#define IRP_MN_MOUNT_VOLUME               0x01
+#define IRP_MN_VERIFY_VOLUME              0x02
+#define IRP_MN_LOAD_FILE_SYSTEM           0x03
+#define IRP_MN_TRACK_LINK                 0x04
+#define IRP_MN_KERNEL_CALL                0x04
+
+#define IRP_MN_LOCK                       0x01
+#define IRP_MN_UNLOCK_SINGLE              0x02
+#define IRP_MN_UNLOCK_ALL                 0x03
+#define IRP_MN_UNLOCK_ALL_BY_KEY          0x04
+
+#define IRP_MN_FLUSH_AND_PURGE          0x01
+
+#define IRP_MN_NORMAL                     0x00
+#define IRP_MN_DPC                        0x01
+#define IRP_MN_MDL                        0x02
+#define IRP_MN_COMPLETE                   0x04
+#define IRP_MN_COMPRESSED                 0x08
+
+#define IRP_MN_MDL_DPC                    (IRP_MN_MDL | IRP_MN_DPC)
+#define IRP_MN_COMPLETE_MDL               (IRP_MN_COMPLETE | IRP_MN_MDL)
+#define IRP_MN_COMPLETE_MDL_DPC           (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
+
+#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
+
+#define IO_CHECK_CREATE_PARAMETERS      0x0200
+#define IO_ATTACH_DEVICE                0x0400
+#define IO_IGNORE_SHARE_ACCESS_CHECK    0x0800
+
+typedef
+NTSTATUS
+(NTAPI *PIO_QUERY_DEVICE_ROUTINE)(
+  IN PVOID Context,
+  IN PUNICODE_STRING PathName,
+  IN INTERFACE_TYPE BusType,
+  IN ULONG BusNumber,
+  IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
+  IN CONFIGURATION_TYPE ControllerType,
+  IN ULONG ControllerNumber,
+  IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
+  IN CONFIGURATION_TYPE PeripheralType,
+  IN ULONG PeripheralNumber,
+  IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
+
+typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
+  IoQueryDeviceIdentifier = 0,
+  IoQueryDeviceConfigurationData,
+  IoQueryDeviceComponentInformation,
+  IoQueryDeviceMaxData
+} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
+
+typedef VOID
+(NTAPI *PDRIVER_REINITIALIZE)(
+  IN struct _DRIVER_OBJECT *DriverObject,
+  IN PVOID Context OPTIONAL,
+  IN ULONG Count);
+
+typedef struct _CONTROLLER_OBJECT {
+  CSHORT Type;
+  CSHORT Size;
+  PVOID ControllerExtension;
+  KDEVICE_QUEUE DeviceWaitQueue;
+  ULONG Spare1;
+  LARGE_INTEGER Spare2;
+} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
+
+#define DRVO_REINIT_REGISTERED          0x00000008
+#define DRVO_INITIALIZED                0x00000010
+#define DRVO_BOOTREINIT_REGISTERED      0x00000020
+#define DRVO_LEGACY_RESOURCES           0x00000040
+
+typedef struct _CONFIGURATION_INFORMATION {
+  ULONG DiskCount;
+  ULONG FloppyCount;
+  ULONG CdRomCount;
+  ULONG TapeCount;
+  ULONG ScsiPortCount;
+  ULONG SerialCount;
+  ULONG ParallelCount;
+  BOOLEAN AtDiskPrimaryAddressClaimed;
+  BOOLEAN AtDiskSecondaryAddressClaimed;
+  ULONG Version;
+  ULONG MediumChangerCount;
+} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
+
+typedef struct _DISK_SIGNATURE {
+  ULONG PartitionStyle;
+  _ANONYMOUS_UNION union {
+    struct {
+      ULONG Signature;
+      ULONG CheckSum;
+    } Mbr;
+    struct {
+      GUID DiskId;
+    } Gpt;
+  } DUMMYUNIONNAME;
+} DISK_SIGNATURE, *PDISK_SIGNATURE;
+
+typedef struct _TXN_PARAMETER_BLOCK {
+  USHORT Length;
+  USHORT TxFsContext;
+  PVOID TransactionObject;
+} TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK;
+
+#define TXF_MINIVERSION_DEFAULT_VIEW        (0xFFFE)
+
+typedef struct _IO_DRIVER_CREATE_CONTEXT {
+  CSHORT Size;
+  struct _ECP_LIST *ExtraCreateParameter;
+  PVOID DeviceObjectHint;
+  PTXN_PARAMETER_BLOCK TxnParameters;
+} IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT;
+
+typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PGET_SET_DEVICE_DATA SetBusData;
+  PGET_SET_DEVICE_DATA GetBusData;
+  UCHAR CapabilityID;
+} AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD;
+
+typedef NTSTATUS
+(NTAPI *PGET_LOCATION_STRING)(
+  IN OUT PVOID Context OPTIONAL,
+  OUT PWCHAR *LocationStrings);
+
+typedef struct _PNP_LOCATION_INTERFACE {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PGET_LOCATION_STRING GetLocationString;
+} PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE;
+
+typedef enum _ARBITER_ACTION {
+  ArbiterActionTestAllocation,
+  ArbiterActionRetestAllocation,
+  ArbiterActionCommitAllocation,
+  ArbiterActionRollbackAllocation,
+  ArbiterActionQueryAllocatedResources,
+  ArbiterActionWriteReservedResources,
+  ArbiterActionQueryConflict,
+  ArbiterActionQueryArbitrate,
+  ArbiterActionAddReserved,
+  ArbiterActionBootAllocation
+} ARBITER_ACTION, *PARBITER_ACTION;
+
+typedef struct _ARBITER_CONFLICT_INFO {
+  PDEVICE_OBJECT OwningObject;
+  ULONGLONG Start;
+  ULONGLONG End;
+} ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
+
+typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS {
+  IN OUT PLIST_ENTRY ArbitrationList;
+  IN ULONG AllocateFromCount;
+  IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
+} ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS;
+
+typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS {
+  IN OUT PLIST_ENTRY ArbitrationList;
+  IN ULONG AllocateFromCount;
+  IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
+} ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS;
+
+typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS {
+  IN OUT PLIST_ENTRY ArbitrationList;
+} ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS;
+
+typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS {
+  OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources;
+} ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS;
+
+typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS {
+  IN PDEVICE_OBJECT PhysicalDeviceObject;
+  IN PIO_RESOURCE_DESCRIPTOR ConflictingResource;
+  OUT PULONG ConflictCount;
+  OUT PARBITER_CONFLICT_INFO *Conflicts;
+} ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS;
+
+typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS {
+  IN PLIST_ENTRY ArbitrationList;
+} ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS;
+
+typedef struct _ARBITER_ADD_RESERVED_PARAMETERS {
+  IN PDEVICE_OBJECT ReserveDevice;
+} ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS;
+
+typedef struct _ARBITER_PARAMETERS {
+  union {
+    ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation;
+    ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation;
+    ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation;
+    ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources;
+    ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict;
+    ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate;
+    ARBITER_ADD_RESERVED_PARAMETERS AddReserved;
+  } Parameters;
+} ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
+
+typedef enum _ARBITER_REQUEST_SOURCE {
+  ArbiterRequestUndefined = -1,
+  ArbiterRequestLegacyReported,
+  ArbiterRequestHalReported,
+  ArbiterRequestLegacyAssigned,
+  ArbiterRequestPnpDetected,
+  ArbiterRequestPnpEnumerated
+} ARBITER_REQUEST_SOURCE;
+
+typedef enum _ARBITER_RESULT {
+  ArbiterResultUndefined = -1,
+  ArbiterResultSuccess,
+  ArbiterResultExternalConflict,
+  ArbiterResultNullRequest
+} ARBITER_RESULT;
+
+#define ARBITER_FLAG_BOOT_CONFIG 0x00000001
+
+typedef struct _ARBITER_LIST_ENTRY {
+  LIST_ENTRY ListEntry;
+  ULONG AlternativeCount;
+  PIO_RESOURCE_DESCRIPTOR Alternatives;
+  PDEVICE_OBJECT PhysicalDeviceObject;
+  ARBITER_REQUEST_SOURCE RequestSource;
+  ULONG Flags;
+  LONG_PTR WorkSpace;
+  INTERFACE_TYPE InterfaceType;
+  ULONG SlotNumber;
+  ULONG BusNumber;
+  PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment;
+  PIO_RESOURCE_DESCRIPTOR SelectedAlternative;
+  ARBITER_RESULT Result;
+} ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY;
+
+typedef NTSTATUS
+(NTAPI *PARBITER_HANDLER)(
+  IN OUT PVOID Context,
+  IN ARBITER_ACTION Action,
+  IN OUT PARBITER_PARAMETERS Parameters);
+
+#define ARBITER_PARTIAL 0x00000001
+
+typedef struct _ARBITER_INTERFACE {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PARBITER_HANDLER ArbiterHandler;
+  ULONG Flags;
+} ARBITER_INTERFACE, *PARBITER_INTERFACE;
+
+typedef enum _RESOURCE_TRANSLATION_DIRECTION {
+  TranslateChildToParent,
+  TranslateParentToChild
+} RESOURCE_TRANSLATION_DIRECTION;
+
+typedef NTSTATUS
+(NTAPI *PTRANSLATE_RESOURCE_HANDLER)(
+  IN OUT PVOID Context OPTIONAL,
+  IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
+  IN RESOURCE_TRANSLATION_DIRECTION Direction,
+  IN ULONG AlternativesCount OPTIONAL,
+  IN IO_RESOURCE_DESCRIPTOR Alternatives[],
+  IN PDEVICE_OBJECT PhysicalDeviceObject,
+  OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target);
+
+typedef NTSTATUS
+(NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
+  IN OUT PVOID Context OPTIONAL,
+  IN PIO_RESOURCE_DESCRIPTOR Source,
+  IN PDEVICE_OBJECT PhysicalDeviceObject,
+  OUT PULONG TargetCount,
+  OUT PIO_RESOURCE_DESCRIPTOR *Target);
+
+typedef struct _TRANSLATOR_INTERFACE {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PTRANSLATE_RESOURCE_HANDLER TranslateResources;
+  PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
+} TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
+
+typedef struct _PCI_AGP_CAPABILITY {
+  PCI_CAPABILITIES_HEADER Header;
+  USHORT Minor:4;
+  USHORT Major:4;
+  USHORT Rsvd1:8;
+  struct _PCI_AGP_STATUS {
+    ULONG Rate:3;
+    ULONG Agp3Mode:1;
+    ULONG FastWrite:1;
+    ULONG FourGB:1;
+    ULONG HostTransDisable:1;
+    ULONG Gart64:1;
+    ULONG ITA_Coherent:1;
+    ULONG SideBandAddressing:1;
+    ULONG CalibrationCycle:3;
+    ULONG AsyncRequestSize:3;
+    ULONG Rsvd1:1;
+    ULONG Isoch:1;
+    ULONG Rsvd2:6;
+    ULONG RequestQueueDepthMaximum:8;
+  } AGPStatus;
+  struct _PCI_AGP_COMMAND {
+    ULONG Rate:3;
+    ULONG Rsvd1:1;
+    ULONG FastWriteEnable:1;
+    ULONG FourGBEnable:1;
+    ULONG Rsvd2:1;
+    ULONG Gart64:1;
+    ULONG AGPEnable:1;
+    ULONG SBAEnable:1;
+    ULONG CalibrationCycle:3;
+    ULONG AsyncReqSize:3;
+    ULONG Rsvd3:8;
+    ULONG RequestQueueDepth:8;
+  } AGPCommand;
+} PCI_AGP_CAPABILITY, *PPCI_AGP_CAPABILITY;
+
+typedef enum _EXTENDED_AGP_REGISTER {
+  IsochStatus,
+  AgpControl,
+  ApertureSize,
+  AperturePageSize,
+  GartLow,
+  GartHigh,
+  IsochCommand
+} EXTENDED_AGP_REGISTER, *PEXTENDED_AGP_REGISTER;
+
+typedef struct _PCI_AGP_ISOCH_STATUS {
+  ULONG ErrorCode:2;
+  ULONG Rsvd1:1;
+  ULONG Isoch_L:3;
+  ULONG Isoch_Y:2;
+  ULONG Isoch_N:8;
+  ULONG Rsvd2:16;
+} PCI_AGP_ISOCH_STATUS, *PPCI_AGP_ISOCH_STATUS;
+
+typedef struct _PCI_AGP_CONTROL {
+  ULONG Rsvd1:7;
+  ULONG GTLB_Enable:1;
+  ULONG AP_Enable:1;
+  ULONG CAL_Disable:1;
+  ULONG Rsvd2:22;
+} PCI_AGP_CONTROL, *PPCI_AGP_CONTROL;
+
+typedef struct _PCI_AGP_APERTURE_PAGE_SIZE {
+  USHORT PageSizeMask:11;
+  USHORT Rsvd1:1;
+  USHORT PageSizeSelect:4;
+} PCI_AGP_APERTURE_PAGE_SIZE, *PPCI_AGP_APERTURE_PAGE_SIZE;
+
+typedef struct _PCI_AGP_ISOCH_COMMAND {
+  USHORT Rsvd1:6;
+  USHORT Isoch_Y:2;
+  USHORT Isoch_N:8;
+} PCI_AGP_ISOCH_COMMAND, *PPCI_AGP_ISOCH_COMMAND;
+
+typedef struct PCI_AGP_EXTENDED_CAPABILITY {
+  PCI_AGP_ISOCH_STATUS IsochStatus;
+  PCI_AGP_CONTROL AgpControl;
+  USHORT ApertureSize;
+  PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize;
+  ULONG GartLow;
+  ULONG GartHigh;
+  PCI_AGP_ISOCH_COMMAND IsochCommand;
+} PCI_AGP_EXTENDED_CAPABILITY, *PPCI_AGP_EXTENDED_CAPABILITY;
+
+#define PCI_AGP_RATE_1X     0x1
+#define PCI_AGP_RATE_2X     0x2
+#define PCI_AGP_RATE_4X     0x4
+
+#define PCIX_MODE_CONVENTIONAL_PCI  0x0
+#define PCIX_MODE1_66MHZ            0x1
+#define PCIX_MODE1_100MHZ           0x2
+#define PCIX_MODE1_133MHZ           0x3
+#define PCIX_MODE2_266_66MHZ        0x9
+#define PCIX_MODE2_266_100MHZ       0xA
+#define PCIX_MODE2_266_133MHZ       0xB
+#define PCIX_MODE2_533_66MHZ        0xD
+#define PCIX_MODE2_533_100MHZ       0xE
+#define PCIX_MODE2_533_133MHZ       0xF
+
+#define PCIX_VERSION_MODE1_ONLY     0x0
+#define PCIX_VERSION_MODE2_ECC      0x1
+#define PCIX_VERSION_DUAL_MODE_ECC  0x2
+
+typedef struct _PCIX_BRIDGE_CAPABILITY {
+  PCI_CAPABILITIES_HEADER Header;
+  union {
+    struct {
+      USHORT Bus64Bit:1;
+      USHORT Bus133MHzCapable:1;
+      USHORT SplitCompletionDiscarded:1;
+      USHORT UnexpectedSplitCompletion:1;
+      USHORT SplitCompletionOverrun:1;
+      USHORT SplitRequestDelayed:1;
+      USHORT BusModeFrequency:4;
+      USHORT Rsvd:2;
+      USHORT Version:2;
+      USHORT Bus266MHzCapable:1;
+      USHORT Bus533MHzCapable:1;
+    } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+  } SecondaryStatus;
+  union {
+    struct {
+      ULONG FunctionNumber:3;
+      ULONG DeviceNumber:5;
+      ULONG BusNumber:8;
+      ULONG Device64Bit:1;
+      ULONG Device133MHzCapable:1;
+      ULONG SplitCompletionDiscarded:1;
+      ULONG UnexpectedSplitCompletion:1;
+      ULONG SplitCompletionOverrun:1;
+      ULONG SplitRequestDelayed:1;
+      ULONG Rsvd:7;
+      ULONG DIMCapable:1;
+      ULONG Device266MHzCapable:1;
+      ULONG Device533MHzCapable:1;
+    } DUMMYSTRUCTNAME;
+    ULONG AsULONG;
+  } BridgeStatus;
+  USHORT UpstreamSplitTransactionCapacity;
+  USHORT UpstreamSplitTransactionLimit;
+  USHORT DownstreamSplitTransactionCapacity;
+  USHORT DownstreamSplitTransactionLimit;
+  union {
+    struct {
+      ULONG SelectSecondaryRegisters:1;
+      ULONG ErrorPresentInOtherBank:1;
+      ULONG AdditionalCorrectableError:1;
+      ULONG AdditionalUncorrectableError:1;
+      ULONG ErrorPhase:3;
+      ULONG ErrorCorrected:1;
+      ULONG Syndrome:8;
+      ULONG ErrorFirstCommand:4;
+      ULONG ErrorSecondCommand:4;
+      ULONG ErrorUpperAttributes:4;
+      ULONG ControlUpdateEnable:1;
+      ULONG Rsvd:1;
+      ULONG DisableSingleBitCorrection:1;
+      ULONG EccMode:1;
+    } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+  } EccControlStatus;
+  ULONG EccFirstAddress;
+  ULONG EccSecondAddress;
+  ULONG EccAttribute;
+} PCIX_BRIDGE_CAPABILITY, *PPCIX_BRIDGE_CAPABILITY;
+
+typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY {
+  PCI_CAPABILITIES_HEADER Header;
+  USHORT Reserved;
+  USHORT SubVendorID;
+  USHORT SubSystemID;
+} PCI_SUBSYSTEM_IDS_CAPABILITY, *PPCI_SUBSYSTEM_IDS_CAPABILITY;
+
+#define OSC_FIRMWARE_FAILURE                            0x02
+#define OSC_UNRECOGNIZED_UUID                           0x04
+#define OSC_UNRECOGNIZED_REVISION                       0x08
+#define OSC_CAPABILITIES_MASKED                         0x10
+
+#define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION     0x01
+
+typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD {
+  union {
+    struct {
+      ULONG ExtendedConfigOpRegions:1;
+      ULONG ActiveStatePowerManagement:1;
+      ULONG ClockPowerManagement:1;
+      ULONG SegmentGroups:1;
+      ULONG MessageSignaledInterrupts:1;
+      ULONG WindowsHardwareErrorArchitecture:1;
+      ULONG Reserved:26;
+    } DUMMYSTRUCTNAME;
+    ULONG AsULONG;
+  } u;
+} PCI_ROOT_BUS_OSC_SUPPORT_FIELD, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD;
+
+typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD {
+  union {
+    struct {
+      ULONG ExpressNativeHotPlug:1;
+      ULONG ShpcNativeHotPlug:1;
+      ULONG ExpressNativePME:1;
+      ULONG ExpressAdvancedErrorReporting:1;
+      ULONG ExpressCapabilityStructure:1;
+      ULONG Reserved:27;
+    } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+  } u;
+} PCI_ROOT_BUS_OSC_CONTROL_FIELD, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD;
+
+typedef enum _PCI_HARDWARE_INTERFACE {
+  PciConventional,
+  PciXMode1,
+  PciXMode2,
+  PciExpress
+} PCI_HARDWARE_INTERFACE, *PPCI_HARDWARE_INTERFACE;
+
+typedef enum {
+  BusWidth32Bits,
+  BusWidth64Bits
+} PCI_BUS_WIDTH;
+
+typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY {
+  PCI_HARDWARE_INTERFACE SecondaryInterface;
+  struct {
+    BOOLEAN BusCapabilitiesFound;
+    ULONG CurrentSpeedAndMode;
+    ULONG SupportedSpeedsAndModes;
+    BOOLEAN DeviceIDMessagingCapable;
+    PCI_BUS_WIDTH SecondaryBusWidth;
+  } DUMMYSTRUCTNAME;
+  PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport;
+  PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest;
+  PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted;
+} PCI_ROOT_BUS_HARDWARE_CAPABILITY, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY;
+
+typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER {
+  struct {
+    USHORT CapabilityVersion:4;
+    USHORT DeviceType:4;
+    USHORT SlotImplemented:1;
+    USHORT InterruptMessageNumber:5;
+    USHORT Rsvd:2;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_CAPABILITIES_REGISTER, *PPCI_EXPRESS_CAPABILITIES_REGISTER;
+
+typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER {
+  struct {
+    ULONG MaxPayloadSizeSupported:3;
+    ULONG PhantomFunctionsSupported:2;
+    ULONG ExtendedTagSupported:1;
+    ULONG L0sAcceptableLatency:3;
+    ULONG L1AcceptableLatency:3;
+    ULONG Undefined:3;
+    ULONG RoleBasedErrorReporting:1;
+    ULONG Rsvd1:2;
+    ULONG CapturedSlotPowerLimit:8;
+    ULONG CapturedSlotPowerLimitScale:2;
+    ULONG Rsvd2:4;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER;
+
+#define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
+
+typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER {
+  struct {
+    USHORT CorrectableErrorEnable:1;
+    USHORT NonFatalErrorEnable:1;
+    USHORT FatalErrorEnable:1;
+    USHORT UnsupportedRequestErrorEnable:1;
+    USHORT EnableRelaxedOrder:1;
+    USHORT MaxPayloadSize:3;
+    USHORT ExtendedTagEnable:1;
+    USHORT PhantomFunctionsEnable:1;
+    USHORT AuxPowerEnable:1;
+    USHORT NoSnoopEnable:1;
+    USHORT MaxReadRequestSize:3;
+    USHORT BridgeConfigRetryEnable:1;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_DEVICE_CONTROL_REGISTER, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER;
+
+#define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
+
+typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER {
+  struct {
+    USHORT CorrectableErrorDetected:1;
+    USHORT NonFatalErrorDetected:1;
+    USHORT FatalErrorDetected:1;
+    USHORT UnsupportedRequestDetected:1;
+    USHORT AuxPowerDetected:1;
+    USHORT TransactionsPending:1;
+    USHORT Rsvd:10;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_DEVICE_STATUS_REGISTER, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER;
+
+typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER {
+  struct {
+    ULONG MaximumLinkSpeed:4;
+    ULONG MaximumLinkWidth:6;
+    ULONG ActiveStatePMSupport:2;
+    ULONG L0sExitLatency:3;
+    ULONG L1ExitLatency:3;
+    ULONG ClockPowerManagement:1;
+    ULONG SurpriseDownErrorReportingCapable:1;
+    ULONG DataLinkLayerActiveReportingCapable:1;
+    ULONG Rsvd:3;
+    ULONG PortNumber:8;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_LINK_CAPABILITIES_REGISTER, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER;
+
+typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER {
+  struct {
+    USHORT ActiveStatePMControl:2;
+    USHORT Rsvd1:1;
+    USHORT ReadCompletionBoundary:1;
+    USHORT LinkDisable:1;
+    USHORT RetrainLink:1;
+    USHORT CommonClockConfig:1;
+    USHORT ExtendedSynch:1;
+    USHORT EnableClockPowerManagement:1;
+    USHORT Rsvd2:7;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_LINK_CONTROL_REGISTER, *PPCI_EXPRESS_LINK_CONTROL_REGISTER;
+
+typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER {
+  struct {
+    USHORT LinkSpeed:4;
+    USHORT LinkWidth:6;
+    USHORT Undefined:1;
+    USHORT LinkTraining:1;
+    USHORT SlotClockConfig:1;
+    USHORT DataLinkLayerActive:1;
+    USHORT Rsvd:2;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_LINK_STATUS_REGISTER, *PPCI_EXPRESS_LINK_STATUS_REGISTER;
+
+typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER {
+  struct {
+    ULONG AttentionButtonPresent:1;
+    ULONG PowerControllerPresent:1;
+    ULONG MRLSensorPresent:1;
+    ULONG AttentionIndicatorPresent:1;
+    ULONG PowerIndicatorPresent:1;
+    ULONG HotPlugSurprise:1;
+    ULONG HotPlugCapable:1;
+    ULONG SlotPowerLimit:8;
+    ULONG SlotPowerLimitScale:2;
+    ULONG ElectromechanicalLockPresent:1;
+    ULONG NoCommandCompletedSupport:1;
+    ULONG PhysicalSlotNumber:13;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER;
+
+typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER {
+  struct {
+    USHORT AttentionButtonEnable:1;
+    USHORT PowerFaultDetectEnable:1;
+    USHORT MRLSensorEnable:1;
+    USHORT PresenceDetectEnable:1;
+    USHORT CommandCompletedEnable:1;
+    USHORT HotPlugInterruptEnable:1;
+    USHORT AttentionIndicatorControl:2;
+    USHORT PowerIndicatorControl:2;
+    USHORT PowerControllerControl:1;
+    USHORT ElectromechanicalLockControl:1;
+    USHORT DataLinkStateChangeEnable:1;
+    USHORT Rsvd:3;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER;
+
+typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER {
+  struct {
+    USHORT AttentionButtonPressed:1;
+    USHORT PowerFaultDetected:1;
+    USHORT MRLSensorChanged:1;
+    USHORT PresenceDetectChanged:1;
+    USHORT CommandCompleted:1;
+    USHORT MRLSensorState:1;
+    USHORT PresenceDetectState:1;
+    USHORT ElectromechanicalLockEngaged:1;
+    USHORT DataLinkStateChanged:1;
+    USHORT Rsvd:7;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_SLOT_STATUS_REGISTER, *PPCI_EXPRESS_SLOT_STATUS_REGISTER;
+
+typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER {
+  struct {
+    USHORT CorrectableSerrEnable:1;
+    USHORT NonFatalSerrEnable:1;
+    USHORT FatalSerrEnable:1;
+    USHORT PMEInterruptEnable:1;
+    USHORT CRSSoftwareVisibilityEnable:1;
+    USHORT Rsvd:11;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_ROOT_CONTROL_REGISTER, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER;
+
+typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER {
+  struct {
+    USHORT CRSSoftwareVisibility:1;
+    USHORT Rsvd:15;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER;
+
+typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER {
+  struct {
+    ULONG PMERequestorId:16;
+    ULONG PMEStatus:1;
+    ULONG PMEPending:1;
+    ULONG Rsvd:14;
+  } DUMMYSTRUCTNAME;
+  ULONG AsULONG;
+} PCI_EXPRESS_ROOT_STATUS_REGISTER, *PPCI_EXPRESS_ROOT_STATUS_REGISTER;
+
+typedef struct _PCI_EXPRESS_CAPABILITY {
+  PCI_CAPABILITIES_HEADER Header;
+  PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities;
+  PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities;
+  PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl;
+  PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus;
+  PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities;
+  PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl;
+  PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus;
+  PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities;
+  PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl;
+  PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus;
+  PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl;
+  PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities;
+  PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus;
+} PCI_EXPRESS_CAPABILITY, *PPCI_EXPRESS_CAPABILITY;
+
+typedef enum {
+  MRLClosed = 0,
+  MRLOpen
+} PCI_EXPRESS_MRL_STATE;
+
+typedef enum {
+  SlotEmpty = 0,
+  CardPresent
+} PCI_EXPRESS_CARD_PRESENCE;
+
+typedef enum {
+  IndicatorOn = 1,
+  IndicatorBlink,
+  IndicatorOff
+} PCI_EXPRESS_INDICATOR_STATE;
+
+typedef enum {
+  PowerOn = 0,
+  PowerOff
+} PCI_EXPRESS_POWER_STATE;
+
+typedef enum {
+  L0sEntrySupport = 1,
+  L0sAndL1EntrySupport = 3
+} PCI_EXPRESS_ASPM_SUPPORT;
+
+typedef enum {
+  L0sAndL1EntryDisabled,
+  L0sEntryEnabled,
+  L1EntryEnabled,
+  L0sAndL1EntryEnabled
+} PCI_EXPRESS_ASPM_CONTROL;
+
+typedef enum {
+  L0s_Below64ns = 0,
+  L0s_64ns_128ns,
+  L0s_128ns_256ns,
+  L0s_256ns_512ns,
+  L0s_512ns_1us,
+  L0s_1us_2us,
+  L0s_2us_4us,
+  L0s_Above4us
+} PCI_EXPRESS_L0s_EXIT_LATENCY;
+
+typedef enum {
+  L1_Below1us = 0,
+  L1_1us_2us,
+  L1_2us_4us,
+  L1_4us_8us,
+  L1_8us_16us,
+  L1_16us_32us,
+  L1_32us_64us,
+  L1_Above64us
+} PCI_EXPRESS_L1_EXIT_LATENCY;
+
+typedef enum {
+  PciExpressEndpoint = 0,
+  PciExpressLegacyEndpoint,
+  PciExpressRootPort = 4,
+  PciExpressUpstreamSwitchPort,
+  PciExpressDownstreamSwitchPort,
+  PciExpressToPciXBridge,
+  PciXToExpressBridge,
+  PciExpressRootComplexIntegratedEndpoint,
+  PciExpressRootComplexEventCollector
+} PCI_EXPRESS_DEVICE_TYPE;
+
+typedef enum {
+  MaxPayload128Bytes = 0,
+  MaxPayload256Bytes,
+  MaxPayload512Bytes,
+  MaxPayload1024Bytes,
+  MaxPayload2048Bytes,
+  MaxPayload4096Bytes
+} PCI_EXPRESS_MAX_PAYLOAD_SIZE;
+
+typedef union _PCI_EXPRESS_PME_REQUESTOR_ID {
+  struct {
+    USHORT FunctionNumber:3;
+    USHORT DeviceNumber:5;
+    USHORT BusNumber:8;
+  } DUMMYSTRUCTNAME;
+  USHORT AsUSHORT;
+} PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID;
+
+#if defined(_WIN64)
+
+#ifndef USE_DMA_MACROS
+#define USE_DMA_MACROS
+#endif
+
+#ifndef NO_LEGACY_DRIVERS
+#define NO_LEGACY_DRIVERS
+#endif
+
+#endif /* defined(_WIN64) */
+
+typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE {
+  ResourceTypeSingle = 0,
+  ResourceTypeRange,
+  ResourceTypeExtendedCounterConfiguration,
+  ResourceTypeOverflow,
+  ResourceTypeMax
+} PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE;
+
+typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR {
+  PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type;
+  ULONG Flags;
+  union {
+    ULONG CounterIndex;
+    ULONG ExtendedRegisterAddress;
+    struct {
+      ULONG Begin;
+      ULONG End;
+    } Range;
+  } u;
+} PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR;
+
+typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST {
+  ULONG Count;
+  PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY];
+} PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST;
+
+typedef VOID
+(NTAPI *PciPin2Line)(
+  IN struct _BUS_HANDLER *BusHandler,
+  IN struct _BUS_HANDLER *RootHandler,
+  IN PCI_SLOT_NUMBER SlotNumber,
+  IN PPCI_COMMON_CONFIG PciData);
+
+typedef VOID
+(NTAPI *PciLine2Pin)(
+  IN struct _BUS_HANDLER *BusHandler,
+  IN struct _BUS_HANDLER *RootHandler,
+  IN PCI_SLOT_NUMBER SlotNumber,
+  IN PPCI_COMMON_CONFIG PciNewData,
+  IN PPCI_COMMON_CONFIG PciOldData);
+
+typedef VOID
+(NTAPI *PciReadWriteConfig)(
+  IN struct _BUS_HANDLER *BusHandler,
+  IN PCI_SLOT_NUMBER Slot,
+  IN PVOID Buffer,
+  IN ULONG Offset,
+  IN ULONG Length);
+
+#define PCI_DATA_TAG ' ICP'
+#define PCI_DATA_VERSION 1
+
+typedef struct _PCIBUSDATA {
+  ULONG Tag;
+  ULONG Version;
+  PciReadWriteConfig ReadConfig;
+  PciReadWriteConfig WriteConfig;
+  PciPin2Line Pin2Line;
+  PciLine2Pin Line2Pin;
+  PCI_SLOT_NUMBER ParentSlot;
+  PVOID Reserved[4];
+} PCIBUSDATA, *PPCIBUSDATA;
+
+#ifndef _PCIINTRF_X_
+#define _PCIINTRF_X_
+
+typedef ULONG
+(NTAPI *PCI_READ_WRITE_CONFIG)(
+  IN PVOID Context,
+  IN ULONG BusOffset,
+  IN ULONG Slot,
+  IN PVOID Buffer,
+  IN ULONG Offset,
+  IN ULONG Length);
+
+typedef VOID
+(NTAPI *PCI_PIN_TO_LINE)(
+  IN PVOID Context,
+  IN PPCI_COMMON_CONFIG PciData);
+
+typedef VOID
+(NTAPI *PCI_LINE_TO_PIN)(
+  IN PVOID Context,
+  IN PPCI_COMMON_CONFIG PciNewData,
+  IN PPCI_COMMON_CONFIG PciOldData);
+
+typedef VOID
+(NTAPI *PCI_ROOT_BUS_CAPABILITY)(
+  IN PVOID Context,
+  OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability);
+
+typedef VOID
+(NTAPI *PCI_EXPRESS_WAKE_CONTROL)(
+  IN PVOID Context,
+  IN BOOLEAN EnableWake);
+
+typedef struct _PCI_BUS_INTERFACE_STANDARD {
+  USHORT Size;
+  USHORT Version;
+  PVOID Context;
+  PINTERFACE_REFERENCE InterfaceReference;
+  PINTERFACE_DEREFERENCE InterfaceDereference;
+  PCI_READ_WRITE_CONFIG ReadConfig;
+  PCI_READ_WRITE_CONFIG WriteConfig;
+  PCI_PIN_TO_LINE PinToLine;
+  PCI_LINE_TO_PIN LineToPin;
+  PCI_ROOT_BUS_CAPABILITY RootBusCapability;
+  PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl;
+} PCI_BUS_INTERFACE_STANDARD, *PPCI_BUS_INTERFACE_STANDARD;
+
+#define PCI_BUS_INTERFACE_STANDARD_VERSION 1
+
+#endif /* _PCIINTRF_X_ */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX     0x00004000
+#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX    0x00008000
+#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
+    (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
+     FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
+
+#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
+#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
+#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
+
+#else
+
+#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL     0x00000200
+#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL    0x00000300
+#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK        0x00000300
+
+#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
+#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
+#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+#define FILE_CHARACTERISTICS_PROPAGATED (   FILE_REMOVABLE_MEDIA   | \
+                                            FILE_READ_ONLY_DEVICE  | \
+                                            FILE_FLOPPY_DISKETTE   | \
+                                            FILE_WRITE_ONCE_MEDIA  | \
+                                            FILE_DEVICE_SECURE_OPEN  )
+
+typedef struct _FILE_ALIGNMENT_INFORMATION {
+  ULONG AlignmentRequirement;
+} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
+
+typedef struct _FILE_NAME_INFORMATION {
+  ULONG FileNameLength;
+  WCHAR FileName[1];
+} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
+
+
+typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
+  ULONG FileAttributes;
+  ULONG ReparseTag;
+} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
+
+typedef struct _FILE_DISPOSITION_INFORMATION {
+  BOOLEAN DeleteFile;
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
+
+typedef struct _FILE_END_OF_FILE_INFORMATION {
+  LARGE_INTEGER EndOfFile;
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
+
+typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
+  LARGE_INTEGER ValidDataLength;
+} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
+
+typedef struct _FILE_FS_LABEL_INFORMATION {
+  ULONG VolumeLabelLength;
+  WCHAR VolumeLabel[1];
+} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
+
+typedef struct _FILE_FS_VOLUME_INFORMATION {
+  LARGE_INTEGER VolumeCreationTime;
+  ULONG VolumeSerialNumber;
+  ULONG VolumeLabelLength;
+  BOOLEAN SupportsObjects;
+  WCHAR VolumeLabel[1];
+} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
+
+typedef struct _FILE_FS_SIZE_INFORMATION {
+  LARGE_INTEGER TotalAllocationUnits;
+  LARGE_INTEGER AvailableAllocationUnits;
+  ULONG SectorsPerAllocationUnit;
+  ULONG BytesPerSector;
+} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
+
+typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
+  LARGE_INTEGER TotalAllocationUnits;
+  LARGE_INTEGER CallerAvailableAllocationUnits;
+  LARGE_INTEGER ActualAvailableAllocationUnits;
+  ULONG SectorsPerAllocationUnit;
+  ULONG BytesPerSector;
+} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
+
+typedef struct _FILE_FS_OBJECTID_INFORMATION {
+  UCHAR ObjectId[16];
+  UCHAR ExtendedInfo[48];
+} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
+
+typedef union _FILE_SEGMENT_ELEMENT {
+  PVOID64 Buffer;
+  ULONGLONG Alignment;
+}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
+
+#define IOCTL_AVIO_ALLOCATE_STREAM      CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define IOCTL_AVIO_FREE_STREAM          CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define IOCTL_AVIO_MODIFY_STREAM        CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+
+typedef enum _BUS_DATA_TYPE {
+  ConfigurationSpaceUndefined = -1,
+  Cmos,
+  EisaConfiguration,
+  Pos,
+  CbusConfiguration,
+  PCIConfiguration,
+  VMEConfiguration,
+  NuBusConfiguration,
+  PCMCIAConfiguration,
+  MPIConfiguration,
+  MPSAConfiguration,
+  PNPISAConfiguration,
+  SgiInternalConfiguration,
+  MaximumBusDataType
+} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
+$endif
+
diff --git a/reactos/include/xdk/kdfuncs.h b/reactos/include/xdk/kdfuncs.h
new file mode 100644 (file)
index 0000000..1817849
--- /dev/null
@@ -0,0 +1,192 @@
+/******************************************************************************
+ *                          Kernel Debugger Functions                         *
+ ******************************************************************************/
+$if (_NTDDK_)
+NTSYSAPI
+ULONG
+NTAPI
+DbgPrompt(
+  IN PCCH Prompt,
+  OUT PCH Response,
+  IN ULONG MaximumResponseLength);
+$endif
+
+$if (_WDMDDK_)
+#ifndef _DBGNT_
+
+ULONG
+__cdecl
+DbgPrint(
+  IN PCSTR Format,
+  IN ...);
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTSYSAPI
+ULONG
+__cdecl
+DbgPrintReturnControlC(
+  IN PCCH Format,
+  IN ...);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTSYSAPI
+ULONG
+__cdecl
+DbgPrintEx(
+  IN ULONG ComponentId,
+  IN ULONG Level,
+  IN PCSTR Format,
+  IN ...);
+
+#ifdef _VA_LIST_DEFINED
+
+NTSYSAPI
+ULONG
+NTAPI
+vDbgPrintEx(
+  IN ULONG ComponentId,
+  IN ULONG Level,
+  IN PCCH Format,
+  IN va_list ap);
+
+NTSYSAPI
+ULONG
+NTAPI
+vDbgPrintExWithPrefix(
+  IN PCCH Prefix,
+  IN ULONG ComponentId,
+  IN ULONG Level,
+  IN PCCH Format,
+  IN va_list ap);
+
+#endif /* _VA_LIST_DEFINED */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+DbgQueryDebugFilterState(
+  IN ULONG ComponentId,
+  IN ULONG Level);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+DbgSetDebugFilterState(
+  IN ULONG ComponentId,
+  IN ULONG Level,
+  IN BOOLEAN State);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+typedef VOID
+(*PDEBUG_PRINT_CALLBACK)(
+  IN PSTRING Output,
+  IN ULONG ComponentId,
+  IN ULONG Level);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+DbgSetDebugPrintCallback(
+  IN PDEBUG_PRINT_CALLBACK DebugPrintCallback,
+  IN BOOLEAN Enable);
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#endif /* _DBGNT_ */
+
+#if DBG
+
+#define KdPrint(_x_) DbgPrint _x_
+#define KdPrintEx(_x_) DbgPrintEx _x_
+#define vKdPrintEx(_x_) vDbgPrintEx _x_
+#define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
+#define KdBreakPoint() DbgBreakPoint()
+#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
+
+#else /* !DBG */
+
+#define KdPrint(_x_)
+#define KdPrintEx(_x_)
+#define vKdPrintEx(_x_)
+#define vKdPrintExWithPrefix(_x_)
+#define KdBreakPoint()
+#define KdBreakPointWithStatus(s)
+
+#endif /* !DBG */
+
+#if defined(__GNUC__)
+
+extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent;
+extern NTKERNELAPI BOOLEAN KdDebuggerEnabled;
+#define KD_DEBUGGER_ENABLED KdDebuggerEnabled
+#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
+
+#elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
+
+extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent;
+extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled;
+#define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
+#define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
+
+#else
+
+extern BOOLEAN KdDebuggerNotPresent;
+extern BOOLEAN KdDebuggerEnabled;
+#define KD_DEBUGGER_ENABLED KdDebuggerEnabled
+#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
+
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KdDisableDebugger(VOID);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KdEnableDebugger(VOID);
+
+#if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
+#define DbgBreakPoint __debugbreak
+#else
+VOID
+NTAPI
+DbgBreakPoint(VOID);
+#endif
+
+NTSYSAPI
+VOID
+NTAPI
+DbgBreakPointWithStatus(
+  IN ULONG Status);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KdRefreshDebuggerNotPresent(VOID);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KdChangeOption(
+  IN KD_OPTION Option,
+  IN ULONG InBufferBytes OPTIONAL,
+  IN PVOID InBuffer,
+  IN ULONG OutBufferBytes OPTIONAL,
+  OUT PVOID OutBuffer,
+  OUT PULONG OutBufferNeeded OPTIONAL);
+#endif
+$endif
diff --git a/reactos/include/xdk/kdtypes.h b/reactos/include/xdk/kdtypes.h
new file mode 100644 (file)
index 0000000..b030a23
--- /dev/null
@@ -0,0 +1,94 @@
+/******************************************************************************
+ *                          Kernel Debugger Types                             *
+ ******************************************************************************/
+$if (_NTDDK_)
+typedef struct _DEBUG_DEVICE_ADDRESS {
+  UCHAR Type;
+  BOOLEAN Valid;
+  UCHAR Reserved[2];
+  PUCHAR TranslatedAddress;
+  ULONG Length;
+} DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS;
+
+typedef struct _DEBUG_MEMORY_REQUIREMENTS {
+  PHYSICAL_ADDRESS Start;
+  PHYSICAL_ADDRESS MaxEnd;
+  PVOID VirtualAddress;
+  ULONG Length;
+  BOOLEAN Cached;
+  BOOLEAN Aligned;
+} DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS;
+
+typedef struct _DEBUG_DEVICE_DESCRIPTOR {
+  ULONG Bus;
+  ULONG Slot;
+  USHORT Segment;
+  USHORT VendorID;
+  USHORT DeviceID;
+  UCHAR BaseClass;
+  UCHAR SubClass;
+  UCHAR ProgIf;
+  BOOLEAN Initialized;
+  BOOLEAN Configured;
+  DEBUG_DEVICE_ADDRESS BaseAddress[6];
+  DEBUG_MEMORY_REQUIREMENTS Memory;
+} DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR;
+
+typedef NTSTATUS
+(NTAPI *pKdSetupPciDeviceForDebugging)(
+  IN PVOID LoaderBlock OPTIONAL,
+  IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
+
+typedef NTSTATUS
+(NTAPI *pKdReleasePciDeviceForDebugging)(
+  IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
+
+typedef PVOID
+(NTAPI *pKdGetAcpiTablePhase0)(
+  IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
+  IN ULONG Signature);
+
+typedef VOID
+(NTAPI *pKdCheckPowerButton)(
+  VOID);
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+typedef PVOID
+(NTAPI *pKdMapPhysicalMemory64)(
+  IN PHYSICAL_ADDRESS PhysicalAddress,
+  IN ULONG NumberPages,
+  IN BOOLEAN FlushCurrentTLB);
+
+typedef VOID
+(NTAPI *pKdUnmapVirtualAddress)(
+  IN PVOID VirtualAddress,
+  IN ULONG NumberPages,
+  IN BOOLEAN FlushCurrentTLB);
+#else
+typedef PVOID
+(NTAPI *pKdMapPhysicalMemory64)(
+  IN PHYSICAL_ADDRESS PhysicalAddress,
+  IN ULONG NumberPages);
+
+typedef VOID
+(NTAPI *pKdUnmapVirtualAddress)(
+  IN PVOID VirtualAddress,
+  IN ULONG NumberPages);
+#endif
+
+typedef ULONG
+(NTAPI *pKdGetPciDataByOffset)(
+  IN ULONG BusNumber,
+  IN ULONG SlotNumber,
+  OUT PVOID Buffer,
+  IN ULONG Offset,
+  IN ULONG Length);
+
+typedef ULONG
+(NTAPI *pKdSetPciDataByOffset)(
+  IN ULONG BusNumber,
+  IN ULONG SlotNumber,
+  IN PVOID Buffer,
+  IN ULONG Offset,
+  IN ULONG Length);
+$endif
diff --git a/reactos/include/xdk/kefuncs.h b/reactos/include/xdk/kefuncs.h
new file mode 100644 (file)
index 0000000..716ee87
--- /dev/null
@@ -0,0 +1,1075 @@
+/******************************************************************************
+ *                              Kernel Functions                              *
+ ******************************************************************************/
+$if (_NTDDK_)
+NTKERNELAPI
+VOID
+FASTCALL
+KeInvalidateRangeAllCaches(
+  IN PVOID BaseAddress,
+  IN ULONG Length);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeEvent(
+  OUT PRKEVENT Event,
+  IN EVENT_TYPE Type,
+  IN BOOLEAN State);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeClearEvent(
+  IN OUT PRKEVENT Event);
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+$if (_NTDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+KeSetImportanceDpc(
+  IN OUT PRKDPC Dpc,
+  IN KDPC_IMPORTANCE Importance);
+
+NTKERNELAPI
+LONG
+NTAPI
+KePulseEvent(
+  IN OUT PRKEVENT Event,
+  IN KPRIORITY Increment,
+  IN BOOLEAN Wait);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeSetBasePriorityThread(
+  IN OUT PRKTHREAD Thread,
+  IN LONG Increment);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeEnterCriticalRegion(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeLeaveCriticalRegion(VOID);
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+KeBugCheck(
+  IN ULONG BugCheckCode);
+$endif /* _NTDDK_ */
+
+$if (_WDMDDK_)
+#if defined(_NTDDK_) || defined(_NTIFS_)
+NTKERNELAPI
+VOID
+NTAPI
+ProbeForRead(
+  IN CONST VOID *Address, /* CONST is added */
+  IN SIZE_T Length,
+  IN ULONG Alignment);
+#endif /* defined(_NTDDK_) || defined(_NTIFS_) */
+
+NTKERNELAPI
+VOID
+NTAPI
+ProbeForWrite(
+  IN PVOID Address,
+  IN SIZE_T Length,
+  IN ULONG Alignment);
+
+$endif /* _WDMDDK_ */
+
+#if defined(SINGLE_GROUP_LEGACY_API)
+
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+KeRevertToUserAffinityThread(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetSystemAffinityThread(
+  IN KAFFINITY Affinity);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetTargetProcessorDpc(
+  IN OUT PRKDPC Dpc,
+  IN CCHAR Number);
+
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeQueryActiveProcessors(VOID);
+$endif
+
+$if (_NTDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+KeSetTargetProcessorDpc(
+  IN OUT PRKDPC Dpc,
+  IN CCHAR Number);
+
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeQueryActiveProcessors(VOID);
+$endif
+
+#endif /* defined(SINGLE_GROUP_LEGACY_API) */
+
+$if (_WDMDDK_)
+#if !defined(_M_AMD64)
+NTKERNELAPI
+ULONGLONG
+NTAPI
+KeQueryInterruptTime(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeQuerySystemTime(
+  OUT PLARGE_INTEGER CurrentTime);
+#endif /* !_M_AMD64 */
+
+#if !defined(_X86_)
+NTKERNELAPI
+KIRQL
+NTAPI
+KeAcquireSpinLockRaiseToDpc(
+  IN OUT PKSPIN_LOCK SpinLock);
+
+#define KeAcquireSpinLock(SpinLock, OldIrql) \
+    *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
+
+NTKERNELAPI
+VOID
+NTAPI
+KeAcquireSpinLockAtDpcLevel(
+  IN OUT PKSPIN_LOCK SpinLock);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeReleaseSpinLock(
+  IN OUT PKSPIN_LOCK SpinLock,
+  IN KIRQL NewIrql);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeReleaseSpinLockFromDpcLevel(
+  IN OUT PKSPIN_LOCK SpinLock);
+#endif /* !_X86_ */
+
+#if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeSpinLock(
+  IN PKSPIN_LOCK SpinLock);
+#else
+FORCEINLINE
+VOID
+KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock)
+{
+  /* Clear the lock */
+  *SpinLock = 0;
+}
+#endif
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+KeBugCheckEx(
+  IN ULONG BugCheckCode,
+  IN ULONG_PTR BugCheckParameter1,
+  IN ULONG_PTR BugCheckParameter2,
+  IN ULONG_PTR BugCheckParameter3,
+  IN ULONG_PTR BugCheckParameter4);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeCancelTimer(
+  IN OUT PKTIMER);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeDelayExecutionThread(
+  IN KPROCESSOR_MODE WaitMode,
+  IN BOOLEAN Alertable,
+  IN PLARGE_INTEGER Interval);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeDeregisterBugCheckCallback(
+  IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeEnterCriticalRegion(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeDeviceQueue(
+  OUT PKDEVICE_QUEUE DeviceQueue);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeDpc(
+  OUT PRKDPC Dpc,
+  IN PKDEFERRED_ROUTINE DeferredRoutine,
+  IN PVOID DeferredContext OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeMutex(
+  OUT PRKMUTEX Mutex,
+  IN ULONG Level);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeSemaphore(
+  OUT PRKSEMAPHORE Semaphore,
+  IN LONG Count,
+  IN LONG Limit);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeTimer(
+  OUT PKTIMER Timer);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeTimerEx(
+  OUT PKTIMER Timer,
+  IN TIMER_TYPE Type);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeInsertByKeyDeviceQueue(
+  IN OUT PKDEVICE_QUEUE DeviceQueue,
+  IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,
+  IN ULONG SortKey);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeInsertDeviceQueue(
+  IN OUT PKDEVICE_QUEUE DeviceQueue,
+  IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeInsertQueueDpc(
+  IN OUT PRKDPC Dpc,
+  IN PVOID SystemArgument1 OPTIONAL,
+  IN PVOID SystemArgument2 OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeLeaveCriticalRegion(VOID);
+
+NTHALAPI
+LARGE_INTEGER
+NTAPI
+KeQueryPerformanceCounter(
+  OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL);
+
+NTKERNELAPI
+KPRIORITY
+NTAPI
+KeQueryPriorityThread(
+  IN PRKTHREAD Thread);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryTimeIncrement(VOID);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReadStateEvent(
+  IN PRKEVENT Event);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReadStateMutex(
+  IN PRKMUTEX Mutex);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReadStateSemaphore(
+  IN PRKSEMAPHORE Semaphore);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeReadStateTimer(
+  IN PKTIMER Timer);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRegisterBugCheckCallback(
+  OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
+  IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
+  IN PVOID Buffer,
+  IN ULONG Length,
+  IN PUCHAR Component);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReleaseMutex(
+  IN OUT PRKMUTEX Mutex,
+  IN BOOLEAN Wait);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReleaseSemaphore(
+  IN OUT PRKSEMAPHORE Semaphore,
+  IN KPRIORITY Increment,
+  IN LONG Adjustment,
+  IN BOOLEAN Wait);
+
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
+NTAPI
+KeRemoveByKeyDeviceQueue(
+  IN OUT PKDEVICE_QUEUE DeviceQueue,
+  IN ULONG SortKey);
+
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
+NTAPI
+KeRemoveDeviceQueue(
+  IN OUT PKDEVICE_QUEUE DeviceQueue);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRemoveEntryDeviceQueue(
+  IN OUT PKDEVICE_QUEUE DeviceQueue,
+  IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRemoveQueueDpc(
+  IN OUT PRKDPC Dpc);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeResetEvent(
+  IN OUT PRKEVENT Event);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeSetEvent(
+  IN OUT PRKEVENT Event,
+  IN KPRIORITY Increment,
+  IN BOOLEAN Wait);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetImportanceDpc(
+  IN OUT PRKDPC Dpc,
+  IN KDPC_IMPORTANCE Importance);
+
+NTKERNELAPI
+KPRIORITY
+NTAPI
+KeSetPriorityThread(
+  IN OUT PKTHREAD Thread,
+  IN KPRIORITY Priority);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSetTimer(
+  IN OUT PKTIMER Timer,
+  IN LARGE_INTEGER DueTime,
+  IN PKDPC Dpc OPTIONAL);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSetTimerEx(
+  IN OUT PKTIMER Timer,
+  IN LARGE_INTEGER DueTime,
+  IN LONG Period OPTIONAL,
+  IN PKDPC Dpc OPTIONAL);
+
+NTHALAPI
+VOID
+NTAPI
+KeStallExecutionProcessor(
+  IN ULONG MicroSeconds);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSynchronizeExecution(
+  IN OUT PKINTERRUPT Interrupt,
+  IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
+  IN PVOID SynchronizeContext OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeWaitForMultipleObjects(
+  IN ULONG Count,
+  IN PVOID Object[],
+  IN WAIT_TYPE WaitType,
+  IN KWAIT_REASON WaitReason,
+  IN KPROCESSOR_MODE WaitMode,
+  IN BOOLEAN Alertable,
+  IN PLARGE_INTEGER Timeout OPTIONAL,
+  OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL);
+
+#define KeWaitForMutexObject KeWaitForSingleObject
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeWaitForSingleObject(
+  IN PVOID Object,
+  IN KWAIT_REASON WaitReason,
+  IN KPROCESSOR_MODE WaitMode,
+  IN BOOLEAN Alertable,
+  IN PLARGE_INTEGER Timeout OPTIONAL);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+$if (_NTDDK_)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeAreApcsDisabled(VOID);
+$endif
+
+$if (_WDMDDK_)
+_DECL_HAL_KE_IMPORT
+VOID
+FASTCALL
+KeAcquireInStackQueuedSpinLock(
+  IN OUT PKSPIN_LOCK SpinLock,
+  OUT PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireInStackQueuedSpinLockAtDpcLevel(
+  IN OUT PKSPIN_LOCK SpinLock,
+  OUT PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+KIRQL
+NTAPI
+KeAcquireInterruptSpinLock(
+  IN OUT PKINTERRUPT Interrupt);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeAreApcsDisabled(VOID);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeGetRecommendedSharedDataAlignment(VOID);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryRuntimeThread(
+  IN PKTHREAD Thread,
+  OUT PULONG UserTime);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLockFromDpcLevel(
+  IN PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeReleaseInterruptSpinLock(
+  IN OUT PKINTERRUPT Interrupt,
+  IN KIRQL OldIrql);
+
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
+NTAPI
+KeRemoveByKeyDeviceQueueIfBusy(
+  IN OUT PKDEVICE_QUEUE DeviceQueue,
+  IN ULONG SortKey);
+
+_DECL_HAL_KE_IMPORT
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLock(
+  IN PKLOCK_QUEUE_HANDLE LockHandle);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeDeregisterBugCheckReasonCallback(
+  IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRegisterBugCheckReasonCallback(
+  OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord,
+  IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine,
+  IN KBUGCHECK_CALLBACK_REASON Reason,
+  IN PUCHAR Component);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
+
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
+NTKERNELAPI
+VOID
+NTAPI
+KeFlushQueuedDpcs(VOID);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
+$endif /* _WDMDDK_ */
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+
+$if (_WDMDDK_)
+NTKERNELAPI
+PVOID
+NTAPI
+KeRegisterNmiCallback(
+  IN PNMI_CALLBACK CallbackRoutine,
+  IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeDeregisterNmiCallback(
+  IN PVOID Handle);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeThreadedDpc(
+  OUT PRKDPC Dpc,
+  IN PKDEFERRED_ROUTINE DeferredRoutine,
+  IN PVOID DeferredContext OPTIONAL);
+
+NTKERNELAPI
+ULONG_PTR
+NTAPI
+KeIpiGenericCall(
+  IN PKIPI_BROADCAST_WORKER BroadcastFunction,
+  IN ULONG_PTR Context);
+
+NTKERNELAPI
+KIRQL
+FASTCALL
+KeAcquireSpinLockForDpc(
+  IN OUT PKSPIN_LOCK SpinLock);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseSpinLockForDpc(
+  IN OUT PKSPIN_LOCK SpinLock,
+  IN KIRQL OldIrql);
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTestSpinLock(
+  IN PKSPIN_LOCK SpinLock);
+$endif /* _WDMDDK_ */
+
+$if (_NTDDK_)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeInvalidateAllCaches(VOID);
+$endif /* _NTDDK_ */
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+
+$if (_NTDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeExpandKernelStackAndCallout(
+  IN PEXPAND_STACK_CALLOUT Callout,
+  IN PVOID Parameter OPTIONAL,
+  IN SIZE_T Size);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeEnterGuardedRegion(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeLeaveGuardedRegion(VOID);
+$endif /* _NTDDK_ */
+
+$if (_WDMDDK_)
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTryToAcquireSpinLockAtDpcLevel(
+  IN OUT PKSPIN_LOCK SpinLock);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeAreAllApcsDisabled(VOID);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireGuardedMutex(
+  IN OUT PKGUARDED_MUTEX GuardedMutex);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireGuardedMutexUnsafe(
+  IN OUT PKGUARDED_MUTEX GuardedMutex);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeEnterGuardedRegion(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeLeaveGuardedRegion(VOID);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeInitializeGuardedMutex(
+  OUT PKGUARDED_MUTEX GuardedMutex);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseGuardedMutexUnsafe(
+  IN OUT PKGUARDED_MUTEX GuardedMutex);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseGuardedMutex(
+  IN OUT PKGUARDED_MUTEX GuardedMutex);
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTryToAcquireGuardedMutex(
+  IN OUT PKGUARDED_MUTEX GuardedMutex);
+$endif /* _WDMDDK_ */
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireInStackQueuedSpinLockForDpc(
+  IN OUT PKSPIN_LOCK SpinLock,
+  OUT PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLockForDpc(
+  IN PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeQueryDpcWatchdogInformation(
+  OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation);
+$endif /* _WDMDDK_ */
+
+#if defined(SINGLE_GROUP_LEGACY_API)
+$if (_NTDDK_)
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryActiveProcessorCount(
+  OUT PKAFFINITY ActiveProcessors OPTIONAL);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryMaximumProcessorCount(VOID);
+$endif /* _NTDDK_ */
+
+$if (_WDMDDK_)
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeSetSystemAffinityThreadEx(
+  IN KAFFINITY Affinity);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeRevertToUserAffinityThreadEx(
+  IN KAFFINITY Affinity);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryActiveProcessorCount(
+  OUT PKAFFINITY ActiveProcessors OPTIONAL);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryMaximumProcessorCount(VOID);
+$endif /* _WDMDDK_ */
+#endif /* SINGLE_GROUP_LEGACY_API */
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WS08)
+
+PVOID
+KeRegisterProcessorChangeCallback(
+  IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction,
+  IN PVOID CallbackContext OPTIONAL,
+  IN ULONG Flags);
+
+VOID
+KeDeregisterProcessorChangeCallback(
+  IN PVOID CallbackHandle);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS08) */
+$endif /* _WDMDDK_ */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+$if (_NTDDK_)
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryActiveProcessorCountEx(
+  IN USHORT GroupNumber);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryMaximumProcessorCountEx(
+  IN USHORT GroupNumber);
+
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryActiveGroupCount(VOID);
+
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryMaximumGroupCount(VOID);
+
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeQueryGroupAffinity(
+  IN USHORT GroupNumber);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeGetCurrentProcessorNumberEx(
+  OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeQueryNodeActiveAffinity(
+  IN USHORT NodeNumber,
+  OUT PGROUP_AFFINITY Affinity OPTIONAL,
+  OUT PUSHORT Count OPTIONAL);
+
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryNodeMaximumProcessorCount(
+  IN USHORT NodeNumber);
+
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryHighestNodeNumber(VOID);
+
+NTKERNELAPI
+USHORT
+NTAPI
+KeGetCurrentNodeNumber(VOID);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeQueryLogicalProcessorRelationship(
+  IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL,
+  IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
+  OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL,
+  IN OUT PULONG Length);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeSetHardwareCounterConfiguration(
+  IN PHARDWARE_COUNTER CounterArray,
+  IN ULONG Count);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeQueryHardwareCounterConfiguration(
+  OUT PHARDWARE_COUNTER CounterArray,
+  IN ULONG MaximumCount,
+  OUT PULONG Count);
+$endif /* _NTDDK_ */
+
+$if (_WDMDDK_)
+ULONG64
+NTAPI
+KeQueryTotalCycleTimeProcess(
+  IN OUT PKPROCESS Process,
+  OUT PULONG64 CycleTimeStamp);
+
+ULONG64
+NTAPI
+KeQueryTotalCycleTimeThread(
+  IN OUT PKTHREAD Thread,
+  OUT PULONG64 CycleTimeStamp);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeSetTargetProcessorDpcEx(
+  IN OUT PKDPC Dpc,
+  IN PPROCESSOR_NUMBER ProcNumber);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetSystemGroupAffinityThread(
+  IN PGROUP_AFFINITY Affinity,
+  OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeRevertToUserGroupAffinityThread(
+  IN PGROUP_AFFINITY PreviousAffinity);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSetCoalescableTimer(
+  IN OUT PKTIMER Timer,
+  IN LARGE_INTEGER DueTime,
+  IN ULONG Period,
+  IN ULONG TolerableDelay,
+  IN PKDPC Dpc OPTIONAL);
+
+NTKERNELAPI
+ULONGLONG
+NTAPI
+KeQueryUnbiasedInterruptTime(VOID);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryActiveProcessorCountEx(
+  IN USHORT GroupNumber);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryMaximumProcessorCountEx(
+  IN USHORT GroupNumber);
+
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryActiveGroupCount(VOID);
+
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryMaximumGroupCount(VOID);
+
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeQueryGroupAffinity(
+  IN USHORT GroupNumber);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeGetCurrentProcessorNumberEx(
+  OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeQueryNodeActiveAffinity(
+  IN USHORT NodeNumber,
+  OUT PGROUP_AFFINITY Affinity OPTIONAL,
+  OUT PUSHORT Count OPTIONAL);
+
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryNodeMaximumProcessorCount(
+  IN USHORT NodeNumber);
+
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryHighestNodeNumber(VOID);
+
+NTKERNELAPI
+USHORT
+NTAPI
+KeGetCurrentNodeNumber(VOID);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeQueryLogicalProcessorRelationship(
+  IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL,
+  IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
+  OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL,
+  IN OUT PULONG Length);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeSaveExtendedProcessorState(
+  IN ULONG64 Mask,
+  OUT PXSTATE_SAVE XStateSave);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeRestoreExtendedProcessorState(
+  IN PXSTATE_SAVE XStateSave);
+
+NTSTATUS
+NTAPI
+KeGetProcessorNumberFromIndex(
+  IN ULONG ProcIndex,
+  OUT PPROCESSOR_NUMBER ProcNumber);
+
+ULONG
+NTAPI
+KeGetProcessorIndexFromNumber(
+  IN PPROCESSOR_NUMBER ProcNumber);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+$if (_WDMDDK_)
+#if !defined(_IA64_)
+NTHALAPI
+VOID
+NTAPI
+KeFlushWriteBuffer(VOID);
+#endif
+
+/* VOID
+ * KeInitializeCallbackRecord(
+ *   IN PKBUGCHECK_CALLBACK_RECORD  CallbackRecord)
+ */
+#define KeInitializeCallbackRecord(CallbackRecord) \
+  CallbackRecord->State = BufferEmpty;
+
+#if DBG
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define PAGED_ASSERT( exp ) NT_ASSERT( exp )
+#else
+#define PAGED_ASSERT( exp ) ASSERT( exp )
+#endif
+
+#define PAGED_CODE() { \
+  if (KeGetCurrentIrql() > APC_LEVEL) { \
+    KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
+    PAGED_ASSERT(FALSE); \
+  } \
+}
+
+#else
+
+#define PAGED_CODE()
+
+#endif /* DBG */
+
+#define PAGED_CODE_LOCKED() NOP_FUNCTION;
+$endif
+
diff --git a/reactos/include/xdk/ketypes.h b/reactos/include/xdk/ketypes.h
new file mode 100644 (file)
index 0000000..a4bb363
--- /dev/null
@@ -0,0 +1,1183 @@
+/******************************************************************************
+ *                              Kernel Types                                  *
+ ******************************************************************************/
+$if (_WDMDDK_)
+
+typedef UCHAR KIRQL, *PKIRQL;
+typedef CCHAR KPROCESSOR_MODE;
+typedef LONG KPRIORITY;
+
+typedef enum _MODE {
+  KernelMode,
+  UserMode,
+  MaximumMode
+} MODE;
+
+#define CACHE_FULLY_ASSOCIATIVE 0xFF
+#define MAXIMUM_SUSPEND_COUNT   MAXCHAR
+
+#define EVENT_QUERY_STATE (0x0001)
+#define EVENT_MODIFY_STATE (0x0002)
+#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
+
+#define LTP_PC_SMT 0x1
+
+#if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
+#define SINGLE_GROUP_LEGACY_API        1
+#endif
+
+#define SEMAPHORE_QUERY_STATE (0x0001)
+#define SEMAPHORE_MODIFY_STATE (0x0002)
+#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
+
+typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
+  RelationProcessorCore,
+  RelationNumaNode,
+  RelationCache,
+  RelationProcessorPackage,
+  RelationGroup,
+  RelationAll = 0xffff
+} LOGICAL_PROCESSOR_RELATIONSHIP;
+
+typedef enum _PROCESSOR_CACHE_TYPE {
+  CacheUnified,
+  CacheInstruction,
+  CacheData,
+  CacheTrace
+} PROCESSOR_CACHE_TYPE;
+
+typedef struct _CACHE_DESCRIPTOR {
+  UCHAR Level;
+  UCHAR Associativity;
+  USHORT LineSize;
+  ULONG Size;
+  PROCESSOR_CACHE_TYPE Type;
+} CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;
+
+typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
+  ULONG_PTR ProcessorMask;
+  LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
+  union {
+    struct {
+      UCHAR Flags;
+    } ProcessorCore;
+    struct {
+      ULONG NodeNumber;
+    } NumaNode;
+    CACHE_DESCRIPTOR Cache;
+    ULONGLONG  Reserved[2];
+  } DUMMYUNIONNAME;
+} SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
+
+typedef struct _PROCESSOR_RELATIONSHIP {
+  UCHAR Flags;
+  UCHAR Reserved[21];
+  USHORT GroupCount;
+  GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
+} PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP;
+
+typedef struct _NUMA_NODE_RELATIONSHIP {
+  ULONG NodeNumber;
+  UCHAR Reserved[20];
+  GROUP_AFFINITY GroupMask;
+} NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP;
+
+typedef struct _CACHE_RELATIONSHIP {
+  UCHAR Level;
+  UCHAR Associativity;
+  USHORT LineSize;
+  ULONG CacheSize;
+  PROCESSOR_CACHE_TYPE Type;
+  UCHAR Reserved[20];
+  GROUP_AFFINITY GroupMask;
+} CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP;
+
+typedef struct _PROCESSOR_GROUP_INFO {
+  UCHAR MaximumProcessorCount;
+  UCHAR ActiveProcessorCount;
+  UCHAR Reserved[38];
+  KAFFINITY ActiveProcessorMask;
+} PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO;
+
+typedef struct _GROUP_RELATIONSHIP {
+  USHORT MaximumGroupCount;
+  USHORT ActiveGroupCount;
+  UCHAR Reserved[20];
+  PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];
+} GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP;
+
+typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
+  LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
+  ULONG Size;
+  union {
+    PROCESSOR_RELATIONSHIP Processor;
+    NUMA_NODE_RELATIONSHIP NumaNode;
+    CACHE_RELATIONSHIP Cache;
+    GROUP_RELATIONSHIP Group;
+  } DUMMYUNIONNAME;
+} SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;;
+
+/* Processor features */
+#define PF_FLOATING_POINT_PRECISION_ERRATA  0
+#define PF_FLOATING_POINT_EMULATED          1
+#define PF_COMPARE_EXCHANGE_DOUBLE          2
+#define PF_MMX_INSTRUCTIONS_AVAILABLE       3
+#define PF_PPC_MOVEMEM_64BIT_OK             4
+#define PF_ALPHA_BYTE_INSTRUCTIONS          5
+#define PF_XMMI_INSTRUCTIONS_AVAILABLE      6
+#define PF_3DNOW_INSTRUCTIONS_AVAILABLE     7
+#define PF_RDTSC_INSTRUCTION_AVAILABLE      8
+#define PF_PAE_ENABLED                      9
+#define PF_XMMI64_INSTRUCTIONS_AVAILABLE   10
+#define PF_SSE_DAZ_MODE_AVAILABLE          11
+#define PF_NX_ENABLED                      12
+#define PF_SSE3_INSTRUCTIONS_AVAILABLE     13
+#define PF_COMPARE_EXCHANGE128             14
+#define PF_COMPARE64_EXCHANGE128           15
+#define PF_CHANNELS_ENABLED                16
+#define PF_XSAVE_ENABLED                   17
+
+#define MAXIMUM_WAIT_OBJECTS              64
+
+#define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
+
+#define ASSERT_DPC(Object) \
+    ASSERT(((Object)->Type == 0) || \
+           ((Object)->Type == DpcObject) || \
+           ((Object)->Type == ThreadedDpcObject))
+
+#define ASSERT_GATE(object) \
+    NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
+              (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
+
+#define ASSERT_DEVICE_QUEUE(Object) \
+    NT_ASSERT((Object)->Type == DeviceQueueObject)
+
+#define ASSERT_TIMER(E) \
+    NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \
+              ((E)->Header.Type == TimerSynchronizationObject))
+
+#define ASSERT_MUTANT(E) \
+    NT_ASSERT((E)->Header.Type == MutantObject)
+
+#define ASSERT_SEMAPHORE(E) \
+    NT_ASSERT((E)->Header.Type == SemaphoreObject)
+
+#define ASSERT_EVENT(E) \
+    NT_ASSERT(((E)->Header.Type == NotificationEvent) || \
+              ((E)->Header.Type == SynchronizationEvent))
+
+#define DPC_NORMAL 0
+#define DPC_THREADED 1
+
+#define GM_LOCK_BIT          0x1
+#define GM_LOCK_BIT_V        0x0
+#define GM_LOCK_WAITER_WOKEN 0x2
+#define GM_LOCK_WAITER_INC   0x4
+
+#define LOCK_QUEUE_WAIT_BIT               0
+#define LOCK_QUEUE_OWNER_BIT              1
+
+#define LOCK_QUEUE_WAIT                   1
+#define LOCK_QUEUE_OWNER                  2
+#define LOCK_QUEUE_TIMER_LOCK_SHIFT       4
+#define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
+
+#define PROCESSOR_FEATURE_MAX 64
+
+#define DBG_STATUS_CONTROL_C              1
+#define DBG_STATUS_SYSRQ                  2
+#define DBG_STATUS_BUGCHECK_FIRST         3
+#define DBG_STATUS_BUGCHECK_SECOND        4
+#define DBG_STATUS_FATAL                  5
+#define DBG_STATUS_DEBUG_CONTROL          6
+#define DBG_STATUS_WORKER                 7
+
+#if defined(_WIN64)
+#define MAXIMUM_PROC_PER_GROUP 64
+#else
+#define MAXIMUM_PROC_PER_GROUP 32
+#endif
+#define MAXIMUM_PROCESSORS          MAXIMUM_PROC_PER_GROUP
+
+/* Exception Records */
+#define EXCEPTION_NONCONTINUABLE     1
+#define EXCEPTION_MAXIMUM_PARAMETERS 15
+
+#define EXCEPTION_DIVIDED_BY_ZERO       0
+#define EXCEPTION_DEBUG                 1
+#define EXCEPTION_NMI                   2
+#define EXCEPTION_INT3                  3
+#define EXCEPTION_BOUND_CHECK           5
+#define EXCEPTION_INVALID_OPCODE        6
+#define EXCEPTION_NPX_NOT_AVAILABLE     7
+#define EXCEPTION_DOUBLE_FAULT          8
+#define EXCEPTION_NPX_OVERRUN           9
+#define EXCEPTION_INVALID_TSS           0x0A
+#define EXCEPTION_SEGMENT_NOT_PRESENT   0x0B
+#define EXCEPTION_STACK_FAULT           0x0C
+#define EXCEPTION_GP_FAULT              0x0D
+#define EXCEPTION_RESERVED_TRAP         0x0F
+#define EXCEPTION_NPX_ERROR             0x010
+#define EXCEPTION_ALIGNMENT_CHECK       0x011
+
+typedef struct _EXCEPTION_RECORD {
+  NTSTATUS ExceptionCode;
+  ULONG ExceptionFlags;
+  struct _EXCEPTION_RECORD *ExceptionRecord;
+  PVOID ExceptionAddress;
+  ULONG NumberParameters;
+  ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
+
+typedef struct _EXCEPTION_RECORD32 {
+  NTSTATUS ExceptionCode;
+  ULONG ExceptionFlags;
+  ULONG ExceptionRecord;
+  ULONG ExceptionAddress;
+  ULONG NumberParameters;
+  ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;
+
+typedef struct _EXCEPTION_RECORD64 {
+  NTSTATUS ExceptionCode;
+  ULONG ExceptionFlags;
+  ULONG64 ExceptionRecord;
+  ULONG64 ExceptionAddress;
+  ULONG NumberParameters;
+  ULONG __unusedAlignment;
+  ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
+
+typedef struct _EXCEPTION_POINTERS {
+  PEXCEPTION_RECORD ExceptionRecord;
+  PCONTEXT ContextRecord;
+} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
+
+typedef enum _KBUGCHECK_CALLBACK_REASON {
+  KbCallbackInvalid,
+  KbCallbackReserved1,
+  KbCallbackSecondaryDumpData,
+  KbCallbackDumpIo,
+  KbCallbackAddPages
+} KBUGCHECK_CALLBACK_REASON;
+
+struct _KBUGCHECK_REASON_CALLBACK_RECORD;
+
+typedef VOID
+(NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE)(
+  IN KBUGCHECK_CALLBACK_REASON Reason,
+  IN struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record,
+  IN OUT PVOID ReasonSpecificData,
+  IN ULONG ReasonSpecificDataLength);
+typedef KBUGCHECK_REASON_CALLBACK_ROUTINE *PKBUGCHECK_REASON_CALLBACK_ROUTINE;
+
+typedef struct _KBUGCHECK_ADD_PAGES {
+  IN OUT PVOID Context;
+  IN OUT ULONG Flags;
+  IN ULONG BugCheckCode;
+  OUT ULONG_PTR Address;
+  OUT ULONG_PTR Count;
+} KBUGCHECK_ADD_PAGES, *PKBUGCHECK_ADD_PAGES;
+
+typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA {
+  IN PVOID InBuffer;
+  IN ULONG InBufferLength;
+  IN ULONG MaximumAllowed;
+  OUT GUID Guid;
+  OUT PVOID OutBuffer;
+  OUT ULONG OutBufferLength;
+} KBUGCHECK_SECONDARY_DUMP_DATA, *PKBUGCHECK_SECONDARY_DUMP_DATA;
+
+typedef enum _KBUGCHECK_DUMP_IO_TYPE {
+  KbDumpIoInvalid,
+  KbDumpIoHeader,
+  KbDumpIoBody,
+  KbDumpIoSecondaryData,
+  KbDumpIoComplete
+} KBUGCHECK_DUMP_IO_TYPE;
+
+typedef struct _KBUGCHECK_DUMP_IO {
+  IN ULONG64 Offset;
+  IN PVOID Buffer;
+  IN ULONG BufferLength;
+  IN KBUGCHECK_DUMP_IO_TYPE Type;
+} KBUGCHECK_DUMP_IO, *PKBUGCHECK_DUMP_IO;
+
+#define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS         0x00000001UL
+#define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS        0x00000002UL
+#define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL
+
+typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD {
+  LIST_ENTRY Entry;
+  PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine;
+  PUCHAR Component;
+  ULONG_PTR Checksum;
+  KBUGCHECK_CALLBACK_REASON Reason;
+  UCHAR State;
+} KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD;
+
+typedef enum _KBUGCHECK_BUFFER_DUMP_STATE {
+  BufferEmpty,
+  BufferInserted,
+  BufferStarted,
+  BufferFinished,
+  BufferIncomplete
+} KBUGCHECK_BUFFER_DUMP_STATE;
+
+typedef VOID
+(NTAPI KBUGCHECK_CALLBACK_ROUTINE)(
+  IN PVOID Buffer,
+  IN ULONG Length);
+typedef KBUGCHECK_CALLBACK_ROUTINE *PKBUGCHECK_CALLBACK_ROUTINE;
+
+typedef struct _KBUGCHECK_CALLBACK_RECORD {
+  LIST_ENTRY Entry;
+  PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
+  PVOID Buffer;
+  ULONG Length;
+  PUCHAR Component;
+  ULONG_PTR Checksum;
+  UCHAR State;
+} KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
+
+typedef BOOLEAN
+(NTAPI NMI_CALLBACK)(
+  IN PVOID Context,
+  IN BOOLEAN Handled);
+typedef NMI_CALLBACK *PNMI_CALLBACK;
+
+typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE {
+  KeProcessorAddStartNotify = 0,
+  KeProcessorAddCompleteNotify,
+  KeProcessorAddFailureNotify
+} KE_PROCESSOR_CHANGE_NOTIFY_STATE;
+
+typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT {
+  KE_PROCESSOR_CHANGE_NOTIFY_STATE State;
+  ULONG NtNumber;
+  NTSTATUS Status;
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+  PROCESSOR_NUMBER ProcNumber;
+#endif
+} KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT;
+
+typedef VOID
+(NTAPI PROCESSOR_CALLBACK_FUNCTION)(
+  IN PVOID CallbackContext,
+  IN PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext,
+  IN OUT PNTSTATUS OperationStatus);
+typedef PROCESSOR_CALLBACK_FUNCTION *PPROCESSOR_CALLBACK_FUNCTION;
+
+#define KE_PROCESSOR_CHANGE_ADD_EXISTING         1
+
+#define INVALID_PROCESSOR_INDEX     0xffffffff
+
+typedef enum _KINTERRUPT_POLARITY {
+  InterruptPolarityUnknown,
+  InterruptActiveHigh,
+  InterruptActiveLow
+} KINTERRUPT_POLARITY, *PKINTERRUPT_POLARITY;
+
+typedef enum _KPROFILE_SOURCE {
+  ProfileTime,
+  ProfileAlignmentFixup,
+  ProfileTotalIssues,
+  ProfilePipelineDry,
+  ProfileLoadInstructions,
+  ProfilePipelineFrozen,
+  ProfileBranchInstructions,
+  ProfileTotalNonissues,
+  ProfileDcacheMisses,
+  ProfileIcacheMisses,
+  ProfileCacheMisses,
+  ProfileBranchMispredictions,
+  ProfileStoreInstructions,
+  ProfileFpInstructions,
+  ProfileIntegerInstructions,
+  Profile2Issue,
+  Profile3Issue,
+  Profile4Issue,
+  ProfileSpecialInstructions,
+  ProfileTotalCycles,
+  ProfileIcacheIssues,
+  ProfileDcacheAccesses,
+  ProfileMemoryBarrierCycles,
+  ProfileLoadLinkedIssues,
+  ProfileMaximum
+} KPROFILE_SOURCE;
+
+typedef enum _KWAIT_REASON {
+  Executive,
+  FreePage,
+  PageIn,
+  PoolAllocation,
+  DelayExecution,
+  Suspended,
+  UserRequest,
+  WrExecutive,
+  WrFreePage,
+  WrPageIn,
+  WrPoolAllocation,
+  WrDelayExecution,
+  WrSuspended,
+  WrUserRequest,
+  WrEventPair,
+  WrQueue,
+  WrLpcReceive,
+  WrLpcReply,
+  WrVirtualMemory,
+  WrPageOut,
+  WrRendezvous,
+  WrKeyedEvent,
+  WrTerminated,
+  WrProcessInSwap,
+  WrCpuRateControl,
+  WrCalloutStack,
+  WrKernel,
+  WrResource,
+  WrPushLock,
+  WrMutex,
+  WrQuantumEnd,
+  WrDispatchInt,
+  WrPreempted,
+  WrYieldExecution,
+  WrFastMutex,
+  WrGuardedMutex,
+  WrRundown,
+  MaximumWaitReason
+} KWAIT_REASON;
+
+typedef struct _KWAIT_BLOCK {
+  LIST_ENTRY WaitListEntry;
+  struct _KTHREAD *Thread;
+  PVOID Object;
+  struct _KWAIT_BLOCK *NextWaitBlock;
+  USHORT WaitKey;
+  UCHAR WaitType;
+  volatile UCHAR BlockState;
+#if defined(_WIN64)
+  LONG SpareLong;
+#endif
+} KWAIT_BLOCK, *PKWAIT_BLOCK, *PRKWAIT_BLOCK;
+
+typedef enum _KINTERRUPT_MODE {
+  LevelSensitive,
+  Latched
+} KINTERRUPT_MODE;
+
+#define THREAD_WAIT_OBJECTS 3
+
+typedef VOID
+(NTAPI KSTART_ROUTINE)(
+  IN PVOID StartContext);
+typedef KSTART_ROUTINE *PKSTART_ROUTINE;
+
+typedef VOID
+(NTAPI *PKINTERRUPT_ROUTINE)(
+  VOID);
+
+typedef BOOLEAN
+(NTAPI KSERVICE_ROUTINE)(
+  IN struct _KINTERRUPT *Interrupt,
+  IN PVOID ServiceContext);
+typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE;
+
+typedef BOOLEAN
+(NTAPI KMESSAGE_SERVICE_ROUTINE)(
+  IN struct _KINTERRUPT *Interrupt,
+  IN PVOID ServiceContext,
+  IN ULONG MessageID);
+typedef KMESSAGE_SERVICE_ROUTINE *PKMESSAGE_SERVICE_ROUTINE;
+
+typedef enum _KD_OPTION {
+  KD_OPTION_SET_BLOCK_ENABLE,
+} KD_OPTION;
+
+typedef VOID
+(NTAPI *PKNORMAL_ROUTINE)(
+  IN PVOID NormalContext OPTIONAL,
+  IN PVOID SystemArgument1 OPTIONAL,
+  IN PVOID SystemArgument2 OPTIONAL);
+
+typedef VOID
+(NTAPI *PKRUNDOWN_ROUTINE)(
+  IN struct _KAPC *Apc);
+
+typedef VOID
+(NTAPI *PKKERNEL_ROUTINE)(
+  IN struct _KAPC *Apc,
+  IN OUT PKNORMAL_ROUTINE *NormalRoutine OPTIONAL,
+  IN OUT PVOID *NormalContext OPTIONAL,
+  IN OUT PVOID *SystemArgument1 OPTIONAL,
+  IN OUT PVOID *SystemArgument2 OPTIONAL);
+
+typedef struct _KAPC {
+  UCHAR Type;
+  UCHAR SpareByte0;
+  UCHAR Size;
+  UCHAR SpareByte1;
+  ULONG SpareLong0;
+  struct _KTHREAD *Thread;
+  LIST_ENTRY ApcListEntry;
+  PKKERNEL_ROUTINE KernelRoutine;
+  PKRUNDOWN_ROUTINE RundownRoutine;
+  PKNORMAL_ROUTINE NormalRoutine;
+  PVOID NormalContext;
+  PVOID SystemArgument1;
+  PVOID SystemArgument2;
+  CCHAR ApcStateIndex;
+  KPROCESSOR_MODE ApcMode;
+  BOOLEAN Inserted;
+} KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
+
+#define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0)
+#define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1)
+#define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0)
+#define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1)
+#define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2)
+#define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex)
+#define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN))
+
+typedef struct _KDEVICE_QUEUE_ENTRY {
+  LIST_ENTRY DeviceListEntry;
+  ULONG SortKey;
+  BOOLEAN Inserted;
+} KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
+*RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
+
+typedef PVOID PKIPI_CONTEXT;
+
+typedef VOID
+(NTAPI *PKIPI_WORKER)(
+  IN OUT PKIPI_CONTEXT PacketContext,
+  IN PVOID Parameter1 OPTIONAL,
+  IN PVOID Parameter2 OPTIONAL,
+  IN PVOID Parameter3 OPTIONAL);
+
+typedef struct _KIPI_COUNTS {
+  ULONG Freeze;
+  ULONG Packet;
+  ULONG DPC;
+  ULONG APC;
+  ULONG FlushSingleTb;
+  ULONG FlushMultipleTb;
+  ULONG FlushEntireTb;
+  ULONG GenericCall;
+  ULONG ChangeColor;
+  ULONG SweepDcache;
+  ULONG SweepIcache;
+  ULONG SweepIcacheRange;
+  ULONG FlushIoBuffers;
+  ULONG GratuitousDPC;
+} KIPI_COUNTS, *PKIPI_COUNTS;
+
+typedef ULONG_PTR
+(NTAPI KIPI_BROADCAST_WORKER)(
+  IN ULONG_PTR Argument);
+typedef KIPI_BROADCAST_WORKER *PKIPI_BROADCAST_WORKER;
+
+typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
+
+typedef struct _KSPIN_LOCK_QUEUE {
+  struct _KSPIN_LOCK_QUEUE *volatile Next;
+  PKSPIN_LOCK volatile Lock;
+} KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE;
+
+typedef struct _KLOCK_QUEUE_HANDLE {
+  KSPIN_LOCK_QUEUE LockQueue;
+  KIRQL OldIrql;
+} KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
+
+#if defined(_AMD64_)
+
+typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER;
+
+#define LockQueueDispatcherLock 0
+#define LockQueueExpansionLock 1
+#define LockQueuePfnLock 2
+#define LockQueueSystemSpaceLock 3
+#define LockQueueVacbLock 4
+#define LockQueueMasterLock 5
+#define LockQueueNonPagedPoolLock 6
+#define LockQueueIoCancelLock 7
+#define LockQueueWorkQueueLock 8
+#define LockQueueIoVpbLock 9
+#define LockQueueIoDatabaseLock 10
+#define LockQueueIoCompletionLock 11
+#define LockQueueNtfsStructLock 12
+#define LockQueueAfdWorkQueueLock 13
+#define LockQueueBcbLock 14
+#define LockQueueMmNonPagedPoolLock 15
+#define LockQueueUnusedSpare16 16
+#define LockQueueTimerTableLock 17
+#define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS)
+
+#else
+
+typedef enum _KSPIN_LOCK_QUEUE_NUMBER {
+  LockQueueDispatcherLock,
+  LockQueueExpansionLock,
+  LockQueuePfnLock,
+  LockQueueSystemSpaceLock,
+  LockQueueVacbLock,
+  LockQueueMasterLock,
+  LockQueueNonPagedPoolLock,
+  LockQueueIoCancelLock,
+  LockQueueWorkQueueLock,
+  LockQueueIoVpbLock,
+  LockQueueIoDatabaseLock,
+  LockQueueIoCompletionLock,
+  LockQueueNtfsStructLock,
+  LockQueueAfdWorkQueueLock,
+  LockQueueBcbLock,
+  LockQueueMmNonPagedPoolLock,
+  LockQueueUnusedSpare16,
+  LockQueueTimerTableLock,
+  LockQueueMaximumLock = LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS
+} KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER;
+
+#endif /* defined(_AMD64_) */
+
+typedef VOID
+(NTAPI *PKDEFERRED_ROUTINE)(
+  IN struct _KDPC *Dpc,
+  IN PVOID DeferredContext OPTIONAL,
+  IN PVOID SystemArgument1 OPTIONAL,
+  IN PVOID SystemArgument2 OPTIONAL);
+
+typedef enum _KDPC_IMPORTANCE {
+  LowImportance,
+  MediumImportance,
+  HighImportance,
+  MediumHighImportance
+} KDPC_IMPORTANCE;
+
+typedef struct _KDPC {
+  UCHAR Type;
+  UCHAR Importance;
+  volatile USHORT Number;
+  LIST_ENTRY DpcListEntry;
+  PKDEFERRED_ROUTINE DeferredRoutine;
+  PVOID DeferredContext;
+  PVOID SystemArgument1;
+  PVOID SystemArgument2;
+  volatile PVOID DpcData;
+} KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
+
+typedef struct _KDPC_WATCHDOG_INFORMATION {
+  ULONG DpcTimeLimit;
+  ULONG DpcTimeCount;
+  ULONG DpcWatchdogLimit;
+  ULONG DpcWatchdogCount;
+  ULONG Reserved;
+} KDPC_WATCHDOG_INFORMATION, *PKDPC_WATCHDOG_INFORMATION;
+
+typedef struct _KDEVICE_QUEUE {
+  CSHORT Type;
+  CSHORT Size;
+  LIST_ENTRY DeviceListHead;
+  KSPIN_LOCK Lock;
+  #if defined(_AMD64_)
+  union {
+    BOOLEAN Busy;
+    struct {
+      LONG64 Reserved:8;
+      LONG64 Hint:56;
+    };
+  };
+  #else
+  BOOLEAN Busy;
+  #endif
+} KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
+
+#define TIMER_EXPIRED_INDEX_BITS        6
+#define TIMER_PROCESSOR_INDEX_BITS      5
+
+typedef struct _DISPATCHER_HEADER {
+  _ANONYMOUS_UNION union {
+    _ANONYMOUS_STRUCT struct {
+      UCHAR Type;
+      _ANONYMOUS_UNION union {
+        _ANONYMOUS_UNION union {
+          UCHAR TimerControlFlags;
+          _ANONYMOUS_STRUCT struct {
+            UCHAR Absolute:1;
+            UCHAR Coalescable:1;
+            UCHAR KeepShifting:1;
+            UCHAR EncodedTolerableDelay:5;
+          } DUMMYSTRUCTNAME;
+        } DUMMYUNIONNAME;
+        UCHAR Abandoned;
+#if (NTDDI_VERSION < NTDDI_WIN7)
+        UCHAR NpxIrql;
+#endif
+        BOOLEAN Signalling;
+      } DUMMYUNIONNAME;
+      _ANONYMOUS_UNION union {
+        _ANONYMOUS_UNION union {
+          UCHAR ThreadControlFlags;
+          _ANONYMOUS_STRUCT struct {
+            UCHAR CpuThrottled:1;
+            UCHAR CycleProfiling:1;
+            UCHAR CounterProfiling:1;
+            UCHAR Reserved:5;
+          } DUMMYSTRUCTNAME;
+        } DUMMYUNIONNAME;
+        UCHAR Size;
+        UCHAR Hand;
+      } DUMMYUNIONNAME2;
+      _ANONYMOUS_UNION union {
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+        _ANONYMOUS_UNION union {
+          UCHAR TimerMiscFlags;
+          _ANONYMOUS_STRUCT struct {
+#if !defined(_X86_)
+            UCHAR Index:TIMER_EXPIRED_INDEX_BITS;
+#else
+            UCHAR Index:1;
+            UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS;
+#endif
+            UCHAR Inserted:1;
+            volatile UCHAR Expired:1;
+          } DUMMYSTRUCTNAME;
+        } DUMMYUNIONNAME;
+#else
+        /* Pre Win7 compatibility fix to latest WDK */
+        UCHAR Inserted;
+#endif
+        _ANONYMOUS_UNION union {
+          BOOLEAN DebugActive;
+          _ANONYMOUS_STRUCT struct {
+            BOOLEAN ActiveDR7:1;
+            BOOLEAN Instrumented:1;
+            BOOLEAN Reserved2:4;
+            BOOLEAN UmsScheduled:1;
+            BOOLEAN UmsPrimary:1;
+          } DUMMYSTRUCTNAME;
+        } DUMMYUNIONNAME; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */
+        BOOLEAN DpcActive;
+      } DUMMYUNIONNAME3;
+    } DUMMYSTRUCTNAME;
+    volatile LONG Lock;
+  } DUMMYUNIONNAME;
+  LONG SignalState;
+  LIST_ENTRY WaitListHead;
+} DISPATCHER_HEADER, *PDISPATCHER_HEADER;
+
+typedef struct _KEVENT {
+  DISPATCHER_HEADER Header;
+} KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
+
+typedef struct _KSEMAPHORE {
+  DISPATCHER_HEADER Header;
+  LONG Limit;
+} KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
+
+#define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG))
+
+typedef struct _KGATE {
+  DISPATCHER_HEADER Header;
+} KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE;
+
+typedef struct _KGUARDED_MUTEX {
+  volatile LONG Count;
+  PKTHREAD Owner;
+  ULONG Contention;
+  KGATE Gate;
+  __GNU_EXTENSION union {
+    __GNU_EXTENSION struct {
+      SHORT KernelApcDisable;
+      SHORT SpecialApcDisable;
+    };
+    ULONG CombinedApcDisable;
+  };
+} KGUARDED_MUTEX, *PKGUARDED_MUTEX;
+
+typedef struct _KMUTANT {
+  DISPATCHER_HEADER Header;
+  LIST_ENTRY MutantListEntry;
+  struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
+  BOOLEAN Abandoned;
+  UCHAR ApcDisable;
+} KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX;
+
+#define TIMER_TABLE_SIZE 512
+#define TIMER_TABLE_SHIFT 9
+
+typedef struct _KTIMER {
+  DISPATCHER_HEADER Header;
+  ULARGE_INTEGER DueTime;
+  LIST_ENTRY TimerListEntry;
+  struct _KDPC *Dpc;
+  #if !defined(_X86_)
+  ULONG Processor;
+  #endif
+  ULONG Period;
+} KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
+
+typedef enum _LOCK_OPERATION {
+  IoReadAccess,
+  IoWriteAccess,
+  IoModifyAccess
+} LOCK_OPERATION;
+
+#define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
+
+typedef BOOLEAN
+(NTAPI *PKSYNCHRONIZE_ROUTINE)(
+  IN PVOID SynchronizeContext);
+
+typedef enum _POOL_TYPE {
+  NonPagedPool,
+  PagedPool,
+  NonPagedPoolMustSucceed,
+  DontUseThisType,
+  NonPagedPoolCacheAligned,
+  PagedPoolCacheAligned,
+  NonPagedPoolCacheAlignedMustS,
+  MaxPoolType,
+  NonPagedPoolSession = 32,
+  PagedPoolSession,
+  NonPagedPoolMustSucceedSession,
+  DontUseThisTypeSession,
+  NonPagedPoolCacheAlignedSession,
+  PagedPoolCacheAlignedSession,
+  NonPagedPoolCacheAlignedMustSSession
+} POOL_TYPE;
+
+typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE {
+  StandardDesign,
+  NEC98x86,
+  EndAlternatives
+} ALTERNATIVE_ARCHITECTURE_TYPE;
+
+#ifndef _X86_
+
+#ifndef IsNEC_98
+#define IsNEC_98 (FALSE)
+#endif
+
+#ifndef IsNotNEC_98
+#define IsNotNEC_98 (TRUE)
+#endif
+
+#ifndef SetNEC_98
+#define SetNEC_98
+#endif
+
+#ifndef SetNotNEC_98
+#define SetNotNEC_98
+#endif
+
+#endif
+
+typedef struct _KSYSTEM_TIME {
+  ULONG LowPart;
+  LONG High1Time;
+  LONG High2Time;
+} KSYSTEM_TIME, *PKSYSTEM_TIME;
+
+typedef struct DECLSPEC_ALIGN(16) _M128A {
+  ULONGLONG Low;
+  LONGLONG High;
+} M128A, *PM128A;
+
+typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT {
+  USHORT ControlWord;
+  USHORT StatusWord;
+  UCHAR TagWord;
+  UCHAR Reserved1;
+  USHORT ErrorOpcode;
+  ULONG ErrorOffset;
+  USHORT ErrorSelector;
+  USHORT Reserved2;
+  ULONG DataOffset;
+  USHORT DataSelector;
+  USHORT Reserved3;
+  ULONG MxCsr;
+  ULONG MxCsr_Mask;
+  M128A FloatRegisters[8];
+#if defined(_WIN64)
+  M128A XmmRegisters[16];
+  UCHAR Reserved4[96];
+#else
+  M128A XmmRegisters[8];
+  UCHAR Reserved4[192];
+  ULONG StackControl[7];
+  ULONG Cr0NpxState;
+#endif
+} XSAVE_FORMAT, *PXSAVE_FORMAT;
+
+typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER {
+  ULONG64 Mask;
+  ULONG64 Reserved[7];
+} XSAVE_AREA_HEADER, *PXSAVE_AREA_HEADER;
+
+typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA {
+  XSAVE_FORMAT LegacyState;
+  XSAVE_AREA_HEADER Header;
+} XSAVE_AREA, *PXSAVE_AREA;
+
+typedef struct _XSTATE_CONTEXT {
+  ULONG64 Mask;
+  ULONG Length;
+  ULONG Reserved1;
+  PXSAVE_AREA Area;
+#if defined(_X86_)
+  ULONG Reserved2;
+#endif
+  PVOID Buffer;
+#if defined(_X86_)
+  ULONG Reserved3;
+#endif
+} XSTATE_CONTEXT, *PXSTATE_CONTEXT;
+
+typedef struct _XSTATE_SAVE {
+#if defined(_AMD64_)
+  struct _XSTATE_SAVE* Prev;
+  struct _KTHREAD* Thread;
+  UCHAR Level;
+  XSTATE_CONTEXT XStateContext;
+#elif defined(_IA64_)
+  ULONG Dummy;
+#elif defined(_X86_)
+  union {
+    struct {
+      LONG64 Reserved1;
+      ULONG Reserved2;
+      struct _XSTATE_SAVE* Prev;
+      PXSAVE_AREA Reserved3;
+      struct _KTHREAD* Thread;
+      PVOID Reserved4;
+      UCHAR Level;
+    };
+    XSTATE_CONTEXT XStateContext;
+  };
+#endif
+} XSTATE_SAVE, *PXSTATE_SAVE;
+
+#ifdef _X86_
+
+#define MAXIMUM_SUPPORTED_EXTENSION  512
+
+#if !defined(__midl) && !defined(MIDL_PASS)
+C_ASSERT(sizeof(XSAVE_FORMAT) == MAXIMUM_SUPPORTED_EXTENSION);
+#endif
+
+#endif /* _X86_ */
+
+#define XSAVE_ALIGN                    64
+#define MINIMAL_XSTATE_AREA_LENGTH     sizeof(XSAVE_AREA)
+
+#if !defined(__midl) && !defined(MIDL_PASS)
+C_ASSERT((sizeof(XSAVE_FORMAT) & (XSAVE_ALIGN - 1)) == 0);
+C_ASSERT((FIELD_OFFSET(XSAVE_AREA, Header) & (XSAVE_ALIGN - 1)) == 0);
+C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH == 512 + 64);
+#endif
+
+typedef struct _CONTEXT_CHUNK {
+  LONG Offset;
+  ULONG Length;
+} CONTEXT_CHUNK, *PCONTEXT_CHUNK;
+
+typedef struct _CONTEXT_EX {
+  CONTEXT_CHUNK All;
+  CONTEXT_CHUNK Legacy;
+  CONTEXT_CHUNK XState;
+} CONTEXT_EX, *PCONTEXT_EX;
+
+#define CONTEXT_EX_LENGTH         ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN)
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+extern NTSYSAPI volatile CCHAR KeNumberProcessors;
+#elif (NTDDI_VERSION >= NTDDI_WINXP)
+extern NTSYSAPI CCHAR KeNumberProcessors;
+#else
+extern PCCHAR KeNumberProcessors;
+#endif
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+#define NX_SUPPORT_POLICY_ALWAYSOFF 0
+#define NX_SUPPORT_POLICY_ALWAYSON 1
+#define NX_SUPPORT_POLICY_OPTIN 2
+#define NX_SUPPORT_POLICY_OPTOUT 3
+
+typedef VOID
+(NTAPI *PEXPAND_STACK_CALLOUT)(
+  IN PVOID Parameter OPTIONAL);
+
+typedef VOID
+(NTAPI *PTIMER_APC_ROUTINE)(
+  IN PVOID TimerContext,
+  IN ULONG TimerLowValue,
+  IN LONG TimerHighValue);
+
+typedef enum _TIMER_SET_INFORMATION_CLASS {
+  TimerSetCoalescableTimer,
+  MaxTimerInfoClass 
+} TIMER_SET_INFORMATION_CLASS;
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO {
+  IN LARGE_INTEGER DueTime;
+  IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL;
+  IN PVOID TimerContext OPTIONAL;
+  IN struct _COUNTED_REASON_CONTEXT *WakeContext OPTIONAL;
+  IN ULONG Period OPTIONAL;
+  IN ULONG TolerableDelay;
+  OUT PBOOLEAN PreviousState OPTIONAL;
+} TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO;
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+#define XSTATE_LEGACY_FLOATING_POINT        0
+#define XSTATE_LEGACY_SSE                   1
+#define XSTATE_GSSE                         2
+
+#define XSTATE_MASK_LEGACY_FLOATING_POINT   (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
+#define XSTATE_MASK_LEGACY_SSE              (1i64 << (XSTATE_LEGACY_SSE))
+#define XSTATE_MASK_LEGACY                  (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
+#define XSTATE_MASK_GSSE                    (1i64 << (XSTATE_GSSE))
+
+#define MAXIMUM_XSTATE_FEATURES             64
+
+typedef struct _XSTATE_FEATURE {
+  ULONG Offset;
+  ULONG Size;
+} XSTATE_FEATURE, *PXSTATE_FEATURE;
+
+typedef struct _XSTATE_CONFIGURATION {
+  ULONG64 EnabledFeatures;
+  ULONG Size;
+  ULONG OptimizedSave:1;
+  XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
+} XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION;
+
+#define MAX_WOW64_SHARED_ENTRIES 16
+
+typedef struct _KUSER_SHARED_DATA {
+  ULONG TickCountLowDeprecated;
+  ULONG TickCountMultiplier;
+  volatile KSYSTEM_TIME InterruptTime;
+  volatile KSYSTEM_TIME SystemTime;
+  volatile KSYSTEM_TIME TimeZoneBias;
+  USHORT ImageNumberLow;
+  USHORT ImageNumberHigh;
+  WCHAR NtSystemRoot[260];
+  ULONG MaxStackTraceDepth;
+  ULONG CryptoExponent;
+  ULONG TimeZoneId;
+  ULONG LargePageMinimum;
+  ULONG Reserved2[7];
+  NT_PRODUCT_TYPE NtProductType;
+  BOOLEAN ProductTypeIsValid;
+  ULONG NtMajorVersion;
+  ULONG NtMinorVersion;
+  BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
+  ULONG Reserved1;
+  ULONG Reserved3;
+  volatile ULONG TimeSlip;
+  ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
+  ULONG AltArchitecturePad[1];
+  LARGE_INTEGER SystemExpirationDate;
+  ULONG SuiteMask;
+  BOOLEAN KdDebuggerEnabled;
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
+  UCHAR NXSupportPolicy;
+#endif
+  volatile ULONG ActiveConsoleId;
+  volatile ULONG DismountCount;
+  ULONG ComPlusPackage;
+  ULONG LastSystemRITEventTickCount;
+  ULONG NumberOfPhysicalPages;
+  BOOLEAN SafeBootMode;
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+  union {
+    UCHAR TscQpcData;
+    struct {
+      UCHAR TscQpcEnabled:1;
+      UCHAR TscQpcSpareFlag:1;
+      UCHAR TscQpcShift:6;
+    } DUMMYSTRUCTNAME;
+  } DUMMYUNIONNAME;
+  UCHAR TscQpcPad[2];
+#endif
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+  union {
+    ULONG SharedDataFlags;
+    struct {
+      ULONG DbgErrorPortPresent:1;
+      ULONG DbgElevationEnabled:1;
+      ULONG DbgVirtEnabled:1;
+      ULONG DbgInstallerDetectEnabled:1;
+      ULONG DbgSystemDllRelocated:1;
+      ULONG DbgDynProcessorEnabled:1;
+      ULONG DbgSEHValidationEnabled:1;
+      ULONG SpareBits:25;
+    } DUMMYSTRUCTNAME2;
+  } DUMMYUNIONNAME2;
+#else
+  ULONG TraceLogging;
+#endif
+  ULONG DataFlagsPad[1];
+  ULONGLONG TestRetInstruction;
+  ULONG SystemCall;
+  ULONG SystemCallReturn;
+  ULONGLONG SystemCallPad[3];
+  _ANONYMOUS_UNION union {
+    volatile KSYSTEM_TIME TickCount;
+    volatile ULONG64 TickCountQuad;
+    _ANONYMOUS_STRUCT struct {
+      ULONG ReservedTickCountOverlay[3];
+      ULONG TickCountPad[1];
+    } DUMMYSTRUCTNAME;
+  } DUMMYUNIONNAME3;
+  ULONG Cookie;
+  ULONG CookiePad[1];
+#if (NTDDI_VERSION >= NTDDI_WS03)
+  LONGLONG ConsoleSessionForegroundProcessId;
+  ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
+#endif
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+  USHORT UserModeGlobalLogger[16];
+#else
+  USHORT UserModeGlobalLogger[8];
+  ULONG HeapTracingPid[2];
+  ULONG CritSecTracingPid[2];
+#endif
+  ULONG ImageFileExecutionOptions;
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
+  ULONG LangGenerationCount;
+#else
+  /* 4 bytes padding */
+#endif
+  ULONGLONG Reserved5;
+  volatile ULONG64 InterruptTimeBias;
+#endif
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+  volatile ULONG64 TscQpcBias;
+  volatile ULONG ActiveProcessorCount;
+  volatile USHORT ActiveGroupCount;
+  USHORT Reserved4;
+  volatile ULONG AitSamplingValue;
+  volatile ULONG AppCompatFlag;
+  ULONGLONG SystemDllNativeRelocation;
+  ULONG SystemDllWowRelocation;
+  ULONG XStatePad[1];
+  XSTATE_CONFIGURATION XState;
+#endif
+} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+extern NTSYSAPI volatile CCHAR KeNumberProcessors;
+#elif (NTDDI_VERSION >= NTDDI_WINXP)
+extern NTSYSAPI CCHAR KeNumberProcessors;
+#else
+extern PCCHAR KeNumberProcessors;
+#endif
+
+$endif /* _NTDDK_ */
+
diff --git a/reactos/include/xdk/mips/ke.h b/reactos/include/xdk/mips/ke.h
new file mode 100644 (file)
index 0000000..31384ad
--- /dev/null
@@ -0,0 +1,66 @@
+$if (_WDMDDK_)
+#error MIPS Headers are totally incorrect
+
+//
+// Used to contain PFNs and PFN counts
+//
+typedef ULONG PFN_COUNT;
+typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
+typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
+
+#define PASSIVE_LEVEL                      0
+#define APC_LEVEL                          1
+#define DISPATCH_LEVEL                     2
+#define PROFILE_LEVEL                     27
+#define IPI_LEVEL                         29
+#define HIGH_LEVEL                        31
+
+typedef struct _KPCR {
+  struct _KPRCB *Prcb;         /* 20 */
+  KIRQL Irql;                  /* 24 */
+  ULONG IRR;                   /* 28 */
+  ULONG IDR;                   /* 30 */
+} KPCR, *PKPCR;
+
+#define KeGetPcr()                      PCR
+
+typedef struct _KFLOATING_SAVE {
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
+
+static __inline
+ULONG
+NTAPI
+KeGetCurrentProcessorNumber(VOID)
+{
+  return 0;
+}
+
+#define YieldProcessor() __asm__ __volatile__("nop");
+
+#define KeLowerIrql(a) KfLowerIrql(a)
+#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+
+NTKERNELAPI
+VOID
+NTAPI
+KfLowerIrql(
+  IN KIRQL NewIrql);
+
+NTKERNELAPI
+KIRQL
+NTAPI
+KfRaiseIrql(
+  IN KIRQL NewIrql);
+
+NTKERNELAPI
+KIRQL
+NTAPI
+KeRaiseIrqlToDpcLevel(VOID);
+
+NTKERNELAPI
+KIRQL
+NTAPI
+KeRaiseIrqlToSynchLevel(VOID);
+
+$endif
+
diff --git a/reactos/include/xdk/mmfuncs.h b/reactos/include/xdk/mmfuncs.h
new file mode 100644 (file)
index 0000000..b714f97
--- /dev/null
@@ -0,0 +1,658 @@
+/******************************************************************************
+ *                       Memory manager Functions                             *
+ ******************************************************************************/
+$if (_WDMDDK_)
+/* Alignment Macros */
+#define ALIGN_DOWN_BY(size, align) \
+    ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
+
+#define ALIGN_UP_BY(size, align) \
+    (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
+
+#define ALIGN_DOWN_POINTER_BY(ptr, align) \
+    ((PVOID)ALIGN_DOWN_BY(ptr, align))
+
+#define ALIGN_UP_POINTER_BY(ptr, align) \
+    ((PVOID)ALIGN_UP_BY(ptr, align))
+
+#define ALIGN_DOWN(size, type) \
+    ALIGN_DOWN_BY(size, sizeof(type))
+
+#define ALIGN_UP(size, type) \
+    ALIGN_UP_BY(size, sizeof(type))
+
+#define ALIGN_DOWN_POINTER(ptr, type) \
+    ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
+
+#define ALIGN_UP_POINTER(ptr, type) \
+    ALIGN_UP_POINTER_BY(ptr, sizeof(type))
+
+#ifndef FIELD_OFFSET
+#define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
+#endif
+
+#ifndef FIELD_SIZE
+#define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
+#endif
+
+#define POOL_TAGGING                             1
+
+#if DBG
+#define IF_DEBUG if (TRUE)
+#else
+#define IF_DEBUG if (FALSE)
+#endif /* DBG */
+
+/* ULONG
+ * BYTE_OFFSET(
+ *   IN PVOID Va)
+ */
+#define BYTE_OFFSET(Va) \
+  ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
+
+/* ULONG
+ * BYTES_TO_PAGES(
+ *   IN ULONG Size)
+ */
+#define BYTES_TO_PAGES(Size) \
+  (((Size) + PAGE_SIZE - 1) >> PAGE_SHIFT)
+
+/* PVOID
+ * PAGE_ALIGN(
+ *   IN PVOID Va)
+ */
+#define PAGE_ALIGN(Va) \
+  ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
+
+/* ULONG_PTR
+ * ROUND_TO_PAGES(
+ *   IN ULONG_PTR Size)
+ */
+#define ROUND_TO_PAGES(Size) \
+  (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
+
+/* ULONG
+ * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
+ *   IN PVOID Va,
+ *   IN ULONG Size)
+ */
+#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
+  ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
+    + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
+
+#define COMPUTE_PAGES_SPANNED(Va, Size) \
+    ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
+
+/*
+ * ULONG
+ * MmGetMdlByteCount(
+ *   IN PMDL  Mdl)
+ */
+#define MmGetMdlByteCount(_Mdl) \
+  ((_Mdl)->ByteCount)
+
+/*
+ * ULONG
+ * MmGetMdlByteOffset(
+ *   IN PMDL  Mdl)
+ */
+#define MmGetMdlByteOffset(_Mdl) \
+  ((_Mdl)->ByteOffset)
+
+#define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
+
+/*
+ * PPFN_NUMBER
+ * MmGetMdlPfnArray(
+ *   IN PMDL  Mdl)
+ */
+#define MmGetMdlPfnArray(_Mdl) \
+  ((PPFN_NUMBER) ((_Mdl) + 1))
+
+/*
+ * PVOID
+ * MmGetMdlVirtualAddress(
+ *   IN PMDL  Mdl)
+ */
+#define MmGetMdlVirtualAddress(_Mdl) \
+  ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
+
+#define MmGetProcedureAddress(Address) (Address)
+
+/* PVOID MmGetSystemAddressForMdl(
+ *     IN PMDL Mdl);
+ */
+#define MmGetSystemAddressForMdl(Mdl) \
+  (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
+    MDL_SOURCE_IS_NONPAGED_POOL)) ? \
+      ((Mdl)->MappedSystemVa) : \
+      (MmMapLockedPages((Mdl), KernelMode)))
+
+/* PVOID
+ * MmGetSystemAddressForMdlSafe(
+ *     IN PMDL Mdl,
+ *     IN MM_PAGE_PRIORITY Priority)
+ */
+#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
+  (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
+    | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
+    (_Mdl)->MappedSystemVa : \
+    (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
+      KernelMode, MmCached, NULL, FALSE, (_Priority)))
+
+/*
+ * VOID
+ * MmInitializeMdl(
+ *   IN PMDL  MemoryDescriptorList,
+ *   IN PVOID  BaseVa,
+ *   IN SIZE_T  Length)
+ */
+#define MmInitializeMdl(_MemoryDescriptorList, \
+                        _BaseVa, \
+                        _Length) \
+{ \
+  (_MemoryDescriptorList)->Next = (PMDL) NULL; \
+  (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
+    (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
+  (_MemoryDescriptorList)->MdlFlags = 0; \
+  (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
+  (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
+  (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
+}
+
+/*
+ * VOID
+ * MmPrepareMdlForReuse(
+ *   IN PMDL  Mdl)
+ */
+#define MmPrepareMdlForReuse(_Mdl) \
+{ \
+  if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
+    ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
+    MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
+  } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
+    ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
+  } \
+}
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+$if (_NTDDK_)
+NTKERNELAPI
+PPHYSICAL_MEMORY_RANGE
+NTAPI
+MmGetPhysicalMemoryRanges(VOID);
+
+NTKERNELAPI
+PHYSICAL_ADDRESS
+NTAPI
+MmGetPhysicalAddress(
+  IN PVOID BaseAddress);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmIsNonPagedSystemAddressValid(
+  IN PVOID VirtualAddress);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateNonCachedMemory(
+  IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeNonCachedMemory(
+  IN PVOID BaseAddress,
+  IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmGetVirtualForPhysical(
+  IN PHYSICAL_ADDRESS PhysicalAddress);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmMapUserAddressesToPage(
+  IN PVOID BaseAddress,
+  IN SIZE_T NumberOfBytes,
+  IN PVOID PageAddress);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmMapVideoDisplay(
+  IN PHYSICAL_ADDRESS PhysicalAddress,
+  IN SIZE_T NumberOfBytes,
+  IN MEMORY_CACHING_TYPE CacheType);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmMapViewInSessionSpace(
+  IN PVOID Section,
+  OUT PVOID *MappedBase,
+  IN OUT PSIZE_T ViewSize);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmMapViewInSystemSpace(
+  IN PVOID Section,
+  OUT PVOID *MappedBase,
+  IN OUT PSIZE_T ViewSize);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmIsAddressValid(
+  IN PVOID VirtualAddress);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmIsThisAnNtAsSystem(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmLockPagableSectionByHandle(
+  IN PVOID ImageSectionHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmUnmapViewInSessionSpace(
+  IN PVOID MappedBase);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmUnmapViewInSystemSpace(
+  IN PVOID MappedBase);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnsecureVirtualMemory(
+  IN HANDLE SecureHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmRemovePhysicalMemory(
+  IN PPHYSICAL_ADDRESS StartAddress,
+  IN OUT PLARGE_INTEGER NumberOfBytes);
+
+NTKERNELAPI
+HANDLE
+NTAPI
+MmSecureVirtualMemory(
+  IN PVOID Address,
+  IN SIZE_T Size,
+  IN ULONG ProbeMode);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnmapVideoDisplay(
+  IN PVOID BaseAddress,
+  IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmAddPhysicalMemory(
+  IN PPHYSICAL_ADDRESS StartAddress,
+  IN OUT PLARGE_INTEGER NumberOfBytes);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateContiguousMemory(
+  IN SIZE_T NumberOfBytes,
+  IN PHYSICAL_ADDRESS HighestAcceptableAddress);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateContiguousMemorySpecifyCache(
+  IN SIZE_T NumberOfBytes,
+  IN PHYSICAL_ADDRESS LowestAcceptableAddress,
+  IN PHYSICAL_ADDRESS HighestAcceptableAddress,
+  IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
+  IN MEMORY_CACHING_TYPE CacheType);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateContiguousMemorySpecifyCacheNode(
+  IN SIZE_T NumberOfBytes,
+  IN PHYSICAL_ADDRESS LowestAcceptableAddress,
+  IN PHYSICAL_ADDRESS HighestAcceptableAddress,
+  IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
+  IN MEMORY_CACHING_TYPE CacheType,
+  IN NODE_REQUIREMENT PreferredNode);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeContiguousMemory(
+  IN PVOID BaseAddress);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeContiguousMemorySpecifyCache(
+  IN PVOID BaseAddress,
+  IN SIZE_T NumberOfBytes,
+  IN MEMORY_CACHING_TYPE CacheType);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateContiguousMemory(
+  IN SIZE_T NumberOfBytes,
+  IN PHYSICAL_ADDRESS HighestAcceptableAddress);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateContiguousMemorySpecifyCache(
+  IN SIZE_T NumberOfBytes,
+  IN PHYSICAL_ADDRESS LowestAcceptableAddress,
+  IN PHYSICAL_ADDRESS HighestAcceptableAddress,
+  IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
+  IN MEMORY_CACHING_TYPE CacheType);
+
+NTKERNELAPI
+PMDL
+NTAPI
+MmAllocatePagesForMdl(
+  IN PHYSICAL_ADDRESS LowAddress,
+  IN PHYSICAL_ADDRESS HighAddress,
+  IN PHYSICAL_ADDRESS SkipBytes,
+  IN SIZE_T TotalBytes);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmBuildMdlForNonPagedPool(
+  IN OUT PMDLX MemoryDescriptorList);
+
+//DECLSPEC_DEPRECATED_DDK
+NTKERNELAPI
+PMDL
+NTAPI
+MmCreateMdl(
+  IN PMDL MemoryDescriptorList OPTIONAL,
+  IN PVOID Base,
+  IN SIZE_T Length);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeContiguousMemory(
+  IN PVOID BaseAddress);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeContiguousMemorySpecifyCache(
+  IN PVOID BaseAddress,
+  IN SIZE_T NumberOfBytes,
+  IN MEMORY_CACHING_TYPE CacheType);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreePagesFromMdl(
+  IN PMDLX MemoryDescriptorList);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmGetSystemRoutineAddress(
+  IN PUNICODE_STRING SystemRoutineName);
+
+NTKERNELAPI
+LOGICAL
+NTAPI
+MmIsDriverVerifying(
+  IN struct _DRIVER_OBJECT *DriverObject);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmLockPagableDataSection(
+  IN PVOID AddressWithinSection);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmMapIoSpace(
+  IN PHYSICAL_ADDRESS PhysicalAddress,
+  IN SIZE_T NumberOfBytes,
+  IN MEMORY_CACHING_TYPE CacheEnable);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmMapLockedPages(
+  IN PMDL MemoryDescriptorList,
+  IN KPROCESSOR_MODE AccessMode);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmMapLockedPagesSpecifyCache(
+  IN PMDLX MemoryDescriptorList,
+  IN KPROCESSOR_MODE AccessMode,
+  IN MEMORY_CACHING_TYPE CacheType,
+  IN PVOID BaseAddress OPTIONAL,
+  IN ULONG BugCheckOnFailure,
+  IN MM_PAGE_PRIORITY Priority);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmPageEntireDriver(
+  IN PVOID AddressWithinSection);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmProbeAndLockPages(
+  IN OUT PMDL MemoryDescriptorList,
+  IN KPROCESSOR_MODE AccessMode,
+  IN LOCK_OPERATION Operation);
+
+NTKERNELAPI
+MM_SYSTEMSIZE
+NTAPI
+MmQuerySystemSize(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmResetDriverPaging(
+  IN PVOID AddressWithinSection);
+
+NTKERNELAPI
+SIZE_T
+NTAPI
+MmSizeOfMdl(
+  IN PVOID Base,
+  IN SIZE_T Length);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnlockPagableImageSection(
+  IN PVOID ImageSectionHandle);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnlockPages(
+  IN OUT PMDL MemoryDescriptorList);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnmapIoSpace(
+  IN PVOID BaseAddress,
+  IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmProbeAndLockProcessPages(
+  IN OUT PMDL MemoryDescriptorList,
+  IN PEPROCESS Process,
+  IN KPROCESSOR_MODE AccessMode,
+  IN LOCK_OPERATION Operation);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnmapLockedPages(
+  IN PVOID BaseAddress,
+  IN PMDL MemoryDescriptorList);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateContiguousMemorySpecifyCacheNode(
+  IN SIZE_T NumberOfBytes,
+  IN PHYSICAL_ADDRESS LowestAcceptableAddress,
+  IN PHYSICAL_ADDRESS HighestAcceptableAddress,
+  IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
+  IN MEMORY_CACHING_TYPE CacheType,
+  IN NODE_REQUIREMENT PreferredNode);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmAdvanceMdl(
+  IN OUT PMDL Mdl,
+  IN ULONG NumberOfBytes);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateMappingAddress(
+  IN SIZE_T NumberOfBytes,
+  IN ULONG PoolTag);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeMappingAddress(
+  IN PVOID BaseAddress,
+  IN ULONG PoolTag);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmIsVerifierEnabled(
+  OUT PULONG VerifierFlags);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmMapLockedPagesWithReservedMapping(
+  IN PVOID MappingAddress,
+  IN ULONG PoolTag,
+  IN PMDL MemoryDescriptorList,
+  IN MEMORY_CACHING_TYPE CacheType);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmProtectMdlSystemAddress(
+  IN PMDL MemoryDescriptorList,
+  IN ULONG NewProtect);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnmapReservedMapping(
+  IN PVOID BaseAddress,
+  IN ULONG PoolTag,
+  IN PMDL MemoryDescriptorList);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmAddVerifierThunks(
+  IN PVOID ThunkBuffer,
+  IN ULONG ThunkBufferSize);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+$if (_NTDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmCreateMirror(VOID);
+$endif
+$if (_WDMDDK_)
+NTKERNELAPI
+LOGICAL
+NTAPI
+MmIsIoSpaceActive(
+  IN PHYSICAL_ADDRESS StartAddress,
+  IN SIZE_T NumberOfBytes);
+$endif
+#endif
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+NTKERNELAPI
+PMDL
+NTAPI
+MmAllocatePagesForMdlEx(
+  IN PHYSICAL_ADDRESS LowAddress,
+  IN PHYSICAL_ADDRESS HighAddress,
+  IN PHYSICAL_ADDRESS SkipBytes,
+  IN SIZE_T TotalBytes,
+  IN MEMORY_CACHING_TYPE CacheType,
+  IN ULONG Flags);
+#endif
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+$if (_NTDDK_)
+NTSTATUS
+NTAPI
+MmRotatePhysicalView(
+  IN PVOID VirtualAddress,
+  IN OUT PSIZE_T NumberOfBytes,
+  IN PMDLX NewMdl OPTIONAL,
+  IN MM_ROTATE_DIRECTION Direction,
+  IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction,
+  IN PVOID Context OPTIONAL);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+LOGICAL
+NTAPI
+MmIsDriverVerifyingByAddress(
+  IN PVOID AddressWithinSection);
+$endif
+#endif
+
diff --git a/reactos/include/xdk/mmtypes.h b/reactos/include/xdk/mmtypes.h
new file mode 100644 (file)
index 0000000..e4a23f4
--- /dev/null
@@ -0,0 +1,171 @@
+/******************************************************************************
+ *                         Memory manager Types                               *
+ ******************************************************************************/
+$if (_WDMDDK_)
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+typedef ULONG NODE_REQUIREMENT;
+#define MM_ANY_NODE_OK                           0x80000000
+#endif
+
+#define MM_DONT_ZERO_ALLOCATION                  0x00000001
+#define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY         0x00000002
+#define MM_ALLOCATE_FULLY_REQUIRED               0x00000004
+#define MM_ALLOCATE_NO_WAIT                      0x00000008
+#define MM_ALLOCATE_PREFER_CONTIGUOUS            0x00000010
+#define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS    0x00000020
+
+#define MDL_MAPPED_TO_SYSTEM_VA     0x0001
+#define MDL_PAGES_LOCKED            0x0002
+#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
+#define MDL_ALLOCATED_FIXED_SIZE    0x0008
+#define MDL_PARTIAL                 0x0010
+#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
+#define MDL_IO_PAGE_READ            0x0040
+#define MDL_WRITE_OPERATION         0x0080
+#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
+#define MDL_FREE_EXTRA_PTES         0x0200
+#define MDL_DESCRIBES_AWE           0x0400
+#define MDL_IO_SPACE                0x0800
+#define MDL_NETWORK_HEADER          0x1000
+#define MDL_MAPPING_CAN_FAIL        0x2000
+#define MDL_ALLOCATED_MUST_SUCCEED  0x4000
+#define MDL_INTERNAL                0x8000
+
+#define MDL_MAPPING_FLAGS ( \
+  MDL_MAPPED_TO_SYSTEM_VA     | \
+  MDL_PAGES_LOCKED            | \
+  MDL_SOURCE_IS_NONPAGED_POOL | \
+  MDL_PARTIAL_HAS_BEEN_MAPPED | \
+  MDL_PARENT_MAPPED_SYSTEM_VA | \
+  MDL_SYSTEM_VA               | \
+  MDL_IO_SPACE)
+
+#define FLUSH_MULTIPLE_MAXIMUM 32
+
+/* Section access rights */
+#define SECTION_QUERY                0x0001
+#define SECTION_MAP_WRITE            0x0002
+#define SECTION_MAP_READ             0x0004
+#define SECTION_MAP_EXECUTE          0x0008
+#define SECTION_EXTEND_SIZE          0x0010
+#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
+
+#define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\
+                            SECTION_MAP_WRITE |      \
+                            SECTION_MAP_READ |       \
+                            SECTION_MAP_EXECUTE |    \
+                            SECTION_EXTEND_SIZE)
+
+#define SESSION_QUERY_ACCESS  0x0001
+#define SESSION_MODIFY_ACCESS 0x0002
+
+#define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |  \
+                            SESSION_QUERY_ACCESS |             \
+                            SESSION_MODIFY_ACCESS)
+
+#define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
+
+#define PAGE_NOACCESS          0x01
+#define PAGE_READONLY          0x02
+#define PAGE_READWRITE         0x04
+#define PAGE_WRITECOPY         0x08
+#define PAGE_EXECUTE           0x10
+#define PAGE_EXECUTE_READ      0x20
+#define PAGE_EXECUTE_READWRITE 0x40
+#define PAGE_EXECUTE_WRITECOPY 0x80
+#define PAGE_GUARD            0x100
+#define PAGE_NOCACHE          0x200
+#define PAGE_WRITECOMBINE     0x400
+
+#define MEM_COMMIT           0x1000
+#define MEM_RESERVE          0x2000
+#define MEM_DECOMMIT         0x4000
+#define MEM_RELEASE          0x8000
+#define MEM_FREE            0x10000
+#define MEM_PRIVATE         0x20000
+#define MEM_MAPPED          0x40000
+#define MEM_RESET           0x80000
+#define MEM_TOP_DOWN       0x100000
+#define MEM_LARGE_PAGES  0x20000000
+#define MEM_4MB_PAGES    0x80000000
+
+#define SEC_RESERVE       0x4000000
+#define SEC_COMMIT        0x8000000
+#define SEC_LARGE_PAGES  0x80000000
+
+/* Section map options */
+typedef enum _SECTION_INHERIT {
+  ViewShare = 1,
+  ViewUnmap = 2
+} SECTION_INHERIT;
+
+typedef ULONG PFN_COUNT;
+typedef LONG_PTR SPFN_NUMBER, *PSPFN_NUMBER;
+typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER;
+
+typedef struct _MDL {
+  struct _MDL *Next;
+  CSHORT Size;
+  CSHORT MdlFlags;
+  struct _EPROCESS *Process;
+  PVOID MappedSystemVa;
+  PVOID StartVa;
+  ULONG ByteCount;
+  ULONG ByteOffset;
+} MDL, *PMDL;
+typedef MDL *PMDLX;
+
+typedef enum _MEMORY_CACHING_TYPE_ORIG {
+  MmFrameBufferCached = 2
+} MEMORY_CACHING_TYPE_ORIG;
+
+typedef enum _MEMORY_CACHING_TYPE {
+  MmNonCached = FALSE,
+  MmCached = TRUE,
+  MmWriteCombined = MmFrameBufferCached,
+  MmHardwareCoherentCached,
+  MmNonCachedUnordered,
+  MmUSWCCached,
+  MmMaximumCacheType
+} MEMORY_CACHING_TYPE;
+
+typedef enum _MM_PAGE_PRIORITY {
+  LowPagePriority,
+  NormalPagePriority = 16,
+  HighPagePriority = 32
+} MM_PAGE_PRIORITY;
+
+typedef enum _MM_SYSTEM_SIZE {
+  MmSmallSystem,
+  MmMediumSystem,
+  MmLargeSystem
+} MM_SYSTEMSIZE;
+
+extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress;
+extern PVOID MmBadPointer;
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+typedef struct _PHYSICAL_MEMORY_RANGE {
+  PHYSICAL_ADDRESS BaseAddress;
+  LARGE_INTEGER NumberOfBytes;
+} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
+
+typedef NTSTATUS
+(NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)(
+  IN PMDL DestinationMdl,
+  IN PMDL SourceMdl,
+  IN PVOID Context);
+
+typedef enum _MM_ROTATE_DIRECTION {
+  MmToFrameBuffer,
+  MmToFrameBufferNoCopy,
+  MmToRegularMemory,
+  MmToRegularMemoryNoCopy,
+  MmMaximumRotateDirection
+} MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION;
+
+$endif /* _NTDDK_ */
+
diff --git a/reactos/include/xdk/ntddk.template.h b/reactos/include/xdk/ntddk.template.h
new file mode 100644 (file)
index 0000000..003e9b7
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * ntddk.h
+ *
+ * Windows NT Device Driver Kit
+ *
+ * This file is part of the ReactOS DDK package.
+ *
+ * Contributors:
+ *   Amine Khaldi
+ *   Timo Kreuzer (timo.kreuzer@reactos.org)
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#pragma once
+
+#define _NTDDK_
+
+#if !defined(_NTHAL_) && !defined(_NTIFS_)
+#define _NTDDK_INCLUDED_
+#define _DDK_DRIVER_
+#endif
+
+/* Dependencies */
+
+#define NT_INCLUDED
+#define _CTYPE_DISABLE_MACROS
+
+#include <wdm.h>
+#include <excpt.h>
+#include <ntdef.h>
+#include <ntstatus.h>
+#include <mce.h>
+
+/* FIXME
+#include <bugcodes.h>
+#include <ntiologc.h>
+*/
+
+#include <stdarg.h> // FIXME
+#include <basetyps.h> // FIXME
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* GUID and UUID */
+#ifndef _NTLSA_IFS_
+#ifndef _NTLSA_AUDIT_
+#define _NTLSA_AUDIT_
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#endif /* _NTLSA_AUDIT_ */
+#endif /* _NTLSA_IFS_ */
+
+typedef GUID UUID;
+
+struct _LOADER_PARAMETER_BLOCK;
+struct _CREATE_DISK;
+struct _DRIVE_LAYOUT_INFORMATION_EX;
+struct _SET_PARTITION_INFORMATION_EX;
+
+typedef struct _BUS_HANDLER *PBUS_HANDLER;
+typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
+#if defined(_NTHAL_INCLUDED_)
+typedef struct _KAFFINITY_EX *PKAFFINITY_EX;
+#endif
+typedef struct _PEB *PPEB;
+
+#ifndef _NTIMAGE_
+
+typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32;
+typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64;
+
+#ifdef _WIN64
+typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
+#else
+typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
+#endif
+
+#endif /* _NTIMAGE_ */
+
+$define (_NTDDK_)
+$include (extypes.h)
+$include (iotypes.h)
+$include (haltypes.h)
+$include (ketypes.h)
+$include (kdtypes.h)
+$include (mmtypes.h)
+$include (pstypes.h)
+$include (rtltypes.h)
+$include (setypes.h)
+
+#if defined(_M_IX86)
+$include(x86/ke.h)
+$include(x86/mm.h)
+#elif defined(_M_AMD64)
+$include(amd64/ke.h)
+$include(amd64/mm.h)
+#elif defined(_M_IA64)
+$include(ia64/ke.h)
+#elif defined(_M_PPC)
+$include(ppc/ke.h)
+#elif defined(_M_MIPS)
+$include(mips/ke.h)
+#elif defined(_M_ARM)
+$include(arm/ke.h)
+#else
+#error Unknown Architecture
+#endif
+
+$include (exfuncs.h)
+$include (halfuncs.h)
+$include (iofuncs.h)
+$include (kdfuncs.h)
+$include (kefuncs.h)
+$include (mmfuncs.h)
+$include (psfuncs.h)
+$include (rtlfuncs.h)
+$include (sefuncs.h)
+$include (zwfuncs.h)
+
+
+/* UNSORTED */
+
+#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType)  \
+        ((ConditionMask) = VerSetConditionMask((ConditionMask), \
+        (TypeBitMask), (ComparisonType)))
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTSYSAPI
+ULONGLONG
+NTAPI
+VerSetConditionMask(
+  IN ULONGLONG ConditionMask,
+  IN ULONG TypeMask,
+  IN UCHAR Condition);
+#endif
+
+typedef struct _KERNEL_USER_TIMES {
+  LARGE_INTEGER CreateTime;
+  LARGE_INTEGER ExitTime;
+  LARGE_INTEGER KernelTime;
+  LARGE_INTEGER UserTime;
+} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
+
+/* NtXxx Functions */
+
+typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION {
+  SystemFirmwareTable_Enumerate,
+  SystemFirmwareTable_Get
+} SYSTEM_FIRMWARE_TABLE_ACTION;
+
+typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION {
+  ULONG ProviderSignature;
+  SYSTEM_FIRMWARE_TABLE_ACTION Action;
+  ULONG TableID;
+  ULONG TableBufferLength;
+  UCHAR TableBuffer[ANYSIZE_ARRAY];
+} SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
+
+typedef NTSTATUS
+(__cdecl *PFNFTH)(
+  IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo);
+
+typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER {
+  ULONG ProviderSignature;
+  BOOLEAN Register;
+  PFNFTH FirmwareTableHandler;
+  PVOID DriverObject;
+} SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER;
+
+typedef ULONG_PTR
+(NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
+  IN PVOID Context);
+
+typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
+  PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
+  PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
+} DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
+
+#define DRIVER_VERIFIER_SPECIAL_POOLING             0x0001
+#define DRIVER_VERIFIER_FORCE_IRQL_CHECKING         0x0002
+#define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES  0x0004
+#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS      0x0008
+#define DRIVER_VERIFIER_IO_CHECKING                 0x0010
+
+#define SHARED_GLOBAL_FLAGS_ERROR_PORT_V        0x0
+#define SHARED_GLOBAL_FLAGS_ERROR_PORT          (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
+
+#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
+#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED   (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
+
+#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V      0x2
+#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED        (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
+
+#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V  0x3
+#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED    \
+    (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
+
+#define SHARED_GLOBAL_FLAGS_SPARE_V                     0x4
+#define SHARED_GLOBAL_FLAGS_SPARE                       \
+    (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
+
+#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V      0x5
+#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED        \
+    (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
+
+#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V    0x6
+#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED        \
+    (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
+
+#define EX_INIT_BITS(Flags, Bit) \
+    *((Flags)) |= (Bit)             // Safe to use before concurrently accessible
+
+#define EX_TEST_SET_BIT(Flags, Bit) \
+    InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
+
+#define EX_TEST_CLEAR_BIT(Flags, Bit) \
+    InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
+
+#define PCCARD_MAP_ERROR               0x01
+#define PCCARD_DEVICE_PCI              0x10
+
+#define PCCARD_SCAN_DISABLED           0x01
+#define PCCARD_MAP_ZERO                0x02
+#define PCCARD_NO_TIMER                0x03
+#define PCCARD_NO_PIC                  0x04
+#define PCCARD_NO_LEGACY_BASE          0x05
+#define PCCARD_DUP_LEGACY_BASE         0x06
+#define PCCARD_NO_CONTROLLERS          0x07
+
+#define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
+
+/* Filesystem runtime library routines */
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlIsTotalDeviceFailure(
+  IN NTSTATUS Status);
+#endif
+
+/* FIXME : These definitions below doesn't belong to NTDDK */
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/reactos/include/xdk/nttmapi.h b/reactos/include/xdk/nttmapi.h
new file mode 100644 (file)
index 0000000..721005f
--- /dev/null
@@ -0,0 +1,652 @@
+$if (_WDMDDK_)
+#ifndef _NTTMAPI_
+#define _NTTMAPI_
+
+#include <ktmtypes.h>
+
+#define TRANSACTIONMANAGER_QUERY_INFORMATION     (0x0001)
+#define TRANSACTIONMANAGER_SET_INFORMATION       (0x0002)
+#define TRANSACTIONMANAGER_RECOVER               (0x0004)
+#define TRANSACTIONMANAGER_RENAME                (0x0008)
+#define TRANSACTIONMANAGER_CREATE_RM             (0x0010)
+#define TRANSACTIONMANAGER_BIND_TRANSACTION      (0x0020)
+
+#define TRANSACTIONMANAGER_GENERIC_READ            (STANDARD_RIGHTS_READ            |\
+                                                    TRANSACTIONMANAGER_QUERY_INFORMATION)
+
+#define TRANSACTIONMANAGER_GENERIC_WRITE           (STANDARD_RIGHTS_WRITE           |\
+                                                    TRANSACTIONMANAGER_SET_INFORMATION     |\
+                                                    TRANSACTIONMANAGER_RECOVER             |\
+                                                    TRANSACTIONMANAGER_RENAME              |\
+                                                    TRANSACTIONMANAGER_CREATE_RM)
+
+#define TRANSACTIONMANAGER_GENERIC_EXECUTE         (STANDARD_RIGHTS_EXECUTE)
+
+#define TRANSACTIONMANAGER_ALL_ACCESS              (STANDARD_RIGHTS_REQUIRED        |\
+                                                    TRANSACTIONMANAGER_GENERIC_READ        |\
+                                                    TRANSACTIONMANAGER_GENERIC_WRITE       |\
+                                                    TRANSACTIONMANAGER_GENERIC_EXECUTE     |\
+                                                    TRANSACTIONMANAGER_BIND_TRANSACTION)
+
+#define TRANSACTION_QUERY_INFORMATION     (0x0001)
+#define TRANSACTION_SET_INFORMATION       (0x0002)
+#define TRANSACTION_ENLIST                (0x0004)
+#define TRANSACTION_COMMIT                (0x0008)
+#define TRANSACTION_ROLLBACK              (0x0010)
+#define TRANSACTION_PROPAGATE             (0x0020)
+#define TRANSACTION_RIGHT_RESERVED1       (0x0040)
+
+#define TRANSACTION_GENERIC_READ            (STANDARD_RIGHTS_READ            |\
+                                             TRANSACTION_QUERY_INFORMATION   |\
+                                             SYNCHRONIZE)
+
+#define TRANSACTION_GENERIC_WRITE           (STANDARD_RIGHTS_WRITE           |\
+                                             TRANSACTION_SET_INFORMATION     |\
+                                             TRANSACTION_COMMIT              |\
+                                             TRANSACTION_ENLIST              |\
+                                             TRANSACTION_ROLLBACK            |\
+                                             TRANSACTION_PROPAGATE           |\
+                                             SYNCHRONIZE)
+
+#define TRANSACTION_GENERIC_EXECUTE         (STANDARD_RIGHTS_EXECUTE         |\
+                                             TRANSACTION_COMMIT              |\
+                                             TRANSACTION_ROLLBACK            |\
+                                             SYNCHRONIZE)
+
+#define TRANSACTION_ALL_ACCESS              (STANDARD_RIGHTS_REQUIRED        |\
+                                             TRANSACTION_GENERIC_READ        |\
+                                             TRANSACTION_GENERIC_WRITE       |\
+                                             TRANSACTION_GENERIC_EXECUTE)
+
+#define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ        |\
+                                             STANDARD_RIGHTS_WRITE           |\
+                                             TRANSACTION_SET_INFORMATION     |\
+                                             TRANSACTION_ENLIST              |\
+                                             TRANSACTION_ROLLBACK            |\
+                                             TRANSACTION_PROPAGATE           |\
+                                             SYNCHRONIZE)
+
+#define RESOURCEMANAGER_QUERY_INFORMATION        (0x0001)
+#define RESOURCEMANAGER_SET_INFORMATION          (0x0002)
+#define RESOURCEMANAGER_RECOVER                  (0x0004)
+#define RESOURCEMANAGER_ENLIST                   (0x0008)
+#define RESOURCEMANAGER_GET_NOTIFICATION         (0x0010)
+#define RESOURCEMANAGER_REGISTER_PROTOCOL        (0x0020)
+#define RESOURCEMANAGER_COMPLETE_PROPAGATION     (0x0040)
+
+#define RESOURCEMANAGER_GENERIC_READ        (STANDARD_RIGHTS_READ                 |\
+                                             RESOURCEMANAGER_QUERY_INFORMATION    |\
+                                             SYNCHRONIZE)
+
+#define RESOURCEMANAGER_GENERIC_WRITE       (STANDARD_RIGHTS_WRITE                |\
+                                             RESOURCEMANAGER_SET_INFORMATION      |\
+                                             RESOURCEMANAGER_RECOVER              |\
+                                             RESOURCEMANAGER_ENLIST               |\
+                                             RESOURCEMANAGER_GET_NOTIFICATION     |\
+                                             RESOURCEMANAGER_REGISTER_PROTOCOL    |\
+                                             RESOURCEMANAGER_COMPLETE_PROPAGATION |\
+                                             SYNCHRONIZE)
+
+#define RESOURCEMANAGER_GENERIC_EXECUTE     (STANDARD_RIGHTS_EXECUTE              |\
+                                             RESOURCEMANAGER_RECOVER              |\
+                                             RESOURCEMANAGER_ENLIST               |\
+                                             RESOURCEMANAGER_GET_NOTIFICATION     |\
+                                             RESOURCEMANAGER_COMPLETE_PROPAGATION |\
+                                             SYNCHRONIZE)
+
+#define RESOURCEMANAGER_ALL_ACCESS          (STANDARD_RIGHTS_REQUIRED             |\
+                                             RESOURCEMANAGER_GENERIC_READ         |\
+                                             RESOURCEMANAGER_GENERIC_WRITE        |\
+                                             RESOURCEMANAGER_GENERIC_EXECUTE)
+
+#define ENLISTMENT_QUERY_INFORMATION             (0x0001)
+#define ENLISTMENT_SET_INFORMATION               (0x0002)
+#define ENLISTMENT_RECOVER                       (0x0004)
+#define ENLISTMENT_SUBORDINATE_RIGHTS            (0x0008)
+#define ENLISTMENT_SUPERIOR_RIGHTS               (0x0010)
+
+#define ENLISTMENT_GENERIC_READ        (STANDARD_RIGHTS_READ           |\
+                                        ENLISTMENT_QUERY_INFORMATION)
+
+#define ENLISTMENT_GENERIC_WRITE       (STANDARD_RIGHTS_WRITE          |\
+                                        ENLISTMENT_SET_INFORMATION     |\
+                                        ENLISTMENT_RECOVER             |\
+                                        ENLISTMENT_SUBORDINATE_RIGHTS  |\
+                                        ENLISTMENT_SUPERIOR_RIGHTS)
+
+#define ENLISTMENT_GENERIC_EXECUTE     (STANDARD_RIGHTS_EXECUTE        |\
+                                        ENLISTMENT_RECOVER             |\
+                                        ENLISTMENT_SUBORDINATE_RIGHTS  |\
+                                        ENLISTMENT_SUPERIOR_RIGHTS)
+
+#define ENLISTMENT_ALL_ACCESS          (STANDARD_RIGHTS_REQUIRED       |\
+                                        ENLISTMENT_GENERIC_READ        |\
+                                        ENLISTMENT_GENERIC_WRITE       |\
+                                        ENLISTMENT_GENERIC_EXECUTE)
+
+typedef enum _TRANSACTION_OUTCOME {
+  TransactionOutcomeUndetermined = 1,
+  TransactionOutcomeCommitted,
+  TransactionOutcomeAborted,
+} TRANSACTION_OUTCOME;
+
+
+typedef enum _TRANSACTION_STATE {
+  TransactionStateNormal = 1,
+  TransactionStateIndoubt,
+  TransactionStateCommittedNotify,
+} TRANSACTION_STATE;
+
+
+typedef struct _TRANSACTION_BASIC_INFORMATION {
+  GUID TransactionId;
+  ULONG State;
+  ULONG Outcome;
+} TRANSACTION_BASIC_INFORMATION, *PTRANSACTION_BASIC_INFORMATION;
+
+typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION {
+  GUID TmIdentity;
+  LARGE_INTEGER VirtualClock;
+} TRANSACTIONMANAGER_BASIC_INFORMATION, *PTRANSACTIONMANAGER_BASIC_INFORMATION;
+
+typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION {
+  GUID LogIdentity;
+} TRANSACTIONMANAGER_LOG_INFORMATION, *PTRANSACTIONMANAGER_LOG_INFORMATION;
+
+typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION {
+  ULONG LogPathLength;
+  WCHAR LogPath[1];
+} TRANSACTIONMANAGER_LOGPATH_INFORMATION, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION;
+
+typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION {
+  ULONGLONG LastRecoveredLsn;
+} TRANSACTIONMANAGER_RECOVERY_INFORMATION, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION;
+
+typedef struct _TRANSACTION_PROPERTIES_INFORMATION {
+  ULONG IsolationLevel;
+  ULONG IsolationFlags;
+  LARGE_INTEGER Timeout;
+  ULONG Outcome;
+  ULONG DescriptionLength;
+  WCHAR Description[1];
+} TRANSACTION_PROPERTIES_INFORMATION, *PTRANSACTION_PROPERTIES_INFORMATION;
+
+typedef struct _TRANSACTION_BIND_INFORMATION {
+  HANDLE TmHandle;
+} TRANSACTION_BIND_INFORMATION, *PTRANSACTION_BIND_INFORMATION;
+
+typedef struct _TRANSACTION_ENLISTMENT_PAIR {
+  GUID EnlistmentId;
+  GUID ResourceManagerId;
+} TRANSACTION_ENLISTMENT_PAIR, *PTRANSACTION_ENLISTMENT_PAIR;
+
+typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION {
+  ULONG NumberOfEnlistments;
+  TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1];
+} TRANSACTION_ENLISTMENTS_INFORMATION, *PTRANSACTION_ENLISTMENTS_INFORMATION;
+
+typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION {
+  TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair;
+} TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION;
+
+typedef struct _RESOURCEMANAGER_BASIC_INFORMATION {
+  GUID ResourceManagerId;
+  ULONG DescriptionLength;
+  WCHAR Description[1];
+} RESOURCEMANAGER_BASIC_INFORMATION, *PRESOURCEMANAGER_BASIC_INFORMATION;
+
+typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION {
+  HANDLE IoCompletionPortHandle;
+  ULONG_PTR CompletionKey;
+} RESOURCEMANAGER_COMPLETION_INFORMATION, *PRESOURCEMANAGER_COMPLETION_INFORMATION;
+
+typedef enum _KTMOBJECT_TYPE {
+  KTMOBJECT_TRANSACTION,
+  KTMOBJECT_TRANSACTION_MANAGER,
+  KTMOBJECT_RESOURCE_MANAGER,
+  KTMOBJECT_ENLISTMENT,
+  KTMOBJECT_INVALID
+} KTMOBJECT_TYPE, *PKTMOBJECT_TYPE;
+
+typedef struct _KTMOBJECT_CURSOR {
+  GUID LastQuery;
+  ULONG ObjectIdCount;
+  GUID ObjectIds[1];
+} KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR;
+
+typedef enum _TRANSACTION_INFORMATION_CLASS {
+  TransactionBasicInformation,
+  TransactionPropertiesInformation,
+  TransactionEnlistmentInformation,
+  TransactionSuperiorEnlistmentInformation
+} TRANSACTION_INFORMATION_CLASS;
+
+typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS {
+  TransactionManagerBasicInformation,
+  TransactionManagerLogInformation,
+  TransactionManagerLogPathInformation,
+  TransactionManagerRecoveryInformation = 4
+} TRANSACTIONMANAGER_INFORMATION_CLASS;
+
+typedef enum _RESOURCEMANAGER_INFORMATION_CLASS {
+  ResourceManagerBasicInformation,
+  ResourceManagerCompletionInformation,
+} RESOURCEMANAGER_INFORMATION_CLASS;
+
+typedef struct _ENLISTMENT_BASIC_INFORMATION {
+  GUID EnlistmentId;
+  GUID TransactionId;
+  GUID ResourceManagerId;
+} ENLISTMENT_BASIC_INFORMATION, *PENLISTMENT_BASIC_INFORMATION;
+
+typedef struct _ENLISTMENT_CRM_INFORMATION {
+  GUID CrmTransactionManagerId;
+  GUID CrmResourceManagerId;
+  GUID CrmEnlistmentId;
+} ENLISTMENT_CRM_INFORMATION, *PENLISTMENT_CRM_INFORMATION;
+
+typedef enum _ENLISTMENT_INFORMATION_CLASS {
+  EnlistmentBasicInformation,
+  EnlistmentRecoveryInformation,
+  EnlistmentCrmInformation
+} ENLISTMENT_INFORMATION_CLASS;
+
+typedef struct _TRANSACTION_LIST_ENTRY {
+#if defined(__cplusplus)
+  ::UOW UOW;
+#else
+  UOW UOW;
+#endif
+} TRANSACTION_LIST_ENTRY, *PTRANSACTION_LIST_ENTRY;
+
+typedef struct _TRANSACTION_LIST_INFORMATION {
+  ULONG NumberOfTransactions;
+  TRANSACTION_LIST_ENTRY TransactionInformation[1];
+} TRANSACTION_LIST_INFORMATION, *PTRANSACTION_LIST_INFORMATION;
+
+typedef NTSTATUS
+(NTAPI *PFN_NT_CREATE_TRANSACTION)(
+  OUT PHANDLE TransactionHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN LPGUID Uow OPTIONAL,
+  IN HANDLE TmHandle OPTIONAL,
+  IN ULONG CreateOptions OPTIONAL,
+  IN ULONG IsolationLevel OPTIONAL,
+  IN ULONG IsolationFlags OPTIONAL,
+  IN PLARGE_INTEGER Timeout OPTIONAL,
+  IN PUNICODE_STRING Description OPTIONAL);
+
+typedef NTSTATUS
+(NTAPI *PFN_NT_OPEN_TRANSACTION)(
+  OUT PHANDLE TransactionHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN LPGUID Uow OPTIONAL,
+  IN HANDLE TmHandle OPTIONAL);
+
+typedef NTSTATUS
+(NTAPI *PFN_NT_QUERY_INFORMATION_TRANSACTION)(
+  IN HANDLE TransactionHandle,
+  IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
+  OUT PVOID TransactionInformation,
+  IN ULONG TransactionInformationLength,
+  OUT PULONG ReturnLength OPTIONAL);
+
+typedef NTSTATUS
+(NTAPI *PFN_NT_SET_INFORMATION_TRANSACTION)(
+  IN HANDLE TransactionHandle,
+  IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
+  IN PVOID TransactionInformation,
+  IN ULONG TransactionInformationLength);
+
+typedef NTSTATUS
+(NTAPI *PFN_NT_COMMIT_TRANSACTION)(
+  IN HANDLE TransactionHandle,
+  IN BOOLEAN Wait);
+
+typedef NTSTATUS
+(NTAPI *PFN_NT_ROLLBACK_TRANSACTION)(
+  IN HANDLE TransactionHandle,
+  IN BOOLEAN Wait);
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtCreateTransactionManager(
+  OUT PHANDLE TmHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN PUNICODE_STRING LogFileName OPTIONAL,
+  IN ULONG CreateOptions OPTIONAL,
+  IN ULONG CommitStrength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtOpenTransactionManager(
+  OUT PHANDLE TmHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN PUNICODE_STRING LogFileName OPTIONAL,
+  IN LPGUID TmIdentity OPTIONAL,
+  IN ULONG OpenOptions OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRenameTransactionManager(
+  IN PUNICODE_STRING LogFileName,
+  IN LPGUID ExistingTransactionManagerGuid);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRollforwardTransactionManager(
+  IN HANDLE TransactionManagerHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRecoverTransactionManager(
+  IN HANDLE TransactionManagerHandle);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtQueryInformationTransactionManager(
+  IN HANDLE TransactionManagerHandle,
+  IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
+  OUT PVOID TransactionManagerInformation,
+  IN ULONG TransactionManagerInformationLength,
+  OUT PULONG ReturnLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtSetInformationTransactionManager(
+  IN HANDLE TmHandle OPTIONAL,
+  IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
+  IN PVOID TransactionManagerInformation,
+  IN ULONG TransactionManagerInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtEnumerateTransactionObject(
+  IN HANDLE RootObjectHandle OPTIONAL,
+  IN KTMOBJECT_TYPE QueryType,
+  IN OUT PKTMOBJECT_CURSOR ObjectCursor,
+  IN ULONG ObjectCursorLength,
+  OUT PULONG ReturnLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtCreateTransaction(
+  OUT PHANDLE TransactionHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN LPGUID Uow OPTIONAL,
+  IN HANDLE TmHandle OPTIONAL,
+  IN ULONG CreateOptions OPTIONAL,
+  IN ULONG IsolationLevel OPTIONAL,
+  IN ULONG IsolationFlags OPTIONAL,
+  IN PLARGE_INTEGER Timeout OPTIONAL,
+  IN PUNICODE_STRING Description OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtOpenTransaction(
+  OUT PHANDLE TransactionHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN LPGUID Uow,
+  IN HANDLE TmHandle OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtQueryInformationTransaction(
+  IN HANDLE TransactionHandle,
+  IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
+  OUT PVOID TransactionInformation,
+  IN ULONG TransactionInformationLength,
+  OUT PULONG ReturnLength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtSetInformationTransaction(
+  IN HANDLE TransactionHandle,
+  IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
+  IN PVOID TransactionInformation,
+  IN ULONG TransactionInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtCommitTransaction(
+  IN HANDLE TransactionHandle,
+  IN BOOLEAN Wait);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRollbackTransaction(
+  IN HANDLE TransactionHandle,
+  IN BOOLEAN Wait);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtCreateEnlistment(
+  OUT PHANDLE EnlistmentHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN HANDLE ResourceManagerHandle,
+  IN HANDLE TransactionHandle,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN ULONG CreateOptions OPTIONAL,
+  IN NOTIFICATION_MASK NotificationMask,
+  IN PVOID EnlistmentKey OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtOpenEnlistment(
+  OUT PHANDLE EnlistmentHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN HANDLE ResourceManagerHandle,
+  IN LPGUID EnlistmentGuid,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtQueryInformationEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
+  OUT PVOID EnlistmentInformation,
+  IN ULONG EnlistmentInformationLength,
+  OUT PULONG ReturnLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtSetInformationEnlistment(
+  IN HANDLE EnlistmentHandle OPTIONAL,
+  IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
+  IN PVOID EnlistmentInformation,
+  IN ULONG EnlistmentInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRecoverEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PVOID EnlistmentKey OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtPrePrepareEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtPrepareEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtCommitEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRollbackEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtPrePrepareComplete(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtPrepareComplete(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtCommitComplete(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtReadOnlyEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRollbackComplete(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtSinglePhaseReject(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtCreateResourceManager(
+  OUT PHANDLE ResourceManagerHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN HANDLE TmHandle,
+  IN LPGUID RmGuid,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN ULONG CreateOptions OPTIONAL,
+  IN PUNICODE_STRING Description OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtOpenResourceManager(
+  OUT PHANDLE ResourceManagerHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN HANDLE TmHandle,
+  IN LPGUID ResourceManagerGuid OPTIONAL,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRecoverResourceManager(
+  IN HANDLE ResourceManagerHandle);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtGetNotificationResourceManager(
+  IN HANDLE ResourceManagerHandle,
+  OUT PTRANSACTION_NOTIFICATION TransactionNotification,
+  IN ULONG NotificationLength,
+  IN PLARGE_INTEGER Timeout OPTIONAL,
+  OUT PULONG ReturnLength OPTIONAL,
+  IN ULONG Asynchronous,
+  IN ULONG_PTR AsynchronousContext OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtQueryInformationResourceManager(
+  IN HANDLE ResourceManagerHandle,
+  IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
+  OUT PVOID ResourceManagerInformation,
+  IN ULONG ResourceManagerInformationLength,
+  OUT PULONG ReturnLength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtSetInformationResourceManager(
+  IN HANDLE ResourceManagerHandle,
+  IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
+  IN PVOID ResourceManagerInformation,
+  IN ULONG ResourceManagerInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRegisterProtocolAddressInformation(
+  IN HANDLE ResourceManager,
+  IN PCRM_PROTOCOL_ID ProtocolId,
+  IN ULONG ProtocolInformationSize,
+  IN PVOID ProtocolInformation,
+  IN ULONG CreateOptions OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtPropagationComplete(
+  IN HANDLE ResourceManagerHandle,
+  IN ULONG RequestCookie,
+  IN ULONG BufferLength,
+  IN PVOID Buffer);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtPropagationFailed(
+  IN HANDLE ResourceManagerHandle,
+  IN ULONG RequestCookie,
+  IN NTSTATUS PropStatus);
+
+#endif /* NTDDI_VERSION >= NTDDI_VISTA */
+
+#endif /* !_NTTMAPI_ */
+$endif
diff --git a/reactos/include/xdk/obfuncs.h b/reactos/include/xdk/obfuncs.h
new file mode 100644 (file)
index 0000000..40912fa
--- /dev/null
@@ -0,0 +1,141 @@
+/******************************************************************************
+ *                          Object Manager Functions                          *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfDereferenceObject(
+  IN PVOID Object);
+#define ObDereferenceObject ObfDereferenceObject
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObGetObjectSecurity(
+  IN PVOID Object,
+  OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
+  OUT PBOOLEAN MemoryAllocated);
+
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfReferenceObject(
+  IN PVOID Object);
+#define ObReferenceObject ObfReferenceObject
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObReferenceObjectByHandle(
+  IN HANDLE Handle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_TYPE ObjectType OPTIONAL,
+  IN KPROCESSOR_MODE AccessMode,
+  OUT PVOID *Object,
+  OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObReferenceObjectByPointer(
+  IN PVOID Object,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_TYPE ObjectType OPTIONAL,
+  IN KPROCESSOR_MODE AccessMode);
+
+NTKERNELAPI
+VOID
+NTAPI
+ObReleaseObjectSecurity(
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+  IN BOOLEAN MemoryAllocated);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+NTKERNELAPI
+VOID
+NTAPI
+ObDereferenceObjectDeferDelete(
+  IN PVOID Object);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObRegisterCallbacks(
+  IN POB_CALLBACK_REGISTRATION CallbackRegistration,
+  OUT PVOID *RegistrationHandle);
+
+NTKERNELAPI
+VOID
+NTAPI
+ObUnRegisterCallbacks(
+  IN PVOID RegistrationHandle);
+
+NTKERNELAPI
+USHORT
+NTAPI
+ObGetFilterVersion(VOID);
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObReferenceObjectByHandleWithTag(
+  IN HANDLE Handle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_TYPE ObjectType OPTIONAL,
+  IN KPROCESSOR_MODE AccessMode,
+  IN ULONG Tag,
+  OUT PVOID *Object,
+  OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL);
+
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfReferenceObjectWithTag(
+  IN PVOID Object,
+  IN ULONG Tag);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObReferenceObjectByPointerWithTag(
+  IN PVOID Object,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_TYPE ObjectType OPTIONAL,
+  IN KPROCESSOR_MODE AccessMode,
+  IN ULONG Tag);
+
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfDereferenceObjectWithTag(
+  IN PVOID Object,
+  IN ULONG Tag);
+
+NTKERNELAPI
+VOID
+NTAPI
+ObDereferenceObjectDeferDeleteWithTag(
+  IN PVOID Object,
+  IN ULONG Tag);
+
+#define ObDereferenceObject ObfDereferenceObject
+#define ObReferenceObject ObfReferenceObject
+#define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
+#define ObReferenceObjectWithTag ObfReferenceObjectWithTag
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+$endif
+
diff --git a/reactos/include/xdk/obtypes.h b/reactos/include/xdk/obtypes.h
new file mode 100644 (file)
index 0000000..84310a9
--- /dev/null
@@ -0,0 +1,135 @@
+/******************************************************************************
+ *                            Object Manager Types                            *
+ ******************************************************************************/
+
+#define MAXIMUM_FILENAME_LENGTH           256
+#define OBJ_NAME_PATH_SEPARATOR     ((WCHAR)L'\\')
+
+#define OBJECT_TYPE_CREATE 0x0001
+#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
+
+#define DIRECTORY_QUERY 0x0001
+#define DIRECTORY_TRAVERSE 0x0002
+#define DIRECTORY_CREATE_OBJECT 0x0004
+#define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
+#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
+
+#define SYMBOLIC_LINK_QUERY               0x0001
+#define SYMBOLIC_LINK_ALL_ACCESS          (STANDARD_RIGHTS_REQUIRED | 0x1)
+
+#define DUPLICATE_CLOSE_SOURCE            0x00000001
+#define DUPLICATE_SAME_ACCESS             0x00000002
+#define DUPLICATE_SAME_ATTRIBUTES         0x00000004
+
+#define OB_FLT_REGISTRATION_VERSION_0100         0x0100
+#define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
+
+typedef ULONG OB_OPERATION;
+
+#define OB_OPERATION_HANDLE_CREATE               0x00000001
+#define OB_OPERATION_HANDLE_DUPLICATE            0x00000002
+
+typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION {
+  IN OUT ACCESS_MASK DesiredAccess;
+  IN ACCESS_MASK OriginalDesiredAccess;
+} OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION;
+
+typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION {
+  IN OUT ACCESS_MASK DesiredAccess;
+  IN ACCESS_MASK OriginalDesiredAccess;
+  IN PVOID SourceProcess;
+  IN PVOID TargetProcess;
+} OB_PRE_DUPLICATE_HANDLE_INFORMATION, *POB_PRE_DUPLICATE_HANDLE_INFORMATION;
+
+typedef union _OB_PRE_OPERATION_PARAMETERS {
+  IN OUT OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation;
+  IN OUT OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
+} OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS;
+
+typedef struct _OB_PRE_OPERATION_INFORMATION {
+  IN OB_OPERATION Operation;
+  union {
+    IN ULONG Flags;
+    struct {
+      IN ULONG KernelHandle:1;
+      IN ULONG Reserved:31;
+    };
+  };
+  IN PVOID Object;
+  IN POBJECT_TYPE ObjectType;
+  OUT PVOID CallContext;
+  IN POB_PRE_OPERATION_PARAMETERS Parameters;
+} OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION;
+
+typedef struct _OB_POST_CREATE_HANDLE_INFORMATION {
+  IN ACCESS_MASK GrantedAccess;
+} OB_POST_CREATE_HANDLE_INFORMATION, *POB_POST_CREATE_HANDLE_INFORMATION;
+
+typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION {
+  IN ACCESS_MASK GrantedAccess;
+} OB_POST_DUPLICATE_HANDLE_INFORMATION, *POB_POST_DUPLICATE_HANDLE_INFORMATION;
+
+typedef union _OB_POST_OPERATION_PARAMETERS {
+  IN OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation;
+  IN OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
+} OB_POST_OPERATION_PARAMETERS, *POB_POST_OPERATION_PARAMETERS;
+
+typedef struct _OB_POST_OPERATION_INFORMATION {
+  IN OB_OPERATION Operation;
+    union {
+      IN ULONG Flags;
+      struct {
+        IN ULONG KernelHandle:1;
+        IN ULONG Reserved:31;
+      };
+    };
+  IN PVOID Object;
+  IN POBJECT_TYPE ObjectType;
+  IN PVOID CallContext;
+  IN NTSTATUS ReturnStatus;
+  IN POB_POST_OPERATION_PARAMETERS Parameters;
+} OB_POST_OPERATION_INFORMATION,*POB_POST_OPERATION_INFORMATION;
+
+typedef enum _OB_PREOP_CALLBACK_STATUS {
+  OB_PREOP_SUCCESS
+} OB_PREOP_CALLBACK_STATUS, *POB_PREOP_CALLBACK_STATUS;
+
+typedef OB_PREOP_CALLBACK_STATUS
+(NTAPI *POB_PRE_OPERATION_CALLBACK)(
+  IN PVOID RegistrationContext,
+  IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation);
+
+typedef VOID
+(NTAPI *POB_POST_OPERATION_CALLBACK)(
+  IN PVOID RegistrationContext,
+  IN POB_POST_OPERATION_INFORMATION OperationInformation);
+
+typedef struct _OB_OPERATION_REGISTRATION {
+  IN POBJECT_TYPE *ObjectType;
+  IN OB_OPERATION Operations;
+  IN POB_PRE_OPERATION_CALLBACK PreOperation;
+  IN POB_POST_OPERATION_CALLBACK PostOperation;
+} OB_OPERATION_REGISTRATION, *POB_OPERATION_REGISTRATION;
+
+typedef struct _OB_CALLBACK_REGISTRATION {
+  IN USHORT Version;
+  IN USHORT OperationRegistrationCount;
+  IN UNICODE_STRING Altitude;
+  IN PVOID RegistrationContext;
+  IN OB_OPERATION_REGISTRATION *OperationRegistration;
+} OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION;
+
+typedef struct _OBJECT_NAME_INFORMATION {
+  UNICODE_STRING Name;
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+
+/* Exported object types */
+extern POBJECT_TYPE NTSYSAPI CmKeyObjectType;
+extern POBJECT_TYPE NTSYSAPI ExEventObjectType;
+extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType;
+extern POBJECT_TYPE NTSYSAPI IoFileObjectType;
+extern POBJECT_TYPE NTSYSAPI PsThreadType;
+extern POBJECT_TYPE NTSYSAPI SeTokenObjectType;
+extern POBJECT_TYPE NTSYSAPI PsProcessType;
+
+
diff --git a/reactos/include/xdk/pofuncs.h b/reactos/include/xdk/pofuncs.h
new file mode 100644 (file)
index 0000000..9fd1ec6
--- /dev/null
@@ -0,0 +1,167 @@
+/******************************************************************************
+ *                     Power Management Support Functions                     *
+ ******************************************************************************/
+
+#define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoCallDriver(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN OUT struct _IRP *Irp);
+
+NTKERNELAPI
+PULONG
+NTAPI
+PoRegisterDeviceForIdleDetection(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN ULONG ConservationIdleTime,
+  IN ULONG PerformanceIdleTime,
+  IN DEVICE_POWER_STATE State);
+
+NTKERNELAPI
+PVOID
+NTAPI
+PoRegisterSystemState(
+  IN OUT PVOID StateHandle OPTIONAL,
+  IN EXECUTION_STATE Flags);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoRequestPowerIrp(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN UCHAR MinorFunction,
+  IN POWER_STATE PowerState,
+  IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL,
+  IN PVOID Context OPTIONAL,
+  OUT struct _IRP **Irp OPTIONAL);
+
+NTKERNELAPI
+POWER_STATE
+NTAPI
+PoSetPowerState(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN POWER_STATE_TYPE Type,
+  IN POWER_STATE State);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoSetSystemState(
+  IN EXECUTION_STATE Flags);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoStartNextPowerIrp(
+  IN OUT struct _IRP *Irp);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoUnregisterSystemState(
+  IN OUT PVOID StateHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoRequestShutdownEvent(
+  OUT PVOID *Event);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTKERNELAPI
+VOID
+NTAPI
+PoSetSystemWake(
+  IN OUT struct _IRP *Irp);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PoGetSystemWake(
+  IN struct _IRP *Irp);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoRegisterPowerSettingCallback(
+  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+  IN LPCGUID SettingGuid,
+  IN PPOWER_SETTING_CALLBACK Callback,
+  IN PVOID Context OPTIONAL,
+  OUT PVOID *Handle OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoUnregisterPowerSettingCallback(
+  IN OUT PVOID Handle);
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
+NTKERNELAPI
+VOID
+NTAPI
+PoSetDeviceBusyEx(
+  IN OUT PULONG IdlePointer);
+#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+NTKERNELAPI
+VOID
+NTAPI
+PoStartDeviceBusy(
+  IN OUT PULONG IdlePointer);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoEndDeviceBusy(
+  IN OUT PULONG IdlePointer);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PoQueryWatchdogTime(
+  IN PDEVICE_OBJECT Pdo,
+  OUT PULONG SecondsRemaining);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoDeletePowerRequest(
+  IN OUT PVOID PowerRequest);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoSetPowerRequest(
+  IN OUT PVOID PowerRequest,
+  IN POWER_REQUEST_TYPE Type);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoClearPowerRequest(
+  IN OUT PVOID PowerRequest,
+  IN POWER_REQUEST_TYPE Type);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoCreatePowerRequest(
+  OUT PVOID *PowerRequest,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PCOUNTED_REASON_CONTEXT Context);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
diff --git a/reactos/include/xdk/potypes.h b/reactos/include/xdk/potypes.h
new file mode 100644 (file)
index 0000000..3caf825
--- /dev/null
@@ -0,0 +1,412 @@
+/******************************************************************************
+ *                            Power Management Support Types                  *
+ ******************************************************************************/
+
+#ifndef _PO_DDK_
+#define _PO_DDK_
+
+#define PO_CB_SYSTEM_POWER_POLICY                0
+#define PO_CB_AC_STATUS                          1
+#define PO_CB_BUTTON_COLLISION                   2
+#define PO_CB_SYSTEM_STATE_LOCK                  3
+#define PO_CB_LID_SWITCH_STATE                   4
+#define PO_CB_PROCESSOR_POWER_POLICY             5
+
+/* Power States/Levels */
+typedef enum _SYSTEM_POWER_STATE {
+  PowerSystemUnspecified = 0,
+  PowerSystemWorking,
+  PowerSystemSleeping1,
+  PowerSystemSleeping2,
+  PowerSystemSleeping3,
+  PowerSystemHibernate,
+  PowerSystemShutdown,
+  PowerSystemMaximum
+} SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
+
+#define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
+
+typedef enum _POWER_INFORMATION_LEVEL {
+  SystemPowerPolicyAc,
+  SystemPowerPolicyDc,
+  VerifySystemPolicyAc,
+  VerifySystemPolicyDc,
+  SystemPowerCapabilities,
+  SystemBatteryState,
+  SystemPowerStateHandler,
+  ProcessorStateHandler,
+  SystemPowerPolicyCurrent,
+  AdministratorPowerPolicy,
+  SystemReserveHiberFile,
+  ProcessorInformation,
+  SystemPowerInformation,
+  ProcessorStateHandler2,
+  LastWakeTime,
+  LastSleepTime,
+  SystemExecutionState,
+  SystemPowerStateNotifyHandler,
+  ProcessorPowerPolicyAc,
+  ProcessorPowerPolicyDc,
+  VerifyProcessorPowerPolicyAc,
+  VerifyProcessorPowerPolicyDc,
+  ProcessorPowerPolicyCurrent,
+  SystemPowerStateLogging,
+  SystemPowerLoggingEntry,
+  SetPowerSettingValue,
+  NotifyUserPowerSetting,
+  PowerInformationLevelUnused0,
+  PowerInformationLevelUnused1,
+  SystemVideoState,
+  TraceApplicationPowerMessage,
+  TraceApplicationPowerMessageEnd,
+  ProcessorPerfStates,
+  ProcessorIdleStates,
+  ProcessorCap,
+  SystemWakeSource,
+  SystemHiberFileInformation,
+  TraceServicePowerMessage,
+  ProcessorLoad,
+  PowerShutdownNotification,
+  MonitorCapabilities,
+  SessionPowerInit,
+  SessionDisplayState,
+  PowerRequestCreate,
+  PowerRequestAction,
+  GetPowerRequestList,
+  ProcessorInformationEx,
+  NotifyUserModeLegacyPowerEvent,
+  GroupPark,
+  ProcessorIdleDomains,
+  WakeTimerList,
+  SystemHiberFileSize,
+  PowerInformationLevelMaximum
+} POWER_INFORMATION_LEVEL;
+
+typedef enum {
+  PowerActionNone = 0,
+  PowerActionReserved,
+  PowerActionSleep,
+  PowerActionHibernate,
+  PowerActionShutdown,
+  PowerActionShutdownReset,
+  PowerActionShutdownOff,
+  PowerActionWarmEject
+} POWER_ACTION, *PPOWER_ACTION;
+
+typedef enum _DEVICE_POWER_STATE {
+  PowerDeviceUnspecified = 0,
+  PowerDeviceD0,
+  PowerDeviceD1,
+  PowerDeviceD2,
+  PowerDeviceD3,
+  PowerDeviceMaximum
+} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
+
+typedef enum _MONITOR_DISPLAY_STATE {
+  PowerMonitorOff = 0,
+  PowerMonitorOn,
+  PowerMonitorDim
+} MONITOR_DISPLAY_STATE, *PMONITOR_DISPLAY_STATE;
+
+typedef union _POWER_STATE {
+  SYSTEM_POWER_STATE SystemState;
+  DEVICE_POWER_STATE DeviceState;
+} POWER_STATE, *PPOWER_STATE;
+
+typedef enum _POWER_STATE_TYPE {
+  SystemPowerState = 0,
+  DevicePowerState
+} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+typedef struct _SYSTEM_POWER_STATE_CONTEXT {
+  union {
+    struct {
+      ULONG Reserved1:8;
+      ULONG TargetSystemState:4;
+      ULONG EffectiveSystemState:4;
+      ULONG CurrentSystemState:4;
+      ULONG IgnoreHibernationPath:1;
+      ULONG PseudoTransition:1;
+      ULONG Reserved2:10;
+    } DUMMYSTRUCTNAME;
+    ULONG ContextAsUlong;
+  } DUMMYUNIONNAME;
+} SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT;
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+typedef struct _COUNTED_REASON_CONTEXT {
+  ULONG Version;
+  ULONG Flags;
+  union {
+    struct {
+      UNICODE_STRING ResourceFileName;
+      USHORT ResourceReasonId;
+      ULONG StringCount;
+      PUNICODE_STRING ReasonStrings;
+    } DUMMYSTRUCTNAME;
+    UNICODE_STRING SimpleString;
+  } DUMMYUNIONNAME;
+} COUNTED_REASON_CONTEXT, *PCOUNTED_REASON_CONTEXT;
+#endif
+
+#define IOCTL_QUERY_DEVICE_POWER_STATE  \
+        CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_SET_DEVICE_WAKE           \
+        CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_CANCEL_DEVICE_WAKE        \
+        CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define ES_SYSTEM_REQUIRED                       0x00000001
+#define ES_DISPLAY_REQUIRED                      0x00000002
+#define ES_USER_PRESENT                          0x00000004
+#define ES_CONTINUOUS                            0x80000000
+
+typedef ULONG EXECUTION_STATE, *PEXECUTION_STATE;
+
+typedef enum {
+  LT_DONT_CARE,
+  LT_LOWEST_LATENCY
+} LATENCY_TIME;
+
+#if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
+#define DIAGNOSTIC_REASON_VERSION                0
+#define DIAGNOSTIC_REASON_SIMPLE_STRING          0x00000001
+#define DIAGNOSTIC_REASON_DETAILED_STRING        0x00000002
+#define DIAGNOSTIC_REASON_NOT_SPECIFIED          0x80000000
+#define DIAGNOSTIC_REASON_INVALID_FLAGS          (~0x80000003)
+#endif
+
+#define POWER_REQUEST_CONTEXT_VERSION            0
+#define POWER_REQUEST_CONTEXT_SIMPLE_STRING      0x00000001
+#define POWER_REQUEST_CONTEXT_DETAILED_STRING    0x00000002
+
+#define PowerRequestMaximum                      3
+
+typedef enum _POWER_REQUEST_TYPE {
+  PowerRequestDisplayRequired,
+  PowerRequestSystemRequired,
+  PowerRequestAwayModeRequired
+} POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE;
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+#define PDCAP_D0_SUPPORTED                       0x00000001
+#define PDCAP_D1_SUPPORTED                       0x00000002
+#define PDCAP_D2_SUPPORTED                       0x00000004
+#define PDCAP_D3_SUPPORTED                       0x00000008
+#define PDCAP_WAKE_FROM_D0_SUPPORTED             0x00000010
+#define PDCAP_WAKE_FROM_D1_SUPPORTED             0x00000020
+#define PDCAP_WAKE_FROM_D2_SUPPORTED             0x00000040
+#define PDCAP_WAKE_FROM_D3_SUPPORTED             0x00000080
+#define PDCAP_WARM_EJECT_SUPPORTED               0x00000100
+
+typedef struct CM_Power_Data_s {
+  ULONG PD_Size;
+  DEVICE_POWER_STATE PD_MostRecentPowerState;
+  ULONG PD_Capabilities;
+  ULONG PD_D1Latency;
+  ULONG PD_D2Latency;
+  ULONG PD_D3Latency;
+  DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum];
+  SYSTEM_POWER_STATE PD_DeepestSystemWake;
+} CM_POWER_DATA, *PCM_POWER_DATA;
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+typedef enum _SYSTEM_POWER_CONDITION {
+  PoAc,
+  PoDc,
+  PoHot,
+  PoConditionMaximum
+} SYSTEM_POWER_CONDITION;
+
+typedef struct _SET_POWER_SETTING_VALUE {
+  ULONG Version;
+  GUID Guid;
+  SYSTEM_POWER_CONDITION PowerCondition;
+  ULONG DataLength;
+  UCHAR Data[ANYSIZE_ARRAY];
+} SET_POWER_SETTING_VALUE, *PSET_POWER_SETTING_VALUE;
+
+#define POWER_SETTING_VALUE_VERSION              (0x1)
+
+typedef struct _NOTIFY_USER_POWER_SETTING {
+  GUID Guid;
+} NOTIFY_USER_POWER_SETTING, *PNOTIFY_USER_POWER_SETTING;
+
+typedef struct _APPLICATIONLAUNCH_SETTING_VALUE {
+  LARGE_INTEGER ActivationTime;
+  ULONG Flags;
+  ULONG ButtonInstanceID;
+} APPLICATIONLAUNCH_SETTING_VALUE, *PAPPLICATIONLAUNCH_SETTING_VALUE;
+
+typedef enum _POWER_PLATFORM_ROLE {
+  PlatformRoleUnspecified = 0,
+  PlatformRoleDesktop,
+  PlatformRoleMobile,
+  PlatformRoleWorkstation,
+  PlatformRoleEnterpriseServer,
+  PlatformRoleSOHOServer,
+  PlatformRoleAppliancePC,
+  PlatformRolePerformanceServer,
+  PlatformRoleMaximum
+} POWER_PLATFORM_ROLE;
+
+#if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
+typedef struct {
+  ULONG Granularity;
+  ULONG Capacity;
+} BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
+
+#endif /* !_PO_DDK_ */
+
+#define CORE_PARKING_POLICY_CHANGE_IDEAL         0
+#define CORE_PARKING_POLICY_CHANGE_SINGLE        1
+#define CORE_PARKING_POLICY_CHANGE_ROCKET        2
+#define CORE_PARKING_POLICY_CHANGE_MAX           CORE_PARKING_POLICY_CHANGE_ROCKET
+
+DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A );
+DEFINE_GUID(GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C );
+DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E );
+DEFINE_GUID(NO_SUBGROUP_GUID, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94 );
+DEFINE_GUID(ALL_POWERSCHEMES_GUID, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0 );
+DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7 );
+DEFINE_GUID(GUID_ACTIVE_POWERSCHEME, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63 );
+DEFINE_GUID(GUID_VIDEO_SUBGROUP, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99 );
+DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E );
+DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63 );
+DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64 );
+DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
+DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B );
+DEFINE_GUID(GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA );
+DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, 0xaded5e82L, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
+DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
+DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
+DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
+DEFINE_GUID(GUID_SESSION_DISPLAY_STATE, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67 );
+DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
+DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23 );
+DEFINE_GUID(GUID_DISK_SUBGROUP, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42 );
+DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E );
+DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63 );
+DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67 );
+DEFINE_GUID(GUID_SLEEP_SUBGROUP, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20 );
+DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70 );
+DEFINE_GUID(GUID_STANDBY_TIMEOUT, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA );
+DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0 );
+DEFINE_GUID(GUID_HIBERNATE_TIMEOUT, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64 );
+DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E );
+DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION,  0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
+DEFINE_GUID(GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0 );
+DEFINE_GUID(GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87 );
+DEFINE_GUID(GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab );
+DEFINE_GUID(GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D );
+DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2 );
+DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47 );
+DEFINE_GUID(GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80 );
+DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78 );
+DEFINE_GUID(GUID_SLEEPBUTTON_ACTION, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB );
+DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93 );
+DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5 );
+DEFINE_GUID(GUID_LIDCLOSE_ACTION, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36 );
+DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B );
+DEFINE_GUID(GUID_LIDOPEN_POWERSTATE, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4 );
+DEFINE_GUID(GUID_BATTERY_SUBGROUP, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46 );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69 );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06 );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58 );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4 );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82 );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8 );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65 );
+DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3 );
+DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00 );
+DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36 );
+DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC );
+DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C );
+DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb );
+DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
+DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
+DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d );
+DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6 );
+DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
+DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
+DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
+DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
+DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
+DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
+DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
+DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
+DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
+DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
+DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1 );
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
+DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
+DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
+DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
+DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
+DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
+DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51 );
+DEFINE_GUID(GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19 );
+DEFINE_GUID(GUID_ACDC_POWER_SOURCE, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48 );
+DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE,  0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3 );
+DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1 );
+DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1 );
+DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E );
+DEFINE_GUID(GUID_APPLAUNCH_BUTTON, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA );
+DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20 );
+DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5 );
+DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6 );
+
+#define PERFSTATE_POLICY_CHANGE_IDEAL            0
+#define PERFSTATE_POLICY_CHANGE_SINGLE           1
+#define PERFSTATE_POLICY_CHANGE_ROCKET           2
+#define PERFSTATE_POLICY_CHANGE_MAX              PERFSTATE_POLICY_CHANGE_ROCKET
+
+#define PROCESSOR_PERF_BOOST_POLICY_DISABLED     0
+#define PROCESSOR_PERF_BOOST_POLICY_MAX          100
+
+#define POWER_DEVICE_IDLE_POLICY_PERFORMANCE     0
+#define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE    1
+
+typedef VOID
+(NTAPI REQUEST_POWER_COMPLETE)(
+  IN struct _DEVICE_OBJECT *DeviceObject,
+  IN UCHAR MinorFunction,
+  IN POWER_STATE PowerState,
+  IN PVOID Context,
+  IN struct _IO_STATUS_BLOCK *IoStatus);
+typedef REQUEST_POWER_COMPLETE *PREQUEST_POWER_COMPLETE;
+
+typedef
+NTSTATUS
+(NTAPI POWER_SETTING_CALLBACK)(
+  IN LPCGUID SettingGuid,
+  IN PVOID Value,
+  IN ULONG ValueLength,
+  IN OUT PVOID Context OPTIONAL);
+typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK;
+
+
diff --git a/reactos/include/xdk/ppc/ke.h b/reactos/include/xdk/ppc/ke.h
new file mode 100644 (file)
index 0000000..b3a81bc
--- /dev/null
@@ -0,0 +1,107 @@
+$if (_WDMDDK_)
+
+/* Interrupt request levels */
+#define PASSIVE_LEVEL                      0
+#define LOW_LEVEL                          0
+#define APC_LEVEL                          1
+#define DISPATCH_LEVEL                     2
+#define PROFILE_LEVEL                     27
+#define CLOCK1_LEVEL                      28
+#define CLOCK2_LEVEL                      28
+#define IPI_LEVEL                         29
+#define POWER_LEVEL                       30
+#define HIGH_LEVEL                        31
+
+//
+// Used to contain PFNs and PFN counts
+//
+typedef ULONG PFN_COUNT;
+typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
+typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
+
+
+typedef struct _KFLOATING_SAVE {
+  ULONG Dummy;
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
+
+typedef struct _KPCR_TIB {
+  PVOID ExceptionList;         /* 00 */
+  PVOID StackBase;             /* 04 */
+  PVOID StackLimit;            /* 08 */
+  PVOID SubSystemTib;          /* 0C */
+  _ANONYMOUS_UNION union {
+    PVOID FiberData;           /* 10 */
+    ULONG Version;             /* 10 */
+  } DUMMYUNIONNAME;
+  PVOID ArbitraryUserPointer;  /* 14 */
+  struct _KPCR_TIB *Self;       /* 18 */
+} KPCR_TIB, *PKPCR_TIB;         /* 1C */
+
+#define PCR_MINOR_VERSION 1
+#define PCR_MAJOR_VERSION 1
+
+typedef struct _KPCR {
+  KPCR_TIB Tib;                /* 00 */
+  struct _KPCR *Self;          /* 1C */
+  struct _KPRCB *Prcb;         /* 20 */
+  KIRQL Irql;                  /* 24 */
+  ULONG IRR;                   /* 28 */
+  ULONG IrrActive;             /* 2C */
+  ULONG IDR;                   /* 30 */
+  PVOID KdVersionBlock;        /* 34 */
+  PUSHORT IDT;                 /* 38 */
+  PUSHORT GDT;                 /* 3C */
+  struct _KTSS *TSS;           /* 40 */
+  USHORT MajorVersion;         /* 44 */
+  USHORT MinorVersion;         /* 46 */
+  KAFFINITY SetMember;         /* 48 */
+  ULONG StallScaleFactor;      /* 4C */
+  UCHAR SpareUnused;           /* 50 */
+  UCHAR Number;                /* 51 */
+} KPCR, *PKPCR;                /* 54 */
+
+#define KeGetPcr()                      PCR
+
+#define YieldProcessor() __asm__ __volatile__("nop");
+
+FORCEINLINE
+ULONG
+NTAPI
+KeGetCurrentProcessorNumber(VOID)
+{
+  ULONG Number;
+  __asm__ __volatile__ (
+    "lwz %0, %c1(12)\n"
+    : "=r" (Number)
+    : "i" (FIELD_OFFSET(KPCR, Number))
+  );
+  return Number;
+}
+
+NTHALAPI
+VOID
+FASTCALL
+KfLowerIrql(
+  IN KIRQL NewIrql);
+#define KeLowerIrql(a) KfLowerIrql(a)
+
+NTHALAPI
+KIRQL
+FASTCALL
+KfRaiseIrql(
+  IN KIRQL NewIrql);
+#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+
+NTHALAPI
+KIRQL
+NTAPI
+KeRaiseIrqlToDpcLevel(VOID);
+
+NTHALAPI
+KIRQL
+NTAPI
+KeRaiseIrqlToSynchLevel(VOID);
+
+$endif
+
+
diff --git a/reactos/include/xdk/psfuncs.h b/reactos/include/xdk/psfuncs.h
new file mode 100644 (file)
index 0000000..48666e6
--- /dev/null
@@ -0,0 +1,184 @@
+/******************************************************************************
+ *                          Process Manager Functions                         *
+ ******************************************************************************/
+$if (_WDMDDK_)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsWrapApcWow64Thread(
+  IN OUT PVOID *ApcContext,
+  IN OUT PVOID *ApcRoutine);
+
+/*
+ * PEPROCESS
+ * PsGetCurrentProcess(VOID)
+ */
+#define PsGetCurrentProcess IoGetCurrentProcess
+
+#if !defined(_PSGETCURRENTTHREAD_)
+#define _PSGETCURRENTTHREAD_
+FORCEINLINE
+PETHREAD
+NTAPI
+PsGetCurrentThread(VOID)
+{
+  return (PETHREAD)KeGetCurrentThread();
+}
+#endif /* !_PSGETCURRENTTHREAD_ */
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtOpenProcess(
+  OUT PHANDLE ProcessHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN PCLIENT_ID ClientId OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtQueryInformationProcess(
+  IN HANDLE ProcessHandle,
+  IN PROCESSINFOCLASS ProcessInformationClass,
+  OUT PVOID ProcessInformation OPTIONAL,
+  IN ULONG ProcessInformationLength,
+  OUT PULONG ReturnLength OPTIONAL);
+$endif /* _NTDDK_ */
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+$if (_WDMDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsCreateSystemThread(
+  OUT PHANDLE ThreadHandle,
+  IN ULONG DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN HANDLE ProcessHandle OPTIONAL,
+  OUT PCLIENT_ID ClientId OPTIONAL,
+  IN PKSTART_ROUTINE StartRoutine,
+  IN PVOID StartContext OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsTerminateSystemThread(
+  IN NTSTATUS ExitStatus);
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsSetCreateProcessNotifyRoutine(
+  IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
+  IN BOOLEAN Remove);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsSetCreateThreadNotifyRoutine(
+  IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsSetLoadImageNotifyRoutine(
+  IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
+
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetCurrentProcessId(VOID);
+
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetCurrentThreadId(VOID);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PsGetVersion(
+  OUT PULONG MajorVersion OPTIONAL,
+  OUT PULONG MinorVersion OPTIONAL,
+  OUT PULONG BuildNumber OPTIONAL,
+  OUT PUNICODE_STRING CSDVersion OPTIONAL);
+$endif /* _NTDDK_ */
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_NTDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetProcessId(
+  IN PEPROCESS Process);
+
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetThreadId(
+  IN PETHREAD Thread);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsRemoveCreateThreadNotifyRoutine(
+  IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsRemoveLoadImageNotifyRoutine(
+  IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
+
+NTKERNELAPI
+LONGLONG
+NTAPI
+PsGetProcessCreateTimeQuadPart(
+  IN PEPROCESS Process);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetThreadProcessId(
+  IN PETHREAD Thread);
+#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PsSetCurrentThreadPrefetching(
+  IN BOOLEAN Prefetching);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PsIsCurrentThreadPrefetching(VOID);
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsSetCreateProcessNotifyRoutineEx(
+  IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
+  IN BOOLEAN Remove);
+#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
+$endif
diff --git a/reactos/include/xdk/pstypes.h b/reactos/include/xdk/pstypes.h
new file mode 100644 (file)
index 0000000..adda1fb
--- /dev/null
@@ -0,0 +1,451 @@
+/******************************************************************************
+ *                           Process Manager Types                            *
+ ******************************************************************************/
+$if (_WDMDDK_)
+
+#define QUOTA_LIMITS_HARDWS_MIN_ENABLE  0x00000001
+#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
+#define QUOTA_LIMITS_HARDWS_MAX_ENABLE  0x00000004
+#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
+#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
+
+/* Thread Access Rights */
+#define THREAD_TERMINATE                 0x0001
+#define THREAD_SUSPEND_RESUME            0x0002
+#define THREAD_ALERT                     0x0004
+#define THREAD_GET_CONTEXT               0x0008
+#define THREAD_SET_CONTEXT               0x0010
+#define THREAD_SET_INFORMATION           0x0020
+#define THREAD_SET_LIMITED_INFORMATION   0x0400
+#define THREAD_QUERY_LIMITED_INFORMATION 0x0800
+
+#define PROCESS_DUP_HANDLE                 (0x0040)
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define PROCESS_ALL_ACCESS  (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
+#else
+#define PROCESS_ALL_ACCESS  (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define THREAD_ALL_ACCESS   (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
+#else
+#define THREAD_ALL_ACCESS   (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
+#endif
+
+#define LOW_PRIORITY                      0
+#define LOW_REALTIME_PRIORITY             16
+#define HIGH_PRIORITY                     31
+#define MAXIMUM_PRIORITY                  32
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+#define QUOTA_LIMITS_HARDWS_MIN_ENABLE  0x00000001
+#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
+#define QUOTA_LIMITS_HARDWS_MAX_ENABLE  0x00000004
+#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
+#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
+
+typedef struct _QUOTA_LIMITS {
+  SIZE_T PagedPoolLimit;
+  SIZE_T NonPagedPoolLimit;
+  SIZE_T MinimumWorkingSetSize;
+  SIZE_T MaximumWorkingSetSize;
+  SIZE_T PagefileLimit;
+  LARGE_INTEGER TimeLimit;
+} QUOTA_LIMITS, *PQUOTA_LIMITS;
+
+typedef union _RATE_QUOTA_LIMIT {
+  ULONG RateData;
+  struct {
+    ULONG RatePercent:7;
+    ULONG Reserved0:25;
+  } DUMMYSTRUCTNAME;
+} RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT;
+
+typedef struct _QUOTA_LIMITS_EX {
+  SIZE_T PagedPoolLimit;
+  SIZE_T NonPagedPoolLimit;
+  SIZE_T MinimumWorkingSetSize;
+  SIZE_T MaximumWorkingSetSize;
+  SIZE_T PagefileLimit;
+  LARGE_INTEGER TimeLimit;
+  SIZE_T WorkingSetLimit;
+  SIZE_T Reserved2;
+  SIZE_T Reserved3;
+  SIZE_T Reserved4;
+  ULONG Flags;
+  RATE_QUOTA_LIMIT CpuRateLimit;
+} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
+
+typedef struct _IO_COUNTERS {
+  ULONGLONG ReadOperationCount;
+  ULONGLONG WriteOperationCount;
+  ULONGLONG OtherOperationCount;
+  ULONGLONG ReadTransferCount;
+  ULONGLONG WriteTransferCount;
+  ULONGLONG OtherTransferCount;
+} IO_COUNTERS, *PIO_COUNTERS;
+
+typedef struct _VM_COUNTERS {
+  SIZE_T PeakVirtualSize;
+  SIZE_T VirtualSize;
+  ULONG PageFaultCount;
+  SIZE_T PeakWorkingSetSize;
+  SIZE_T WorkingSetSize;
+  SIZE_T QuotaPeakPagedPoolUsage;
+  SIZE_T QuotaPagedPoolUsage;
+  SIZE_T QuotaPeakNonPagedPoolUsage;
+  SIZE_T QuotaNonPagedPoolUsage;
+  SIZE_T PagefileUsage;
+  SIZE_T PeakPagefileUsage;
+} VM_COUNTERS, *PVM_COUNTERS;
+
+typedef struct _VM_COUNTERS_EX {
+  SIZE_T PeakVirtualSize;
+  SIZE_T VirtualSize;
+  ULONG PageFaultCount;
+  SIZE_T PeakWorkingSetSize;
+  SIZE_T WorkingSetSize;
+  SIZE_T QuotaPeakPagedPoolUsage;
+  SIZE_T QuotaPagedPoolUsage;
+  SIZE_T QuotaPeakNonPagedPoolUsage;
+  SIZE_T QuotaNonPagedPoolUsage;
+  SIZE_T PagefileUsage;
+  SIZE_T PeakPagefileUsage;
+  SIZE_T PrivateUsage;
+} VM_COUNTERS_EX, *PVM_COUNTERS_EX;
+
+#define MAX_HW_COUNTERS 16
+#define THREAD_PROFILING_FLAG_DISPATCH  0x00000001
+
+typedef enum _HARDWARE_COUNTER_TYPE {
+  PMCCounter,
+  MaxHardwareCounterType
+} HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE;
+
+typedef struct _HARDWARE_COUNTER {
+  HARDWARE_COUNTER_TYPE Type;
+  ULONG Reserved;
+  ULONG64 Index;
+} HARDWARE_COUNTER, *PHARDWARE_COUNTER;
+
+typedef struct _POOLED_USAGE_AND_LIMITS {
+  SIZE_T PeakPagedPoolUsage;
+  SIZE_T PagedPoolUsage;
+  SIZE_T PagedPoolLimit;
+  SIZE_T PeakNonPagedPoolUsage;
+  SIZE_T NonPagedPoolUsage;
+  SIZE_T NonPagedPoolLimit;
+  SIZE_T PeakPagefileUsage;
+  SIZE_T PagefileUsage;
+  SIZE_T PagefileLimit;
+} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
+
+typedef struct _PROCESS_ACCESS_TOKEN {
+  HANDLE Token;
+  HANDLE Thread;
+} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
+
+#define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS     0x00000003UL
+#define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS    ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
+
+typedef struct _PROCESS_EXCEPTION_PORT {
+  IN HANDLE ExceptionPortHandle;
+  IN OUT ULONG StateFlags;
+} PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT;
+
+typedef VOID
+(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)(
+  IN HANDLE ParentId,
+  IN HANDLE ProcessId,
+  IN BOOLEAN Create);
+
+typedef struct _PS_CREATE_NOTIFY_INFO {
+  IN SIZE_T Size;
+  union {
+    IN ULONG Flags;
+    struct {
+      IN ULONG FileOpenNameAvailable:1;
+      IN ULONG Reserved:31;
+    };
+  };
+  IN HANDLE ParentProcessId;
+  IN CLIENT_ID CreatingThreadId;
+  IN OUT struct _FILE_OBJECT *FileObject;
+  IN PCUNICODE_STRING ImageFileName;
+  IN PCUNICODE_STRING CommandLine OPTIONAL;
+  IN OUT NTSTATUS CreationStatus;
+} PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;
+
+typedef VOID
+(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)(
+  IN OUT PEPROCESS Process,
+  IN HANDLE ProcessId,
+  IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL);
+
+typedef VOID
+(NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)(
+  IN HANDLE ProcessId,
+  IN HANDLE ThreadId,
+  IN BOOLEAN Create);
+
+#define IMAGE_ADDRESSING_MODE_32BIT       3
+
+typedef struct _IMAGE_INFO {
+  _ANONYMOUS_UNION union {
+    ULONG Properties;
+    _ANONYMOUS_STRUCT struct {
+      ULONG ImageAddressingMode:8;
+      ULONG SystemModeImage:1;
+      ULONG ImageMappedToAllPids:1;
+      ULONG ExtendedInfoPresent:1;
+      ULONG Reserved:21;
+    } DUMMYSTRUCTNAME;
+  } DUMMYUNIONNAME;
+  PVOID ImageBase;
+  ULONG ImageSelector;
+  SIZE_T ImageSize;
+  ULONG ImageSectionNumber;
+} IMAGE_INFO, *PIMAGE_INFO;
+
+typedef struct _IMAGE_INFO_EX {
+  SIZE_T Size;
+  IMAGE_INFO ImageInfo;
+  struct _FILE_OBJECT *FileObject;
+} IMAGE_INFO_EX, *PIMAGE_INFO_EX;
+
+typedef VOID
+(NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(
+  IN PUNICODE_STRING FullImageName,
+  IN HANDLE ProcessId,
+  IN PIMAGE_INFO ImageInfo);
+
+#define THREAD_CSWITCH_PMU_DISABLE  FALSE
+#define THREAD_CSWITCH_PMU_ENABLE   TRUE
+
+#define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
+
+#define PROCESS_HANDLE_TRACING_MAX_STACKS 16
+
+typedef struct _NT_TIB {
+  struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+  PVOID StackBase;
+  PVOID StackLimit;
+  PVOID SubSystemTib;
+  _ANONYMOUS_UNION union {
+    PVOID FiberData;
+    ULONG Version;
+  } DUMMYUNIONNAME;
+  PVOID ArbitraryUserPointer;
+  struct _NT_TIB *Self;
+} NT_TIB, *PNT_TIB;
+
+typedef struct _NT_TIB32 {
+  ULONG ExceptionList;
+  ULONG StackBase;
+  ULONG StackLimit;
+  ULONG SubSystemTib;
+  __GNU_EXTENSION union {
+    ULONG FiberData;
+    ULONG Version;
+  };
+  ULONG ArbitraryUserPointer;
+  ULONG Self;
+} NT_TIB32,*PNT_TIB32;
+
+typedef struct _NT_TIB64 {
+  ULONG64 ExceptionList;
+  ULONG64 StackBase;
+  ULONG64 StackLimit;
+  ULONG64 SubSystemTib;
+  __GNU_EXTENSION union {
+    ULONG64 FiberData;
+    ULONG Version;
+  };
+  ULONG64 ArbitraryUserPointer;
+  ULONG64 Self;
+} NT_TIB64,*PNT_TIB64;
+
+typedef enum _PROCESSINFOCLASS {
+  ProcessBasicInformation,
+  ProcessQuotaLimits,
+  ProcessIoCounters,
+  ProcessVmCounters,
+  ProcessTimes,
+  ProcessBasePriority,
+  ProcessRaisePriority,
+  ProcessDebugPort,
+  ProcessExceptionPort,
+  ProcessAccessToken,
+  ProcessLdtInformation,
+  ProcessLdtSize,
+  ProcessDefaultHardErrorMode,
+  ProcessIoPortHandlers,
+  ProcessPooledUsageAndLimits,
+  ProcessWorkingSetWatch,
+  ProcessUserModeIOPL,
+  ProcessEnableAlignmentFaultFixup,
+  ProcessPriorityClass,
+  ProcessWx86Information,
+  ProcessHandleCount,
+  ProcessAffinityMask,
+  ProcessPriorityBoost,
+  ProcessDeviceMap,
+  ProcessSessionInformation,
+  ProcessForegroundInformation,
+  ProcessWow64Information,
+  ProcessImageFileName,
+  ProcessLUIDDeviceMapsEnabled,
+  ProcessBreakOnTermination,
+  ProcessDebugObjectHandle,
+  ProcessDebugFlags,
+  ProcessHandleTracing,
+  ProcessIoPriority,
+  ProcessExecuteFlags,
+  ProcessTlsInformation,
+  ProcessCookie,
+  ProcessImageInformation,
+  ProcessCycleTime,
+  ProcessPagePriority,
+  ProcessInstrumentationCallback,
+  ProcessThreadStackAllocation,
+  ProcessWorkingSetWatchEx,
+  ProcessImageFileNameWin32,
+  ProcessImageFileMapping,
+  ProcessAffinityUpdateMode,
+  ProcessMemoryAllocationMode,
+  ProcessGroupInformation,
+  ProcessTokenVirtualizationEnabled,
+  ProcessConsoleHostProcess,
+  ProcessWindowInformation,
+  MaxProcessInfoClass
+} PROCESSINFOCLASS;
+
+typedef enum _THREADINFOCLASS {
+  ThreadBasicInformation,
+  ThreadTimes,
+  ThreadPriority,
+  ThreadBasePriority,
+  ThreadAffinityMask,
+  ThreadImpersonationToken,
+  ThreadDescriptorTableEntry,
+  ThreadEnableAlignmentFaultFixup,
+  ThreadEventPair_Reusable,
+  ThreadQuerySetWin32StartAddress,
+  ThreadZeroTlsCell,
+  ThreadPerformanceCount,
+  ThreadAmILastThread,
+  ThreadIdealProcessor,
+  ThreadPriorityBoost,
+  ThreadSetTlsArrayAddress,
+  ThreadIsIoPending,
+  ThreadHideFromDebugger,
+  ThreadBreakOnTermination,
+  ThreadSwitchLegacyState,
+  ThreadIsTerminated,
+  ThreadLastSystemCall,
+  ThreadIoPriority,
+  ThreadCycleTime,
+  ThreadPagePriority,
+  ThreadActualBasePriority,
+  ThreadTebInformation,
+  ThreadCSwitchMon,
+  ThreadCSwitchPmu,
+  ThreadWow64Context,
+  ThreadGroupInformation,
+  ThreadUmsInformation,
+  ThreadCounterProfiling,
+  ThreadIdealProcessorEx,
+  MaxThreadInfoClass
+} THREADINFOCLASS;
+
+typedef struct _PAGE_PRIORITY_INFORMATION {
+  ULONG PagePriority;
+} PAGE_PRIORITY_INFORMATION, *PPAGE_PRIORITY_INFORMATION;
+
+typedef struct _PROCESS_WS_WATCH_INFORMATION {
+  PVOID FaultingPc;
+  PVOID FaultingVa;
+} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
+
+typedef struct _PROCESS_BASIC_INFORMATION {
+  NTSTATUS ExitStatus;
+  struct _PEB *PebBaseAddress;
+  ULONG_PTR AffinityMask;
+  KPRIORITY BasePriority;
+  ULONG_PTR UniqueProcessId;
+  ULONG_PTR InheritedFromUniqueProcessId;
+} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
+
+typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {
+  SIZE_T Size;
+  PROCESS_BASIC_INFORMATION BasicInfo;
+  union {
+    ULONG Flags;
+    struct {
+      ULONG IsProtectedProcess:1;
+      ULONG IsWow64Process:1;
+      ULONG IsProcessDeleting:1;
+      ULONG IsCrossSessionCreate:1;
+      ULONG SpareBits:28;
+    } DUMMYSTRUCTNAME;
+  } DUMMYUNIONNAME;
+} PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION;
+
+typedef struct _PROCESS_DEVICEMAP_INFORMATION {
+  __GNU_EXTENSION union {
+    struct {
+      HANDLE DirectoryHandle;
+    } Set;
+    struct {
+      ULONG DriveMap;
+      UCHAR DriveType[32];
+    } Query;
+  };
+} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
+
+typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX {
+  union {
+    struct {
+      HANDLE DirectoryHandle;
+    } Set;
+    struct {
+      ULONG DriveMap;
+      UCHAR DriveType[32];
+    } Query;
+  } DUMMYUNIONNAME;
+  ULONG Flags;
+} PROCESS_DEVICEMAP_INFORMATION_EX, *PPROCESS_DEVICEMAP_INFORMATION_EX;
+
+typedef struct _PROCESS_SESSION_INFORMATION {
+  ULONG SessionId;
+} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
+
+typedef struct _PROCESS_HANDLE_TRACING_ENABLE {
+  ULONG Flags;
+} PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE;
+
+typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX {
+  ULONG Flags;
+  ULONG TotalSlots;
+} PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX;
+
+typedef struct _PROCESS_HANDLE_TRACING_ENTRY {
+  HANDLE Handle;
+  CLIENT_ID ClientId;
+  ULONG Type;
+  PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS];
+} PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY;
+
+typedef struct _PROCESS_HANDLE_TRACING_QUERY {
+  HANDLE Handle;
+  ULONG TotalTraces;
+  PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1];
+} PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY;
+
+extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
+
+$endif /* _NTDDK_ */
+
diff --git a/reactos/include/xdk/rtlfuncs.h b/reactos/include/xdk/rtlfuncs.h
new file mode 100644 (file)
index 0000000..a5302dc
--- /dev/null
@@ -0,0 +1,2259 @@
+/******************************************************************************
+ *                         Runtime Library Functions                          *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+
+#if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
+
+#define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
+
+FORCEINLINE
+VOID
+InitializeListHead(
+  OUT PLIST_ENTRY ListHead)
+{
+  ListHead->Flink = ListHead->Blink = ListHead;
+}
+
+BOOLEAN
+FORCEINLINE
+IsListEmpty(
+  IN CONST LIST_ENTRY * ListHead)
+{
+  return (BOOLEAN)(ListHead->Flink == ListHead);
+}
+
+FORCEINLINE
+BOOLEAN
+RemoveEntryList(
+  IN PLIST_ENTRY Entry)
+{
+  PLIST_ENTRY OldFlink;
+  PLIST_ENTRY OldBlink;
+
+  OldFlink = Entry->Flink;
+  OldBlink = Entry->Blink;
+  OldFlink->Blink = OldBlink;
+  OldBlink->Flink = OldFlink;
+  return (BOOLEAN)(OldFlink == OldBlink);
+}
+
+FORCEINLINE
+PLIST_ENTRY
+RemoveHeadList(
+  IN OUT PLIST_ENTRY ListHead)
+{
+  PLIST_ENTRY Flink;
+  PLIST_ENTRY Entry;
+
+  Entry = ListHead->Flink;
+  Flink = Entry->Flink;
+  ListHead->Flink = Flink;
+  Flink->Blink = ListHead;
+  return Entry;
+}
+
+FORCEINLINE
+PLIST_ENTRY
+RemoveTailList(
+  IN OUT PLIST_ENTRY ListHead)
+{
+  PLIST_ENTRY Blink;
+  PLIST_ENTRY Entry;
+
+  Entry = ListHead->Blink;
+  Blink = Entry->Blink;
+  ListHead->Blink = Blink;
+  Blink->Flink = ListHead;
+  return Entry;
+}
+
+FORCEINLINE
+VOID
+InsertTailList(
+  IN OUT PLIST_ENTRY ListHead,
+  IN OUT PLIST_ENTRY Entry)
+{
+  PLIST_ENTRY OldBlink;
+  OldBlink = ListHead->Blink;
+  Entry->Flink = ListHead;
+  Entry->Blink = OldBlink;
+  OldBlink->Flink = Entry;
+  ListHead->Blink = Entry;
+}
+
+FORCEINLINE
+VOID
+InsertHeadList(
+  IN OUT PLIST_ENTRY ListHead,
+  IN OUT PLIST_ENTRY Entry)
+{
+  PLIST_ENTRY OldFlink;
+  OldFlink = ListHead->Flink;
+  Entry->Flink = OldFlink;
+  Entry->Blink = ListHead;
+  OldFlink->Blink = Entry;
+  ListHead->Flink = Entry;
+}
+
+FORCEINLINE
+VOID
+AppendTailList(
+  IN OUT PLIST_ENTRY ListHead,
+  IN OUT PLIST_ENTRY ListToAppend)
+{
+  PLIST_ENTRY ListEnd = ListHead->Blink;
+
+  ListHead->Blink->Flink = ListToAppend;
+  ListHead->Blink = ListToAppend->Blink;
+  ListToAppend->Blink->Flink = ListHead;
+  ListToAppend->Blink = ListEnd;
+}
+
+FORCEINLINE
+PSINGLE_LIST_ENTRY
+PopEntryList(
+  IN OUT PSINGLE_LIST_ENTRY ListHead)
+{
+  PSINGLE_LIST_ENTRY FirstEntry;
+  FirstEntry = ListHead->Next;
+  if (FirstEntry != NULL) {
+    ListHead->Next = FirstEntry->Next;
+  }
+  return FirstEntry;
+}
+
+FORCEINLINE
+VOID
+PushEntryList(
+  IN OUT PSINGLE_LIST_ENTRY ListHead,
+  IN OUT PSINGLE_LIST_ENTRY Entry)
+{
+  Entry->Next = ListHead->Next;
+  ListHead->Next = Entry;
+}
+
+#endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
+
+NTSYSAPI
+VOID
+NTAPI
+RtlAssert(
+  IN PVOID FailedAssertion,
+  IN PVOID FileName,
+  IN ULONG LineNumber,
+  IN PSTR Message);
+
+/* VOID
+ * RtlCopyMemory(
+ *     IN VOID UNALIGNED *Destination,
+ *     IN CONST VOID UNALIGNED *Source,
+ *     IN SIZE_T Length)
+ */
+#define RtlCopyMemory(Destination, Source, Length) \
+    memcpy(Destination, Source, Length)
+
+#define RtlCopyBytes RtlCopyMemory
+
+#if defined(_M_AMD64)
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyMemoryNonTemporal(
+  VOID UNALIGNED *Destination,
+  CONST VOID UNALIGNED *Source,
+  SIZE_T Length);
+#else
+#define RtlCopyMemoryNonTemporal RtlCopyMemory
+#endif
+
+/* BOOLEAN
+ * RtlEqualLuid(
+ *     IN PLUID Luid1,
+ *     IN PLUID Luid2)
+ */
+#define RtlEqualLuid(Luid1, Luid2) \
+    (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
+
+/* ULONG
+ * RtlEqualMemory(
+ *     IN VOID UNALIGNED *Destination,
+ *     IN CONST VOID UNALIGNED *Source,
+ *     IN SIZE_T Length)
+ */
+#define RtlEqualMemory(Destination, Source, Length) \
+    (!memcmp(Destination, Source, Length))
+
+/* VOID
+ * RtlFillMemory(
+ *     IN VOID UNALIGNED *Destination,
+ *     IN SIZE_T Length,
+ *     IN UCHAR Fill)
+ */
+#define RtlFillMemory(Destination, Length, Fill) \
+    memset(Destination, Fill, Length)
+
+#define RtlFillBytes RtlFillMemory
+
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeUnicodeString(
+  IN OUT PUNICODE_STRING UnicodeString);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGUIDFromString(
+  IN PUNICODE_STRING GuidString,
+  OUT GUID *Guid);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitUnicodeString(
+  IN OUT PUNICODE_STRING DestinationString,
+  IN PCWSTR SourceString OPTIONAL);
+
+/* VOID
+ * RtlMoveMemory(
+ *    IN VOID UNALIGNED *Destination,
+ *    IN CONST VOID UNALIGNED *Source,
+ *    IN SIZE_T Length)
+ */
+#define RtlMoveMemory(Destination, Source, Length) \
+    memmove(Destination, Source, Length)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlStringFromGUID(
+  IN REFGUID Guid,
+  OUT PUNICODE_STRING GuidString);
+
+/* VOID
+ * RtlZeroMemory(
+ *     IN VOID UNALIGNED *Destination,
+ *     IN SIZE_T Length)
+ */
+#define RtlZeroMemory(Destination, Length) \
+    memset(Destination, 0, Length)
+
+#define RtlZeroBytes RtlZeroMemory
+
+$endif
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+$if (_NTIFS_)
+NTSYSAPI
+PVOID
+NTAPI
+RtlAllocateHeap(
+  IN HANDLE HeapHandle,
+  IN ULONG Flags OPTIONAL,
+  IN SIZE_T Size);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlFreeHeap(
+  IN PVOID HeapHandle,
+  IN ULONG Flags OPTIONAL,
+  IN PVOID BaseAddress);
+
+$endif
+
+$if (_NTDDK_)
+
+#ifndef RTL_USE_AVL_TABLES
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeGenericTable(
+  OUT PRTL_GENERIC_TABLE Table,
+  IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
+  IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
+  IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
+  IN PVOID TableContext OPTIONAL);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTable(
+  IN PRTL_GENERIC_TABLE Table,
+  IN PVOID Buffer,
+  IN CLONG BufferSize,
+  OUT PBOOLEAN NewElement OPTIONAL);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTableFull(
+  IN PRTL_GENERIC_TABLE Table,
+  IN PVOID Buffer,
+  IN CLONG BufferSize,
+  OUT PBOOLEAN NewElement OPTIONAL,
+  IN PVOID NodeOrParent,
+  IN TABLE_SEARCH_RESULT SearchResult);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDeleteElementGenericTable(
+  IN PRTL_GENERIC_TABLE Table,
+  IN PVOID Buffer);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTable(
+  IN PRTL_GENERIC_TABLE Table,
+  IN PVOID Buffer);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableFull(
+  IN PRTL_GENERIC_TABLE Table,
+  IN PVOID Buffer,
+  OUT PVOID *NodeOrParent,
+  OUT TABLE_SEARCH_RESULT *SearchResult);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTable(
+  IN PRTL_GENERIC_TABLE Table,
+  IN BOOLEAN Restart);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableWithoutSplaying(
+  IN PRTL_GENERIC_TABLE Table,
+  IN OUT PVOID *RestartKey);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlGetElementGenericTable(
+  IN PRTL_GENERIC_TABLE Table,
+  IN ULONG I);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberGenericTableElements(
+  IN PRTL_GENERIC_TABLE Table);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsGenericTableEmpty(
+  IN PRTL_GENERIC_TABLE Table);
+
+#endif /* !RTL_USE_AVL_TABLES */
+
+#define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT     8
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSplay(
+  IN OUT PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlDelete(
+  IN PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteNoSplay(
+  IN PRTL_SPLAY_LINKS Links,
+  IN OUT PRTL_SPLAY_LINKS *Root);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreeSuccessor(
+  IN PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreePredecessor(
+  IN PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealSuccessor(
+  IN PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealPredecessor(
+  IN PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlPrefixUnicodeString(
+  IN PCUNICODE_STRING  String1,
+  IN PCUNICODE_STRING  String2,
+  IN BOOLEAN  CaseInSensitive);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlUpperString(
+  IN OUT PSTRING  DestinationString,
+  IN const PSTRING  SourceString);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUpcaseUnicodeString(
+  IN OUT PUNICODE_STRING DestinationString,
+  IN PCUNICODE_STRING  SourceString,
+  IN BOOLEAN  AllocateDestinationString);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlMapGenericMask(
+  IN OUT PACCESS_MASK AccessMask,
+  IN PGENERIC_MAPPING GenericMapping);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlVolumeDeviceToDosName(
+  IN PVOID VolumeDeviceObject,
+  OUT PUNICODE_STRING DosName);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetVersion(
+  IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlVerifyVersionInfo(
+  IN PRTL_OSVERSIONINFOEXW VersionInfo,
+  IN ULONG TypeMask,
+  IN ULONGLONG ConditionMask);
+
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareString(
+  IN const PSTRING String1,
+  IN const PSTRING String2,
+  IN BOOLEAN CaseInSensitive);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyString(
+  OUT PSTRING DestinationString,
+  IN const PSTRING SourceString OPTIONAL);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlEqualString(
+  IN const PSTRING String1,
+  IN const PSTRING String2,
+  IN BOOLEAN CaseInSensitive);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCharToInteger(
+  IN PCSZ String,
+  IN ULONG Base OPTIONAL,
+  OUT PULONG Value);
+
+NTSYSAPI
+CHAR
+NTAPI
+RtlUpperChar(
+  IN CHAR Character);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlWalkFrameChain(
+  OUT PVOID *Callers,
+  IN ULONG Count,
+  IN ULONG Flags);
+
+$endif
+
+$if (_WDMDDK_)
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAreBitsClear(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG StartingIndex,
+  IN ULONG Length);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAreBitsSet(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG StartingIndex,
+  IN ULONG Length);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAnsiStringToUnicodeString(
+  IN OUT PUNICODE_STRING DestinationString,
+  IN PANSI_STRING SourceString,
+  IN BOOLEAN AllocateDestinationString);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlxAnsiStringToUnicodeSize(
+  IN PCANSI_STRING AnsiString);
+
+#define RtlAnsiStringToUnicodeSize(String) (               \
+  NLS_MB_CODE_PAGE_TAG ?                                   \
+  RtlxAnsiStringToUnicodeSize(String) :                    \
+  ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR)   \
+)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendUnicodeStringToString(
+  IN OUT PUNICODE_STRING Destination,
+  IN PCUNICODE_STRING Source);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendUnicodeToString(
+  IN OUT PUNICODE_STRING Destination,
+  IN PCWSTR Source);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCheckRegistryKey(
+  IN ULONG RelativeTo,
+  IN PWSTR Path);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlClearAllBits(
+  IN PRTL_BITMAP BitMapHeader);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlClearBits(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG StartingIndex,
+  IN ULONG NumberToClear);
+
+NTSYSAPI
+SIZE_T
+NTAPI
+RtlCompareMemory(
+  IN CONST VOID *Source1,
+  IN CONST VOID *Source2,
+  IN SIZE_T Length);
+
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareUnicodeString(
+  IN PCUNICODE_STRING String1,
+  IN PCUNICODE_STRING String2,
+  IN BOOLEAN CaseInSensitive);
+
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareUnicodeStrings(
+  IN PCWCH String1,
+  IN SIZE_T String1Length,
+  IN PCWCH String2,
+  IN SIZE_T String2Length,
+  IN BOOLEAN CaseInSensitive);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyUnicodeString(
+  IN OUT PUNICODE_STRING DestinationString,
+  IN PCUNICODE_STRING SourceString OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateRegistryKey(
+  IN ULONG RelativeTo,
+  IN PWSTR Path);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateSecurityDescriptor(
+  IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+  IN ULONG Revision);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteRegistryValue(
+  IN ULONG RelativeTo,
+  IN PCWSTR Path,
+  IN PCWSTR ValueName);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlEqualUnicodeString(
+  IN CONST UNICODE_STRING *String1,
+  IN CONST UNICODE_STRING *String2,
+  IN BOOLEAN CaseInSensitive);
+
+#if !defined(_AMD64_) && !defined(_IA64_)
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedIntegerMultiply(
+  IN LARGE_INTEGER Multiplicand,
+  IN LONG Multiplier);
+
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedLargeIntegerDivide(
+  IN LARGE_INTEGER Dividend,
+  IN ULONG Divisor,
+  OUT PULONG Remainder OPTIONAL);
+#endif
+
+#if defined(_X86_) || defined(_IA64_)
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedMagicDivide(
+    IN LARGE_INTEGER Dividend,
+    IN LARGE_INTEGER MagicDivisor,
+    IN CCHAR  ShiftCount);
+#endif
+
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeAnsiString(
+  IN PANSI_STRING AnsiString);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearBits(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG NumberToFind,
+  IN ULONG HintIndex);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearBitsAndSet(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG NumberToFind,
+  IN ULONG HintIndex);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindFirstRunClear(
+  IN PRTL_BITMAP BitMapHeader,
+  OUT PULONG StartingIndex);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearRuns(
+  IN PRTL_BITMAP BitMapHeader,
+  OUT PRTL_BITMAP_RUN RunArray,
+  IN ULONG SizeOfRunArray,
+  IN BOOLEAN LocateLongestRuns);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindLastBackwardRunClear(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG FromIndex,
+  OUT PULONG StartingRunIndex);
+
+NTSYSAPI
+CCHAR
+NTAPI
+RtlFindLeastSignificantBit(
+  IN ULONGLONG Set);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindLongestRunClear(
+  IN PRTL_BITMAP BitMapHeader,
+  OUT PULONG StartingIndex);
+
+NTSYSAPI
+CCHAR
+NTAPI
+RtlFindMostSignificantBit(
+  IN ULONGLONG Set);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindNextForwardRunClear(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG FromIndex,
+  OUT PULONG StartingRunIndex);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindSetBits(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG NumberToFind,
+  IN ULONG HintIndex);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindSetBitsAndClear(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG NumberToFind,
+  IN ULONG HintIndex);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitAnsiString(
+  IN OUT PANSI_STRING DestinationString,
+  IN PCSZ SourceString);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeBitMap(
+  IN PRTL_BITMAP BitMapHeader,
+  IN PULONG BitMapBuffer,
+  IN ULONG SizeOfBitMap);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitString(
+  IN OUT PSTRING DestinationString,
+  IN PCSZ SourceString);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIntegerToUnicodeString(
+  IN ULONG Value,
+  IN ULONG Base OPTIONAL,
+  IN OUT PUNICODE_STRING String);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInt64ToUnicodeString(
+  IN ULONGLONG Value,
+  IN ULONG Base OPTIONAL,
+  IN OUT PUNICODE_STRING String);
+
+#ifdef _WIN64
+#define RtlIntPtrToUnicodeString(Value, Base, String) \
+    RtlInt64ToUnicodeString(Value, Base, String)
+#else
+#define RtlIntPtrToUnicodeString(Value, Base, String) \
+    RtlIntegerToUnicodeString(Value, Base, String)
+#endif
+
+/* BOOLEAN
+ * RtlIsZeroLuid(
+ *     IN PLUID L1);
+ */
+#define RtlIsZeroLuid(_L1) \
+    ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlLengthSecurityDescriptor(
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberOfClearBits(
+  IN PRTL_BITMAP BitMapHeader);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberOfSetBits(
+  IN PRTL_BITMAP BitMapHeader);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryRegistryValues(
+  IN ULONG RelativeTo,
+  IN PCWSTR Path,
+  IN OUT PRTL_QUERY_REGISTRY_TABLE QueryTable,
+  IN PVOID Context OPTIONAL,
+  IN PVOID Environment OPTIONAL);
+
+#define SHORT_SIZE  (sizeof(USHORT))
+#define SHORT_MASK  (SHORT_SIZE - 1)
+#define LONG_SIZE (sizeof(LONG))
+#define LONGLONG_SIZE   (sizeof(LONGLONG))
+#define LONG_MASK (LONG_SIZE - 1)
+#define LONGLONG_MASK   (LONGLONG_SIZE - 1)
+#define LOWBYTE_MASK 0x00FF
+
+#define FIRSTBYTE(VALUE)  ((VALUE) & LOWBYTE_MASK)
+#define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
+#define THIRDBYTE(VALUE)  (((VALUE) >> 16) & LOWBYTE_MASK)
+#define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSetAllBits(
+  IN PRTL_BITMAP BitMapHeader);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSetBits(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG StartingIndex,
+  IN ULONG NumberToSet);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetDaclSecurityDescriptor(
+  IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+  IN BOOLEAN DaclPresent,
+  IN PACL Dacl OPTIONAL,
+  IN BOOLEAN DaclDefaulted OPTIONAL);
+
+#if defined(_AMD64_)
+
+/* VOID
+ * RtlStoreUlong(
+ *     IN PULONG Address,
+ *     IN ULONG Value);
+ */
+#define RtlStoreUlong(Address,Value) \
+    *(ULONG UNALIGNED *)(Address) = (Value)
+
+/* VOID
+ * RtlStoreUlonglong(
+ *     IN OUT PULONGLONG Address,
+ *     ULONGLONG Value);
+ */
+#define RtlStoreUlonglong(Address,Value) \
+    *(ULONGLONG UNALIGNED *)(Address) = (Value)
+
+/* VOID
+ * RtlStoreUshort(
+ *     IN PUSHORT Address,
+ *     IN USHORT Value);
+ */
+#define RtlStoreUshort(Address,Value) \
+    *(USHORT UNALIGNED *)(Address) = (Value)
+
+/* VOID
+ * RtlRetrieveUshort(
+ *     PUSHORT DestinationAddress,
+ *    PUSHORT SourceAddress);
+ */
+#define RtlRetrieveUshort(DestAddress,SrcAddress) \
+    *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
+
+/* VOID
+ * RtlRetrieveUlong(
+ *    PULONG DestinationAddress,
+ *    PULONG SourceAddress);
+ */
+#define RtlRetrieveUlong(DestAddress,SrcAddress) \
+    *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
+
+#else
+
+#define RtlStoreUlong(Address,Value)                      \
+    if ((ULONG_PTR)(Address) & LONG_MASK) { \
+        ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT]    = (UCHAR)(FIRSTBYTE(Value)); \
+        ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
+        ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
+        ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT]     = (UCHAR)(FOURTHBYTE(Value)); \
+    } \
+    else { \
+        *((PULONG)(Address)) = (ULONG) (Value); \
+    }
+
+#define RtlStoreUlonglong(Address,Value) \
+    if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
+        RtlStoreUlong((ULONG_PTR)(Address), \
+                      (ULONGLONG)(Value) & 0xFFFFFFFF); \
+        RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
+                      (ULONGLONG)(Value) >> 32); \
+    } else { \
+        *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
+    }
+
+#define RtlStoreUshort(Address,Value) \
+    if ((ULONG_PTR)(Address) & SHORT_MASK) { \
+        ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
+        ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
+    } \
+    else { \
+        *((PUSHORT) (Address)) = (USHORT)Value; \
+    }
+
+#define RtlRetrieveUshort(DestAddress,SrcAddress) \
+    if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
+    { \
+        ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
+        ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
+    } \
+    else \
+    { \
+        *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
+    }
+
+#define RtlRetrieveUlong(DestAddress,SrcAddress) \
+    if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
+    { \
+        ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
+        ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
+        ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
+        ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
+    } \
+    else \
+    { \
+        *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
+    }
+
+#endif /* defined(_AMD64_) */
+
+#ifdef _WIN64
+/* VOID
+ * RtlStoreUlongPtr(
+ *     IN OUT PULONG_PTR Address,
+ *     IN ULONG_PTR Value);
+ */
+#define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
+#else
+#define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
+#endif /* _WIN64 */
+
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTimeFieldsToTime(
+  IN PTIME_FIELDS TimeFields,
+  IN PLARGE_INTEGER Time);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlTimeToTimeFields(
+  IN PLARGE_INTEGER Time,
+  IN PTIME_FIELDS TimeFields);
+
+NTSYSAPI
+ULONG
+FASTCALL
+RtlUlongByteSwap(
+  IN ULONG Source);
+
+NTSYSAPI
+ULONGLONG
+FASTCALL
+RtlUlonglongByteSwap(
+  IN ULONGLONG Source);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToAnsiString(
+  IN OUT PANSI_STRING DestinationString,
+  IN PCUNICODE_STRING SourceString,
+  IN BOOLEAN AllocateDestinationString);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlxUnicodeStringToAnsiSize(
+  IN PCUNICODE_STRING UnicodeString);
+
+#define RtlUnicodeStringToAnsiSize(String) (                  \
+    NLS_MB_CODE_PAGE_TAG ?                                    \
+    RtlxUnicodeStringToAnsiSize(String) :                     \
+    ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
+)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToInteger(
+  IN PCUNICODE_STRING String,
+  IN ULONG Base OPTIONAL,
+  OUT PULONG Value);
+
+NTSYSAPI
+WCHAR
+NTAPI
+RtlUpcaseUnicodeChar(
+  IN WCHAR SourceCharacter);
+
+NTSYSAPI
+USHORT
+FASTCALL
+RtlUshortByteSwap(
+  IN USHORT Source);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidRelativeSecurityDescriptor(
+  IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
+  IN ULONG SecurityDescriptorLength,
+  IN SECURITY_INFORMATION RequiredInformation);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidSecurityDescriptor(
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlWriteRegistryValue(
+  IN ULONG RelativeTo,
+  IN PCWSTR Path,
+  IN PCWSTR ValueName,
+  IN ULONG ValueType,
+  IN PVOID ValueData,
+  IN ULONG ValueLength);
+
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_WDMDDK_)
+
+#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
+NTSYSAPI
+VOID
+FASTCALL
+RtlPrefetchMemoryNonTemporal(
+  IN PVOID Source,
+  IN SIZE_T Length);
+#endif
+
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+$if (_NTDDK_)
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeGenericTableAvl(
+  OUT PRTL_AVL_TABLE Table,
+  IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
+  IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
+  IN PRTL_AVL_FREE_ROUTINE FreeRoutine,
+  IN PVOID TableContext OPTIONAL);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTableAvl(
+  IN PRTL_AVL_TABLE Table,
+  IN PVOID Buffer,
+  IN CLONG BufferSize,
+  OUT PBOOLEAN NewElement OPTIONAL);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTableFullAvl(
+  IN PRTL_AVL_TABLE Table,
+  IN PVOID Buffer,
+  IN CLONG BufferSize,
+  OUT PBOOLEAN NewElement OPTIONAL,
+  IN PVOID NodeOrParent,
+  IN TABLE_SEARCH_RESULT SearchResult);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDeleteElementGenericTableAvl(
+  IN PRTL_AVL_TABLE Table,
+  IN PVOID Buffer);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableAvl(
+  IN PRTL_AVL_TABLE Table,
+  IN PVOID Buffer);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableFullAvl(
+  IN PRTL_AVL_TABLE Table,
+  IN PVOID Buffer,
+  OUT PVOID *NodeOrParent,
+  OUT TABLE_SEARCH_RESULT *SearchResult);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableAvl(
+  IN PRTL_AVL_TABLE Table,
+  IN BOOLEAN Restart);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableWithoutSplayingAvl(
+  IN PRTL_AVL_TABLE Table,
+  IN OUT PVOID *RestartKey);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupFirstMatchingElementGenericTableAvl(
+  IN PRTL_AVL_TABLE Table,
+  IN PVOID Buffer,
+  OUT PVOID *RestartKey);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableLikeADirectory(
+  IN PRTL_AVL_TABLE Table,
+  IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL,
+  IN PVOID MatchData OPTIONAL,
+  IN ULONG NextFlag,
+  IN OUT PVOID *RestartKey,
+  IN OUT PULONG DeleteCount,
+  IN PVOID Buffer);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlGetElementGenericTableAvl(
+  IN PRTL_AVL_TABLE Table,
+  IN ULONG I);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberGenericTableElementsAvl(
+  IN PRTL_AVL_TABLE Table);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsGenericTableEmptyAvl(
+  IN PRTL_AVL_TABLE Table);
+
+$endif
+
+$if (_WDMDDK_)
+
+NTSYSAPI
+VOID
+NTAPI
+RtlClearBit(
+  PRTL_BITMAP BitMapHeader,
+  ULONG BitNumber);
+
+NTSYSAPI
+WCHAR
+NTAPI
+RtlDowncaseUnicodeChar(
+  IN WCHAR SourceCharacter);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSetBit(
+  PRTL_BITMAP BitMapHeader,
+  ULONG BitNumber);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTestBit(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG BitNumber);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlHashUnicodeString(
+  IN CONST UNICODE_STRING *String,
+  IN BOOLEAN CaseInSensitive,
+  IN ULONG HashAlgorithm,
+  OUT PULONG HashValue);
+
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+$if (_NTDDK_)
+
+NTSYSAPI
+VOID
+NTAPI
+RtlRunOnceInitialize(
+  OUT PRTL_RUN_ONCE RunOnce);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlRunOnceExecuteOnce(
+  IN OUT PRTL_RUN_ONCE RunOnce,
+  IN PRTL_RUN_ONCE_INIT_FN InitFn,
+  IN OUT PVOID Parameter OPTIONAL,
+  OUT PVOID *Context OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlRunOnceBeginInitialize(
+  IN OUT PRTL_RUN_ONCE RunOnce,
+  IN ULONG Flags,
+  OUT PVOID *Context OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlRunOnceComplete(
+  IN OUT PRTL_RUN_ONCE RunOnce,
+  IN ULONG Flags,
+  IN PVOID Context OPTIONAL);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlGetProductInfo(
+  IN ULONG OSMajorVersion,
+  IN ULONG OSMinorVersion,
+  IN ULONG SpMajorVersion,
+  IN ULONG SpMinorVersion,
+  OUT PULONG ReturnedProductType);
+
+$endif
+
+$if (_WDMDDK_)
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberOfSetBitsUlongPtr(
+  IN ULONG_PTR Target);
+
+NTSYSAPI
+ULONGLONG
+NTAPI
+RtlIoDecodeMemIoResource(
+  IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
+  OUT PULONGLONG Alignment OPTIONAL,
+  OUT PULONGLONG MinimumAddress OPTIONAL,
+  OUT PULONGLONG MaximumAddress OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIoEncodeMemIoResource(
+  IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
+  IN UCHAR Type,
+  IN ULONGLONG Length,
+  IN ULONGLONG Alignment,
+  IN ULONGLONG MinimumAddress,
+  IN ULONGLONG MaximumAddress);
+
+NTSYSAPI
+ULONGLONG
+NTAPI
+RtlCmDecodeMemIoResource(
+  IN struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor,
+  OUT PULONGLONG Start OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlFindClosestEncodableLength(
+  IN ULONGLONG SourceLength,
+  OUT PULONGLONG TargetLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCmEncodeMemIoResource(
+  IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
+  IN UCHAR Type,
+  IN ULONGLONG Length,
+  IN ULONGLONG Start);
+
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+$if (_NTDDK_)
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlCreateHashTable(
+  IN OUT PRTL_DYNAMIC_HASH_TABLE *HashTable OPTIONAL,
+  IN ULONG Shift,
+  IN ULONG Flags);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlInsertEntryHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
+  IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry,
+  IN ULONG_PTR Signature,
+  IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlRemoveEntryHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
+  IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry,
+  IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
+
+NTSYSAPI
+PRTL_DYNAMIC_HASH_TABLE_ENTRY
+NTAPI
+RtlLookupEntryHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
+  IN ULONG_PTR Signature,
+  OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
+
+NTSYSAPI
+PRTL_DYNAMIC_HASH_TABLE_ENTRY
+NTAPI
+RtlGetNextEntryHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
+  IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlInitEnumerationHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
+  OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+
+NTSYSAPI
+PRTL_DYNAMIC_HASH_TABLE_ENTRY
+NTAPI
+RtlEnumerateEntryHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
+  IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlEndEnumerationHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
+  IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlInitWeakEnumerationHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
+  OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+
+NTSYSAPI
+PRTL_DYNAMIC_HASH_TABLE_ENTRY
+NTAPI
+RtlWeaklyEnumerateEntryHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
+  IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlEndWeakEnumerationHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
+  IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlExpandHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlContractHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable);
+
+$endif
+
+$if (_WDMDDK_)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeToUTF8N(
+  OUT PCHAR UTF8StringDestination,
+  IN ULONG UTF8StringMaxByteCount,
+  OUT PULONG UTF8StringActualByteCount,
+  IN PCWCH UnicodeStringSource,
+  IN ULONG UnicodeStringByteCount);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUTF8ToUnicodeN(
+  OUT PWSTR UnicodeStringDestination,
+  IN ULONG UnicodeStringMaxByteCount,
+  OUT PULONG UnicodeStringActualByteCount,
+  IN PCCH UTF8StringSource,
+  IN ULONG UTF8StringByteCount);
+
+NTSYSAPI
+ULONG64
+NTAPI
+RtlGetEnabledExtendedFeatures(
+  IN ULONG64 FeatureMask);
+
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+$if (_WDMDDK_)
+
+#if !defined(MIDL_PASS)
+/* inline funftions */
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertLongToLargeInteger(
+  IN LONG SignedInteger)
+{
+  LARGE_INTEGER ret;
+  ret.QuadPart = SignedInteger;
+  return ret;
+}
+
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertUlongToLargeInteger(
+  IN ULONG UnsignedInteger)
+{
+  LARGE_INTEGER ret;
+  ret.QuadPart = UnsignedInteger;
+  return ret;
+}
+
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerShiftLeft(
+  IN LARGE_INTEGER LargeInteger,
+  IN CCHAR ShiftCount)
+{
+  LARGE_INTEGER Result;
+
+  Result.QuadPart = LargeInteger.QuadPart << ShiftCount;
+  return Result;
+}
+
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerShiftRight(
+  IN LARGE_INTEGER LargeInteger,
+  IN CCHAR ShiftCount)
+{
+  LARGE_INTEGER Result;
+
+  Result.QuadPart = (ULONG64)LargeInteger.QuadPart >> ShiftCount;
+  return Result;
+}
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+ULONG
+NTAPI_INLINE
+RtlEnlargedUnsignedDivide(
+  IN ULARGE_INTEGER Dividend,
+  IN ULONG Divisor,
+  IN OUT PULONG Remainder)
+{
+  if (Remainder)
+    *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+  return (ULONG)(Dividend.QuadPart / Divisor);
+}
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerNegate(
+  IN LARGE_INTEGER Subtrahend)
+{
+  LARGE_INTEGER Difference;
+
+  Difference.QuadPart = -Subtrahend.QuadPart;
+  return Difference;
+}
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerSubtract(
+  IN LARGE_INTEGER Minuend,
+  IN LARGE_INTEGER Subtrahend)
+{
+  LARGE_INTEGER Difference;
+
+  Difference.QuadPart = Minuend.QuadPart - Subtrahend.QuadPart;
+  return Difference;
+}
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlEnlargedUnsignedMultiply(
+  IN ULONG Multiplicand,
+  IN ULONG Multiplier)
+{
+  LARGE_INTEGER ret;
+  ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+  return ret;
+}
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlEnlargedIntegerMultiply(
+  IN LONG Multiplicand,
+  IN LONG Multiplier)
+{
+  LARGE_INTEGER ret;
+  ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+  return ret;
+}
+
+FORCEINLINE
+VOID
+RtlInitEmptyAnsiString(
+  OUT PANSI_STRING AnsiString,
+  IN PCHAR Buffer,
+  IN USHORT BufferSize)
+{
+  AnsiString->Length = 0;
+  AnsiString->MaximumLength = BufferSize;
+  AnsiString->Buffer = Buffer;
+}
+
+FORCEINLINE
+VOID
+RtlInitEmptyUnicodeString(
+  OUT PUNICODE_STRING UnicodeString,
+  IN PWSTR Buffer,
+  IN USHORT BufferSize)
+{
+  UnicodeString->Length = 0;
+  UnicodeString->MaximumLength = BufferSize;
+  UnicodeString->Buffer = Buffer;
+}
+$endif
+
+#if defined(_AMD64_) || defined(_IA64_)
+
+$if (_WDMDDK_)
+
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedIntegerMultiply(
+  IN LARGE_INTEGER Multiplicand,
+  IN LONG Multiplier)
+{
+  LARGE_INTEGER ret;
+  ret.QuadPart = Multiplicand.QuadPart * Multiplier;
+  return ret;
+}
+
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedLargeIntegerDivide(
+  IN LARGE_INTEGER Dividend,
+  IN ULONG Divisor,
+  OUT PULONG Remainder OPTIONAL)
+{
+  LARGE_INTEGER ret;
+  ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
+  if (Remainder)
+    *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+  return ret;
+}
+
+$endif
+
+$if (_NTDDK_)
+
+//DECLSPEC_DEPRECATED_DDK_WINXP
+FORCEINLINE
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerDivide(
+  IN LARGE_INTEGER Dividend,
+  IN LARGE_INTEGER Divisor,
+  OUT PLARGE_INTEGER Remainder OPTIONAL)
+{
+  LARGE_INTEGER ret;
+  ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
+  if (Remainder)
+    Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
+  return ret;
+}
+
+#else
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlLargeIntegerDivide(
+  IN LARGE_INTEGER Dividend,
+  IN LARGE_INTEGER Divisor,
+  OUT PLARGE_INTEGER Remainder OPTIONAL);
+#endif
+
+$endif
+
+#endif /* defined(_AMD64_) || defined(_IA64_) */
+
+$if (_WDMDDK_)
+
+#if defined(_AMD64_)
+
+#define MultiplyHigh __mulh
+#define UnsignedMultiplyHigh __umulh
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedMagicDivide(
+  IN LARGE_INTEGER Dividend,
+  IN LARGE_INTEGER MagicDivisor,
+  IN CCHAR ShiftCount)
+{
+  LARGE_INTEGER ret;
+  ULONG64 ret64;
+  BOOLEAN Pos;
+  Pos = (Dividend.QuadPart >= 0);
+  ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart,
+                               MagicDivisor.QuadPart);
+  ret64 >>= ShiftCount;
+  ret.QuadPart = Pos ? ret64 : -ret64;
+  return ret;
+}
+#endif
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerAdd(
+  IN LARGE_INTEGER Addend1,
+  IN LARGE_INTEGER Addend2)
+{
+  LARGE_INTEGER ret;
+  ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart;
+  return ret;
+}
+
+/* VOID
+ * RtlLargeIntegerAnd(
+ *     IN OUT LARGE_INTEGER Result,
+ *     IN LARGE_INTEGER Source,
+ *     IN LARGE_INTEGER Mask);
+ */
+#define RtlLargeIntegerAnd(Result, Source, Mask) \
+    Result.QuadPart = Source.QuadPart & Mask.QuadPart
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerArithmeticShift(
+  IN LARGE_INTEGER LargeInteger,
+  IN CCHAR ShiftCount)
+{
+  LARGE_INTEGER ret;
+  ret.QuadPart = LargeInteger.QuadPart >> ShiftCount;
+  return ret;
+}
+
+/* BOOLEAN
+ * RtlLargeIntegerEqualTo(
+ *     IN LARGE_INTEGER  Operand1,
+ *     IN LARGE_INTEGER  Operand2);
+ */
+#define RtlLargeIntegerEqualTo(X,Y) \
+    (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
+
+FORCEINLINE
+PVOID
+RtlSecureZeroMemory(
+  OUT PVOID Pointer,
+  IN SIZE_T Size)
+{
+  volatile char* vptr = (volatile char*)Pointer;
+#if defined(_M_AMD64)
+  __stosb((PUCHAR)vptr, 0, Size);
+#else
+  char * endptr = (char *)vptr + Size;
+  while (vptr < endptr) {
+    *vptr = 0; vptr++;
+  }
+#endif
+   return Pointer;
+}
+
+#if defined(_M_AMD64)
+FORCEINLINE
+BOOLEAN
+RtlCheckBit(
+  IN PRTL_BITMAP BitMapHeader,
+  IN ULONG BitPosition)
+{
+  return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition);
+}
+#else
+#define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
+#endif /* defined(_M_AMD64) */
+
+#define RtlLargeIntegerGreaterThan(X,Y) (                              \
+    (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
+    ((X).HighPart > (Y).HighPart)                                      \
+)
+
+#define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) (                      \
+    (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
+    ((X).HighPart > (Y).HighPart)                                       \
+)
+
+#define RtlLargeIntegerNotEqualTo(X,Y) (                          \
+    (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
+)
+
+#define RtlLargeIntegerLessThan(X,Y) (                                 \
+    (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
+    ((X).HighPart < (Y).HighPart)                                      \
+)
+
+#define RtlLargeIntegerLessThanOrEqualTo(X,Y) (                         \
+    (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
+    ((X).HighPart < (Y).HighPart)                                       \
+)
+
+#define RtlLargeIntegerGreaterThanZero(X) (       \
+    (((X).HighPart == 0) && ((X).LowPart > 0)) || \
+    ((X).HighPart > 0 )                           \
+)
+
+#define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
+
+#define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
+
+#define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
+
+#define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
+
+#define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
+
+#endif /* !defined(MIDL_PASS) */
+
+/* Byte Swap Functions */
+#if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
+    ((defined(_M_AMD64) || defined(_M_IA64)) \
+        && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
+
+#define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
+#define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
+#define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
+
+#endif
+
+#if DBG
+
+#define ASSERT(exp) \
+  (VOID)((!(exp)) ? \
+    RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
+
+#define ASSERTMSG(msg, exp) \
+  (VOID)((!(exp)) ? \
+    RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
+
+#define RTL_SOFT_ASSERT(exp) \
+  (VOID)((!(exp)) ? \
+    DbgPrint("%s(%d): Soft assertion failed\n   Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
+
+#define RTL_SOFT_ASSERTMSG(msg, exp) \
+  (VOID)((!(exp)) ? \
+    DbgPrint("%s(%d): Soft assertion failed\n   Expression: %s\n   Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
+
+#define RTL_VERIFY(exp) ASSERT(exp)
+#define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp)
+
+#define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
+#define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
+
+#if defined(_MSC_VER)
+
+#define NT_ASSERT(exp) \
+   ((!(exp)) ? \
+      (__annotation(L"Debug", L"AssertFail", L#exp), \
+       DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_ASSERTMSG(msg, exp) \
+   ((!(exp)) ? \
+      (__annotation(L"Debug", L"AssertFail", L##msg), \
+      DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_ASSERTMSGW(msg, exp) \
+    ((!(exp)) ? \
+        (__annotation(L"Debug", L"AssertFail", msg), \
+         DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_VERIFY     NT_ASSERT
+#define NT_VERIFYMSG  NT_ASSERTMSG
+#define NT_VERIFYMSGW NT_ASSERTMSGW
+
+#else
+
+/* GCC doesn't support __annotation (nor PDB) */
+#define NT_ASSERT(exp) \
+   (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_ASSERTMSG NT_ASSERT
+#define NT_ASSERTMSGW NT_ASSERT
+
+#endif
+
+#else /* !DBG */
+
+#define ASSERT(exp) ((VOID) 0)
+#define ASSERTMSG(msg, exp) ((VOID) 0)
+
+#define RTL_SOFT_ASSERT(exp) ((VOID) 0)
+#define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
+
+#define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
+#define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+
+#define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
+#define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+
+#define NT_ASSERT(exp)          ((VOID)0)
+#define NT_ASSERTMSG(msg, exp)  ((VOID)0)
+#define NT_ASSERTMSGW(msg, exp) ((VOID)0)
+
+#define NT_VERIFY(_exp)           ((_exp) ? TRUE : FALSE)
+#define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
+#define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
+
+#endif /* DBG */
+
+#define InitializeListHead32(ListHead) (\
+    (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
+
+#if !defined(_WINBASE_)
+
+#if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
+
+NTKERNELAPI
+VOID
+InitializeSListHead(
+  OUT PSLIST_HEADER SListHead);
+
+#else
+
+VOID
+FORCEINLINE
+InitializeSListHead(
+  OUT PSLIST_HEADER SListHead)
+{
+#if defined(_IA64_)
+  ULONG64 FeatureBits;
+#endif
+
+#if defined(_WIN64)
+  if (((ULONG_PTR)SListHead & 0xf) != 0) {
+    RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT);
+  }
+#endif
+  RtlZeroMemory(SListHead, sizeof(SLIST_HEADER));
+#if defined(_IA64_)
+  FeatureBits = __getReg(CV_IA64_CPUID4);
+  if ((FeatureBits & KF_16BYTE_INSTR) != 0) {
+    SListHead->Header16.HeaderType = 1;
+    SListHead->Header16.Init = 1;
+  }
+#endif
+}
+
+#endif
+
+#if defined(_WIN64)
+
+#define InterlockedPopEntrySList(Head) \
+    ExpInterlockedPopEntrySList(Head)
+
+#define InterlockedPushEntrySList(Head, Entry) \
+    ExpInterlockedPushEntrySList(Head, Entry)
+
+#define InterlockedFlushSList(Head) \
+    ExpInterlockedFlushSList(Head)
+
+#define QueryDepthSList(Head) \
+    ExQueryDepthSList(Head)
+
+#else /* !defined(_WIN64) */
+
+NTKERNELAPI
+PSLIST_ENTRY
+FASTCALL
+InterlockedPopEntrySList(
+  IN PSLIST_HEADER ListHead);
+
+NTKERNELAPI
+PSLIST_ENTRY
+FASTCALL
+InterlockedPushEntrySList(
+  IN PSLIST_HEADER ListHead,
+  IN PSLIST_ENTRY ListEntry);
+
+#define InterlockedFlushSList(ListHead) \
+    ExInterlockedFlushSList(ListHead)
+
+#define QueryDepthSList(Head) \
+    ExQueryDepthSList(Head)
+
+#endif /* !defined(_WIN64) */
+
+#endif /* !defined(_WINBASE_) */
+
+#define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
+#define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
+#define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk)       \
+    ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
+#define RTL_CONTEXT_OFFSET(Context, Chunk)              \
+    RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
+#define RTL_CONTEXT_LENGTH(Context, Chunk)              \
+    RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
+#define RTL_CONTEXT_CHUNK(Context, Chunk)               \
+    RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1),    \
+                         (PCONTEXT_EX)(Context + 1),    \
+                         Chunk)
+
+BOOLEAN
+RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable)(
+  IN ULONG Version);
+
+BOOLEAN
+RTLVERLIB_DDI(RtlIsServicePackVersionInstalled)(
+  IN ULONG Version);
+
+#ifndef RtlIsNtDdiVersionAvailable
+#define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
+#endif
+
+#ifndef RtlIsServicePackVersionInstalled
+#define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
+#endif
+
+#define RtlInterlockedSetBits(Flags, Flag) \
+    InterlockedOr((PLONG)(Flags), Flag)
+
+#define RtlInterlockedAndBits(Flags, Flag) \
+    InterlockedAnd((PLONG)(Flags), Flag)
+
+#define RtlInterlockedClearBits(Flags, Flag) \
+    RtlInterlockedAndBits(Flags, ~(Flag))
+
+#define RtlInterlockedXorBits(Flags, Flag) \
+    InterlockedXor(Flags, Flag)
+
+#define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
+    (VOID) RtlInterlockedSetBits(Flags, Flag)
+
+#define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
+    (VOID) RtlInterlockedAndBits(Flags, Flag)
+
+#define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
+    RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
+
+$endif
+
+$if (_NTDDK_)
+
+#ifdef RTL_USE_AVL_TABLES
+
+#define RtlInitializeGenericTable               RtlInitializeGenericTableAvl
+#define RtlInsertElementGenericTable            RtlInsertElementGenericTableAvl
+#define RtlInsertElementGenericTableFull        RtlInsertElementGenericTableFullAvl
+#define RtlDeleteElementGenericTable            RtlDeleteElementGenericTableAvl
+#define RtlLookupElementGenericTable            RtlLookupElementGenericTableAvl
+#define RtlLookupElementGenericTableFull        RtlLookupElementGenericTableFullAvl
+#define RtlEnumerateGenericTable                RtlEnumerateGenericTableAvl
+#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
+#define RtlGetElementGenericTable               RtlGetElementGenericTableAvl
+#define RtlNumberGenericTableElements           RtlNumberGenericTableElementsAvl
+#define RtlIsGenericTableEmpty                  RtlIsGenericTableEmptyAvl
+
+#endif /* RTL_USE_AVL_TABLES */
+
+#define RtlInitializeSplayLinks(Links) {    \
+  PRTL_SPLAY_LINKS _SplayLinks;            \
+  _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
+  _SplayLinks->Parent = _SplayLinks;   \
+  _SplayLinks->LeftChild = NULL;       \
+  _SplayLinks->RightChild = NULL;      \
+}
+
+#define RtlIsLeftChild(Links) \
+    (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlIsRightChild(Links) \
+    (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlRightChild(Links) \
+    ((PRTL_SPLAY_LINKS)(Links))->RightChild
+
+#define RtlIsRoot(Links) \
+    (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlLeftChild(Links) \
+    ((PRTL_SPLAY_LINKS)(Links))->LeftChild
+
+#define RtlParent(Links) \
+    ((PRTL_SPLAY_LINKS)(Links))->Parent
+
+#define RtlInsertAsLeftChild(ParentLinks,ChildLinks)    \
+    {                                                   \
+        PRTL_SPLAY_LINKS _SplayParent;                  \
+        PRTL_SPLAY_LINKS _SplayChild;                   \
+        _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
+        _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
+        _SplayParent->LeftChild = _SplayChild;          \
+        _SplayChild->Parent = _SplayParent;             \
+    }
+
+#define RtlInsertAsRightChild(ParentLinks,ChildLinks)   \
+    {                                                   \
+        PRTL_SPLAY_LINKS _SplayParent;                  \
+        PRTL_SPLAY_LINKS _SplayChild;                   \
+        _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
+        _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
+        _SplayParent->RightChild = _SplayChild;         \
+        _SplayChild->Parent = _SplayParent;             \
+    }
+
+#if !defined(MIDL_PASS)
+
+FORCEINLINE
+LUID
+NTAPI_INLINE
+RtlConvertLongToLuid(
+  IN LONG Val)
+{
+  LUID Luid;
+  LARGE_INTEGER Temp;
+
+  Temp.QuadPart = Val;
+  Luid.LowPart = Temp.u.LowPart;
+  Luid.HighPart = Temp.u.HighPart;
+  return Luid;
+}
+
+FORCEINLINE
+LUID
+NTAPI_INLINE
+RtlConvertUlongToLuid(
+  IN ULONG Val)
+{
+  LUID Luid;
+
+  Luid.LowPart = Val;
+  Luid.HighPart = 0;
+  return Luid;
+}
+
+#endif /* !defined(MIDL_PASS) */
+
+#if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
+#define RtlGetCallersAddress(CallersAddress, CallersCaller) \
+    *CallersAddress = (PVOID)_ReturnAddress(); \
+    *CallersCaller = NULL;
+#else
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTSYSAPI
+VOID
+NTAPI
+RtlGetCallersAddress(
+  OUT PVOID *CallersAddress,
+  OUT PVOID *CallersCaller);
+#endif
+#endif
+
+#if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+FORCEINLINE
+VOID
+NTAPI
+RtlInitHashTableContext(
+  IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context)
+{
+  Context->ChainHead = NULL;
+  Context->PrevLinkage = NULL;
+}
+
+FORCEINLINE
+VOID
+NTAPI
+RtlInitHashTableContextFromEnumerator(
+  IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context,
+  IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator)
+{
+  Context->ChainHead = Enumerator->ChainHead;
+  Context->PrevLinkage = Enumerator->HashEntry.Linkage.Blink;
+}
+
+FORCEINLINE
+VOID
+NTAPI
+RtlReleaseHashTableContext(
+  IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context)
+{
+  UNREFERENCED_PARAMETER(Context);
+  return;
+}
+
+FORCEINLINE
+ULONG
+NTAPI
+RtlTotalBucketsHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable)
+{
+  return HashTable->TableSize;
+}
+
+FORCEINLINE
+ULONG
+NTAPI
+RtlNonEmptyBucketsHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable)
+{
+  return HashTable->NonEmptyBuckets;
+}
+
+FORCEINLINE
+ULONG
+NTAPI
+RtlEmptyBucketsHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable)
+{
+  return HashTable->TableSize - HashTable->NonEmptyBuckets;
+}
+
+FORCEINLINE
+ULONG
+NTAPI
+RtlTotalEntriesHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable)
+{
+  return HashTable->NumEntries;
+}
+
+FORCEINLINE
+ULONG
+NTAPI
+RtlActiveEnumeratorsHashTable(
+  IN PRTL_DYNAMIC_HASH_TABLE HashTable)
+{
+  return HashTable->NumEnumerators;
+}
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+#endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
+
+$endif
diff --git a/reactos/include/xdk/rtltypes.h b/reactos/include/xdk/rtltypes.h
new file mode 100644 (file)
index 0000000..ab74f70
--- /dev/null
@@ -0,0 +1,448 @@
+/******************************************************************************
+ *                           Runtime Library Types                            *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+#define RTL_REGISTRY_ABSOLUTE             0
+#define RTL_REGISTRY_SERVICES             1
+#define RTL_REGISTRY_CONTROL              2
+#define RTL_REGISTRY_WINDOWS_NT           3
+#define RTL_REGISTRY_DEVICEMAP            4
+#define RTL_REGISTRY_USER                 5
+#define RTL_REGISTRY_MAXIMUM              6
+#define RTL_REGISTRY_HANDLE               0x40000000
+#define RTL_REGISTRY_OPTIONAL             0x80000000
+
+/* RTL_QUERY_REGISTRY_TABLE.Flags */
+#define RTL_QUERY_REGISTRY_SUBKEY         0x00000001
+#define RTL_QUERY_REGISTRY_TOPKEY         0x00000002
+#define RTL_QUERY_REGISTRY_REQUIRED       0x00000004
+#define RTL_QUERY_REGISTRY_NOVALUE        0x00000008
+#define RTL_QUERY_REGISTRY_NOEXPAND       0x00000010
+#define RTL_QUERY_REGISTRY_DIRECT         0x00000020
+#define RTL_QUERY_REGISTRY_DELETE         0x00000040
+
+#define HASH_STRING_ALGORITHM_DEFAULT     0
+#define HASH_STRING_ALGORITHM_X65599      1
+#define HASH_STRING_ALGORITHM_INVALID     0xffffffff
+
+typedef struct _RTL_BITMAP {
+  ULONG SizeOfBitMap;
+  PULONG Buffer;
+} RTL_BITMAP, *PRTL_BITMAP;
+
+typedef struct _RTL_BITMAP_RUN {
+  ULONG StartingIndex;
+  ULONG NumberOfBits;
+} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
+
+typedef NTSTATUS
+(NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
+  IN PWSTR ValueName,
+  IN ULONG ValueType,
+  IN PVOID ValueData,
+  IN ULONG ValueLength,
+  IN PVOID Context,
+  IN PVOID EntryContext);
+
+typedef struct _RTL_QUERY_REGISTRY_TABLE {
+  PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
+  ULONG Flags;
+  PCWSTR Name;
+  PVOID EntryContext;
+  ULONG DefaultType;
+  PVOID DefaultData;
+  ULONG DefaultLength;
+} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
+
+typedef struct _TIME_FIELDS {
+  CSHORT Year;
+  CSHORT Month;
+  CSHORT Day;
+  CSHORT Hour;
+  CSHORT Minute;
+  CSHORT Second;
+  CSHORT Milliseconds;
+  CSHORT Weekday;
+} TIME_FIELDS, *PTIME_FIELDS;
+
+/* Slist Header */
+#ifndef _SLIST_HEADER_
+#define _SLIST_HEADER_
+
+#if defined(_WIN64)
+
+typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
+  struct _SLIST_ENTRY *Next;
+} SLIST_ENTRY, *PSLIST_ENTRY;
+
+typedef struct _SLIST_ENTRY32 {
+  ULONG Next;
+} SLIST_ENTRY32, *PSLIST_ENTRY32;
+
+typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {
+  struct {
+    ULONGLONG Alignment;
+    ULONGLONG Region;
+  } DUMMYSTRUCTNAME;
+  struct {
+    ULONGLONG Depth:16;
+    ULONGLONG Sequence:9;
+    ULONGLONG NextEntry:39;
+    ULONGLONG HeaderType:1;
+    ULONGLONG Init:1;
+    ULONGLONG Reserved:59;
+    ULONGLONG Region:3;
+  } Header8;
+  struct {
+    ULONGLONG Depth:16;
+    ULONGLONG Sequence:48;
+    ULONGLONG HeaderType:1;
+    ULONGLONG Init:1;
+    ULONGLONG Reserved:2;
+    ULONGLONG NextEntry:60;
+  } Header16;
+  struct {
+    ULONGLONG Depth:16;
+    ULONGLONG Sequence:48;
+    ULONGLONG HeaderType:1;
+    ULONGLONG Reserved:3;
+    ULONGLONG NextEntry:60;
+  } HeaderX64;
+} SLIST_HEADER, *PSLIST_HEADER;
+
+typedef union _SLIST_HEADER32 {
+  ULONGLONG Alignment;
+  struct {
+    SLIST_ENTRY32 Next;
+    USHORT Depth;
+    USHORT Sequence;
+  } DUMMYSTRUCTNAME;
+} SLIST_HEADER32, *PSLIST_HEADER32;
+
+#else
+
+#define SLIST_ENTRY SINGLE_LIST_ENTRY
+#define _SLIST_ENTRY _SINGLE_LIST_ENTRY
+#define PSLIST_ENTRY PSINGLE_LIST_ENTRY
+
+typedef SLIST_ENTRY SLIST_ENTRY32, *PSLIST_ENTRY32;
+
+typedef union _SLIST_HEADER {
+  ULONGLONG Alignment;
+  struct {
+    SLIST_ENTRY Next;
+    USHORT Depth;
+    USHORT Sequence;
+  } DUMMYSTRUCTNAME;
+} SLIST_HEADER, *PSLIST_HEADER;
+
+typedef SLIST_HEADER SLIST_HEADER32, *PSLIST_HEADER32;
+
+#endif /* defined(_WIN64) */
+
+#endif /* _SLIST_HEADER_ */
+
+/* MS definition is broken! */
+extern BOOLEAN NTSYSAPI NlsMbCodePageTag;
+extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag;
+#define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
+#define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
+
+#define SHORT_LEAST_SIGNIFICANT_BIT       0
+#define SHORT_MOST_SIGNIFICANT_BIT        1
+
+#define LONG_LEAST_SIGNIFICANT_BIT        0
+#define LONG_3RD_MOST_SIGNIFICANT_BIT     1
+#define LONG_2ND_MOST_SIGNIFICANT_BIT     2
+#define LONG_MOST_SIGNIFICANT_BIT         3
+
+#define RTLVERLIB_DDI(x) Wdmlib##x
+
+typedef BOOLEAN
+(*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE)(
+  IN ULONG Version);
+
+typedef BOOLEAN
+(*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED)(
+  IN ULONG Version);
+
+$endif
+
+$if (_NTDDK_)
+
+#ifndef _RTL_RUN_ONCE_DEF
+#define _RTL_RUN_ONCE_DEF
+
+#define RTL_RUN_ONCE_INIT {0}
+
+#define RTL_RUN_ONCE_CHECK_ONLY     0x00000001UL
+#define RTL_RUN_ONCE_ASYNC          0x00000002UL
+#define RTL_RUN_ONCE_INIT_FAILED    0x00000004UL
+
+#define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
+
+#define RTL_HASH_ALLOCATED_HEADER            0x00000001
+
+#define RTL_HASH_RESERVED_SIGNATURE 0
+
+/* RtlVerifyVersionInfo() ComparisonType */
+
+#define VER_EQUAL                       1
+#define VER_GREATER                     2
+#define VER_GREATER_EQUAL               3
+#define VER_LESS                        4
+#define VER_LESS_EQUAL                  5
+#define VER_AND                         6
+#define VER_OR                          7
+
+#define VER_CONDITION_MASK              7
+#define VER_NUM_BITS_PER_CONDITION_MASK 3
+
+/* RtlVerifyVersionInfo() TypeMask */
+
+#define VER_MINORVERSION                  0x0000001
+#define VER_MAJORVERSION                  0x0000002
+#define VER_BUILDNUMBER                   0x0000004
+#define VER_PLATFORMID                    0x0000008
+#define VER_SERVICEPACKMINOR              0x0000010
+#define VER_SERVICEPACKMAJOR              0x0000020
+#define VER_SUITENAME                     0x0000040
+#define VER_PRODUCT_TYPE                  0x0000080
+
+#define VER_NT_WORKSTATION              0x0000001
+#define VER_NT_DOMAIN_CONTROLLER        0x0000002
+#define VER_NT_SERVER                   0x0000003
+
+#define VER_PLATFORM_WIN32s             0
+#define VER_PLATFORM_WIN32_WINDOWS      1
+#define VER_PLATFORM_WIN32_NT           2
+
+typedef union _RTL_RUN_ONCE {
+  PVOID Ptr;
+} RTL_RUN_ONCE, *PRTL_RUN_ONCE;
+
+typedef ULONG /* LOGICAL */
+(NTAPI *PRTL_RUN_ONCE_INIT_FN) (
+  IN OUT PRTL_RUN_ONCE RunOnce,
+  IN OUT PVOID Parameter OPTIONAL,
+  IN OUT PVOID *Context OPTIONAL);
+
+#endif /* _RTL_RUN_ONCE_DEF */
+
+typedef enum _TABLE_SEARCH_RESULT {
+  TableEmptyTree,
+  TableFoundNode,
+  TableInsertAsLeft,
+  TableInsertAsRight
+} TABLE_SEARCH_RESULT;
+
+typedef enum _RTL_GENERIC_COMPARE_RESULTS {
+  GenericLessThan,
+  GenericGreaterThan,
+  GenericEqual
+} RTL_GENERIC_COMPARE_RESULTS;
+
+// Forwarder
+struct _RTL_AVL_TABLE;
+
+typedef RTL_GENERIC_COMPARE_RESULTS
+(NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
+  IN struct _RTL_AVL_TABLE *Table,
+  IN PVOID FirstStruct,
+  IN PVOID SecondStruct);
+
+typedef PVOID
+(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
+  IN struct _RTL_AVL_TABLE *Table,
+  IN CLONG ByteSize);
+
+typedef VOID
+(NTAPI *PRTL_AVL_FREE_ROUTINE) (
+  IN struct _RTL_AVL_TABLE *Table,
+  IN PVOID Buffer);
+
+typedef NTSTATUS
+(NTAPI *PRTL_AVL_MATCH_FUNCTION) (
+  IN struct _RTL_AVL_TABLE *Table,
+  IN PVOID UserData,
+  IN PVOID MatchData);
+
+typedef struct _RTL_BALANCED_LINKS {
+  struct _RTL_BALANCED_LINKS *Parent;
+  struct _RTL_BALANCED_LINKS *LeftChild;
+  struct _RTL_BALANCED_LINKS *RightChild;
+  CHAR Balance;
+  UCHAR Reserved[3];
+} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
+
+typedef struct _RTL_AVL_TABLE {
+  RTL_BALANCED_LINKS BalancedRoot;
+  PVOID OrderedPointer;
+  ULONG WhichOrderedElement;
+  ULONG NumberGenericTableElements;
+  ULONG DepthOfTree;
+  PRTL_BALANCED_LINKS RestartKey;
+  ULONG DeleteCount;
+  PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
+  PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
+  PRTL_AVL_FREE_ROUTINE FreeRoutine;
+  PVOID TableContext;
+} RTL_AVL_TABLE, *PRTL_AVL_TABLE;
+
+#ifndef RTL_USE_AVL_TABLES
+
+struct _RTL_GENERIC_TABLE;
+
+typedef RTL_GENERIC_COMPARE_RESULTS
+(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
+  IN struct _RTL_GENERIC_TABLE *Table,
+  IN PVOID FirstStruct,
+  IN PVOID SecondStruct);
+
+typedef PVOID
+(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
+  IN struct _RTL_GENERIC_TABLE *Table,
+  IN CLONG ByteSize);
+
+typedef VOID
+(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
+  IN struct _RTL_GENERIC_TABLE *Table,
+  IN PVOID Buffer);
+
+typedef struct _RTL_SPLAY_LINKS {
+  struct _RTL_SPLAY_LINKS *Parent;
+  struct _RTL_SPLAY_LINKS *LeftChild;
+  struct _RTL_SPLAY_LINKS *RightChild;
+} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
+
+typedef struct _RTL_GENERIC_TABLE {
+  PRTL_SPLAY_LINKS TableRoot;
+  LIST_ENTRY InsertOrderList;
+  PLIST_ENTRY OrderedPointer;
+  ULONG WhichOrderedElement;
+  ULONG NumberGenericTableElements;
+  PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
+  PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
+  PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
+  PVOID TableContext;
+} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
+
+#endif /* !RTL_USE_AVL_TABLES */
+
+#ifdef RTL_USE_AVL_TABLES
+
+#undef PRTL_GENERIC_COMPARE_ROUTINE
+#undef RTL_GENERIC_COMPARE_ROUTINE
+#undef PRTL_GENERIC_ALLOCATE_ROUTINE
+#undef RTL_GENERIC_ALLOCATE_ROUTINE
+#undef PRTL_GENERIC_FREE_ROUTINE
+#undef RTL_GENERIC_FREE_ROUTINE
+#undef RTL_GENERIC_TABLE
+#undef PRTL_GENERIC_TABLE
+
+#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
+#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
+#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
+#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
+#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
+#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
+#define RTL_GENERIC_TABLE RTL_AVL_TABLE
+#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
+
+#endif /* RTL_USE_AVL_TABLES */
+
+typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY {
+  LIST_ENTRY Linkage;
+  ULONG_PTR Signature;
+} RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY;
+
+typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT {
+  PLIST_ENTRY ChainHead;
+  PLIST_ENTRY PrevLinkage;
+  ULONG_PTR Signature;
+} RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT;
+
+typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR {
+  RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry;
+  PLIST_ENTRY ChainHead;
+  ULONG BucketIndex;
+} RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR;
+
+typedef struct _RTL_DYNAMIC_HASH_TABLE {
+  ULONG Flags;
+  ULONG Shift;
+  ULONG TableSize;
+  ULONG Pivot;
+  ULONG DivisorMask;
+  ULONG NumEntries;
+  ULONG NonEmptyBuckets;
+  ULONG NumEnumerators;
+  PVOID Directory;
+} RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE;
+
+typedef struct _OSVERSIONINFOA {
+  ULONG dwOSVersionInfoSize;
+  ULONG dwMajorVersion;
+  ULONG dwMinorVersion;
+  ULONG dwBuildNumber;
+  ULONG dwPlatformId;
+  CHAR szCSDVersion[128];
+} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
+
+typedef struct _OSVERSIONINFOW {
+  ULONG dwOSVersionInfoSize;
+  ULONG dwMajorVersion;
+  ULONG dwMinorVersion;
+  ULONG dwBuildNumber;
+  ULONG dwPlatformId;
+  WCHAR szCSDVersion[128];
+} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
+
+typedef struct _OSVERSIONINFOEXA {
+  ULONG dwOSVersionInfoSize;
+  ULONG dwMajorVersion;
+  ULONG dwMinorVersion;
+  ULONG dwBuildNumber;
+  ULONG dwPlatformId;
+  CHAR szCSDVersion[128];
+  USHORT wServicePackMajor;
+  USHORT wServicePackMinor;
+  USHORT wSuiteMask;
+  UCHAR wProductType;
+  UCHAR wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+
+typedef struct _OSVERSIONINFOEXW {
+  ULONG dwOSVersionInfoSize;
+  ULONG dwMajorVersion;
+  ULONG dwMinorVersion;
+  ULONG dwBuildNumber;
+  ULONG dwPlatformId;
+  WCHAR szCSDVersion[128];
+  USHORT wServicePackMajor;
+  USHORT wServicePackMinor;
+  USHORT wSuiteMask;
+  UCHAR wProductType;
+  UCHAR wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
+
+#ifdef UNICODE
+typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
+typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
+typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
+typedef OSVERSIONINFOW OSVERSIONINFO;
+typedef POSVERSIONINFOW POSVERSIONINFO;
+typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
+#else
+typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
+typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
+typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
+typedef OSVERSIONINFOA OSVERSIONINFO;
+typedef POSVERSIONINFOA POSVERSIONINFO;
+typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
+#endif /* UNICODE */
+
+#define HASH_ENTRY_KEY(x)    ((x)->Signature)
+
+$endif
diff --git a/reactos/include/xdk/sefuncs.h b/reactos/include/xdk/sefuncs.h
new file mode 100644 (file)
index 0000000..6c89220
--- /dev/null
@@ -0,0 +1,144 @@
+/******************************************************************************
+ *                            Security Manager Functions                      *
+ ******************************************************************************/
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+$if (_NTDDK_)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeSinglePrivilegeCheck(
+  IN LUID PrivilegeValue,
+  IN KPROCESSOR_MODE PreviousMode);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeAccessCheck(
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+  IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
+  IN BOOLEAN SubjectContextLocked,
+  IN ACCESS_MASK DesiredAccess,
+  IN ACCESS_MASK PreviouslyGrantedAccess,
+  OUT PPRIVILEGE_SET *Privileges OPTIONAL,
+  IN PGENERIC_MAPPING GenericMapping,
+  IN KPROCESSOR_MODE AccessMode,
+  OUT PACCESS_MASK GrantedAccess,
+  OUT PNTSTATUS AccessStatus);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeAssignSecurity(
+  IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
+  IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL,
+  OUT PSECURITY_DESCRIPTOR *NewDescriptor,
+  IN BOOLEAN IsDirectoryObject,
+  IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
+  IN PGENERIC_MAPPING GenericMapping,
+  IN POOL_TYPE PoolType);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeAssignSecurityEx(
+  IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
+  IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL,
+  OUT PSECURITY_DESCRIPTOR *NewDescriptor,
+  IN GUID *ObjectType OPTIONAL,
+  IN BOOLEAN IsDirectoryObject,
+  IN ULONG AutoInheritFlags,
+  IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
+  IN PGENERIC_MAPPING GenericMapping,
+  IN POOL_TYPE PoolType);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeDeassignSecurity(
+  IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeValidSecurityDescriptor(
+  IN ULONG Length,
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTKERNELAPI
+ULONG
+NTAPI
+SeObjectCreateSaclAccessBits(
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeReleaseSubjectContext(
+  IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeUnlockSubjectContext(
+  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeCaptureSubjectContext(
+  OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeLockSubjectContext(
+  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+
+NTSTATUS
+NTAPI
+SeSetAuditParameter(
+  IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters,
+  IN SE_ADT_PARAMETER_TYPE Type,
+  IN ULONG Index,
+  IN PVOID Data);
+
+NTSTATUS
+NTAPI
+SeReportSecurityEvent(
+  IN ULONG Flags,
+  IN PUNICODE_STRING SourceName,
+  IN PSID UserSid OPTIONAL,
+  IN PSE_ADT_PARAMETER_ARRAY AuditParameters);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTKERNELAPI
+ULONG
+NTAPI
+SeComputeAutoInheritByObjectType(
+  IN PVOID ObjectType,
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
+  IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL);
+
+#ifdef SE_NTFS_WORLD_CACHE
+VOID
+NTAPI
+SeGetWorldRights(
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+  IN PGENERIC_MAPPING GenericMapping,
+  OUT PACCESS_MASK GrantedAccess);
+#endif /* SE_NTFS_WORLD_CACHE */
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+$endif
diff --git a/reactos/include/xdk/setypes.h b/reactos/include/xdk/setypes.h
new file mode 100644 (file)
index 0000000..6892aee
--- /dev/null
@@ -0,0 +1,396 @@
+/******************************************************************************
+ *                            Security Manager Types                          *
+ ******************************************************************************/
+$if (_NTDDK_)
+#define SE_UNSOLICITED_INPUT_PRIVILEGE    6
+
+typedef enum _WELL_KNOWN_SID_TYPE {
+  WinNullSid = 0,
+  WinWorldSid = 1,
+  WinLocalSid = 2,
+  WinCreatorOwnerSid = 3,
+  WinCreatorGroupSid = 4,
+  WinCreatorOwnerServerSid = 5,
+  WinCreatorGroupServerSid = 6,
+  WinNtAuthoritySid = 7,
+  WinDialupSid = 8,
+  WinNetworkSid = 9,
+  WinBatchSid = 10,
+  WinInteractiveSid = 11,
+  WinServiceSid = 12,
+  WinAnonymousSid = 13,
+  WinProxySid = 14,
+  WinEnterpriseControllersSid = 15,
+  WinSelfSid = 16,
+  WinAuthenticatedUserSid = 17,
+  WinRestrictedCodeSid = 18,
+  WinTerminalServerSid = 19,
+  WinRemoteLogonIdSid = 20,
+  WinLogonIdsSid = 21,
+  WinLocalSystemSid = 22,
+  WinLocalServiceSid = 23,
+  WinNetworkServiceSid = 24,
+  WinBuiltinDomainSid = 25,
+  WinBuiltinAdministratorsSid = 26,
+  WinBuiltinUsersSid = 27,
+  WinBuiltinGuestsSid = 28,
+  WinBuiltinPowerUsersSid = 29,
+  WinBuiltinAccountOperatorsSid = 30,
+  WinBuiltinSystemOperatorsSid = 31,
+  WinBuiltinPrintOperatorsSid = 32,
+  WinBuiltinBackupOperatorsSid = 33,
+  WinBuiltinReplicatorSid = 34,
+  WinBuiltinPreWindows2000CompatibleAccessSid = 35,
+  WinBuiltinRemoteDesktopUsersSid = 36,
+  WinBuiltinNetworkConfigurationOperatorsSid = 37,
+  WinAccountAdministratorSid = 38,
+  WinAccountGuestSid = 39,
+  WinAccountKrbtgtSid = 40,
+  WinAccountDomainAdminsSid = 41,
+  WinAccountDomainUsersSid = 42,
+  WinAccountDomainGuestsSid = 43,
+  WinAccountComputersSid = 44,
+  WinAccountControllersSid = 45,
+  WinAccountCertAdminsSid = 46,
+  WinAccountSchemaAdminsSid = 47,
+  WinAccountEnterpriseAdminsSid = 48,
+  WinAccountPolicyAdminsSid = 49,
+  WinAccountRasAndIasServersSid = 50,
+  WinNTLMAuthenticationSid = 51,
+  WinDigestAuthenticationSid = 52,
+  WinSChannelAuthenticationSid = 53,
+  WinThisOrganizationSid = 54,
+  WinOtherOrganizationSid = 55,
+  WinBuiltinIncomingForestTrustBuildersSid = 56,
+  WinBuiltinPerfMonitoringUsersSid = 57,
+  WinBuiltinPerfLoggingUsersSid = 58,
+  WinBuiltinAuthorizationAccessSid = 59,
+  WinBuiltinTerminalServerLicenseServersSid = 60,
+  WinBuiltinDCOMUsersSid = 61,
+  WinBuiltinIUsersSid = 62,
+  WinIUserSid = 63,
+  WinBuiltinCryptoOperatorsSid = 64,
+  WinUntrustedLabelSid = 65,
+  WinLowLabelSid = 66,
+  WinMediumLabelSid = 67,
+  WinHighLabelSid = 68,
+  WinSystemLabelSid = 69,
+  WinWriteRestrictedCodeSid = 70,
+  WinCreatorOwnerRightsSid = 71,
+  WinCacheablePrincipalsGroupSid = 72,
+  WinNonCacheablePrincipalsGroupSid = 73,
+  WinEnterpriseReadonlyControllersSid = 74,
+  WinAccountReadonlyControllersSid = 75,
+  WinBuiltinEventLogReadersGroup = 76,
+  WinNewEnterpriseReadonlyControllersSid = 77,
+  WinBuiltinCertSvcDComAccessGroup = 78,
+  WinMediumPlusLabelSid = 79,
+  WinLocalLogonSid = 80,
+  WinConsoleLogonSid = 81,
+  WinThisOrganizationCertificateSid = 82,
+} WELL_KNOWN_SID_TYPE;
+$endif
+
+$if (_WDMDDK_)
+/* Simple types */
+typedef PVOID PSECURITY_DESCRIPTOR;
+typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION;
+typedef ULONG ACCESS_MASK, *PACCESS_MASK;
+typedef PVOID PACCESS_TOKEN;
+typedef PVOID PSID;
+
+#define DELETE                           0x00010000L
+#define READ_CONTROL                     0x00020000L
+#define WRITE_DAC                        0x00040000L
+#define WRITE_OWNER                      0x00080000L
+#define SYNCHRONIZE                      0x00100000L
+#define STANDARD_RIGHTS_REQUIRED         0x000F0000L
+#define STANDARD_RIGHTS_READ             READ_CONTROL
+#define STANDARD_RIGHTS_WRITE            READ_CONTROL
+#define STANDARD_RIGHTS_EXECUTE          READ_CONTROL
+#define STANDARD_RIGHTS_ALL              0x001F0000L
+#define SPECIFIC_RIGHTS_ALL              0x0000FFFFL
+#define ACCESS_SYSTEM_SECURITY           0x01000000L
+#define MAXIMUM_ALLOWED                  0x02000000L
+#define GENERIC_READ                     0x80000000L
+#define GENERIC_WRITE                    0x40000000L
+#define GENERIC_EXECUTE                  0x20000000L
+#define GENERIC_ALL                      0x10000000L
+
+typedef struct _GENERIC_MAPPING {
+  ACCESS_MASK GenericRead;
+  ACCESS_MASK GenericWrite;
+  ACCESS_MASK GenericExecute;
+  ACCESS_MASK GenericAll;
+} GENERIC_MAPPING, *PGENERIC_MAPPING;
+
+#define ACL_REVISION                      2
+#define ACL_REVISION_DS                   4
+
+#define ACL_REVISION1                     1
+#define ACL_REVISION2                     2
+#define ACL_REVISION3                     3
+#define ACL_REVISION4                     4
+#define MIN_ACL_REVISION                  ACL_REVISION2
+#define MAX_ACL_REVISION                  ACL_REVISION4
+
+typedef struct _ACL {
+  UCHAR AclRevision;
+  UCHAR Sbz1;
+  USHORT AclSize;
+  USHORT AceCount;
+  USHORT Sbz2;
+} ACL, *PACL;
+
+/* Current security descriptor revision value */
+#define SECURITY_DESCRIPTOR_REVISION     (1)
+#define SECURITY_DESCRIPTOR_REVISION1    (1)
+
+/* Privilege attributes */
+#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
+#define SE_PRIVILEGE_ENABLED            (0x00000002L)
+#define SE_PRIVILEGE_REMOVED            (0X00000004L)
+#define SE_PRIVILEGE_USED_FOR_ACCESS    (0x80000000L)
+
+#define SE_PRIVILEGE_VALID_ATTRIBUTES   (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
+                                         SE_PRIVILEGE_ENABLED            | \
+                                         SE_PRIVILEGE_REMOVED            | \
+                                         SE_PRIVILEGE_USED_FOR_ACCESS)
+
+#include <pshpack4.h>
+typedef struct _LUID_AND_ATTRIBUTES {
+  LUID Luid;
+  ULONG Attributes;
+} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
+#include <poppack.h>
+
+typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
+
+/* Privilege sets */
+#define PRIVILEGE_SET_ALL_NECESSARY (1)
+
+typedef struct _PRIVILEGE_SET {
+  ULONG PrivilegeCount;
+  ULONG Control;
+  LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
+} PRIVILEGE_SET,*PPRIVILEGE_SET;
+
+typedef enum _SECURITY_IMPERSONATION_LEVEL {
+  SecurityAnonymous,
+  SecurityIdentification,
+  SecurityImpersonation,
+  SecurityDelegation
+} SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL;
+
+#define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
+#define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
+#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
+#define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
+
+#define SECURITY_DYNAMIC_TRACKING (TRUE)
+#define SECURITY_STATIC_TRACKING (FALSE)
+
+typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE;
+
+typedef struct _SECURITY_QUALITY_OF_SERVICE {
+  ULONG Length;
+  SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+  SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
+  BOOLEAN EffectiveOnly;
+} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
+
+typedef struct _SE_IMPERSONATION_STATE {
+  PACCESS_TOKEN Token;
+  BOOLEAN CopyOnOpen;
+  BOOLEAN EffectiveOnly;
+  SECURITY_IMPERSONATION_LEVEL Level;
+} SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE;
+
+#define OWNER_SECURITY_INFORMATION       (0x00000001L)
+#define GROUP_SECURITY_INFORMATION       (0x00000002L)
+#define DACL_SECURITY_INFORMATION        (0x00000004L)
+#define SACL_SECURITY_INFORMATION        (0x00000008L)
+#define LABEL_SECURITY_INFORMATION       (0x00000010L)
+
+#define PROTECTED_DACL_SECURITY_INFORMATION     (0x80000000L)
+#define PROTECTED_SACL_SECURITY_INFORMATION     (0x40000000L)
+#define UNPROTECTED_DACL_SECURITY_INFORMATION   (0x20000000L)
+#define UNPROTECTED_SACL_SECURITY_INFORMATION   (0x10000000L)
+
+typedef enum _SECURITY_OPERATION_CODE {
+  SetSecurityDescriptor,
+  QuerySecurityDescriptor,
+  DeleteSecurityDescriptor,
+  AssignSecurityDescriptor
+} SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE;
+
+#define INITIAL_PRIVILEGE_COUNT           3
+
+typedef struct _INITIAL_PRIVILEGE_SET {
+  ULONG PrivilegeCount;
+  ULONG Control;
+  LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
+} INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
+
+#define SE_MIN_WELL_KNOWN_PRIVILEGE         2
+#define SE_CREATE_TOKEN_PRIVILEGE           2
+#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE     3
+#define SE_LOCK_MEMORY_PRIVILEGE            4
+#define SE_INCREASE_QUOTA_PRIVILEGE         5
+#define SE_MACHINE_ACCOUNT_PRIVILEGE        6
+#define SE_TCB_PRIVILEGE                    7
+#define SE_SECURITY_PRIVILEGE               8
+#define SE_TAKE_OWNERSHIP_PRIVILEGE         9
+#define SE_LOAD_DRIVER_PRIVILEGE            10
+#define SE_SYSTEM_PROFILE_PRIVILEGE         11
+#define SE_SYSTEMTIME_PRIVILEGE             12
+#define SE_PROF_SINGLE_PROCESS_PRIVILEGE    13
+#define SE_INC_BASE_PRIORITY_PRIVILEGE      14
+#define SE_CREATE_PAGEFILE_PRIVILEGE        15
+#define SE_CREATE_PERMANENT_PRIVILEGE       16
+#define SE_BACKUP_PRIVILEGE                 17
+#define SE_RESTORE_PRIVILEGE                18
+#define SE_SHUTDOWN_PRIVILEGE               19
+#define SE_DEBUG_PRIVILEGE                  20
+#define SE_AUDIT_PRIVILEGE                  21
+#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE     22
+#define SE_CHANGE_NOTIFY_PRIVILEGE          23
+#define SE_REMOTE_SHUTDOWN_PRIVILEGE        24
+#define SE_UNDOCK_PRIVILEGE                 25
+#define SE_SYNC_AGENT_PRIVILEGE             26
+#define SE_ENABLE_DELEGATION_PRIVILEGE      27
+#define SE_MANAGE_VOLUME_PRIVILEGE          28
+#define SE_IMPERSONATE_PRIVILEGE            29
+#define SE_CREATE_GLOBAL_PRIVILEGE          30
+#define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
+#define SE_RELABEL_PRIVILEGE                32
+#define SE_INC_WORKING_SET_PRIVILEGE        33
+#define SE_TIME_ZONE_PRIVILEGE              34
+#define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE   35
+#define SE_MAX_WELL_KNOWN_PRIVILEGE         SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
+
+typedef struct _SECURITY_SUBJECT_CONTEXT {
+  PACCESS_TOKEN ClientToken;
+  SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+  PACCESS_TOKEN PrimaryToken;
+  PVOID ProcessAuditId;
+} SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
+
+typedef struct _ACCESS_STATE {
+  LUID OperationID;
+  BOOLEAN SecurityEvaluated;
+  BOOLEAN GenerateAudit;
+  BOOLEAN GenerateOnClose;
+  BOOLEAN PrivilegesAllocated;
+  ULONG Flags;
+  ACCESS_MASK RemainingDesiredAccess;
+  ACCESS_MASK PreviouslyGrantedAccess;
+  ACCESS_MASK OriginalDesiredAccess;
+  SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
+  PSECURITY_DESCRIPTOR SecurityDescriptor;
+  PVOID AuxData;
+  union {
+    INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
+    PRIVILEGE_SET PrivilegeSet;
+  } Privileges;
+  BOOLEAN AuditPrivileges;
+  UNICODE_STRING ObjectName;
+  UNICODE_STRING ObjectTypeName;
+} ACCESS_STATE, *PACCESS_STATE;
+
+typedef VOID
+(NTAPI *PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR)(
+  IN PVOID Vcb,
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+#ifndef _NTLSA_IFS_
+
+#ifndef _NTLSA_AUDIT_
+#define _NTLSA_AUDIT_
+
+#define SE_MAX_AUDIT_PARAMETERS 32
+#define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
+
+#define SE_ADT_OBJECT_ONLY 0x1
+
+#define SE_ADT_PARAMETERS_SELF_RELATIVE    0x00000001
+#define SE_ADT_PARAMETERS_SEND_TO_LSA      0x00000002
+#define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT  0x00000004
+#define SE_ADT_PARAMETER_GENERIC_AUDIT     0x00000008
+#define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
+
+#define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
+  ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
+    (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
+
+typedef enum _SE_ADT_PARAMETER_TYPE {
+  SeAdtParmTypeNone = 0,
+  SeAdtParmTypeString,
+  SeAdtParmTypeFileSpec,
+  SeAdtParmTypeUlong,
+  SeAdtParmTypeSid,
+  SeAdtParmTypeLogonId,
+  SeAdtParmTypeNoLogonId,
+  SeAdtParmTypeAccessMask,
+  SeAdtParmTypePrivs,
+  SeAdtParmTypeObjectTypes,
+  SeAdtParmTypeHexUlong,
+  SeAdtParmTypePtr,
+  SeAdtParmTypeTime,
+  SeAdtParmTypeGuid,
+  SeAdtParmTypeLuid,
+  SeAdtParmTypeHexInt64,
+  SeAdtParmTypeStringList,
+  SeAdtParmTypeSidList,
+  SeAdtParmTypeDuration,
+  SeAdtParmTypeUserAccountControl,
+  SeAdtParmTypeNoUac,
+  SeAdtParmTypeMessage,
+  SeAdtParmTypeDateTime,
+  SeAdtParmTypeSockAddr,
+  SeAdtParmTypeSD,
+  SeAdtParmTypeLogonHours,
+  SeAdtParmTypeLogonIdNoSid,
+  SeAdtParmTypeUlongNoConv,
+  SeAdtParmTypeSockAddrNoPort,
+  SeAdtParmTypeAccessReason
+} SE_ADT_PARAMETER_TYPE, *PSE_ADT_PARAMETER_TYPE;
+
+typedef struct _SE_ADT_OBJECT_TYPE {
+  GUID ObjectType;
+  USHORT Flags;
+  USHORT Level;
+  ACCESS_MASK AccessMask;
+} SE_ADT_OBJECT_TYPE, *PSE_ADT_OBJECT_TYPE;
+
+typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY {
+  SE_ADT_PARAMETER_TYPE Type;
+  ULONG Length;
+  ULONG_PTR Data[2];
+  PVOID Address;
+} SE_ADT_PARAMETER_ARRAY_ENTRY, *PSE_ADT_PARAMETER_ARRAY_ENTRY;
+
+typedef struct _SE_ADT_ACCESS_REASON {
+  ACCESS_MASK AccessMask;
+  ULONG AccessReasons[32];
+  ULONG ObjectTypeIndex;
+  ULONG AccessGranted;
+  PSECURITY_DESCRIPTOR SecurityDescriptor;
+} SE_ADT_ACCESS_REASON, *PSE_ADT_ACCESS_REASON;
+
+typedef struct _SE_ADT_PARAMETER_ARRAY {
+  ULONG CategoryId;
+  ULONG AuditId;
+  ULONG ParameterCount;
+  ULONG Length;
+  USHORT FlatSubCategoryId;
+  USHORT Type;
+  ULONG Flags;
+  SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[ SE_MAX_AUDIT_PARAMETERS ];
+} SE_ADT_PARAMETER_ARRAY, *PSE_ADT_PARAMETER_ARRAY;
+
+#endif /* !_NTLSA_AUDIT_ */
+#endif /* !_NTLSA_IFS_ */
+$endif
+
diff --git a/reactos/include/xdk/wdm.template.h b/reactos/include/xdk/wdm.template.h
new file mode 100644 (file)
index 0000000..1005bf1
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+ * wdm.h
+ *
+ * Windows NT WDM Driver Developer Kit
+ *
+ * This file is part of the ReactOS DDK package.
+ *
+ * Contributors:
+ *   Amine Khaldi
+ *   Timo Kreuzer (timo.kreuzer@reactos.org)
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#pragma once
+
+#ifndef _WDMDDK_
+#define _WDMDDK_
+
+/* Included via ntddk.h? */
+#ifndef _NTDDK_
+#define _NTDDK_
+#define _WDM_INCLUDED_
+#define _DDK_DRIVER_
+#define NO_INTERLOCKED_INTRINSICS
+#endif /* _NTDDK_ */
+
+/* Dependencies */
+#define NT_INCLUDED
+#include <excpt.h>
+#include <ntdef.h>
+#include <ntstatus.h>
+#include <ntiologc.h>
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifdef _MAC
+#ifndef _INC_STRING
+#include <string.h>
+#endif /* _INC_STRING */
+#else
+#include <string.h>
+#endif /* _MAC */
+
+#ifndef _KTMTYPES_
+typedef GUID UOW, *PUOW;
+#endif
+
+typedef GUID *PGUID;
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+#include <dpfilter.h>
+#endif
+
+#include "intrin.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(_NTHALDLL_) && !defined(_BLDR_)
+#define NTHALAPI DECLSPEC_IMPORT
+#else
+#define NTHALAPI
+#endif
+
+/* For ReactOS */
+#if !defined(_NTOSKRNL_) && !defined(_BLDR_)
+#define NTKERNELAPI DECLSPEC_IMPORT
+#else
+#define NTKERNELAPI
+#endif
+
+#if defined(_X86_) && !defined(_NTHAL_)
+#define _DECL_HAL_KE_IMPORT  DECLSPEC_IMPORT
+#elif defined(_X86_)
+#define _DECL_HAL_KE_IMPORT
+#else
+#define _DECL_HAL_KE_IMPORT NTKERNELAPI
+#endif
+
+#if defined(_WIN64)
+#define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
+#else
+#define POINTER_ALIGNMENT
+#endif
+
+/* Helper macro to enable gcc's extension.  */
+#ifndef __GNU_EXTENSION
+#ifdef __GNUC__
+#define __GNU_EXTENSION __extension__
+#else
+#define __GNU_EXTENSION
+#endif
+#endif
+
+#if defined(_MSC_VER)
+
+/* Disable some warnings */
+#pragma warning(disable:4115) /* Named type definition in parentheses */
+#pragma warning(disable:4201) /* Nameless unions and structs */
+#pragma warning(disable:4214) /* Bit fields of other types than int */
+#pragma warning(disable:4820) /* Padding added, due to alignemnet requirement */
+
+/* Indicate if #pragma alloc_text() is supported */
+#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)
+#define ALLOC_PRAGMA 1
+#endif
+
+/* Indicate if #pragma data_seg() is supported */
+#if defined(_M_IX86) || defined(_M_AMD64)
+#define ALLOC_DATA_PRAGMA 1
+#endif
+
+#endif
+
+/* Forward declarations */
+struct _IRP;
+struct _MDL;
+struct _KAPC;
+struct _KDPC;
+struct _FILE_OBJECT;
+struct _DMA_ADAPTER;
+struct _DEVICE_OBJECT;
+struct _DRIVER_OBJECT;
+struct _IO_STATUS_BLOCK;
+struct _DEVICE_DESCRIPTION;
+struct _SCATTER_GATHER_LIST;
+struct _DRIVE_LAYOUT_INFORMATION;
+struct _COMPRESSED_DATA_INFO;
+struct _IO_RESOURCE_DESCRIPTOR;
+
+/* Structures not exposed to drivers */
+typedef struct _OBJECT_TYPE *POBJECT_TYPE;
+typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE;
+typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE;
+typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
+typedef struct _EPROCESS *PEPROCESS;
+typedef struct _ETHREAD *PETHREAD;
+typedef struct _IO_TIMER *PIO_TIMER;
+typedef struct _KINTERRUPT *PKINTERRUPT;
+typedef struct _KPROCESS *PKPROCESS;
+typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
+typedef struct _CONTEXT *PCONTEXT;
+
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && ( defined(_NTDDK_) || defined(_NTDRIVER_) || defined(_NTOSP_))
+typedef struct _DMA_ADAPTER *PADAPTER_OBJECT;
+#elif defined(_WDM_INCLUDED_)
+typedef struct _DMA_ADAPTER *PADAPTER_OBJECT;
+#else
+typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; 
+#endif
+
+#ifndef DEFINE_GUIDEX
+#ifdef _MSC_VER
+#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
+#else
+#define DEFINE_GUIDEX(name) EXTERN_C const GUID name
+#endif
+#endif /* DEFINE_GUIDEX */
+
+#ifndef STATICGUIDOF
+#define STATICGUIDOF(guid) STATIC_##guid
+#endif
+
+/* GUID Comparison */
+#ifndef __IID_ALIGNED__
+#define __IID_ALIGNED__
+#ifdef __cplusplus
+inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
+{
+    return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && 
+             (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)) );
+}
+#else
+#define IsEqualGUIDAligned(guid1, guid2) \
+           ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
+             (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
+#endif /* __cplusplus */
+#endif /* !__IID_ALIGNED__ */
+
+
+$define (_WDMDDK_)
+$include (interlocked.h)
+$include (rtltypes.h)
+$include (ketypes.h)
+$include (mmtypes.h)
+$include (extypes.h)
+$include (setypes.h)
+$include (potypes.h)
+$include (cmtypes.h)
+$include (iotypes.h)
+$include (obtypes.h)
+$include (pstypes.h)
+$include (wmitypes.h)
+
+#if defined(_M_IX86)
+$include(x86/ke.h)
+#elif defined(_M_AMD64)
+$include(amd64/ke.h)
+#elif defined(_M_IA64)
+$include(ia64/ke.h)
+#elif defined(_M_PPC)
+$include(ppc/ke.h)
+#elif defined(_M_MIPS)
+$include(mips/ke.h)
+#elif defined(_M_ARM)
+$include(arm/ke.h)
+#else
+#error Unknown Architecture
+#endif
+
+$include (rtlfuncs.h)
+$include (kefuncs.h)
+$include (mmfuncs.h)
+$include (sefuncs.h)
+$include (cmfuncs.h)
+$include (iofuncs.h)
+$include (pofuncs.h)
+$include (exfuncs.h)
+$include (obfuncs.h)
+$include (psfuncs.h)
+$include (wmifuncs.h)
+$include (kdfuncs.h)
+$include (halfuncs.h)
+$include (nttmapi.h)
+$include (zwfuncs.h)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_WDMDDK_ */
diff --git a/reactos/include/xdk/wmifuncs.h b/reactos/include/xdk/wmifuncs.h
new file mode 100644 (file)
index 0000000..6279a55
--- /dev/null
@@ -0,0 +1,152 @@
+/******************************************************************************
+ *                          WMI Library Support Functions                     *
+ ******************************************************************************/
+
+#ifdef RUN_WPP
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+NTSTATUS
+__cdecl
+WmiTraceMessage(
+  IN TRACEHANDLE LoggerHandle,
+  IN ULONG MessageFlags,
+  IN LPGUID MessageGuid,
+  IN USHORT MessageNumber,
+  IN ...);
+#endif
+#endif /* RUN_WPP */
+
+ #if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+WmiQueryTraceInformation(
+  IN TRACE_INFORMATION_CLASS TraceInformationClass,
+  OUT PVOID TraceInformation,
+  IN ULONG TraceInformationLength,
+  OUT PULONG RequiredLength OPTIONAL,
+  IN PVOID Buffer OPTIONAL);
+
+#if 0
+/* FIXME: Get va_list from where? */
+NTKERNELAPI
+NTSTATUS
+__cdecl
+WmiTraceMessageVa(
+  IN TRACEHANDLE LoggerHandle,
+  IN ULONG MessageFlags,
+  IN LPGUID MessageGuid,
+  IN USHORT MessageNumber,
+  IN va_list MessageArgList);
+#endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#ifndef TRACE_INFORMATION_CLASS_DEFINE
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+WmiQueryTraceInformation(
+  IN TRACE_INFORMATION_CLASS TraceInformationClass,
+  OUT PVOID TraceInformation,
+  IN ULONG TraceInformationLength,
+  OUT PULONG RequiredLength OPTIONAL,
+  IN PVOID Buffer OPTIONAL);
+#endif
+
+#define TRACE_INFORMATION_CLASS_DEFINE
+
+#endif /* TRACE_INFOPRMATION_CLASS_DEFINE */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTSTATUS
+NTKERNELAPI
+NTAPI
+EtwRegister(
+  IN LPCGUID ProviderId,
+  IN PETWENABLECALLBACK EnableCallback OPTIONAL,
+  IN PVOID CallbackContext OPTIONAL,
+  OUT PREGHANDLE RegHandle);
+
+NTSTATUS
+NTKERNELAPI
+NTAPI
+EtwUnregister(
+  IN REGHANDLE RegHandle);
+
+BOOLEAN
+NTKERNELAPI
+NTAPI
+EtwEventEnabled(
+  IN REGHANDLE RegHandle,
+  IN PCEVENT_DESCRIPTOR EventDescriptor);
+
+BOOLEAN
+NTKERNELAPI
+NTAPI
+EtwProviderEnabled(
+  IN REGHANDLE RegHandle,
+  IN UCHAR Level,
+  IN ULONGLONG Keyword);
+
+NTSTATUS
+NTKERNELAPI
+NTAPI
+EtwActivityIdControl(
+  IN ULONG ControlCode,
+  IN OUT LPGUID ActivityId);
+
+NTSTATUS
+NTKERNELAPI
+NTAPI
+EtwWrite(
+  IN REGHANDLE RegHandle,
+  IN PCEVENT_DESCRIPTOR EventDescriptor,
+  IN LPCGUID ActivityId OPTIONAL,
+  IN ULONG UserDataCount,
+  IN PEVENT_DATA_DESCRIPTOR  UserData OPTIONAL);
+
+NTSTATUS
+NTKERNELAPI
+NTAPI
+EtwWriteTransfer(
+  IN REGHANDLE RegHandle,
+  IN PCEVENT_DESCRIPTOR EventDescriptor,
+  IN LPCGUID ActivityId OPTIONAL,
+  IN LPCGUID RelatedActivityId OPTIONAL,
+  IN ULONG UserDataCount,
+  IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
+
+NTSTATUS
+NTKERNELAPI
+NTAPI
+EtwWriteString(
+  IN REGHANDLE RegHandle,
+  IN UCHAR Level,
+  IN ULONGLONG Keyword,
+  IN LPCGUID ActivityId OPTIONAL,
+  IN PCWSTR String);
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+NTSTATUS
+NTKERNELAPI
+NTAPI
+EtwWriteEx(
+  IN REGHANDLE RegHandle,
+  IN PCEVENT_DESCRIPTOR EventDescriptor,
+  IN ULONG64 Filter,
+  IN ULONG Flags,
+  IN LPCGUID ActivityId OPTIONAL,
+  IN LPCGUID RelatedActivityId OPTIONAL,
+  IN ULONG UserDataCount,
+  IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
+#endif
+
+
+
diff --git a/reactos/include/xdk/wmitypes.h b/reactos/include/xdk/wmitypes.h
new file mode 100644 (file)
index 0000000..c4fd0ba
--- /dev/null
@@ -0,0 +1,62 @@
+/******************************************************************************
+ *                          WMI Library Support Types                         *
+ ******************************************************************************/
+
+#ifdef RUN_WPP
+#include <evntrace.h>
+#include <stdarg.h>
+#endif
+
+#ifndef _TRACEHANDLE_DEFINED
+#define _TRACEHANDLE_DEFINED
+typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
+#endif
+
+#ifndef TRACE_INFORMATION_CLASS_DEFINE
+
+typedef struct _ETW_TRACE_SESSION_SETTINGS {
+  ULONG Version;
+  ULONG BufferSize;
+  ULONG MinimumBuffers;
+  ULONG MaximumBuffers;
+  ULONG LoggerMode;
+  ULONG FlushTimer;
+  ULONG FlushThreshold;
+  ULONG ClockType;
+} ETW_TRACE_SESSION_SETTINGS, *PETW_TRACE_SESSION_SETTINGS;
+
+typedef enum _TRACE_INFORMATION_CLASS {
+  TraceIdClass,
+  TraceHandleClass,
+  TraceEnableFlagsClass,
+  TraceEnableLevelClass,
+  GlobalLoggerHandleClass,
+  EventLoggerHandleClass,
+  AllLoggerHandlesClass,
+  TraceHandleByNameClass,
+  LoggerEventsLostClass,
+  TraceSessionSettingsClass,
+  LoggerEventsLoggedClass,
+  MaxTraceInformationClass
+} TRACE_INFORMATION_CLASS;
+
+#endif /* TRACE_INFORMATION_CLASS_DEFINE */
+
+#ifndef _ETW_KM_
+#define _ETW_KM_
+#endif
+
+#include <evntprov.h>
+
+typedef VOID
+(NTAPI *PETWENABLECALLBACK)(
+  IN LPCGUID SourceId,
+  IN ULONG ControlCode,
+  IN UCHAR Level,
+  IN ULONGLONG MatchAnyKeyword,
+  IN ULONGLONG MatchAllKeyword,
+  IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL,
+  IN OUT PVOID CallbackContext OPTIONAL);
+
+#define EVENT_WRITE_FLAG_NO_FAULTING             0x00000001
+
diff --git a/reactos/include/xdk/x86/ke.h b/reactos/include/xdk/x86/ke.h
new file mode 100644 (file)
index 0000000..19d4274
--- /dev/null
@@ -0,0 +1,288 @@
+$if (_WDMDDK_)
+/** Kernel definitions for x86 **/
+
+/* Interrupt request levels */
+#define PASSIVE_LEVEL           0
+#define LOW_LEVEL               0
+#define APC_LEVEL               1
+#define DISPATCH_LEVEL          2
+#define CMCI_LEVEL              5
+#define PROFILE_LEVEL           27
+#define CLOCK1_LEVEL            28
+#define CLOCK2_LEVEL            28
+#define IPI_LEVEL               29
+#define POWER_LEVEL             30
+#define HIGH_LEVEL              31
+#define CLOCK_LEVEL             CLOCK2_LEVEL
+
+#define KIP0PCRADDRESS          0xffdff000
+#define KI_USER_SHARED_DATA     0xffdf0000
+#define SharedUserData          ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
+
+#define PAGE_SIZE               0x1000
+#define PAGE_SHIFT              12L
+#define KeGetDcacheFillSize()   1L
+
+#define EFLAG_SIGN              0x8000
+#define EFLAG_ZERO              0x4000
+#define EFLAG_SELECT            (EFLAG_SIGN | EFLAG_ZERO)
+
+#define RESULT_NEGATIVE         ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+#define RESULT_ZERO             ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
+#define RESULT_POSITIVE         ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+
+
+typedef struct _KFLOATING_SAVE {
+  ULONG ControlWord;
+  ULONG StatusWord;
+  ULONG ErrorOffset;
+  ULONG ErrorSelector;
+  ULONG DataOffset;
+  ULONG DataSelector;
+  ULONG Cr0NpxState;
+  ULONG Spare1;
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
+
+extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
+
+#define YieldProcessor _mm_pause
+
+FORCEINLINE
+VOID
+KeMemoryBarrier(VOID)
+{
+  volatile LONG Barrier;
+#if defined(__GNUC__)
+  __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
+#elif defined(_MSC_VER)
+  __asm xchg [Barrier], eax
+#endif
+}
+
+NTHALAPI
+KIRQL
+NTAPI
+KeGetCurrentIrql(VOID);
+
+NTHALAPI
+VOID
+FASTCALL
+KfLowerIrql(
+  IN KIRQL NewIrql);
+#define KeLowerIrql(a) KfLowerIrql(a)
+
+NTHALAPI
+KIRQL
+FASTCALL
+KfRaiseIrql(
+  IN KIRQL NewIrql);
+#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+
+NTHALAPI
+KIRQL
+NTAPI
+KeRaiseIrqlToDpcLevel(VOID);
+
+NTHALAPI
+KIRQL
+NTAPI
+KeRaiseIrqlToSynchLevel(VOID);
+
+NTHALAPI
+KIRQL
+FASTCALL
+KfAcquireSpinLock(
+  IN OUT PKSPIN_LOCK SpinLock);
+#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
+
+NTHALAPI
+VOID
+FASTCALL
+KfReleaseSpinLock(
+  IN OUT PKSPIN_LOCK SpinLock,
+  IN KIRQL NewIrql);
+#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
+
+NTKERNELAPI
+VOID
+FASTCALL
+KefAcquireSpinLockAtDpcLevel(
+  IN OUT PKSPIN_LOCK SpinLock);
+#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
+
+NTKERNELAPI
+VOID
+FASTCALL
+KefReleaseSpinLockFromDpcLevel(
+  IN OUT PKSPIN_LOCK SpinLock);
+#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
+
+NTSYSAPI
+PKTHREAD
+NTAPI
+KeGetCurrentThread(VOID);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeSaveFloatingPointState(
+  OUT PKFLOATING_SAVE FloatSave);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeRestoreFloatingPointState(
+  IN PKFLOATING_SAVE FloatSave);
+
+/* VOID
+ * KeFlushIoBuffers(
+ *   IN PMDL Mdl,
+ *   IN BOOLEAN ReadOperation,
+ *   IN BOOLEAN DmaOperation)
+ */
+#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
+
+/* x86 and x64 performs a 0x2C interrupt */
+#define DbgRaiseAssertionFailure __int2c
+
+FORCEINLINE
+VOID
+_KeQueryTickCount(
+  OUT PLARGE_INTEGER CurrentCount)
+{
+  for (;;) {
+    CurrentCount->HighPart = KeTickCount.High1Time;
+    CurrentCount->LowPart = KeTickCount.LowPart;
+    if (CurrentCount->HighPart == KeTickCount.High2Time) break;
+    YieldProcessor();
+  }
+}
+#define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+#define PAUSE_PROCESSOR YieldProcessor();
+
+#define KERNEL_STACK_SIZE                   12288
+#define KERNEL_LARGE_STACK_SIZE             61440
+#define KERNEL_LARGE_STACK_COMMIT           12288
+
+#define SIZE_OF_80387_REGISTERS   80
+
+#if !defined(RC_INVOKED)
+
+#define CONTEXT_i386               0x10000
+#define CONTEXT_i486               0x10000
+#define CONTEXT_CONTROL            (CONTEXT_i386|0x00000001L)
+#define CONTEXT_INTEGER            (CONTEXT_i386|0x00000002L)
+#define CONTEXT_SEGMENTS           (CONTEXT_i386|0x00000004L)
+#define CONTEXT_FLOATING_POINT     (CONTEXT_i386|0x00000008L)
+#define CONTEXT_DEBUG_REGISTERS    (CONTEXT_i386|0x00000010L)
+#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS |  \
+                     CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS |      \
+                     CONTEXT_EXTENDED_REGISTERS)
+
+#define CONTEXT_XSTATE          (CONTEXT_i386 | 0x00000040L)
+
+#endif /* !defined(RC_INVOKED) */
+
+typedef struct _FLOATING_SAVE_AREA {
+  ULONG ControlWord;
+  ULONG StatusWord;
+  ULONG TagWord;
+  ULONG ErrorOffset;
+  ULONG ErrorSelector;
+  ULONG DataOffset;
+  ULONG DataSelector;
+  UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
+  ULONG Cr0NpxState;
+} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
+
+#include "pshpack4.h"
+typedef struct _CONTEXT {
+  ULONG ContextFlags;
+  ULONG Dr0;
+  ULONG Dr1;
+  ULONG Dr2;
+  ULONG Dr3;
+  ULONG Dr6;
+  ULONG Dr7;
+  FLOATING_SAVE_AREA FloatSave;
+  ULONG SegGs;
+  ULONG SegFs;
+  ULONG SegEs;
+  ULONG SegDs;
+  ULONG Edi;
+  ULONG Esi;
+  ULONG Ebx;
+  ULONG Edx;
+  ULONG Ecx;
+  ULONG Eax;
+  ULONG Ebp;
+  ULONG Eip;
+  ULONG SegCs;
+  ULONG EFlags;
+  ULONG Esp;
+  ULONG SegSs;
+  UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
+} CONTEXT;
+#include "poppack.h"
+
+#define KeGetPcr()                      PCR
+
+#define PCR_MINOR_VERSION 1
+#define PCR_MAJOR_VERSION 1
+
+typedef struct _KPCR {
+  union {
+    NT_TIB NtTib;
+    struct {
+      struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
+      PVOID Used_StackBase;
+      PVOID Spare2;
+      PVOID TssCopy;
+      ULONG ContextSwitches;
+      KAFFINITY SetMemberCopy;
+      PVOID Used_Self;
+    };
+  };
+  struct _KPCR *SelfPcr;
+  struct _KPRCB *Prcb;
+  KIRQL Irql;
+  ULONG IRR;
+  ULONG IrrActive;
+  ULONG IDR;
+  PVOID KdVersionBlock;
+  struct _KIDTENTRY *IDT;
+  struct _KGDTENTRY *GDT;
+  struct _KTSS *TSS;
+  USHORT MajorVersion;
+  USHORT MinorVersion;
+  KAFFINITY SetMember;
+  ULONG StallScaleFactor;
+  UCHAR SpareUnused;
+  UCHAR Number;
+  UCHAR Spare0;
+  UCHAR SecondLevelCacheAssociativity;
+  ULONG VdmAlert;
+  ULONG KernelReserved[14];
+  ULONG SecondLevelCacheSize;
+  ULONG HalReserved[16];
+} KPCR, *PKPCR;
+
+FORCEINLINE
+ULONG
+KeGetCurrentProcessorNumber(VOID)
+{
+    return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number));
+}
+
+$endif /* _NTDDK_ */
+
+
+
+
diff --git a/reactos/include/xdk/x86/mm.h b/reactos/include/xdk/x86/mm.h
new file mode 100644 (file)
index 0000000..d2cddd1
--- /dev/null
@@ -0,0 +1,24 @@
+$if (_NTDDK_)
+
+extern NTKERNELAPI PVOID MmHighestUserAddress;
+extern NTKERNELAPI PVOID MmSystemRangeStart;
+extern NTKERNELAPI ULONG MmUserProbeAddress;
+
+#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
+#define MM_SYSTEM_RANGE_START MmSystemRangeStart
+#if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
+#define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
+extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_;
+#else
+#define MM_USER_PROBE_ADDRESS MmUserProbeAddress
+#endif
+#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
+#define MM_KSEG0_BASE       MM_SYSTEM_RANGE_START
+#define MM_SYSTEM_SPACE_END 0xFFFFFFFF
+#if !defined (_X86PAE_)
+#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
+#else
+#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
+#endif
+
+$endif /* _NTDDK_ */
diff --git a/reactos/include/xdk/zwfuncs.h b/reactos/include/xdk/zwfuncs.h
new file mode 100644 (file)
index 0000000..3299df5
--- /dev/null
@@ -0,0 +1,820 @@
+/******************************************************************************
+ *                            ZwXxx Functions                                 *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+
+/* Constants */
+#define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
+#define ZwCurrentProcess() NtCurrentProcess()
+#define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
+#define ZwCurrentThread() NtCurrentThread()
+
+$endif
+
+$if (_NTDDK_)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwAllocateLocallyUniqueId(
+  OUT PLUID Luid);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwTerminateProcess(
+  IN HANDLE ProcessHandle OPTIONAL,
+  IN NTSTATUS ExitStatus);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenProcess(
+  OUT PHANDLE ProcessHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN PCLIENT_ID ClientId OPTIONAL);
+
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+$if (_NTDDK_)
+
+NTSTATUS
+NTAPI
+ZwCancelTimer(
+  IN HANDLE TimerHandle,
+  OUT PBOOLEAN CurrentState OPTIONAL);
+
+NTSTATUS
+NTAPI
+ZwCreateTimer(
+  OUT PHANDLE TimerHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN TIMER_TYPE TimerType);
+
+NTSTATUS
+NTAPI
+ZwOpenTimer(
+  OUT PHANDLE TimerHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationThread(
+  IN HANDLE ThreadHandle,
+  IN THREADINFOCLASS ThreadInformationClass,
+  IN PVOID ThreadInformation,
+  IN ULONG ThreadInformationLength);
+
+NTSTATUS
+NTAPI
+ZwSetTimer(
+  IN HANDLE TimerHandle,
+  IN PLARGE_INTEGER DueTime,
+  IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL,
+  IN PVOID TimerContext OPTIONAL,
+  IN BOOLEAN ResumeTimer,
+  IN LONG Period OPTIONAL,
+  OUT PBOOLEAN PreviousState OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDisplayString(
+  IN PUNICODE_STRING String);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwPowerInformation(
+  IN POWER_INFORMATION_LEVEL PowerInformationLevel,
+  IN PVOID InputBuffer OPTIONAL,
+  IN ULONG InputBufferLength,
+  OUT PVOID OutputBuffer OPTIONAL,
+  IN ULONG OutputBufferLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryVolumeInformationFile(
+  IN HANDLE FileHandle,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  OUT PVOID FsInformation,
+  IN ULONG Length,
+  IN FS_INFORMATION_CLASS FsInformationClass);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeviceIoControlFile(
+  IN HANDLE FileHandle,
+  IN HANDLE Event OPTIONAL,
+  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+  IN PVOID ApcContext OPTIONAL,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN ULONG IoControlCode,
+  IN PVOID InputBuffer OPTIONAL,
+  IN ULONG InputBufferLength,
+  OUT PVOID OutputBuffer OPTIONAL,
+  IN ULONG OutputBufferLength);
+
+$endif
+
+$if (_WDMDDK_)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwClose(
+  IN HANDLE Handle);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCreateDirectoryObject(
+  OUT PHANDLE DirectoryHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCreateFile(
+  OUT PHANDLE FileHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN PLARGE_INTEGER AllocationSize OPTIONAL,
+  IN ULONG FileAttributes,
+  IN ULONG ShareAccess,
+  IN ULONG CreateDisposition,
+  IN ULONG CreateOptions,
+  IN PVOID EaBuffer OPTIONAL,
+  IN ULONG EaLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCreateKey(
+  OUT PHANDLE KeyHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN ULONG TitleIndex,
+  IN PUNICODE_STRING Class OPTIONAL,
+  IN ULONG CreateOptions,
+  OUT PULONG Disposition OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCreateSection(
+  OUT PHANDLE SectionHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN PLARGE_INTEGER MaximumSize OPTIONAL,
+  IN ULONG SectionPageProtection,
+  IN ULONG AllocationAttributes,
+  IN HANDLE FileHandle OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeleteKey(
+  IN HANDLE KeyHandle);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeleteValueKey(
+  IN HANDLE KeyHandle,
+  IN PUNICODE_STRING ValueName);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwEnumerateKey(
+  IN HANDLE KeyHandle,
+  IN ULONG Index,
+  IN KEY_INFORMATION_CLASS KeyInformationClass,
+  OUT PVOID KeyInformation OPTIONAL,
+  IN ULONG Length,
+  OUT PULONG ResultLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwEnumerateValueKey(
+  IN HANDLE KeyHandle,
+  IN ULONG Index,
+  IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+  OUT PVOID KeyValueInformation OPTIONAL,
+  IN ULONG Length,
+  OUT PULONG ResultLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwFlushKey(
+  IN HANDLE KeyHandle);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwLoadDriver(
+  IN PUNICODE_STRING DriverServiceName);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwMakeTemporaryObject(
+  IN HANDLE Handle);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwMapViewOfSection(
+  IN HANDLE SectionHandle,
+  IN HANDLE ProcessHandle,
+  IN OUT PVOID *BaseAddress,
+  IN ULONG_PTR ZeroBits,
+  IN SIZE_T CommitSize,
+  IN OUT PLARGE_INTEGER SectionOffset OPTIONAL,
+  IN OUT PSIZE_T ViewSize,
+  IN SECTION_INHERIT InheritDisposition,
+  IN ULONG AllocationType,
+  IN ULONG Protect);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenFile(
+  OUT PHANDLE FileHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN ULONG ShareAccess,
+  IN ULONG OpenOptions);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenKey(
+  OUT PHANDLE KeyHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenSection(
+  OUT PHANDLE SectionHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenSymbolicLinkObject(
+  OUT PHANDLE LinkHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationFile(
+  IN HANDLE FileHandle,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  OUT PVOID FileInformation,
+  IN ULONG Length,
+  IN FILE_INFORMATION_CLASS FileInformationClass);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryKey(
+  IN HANDLE KeyHandle,
+  IN KEY_INFORMATION_CLASS KeyInformationClass,
+  OUT PVOID KeyInformation OPTIONAL,
+  IN ULONG Length,
+  OUT PULONG ResultLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQuerySymbolicLinkObject(
+  IN HANDLE LinkHandle,
+  IN OUT PUNICODE_STRING LinkTarget,
+  OUT PULONG ReturnedLength OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryValueKey(
+  IN HANDLE KeyHandle,
+  IN PUNICODE_STRING ValueName,
+  IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+  OUT PVOID KeyValueInformation OPTIONAL,
+  IN ULONG Length,
+  OUT PULONG ResultLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwReadFile(
+  IN HANDLE FileHandle,
+  IN HANDLE Event OPTIONAL,
+  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+  IN PVOID ApcContext OPTIONAL,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  OUT PVOID Buffer,
+  IN ULONG Length,
+  IN PLARGE_INTEGER ByteOffset OPTIONAL,
+  IN PULONG Key OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationFile(
+  IN HANDLE FileHandle,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN PVOID FileInformation,
+  IN ULONG Length,
+  IN FILE_INFORMATION_CLASS FileInformationClass);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetValueKey(
+  IN HANDLE KeyHandle,
+  IN PUNICODE_STRING ValueName,
+  IN ULONG TitleIndex OPTIONAL,
+  IN ULONG Type,
+  IN PVOID Data OPTIONAL,
+  IN ULONG DataSize);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwUnloadDriver(
+  IN PUNICODE_STRING DriverServiceName);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwUnmapViewOfSection(
+  IN HANDLE ProcessHandle,
+  IN PVOID BaseAddress OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwWriteFile(
+  IN HANDLE FileHandle,
+  IN HANDLE Event OPTIONAL,
+  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+  IN PVOID ApcContext OPTIONAL,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN PVOID Buffer,
+  IN ULONG Length,
+  IN PLARGE_INTEGER ByteOffset OPTIONAL,
+  IN PULONG Key OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryFullAttributesFile(
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation);
+
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_WDMDDK_)
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwOpenEvent(
+  OUT PHANDLE EventHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTSYSAPI
+NTSTATUS
+ZwCreateKeyTransacted(
+  OUT PHANDLE KeyHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN ULONG TitleIndex,
+  IN PUNICODE_STRING Class OPTIONAL,
+  IN ULONG CreateOptions,
+  IN HANDLE TransactionHandle,
+  OUT PULONG Disposition OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenKeyTransacted(
+  OUT PHANDLE KeyHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN HANDLE TransactionHandle);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCreateTransactionManager(
+  OUT PHANDLE TmHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN PUNICODE_STRING LogFileName OPTIONAL,
+  IN ULONG CreateOptions OPTIONAL,
+  IN ULONG CommitStrength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwOpenTransactionManager(
+  OUT PHANDLE TmHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN PUNICODE_STRING LogFileName OPTIONAL,
+  IN LPGUID TmIdentity OPTIONAL,
+  IN ULONG OpenOptions OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRollforwardTransactionManager(
+  IN HANDLE TransactionManagerHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRecoverTransactionManager(
+  IN HANDLE TransactionManagerHandle);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationTransactionManager(
+  IN HANDLE TransactionManagerHandle,
+  IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
+  OUT PVOID TransactionManagerInformation,
+  IN ULONG TransactionManagerInformationLength,
+  OUT PULONG ReturnLength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwSetInformationTransactionManager(
+  IN HANDLE TmHandle,
+  IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
+  IN PVOID TransactionManagerInformation,
+  IN ULONG TransactionManagerInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwEnumerateTransactionObject(
+  IN HANDLE RootObjectHandle OPTIONAL,
+  IN KTMOBJECT_TYPE QueryType,
+  IN OUT PKTMOBJECT_CURSOR ObjectCursor,
+  IN ULONG ObjectCursorLength,
+  OUT PULONG ReturnLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCreateTransaction(
+  OUT PHANDLE TransactionHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN LPGUID Uow OPTIONAL,
+  IN HANDLE TmHandle OPTIONAL,
+  IN ULONG CreateOptions OPTIONAL,
+  IN ULONG IsolationLevel OPTIONAL,
+  IN ULONG IsolationFlags OPTIONAL,
+  IN PLARGE_INTEGER Timeout OPTIONAL,
+  IN PUNICODE_STRING Description OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwOpenTransaction(
+  OUT PHANDLE TransactionHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN LPGUID Uow,
+  IN HANDLE TmHandle OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationTransaction(
+  IN HANDLE TransactionHandle,
+  IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
+  OUT PVOID TransactionInformation,
+  IN ULONG TransactionInformationLength,
+  OUT PULONG ReturnLength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwSetInformationTransaction(
+  IN HANDLE TransactionHandle,
+  IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
+  IN PVOID TransactionInformation,
+  IN ULONG TransactionInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCommitTransaction(
+  IN HANDLE TransactionHandle,
+  IN BOOLEAN Wait);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRollbackTransaction(
+  IN HANDLE TransactionHandle,
+  IN BOOLEAN Wait);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCreateResourceManager(
+  OUT PHANDLE ResourceManagerHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN HANDLE TmHandle,
+  IN LPGUID ResourceManagerGuid OPTIONAL,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN ULONG CreateOptions OPTIONAL,
+  IN PUNICODE_STRING Description OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwOpenResourceManager(
+  OUT PHANDLE ResourceManagerHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN HANDLE TmHandle,
+  IN LPGUID ResourceManagerGuid,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRecoverResourceManager(
+  IN HANDLE ResourceManagerHandle);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwGetNotificationResourceManager(
+  IN HANDLE ResourceManagerHandle,
+  OUT PTRANSACTION_NOTIFICATION TransactionNotification,
+  IN ULONG NotificationLength,
+  IN PLARGE_INTEGER Timeout,
+  IN PULONG ReturnLength OPTIONAL,
+  IN ULONG Asynchronous,
+  IN ULONG_PTR AsynchronousContext OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationResourceManager(
+  IN HANDLE ResourceManagerHandle,
+  IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
+  OUT PVOID ResourceManagerInformation,
+  IN ULONG ResourceManagerInformationLength,
+  IN PULONG ReturnLength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwSetInformationResourceManager(
+  IN HANDLE ResourceManagerHandle,
+  IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
+  IN PVOID ResourceManagerInformation,
+  IN ULONG ResourceManagerInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCreateEnlistment(
+  OUT PHANDLE EnlistmentHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN HANDLE ResourceManagerHandle,
+  IN HANDLE TransactionHandle,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+  IN ULONG CreateOptions OPTIONAL,
+  IN NOTIFICATION_MASK NotificationMask,
+  IN PVOID EnlistmentKey OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwOpenEnlistment(
+  OUT PHANDLE EnlistmentHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN HANDLE RmHandle,
+  IN LPGUID EnlistmentGuid,
+  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
+  OUT PVOID EnlistmentInformation,
+  IN ULONG EnlistmentInformationLength,
+  IN PULONG ReturnLength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwSetInformationEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
+  IN PVOID EnlistmentInformation,
+  IN ULONG EnlistmentInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRecoverEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PVOID EnlistmentKey OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwPrePrepareEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwPrepareEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCommitEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRollbackEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwPrePrepareComplete(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwPrepareComplete(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCommitComplete(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwReadOnlyEnlistment(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRollbackComplete(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwSinglePhaseReject(
+  IN HANDLE EnlistmentHandle,
+  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+$if (_NTDDK_)
+NTSTATUS
+NTAPI
+ZwSetTimerEx(
+  IN HANDLE TimerHandle,
+  IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass,
+  IN OUT PVOID TimerSetInformation,
+  IN ULONG TimerSetInformationLength);
+$endif
+
+$if (_WDMDDK_)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenKeyEx(
+  OUT PHANDLE KeyHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN ULONG OpenOptions);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenKeyTransactedEx(
+  OUT PHANDLE KeyHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN ULONG OpenOptions,
+  IN HANDLE TransactionHandle);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwNotifyChangeMultipleKeys(
+  IN HANDLE MasterKeyHandle,
+  IN ULONG Count OPTIONAL,
+  IN OBJECT_ATTRIBUTES SubordinateObjects[] OPTIONAL,
+  IN HANDLE Event OPTIONAL,
+  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+  IN PVOID ApcContext OPTIONAL,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN ULONG CompletionFilter,
+  IN BOOLEAN WatchTree,
+  OUT PVOID Buffer OPTIONAL,
+  IN ULONG BufferSize,
+  IN BOOLEAN Asynchronous);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryMultipleValueKey(
+  IN HANDLE KeyHandle,
+  IN OUT PKEY_VALUE_ENTRY ValueEntries,
+  IN ULONG EntryCount,
+  OUT PVOID ValueBuffer,
+  IN OUT PULONG BufferLength,
+  OUT PULONG RequiredBufferLength OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwRenameKey(
+  IN HANDLE KeyHandle,
+  IN PUNICODE_STRING NewName);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationKey(
+  IN HANDLE KeyHandle,
+  IN KEY_SET_INFORMATION_CLASS KeySetInformationClass,
+  IN PVOID KeySetInformation,
+  IN ULONG KeySetInformationLength);
+
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
index 7f5dc35..bc2517d 100644 (file)
Binary files a/reactos/media/inf/cpu.inf and b/reactos/media/inf/cpu.inf differ
index 37da97e..97dfc1a 100644 (file)
@@ -70,14 +70,13 @@ CmpFreeKeyControlBlock(IN PCM_KEY_CONTROL_BLOCK Kcb)
     KeAcquireGuardedMutex(&CmpAllocBucketLock);
     
     /* Sanity check on lock ownership */
-    //ASSERT((CmpIsKcbLockedExclusive(Kcb) == TRUE) ||
-    //       (CmpTestRegistryLockExclusive() == TRUE));
+    CMP_ASSERT_HASH_ENTRY_LOCK(Kcb->ConvKey);
     
     /* Add us to the free list */
     InsertTailList(&CmpFreeKCBListHead, &Kcb->FreeListEntry);
     
     /* Get the allocation page */
-    AllocPage = (PCM_ALLOC_PAGE)((ULONG_PTR)Kcb & 0xFFFFF000);
+    AllocPage = CmpGetAllocPageFromKcb(Kcb);
     
     /* Sanity check */
     ASSERT(AllocPage->FreeCount != CM_KCBS_PER_PAGE);
@@ -134,7 +133,7 @@ SearchKcbList:
                                            FreeListEntry);
             
             /* Get the allocation page */
-            AllocPage = (PCM_ALLOC_PAGE)((ULONG_PTR)CurrentKcb & 0xFFFFF000);
+            AllocPage = CmpGetAllocPageFromKcb(CurrentKcb);
             
             /* Decrease the free count */
             ASSERT(AllocPage->FreeCount != 0);
@@ -168,7 +167,7 @@ SearchKcbList:
                 /* Set it up */
                 CurrentKcb->PrivateAlloc = TRUE;
                 CurrentKcb->DelayCloseEntry = NULL;
-                InsertHeadList(&CmpFreeKCBListHead,
+                InsertTailList(&CmpFreeKCBListHead,
                                &CurrentKcb->FreeListEntry);
             }
             
@@ -178,9 +177,7 @@ SearchKcbList:
     }
 
     /* Allocate a KCB only */
-    CurrentKcb = CmpAllocate(sizeof(CM_KEY_CONTROL_BLOCK),
-                             TRUE,
-                             TAG_CM);
+    CurrentKcb = CmpAllocate(sizeof(CM_KEY_CONTROL_BLOCK), TRUE, TAG_CM);
     if (CurrentKcb)
     {
         /* Set it up */
@@ -219,7 +216,7 @@ SearchList:
         Entry->ListEntry.Flink = Entry->ListEntry.Blink = NULL;
         
         /* Grab the alloc page */
-        AllocPage = (PCM_ALLOC_PAGE)((ULONG_PTR)Entry & 0xFFFFF000);
+        AllocPage = CmpGetAllocPageFromDelayAlloc(Entry);
         
         /* Decrease free entries */
         ASSERT(AllocPage->FreeCount != 0);
@@ -278,7 +275,7 @@ CmpFreeDelayItem(PVOID Entry)
     InsertTailList(&CmpFreeDelayItemsListHead, &AllocEntry->ListEntry);
     
     /* Get the alloc page */
-    AllocPage = (PCM_ALLOC_PAGE)((ULONG_PTR)Entry & 0xFFFFF000);
+    AllocPage = CmpGetAllocPageFromDelayAlloc(Entry);
     ASSERT(AllocPage->FreeCount != CM_DELAYS_PER_PAGE);
     
     /* Increase the number of free items */
index ed3f3bf..581a336 100644 (file)
@@ -254,3 +254,25 @@ CmpConvertKcbSharedToExclusive(IN PCM_KEY_CONTROL_BLOCK k)
     ExReleasePushLock(&GET_HASH_ENTRY(CmpNameCacheTable,            \
                                       (k)).Lock);                   \
 }
+
+//
+// Asserts that either the registry or the KCB is locked
+//
+#define CMP_ASSERT_HASH_ENTRY_LOCK(k)                               \
+{                                                                   \
+    ASSERT(((GET_HASH_ENTRY(CmpCacheTable, k).Owner ==              \
+            KeGetCurrentThread())) ||                               \
+           (CmpTestRegistryLockExclusive() == TRUE));               \
+}
+
+//
+// Gets the page attached to the KCB
+//
+#define CmpGetAllocPageFromKcb(k)                                   \
+    (PCM_ALLOC_PAGE)(((ULONG_PTR)(k)) & ~(PAGE_SIZE - 1))
+
+//
+// Gets the page attached to the delayed allocation
+//
+#define CmpGetAllocPageFromDelayAlloc(a)                            \
+    (PCM_ALLOC_PAGE)(((ULONG_PTR)(a)) & ~(PAGE_SIZE - 1))
index e634637..9cd6347 100644 (file)
@@ -1847,6 +1847,7 @@ IopActionConfigureChildServices(PDEVICE_NODE DeviceNode,
    PUNICODE_STRING Service;
    UNICODE_STRING ClassGUID;
    NTSTATUS Status;
+   DEVICE_CAPABILITIES DeviceCaps;
 
    DPRINT("IopActionConfigureChildServices(%p, %p)\n", DeviceNode, Context);
 
@@ -1920,9 +1921,22 @@ IopActionConfigureChildServices(PDEVICE_NODE DeviceNode,
 
       if (Service->Buffer == NULL)
       {
-         IopDeviceNodeSetFlag(DeviceNode, DNF_DISABLED);
+         if (NT_SUCCESS(IopQueryDeviceCapabilities(DeviceNode, &DeviceCaps)) &&
+             DeviceCaps.RawDeviceOK)
+         {
+            DPRINT1("%wZ is using parent bus driver (%wZ)\n", &DeviceNode->InstancePath, &ParentDeviceNode->ServiceName);
+
+            DeviceNode->ServiceName.Length = 0;
+            DeviceNode->ServiceName.MaximumLength = ParentDeviceNode->ServiceName.MaximumLength;
+            DeviceNode->ServiceName.Buffer = ExAllocatePool(PagedPool, DeviceNode->ServiceName.MaximumLength);
+            if (!DeviceNode->ServiceName.Buffer)
+                return STATUS_SUCCESS;
 
-         if (ClassGUID.Length != 0)
+            RtlCopyUnicodeString(&DeviceNode->ServiceName, &ParentDeviceNode->ServiceName);
+
+            IopDeviceNodeSetFlag(DeviceNode, DNF_LEGACY_DRIVER);
+         }
+         else if (ClassGUID.Length != 0)
          {
             /* Device has a ClassGUID value, but no Service value.
              * Suppose it is using the NULL driver, so state the
@@ -1930,6 +1944,10 @@ IopActionConfigureChildServices(PDEVICE_NODE DeviceNode,
             DPRINT1("%wZ is using NULL driver\n", &DeviceNode->InstancePath);
             IopDeviceNodeSetFlag(DeviceNode, DNF_STARTED);
          }
+         else
+         {
+            IopDeviceNodeSetFlag(DeviceNode, DNF_DISABLED);
+         }
          return STATUS_SUCCESS;
       }
 
index 0cd9740..8417f27 100644 (file)
@@ -157,6 +157,8 @@ PopAddRemoveSysCapsCallback(IN PVOID NotificationStructure,
        BOOLEAN Arrival;
        ULONG Caps;
        NTSTATUS Status;
+       UNICODE_STRING DeviceName;
+       UNICODE_STRING DeviceNamePrefix = RTL_CONSTANT_STRING(L"\\??\\");
 
        DPRINT("PopAddRemoveSysCapsCallback(%p %p)\n",
                NotificationStructure, Context);
@@ -177,10 +179,20 @@ PopAddRemoveSysCapsCallback(IN PVOID NotificationStructure,
        {
                DPRINT("Arrival of %wZ\n", Notification->SymbolicLinkName);
 
+               DeviceName.Length = 0;
+               DeviceName.MaximumLength = Notification->SymbolicLinkName->MaximumLength + DeviceNamePrefix.MaximumLength;
+               DeviceName.Buffer = ExAllocatePool(PagedPool, DeviceName.MaximumLength);
+               if (!DeviceName.Buffer) return STATUS_INSUFFICIENT_RESOURCES;
+
+               RtlCopyUnicodeString(&DeviceName, &DeviceNamePrefix);
+               RtlAppendUnicodeStringToString(&DeviceName, Notification->SymbolicLinkName);
+
+               DPRINT("Opening handle to %wZ\n", &DeviceName);
+
                /* Open the device */
                InitializeObjectAttributes(
                        &ObjectAttributes,
-                       Notification->SymbolicLinkName,
+                       &DeviceName,
                        OBJ_KERNEL_HANDLE,
                        NULL,
                        NULL);
index eb163b6..e8d37b8 100644 (file)
@@ -138,7 +138,7 @@ PoInitSystem(IN ULONG BootPhase)
     {
         /* Registry power button notification */
         IoRegisterPlugPlayNotification(EventCategoryDeviceInterfaceChange,
-                                       0, /* The registry has not been initialized yet */
+                                       PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES,
                                        (PVOID)&GUID_DEVICE_SYS_BUTTON,
                                        IopRootDeviceNode->
                                        PhysicalDeviceObject->DriverObject,
index 44481d6..8f73312 100644 (file)
@@ -1347,6 +1347,14 @@ NtQueryInformationToken(IN HANDLE TokenHandle,
                 PSECURITY_IMPERSONATION_LEVEL sil = (PSECURITY_IMPERSONATION_LEVEL)TokenInformation;
                 
                 DPRINT("NtQueryInformationToken(TokenImpersonationLevel)\n");
+
+                /* Fail if the token is not an impersonation token */
+                if (Token->TokenType != TokenImpersonation)
+                {
+                    Status = STATUS_INVALID_INFO_CLASS;
+                    break;
+                }
+
                 RequiredLength = sizeof(SECURITY_IMPERSONATION_LEVEL);
                 
                 _SEH2_TRY
index 64e61fe..a92652b 100644 (file)
@@ -1,14 +1,11 @@
 <?xml version="1.0"?>
 <!DOCTYPE group SYSTEM "../tools/rbuild/project.dtd">
 <group xmlns:xi="http://www.w3.org/2001/XInclude">
-       <if property="USERMODE" value="1">
-               <if property="ARCH" value="i386">
+       <if property="ARCH" value="i386">
                        <directory name="ntvdm">
                        <xi:include href="ntvdm/ntvdm.rbuild" />
                        </directory>
-               </if>
        </if>
-
 <directory name="win32">
        <xi:include href="win32/win32.rbuild" />
 </directory>
index bbc36ff..b958ad4 100644 (file)
@@ -66,14 +66,34 @@ ULONG
 FASTCALL
 GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
 {
+  BOOL Hit = FALSE;
+  ULONG Cmd = 0, Size = 0;
   PDC_ATTR pdcattr = NULL;
 
   if (dc)
   {
-    pdcattr = dc->pdcattr;
+     pdcattr = dc->pdcattr;
   }
+
+  _SEH2_TRY
+  {
+     Cmd = pHdr->Cmd;
+     Size = pHdr->Size; // Return the full size of the structure.
+  }
+  _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+  {
+     Hit = TRUE;
+  }
+  _SEH2_END;
+
+  if (Hit)
+  {
+     DPRINT1("WARNING! GdiBatch Fault!\n");
+     return 0;
+  }
+
   // FYI! The thread is approaching the end of sunset.
-  switch(pHdr->Cmd)
+  switch(Cmd)
   {
      case GdiBCPatBlt: // Highest pri first!
         break;
@@ -113,7 +133,7 @@ GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
         break;
   }
 
-  return pHdr->Size; // Return the full size of the structure.
+  return Size; 
 }
 
 /*
@@ -139,7 +159,6 @@ NTSTATUS
 APIENTRY
 NtGdiFlushUserBatch(VOID)
 {
-  BOOL Hit;
   PTEB pTeb = NtCurrentTeb();
   ULONG GdiBatchCount = pTeb->GdiBatchCount;
 
@@ -161,28 +180,13 @@ NtGdiFlushUserBatch(VOID)
       }
 
        // No need to init anything, just go!
-       for (Hit = FALSE; GdiBatchCount > 0; GdiBatchCount--)
-       {   /*
-              Looks like a hack,
-              feels like a hack,
-              you're right it's a hack,
-              due to the lack,
-              of kernel thread locking when it is in sunset!
-            */
-           _SEH2_TRY
-           {
-              ((PGDIBATCHHDR)pHdr)->Cmd = ((PGDIBATCHHDR)pHdr)->Cmd;
-           }
-           _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-           {
-              Hit = TRUE;
-           }
-           _SEH2_END;
-
-           if (Hit) break;
-
+       for (; GdiBatchCount > 0; GdiBatchCount--)
+       {
+           ULONG Size;
            // Process Gdi Batch!
-           pHdr += GdiFlushUserBatch(pDC, (PGDIBATCHHDR) pHdr);
+           Size = GdiFlushUserBatch(pDC, (PGDIBATCHHDR) pHdr);
+           if (!Size) break;
+           pHdr += Size;
        }
 
        if (pDC)
index 3eae2ac..4bbbeb9 100644 (file)
 #define _NO_COM
 
 /* DDK/NDK/SDK Headers */
-#include <ddk/ntddk.h>
-#include <ddk/ntddmou.h>
-#include <ddk/ntifs.h>
-#include <ddk/tvout.h>
-#include <ndk/ntndk.h>
+#include <ntddk.h>
+#include <ntddmou.h>
+#include <ntifs.h>
+#include <tvout.h>
+#include <ntndk.h>
 
 /* Win32 Headers */
 /* FIXME: Defines in winbase.h that we need... */
index 73518d3..f3071cc 100644 (file)
@@ -9,18 +9,6 @@ CPPFLAG_UNICODE:=-DUNICODE -D_UNICODE
 
 # FIXME: disabled until RosBE stops sucking
 # BUILTIN_CPPFLAGS+= -nostdinc
-ifeq ($(ROS_ARCH),i386)
-BUILTIN_CFLAGS+= -fno-optimize-sibling-calls -fno-set-stack-executable
-else
-BUILTIN_CFLAGS+= -fno-optimize-sibling-calls
-endif
-BUILTIN_CXXFLAGS+= -fno-optimize-sibling-calls
-
-# Add -fno-set-stack-executable required for x86/MinGW
-ifneq (,$(filter $(ARCH), i386))
-       BUILTIN_CFLAGS+= -fno-set-stack-executable
-       BUILTIN_CXXFLAGS+= -fno-set-stack-executable
-endif
 
 #(module, source, dependencies, cflags, output)
 define RBUILD_DEPENDS