sync with trunk r46493
[reactos.git] / include / ddk / wdm.h
index 860ccb0..7e97ea0 100644 (file)
 #include <excpt.h>
 #include <ntdef.h>
 #include <ntstatus.h>
-#include <ntiologc.h>
 
 #ifndef GUID_DEFINED
 #include <guiddef.h>
-#endif
-
-#ifndef _KTMTYPES_
-typedef GUID UOW, *PUOW;
-#endif
-
-typedef GUID *PGUID;
+#endif /* GUID_DEFINED */
 
 #if (NTDDI_VERSION >= NTDDI_WINXP)
 #include <dpfilter.h>
@@ -130,23 +123,17 @@ struct _IO_RESOURCE_DESCRIPTOR;
 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 _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
+typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; 
 typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
-typedef struct _EPROCESS *PEPROCESS;
 typedef struct _ETHREAD *PETHREAD;
+typedef struct _EPROCESS *PEPROCESS;
 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
-
 
 /******************************************************************************
  *                           INTERLOCKED Functions                            *
@@ -158,44 +145,42 @@ typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
 #if defined(__GNUC__)
 
 static __inline__ BOOLEAN
-InterlockedBitTestAndSet(
-  IN LONG volatile *Base,
-  IN LONG Bit)
+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;
+       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;
+       return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1;
 #endif
 }
 
 static __inline__ BOOLEAN
-InterlockedBitTestAndReset(
-  IN LONG volatile *Base,
-  IN LONG Bit)
+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;
+       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;
+       return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1;
 #endif
 }
 
-#endif /* defined(__GNUC__) */
+#endif
 
 #define BitScanForward _BitScanForward
 #define BitScanReverse _BitScanReverse
@@ -233,8 +218,8 @@ LONG
 FASTCALL
 InterlockedCompareExchange(
   IN OUT LONG volatile *Destination,
-  IN LONG Exchange,
-  IN LONG Comparand);
+  IN LONG  Exchange,
+  IN LONG  Comparand);
 
 NTKERNELAPI
 LONG
@@ -250,7 +235,7 @@ InterlockedExchangeAdd(
   IN OUT LONG volatile *Addend,
   IN LONG  Value);
 
-#else /* !defined(NO_INTERLOCKED_INTRINSICS) */
+#else // !defined(NO_INTERLOCKED_INTRINSICS)
 
 #define InterlockedExchange _InterlockedExchange
 #define InterlockedIncrement _InterlockedIncrement
@@ -261,9 +246,9 @@ InterlockedExchangeAdd(
 #define InterlockedAnd _InterlockedAnd
 #define InterlockedXor _InterlockedXor
 
-#endif /* !defined(NO_INTERLOCKED_INTRINSICS) */
+#endif // !defined(NO_INTERLOCKED_INTRINSICS)
 
-#endif /* defined (_X86_) */
+#endif // defined (_X86_)
 
 #if !defined (_WIN64)
 /*
@@ -326,10 +311,10 @@ InterlockedExchangeAdd(
 FORCEINLINE
 LONG64
 InterlockedAdd64(
-  IN OUT LONG64 volatile *Addend,
-  IN LONG64 Value)
+    IN OUT LONG64 volatile *Addend,
+    IN LONG64 Value)
 {
-  return InterlockedExchangeAdd64(Addend, Value) + Value;
+    return InterlockedExchangeAdd64(Addend, Value) + Value;
 }
 //#endif
 #endif
@@ -365,43 +350,43 @@ InterlockedAdd64(
 #define HASH_STRING_ALGORITHM_INVALID     0xffffffff
 
 typedef struct _RTL_BITMAP {
-  ULONG SizeOfBitMap;
-  PULONG Buffer;
+    ULONG SizeOfBitMap;
+    PULONG Buffer;
 } RTL_BITMAP, *PRTL_BITMAP;
 
 typedef struct _RTL_BITMAP_RUN {
-  ULONG StartingIndex;
-  ULONG NumberOfBits;
+    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);
+(DDKAPI *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;
+    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;
+    CSHORT Year;
+    CSHORT Month;
+    CSHORT Day;
+    CSHORT Hour;
+    CSHORT Minute;
+    CSHORT Second;
+    CSHORT Milliseconds;
+    CSHORT Weekday;
 } TIME_FIELDS, *PTIME_FIELDS;
 
 /* Slist Header */
@@ -409,244 +394,103 @@ typedef struct _TIME_FIELDS {
 #define _SLIST_HEADER_
 
 #if defined(_WIN64)
-
+typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY *PSLIST_ENTRY;
 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
-  PSLIST_ENTRY Next;
-} SLIST_ENTRY, *PSLIST_ENTRY;
-
-typedef struct _SLIST_ENTRY32 {
-  ULONG Next;
-} SLIST_ENTRY32, *PSLIST_ENTRY32;
-
+       PSLIST_ENTRY Next;
+} SLIST_ENTRY;
 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;
+    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;
 } 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;
+    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
 
 #endif /* _SLIST_HEADER_ */
 
-/* MS definition is broken! */
-extern BOOLEAN NTSYSAPI NlsMbCodePageTag;
-extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag;
+
+/* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
+#if defined(_NTSYSTEM_) || defined(__GNUC__)
 #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);
+#else
+#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
+#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
+#endif /* _NT_SYSTEM */
+extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
+extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
 
 
 /******************************************************************************
  *                              Kernel Types                                  *
  ******************************************************************************/
 
-
 typedef UCHAR KIRQL, *PKIRQL;
 typedef CCHAR KPROCESSOR_MODE;
 typedef LONG KPRIORITY;
 
+typedef ULONG EXECUTION_STATE;
+
 typedef enum _MODE {
   KernelMode,
   UserMode,
   MaximumMode
 } MODE;
 
-#define CACHE_FULLY_ASSOCIATIVE 0xFF
-
-#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 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_SUPPORTED_EXTENSION  512
 #define MAXIMUM_WAIT_OBJECTS              64
 
-#define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
+#define ASSERT_APC(Object) \
+    ASSERT((Object)->Type == ApcObject)
 
 #define ASSERT_DPC(Object) \
     ASSERT(((Object)->Type == 0) || \
@@ -654,25 +498,25 @@ typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
            ((Object)->Type == ThreadedDpcObject))
 
 #define ASSERT_GATE(object) \
-    NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
-              (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
+    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)
+    ASSERT((Object)->Type == DeviceQueueObject)
 
 #define ASSERT_TIMER(E) \
-    NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \
-              ((E)->Header.Type == TimerSynchronizationObject))
+    ASSERT(((E)->Header.Type == TimerNotificationObject) || \
+           ((E)->Header.Type == TimerSynchronizationObject))
 
 #define ASSERT_MUTANT(E) \
-    NT_ASSERT((E)->Header.Type == MutantObject)
+    ASSERT((E)->Header.Type == MutantObject)
 
 #define ASSERT_SEMAPHORE(E) \
-    NT_ASSERT((E)->Header.Type == SemaphoreObject)
+    ASSERT((E)->Header.Type == SemaphoreObject)
 
 #define ASSERT_EVENT(E) \
-    NT_ASSERT(((E)->Header.Type == NotificationEvent) || \
-              ((E)->Header.Type == SynchronizationEvent))
+    ASSERT(((E)->Header.Type == NotificationEvent) || \
+           ((E)->Header.Type == SynchronizationEvent))
 
 #define DPC_NORMAL 0
 #define DPC_THREADED 1
@@ -682,9 +526,6 @@ typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
 #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
@@ -708,59 +549,43 @@ typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
 #define MAXIMUM_PROCESSORS          MAXIMUM_PROC_PER_GROUP
 
 /* Exception Records */
-#define EXCEPTION_NONCONTINUABLE     1
+#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];
+    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];
+    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];
+    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;
+    PEXCEPTION_RECORD ExceptionRecord;
+    PCONTEXT ContextRecord;
 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
 
+
 typedef enum _KBUGCHECK_CALLBACK_REASON {
   KbCallbackInvalid,
   KbCallbackReserved1,
@@ -772,56 +597,19 @@ typedef enum _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
+(DDKAPI *PKBUGCHECK_REASON_CALLBACK_ROUTINE)(
+  IN KBUGCHECK_CALLBACK_REASON  Reason,
+  IN struct _KBUGCHECK_REASON_CALLBACK_RECORD  *Record,
+  IN OUT PVOID  ReasonSpecificData,
+  IN ULONG  ReasonSpecificDataLength);
 
 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;
+  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 {
@@ -833,52 +621,39 @@ typedef enum _KBUGCHECK_BUFFER_DUMP_STATE {
 } KBUGCHECK_BUFFER_DUMP_STATE;
 
 typedef VOID
-(NTAPI KBUGCHECK_CALLBACK_ROUTINE)(
-  IN PVOID Buffer,
-  IN ULONG Length);
-typedef KBUGCHECK_CALLBACK_ROUTINE *PKBUGCHECK_CALLBACK_ROUTINE;
+(DDKAPI *PKBUGCHECK_CALLBACK_ROUTINE)(
+  IN PVOID  Buffer,
+  IN ULONG  Length);
 
 typedef struct _KBUGCHECK_CALLBACK_RECORD {
-  LIST_ENTRY Entry;
-  PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
-  PVOID Buffer;
-  ULONG Length;
-  PUCHAR Component;
-  ULONG_PTR Checksum;
-  UCHAR State;
+  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;
+(DDKAPI *PNMI_CALLBACK)(
+    IN PVOID Context,
+    IN BOOLEAN Handled);
 
-#define KE_PROCESSOR_CHANGE_ADD_EXISTING         1
-
-#define INVALID_PROCESSOR_INDEX     0xffffffff
+typedef enum _TRACE_INFORMATION_CLASS {
+  TraceIdClass,
+  TraceHandleClass,
+  TraceEnableFlagsClass,
+  TraceEnableLevelClass,
+  GlobalLoggerHandleClass,
+  EventLoggerHandleClass,
+  AllLoggerHandlesClass,
+  TraceHandleByNameClass,
+  LoggerEventsLostClass,
+  TraceSessionSettingsClass,
+  LoggerEventsLoggedClass,
+  MaxTraceInformationClass
+} TRACE_INFORMATION_CLASS;
 
 typedef enum _KINTERRUPT_POLARITY {
   InterruptPolarityUnknown,
@@ -976,50 +751,55 @@ typedef enum _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)(
+(DDKAPI *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_SET_BLOCK_ENABLE,
 } KD_OPTION;
 
+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 VOID
-(NTAPI *PKNORMAL_ROUTINE)(
-  IN PVOID NormalContext OPTIONAL,
-  IN PVOID SystemArgument1 OPTIONAL,
-  IN PVOID SystemArgument2 OPTIONAL);
+(DDKAPI *PKNORMAL_ROUTINE)(
+  IN PVOID  NormalContext,
+  IN PVOID  SystemArgument1,
+  IN PVOID  SystemArgument2);
 
 typedef VOID
-(NTAPI *PKRUNDOWN_ROUTINE)(
-  IN struct _KAPC *Apc);
+(DDKAPI *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 {
+(DDKAPI *PKKERNEL_ROUTINE)(
+  IN struct _KAPC  *Apc,
+  IN OUT PKNORMAL_ROUTINE  *NormalRoutine,
+  IN OUT PVOID  *NormalContext,
+  IN OUT PVOID  *SystemArgument1,
+  IN OUT PVOID  *SystemArgument2);
+
+typedef struct _KAPC
+{
   UCHAR Type;
   UCHAR SpareByte0;
   UCHAR Size;
@@ -1038,62 +818,38 @@ typedef struct _KAPC {
   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;
+  LIST_ENTRY  DeviceListEntry;
+  ULONG  SortKey;
+  BOOLEAN  Inserted;
 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
 
 typedef PVOID PKIPI_CONTEXT;
 
-typedef VOID
+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;
+  IN PKIPI_CONTEXT PacketContext,
+  IN PVOID Parameter1,
+  IN PVOID Parameter2,
+  IN PVOID Parameter3);
+
+typedef
+ULONG_PTR
+(NTAPI *PKIPI_BROADCAST_WORKER)(
+    IN ULONG_PTR Argument);
 
 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
 
 typedef struct _KSPIN_LOCK_QUEUE {
-  struct _KSPIN_LOCK_QUEUE *volatile Next;
-  PKSPIN_LOCK volatile Lock;
+  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;
+  KSPIN_LOCK_QUEUE  LockQueue;
+  KIRQL  OldIrql;
 } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
 
 #if defined(_AMD64_)
@@ -1144,14 +900,14 @@ typedef enum _KSPIN_LOCK_QUEUE_NUMBER {
   LockQueueMaximumLock = LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS
 } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER;
 
-#endif /* defined(_AMD64_) */
+#endif
 
 typedef VOID
-(NTAPI *PKDEFERRED_ROUTINE)(
-  IN struct _KDPC *Dpc,
-  IN PVOID DeferredContext OPTIONAL,
-  IN PVOID SystemArgument1 OPTIONAL,
-  IN PVOID SystemArgument2 OPTIONAL);
+(DDKAPI *PKDEFERRED_ROUTINE)(
+  IN struct _KDPC  *Dpc,
+  IN PVOID  DeferredContext,
+  IN PVOID  SystemArgument1,
+  IN PVOID  SystemArgument2);
 
 typedef enum _KDPC_IMPORTANCE {
   LowImportance,
@@ -1160,16 +916,17 @@ typedef enum _KDPC_IMPORTANCE {
   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;
+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 {
@@ -1189,124 +946,126 @@ typedef struct _KDEVICE_QUEUE {
   union {
     BOOLEAN Busy;
     struct {
-      LONG64 Reserved:8;
-      LONG64 Hint:56;
+      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;
+    _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 {
+                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 {
+                _ANONYMOUS_UNION union {
+                    UCHAR TimerMiscFlags;
+                    _ANONYMOUS_STRUCT struct {
 #if !defined(_X86_)
-            UCHAR Index:TIMER_EXPIRED_INDEX_BITS;
+                        UCHAR Index:TIMER_EXPIRED_INDEX_BITS;
 #else
-            UCHAR Index:1;
-            UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS;
+                        UCHAR Index:1;
+                        UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS;
 #endif
-            UCHAR Inserted:1;
-            volatile UCHAR Expired:1;
-          } DUMMYSTRUCTNAME;
-        } DUMMYUNIONNAME;
+                        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;
+                /* 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;
+  DISPATCHER_HEADER  Header;
 } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
 
 typedef struct _KSEMAPHORE {
-  DISPATCHER_HEADER Header;
-  LONG Limit;
+    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;
+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;
+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;
     };
-    ULONG CombinedApcDisable;
-  };
 } KGUARDED_MUTEX, *PKGUARDED_MUTEX;
 
 typedef struct _KMUTANT {
-  DISPATCHER_HEADER Header;
-  LIST_ENTRY MutantListEntry;
-  struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
-  BOOLEAN Abandoned;
-  UCHAR ApcDisable;
+  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
@@ -1323,17 +1082,9 @@ typedef struct _KTIMER {
   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);
+(DDKAPI *PKSYNCHRONIZE_ROUTINE)(
+  IN PVOID  SynchronizeContext);
 
 typedef enum _POOL_TYPE {
   NonPagedPool,
@@ -1353,41 +1104,29 @@ typedef enum _POOL_TYPE {
   NonPagedPoolCacheAlignedMustSSession
 } POOL_TYPE;
 
-typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE {
-  StandardDesign,
-  NEC98x86,
-  EndAlternatives
+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;
+typedef struct _KSYSTEM_TIME
+{
+    ULONG LowPart;
+    LONG High1Time;
+    LONG High2Time;
 } KSYSTEM_TIME, *PKSYSTEM_TIME;
 
+typedef struct _PNP_BUS_INFORMATION {
+  GUID  BusTypeGuid;
+  INTERFACE_TYPE  LegacyBusType;
+  ULONG  BusNumber;
+} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
+
 typedef struct DECLSPEC_ALIGN(16) _M128A {
-  ULONGLONG Low;
-  LONGLONG High;
+    ULONGLONG Low;
+    LONGLONG High;
 } M128A, *PM128A;
 
 typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT {
@@ -1416,110 +1155,18 @@ typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT {
 #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
 
 
 /******************************************************************************
  *                         Memory manager Types                               *
  ******************************************************************************/
 
-#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 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
@@ -1602,8 +1249,8 @@ typedef ULONG NODE_REQUIREMENT;
 
 /* Section map options */
 typedef enum _SECTION_INHERIT {
-  ViewShare = 1,
-  ViewUnmap = 2
+    ViewShare = 1,
+    ViewUnmap = 2
 } SECTION_INHERIT;
 
 typedef ULONG PFN_COUNT;
@@ -1611,14 +1258,14 @@ 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;
+    struct _MDL *Next;
+    CSHORT Size;
+    CSHORT MdlFlags;
+    struct _EPROCESS *Process;
+    PVOID MappedSystemVa;
+    PVOID StartVa;
+    ULONG ByteCount;
+    ULONG ByteOffset;
 } MDL, *PMDL;
 typedef MDL *PMDLX;
 
@@ -1642,12 +1289,19 @@ typedef enum _MM_PAGE_PRIORITY {
   HighPagePriority = 32
 } MM_PAGE_PRIORITY;
 
+typedef enum _LOCK_OPERATION {
+  IoReadAccess,
+  IoWriteAccess,
+  IoModifyAccess
+} LOCK_OPERATION;
+
 typedef enum _MM_SYSTEM_SIZE {
   MmSmallSystem,
   MmMediumSystem,
   MmLargeSystem
 } MM_SYSTEMSIZE;
 
+
 /******************************************************************************
  *                            Executive Types                                 *
  ******************************************************************************/
@@ -1656,6 +1310,12 @@ typedef enum _MM_SYSTEM_SIZE {
 #define EX_RUNDOWN_COUNT_SHIFT            0x1
 #define EX_RUNDOWN_COUNT_INC              (1 << EX_RUNDOWN_COUNT_SHIFT)
 
+#ifdef _WIN64
+#define PORT_MAXIMUM_MESSAGE_LENGTH 512
+#else
+#define PORT_MAXIMUM_MESSAGE_LENGTH 256
+#endif
+
 typedef struct _FAST_MUTEX {
   volatile LONG Count;
   PKTHREAD Owner;
@@ -1665,35 +1325,35 @@ typedef struct _FAST_MUTEX {
 } 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
+    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
+    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_))
@@ -1705,33 +1365,32 @@ typedef enum _EX_POOL_PRIORITY {
 typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX;
 
 typedef PVOID
-(NTAPI *PALLOCATE_FUNCTION)(
-  IN POOL_TYPE PoolType,
-  IN SIZE_T NumberOfBytes,
-  IN ULONG Tag);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *PFREE_FUNCTION)(
+    IN PVOID Buffer);
 
 typedef VOID
-(NTAPI *PFREE_FUNCTION_EX)(
-  IN PVOID Buffer,
-  IN OUT PLOOKASIDE_LIST_EX Lookaside);
+(DDKAPI *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;
+(DDKAPI *PCALLBACK_FUNCTION)(
+  IN PVOID  CallbackContext,
+  IN PVOID  Argument1,
+  IN PVOID  Argument2);
 
 #define GENERAL_LOOKASIDE_LAYOUT                \
     union {                                     \
@@ -1774,141 +1433,49 @@ typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION;
     ULONG Future[2];
 
 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE {
-  GENERAL_LOOKASIDE_LAYOUT
+    GENERAL_LOOKASIDE_LAYOUT
 } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
 
 typedef struct _GENERAL_LOOKASIDE_POOL {
-  GENERAL_LOOKASIDE_LAYOUT
+    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;
+    GENERAL_LOOKASIDE L;
 #if !defined(_AMD64_) && !defined(_IA64_)
-  FAST_MUTEX Lock__ObsoleteButDoNotDelete;
+    FAST_MUTEX Lock__ObsoleteButDoNotDelete;
 #endif
 } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
 
 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST {
-  GENERAL_LOOKASIDE L;
+    GENERAL_LOOKASIDE L;
 #if !defined(_AMD64_) && !defined(_IA64_)
-  KSPIN_LOCK Lock__ObsoleteButDoNotDelete;
+    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;
+    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
+typedef struct _EX_RUNDOWN_REF {
+    __GNU_EXTENSION union {
+        volatile ULONG_PTR Count;
+        volatile PVOID Ptr;
+    };
+} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
 
-#define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE          256
-#define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT         1024
+typedef struct _EX_RUNDOWN_REF_CACHE_AWARE  *PEX_RUNDOWN_REF_CACHE_AWARE;
 
-#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;
+typedef VOID
+(DDKAPI *PWORKER_THREAD_ROUTINE)(
+  IN PVOID Parameter);
 
+typedef struct _WORK_QUEUE_ITEM {
+  LIST_ENTRY  List;
+  PWORKER_THREAD_ROUTINE  WorkerRoutine;
+  volatile PVOID  Parameter;
+} WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
 
 
 /******************************************************************************
@@ -1941,10 +1508,10 @@ typedef PVOID PSID;
 #define GENERIC_ALL                      0x10000000L
 
 typedef struct _GENERIC_MAPPING {
-  ACCESS_MASK GenericRead;
-  ACCESS_MASK GenericWrite;
-  ACCESS_MASK GenericExecute;
-  ACCESS_MASK GenericAll;
+    ACCESS_MASK GenericRead;
+    ACCESS_MASK GenericWrite;
+    ACCESS_MASK GenericExecute;
+    ACCESS_MASK GenericAll;
 } GENERIC_MAPPING, *PGENERIC_MAPPING;
 
 #define ACL_REVISION                      2
@@ -1958,11 +1525,11 @@ typedef struct _GENERIC_MAPPING {
 #define MAX_ACL_REVISION                  ACL_REVISION4
 
 typedef struct _ACL {
-  UCHAR AclRevision;
-  UCHAR Sbz1;
-  USHORT AclSize;
-  USHORT AceCount;
-  USHORT Sbz2;
+    UCHAR AclRevision;
+    UCHAR Sbz1;
+    USHORT AclSize;
+    USHORT AceCount;
+    USHORT Sbz2;
 } ACL, *PACL;
 
 /* Current security descriptor revision value */
@@ -1982,8 +1549,8 @@ typedef struct _ACL {
 
 #include <pshpack4.h>
 typedef struct _LUID_AND_ATTRIBUTES {
-  LUID Luid;
-  ULONG Attributes;
+    LUID Luid;
+    ULONG Attributes;
 } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
 #include <poppack.h>
 
@@ -1994,16 +1561,16 @@ typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
 #define PRIVILEGE_SET_ALL_NECESSARY (1)
 
 typedef struct _PRIVILEGE_SET {
-  ULONG PrivilegeCount;
-  ULONG Control;
-  LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
+    ULONG PrivilegeCount;
+    ULONG Control;
+    LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
 } PRIVILEGE_SET,*PPRIVILEGE_SET;
 
 typedef enum _SECURITY_IMPERSONATION_LEVEL {
-  SecurityAnonymous,
-  SecurityIdentification,
-  SecurityImpersonation,
-  SecurityDelegation
+    SecurityAnonymous,
+    SecurityIdentification,
+    SecurityImpersonation,
+    SecurityDelegation
 } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL;
 
 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
@@ -2017,17 +1584,17 @@ typedef enum _SECURITY_IMPERSONATION_LEVEL {
 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;
+    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;
+    PACCESS_TOKEN Token;
+    BOOLEAN CopyOnOpen;
+    BOOLEAN EffectiveOnly;
+    SECURITY_IMPERSONATION_LEVEL Level;
 } SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE;
 
 #define OWNER_SECURITY_INFORMATION       (0x00000001L)
@@ -2051,9 +1618,9 @@ typedef enum _SECURITY_OPERATION_CODE {
 #define INITIAL_PRIVILEGE_COUNT           3
 
 typedef struct _INITIAL_PRIVILEGE_SET {
-  ULONG PrivilegeCount;
-  ULONG Control;
-  LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
+  ULONG  PrivilegeCount;
+  ULONG  Control;
+  LUID_AND_ATTRIBUTES  Privilege[INITIAL_PRIVILEGE_COUNT];
 } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
 
 #define SE_MIN_WELL_KNOWN_PRIVILEGE         2
@@ -2094,38 +1661,35 @@ typedef struct _INITIAL_PRIVILEGE_SET {
 #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;
+  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;
+  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;
+    INITIAL_PRIVILEGE_SET  InitialPrivilegeSet;
+    PRIVILEGE_SET  PrivilegeSet;
   } Privileges;
-  BOOLEAN AuditPrivileges;
-  UNICODE_STRING ObjectName;
-  UNICODE_STRING ObjectTypeName;
+
+  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_
 
@@ -2196,8 +1760,8 @@ typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY {
 
 typedef struct _SE_ADT_ACCESS_REASON {
   ACCESS_MASK AccessMask;
-  ULONG AccessReasons[32];
-  ULONG ObjectTypeIndex;
+  ULONG  AccessReasons[32];
+  ULONG  ObjectTypeIndex;
   ULONG AccessGranted;
   PSECURITY_DESCRIPTOR SecurityDescriptor;
 } SE_ADT_ACCESS_REASON, *PSE_ADT_ACCESS_REASON;
@@ -2216,6 +1780,7 @@ typedef struct _SE_ADT_PARAMETER_ARRAY {
 #endif /* !_NTLSA_AUDIT_ */
 #endif /* !_NTLSA_IFS_ */
 
+
 /******************************************************************************
  *                            Power Management Support Types                  *
  ******************************************************************************/
@@ -2223,112 +1788,99 @@ typedef struct _SE_ADT_PARAMETER_ARRAY {
 #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
+    PowerSystemUnspecified,
+    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
+    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
+    PowerActionNone,
+    PowerActionReserved,
+    PowerActionSleep,
+    PowerActionHibernate,
+    PowerActionShutdown,
+    PowerActionShutdownReset,
+    PowerActionShutdownOff,
+    PowerActionWarmEject
 } POWER_ACTION, *PPOWER_ACTION;
 
 typedef enum _DEVICE_POWER_STATE {
-  PowerDeviceUnspecified = 0,
-  PowerDeviceD0,
-  PowerDeviceD1,
-  PowerDeviceD2,
-  PowerDeviceD3,
-  PowerDeviceMaximum
+    PowerDeviceUnspecified,
+    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;
+  SYSTEM_POWER_STATE  SystemState;
+  DEVICE_POWER_STATE  DeviceState;
 } POWER_STATE, *PPOWER_STATE;
 
 typedef enum _POWER_STATE_TYPE {
@@ -2336,297 +1888,39 @@ typedef enum _POWER_STATE_TYPE {
   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;
+    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)(
+(DDKAPI *PREQUEST_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)(
+(DDKAPI POWER_SETTING_CALLBACK)(
   IN LPCGUID SettingGuid,
   IN PVOID Value,
   IN ULONG ValueLength,
   IN OUT PVOID Context OPTIONAL);
+
 typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK;
 
+#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
 
 /******************************************************************************
  *                            Configuration Manager Types                     *
@@ -2642,11 +1936,11 @@ typedef int CM_RESOURCE_TYPE;
 #define CmResourceTypeDma               4
 #define CmResourceTypeDeviceSpecific    5
 #define CmResourceTypeBusNumber         6
-#define CmResourceTypeNonArbitrated     128
-#define CmResourceTypeConfigData        128
-#define CmResourceTypeDevicePrivate     129
-#define CmResourceTypePcCardConfig      130
-#define CmResourceTypeMfCardConfig      131
+#define CmResourceTypeNonArbitrated      128
+#define CmResourceTypeConfigData         128
+#define CmResourceTypeDevicePrivate      129
+#define CmResourceTypePcCardConfig       130
+#define CmResourceTypeMfCardConfig       131
 
 /* KEY_VALUE_Xxx.Type */
 #define REG_NONE                           0
@@ -2660,9 +1954,9 @@ typedef int CM_RESOURCE_TYPE;
 #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
+#define REG_RESOURCE_REQUIREMENTS_LIST    10
+#define REG_QWORD                         11
+#define REG_QWORD_LITTLE_ENDIAN           11
 
 /* Registry Access Rights */
 #define KEY_QUERY_VALUE         (0x0001)
@@ -2718,15 +2012,6 @@ typedef int CM_RESOURCE_TYPE;
                  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)
@@ -2742,7 +2027,6 @@ typedef int CM_RESOURCE_TYPE;
 #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
@@ -2759,6 +2043,27 @@ typedef int CM_RESOURCE_TYPE;
                  REG_NOTIFY_CHANGE_LAST_SET      |\
                  REG_NOTIFY_CHANGE_SECURITY)
 
+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;
+
 #include <pshpack4.h>
 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
   UCHAR Type;
@@ -2858,15 +2163,15 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
 #define CmResourceTypeDeviceSpecific      5
 #define CmResourceTypeBusNumber           6
 #define CmResourceTypeMemoryLarge         7
-#define CmResourceTypeNonArbitrated       128
-#define CmResourceTypeConfigData          128
-#define CmResourceTypeDevicePrivate       129
-#define CmResourceTypePcCardConfig        130
-#define CmResourceTypeMfCardConfig        131
+#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,
+  CmResourceShareUndetermined,
   CmResourceShareDeviceExclusive,
   CmResourceShareDriverExclusive,
   CmResourceShareShared
@@ -2889,10 +2194,6 @@ typedef enum _CM_SHARE_DISPOSITION {
 #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
@@ -2906,15 +2207,6 @@ typedef enum _CM_SHARE_DISPOSITION {
 #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
@@ -2925,92 +2217,33 @@ typedef enum _CM_SHARE_DISPOSITION {
 #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;
+  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;
+  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];
+  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;
+  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;
@@ -3034,99 +2267,66 @@ typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK {
   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;
+    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;
+  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_MCA_POS_DATA {
+  USHORT  AdapterId;
+  UCHAR  PosData1;
+  UCHAR  PosData2;
+  UCHAR  PosData3;
+  UCHAR  PosData4;
+} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
 
-typedef struct _CM_VIDEO_DEVICE_DATA {
-  USHORT Version;
-  USHORT Revision;
-  ULONG VideoClock;
-} CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA;
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+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;
 
-typedef struct _CM_SONIC_DEVICE_DATA {
-  USHORT Version;
-  USHORT Revision;
-  USHORT DataConfigurationRegister;
-  UCHAR EthernetAddress[8];
-} CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA;
+#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_SERIAL_DEVICE_DATA {
-  USHORT Version;
-  USHORT Revision;
-  ULONG BaudClock;
-} CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
-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_SCSI_DEVICE_DATA {
+  USHORT  Version;
+  USHORT  Revision;
+  UCHAR  HostIdentifier;
+} CM_SCSI_DEVICE_DATA, *PCM_SCSI_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 struct _CM_SERIAL_DEVICE_DATA {
+  USHORT  Version;
+  USHORT  Revision;
+  ULONG  BaudClock;
+} CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
 
 typedef enum _KEY_INFORMATION_CLASS {
   KeyBasicInformation,
@@ -3134,101 +2334,73 @@ typedef enum _KEY_INFORMATION_CLASS {
   KeyFullInformation,
   KeyNameInformation,
   KeyCachedInformation,
-  KeyFlagsInformation,
-  KeyVirtualizationInformation,
-  KeyHandleTagsInformation,
-  MaxKeyInfoClass
+  KeyFlagsInformation
 } KEY_INFORMATION_CLASS;
 
 typedef struct _KEY_BASIC_INFORMATION {
-  LARGE_INTEGER LastWriteTime;
-  ULONG TitleIndex;
-  ULONG NameLength;
-  WCHAR Name[1];
+  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];
+  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];
+  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];
+  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];
+  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];
+  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];
+  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;
+  PUNICODE_STRING  ValueName;
+  ULONG  DataLength;
+  ULONG  DataOffset;
+  ULONG  Type;
 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
 
 typedef enum _KEY_VALUE_INFORMATION_CLASS {
@@ -3239,14 +2411,20 @@ typedef enum _KEY_VALUE_INFORMATION_CLASS {
   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;
+  LARGE_INTEGER  LastWriteTime;
 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
 
+typedef enum _KEY_SET_INFORMATION_CLASS {
+  KeyWriteTimeInformation,
+  KeyWow64FlagsInformation,
+  KeyControlFlagsInformation,
+  KeySetVirtualizationInformation,
+  KeySetDebugInformation,
+  KeySetHandleTagsInformation,
+  MaxKeySetInfoClass
+} KEY_SET_INFORMATION_CLASS;
+
 typedef enum _REG_NOTIFY_CLASS {
   RegNtDeleteKey,
   RegNtPreDeleteKey = RegNtDeleteKey,
@@ -3310,11 +2488,11 @@ typedef enum _REG_NOTIFY_CLASS {
 } 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;
+(NTAPI *PEX_CALLBACK_FUNCTION)(
+    IN PVOID CallbackContext,
+    IN PVOID Argument1,
+    IN PVOID Argument2
+);
 
 typedef struct _REG_DELETE_KEY_INFORMATION {
   PVOID Object;
@@ -3416,54 +2594,6 @@ typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION {
   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;;
@@ -3491,182 +2621,151 @@ typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION {
   PVOID Reserved;
 } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION;
 
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+/******************************************************************************
+ *                         I/O Manager Types                                  *
+ ******************************************************************************/
 
-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;
+ /* 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
 
-typedef struct _REG_UNLOAD_KEY_INFORMATION {
-  PVOID Object;
-  PVOID UserEvent;
-  PVOID CallContext;
-  PVOID ObjectContext;
-  PVOID Reserved;
-} REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION;
+/* 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
 
-typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION {
-  PVOID Object;
-  PVOID ObjectContext;
-  PVOID Reserved;
-} REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION;
+/* PCI_COMMON_CONFIG.HeaderType */
+#define PCI_MULTIFUNCTION                 0x80
+#define PCI_DEVICE_TYPE                   0x00
+#define PCI_BRIDGE_TYPE                   0x01
+#define PCI_CARDBUS_BRIDGE_TYPE           0x02
 
-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 PCI_CONFIGURATION_TYPE(PciData) \
+  (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
 
-#define SERVICE_TYPE_ALL               (SERVICE_WIN32  | \
-                                        SERVICE_ADAPTER | \
-                                        SERVICE_DRIVER  | \
-                                        SERVICE_INTERACTIVE_PROCESS)
+#define PCI_MULTIFUNCTION_DEVICE(PciData) \
+  ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
 
-/* 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
+/* 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 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)
+/* 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
 
-/******************************************************************************
- *                         I/O Manager Types                                  *
- ******************************************************************************/
+/* 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
 
-#define WDM_MAJORVERSION        0x06
-#define WDM_MINORVERSION        0x00
+/* 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
 
-#if defined(_WIN64)
+/* 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
 
-#ifndef USE_DMA_MACROS
-#define USE_DMA_MACROS
-#endif
+/* 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
 
-#ifndef NO_LEGACY_DRIVERS
-#define NO_LEGACY_DRIVERS
-#endif
+/* 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
 
-#endif /* defined(_WIN64) */
+#define PCI_MAX_DEVICES        32
+#define PCI_MAX_FUNCTION       8
+#define PCI_MAX_BRIDGE_NUMBER  0xFF
+#define PCI_INVALID_VENDORID   0xFFFF
+#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
 
-#define STATUS_CONTINUE_COMPLETION      STATUS_SUCCESS
+#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 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 PCI_TYPE_32BIT 0
+#define PCI_TYPE_20BIT 2
+#define PCI_TYPE_64BIT 4
 
 #define POOL_COLD_ALLOCATION                256
 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE    8
 #define POOL_RAISE_IF_ALLOCATION_FAILURE    16
 
+#define PCI_TYPE0_ADDRESSES               6
+#define PCI_TYPE1_ADDRESSES               2
+#define PCI_TYPE2_ADDRESSES               5
+
 #define IO_TYPE_ADAPTER                 1
 #define IO_TYPE_CONTROLLER              2
 #define IO_TYPE_DEVICE                  3
@@ -3690,6 +2789,47 @@ typedef enum _CM_ERROR_CONTROL_TYPE {
 #define IO_RESOURCE_DEFAULT               0x02
 #define IO_RESOURCE_ALTERNATIVE           0x08
 
+/* DEVICE_OBJECT.Flags */
+#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
+
 #define FILE_DEVICE_BEEP                  0x00000001
 #define FILE_DEVICE_CD_ROM                0x00000002
 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM    0x00000003
@@ -3758,44 +2898,6 @@ typedef enum _CM_ERROR_CONTROL_TYPE {
 #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 {
@@ -3804,20 +2906,24 @@ typedef struct _OBJECT_HANDLE_INFORMATION {
 } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
 
 typedef struct _CLIENT_ID {
-  HANDLE UniqueProcess;
-  HANDLE UniqueThread;
+  HANDLE  UniqueProcess;
+  HANDLE  UniqueThread;
 } CLIENT_ID, *PCLIENT_ID;
 
+typedef VOID
+(DDKAPI *PKSTART_ROUTINE)(
+  IN PVOID  StartContext);
+
 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)];
+  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 {
@@ -3827,370 +2933,190 @@ typedef enum _IO_ALLOCATION_ACTION {
 } 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;
+(DDKAPI *PDRIVER_CONTROL)(
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN struct _IRP  *Irp,
+  IN PVOID  MapRegisterBase,
+  IN PVOID  Context);
 
 typedef struct _WAIT_CONTEXT_BLOCK {
-  KDEVICE_QUEUE_ENTRY WaitQueueEntry;
-  PDRIVER_CONTROL DeviceRoutine;
-  PVOID DeviceContext;
-  ULONG NumberOfMapRegisters;
-  PVOID DeviceObject;
-  PVOID CurrentIrp;
-  PKDPC BufferChainingDpc;
+  KDEVICE_QUEUE_ENTRY  WaitQueueEntry;
+  PDRIVER_CONTROL  DeviceRoutine;
+  PVOID  DeviceContext;
+  ULONG  NumberOfMapRegisters;
+  PVOID  DeviceObject;
+  PVOID  CurrentIrp;
+  PKDPC  BufferChainingDpc;
 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
 
-/* DEVICE_OBJECT.Flags */
-#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;
+  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;
+    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;
+  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;
+  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;
+  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;
+  IO_REMOVE_LOCK_COMMON_BLOCK  Common;
 #if DBG
-  IO_REMOVE_LOCK_DBG_BLOCK 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);
+(DDKAPI 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;
+  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; \
+  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; \
+      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; \
+      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; \
+      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; \
+      UCHAR   InterruptLine; \
+      UCHAR   InterruptPin; \
+      USHORT  BridgeControl; \
     } type2; \
   } u;
 
+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
+
 typedef enum _CREATE_FILE_TYPE {
   CreateFileTypeNone,
   CreateFileTypeNamedPipe,
@@ -4205,54 +3131,39 @@ typedef enum _CREATE_FILE_TYPE {
 
 typedef struct _IO_STATUS_BLOCK {
   _ANONYMOUS_UNION union {
-    NTSTATUS Status;
-    PVOID Pointer;
+    NTSTATUS  Status;
+    PVOID  Pointer;
   } DUMMYUNIONNAME;
-  ULONG_PTR Information;
+  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 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;
 
 typedef VOID
-(NTAPI *PIO_APC_ROUTINE)(
+(DDKAPI *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;
+typedef VOID
+(DDKAPI *WMI_NOTIFICATION_CALLBACK)(
+  PVOID  Wnode,
+  PVOID  Context);
+  
+#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 EVENT_INCREMENT                   1
 #define IO_NO_INCREMENT                   0
@@ -4272,148 +3183,105 @@ typedef struct _IO_SESSION_CONNECT_INFO {
 #define MM_MAXIMUM_DISK_IO_SIZE          (0x10000)
 
 typedef struct _BOOTDISK_INFORMATION {
-  LONGLONG BootPartitionOffset;
-  LONGLONG SystemPartitionOffset;
-  ULONG BootDeviceSignature;
-  ULONG SystemDeviceSignature;
+  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;
+  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;
+  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;
 
+#include <pshpack1.h>
 typedef struct _EISA_MEMORY_CONFIGURATION {
-  EISA_MEMORY_TYPE ConfigurationByte;
-  UCHAR DataSize;
-  USHORT AddressLowWord;
-  UCHAR AddressHighByte;
-  USHORT MemorySize;
+  EISA_MEMORY_TYPE  ConfigurationByte;
+  UCHAR  DataSize;
+  USHORT  AddressLowWord;
+  UCHAR  AddressHighByte;
+  USHORT  MemorySize;
 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
+#include <poppack.h>
 
 typedef struct _EISA_IRQ_DESCRIPTOR {
-  UCHAR Interrupt:4;
-  UCHAR Reserved:1;
-  UCHAR LevelTriggered:1;
-  UCHAR Shared:1;
-  UCHAR MoreEntries:1;
+  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_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;
+  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;
+  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;
+  DMA_CONFIGURATION_BYTE0  ConfigurationByte0;
+  DMA_CONFIGURATION_BYTE1  ConfigurationByte1;
 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
 
+#include <pshpack1.h>
 typedef struct _EISA_PORT_DESCRIPTOR {
-  UCHAR NumberPorts:5;
-  UCHAR Reserved:1;
-  UCHAR Shared:1;
-  UCHAR MoreEntries:1;
+  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_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;
+#include <poppack.h>
 
 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];
+  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
@@ -4428,9 +3296,16 @@ typedef struct _CM_EISA_FUNCTION_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
+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;
 
 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
 
@@ -4445,76 +3320,34 @@ typedef struct _CM_EISA_FUNCTION_INFORMATION {
 */
 
 typedef VOID
-(NTAPI *PINTERFACE_REFERENCE)(
-  PVOID Context);
+(DDKAPI *PINTERFACE_REFERENCE)(
+  PVOID  Context);
 
 typedef VOID
-(NTAPI *PINTERFACE_DEREFERENCE)(
+(DDKAPI *PINTERFACE_DEREFERENCE)(
   PVOID Context);
 
 typedef BOOLEAN
-(NTAPI TRANSLATE_BUS_ADDRESS)(
-  IN PVOID Context,
-  IN PHYSICAL_ADDRESS BusAddress,
-  IN ULONG Length,
-  IN OUT PULONG AddressSpace,
+(DDKAPI *PTRANSLATE_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;
+(DDKAPI *PGET_DMA_ADAPTER)(
+  IN PVOID  Context,
+  IN struct _DEVICE_DESCRIPTION  *DeviceDescriptor,
+  OUT PULONG  NumberOfMapRegisters);
 
 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
+(DDKAPI *PGET_SET_DEVICE_DATA)(
+  IN PVOID  Context,
+  IN ULONG  DataType,
+  IN PVOID  Buffer,
+  IN ULONG  Offset,
+  IN ULONG  Length);
 
 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
 #define PCI_USE_SUBSYSTEM_IDS   0x00000001
@@ -4526,116 +3359,283 @@ typedef VOID
 #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;
+  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;
+(DDKAPI *PPCI_IS_DEVICE_PRESENT)(
+  IN USHORT  VendorID,
+  IN USHORT  DeviceID,
+  IN UCHAR   RevisionID,
+  IN USHORT  SubVendorID,
+  IN USHORT  SubSystemID,
+  IN ULONG   Flags);
 
 typedef BOOLEAN
-(NTAPI PCI_IS_DEVICE_PRESENT_EX)(
+(DDKAPI *PPCI_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;
+  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;
+  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
+BOOLEAN
+(*PGPE_SERVICE_ROUTINE2)(
+    PVOID ObjectContext,
+    PVOID ServiceContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_CONNECT_VECTOR2)(
+    PVOID Context,
+    ULONG GpeNumber,
+    KINTERRUPT_MODE Mode,
+    BOOLEAN Shareable,
+    PGPE_SERVICE_ROUTINE2 ServiceRoutine,
+    PVOID ServiceContext,
+    PVOID *ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_DISCONNECT_VECTOR2)(
+    PVOID Context,
+    PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_ENABLE_EVENT2)(
+    PVOID Context,
+    PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_DISABLE_EVENT2)(
+    PVOID Context,
+    PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_CLEAR_STATUS2)(
+    PVOID Context,
+    PVOID ObjectContext
+);
+
+typedef
+VOID
+(*PDEVICE_NOTIFY_CALLBACK2)(
+    PVOID NotificationContext,
+    ULONG NotifyCode
+);
+
+typedef
+NTSTATUS
+(*PREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
+    PVOID Context,
+    PDEVICE_NOTIFY_CALLBACK2 NotificationHandler,
+    PVOID NotificationContext
+);
+
+typedef
+VOID
+(*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
+    PVOID Context
+);
+
+typedef struct
+{
+    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;
+
+typedef
+BOOLEAN
+(*PGPE_SERVICE_ROUTINE)(
+    PDEVICE_OBJECT ObjectContext,
+    PVOID ServiceContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_CONNECT_VECTOR)(
+    PDEVICE_OBJECT Context,
+    ULONG GpeNumber,
+    KINTERRUPT_MODE Mode,
+    BOOLEAN Shareable,
+    PGPE_SERVICE_ROUTINE ServiceRoutine,
+    PVOID ServiceContext,
+    PVOID *ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_DISCONNECT_VECTOR)(
+    PDEVICE_OBJECT Context,
+    PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_ENABLE_EVENT)(
+    PDEVICE_OBJECT Context,
+    PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_DISABLE_EVENT)(
+    PDEVICE_OBJECT Context,
+    PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_CLEAR_STATUS)(
+    PDEVICE_OBJECT Context,
+    PVOID ObjectContext
+);
+
+typedef
+VOID
+(*PDEVICE_NOTIFY_CALLBACK)(
+    PVOID NotificationContext,
+    ULONG NotifyCode
+);
+
+typedef
+NTSTATUS
+(*PREGISTER_FOR_DEVICE_NOTIFICATIONS)(
+    PDEVICE_OBJECT Context,
+    PDEVICE_NOTIFY_CALLBACK NotificationHandler,
+    PVOID NotificationContext
+);
+
+typedef
+VOID
+(*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)(
+    PDEVICE_OBJECT Context,
+    PDEVICE_NOTIFY_CALLBACK NotificationHandler
+);
+
+typedef struct
+{
+    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 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;
+  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;
+  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;
+  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;
+  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;
+  USHORT  Version;
+  USHORT  Size;
+  GUID  Event;
 } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
 
 typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
@@ -4650,154 +3650,21 @@ typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
 #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];
+  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;
+  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,
@@ -4806,9 +3673,9 @@ typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
 } DEVICE_USAGE_NOTIFICATION_TYPE;
 
 typedef struct _POWER_SEQUENCE {
-  ULONG SequenceD1;
-  ULONG SequenceD2;
-  ULONG SequenceD3;
+  ULONG  SequenceD1;
+  ULONG  SequenceD2;
+  ULONG  SequenceD3;
 } POWER_SEQUENCE, *PPOWER_SEQUENCE;
 
 typedef enum {
@@ -4844,27 +3711,16 @@ typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
   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)(
+(DDKAPI *PDRIVER_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)(
+(DDKAPI *PDEVICE_CHANGE_COMPLETE_CALLBACK)(
   IN PVOID Context);
-typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK;
 
 typedef enum _FILE_INFORMATION_CLASS {
   FileDirectoryInformation = 1,
@@ -4926,59 +3782,35 @@ typedef enum _FILE_INFORMATION_CLASS {
 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
 
 typedef struct _FILE_POSITION_INFORMATION {
-  LARGE_INTEGER CurrentByteOffset;
+  LARGE_INTEGER  CurrentByteOffset;
 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
 
+#include <pshpack8.h>
 typedef struct _FILE_BASIC_INFORMATION {
-  LARGE_INTEGER CreationTime;
-  LARGE_INTEGER LastAccessTime;
-  LARGE_INTEGER LastWriteTime;
-  LARGE_INTEGER ChangeTime;
-  ULONG FileAttributes;
+  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;
+#include <poppack.h>
 
 typedef struct _FILE_STANDARD_INFORMATION {
-  LARGE_INTEGER AllocationSize;
-  LARGE_INTEGER EndOfFile;
-  ULONG NumberOfLinks;
-  BOOLEAN DeletePending;
-  BOOLEAN Directory;
+  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;
+  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 {
@@ -4996,329 +3828,321 @@ typedef enum _FSINFOCLASS {
 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
 
 typedef struct _FILE_FS_DEVICE_INFORMATION {
-  DEVICE_TYPE DeviceType;
-  ULONG Characteristics;
+  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];
+  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 ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
+
+typedef struct _OWNER_ENTRY {
+    ERESOURCE_THREAD OwnerThread;
+    _ANONYMOUS_UNION union {
+        LONG OwnerCount;
+        ULONG TableSize;
+    } DUMMYUNIONNAME;
+} 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;
+    __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 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_IO_UNLOCK_ALL)(
+  IN struct _FILE_OBJECT  *FileObject,
+  PEPROCESS  ProcessId,
+  OUT PIO_STATUS_BLOCK  IoStatus,
+  IN struct _DEVICE_OBJECT  *DeviceObject);
 
 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_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 VOID
-(NTAPI FAST_IO_ACQUIRE_FILE)(
-  IN struct _FILE_OBJECT *FileObject);
-typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE;
+(DDKAPI *PFAST_IO_ACQUIRE_FILE)(
+  IN struct _FILE_OBJECT  *FileObject);
 
 typedef VOID
-(NTAPI FAST_IO_RELEASE_FILE)(
-  IN struct _FILE_OBJECT *FileObject);
-typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE;
+(DDKAPI *PFAST_IO_RELEASE_FILE)(
+  IN struct _FILE_OBJECT  *FileObject);
 
 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;
+(DDKAPI *PFAST_IO_DETACH_DEVICE)(
+  IN struct _DEVICE_OBJECT  *SourceDevice,
+  IN struct _DEVICE_OBJECT  *TargetDevice);
 
 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_IO_ACQUIRE_FOR_MOD_WRITE)(
+  IN struct _FILE_OBJECT  *FileObject,
+  IN PLARGE_INTEGER  EndingOffset,
+  OUT struct _ERESOURCE  **ResourceToRelease,
+  IN struct _DEVICE_OBJECT  *DeviceObject);
 
 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;
+(DDKAPI *PFAST_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 BOOLEAN
-(NTAPI FAST_IO_MDL_READ_COMPLETE)(
+(DDKAPI *PFAST_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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_IO_MDL_WRITE_COMPLETE)(
+  IN struct _FILE_OBJECT  *FileObject,
+  IN PLARGE_INTEGER  FileOffset,
+  IN PMDL  MdlChain,
+  IN struct _DEVICE_OBJECT  *DeviceObject);
 
 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_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 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;
+(DDKAPI *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED)(
+  IN struct _FILE_OBJECT  *FileObject,
+  IN PMDL  MdlChain,
+  IN struct _DEVICE_OBJECT  *DeviceObject);
 
 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;
+(DDKAPI *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)(
+  IN struct _FILE_OBJECT  *FileObject,
+  IN PLARGE_INTEGER  FileOffset,
+  IN PMDL  MdlChain,
+  IN struct _DEVICE_OBJECT  *DeviceObject);
 
 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;
+(DDKAPI *PFAST_IO_QUERY_OPEN)(
+  IN struct _IRP  *Irp,
+  OUT PFILE_NETWORK_OPEN_INFORMATION  NetworkInformation,
+  IN struct _DEVICE_OBJECT  *DeviceObject);
 
 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;
+(DDKAPI *PFAST_IO_RELEASE_FOR_MOD_WRITE)(
+  IN struct _FILE_OBJECT  *FileObject,
+  IN struct _ERESOURCE  *ResourceToRelease,
+  IN struct _DEVICE_OBJECT  *DeviceObject);
 
 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;
+(DDKAPI *PFAST_IO_ACQUIRE_FOR_CCFLUSH)(
+  IN struct _FILE_OBJECT  *FileObject,
+  IN struct _DEVICE_OBJECT  *DeviceObject);
 
 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;
+(DDKAPI *PFAST_IO_RELEASE_FOR_CCFLUSH) (
+  IN struct _FILE_OBJECT  *FileObject,
+  IN struct _DEVICE_OBJECT  *DeviceObject);
 
 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;
+  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;
+  PVOID  DataSectionObject;
+  PVOID  SharedCacheMap;
+  PVOID  ImageSectionObject;
 } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
 
 typedef struct _IO_COMPLETION_CONTEXT {
-  PVOID Port;
-  PVOID Key;
+  PVOID  Port;
+  PVOID  Key;
 } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
 
 /* FILE_OBJECT.Flags */
@@ -5351,7 +4175,6 @@ typedef struct _IO_COMPLETION_CONTEXT {
 #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
@@ -5366,18 +4189,12 @@ typedef struct _IO_COMPLETION_CONTEXT {
 #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
@@ -5395,8 +4212,6 @@ typedef struct _IO_COMPLETION_CONTEXT {
 
 #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
@@ -5482,9 +4297,6 @@ typedef struct _IO_COMPLETION_CONTEXT {
 #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
@@ -5504,62 +4316,63 @@ typedef struct _IO_COMPLETION_CONTEXT {
 
 #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;
+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];
+  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;
+  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
@@ -5575,12 +4388,6 @@ typedef struct _IO_ERROR_LOG_MESSAGE {
 #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,
@@ -5604,22 +4411,22 @@ typedef enum _DMA_SPEED {
 #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;
+  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 {
@@ -5633,20 +4440,21 @@ typedef enum _DEVICE_RELATION_TYPE {
 } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
 
 typedef struct _DEVICE_RELATIONS {
-  ULONG Count;
+  ULONG  Count;
   PDEVICE_OBJECT Objects[1];
 } DEVICE_RELATIONS, *PDEVICE_RELATIONS;
 
-typedef struct _DEVOBJ_EXTENSION {
-  CSHORT Type;
-  USHORT Size;
-  PDEVICE_OBJECT DeviceObject;
+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;
+  PHYSICAL_ADDRESS  Address;
+  ULONG  Length;
+  ULONG_PTR  Reserved;
 } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
 
 #if defined(_MSC_EXTENSIONS)
@@ -5656,9 +4464,9 @@ typedef struct _SCATTER_GATHER_ELEMENT {
 #endif
 #pragma warning(disable:4200)
 typedef struct _SCATTER_GATHER_LIST {
-  ULONG NumberOfElements;
-  ULONG_PTR Reserved;
-  SCATTER_GATHER_ELEMENT Elements[1];
+  ULONG  NumberOfElements;
+  ULONG_PTR  Reserved;
+  SCATTER_GATHER_ELEMENT  Elements[1];
 } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
 
 #if _MSC_VER >= 1200
@@ -5675,16 +4483,16 @@ 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);
+(DDKAPI 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;
+  struct _DRIVER_OBJECT  *DriverObject;
+  PDRIVER_ADD_DEVICE  AddDevice;
+  ULONG  Count;
+  UNICODE_STRING  ServiceKeyName;
 } DRIVER_EXTENSION, *PDRIVER_EXTENSION;
 
 #define DRVO_UNLOAD_INVOKED               0x00000001
@@ -5692,319 +4500,320 @@ typedef struct _DRIVER_EXTENSION {
 #define DRVO_BUILTIN_DRIVER               0x00000004
 
 typedef NTSTATUS
-(NTAPI DRIVER_INITIALIZE)(
-  IN struct _DRIVER_OBJECT *DriverObject,
-  IN PUNICODE_STRING RegistryPath);
+(DDKAPI 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);
+(DDKAPI 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);
+(DDKAPI 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);
+(DDKAPI 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;
+  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;
+  PDRIVER_INITIALIZE  DriverInit;
+  PDRIVER_STARTIO  DriverStartIo;
+  PDRIVER_UNLOAD  DriverUnload;
+  PDRIVER_DISPATCH  MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
+} DRIVER_OBJECT;
+typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
 
 typedef struct _DMA_ADAPTER {
-  USHORT Version;
-  USHORT Size;
-  struct _DMA_OPERATIONS* DmaOperations;
+  USHORT  Version;
+  USHORT  Size;
+  struct _DMA_OPERATIONS*  DmaOperations;
 } DMA_ADAPTER, *PDMA_ADAPTER;
 
 typedef VOID
-(NTAPI *PPUT_DMA_ADAPTER)(
-  IN PDMA_ADAPTER DmaAdapter);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *PFREE_ADAPTER_CHANNEL)(
+  IN PDMA_ADAPTER  DmaAdapter);
 
 typedef VOID
-(NTAPI *PFREE_MAP_REGISTERS)(
-  IN PDMA_ADAPTER DmaAdapter,
-  PVOID MapRegisterBase,
-  ULONG NumberOfMapRegisters);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *PGET_DMA_ALIGNMENT)(
+  IN PDMA_ADAPTER  DmaAdapter);
 
 typedef ULONG
-(NTAPI *PREAD_DMA_COUNTER)(
-  IN PDMA_ADAPTER DmaAdapter);
+(DDKAPI *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;
+(DDKAPI *PDRIVER_LIST_CONTROL)(
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN struct _IRP  *Irp,
+  IN struct _SCATTER_GATHER_LIST  *ScatterGather,
+  IN PVOID  Context);
 
 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);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *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;
+  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;
+  UCHAR  Option;
+  UCHAR  Type;
+  UCHAR  ShareDisposition;
+  UCHAR  Spare1;
+  USHORT  Flags;
+  USHORT  Spare2;
   union {
     struct {
-      ULONG Length;
-      ULONG Alignment;
-      PHYSICAL_ADDRESS MinimumAddress;
-      PHYSICAL_ADDRESS MaximumAddress;
+      ULONG  Length;
+      ULONG  Alignment;
+      PHYSICAL_ADDRESS  MinimumAddress;
+      PHYSICAL_ADDRESS  MaximumAddress;
     } Port;
     struct {
-      ULONG Length;
-      ULONG Alignment;
-      PHYSICAL_ADDRESS MinimumAddress;
-      PHYSICAL_ADDRESS MaximumAddress;
+      ULONG  Length;
+      ULONG  Alignment;
+      PHYSICAL_ADDRESS  MinimumAddress;
+      PHYSICAL_ADDRESS  MaximumAddress;
     } Memory;
     struct {
-      ULONG MinimumVector;
-      ULONG MaximumVector;
+      ULONG  MinimumVector;
+      ULONG  MaximumVector;
     } Interrupt;
     struct {
-      ULONG MinimumChannel;
-      ULONG MaximumChannel;
+      ULONG  MinimumChannel;
+      ULONG  MaximumChannel;
     } Dma;
     struct {
-      ULONG Length;
-      ULONG Alignment;
-      PHYSICAL_ADDRESS MinimumAddress;
-      PHYSICAL_ADDRESS MaximumAddress;
+      ULONG  Length;
+      ULONG  Alignment;
+      PHYSICAL_ADDRESS  MinimumAddress;
+      PHYSICAL_ADDRESS  MaximumAddress;
     } Generic;
     struct {
-      ULONG Data[3];
+      ULONG  Data[3];
     } DevicePrivate;
     struct {
-      ULONG Length;
-      ULONG MinBusNumber;
-      ULONG MaxBusNumber;
-      ULONG Reserved;
+      ULONG  Length;
+      ULONG  MinBusNumber;
+      ULONG  MaxBusNumber;
+      ULONG  Reserved;
     } BusNumber;
     struct {
-      ULONG Priority;
-      ULONG Reserved1;
-      ULONG Reserved2;
+      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];
+  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];
+  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);
+(DDKAPI 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;
+  CSHORT  Type;
+  USHORT  Size;
+  struct _MDL  *MdlAddress;
+  ULONG  Flags;
   union {
-    struct _IRP *MasterIrp;
-    volatile LONG IrpCount;
-    PVOID SystemBuffer;
+    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;
+  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;
+      _ANONYMOUS_UNION union {      
+        PIO_APC_ROUTINE  UserApcRoutine;
         PVOID IssuingProcess;
       } DUMMYUNIONNAME;
-      PVOID UserApcContext;
+      PVOID  UserApcContext;
     } AsynchronousParameters;
-    LARGE_INTEGER AllocationSize;
+    LARGE_INTEGER  AllocationSize;
   } Overlay;
-  volatile PDRIVER_CANCEL CancelRoutine;
-  PVOID UserBuffer;
+  volatile PDRIVER_CANCEL  CancelRoutine;
+  PVOID  UserBuffer;
   union {
     struct {
       _ANONYMOUS_UNION union {
-        KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
+        KDEVICE_QUEUE_ENTRY  DeviceQueueEntry;
         _ANONYMOUS_STRUCT struct {
-          PVOID DriverContext[4];
+          PVOID  DriverContext[4];
         } DUMMYSTRUCTNAME;
       } DUMMYUNIONNAME;
-      PETHREAD Thread;
-      PCHAR AuxiliaryBuffer;
+      PETHREAD  Thread;
+      PCHAR  AuxiliaryBuffer;
       _ANONYMOUS_STRUCT struct {
-        LIST_ENTRY ListEntry;
+        LIST_ENTRY  ListEntry;
         _ANONYMOUS_UNION union {
-          struct _IO_STACK_LOCATION *CurrentStackLocation;
-          ULONG PacketType;
+          struct _IO_STACK_LOCATION  *CurrentStackLocation;
+          ULONG  PacketType;
         } DUMMYUNIONNAME;
       } DUMMYSTRUCTNAME;
-      struct _FILE_OBJECT *OriginalFileObject;
+      struct _FILE_OBJECT  *OriginalFileObject;
     } Overlay;
-    KAPC Apc;
-    PVOID CompletionKey;
+    KAPC  Apc;
+    PVOID  CompletionKey;
   } Tail;
-} IRP, *PIRP;
+} IRP;
+typedef struct _IRP *PIRP;
 
 typedef enum _IO_PAGING_PRIORITY {
   IoPagingPriorityInvalid,
@@ -6015,96 +4824,93 @@ typedef enum _IO_PAGING_PRIORITY {
 } IO_PAGING_PRIORITY;
 
 typedef NTSTATUS
-(NTAPI IO_COMPLETION_ROUTINE)(
-  IN struct _DEVICE_OBJECT *DeviceObject,
-  IN struct _IRP *Irp,
-  IN PVOID Context);
+(DDKAPI 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;
+(DDKAPI *PIO_DPC_ROUTINE)(
+  IN struct _KDPC  *Dpc,
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN struct _IRP  *Irp,
+  IN PVOID  Context);
 
 typedef NTSTATUS
-(NTAPI *PMM_DLL_INITIALIZE)(
-  IN PUNICODE_STRING RegistryPath);
+(DDKAPI *PMM_DLL_INITIALIZE)(
+  IN PUNICODE_STRING  RegistryPath);
 
 typedef NTSTATUS
-(NTAPI *PMM_DLL_UNLOAD)(
+(DDKAPI *PMM_DLL_UNLOAD)(
   VOID);
 
+typedef BOOLEAN
+(DDKAPI KSERVICE_ROUTINE)(
+  IN struct _KINTERRUPT  *Interrupt,
+  IN PVOID  ServiceContext);
+typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE;
+
 typedef VOID
-(NTAPI IO_TIMER_ROUTINE)(
-  IN struct _DEVICE_OBJECT *DeviceObject,
-  IN PVOID Context);
-typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
+(DDKAPI *PIO_TIMER_ROUTINE)(
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN PVOID  Context);
 
 typedef struct _IO_SECURITY_CONTEXT {
-  PSECURITY_QUALITY_OF_SERVICE SecurityQos;
-  PACCESS_STATE AccessState;
-  ACCESS_MASK DesiredAccess;
-  ULONG FullCreateOptions;
+  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;
+  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;
+(DDKAPI *PIO_CSQ_INSERT_IRP)(
+  IN struct _IO_CSQ  *Csq,
+  IN PIRP  Irp);
 
 typedef VOID
-(NTAPI *PIO_CSQ_REMOVE_IRP)(
-  IN struct _IO_CSQ *Csq,
-  IN PIRP Irp);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *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);
+(DDKAPI *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;
+  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 {
@@ -6120,321 +4926,198 @@ typedef enum _DEVICE_TEXT_TYPE {
   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;
+typedef enum _WORK_QUEUE_TYPE {
+  CriticalWorkQueue,
+  DelayedWorkQueue,
+  HyperCriticalWorkQueue,
+  MaximumWorkQueue
+} WORK_QUEUE_TYPE;
 
 #if !defined(_AMD64_) && !defined(_IA64_)
 #include <pshpack4.h>
 #endif
 typedef struct _IO_STACK_LOCATION {
-  UCHAR MajorFunction;
-  UCHAR MinorFunction;
-  UCHAR Flags;
-  UCHAR Control;
+  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;
+      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;
+      ULONG  Length;
+      ULONG POINTER_ALIGNMENT  Key;
+      LARGE_INTEGER  ByteOffset;
     } Read;
     struct {
-      ULONG Length;
-      ULONG POINTER_ALIGNMENT Key;
-      LARGE_INTEGER ByteOffset;
+      ULONG  Length;
+      ULONG POINTER_ALIGNMENT  Key;
+      LARGE_INTEGER  ByteOffset;
     } Write;
     struct {
-      ULONG Length;
-      PUNICODE_STRING FileName;
-      FILE_INFORMATION_CLASS FileInformationClass;
-      ULONG FileIndex;
+      ULONG  Length;
+      PUNICODE_STRING  FileName;
+      FILE_INFORMATION_CLASS  FileInformationClass;
+      ULONG  FileIndex;
     } QueryDirectory;
     struct {
-      ULONG Length;
-      ULONG CompletionFilter;
+      ULONG  Length;
+      ULONG  CompletionFilter;
     } NotifyDirectory;
     struct {
-      ULONG Length;
-      FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+      ULONG  Length;
+      FILE_INFORMATION_CLASS POINTER_ALIGNMENT  FileInformationClass;
     } QueryFile;
     struct {
-      ULONG Length;
-      FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
-      PFILE_OBJECT FileObject;
+      ULONG  Length;
+      FILE_INFORMATION_CLASS POINTER_ALIGNMENT  FileInformationClass;
+      PFILE_OBJECT  FileObject;
       _ANONYMOUS_UNION union {
         _ANONYMOUS_STRUCT struct {
-          BOOLEAN ReplaceIfExists;
-          BOOLEAN AdvanceOnly;
+          BOOLEAN  ReplaceIfExists;
+          BOOLEAN  AdvanceOnly;
         } DUMMYSTRUCTNAME;
-        ULONG ClusterCount;
-        HANDLE DeleteHandle;
+        ULONG  ClusterCount;
+        HANDLE  DeleteHandle;
       } DUMMYUNIONNAME;
     } SetFile;
     struct {
-      ULONG Length;
-      PVOID EaList;
-      ULONG EaListLength;
-      ULONG EaIndex;
+      ULONG  Length;
+      PVOID  EaList;
+      ULONG  EaListLength;
+      ULONG  EaIndex;
     } QueryEa;
     struct {
-      ULONG Length;
+      ULONG  Length;
     } SetEa;
     struct {
-      ULONG Length;
-      FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
+      ULONG  Length;
+      FS_INFORMATION_CLASS POINTER_ALIGNMENT  FsInformationClass;
     } QueryVolume;
     struct {
-      ULONG Length;
-      FS_INFORMATION_CLASS FsInformationClass;
+      ULONG  Length;
+      FS_INFORMATION_CLASS  FsInformationClass;
     } SetVolume;
     struct {
-      ULONG OutputBufferLength;
-      ULONG InputBufferLength;
-      ULONG FsControlCode;
-      PVOID Type3InputBuffer;
+      ULONG  OutputBufferLength;
+      ULONG  InputBufferLength;
+      ULONG  FsControlCode;
+      PVOID  Type3InputBuffer;
     } FileSystemControl;
     struct {
-      PLARGE_INTEGER Length;
-      ULONG Key;
-      LARGE_INTEGER ByteOffset;
+      PLARGE_INTEGER  Length;
+      ULONG  Key;
+      LARGE_INTEGER  ByteOffset;
     } LockControl;
     struct {
-      ULONG OutputBufferLength;
-      ULONG POINTER_ALIGNMENT InputBufferLength;
-      ULONG POINTER_ALIGNMENT IoControlCode;
-      PVOID Type3InputBuffer;
+      ULONG  OutputBufferLength;
+      ULONG POINTER_ALIGNMENT  InputBufferLength;
+      ULONG POINTER_ALIGNMENT  IoControlCode;
+      PVOID  Type3InputBuffer;
     } DeviceIoControl;
     struct {
-      SECURITY_INFORMATION SecurityInformation;
-      ULONG POINTER_ALIGNMENT Length;
+      SECURITY_INFORMATION  SecurityInformation;
+      ULONG POINTER_ALIGNMENT  Length;
     } QuerySecurity;
     struct {
-      SECURITY_INFORMATION SecurityInformation;
-      PSECURITY_DESCRIPTOR SecurityDescriptor;
+      SECURITY_INFORMATION  SecurityInformation;
+      PSECURITY_DESCRIPTOR  SecurityDescriptor;
     } SetSecurity;
     struct {
-      PVPB Vpb;
-      PDEVICE_OBJECT DeviceObject;
+      PVPB  Vpb;
+      PDEVICE_OBJECT  DeviceObject;
     } MountVolume;
     struct {
-      PVPB Vpb;
-      PDEVICE_OBJECT DeviceObject;
+      PVPB  Vpb;
+      PDEVICE_OBJECT  DeviceObject;
     } VerifyVolume;
     struct {
-      struct _SCSI_REQUEST_BLOCK *Srb;
+      struct _SCSI_REQUEST_BLOCK  *Srb;
     } Scsi;
     struct {
-      ULONG Length;
-      PSID StartSid;
-      struct _FILE_GET_QUOTA_INFORMATION *SidList;
-      ULONG SidListLength;
+      ULONG  Length;
+      PSID  StartSid;
+      struct _FILE_GET_QUOTA_INFORMATION  *SidList;
+      ULONG  SidListLength;
     } QueryQuota;
     struct {
-      ULONG Length;
+      ULONG  Length;
     } SetQuota;
     struct {
-      DEVICE_RELATION_TYPE Type;
+      DEVICE_RELATION_TYPE  Type;
     } QueryDeviceRelations;
     struct {
-      CONST GUID *InterfaceType;
-      USHORT Size;
-      USHORT Version;
-      PINTERFACE Interface;
-      PVOID InterfaceSpecificData;
+      CONST GUID  *InterfaceType;
+      USHORT  Size;
+      USHORT  Version;
+      PINTERFACE  Interface;
+      PVOID  InterfaceSpecificData;
     } QueryInterface;
     struct {
-      PDEVICE_CAPABILITIES Capabilities;
+      PDEVICE_CAPABILITIES  Capabilities;
     } DeviceCapabilities;
     struct {
-      PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
+      PIO_RESOURCE_REQUIREMENTS_LIST  IoResourceRequirementList;
     } FilterResourceRequirements;
     struct {
-      ULONG WhichSpace;
-      PVOID Buffer;
-      ULONG Offset;
-      ULONG POINTER_ALIGNMENT Length;
+      ULONG  WhichSpace;
+      PVOID  Buffer;
+      ULONG  Offset;
+      ULONG POINTER_ALIGNMENT  Length;
     } ReadWriteConfig;
     struct {
-      BOOLEAN Lock;
+      BOOLEAN  Lock;
     } SetLock;
     struct {
-      BUS_QUERY_ID_TYPE IdType;
+      BUS_QUERY_ID_TYPE  IdType;
     } QueryId;
     struct {
-      DEVICE_TEXT_TYPE DeviceTextType;
-      LCID POINTER_ALIGNMENT LocaleId;
+      DEVICE_TEXT_TYPE  DeviceTextType;
+      LCID POINTER_ALIGNMENT  LocaleId;
     } QueryDeviceText;
     struct {
-      BOOLEAN InPath;
-      BOOLEAN Reserved[3];
-      DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
+      BOOLEAN  InPath;
+      BOOLEAN  Reserved[3];
+      DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT  Type;
     } UsageNotification;
     struct {
-      SYSTEM_POWER_STATE PowerState;
+      SYSTEM_POWER_STATE  PowerState;
     } WaitWake;
     struct {
-      PPOWER_SEQUENCE PowerSequence;
+      PPOWER_SEQUENCE  PowerSequence;
     } PowerSequence;
     struct {
-      ULONG SystemContext;
-      POWER_STATE_TYPE POINTER_ALIGNMENT Type;
-      POWER_STATE POINTER_ALIGNMENT State;
-      POWER_ACTION POINTER_ALIGNMENT ShutdownType;
+      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;
+      PCM_RESOURCE_LIST  AllocatedResources;
+      PCM_RESOURCE_LIST  AllocatedResourcesTranslated;
     } StartDevice;
     struct {
-      ULONG_PTR ProviderId;
-      PVOID DataPath;
-      ULONG BufferSize;
-      PVOID Buffer;
+      ULONG_PTR  ProviderId;
+      PVOID  DataPath;
+      ULONG  BufferSize;
+      PVOID  Buffer;
     } WMI;
     struct {
-      PVOID Argument1;
-      PVOID Argument2;
-      PVOID Argument3;
-      PVOID Argument4;
+      PVOID  Argument1;
+      PVOID  Argument2;
+      PVOID  Argument3;
+      PVOID  Argument4;
     } Others;
   } Parameters;
-  PDEVICE_OBJECT DeviceObject;
-  PFILE_OBJECT FileObject;
-  PIO_COMPLETION_ROUTINE CompletionRoutine;
-  PVOID Context;
+  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>
@@ -6448,13 +5131,16 @@ typedef struct _IO_STACK_LOCATION {
 #define SL_INVOKE_ON_SUCCESS              0x40
 #define SL_INVOKE_ON_ERROR                0x80
 
+/* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
+
+#define PCI_WHICHSPACE_CONFIG             0x0
+#define PCI_WHICHSPACE_ROM                0x52696350 /* 'PciR' */
+
 #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
@@ -6501,7 +5187,6 @@ typedef struct _IO_STACK_LOCATION {
 #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
@@ -6535,10 +5220,6 @@ typedef struct _IO_STACK_LOCATION {
 #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
@@ -6577,8670 +5258,5806 @@ typedef struct _IO_STACK_LOCATION {
 
 /* 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
+/******************************************************************************
+ *                            Object Manager Types                            *
+ ******************************************************************************/
 
-#define WMIREGISTER                 0
-#define WMIUPDATE                   1
+typedef struct _OBJECT_NAME_INFORMATION {
+  UNICODE_STRING  Name;
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
 
-typedef VOID
-(NTAPI FWMI_NOTIFICATION_CALLBACK)(
-  PVOID Wnode,
-  PVOID Context);
-typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK;
+/* Exported object types */
+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;
 
-#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;
+/******************************************************************************
+ *                           Process Manager Types                            *
+ ******************************************************************************/
 
-#define PCI_TYPE0_ADDRESSES               6
-#define PCI_TYPE1_ADDRESSES               2
-#define PCI_TYPE2_ADDRESSES               5
+#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 _PCI_COMMON_HEADER {
-  PCI_COMMON_HEADER_LAYOUT
-} PCI_COMMON_HEADER, *PPCI_COMMON_HEADER;
+/* Process Qoutas */
+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;
 
-#ifdef __cplusplus
-typedef struct _PCI_COMMON_CONFIG {
-  PCI_COMMON_HEADER_LAYOUT
-  UCHAR DeviceSpecific[192];
-} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
+/* 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
-typedef struct _PCI_COMMON_CONFIG {
-  PCI_COMMON_HEADER DUMMYSTRUCTNAME;
-  UCHAR DeviceSpecific[192];
-} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
+#define PROCESS_ALL_ACCESS  (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
 #endif
 
-#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
+#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 PCI_EXTENDED_CONFIG_LENGTH               0x1000
+#define ES_SYSTEM_REQUIRED                0x00000001
+#define ES_DISPLAY_REQUIRED               0x00000002
+#define ES_USER_PRESENT                   0x00000004
+#define ES_CONTINUOUS                     0x80000000
 
-#define PCI_MAX_DEVICES        32
-#define PCI_MAX_FUNCTION       8
-#define PCI_MAX_BRIDGE_NUMBER  0xFF
-#define PCI_INVALID_VENDORID   0xFFFF
+#define LOW_PRIORITY                      0
+#define LOW_REALTIME_PRIORITY             16
+#define HIGH_PRIORITY                     31
+#define MAXIMUM_PRIORITY                  32
 
-/* 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)
+#ifdef _X86_
+/** Kernel definitions for x86 **/
 
-#define PCI_MULTIFUNCTION_DEVICE(PciData) \
-  ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
+/* 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)
 
-/* 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
+#define KIP0PCRADDRESS          0xffdff000  
+#define KI_USER_SHARED_DATA     0xffdf0000
+#define SharedUserData          ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
 
-/* 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
+#define PAGE_SIZE               0x1000
+#define PAGE_SHIFT              12L
+#define KeGetDcacheFillSize()   1L
 
-/* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
+#define EFLAG_SIGN              0x8000
+#define EFLAG_ZERO              0x4000
+#define EFLAG_SELECT            (EFLAG_SIGN | EFLAG_ZERO)
 
-#define PCI_WHICHSPACE_CONFIG             0x0
-#define PCI_WHICHSPACE_ROM                0x52696350 /* 'PciR' */
+#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)
 
-#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;
+typedef struct _KFLOATING_SAVE {
+  ULONG  ControlWord;
+  ULONG  StatusWord;
+  ULONG  ErrorOffset;
+  ULONG  ErrorSelector;
+  ULONG  DataOffset;
+  ULONG  DataSelector;
+  ULONG  Cr0NpxState;
+  ULONG  Spare1;
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
 
-/* 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
+extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
 
-/* PCI device subclasses for class 0 */
-#define PCI_SUBCLASS_PRE_20_NON_VGA         0x00
-#define PCI_SUBCLASS_PRE_20_VGA             0x01
+#define YieldProcessor _mm_pause
 
-/* 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
+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
+}
 
-/* 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
+NTHALAPI
+VOID
+FASTCALL
+KfLowerIrql(
+  IN KIRQL  NewIrql);
+#define KeLowerIrql(a) KfLowerIrql(a)
 
-/* 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
+NTHALAPI
+KIRQL
+FASTCALL
+KfRaiseIrql(
+  IN KIRQL  NewIrql);
+#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
 
-/* 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
+NTHALAPI
+KIRQL
+DDKAPI
+KeRaiseIrqlToDpcLevel(
+  VOID);
 
-/* 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
+NTHALAPI
+KIRQL
+DDKAPI
+KeRaiseIrqlToSynchLevel(
+    VOID);
 
-/* 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
+NTHALAPI
+KIRQL
+FASTCALL
+KfAcquireSpinLock(
+  IN PKSPIN_LOCK SpinLock);
+#define KeAcquireSpinLock(a,b)  *(b) = KfAcquireSpinLock(a)
 
-#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
+NTHALAPI
+VOID
+FASTCALL
+KfReleaseSpinLock(
+  IN PKSPIN_LOCK SpinLock,
+  IN KIRQL NewIrql);
+#define KeReleaseSpinLock(a,b)  KfReleaseSpinLock(a,b)
 
-/* 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
+NTKERNELAPI
+VOID
+FASTCALL
+KefAcquireSpinLockAtDpcLevel(
+  IN PKSPIN_LOCK  SpinLock);
+#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
 
-#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
+NTKERNELAPI
+VOID
+FASTCALL
+KefReleaseSpinLockFromDpcLevel(
+  IN PKSPIN_LOCK  SpinLock);
+#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
 
-#define PCI_SUBCLASS_INTIO_I2O              0x00
+NTSYSAPI
+PKTHREAD
+NTAPI
+KeGetCurrentThread(
+  VOID);
 
-#define PCI_SUBCLASS_SAT_TV                 0x01
-#define PCI_SUBCLASS_SAT_AUDIO              0x02
-#define PCI_SUBCLASS_SAT_VOICE              0x03
-#define PCI_SUBCLASS_SAT_DATA               0x04
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeSaveFloatingPointState(
+  OUT PKFLOATING_SAVE  FloatSave);
 
-#define PCI_SUBCLASS_CRYPTO_NET_COMP        0x00
-#define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT   0x10
-#define PCI_SUBCLASS_CRYPTO_OTHER           0x80
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeRestoreFloatingPointState(
+  IN PKFLOATING_SAVE  FloatSave);
 
-#define PCI_SUBCLASS_DASP_DPIO              0x00
-#define PCI_SUBCLASS_DASP_OTHER             0x80
+/* VOID
+ * KeFlushIoBuffers(
+ *   IN PMDL Mdl,
+ *   IN BOOLEAN ReadOperation,
+ *   IN BOOLEAN DmaOperation)
+ */
+#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
 
-#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
+/* x86 and x64 performs a 0x2C interrupt */
+#define DbgRaiseAssertionFailure __int2c
 
-#define PCI_TYPE_32BIT                      0
-#define PCI_TYPE_20BIT                      2
-#define PCI_TYPE_64BIT                      4
+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)
 
-#define PCI_ROMADDRESS_ENABLED              0x00000001
+#endif /* _X86_ */
 
-#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;
+/******************************************************************************
+ *                         Runtime Library Functions                          *
+ ******************************************************************************/
 
-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;
+FORCEINLINE
+VOID
+InitializeListHead(
+  OUT PLIST_ENTRY ListHead)
+{
+  ListHead->Flink = ListHead->Blink = ListHead;
+}
 
-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;
+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;
+}
 
-#define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION            1
+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;
+}
 
-typedef ULONG
-(NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)(
-  IN PVOID Context,
-  OUT PVOID Buffer,
-  IN ULONG Offset,
-  IN ULONG Length);
+BOOLEAN
+FORCEINLINE
+IsListEmpty(
+  IN CONST LIST_ENTRY * ListHead)
+{
+  return (BOOLEAN)(ListHead->Flink == ListHead);
+}
 
-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;
+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;
+}
 
-#define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION            1
+FORCEINLINE
+VOID
+PushEntryList(
+  IN OUT PSINGLE_LIST_ENTRY ListHead,
+  IN OUT PSINGLE_LIST_ENTRY Entry)
+{
+  Entry->Next = ListHead->Next;
+  ListHead->Next = Entry;
+}
 
-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;
+FORCEINLINE
+BOOLEAN
+RemoveEntryList(
+  IN PLIST_ENTRY  Entry)
+{
+  PLIST_ENTRY OldFlink;
+  PLIST_ENTRY OldBlink;
 
-typedef NTSTATUS
-(NTAPI PCI_MSIX_MASKUNMASK_ENTRY)(
-  IN PVOID Context,
-  IN ULONG TableEntry);
-typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY;
+  OldFlink = Entry->Flink;
+  OldBlink = Entry->Blink;
+  OldFlink->Blink = OldBlink;
+  OldBlink->Flink = OldFlink;
+  return (BOOLEAN)(OldFlink == OldBlink);
+}
 
-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;
+FORCEINLINE
+PLIST_ENTRY
+RemoveHeadList(
+  IN OUT PLIST_ENTRY  ListHead)
+{
+  PLIST_ENTRY Flink;
+  PLIST_ENTRY 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;
+  Entry = ListHead->Flink;
+  Flink = Entry->Flink;
+  ListHead->Flink = Flink;
+  Flink->Blink = ListHead;
+  return Entry;
+}
 
-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)
+FORCEINLINE
+PLIST_ENTRY
+RemoveTailList(
+  IN OUT PLIST_ENTRY  ListHead)
+{
+  PLIST_ENTRY Blink;
+  PLIST_ENTRY Entry;
 
-/******************************************************************************
- *                            Object Manager Types                            *
- ******************************************************************************/
+  Entry = ListHead->Blink;
+  Blink = Entry->Blink;
+  ListHead->Blink = Blink;
+  Blink->Flink = ListHead;
+  return Entry;
+}
 
-#define OB_FLT_REGISTRATION_VERSION_0100         0x0100
-#define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
+NTSYSAPI
+VOID
+NTAPI
+RtlAssert(
+    IN PVOID FailedAssertion,
+    IN PVOID FileName,
+    IN ULONG LineNumber,
+    IN PSTR Message);
 
-typedef ULONG OB_OPERATION;
+/* 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 OB_OPERATION_HANDLE_CREATE               0x00000001
-#define OB_OPERATION_HANDLE_DUPLICATE            0x00000002
+#define RtlCopyBytes RtlCopyMemory
 
-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;
+#if defined(_M_AMD64)
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyMemoryNonTemporal(
+    VOID UNALIGNED *Destination,
+    CONST VOID UNALIGNED *Source,
+    SIZE_T Length);
+#else
+#define RtlCopyMemoryNonTemporal RtlCopyMemory
+#endif
 
-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;
+/* BOOLEAN
+ * RtlEqualLuid(
+ *     IN PLUID Luid1,
+ *     IN PLUID Luid2)
+ */
+#define RtlEqualLuid(Luid1, Luid2) \
+    (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
 
-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;
+/* ULONG
+ * RtlEqualMemory(
+ *     IN VOID UNALIGNED *Destination,
+ *     IN CONST VOID UNALIGNED *Source,
+ *     IN SIZE_T Length)
+ */
+#define RtlEqualMemory(Destination, Source, Length) \
+    (!memcmp(Destination, Source, Length))
 
-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);
+/* VOID
+ * RtlFillMemory(
+ *     IN VOID UNALIGNED *Destination,
+ *     IN SIZE_T Length,
+ *     IN UCHAR Fill)
+ */
+#define RtlFillMemory(Destination, Length, Fill) \
+    memset(Destination, Fill, Length)
 
-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;
+#define RtlFillBytes RtlFillMemory
 
-typedef struct _OBJECT_NAME_INFORMATION {
-  UNICODE_STRING Name;
-} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeUnicodeString(
+    IN OUT PUNICODE_STRING UnicodeString);
 
-/* 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;
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGUIDFromString(
+    IN PUNICODE_STRING GuidString,
+    OUT GUID *Guid);
 
+NTSYSAPI
+VOID
+NTAPI
+RtlInitUnicodeString(
+    IN OUT PUNICODE_STRING DestinationString,
+    IN PCWSTR SourceString OPTIONAL);
 
-/******************************************************************************
- *                           Process Manager Types                            *
- ******************************************************************************/
+/* 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);
 
-#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
+/* VOID
+ * RtlZeroMemory(
+ *     IN VOID UNALIGNED *Destination,
+ *     IN SIZE_T Length)
+ */
+#define RtlZeroMemory(Destination, Length) \
+    memset(Destination, 0, Length)
 
-/* 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 RtlZeroBytes RtlZeroMemory
 
-#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_WIN2K)
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAreBitsClear(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG StartingIndex,
+    IN ULONG Length);
 
-#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
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAreBitsSet(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG StartingIndex,
+    IN ULONG Length);
 
-#define LOW_PRIORITY                      0
-#define LOW_REALTIME_PRIORITY             16
-#define HIGH_PRIORITY                     31
-#define MAXIMUM_PRIORITY                  32
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAnsiStringToUnicodeString(
+    IN OUT PUNICODE_STRING DestinationString,
+    IN PANSI_STRING SourceString,
+    IN BOOLEAN AllocateDestinationString);
 
-/******************************************************************************
- *                          WMI Library Support Types                         *
- ******************************************************************************/
+NTSYSAPI
+ULONG
+NTAPI
+RtlxAnsiStringToUnicodeSize(
+    IN PCANSI_STRING AnsiString);
 
-#ifdef RUN_WPP
-#include <evntrace.h>
-#include <stdarg.h>
-#endif
+#define RtlAnsiStringToUnicodeSize(String) (               \
+  NLS_MB_CODE_PAGE_TAG ?                                   \
+  RtlxAnsiStringToUnicodeSize(String) :                    \
+  ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR)   \
+)
 
-#ifndef TRACE_INFORMATION_CLASS_DEFINE
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendUnicodeStringToString(
+    IN OUT PUNICODE_STRING Destination,
+    IN PCUNICODE_STRING Source);
 
-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;
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendUnicodeToString(
+    IN OUT PUNICODE_STRING Destination,
+    IN PCWSTR Source);
 
-typedef enum _TRACE_INFORMATION_CLASS {
-  TraceIdClass,
-  TraceHandleClass,
-  TraceEnableFlagsClass,
-  TraceEnableLevelClass,
-  GlobalLoggerHandleClass,
-  EventLoggerHandleClass,
-  AllLoggerHandlesClass,
-  TraceHandleByNameClass,
-  LoggerEventsLostClass,
-  TraceSessionSettingsClass,
-  LoggerEventsLoggedClass,
-  MaxTraceInformationClass
-} TRACE_INFORMATION_CLASS;
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCheckRegistryKey(
+    IN ULONG RelativeTo,
+    IN PWSTR Path);
 
-#endif /* TRACE_INFORMATION_CLASS_DEFINE */
+NTSYSAPI
+VOID
+NTAPI
+RtlClearAllBits(
+    IN PRTL_BITMAP BitMapHeader);
 
-#ifndef _ETW_KM_
-#define _ETW_KM_
-#endif
+NTSYSAPI
+VOID
+NTAPI
+RtlClearBits(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG StartingIndex,
+    IN ULONG NumberToClear);
 
-#include <evntprov.h>
+NTSYSAPI
+SIZE_T
+NTAPI
+RtlCompareMemory(
+    IN CONST VOID *Source1,
+    IN CONST VOID *Source2,
+    IN SIZE_T Length);
 
-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);
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareUnicodeString(
+    IN PCUNICODE_STRING String1,
+    IN PCUNICODE_STRING String2,
+    IN BOOLEAN CaseInSensitive);
 
-#define EVENT_WRITE_FLAG_NO_FAULTING             0x00000001
+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);
 
-#if defined(_M_IX86)
-/** Kernel definitions for x86 **/
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateRegistryKey(
+    IN ULONG RelativeTo,
+    IN PWSTR Path);
 
-/* 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
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateSecurityDescriptor(
+    IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+    IN ULONG Revision);
 
-#define KIP0PCRADDRESS          0xffdff000
-#define KI_USER_SHARED_DATA     0xffdf0000
-#define SharedUserData          ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteRegistryValue(
+    IN ULONG RelativeTo,
+    IN PCWSTR Path,
+    IN PCWSTR ValueName);
 
-#define PAGE_SIZE               0x1000
-#define PAGE_SHIFT              12L
-#define KeGetDcacheFillSize()   1L
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlEqualUnicodeString(
+    IN CONST UNICODE_STRING *String1,
+    IN CONST UNICODE_STRING *String2,
+    IN BOOLEAN CaseInSensitive);
 
-#define EFLAG_SIGN              0x8000
-#define EFLAG_ZERO              0x4000
-#define EFLAG_SELECT            (EFLAG_SIGN | EFLAG_ZERO)
+#if !defined(_AMD64_) && !defined(_IA64_)
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedIntegerMultiply(
+    IN LARGE_INTEGER Multiplicand,
+    IN LONG Multiplier);
 
-#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)
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedLargeIntegerDivide(
+  IN LARGE_INTEGER Dividend,
+  IN ULONG Divisor,
+  IN OUT PULONG Remainder);
+#endif
 
+#if defined(_X86_) || defined(_IA64_)
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedMagicDivide(
+    IN LARGE_INTEGER Dividend,
+    IN LARGE_INTEGER MagicDivisor,
+    IN CCHAR  ShiftCount);
+#endif
 
-typedef struct _KFLOATING_SAVE {
-  ULONG ControlWord;
-  ULONG StatusWord;
-  ULONG ErrorOffset;
-  ULONG ErrorSelector;
-  ULONG DataOffset;
-  ULONG DataSelector;
-  ULONG Cr0NpxState;
-  ULONG Spare1;
-} KFLOATING_SAVE, *PKFLOATING_SAVE;
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeAnsiString(
+    IN PANSI_STRING AnsiString);
 
-extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearBits(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG NumberToFind,
+    IN ULONG HintIndex);
 
-#define YieldProcessor _mm_pause
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearBitsAndSet(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG NumberToFind,
+    IN ULONG HintIndex);
 
-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
-}
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindFirstRunClear(
+    IN PRTL_BITMAP BitMapHeader,
+    OUT PULONG StartingIndex);
 
-NTHALAPI
-VOID
-FASTCALL
-KfLowerIrql(
-  IN KIRQL NewIrql);
-#define KeLowerIrql(a) KfLowerIrql(a)
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearRuns(
+    IN PRTL_BITMAP BitMapHeader,
+    OUT PRTL_BITMAP_RUN RunArray,
+    IN ULONG SizeOfRunArray,
+    IN BOOLEAN LocateLongestRuns);
 
-NTHALAPI
-KIRQL
-FASTCALL
-KfRaiseIrql(
-  IN KIRQL NewIrql);
-#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindLastBackwardRunClear(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG FromIndex,
+    OUT PULONG StartingRunIndex);
 
-NTHALAPI
-KIRQL
+NTSYSAPI
+CCHAR
 NTAPI
-KeRaiseIrqlToDpcLevel(VOID);
+RtlFindLeastSignificantBit(
+    IN ULONGLONG Set);
 
-NTHALAPI
-KIRQL
+NTSYSAPI
+ULONG
 NTAPI
-KeRaiseIrqlToSynchLevel(VOID);
+RtlFindLongestRunClear(
+    IN PRTL_BITMAP BitMapHeader,
+    OUT PULONG StartingIndex);
 
-NTHALAPI
-KIRQL
-FASTCALL
-KfAcquireSpinLock(
-  IN OUT PKSPIN_LOCK SpinLock);
-#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
+NTSYSAPI
+CCHAR
+NTAPI
+RtlFindMostSignificantBit(
+    IN ULONGLONG Set);
 
-NTHALAPI
-VOID
-FASTCALL
-KfReleaseSpinLock(
-  IN OUT PKSPIN_LOCK SpinLock,
-  IN KIRQL NewIrql);
-#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindNextForwardRunClear(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG FromIndex,
+    OUT PULONG StartingRunIndex);
 
-NTKERNELAPI
+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
+NTSTATUS
+NTAPI
+RtlHashUnicodeString(
+    IN CONST UNICODE_STRING *String,
+    IN BOOLEAN CaseInSensitive,
+    IN ULONG HashAlgorithm,
+    OUT PULONG HashValue);
+
+NTSYSAPI
 VOID
-FASTCALL
-KefAcquireSpinLockAtDpcLevel(
-  IN OUT PKSPIN_LOCK SpinLock);
-#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
+NTAPI
+RtlInitAnsiString(
+    IN OUT PANSI_STRING DestinationString,
+    IN PCSZ SourceString);
 
-NTKERNELAPI
+NTSYSAPI
 VOID
-FASTCALL
-KefReleaseSpinLockFromDpcLevel(
-  IN OUT PKSPIN_LOCK SpinLock);
-#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
+NTAPI
+RtlInitializeBitMap(
+    IN PRTL_BITMAP BitMapHeader,
+    IN PULONG BitMapBuffer,
+    IN ULONG SizeOfBitMap);
 
 NTSYSAPI
-PKTHREAD
+VOID
 NTAPI
-KeGetCurrentThread(VOID);
+RtlInitString(
+    IN OUT PSTRING DestinationString,
+    IN PCSZ SourceString);
 
-NTKERNELAPI
+NTSYSAPI
 NTSTATUS
 NTAPI
-KeSaveFloatingPointState(
-  OUT PKFLOATING_SAVE FloatSave);
+RtlIntegerToUnicodeString(
+    IN ULONG Value,
+    IN ULONG Base OPTIONAL,
+    IN OUT PUNICODE_STRING String);
 
-NTKERNELAPI
+NTSYSAPI
 NTSTATUS
 NTAPI
-KeRestoreFloatingPointState(
-  IN PKFLOATING_SAVE FloatSave);
+RtlInt64ToUnicodeString(
+    IN ULONGLONG Value,
+    IN ULONG Base OPTIONAL,
+    IN OUT PUNICODE_STRING String);
 
-/* VOID
- * KeFlushIoBuffers(
- *   IN PMDL Mdl,
- *   IN BOOLEAN ReadOperation,
- *   IN BOOLEAN DmaOperation)
- */
-#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
+#ifdef _WIN64
+#define RtlIntPtrToUnicodeString(Value, Base, String) \
+    RtlInt64ToUnicodeString(Value, Base, String)
+#else
+#define RtlIntPtrToUnicodeString(Value, Base, String) \
+    RtlIntegerToUnicodeString(Value, Base, String)
+#endif
 
-/* x86 and x64 performs a 0x2C interrupt */
-#define DbgRaiseAssertionFailure __int2c
+/* BOOLEAN
+ * RtlIsZeroLuid(
+ *     IN PLUID L1);
+ */
+#define RtlIsZeroLuid(_L1) \
+    ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
 
-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)
+NTSYSAPI
+ULONG
+NTAPI
+RtlLengthSecurityDescriptor(
+    IN PSECURITY_DESCRIPTOR SecurityDescriptor);
 
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberOfClearBits(
+    IN PRTL_BITMAP BitMapHeader);
 
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberOfSetBits(
+    IN PRTL_BITMAP BitMapHeader);
 
-#elif defined(_M_AMD64)
-/** Kernel definitions for AMD64 **/
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryRegistryValues(
+    IN ULONG RelativeTo,
+    IN PCWSTR Path,
+    IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
+    IN PVOID Context,
+    IN PVOID Environment OPTIONAL);
 
-/* 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 LONG_SIZE (sizeof(LONG))
+#define LONG_MASK (LONG_SIZE - 1)
 
-#define PAGE_SIZE               0x1000
-#define PAGE_SHIFT              12L
-
-#define KI_USER_SHARED_DATA     0xFFFFF78000000000UI64
-#define SharedUserData          ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
+/* VOID
+ * RtlRetrieveUlong(
+ *       PULONG DestinationAddress,
+ *       PULONG SourceAddress);
+ */
+#if defined(_AMD64_)
+#define RtlRetrieveUlong(DestAddress,SrcAddress) \
+    *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
+#else
+#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
 
+/* VOID
+ * RtlRetrieveUshort(
+ *       PUSHORT DestinationAddress,
+ *       PUSHORT SourceAddress);
+ */
+#if defined(_AMD64_)
+#define RtlRetrieveUshort(DestAddress,SrcAddress) \
+    *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
+#else
+#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)); \
+    }
+#endif
 
-typedef struct _KFLOATING_SAVE {
-  ULONG Dummy;
-} KFLOATING_SAVE, *PKFLOATING_SAVE;
+NTSYSAPI
+VOID
+NTAPI
+RtlSetAllBits(
+    IN PRTL_BITMAP BitMapHeader);
 
-typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
+NTSYSAPI
+VOID
+NTAPI
+RtlSetBits(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG StartingIndex,
+    IN ULONG NumberToSet);
 
-#define KeQueryInterruptTime() \
-    (*(volatile ULONG64*)SharedInterruptTime)
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetDaclSecurityDescriptor(
+    IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+    IN BOOLEAN DaclPresent,
+    IN PACL Dacl OPTIONAL,
+    IN BOOLEAN DaclDefaulted OPTIONAL);
 
-#define KeQuerySystemTime(CurrentCount) \
-    *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
+/* VOID
+ * RtlStoreUlong(
+ *     IN PULONG Address,
+ *     IN ULONG Value);
+ */
+#if defined(_AMD64_)
+#define RtlStoreUlong(Address,Value) \
+    *(ULONG UNALIGNED *)(Address) = (Value)
+#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); \
+    }
+#endif
 
-#define KeQueryTickCount(CurrentCount) \
-    *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
+/* VOID
+ * RtlStoreUlonglong(
+ *     IN OUT PULONGLONG Address,
+ *     ULONGLONG Value);
+ */
+#if defined(_AMD64_)
+#define RtlStoreUlonglong(Address,Value) \
+    *(ULONGLONG UNALIGNED *)(Address) = (Value)
+#else
+#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); \
+    }
+#endif
 
-#define KeGetDcacheFillSize() 1L
+/* VOID
+ * RtlStoreUlongPtr(
+ *     IN OUT PULONG_PTR Address,
+ *     IN ULONG_PTR Value);
+ */
+#ifdef _WIN64
+#define RtlStoreUlongPtr(Address,Value)                         \
+    RtlStoreUlonglong(Address,Value)
+#else
+#define RtlStoreUlongPtr(Address,Value)                         \
+    RtlStoreUlong(Address,Value)
+#endif
 
-#define YieldProcessor _mm_pause
+/* VOID
+ * RtlStoreUshort(
+ *     IN PUSHORT Address,
+ *     IN USHORT Value);
+ */
+#if defined(_AMD64_)
+#define RtlStoreUshort(Address,Value) \
+    *(USHORT UNALIGNED *)(Address) = (Value)
+#else
+#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; \
+    }
+#endif
 
-FORCEINLINE
-KIRQL
-KeGetCurrentIrql(VOID)
-{
-  return (KIRQL)__readcr8();
-}
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTimeFieldsToTime(
+    IN PTIME_FIELDS TimeFields,
+    IN PLARGE_INTEGER Time);
 
-FORCEINLINE
+NTSYSAPI
 VOID
-KeLowerIrql(IN KIRQL NewIrql)
-{
-  ASSERT(KeGetCurrentIrql() >= NewIrql);
-  __writecr8(NewIrql);
-}
+NTAPI
+RtlTimeToTimeFields(
+    IN PLARGE_INTEGER Time,
+    IN PTIME_FIELDS TimeFields);
 
-FORCEINLINE
-KIRQL
-KfRaiseIrql(IN KIRQL NewIrql)
-{
-  KIRQL OldIrql;
+NTSYSAPI
+ULONG
+FASTCALL
+RtlUlongByteSwap(
+    IN ULONG Source);
 
-  OldIrql = __readcr8();
-  ASSERT(OldIrql <= NewIrql);
-  __writecr8(NewIrql);
-  return OldIrql;
-}
-#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+NTSYSAPI
+ULONGLONG
+FASTCALL
+RtlUlonglongByteSwap(
+    IN ULONGLONG Source);
 
-FORCEINLINE
-KIRQL
-KeRaiseIrqlToDpcLevel(VOID)
-{
-  return KfRaiseIrql(DISPATCH_LEVEL);
-}
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToAnsiString(
+    IN OUT PANSI_STRING DestinationString,
+    IN PCUNICODE_STRING SourceString,
+    IN BOOLEAN AllocateDestinationString);
 
-FORCEINLINE
-KIRQL
-KeRaiseIrqlToSynchLevel(VOID)
-{
-  return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
-}
+NTSYSAPI
+ULONG
+NTAPI
+RtlxUnicodeStringToAnsiSize(
+    IN PCUNICODE_STRING UnicodeString);
 
-FORCEINLINE
-PKTHREAD
-KeGetCurrentThread(VOID)
-{
-  return (struct _KTHREAD *)__readgsqword(0x188);
-}
+#define RtlUnicodeStringToAnsiSize(String) (                  \
+    NLS_MB_CODE_PAGE_TAG ?                                    \
+    RtlxUnicodeStringToAnsiSize(String) :                     \
+    ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
+)
 
-/* x86 and x64 performs a 0x2C interrupt */
-#define DbgRaiseAssertionFailure __int2c
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToInteger(
+    IN PCUNICODE_STRING String,
+    IN ULONG Base OPTIONAL,
+    OUT PULONG Value);
 
-#elif defined(_M_IA64)
-/** Kernel definitions for IA64 **/
+NTSYSAPI
+WCHAR
+NTAPI
+RtlUpcaseUnicodeChar(
+    IN WCHAR SourceCharacter);
 
-/* 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;
+NTSYSAPI
+USHORT
+FASTCALL
+RtlUshortByteSwap(
+    IN USHORT Source);
 
-FORCEINLINE
-VOID
-KeFlushWriteBuffer(VOID)
-{
-  __mf ();
-  return;
-}
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidRelativeSecurityDescriptor(
+    IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
+    IN ULONG SecurityDescriptorLength,
+    IN SECURITY_INFORMATION RequiredInformation);
 
 NTSYSAPI
-PKTHREAD
+BOOLEAN
+NTAPI
+RtlValidSecurityDescriptor(
+    IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTSYSAPI
+NTSTATUS
 NTAPI
-KeGetCurrentThread(VOID);
+RtlWriteRegistryValue(
+    IN ULONG RelativeTo,
+    IN PCWSTR Path,
+    IN PCWSTR ValueName,
+    IN ULONG ValueType,
+    IN PVOID ValueData,
+    IN ULONG ValueLength);
 
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
 
-#elif defined(_M_PPC)
+#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
+NTSYSAPI
+VOID
+FASTCALL
+RtlPrefetchMemoryNonTemporal(
+    IN PVOID Source,
+    IN SIZE_T Length);
+#endif
 
-/* 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
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTSYSAPI
+VOID
+NTAPI
+RtlClearBit(
+    PRTL_BITMAP BitMapHeader,
+    ULONG BitNumber);
 
-//
-// Used to contain PFNs and PFN counts
-//
-typedef ULONG PFN_COUNT;
-typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
-typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
+NTSYSAPI
+WCHAR
+NTAPI
+RtlDowncaseUnicodeChar(
+    IN WCHAR SourceCharacter);
 
+NTSYSAPI
+VOID
+NTAPI
+RtlSetBit(
+    PRTL_BITMAP BitMapHeader,
+    ULONG BitNumber);
 
-typedef struct _KFLOATING_SAVE {
-  ULONG Dummy;
-} KFLOATING_SAVE, *PKFLOATING_SAVE;
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTestBit(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG BitNumber);
 
-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");
+#endif // (NTDDI_VERSION >= NTDDI_WINXP)
 
-FORCEINLINE
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+NTSYSAPI
 ULONG
 NTAPI
-KeGetCurrentProcessorNumber(VOID)
-{
-  ULONG Number;
-  __asm__ __volatile__ (
-    "lwz %0, %c1(12)\n"
-    : "=r" (Number)
-    : "i" (FIELD_OFFSET(KPCR, Number))
-  );
-  return Number;
-}
+RtlNumberOfSetBitsUlongPtr(
+    IN ULONG_PTR Target);
 
-NTHALAPI
-VOID
-FASTCALL
-KfLowerIrql(
-  IN KIRQL NewIrql);
-#define KeLowerIrql(a) KfLowerIrql(a)
+NTSYSAPI
+ULONGLONG
+NTAPI
+RtlIoDecodeMemIoResource (
+    IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
+    OUT PULONGLONG Alignment OPTIONAL,
+    OUT PULONGLONG MinimumAddress OPTIONAL,
+    OUT PULONGLONG MaximumAddress OPTIONAL);
 
-NTHALAPI
-KIRQL
-FASTCALL
-KfRaiseIrql(
-  IN KIRQL NewIrql);
-#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
-
-NTHALAPI
-KIRQL
-NTAPI
-KeRaiseIrqlToDpcLevel(VOID);
-
-NTHALAPI
-KIRQL
-NTAPI
-KeRaiseIrqlToSynchLevel(VOID);
-
-
-
-#elif defined(_M_MIPS)
-#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
+NTSYSAPI
+NTSTATUS
 NTAPI
-KfRaiseIrql(
-  IN KIRQL NewIrql);
+RtlIoEncodeMemIoResource(
+    IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
+    IN UCHAR Type,
+    IN ULONGLONG Length,
+    IN ULONGLONG Alignment,
+    IN ULONGLONG MinimumAddress,
+    IN ULONGLONG MaximumAddress);
 
-NTKERNELAPI
-KIRQL
+NTSYSAPI
+ULONGLONG
 NTAPI
-KeRaiseIrqlToDpcLevel(VOID);
+RtlCmDecodeMemIoResource(
+    IN struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor,
+    OUT PULONGLONG Start OPTIONAL);
 
-NTKERNELAPI
-KIRQL
+NTSYSAPI
+NTSTATUS
 NTAPI
-KeRaiseIrqlToSynchLevel(VOID);
-
+RtlFindClosestEncodableLength(
+    IN ULONGLONG SourceLength,
+    OUT PULONGLONG TargetLength);
 
-#elif defined(_M_ARM)
-#include <armddk.h>
-#else
-#error Unknown Architecture
 #endif
 
-/******************************************************************************
- *                         Runtime Library Functions                          *
- ******************************************************************************/
-
-
-#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)
+#if !defined(MIDL_PASS)
+/* inline funftions */
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertLongToLargeInteger(LONG SignedInteger)
 {
-  ListHead->Flink = ListHead->Blink = ListHead;
+    LARGE_INTEGER ret;
+    ret.QuadPart = SignedInteger;
+    return ret;
 }
 
-BOOLEAN
-FORCEINLINE
-IsListEmpty(
-  IN CONST LIST_ENTRY * ListHead)
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertUlongToLargeInteger(
+  ULONG UnsignedInteger)
 {
-  return (BOOLEAN)(ListHead->Flink == ListHead);
+    LARGE_INTEGER ret;
+    ret.QuadPart = UnsignedInteger;
+    return ret;
 }
 
-FORCEINLINE
-BOOLEAN
-RemoveEntryList(
-  IN PLIST_ENTRY Entry)
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+ULONG
+NTAPI_INLINE
+RtlEnlargedUnsignedDivide(
+    IN ULARGE_INTEGER Dividend,
+    IN ULONG Divisor,
+    IN OUT PULONG Remainder)
 {
-  PLIST_ENTRY OldFlink;
-  PLIST_ENTRY OldBlink;
-
-  OldFlink = Entry->Flink;
-  OldBlink = Entry->Blink;
-  OldFlink->Blink = OldBlink;
-  OldBlink->Flink = OldFlink;
-  return (BOOLEAN)(OldFlink == OldBlink);
+    if (Remainder)
+        *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+    return (ULONG)(Dividend.QuadPart / Divisor);
 }
 
-FORCEINLINE
-PLIST_ENTRY
-RemoveHeadList(
-  IN OUT PLIST_ENTRY ListHead)
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlEnlargedUnsignedMultiply(
+    IN ULONG Multiplicand,
+    IN ULONG Multiplier)
 {
-  PLIST_ENTRY Flink;
-  PLIST_ENTRY Entry;
-
-  Entry = ListHead->Flink;
-  Flink = Entry->Flink;
-  ListHead->Flink = Flink;
-  Flink->Blink = ListHead;
-  return Entry;
+    LARGE_INTEGER ret;
+    ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+    return ret;
 }
 
-FORCEINLINE
-PLIST_ENTRY
-RemoveTailList(
-  IN OUT PLIST_ENTRY ListHead)
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlEnlargedIntegerMultiply(
+    IN LONG Multiplicand,
+    IN LONG Multiplier)
 {
-  PLIST_ENTRY Blink;
-  PLIST_ENTRY Entry;
-
-  Entry = ListHead->Blink;
-  Blink = Entry->Blink;
-  ListHead->Blink = Blink;
-  Blink->Flink = ListHead;
-  return Entry;
+    LARGE_INTEGER ret;
+    ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+    return ret;
 }
 
 FORCEINLINE
 VOID
-InsertTailList(
-  IN OUT PLIST_ENTRY ListHead,
-  IN OUT PLIST_ENTRY Entry)
+RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString,
+                       IN PCHAR Buffer,
+                       IN USHORT BufferSize)
 {
-  PLIST_ENTRY OldBlink;
-  OldBlink = ListHead->Blink;
-  Entry->Flink = ListHead;
-  Entry->Blink = OldBlink;
-  OldBlink->Flink = Entry;
-  ListHead->Blink = Entry;
+    AnsiString->Length = 0;
+    AnsiString->MaximumLength = BufferSize;
+    AnsiString->Buffer = Buffer;
 }
 
 FORCEINLINE
 VOID
-InsertHeadList(
-  IN OUT PLIST_ENTRY ListHead,
-  IN OUT PLIST_ENTRY Entry)
+RtlInitEmptyUnicodeString(
+    OUT PUNICODE_STRING UnicodeString,
+    IN PWSTR Buffer,
+    IN USHORT BufferSize)
 {
-  PLIST_ENTRY OldFlink;
-  OldFlink = ListHead->Flink;
-  Entry->Flink = OldFlink;
-  Entry->Blink = ListHead;
-  OldFlink->Blink = Entry;
-  ListHead->Flink = Entry;
+    UnicodeString->Length = 0;
+    UnicodeString->MaximumLength = BufferSize;
+    UnicodeString->Buffer = Buffer;
 }
 
-FORCEINLINE
-VOID
-AppendTailList(
-  IN OUT PLIST_ENTRY ListHead,
-  IN OUT PLIST_ENTRY ListToAppend)
+#if defined(_AMD64_) || defined(_IA64_)
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedIntegerMultiply(
+    LARGE_INTEGER Multiplicand,
+    LONG Multiplier)
 {
-  PLIST_ENTRY ListEnd = ListHead->Blink;
-
-  ListHead->Blink->Flink = ListToAppend;
-  ListHead->Blink = ListToAppend->Blink;
-  ListToAppend->Blink->Flink = ListHead;
-  ListToAppend->Blink = ListEnd;
+    LARGE_INTEGER ret;
+    ret.QuadPart = Multiplicand.QuadPart * Multiplier;
+    return ret;
 }
 
-FORCEINLINE
-PSINGLE_LIST_ENTRY
-PopEntryList(
-  IN OUT PSINGLE_LIST_ENTRY ListHead)
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedLargeIntegerDivide(
+    LARGE_INTEGER Dividend,
+    ULONG Divisor,
+    PULONG Remainder)
 {
-  PSINGLE_LIST_ENTRY FirstEntry;
-  FirstEntry = ListHead->Next;
-  if (FirstEntry != NULL) {
-    ListHead->Next = FirstEntry->Next;
-  }
-  return FirstEntry;
+    LARGE_INTEGER ret;
+    ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
+    if (Remainder)
+        *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+    return ret;
 }
+#endif
 
-FORCEINLINE
-VOID
-PushEntryList(
-  IN OUT PSINGLE_LIST_ENTRY ListHead,
-  IN OUT PSINGLE_LIST_ENTRY Entry)
+#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)
 {
-  Entry->Next = ListHead->Next;
-  ListHead->Next = Entry;
+    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
 
-#endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
-
-NTSYSAPI
-VOID
-NTAPI
-RtlAssert(
-  IN PVOID FailedAssertion,
-  IN PVOID FileName,
-  IN ULONG LineNumber,
-  IN PSTR Message);
+//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
- * RtlCopyMemory(
- *     IN VOID UNALIGNED *Destination,
- *     IN CONST VOID UNALIGNED *Source,
- *     IN SIZE_T Length)
+ * RtlLargeIntegerAnd(
+ *     IN OUT LARGE_INTEGER Result,
+ *     IN LARGE_INTEGER Source,
+ *     IN LARGE_INTEGER Mask);
  */
-#define RtlCopyMemory(Destination, Source, Length) \
-    memcpy(Destination, Source, Length)
+#define RtlLargeIntegerAnd(Result, Source, Mask) \
+    Result.QuadPart = Source.QuadPart & Mask.QuadPart
 
-#define RtlCopyBytes RtlCopyMemory
+//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)
-NTSYSAPI
-VOID
-NTAPI
-RtlCopyMemoryNonTemporal(
-  VOID UNALIGNED *Destination,
-  CONST VOID UNALIGNED *Source,
-  SIZE_T Length);
+    __stosb((PUCHAR)vptr, 0, Size);
 #else
-#define RtlCopyMemoryNonTemporal RtlCopyMemory
+    char * endptr = (char *)vptr + Size;
+    while (vptr < endptr)
+    {
+        *vptr = 0; vptr++;
+    }
 #endif
+     return Pointer;
+}
 
-/* 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
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-
-
-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 /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-
-#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
-NTSYSAPI
-VOID
-FASTCALL
-RtlPrefetchMemoryNonTemporal(
-  IN PVOID Source,
-  IN SIZE_T Length);
-#endif
-
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-
-
-
-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 /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-
-
-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 /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-
-
-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 /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-
-#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;
-}
-
-#if defined(_AMD64_) || defined(_IA64_)
-
-
-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 /* defined(_AMD64_) || defined(_IA64_) */
-
-
-#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))
-
-
-/******************************************************************************
- *                              Kernel Functions                              *
- ******************************************************************************/
-
-NTHALAPI
-KIRQL
-NTAPI
-KeGetCurrentIrql(VOID);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeInitializeEvent(
-  OUT PRKEVENT Event,
-  IN EVENT_TYPE Type,
-  IN BOOLEAN State);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeClearEvent(
-  IN OUT PRKEVENT Event);
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-
-
-#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);
-
-
-#if defined(SINGLE_GROUP_LEGACY_API)
-
-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 /* defined(SINGLE_GROUP_LEGACY_API) */
-
-#if !defined(_M_AMD64)
-
-NTKERNELAPI
-ULONGLONG
-NTAPI
-KeQueryInterruptTime(VOID);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeQuerySystemTime(
-  OUT PLARGE_INTEGER CurrentTime);
-
-#endif /* !_M_AMD64 */
-
-#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 /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-
-_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 /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-#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) */
-
-#if (NTDDI_VERSION >= NTDDI_WS03)
-
-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 /* (NTDDI_VERSION >= NTDDI_WS03) */
-
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
-
-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 /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-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);
-
-#if defined(SINGLE_GROUP_LEGACY_API)
-
-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
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-#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) */
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-
-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);
-
+#if defined(_M_AMD64)
+FORCEINLINE
 ULONG
-NTAPI
-KeGetProcessorIndexFromNumber(
-  IN PPROCESSOR_NUMBER ProcNumber);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-#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); \
-  } \
+RtlCheckBit(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG BitPosition)
+{
+    return BitTest((LONG CONST*)BitMapHeader->Buffer, BitPosition);
 }
-
-#else
-
-#define PAGED_CODE()
-
-#endif /* DBG */
-
-#define PAGED_CODE_LOCKED() NOP_FUNCTION;
-
-/******************************************************************************
- *                       Memory manager Functions                             *
- ******************************************************************************/
-/* 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); \
-  } \
-}
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-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);
+#define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
+#endif // defined(_M_AMD64)
 
-NTKERNELAPI
-VOID
-NTAPI
-MmFreeContiguousMemory(
-  IN PVOID BaseAddress);
+#endif // !defined(MIDL_PASS)
 
-NTKERNELAPI
-VOID
-NTAPI
-MmFreeContiguousMemorySpecifyCache(
-  IN PVOID BaseAddress,
-  IN SIZE_T NumberOfBytes,
-  IN MEMORY_CACHING_TYPE CacheType);
+/* 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__)))
 
-NTKERNELAPI
-VOID
-NTAPI
-MmFreePagesFromMdl(
-  IN PMDLX MemoryDescriptorList);
+#define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
+#define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
+#define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
 
-NTKERNELAPI
-PVOID
-NTAPI
-MmGetSystemRoutineAddress(
-  IN PUNICODE_STRING SystemRoutineName);
+#endif
 
-NTKERNELAPI
-LOGICAL
-NTAPI
-MmIsDriverVerifying(
-  IN struct _DRIVER_OBJECT *DriverObject);
+#if DBG
 
-NTKERNELAPI
-PVOID
-NTAPI
-MmLockPagableDataSection(
-  IN PVOID AddressWithinSection);
+#define ASSERT(exp) \
+  (VOID)((!(exp)) ? \
+    RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
 
-NTKERNELAPI
-PVOID
-NTAPI
-MmMapIoSpace(
-  IN PHYSICAL_ADDRESS PhysicalAddress,
-  IN SIZE_T NumberOfBytes,
-  IN MEMORY_CACHING_TYPE CacheEnable);
+#define ASSERTMSG(msg, exp) \
+  (VOID)((!(exp)) ? \
+    RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
 
-NTKERNELAPI
-PVOID
-NTAPI
-MmMapLockedPages(
-  IN PMDL MemoryDescriptorList,
-  IN KPROCESSOR_MODE AccessMode);
+#define RTL_SOFT_ASSERT(exp) \
+  (VOID)((!(exp)) ? \
+    DbgPrint("%s(%d): Soft assertion failed\n   Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
 
-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);
+#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)
 
-NTKERNELAPI
-PVOID
-NTAPI
-MmPageEntireDriver(
-  IN PVOID AddressWithinSection);
+#define RTL_VERIFY(exp) ASSERT(exp)
+#define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp)
 
-NTKERNELAPI
-VOID
-NTAPI
-MmProbeAndLockPages(
-  IN OUT PMDL MemoryDescriptorList,
-  IN KPROCESSOR_MODE AccessMode,
-  IN LOCK_OPERATION Operation);
+#define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
+#define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
 
-NTKERNELAPI
-MM_SYSTEMSIZE
-NTAPI
-MmQuerySystemSize(VOID);
+#if defined(_MSC_VER)
 
-NTKERNELAPI
-VOID
-NTAPI
-MmResetDriverPaging(
-  IN PVOID AddressWithinSection);
+#define NT_ASSERT(exp) \
+   ((!(exp)) ? \
+      (__annotation(L"Debug", L"AssertFail", L#exp), \
+       DbgRaiseAssertionFailure(), FALSE) : TRUE)
 
-NTKERNELAPI
-SIZE_T
-NTAPI
-MmSizeOfMdl(
-  IN PVOID Base,
-  IN SIZE_T Length);
+#define NT_ASSERTMSG(msg, exp) \
+   ((!(exp)) ? \
+      (__annotation(L"Debug", L"AssertFail", L##msg), \
+      DbgRaiseAssertionFailure(), FALSE) : TRUE)
 
-NTKERNELAPI
-VOID
-NTAPI
-MmUnlockPagableImageSection(
-  IN PVOID ImageSectionHandle);
+#define NT_ASSERTMSGW(msg, exp) \
+    ((!(exp)) ? \
+        (__annotation(L"Debug", L"AssertFail", msg), \
+         DbgRaiseAssertionFailure(), FALSE) : TRUE)
 
-NTKERNELAPI
-VOID
-NTAPI
-MmUnlockPages(
-  IN OUT PMDL MemoryDescriptorList);
+#else
 
-NTKERNELAPI
-VOID
-NTAPI
-MmUnmapIoSpace(
-  IN PVOID BaseAddress,
-  IN SIZE_T NumberOfBytes);
+/* GCC doesn't support __annotation (nor PDB) */
+#define NT_ASSERT(exp) \
+   (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
 
-NTKERNELAPI
-VOID
-NTAPI
-MmProbeAndLockProcessPages(
-  IN OUT PMDL MemoryDescriptorList,
-  IN PEPROCESS Process,
-  IN KPROCESSOR_MODE AccessMode,
-  IN LOCK_OPERATION Operation);
+#define NT_ASSERTMSG NT_ASSERT
+#define NT_ASSERTMSGW NT_ASSERT
 
-NTKERNELAPI
-VOID
-NTAPI
-MmUnmapLockedPages(
-  IN PVOID BaseAddress,
-  IN PMDL MemoryDescriptorList);
+#endif
 
-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);
+#else /* !DBG */
 
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+#define ASSERT(exp) ((VOID) 0)
+#define ASSERTMSG(msg, exp) ((VOID) 0)
 
-#if (NTDDI_VERSION >= NTDDI_WINXP)
+#define RTL_SOFT_ASSERT(exp) ((VOID) 0)
+#define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmAdvanceMdl(
-  IN OUT PMDL Mdl,
-  IN ULONG NumberOfBytes);
+#define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
+#define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
 
-NTKERNELAPI
-PVOID
-NTAPI
-MmAllocateMappingAddress(
-  IN SIZE_T NumberOfBytes,
-  IN ULONG PoolTag);
+#define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
+#define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
 
-NTKERNELAPI
-VOID
-NTAPI
-MmFreeMappingAddress(
-  IN PVOID BaseAddress,
-  IN ULONG PoolTag);
+#define NT_ASSERT(exp)     ((VOID)0)
+#define NT_ASSERTMSG(exp)  ((VOID)0)
+#define NT_ASSERTMSGW(exp) ((VOID)0)
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmIsVerifierEnabled(
-  OUT PULONG VerifierFlags);
+#endif /* DBG */
 
-NTKERNELAPI
-PVOID
-NTAPI
-MmMapLockedPagesWithReservedMapping(
-  IN PVOID MappingAddress,
-  IN ULONG PoolTag,
-  IN PMDL MemoryDescriptorList,
-  IN MEMORY_CACHING_TYPE CacheType);
+#if !defined(_WINBASE_)
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmProtectMdlSystemAddress(
-  IN PMDL MemoryDescriptorList,
-  IN ULONG NewProtect);
+#if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
 
 NTKERNELAPI
 VOID
-NTAPI
-MmUnmapReservedMapping(
-  IN PVOID BaseAddress,
-  IN ULONG PoolTag,
-  IN PMDL MemoryDescriptorList);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmAddVerifierThunks(
-  IN PVOID ThunkBuffer,
-  IN ULONG ThunkBufferSize);
+InitializeSListHead(
+  OUT PSLIST_HEADER SListHead);
 
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+#else
 
-#if (NTDDI_VERSION >= NTDDI_WS03)
-NTKERNELAPI
-LOGICAL
-NTAPI
-MmIsIoSpaceActive(
-  IN PHYSICAL_ADDRESS StartAddress,
-  IN SIZE_T NumberOfBytes);
+VOID
+FORCEINLINE
+InitializeSListHead(
+  OUT PSLIST_HEADER SListHead)
+{
+#if defined(_IA64_)
+    ULONG64 FeatureBits;
 #endif
 
-#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);
+#if defined(_WIN64)
+    if (((ULONG_PTR)SListHead & 0xf) != 0)
+    {
+        RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT);
+    }
 #endif
 
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+    RtlZeroMemory(SListHead, sizeof(SLIST_HEADER));
 
-NTKERNELAPI
-LOGICAL
-NTAPI
-MmIsDriverVerifyingByAddress(
-  IN PVOID AddressWithinSection);
+#if defined(_IA64_)
+    FeatureBits = __getReg(CV_IA64_CPUID4);
+    if ((FeatureBits & KF_16BYTE_INSTR) != 0)
+    {
+        SListHead->Header16.HeaderType = 1;
+        SListHead->Header16.Init = 1;
+    }
 #endif
+}
 
-/******************************************************************************
- *                            Security Manager Functions                      *
- ******************************************************************************/
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-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);
+#endif
 
-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);
+#if defined(_WIN64)
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-SeDeassignSecurity(
-  IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor);
+#define InterlockedPopEntrySList(Head) \
+    ExpInterlockedPopEntrySList(Head)
 
-NTKERNELAPI
-BOOLEAN
-NTAPI
-SeValidSecurityDescriptor(
-  IN ULONG Length,
-  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+#define InterlockedPushEntrySList(Head, Entry) \
+    ExpInterlockedPushEntrySList(Head, Entry)
 
-NTKERNELAPI
-ULONG
-NTAPI
-SeObjectCreateSaclAccessBits(
-  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+#define InterlockedFlushSList(Head) \
+    ExpInterlockedFlushSList(Head)
 
-NTKERNELAPI
-VOID
-NTAPI
-SeReleaseSubjectContext(
-  IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
+#define QueryDepthSList(Head) \
+    ExQueryDepthSList(Head)
 
-NTKERNELAPI
-VOID
-NTAPI
-SeUnlockSubjectContext(
-  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+#else /* !defined(_WIN64) */
 
 NTKERNELAPI
-VOID
-NTAPI
-SeCaptureSubjectContext(
-  OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
+PSLIST_ENTRY
+FASTCALL
+InterlockedPopEntrySList(
+    IN PSLIST_HEADER ListHead);
 
 NTKERNELAPI
-VOID
-NTAPI
-SeLockSubjectContext(
-  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+PSLIST_ENTRY
+FASTCALL
+InterlockedPushEntrySList(
+    IN PSLIST_HEADER ListHead,
+    IN PSLIST_ENTRY ListEntry);
 
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+#define InterlockedFlushSList(ListHead) \
+    ExInterlockedFlushSList(ListHead)
 
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+#define QueryDepthSList(Head) \
+    ExQueryDepthSList(Head)
 
-NTSTATUS
-NTAPI
-SeSetAuditParameter(
-  IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters,
-  IN SE_ADT_PARAMETER_TYPE Type,
-  IN ULONG Index,
-  IN PVOID Data);
+#endif /* !defined(_WIN64) */
 
-NTSTATUS
-NTAPI
-SeReportSecurityEvent(
-  IN ULONG Flags,
-  IN PUNICODE_STRING SourceName,
-  IN PSID UserSid OPTIONAL,
-  IN PSE_ADT_PARAMETER_ARRAY AuditParameters);
+#endif /* !defined(_WINBASE_) */
 
-#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
+/******************************************************************************
+ *                              Kernel Functions                              *
+ ******************************************************************************/
 
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+NTHALAPI
+KIRQL
+NTAPI
+KeGetCurrentIrql(
+    VOID);
 
 NTKERNELAPI
-ULONG
+VOID
 NTAPI
-SeComputeAutoInheritByObjectType(
-  IN PVOID ObjectType,
-  IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
-  IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL);
+KeInitializeEvent(
+  OUT PRKEVENT  Event,
+  IN EVENT_TYPE  Type,
+  IN BOOLEAN  State);
 
-#ifdef SE_NTFS_WORLD_CACHE
+NTKERNELAPI
 VOID
 NTAPI
-SeGetWorldRights(
-  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
-  IN PGENERIC_MAPPING GenericMapping,
-  OUT PACCESS_MASK GrantedAccess);
-#endif /* SE_NTFS_WORLD_CACHE */
+KeClearEvent(
+  IN OUT PRKEVENT Event);
 
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-/******************************************************************************
- *                         Configuration Manager Functions                    *
- ******************************************************************************/
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
-#if (NTDDI_VERSION >= NTDDI_WINXP)
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-CmRegisterCallback(
-  IN PEX_CALLBACK_FUNCTION Function,
-  IN PVOID Context OPTIONAL,
-  OUT PLARGE_INTEGER Cookie);
+ProbeForRead(
+  IN CONST VOID *Address, /* CONST is added */
+  IN SIZE_T Length,
+  IN ULONG Alignment);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-CmUnRegisterCallback(
-  IN LARGE_INTEGER Cookie);
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+ProbeForWrite(
+  IN PVOID Address,
+  IN SIZE_T Length,
+  IN ULONG Alignment);
 
+#if defined(SINGLE_GROUP_LEGACY_API)
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-CmRegisterCallbackEx(
-  PEX_CALLBACK_FUNCTION Function,
-  PCUNICODE_STRING Altitude,
-  PVOID Driver,
-  PVOID Context,
-  PLARGE_INTEGER Cookie,
-  PVOID Reserved);
+KeRevertToUserAffinityThread(VOID);
 
 NTKERNELAPI
 VOID
 NTAPI
-CmGetCallbackVersion(
-  OUT PULONG Major OPTIONAL,
-  OUT PULONG Minor OPTIONAL);
+KeSetSystemAffinityThread(
+    IN KAFFINITY Affinity);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-CmSetCallbackObjectContext(
-  IN OUT PVOID Object,
-  IN PLARGE_INTEGER Cookie,
-  IN PVOID NewContext,
-  OUT PVOID *OldContext OPTIONAL);
+KeSetTargetProcessorDpc(
+  IN OUT PRKDPC Dpc,
+  IN CCHAR Number);
 
 NTKERNELAPI
-NTSTATUS
+KAFFINITY
 NTAPI
-CmCallbackGetKeyObjectID(
-  IN PLARGE_INTEGER Cookie,
-  IN PVOID Object,
-  OUT PULONG_PTR ObjectID OPTIONAL,
-  OUT PCUNICODE_STRING *ObjectName OPTIONAL);
+KeQueryActiveProcessors(
+  VOID);
+#endif
 
+#if !defined(_M_AMD64)
 NTKERNELAPI
-PVOID
+ULONGLONG
 NTAPI
-CmGetBoundTransaction(
-  IN PLARGE_INTEGER Cookie,
-  IN PVOID Object);
-
-#endif // NTDDI_VERSION >= NTDDI_VISTA
-
-
-/******************************************************************************
- *                         I/O Manager Functions                              *
- ******************************************************************************/
-
-
-/*
- * 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); \
-    } \
-}
+KeQueryInterruptTime(
+  VOID);
 
-#if !defined(_M_AMD64)
-NTHALAPI
+NTKERNELAPI
 VOID
 NTAPI
-READ_PORT_BUFFER_UCHAR(
-  IN PUCHAR Port,
-  IN PUCHAR Buffer,
-  IN ULONG Count);
+KeQuerySystemTime(
+  OUT PLARGE_INTEGER  CurrentTime);
+#endif /* !_M_AMD64 */
 
-NTHALAPI
+#if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
+NTKERNELAPI
 VOID
 NTAPI
-READ_PORT_BUFFER_ULONG(
-  IN PULONG Port,
-  IN PULONG Buffer,
-  IN ULONG Count);
+KeInitializeSpinLock(
+    IN PKSPIN_LOCK SpinLock);
+#else
+FORCEINLINE
+VOID
+KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock)
+{
+    /* Clear the lock */
+    *SpinLock = 0;
+}
+#endif
 
-NTHALAPI
+NTKERNELAPI
+DECLSPEC_NORETURN
 VOID
 NTAPI
-READ_PORT_BUFFER_USHORT(
-  IN PUSHORT Port,
-  IN PUSHORT Buffer,
-  IN ULONG Count);
+KeBugCheckEx(
+  IN ULONG  BugCheckCode,
+  IN ULONG_PTR  BugCheckParameter1,
+  IN ULONG_PTR  BugCheckParameter2,
+  IN ULONG_PTR  BugCheckParameter3,
+  IN ULONG_PTR  BugCheckParameter4);
 
-NTHALAPI
-UCHAR
+NTKERNELAPI
+BOOLEAN
 NTAPI
-READ_PORT_UCHAR(
-  IN PUCHAR Port);
+KeCancelTimer(
+  IN OUT PKTIMER);
 
-NTHALAPI
-ULONG
+NTKERNELAPI
+NTSTATUS
 NTAPI
-READ_PORT_ULONG(
-  IN PULONG Port);
+KeDelayExecutionThread(
+  IN KPROCESSOR_MODE WaitMode,
+  IN BOOLEAN Alertable,
+  IN PLARGE_INTEGER Interval);
 
-NTHALAPI
-USHORT
+NTKERNELAPI
+BOOLEAN
 NTAPI
-READ_PORT_USHORT(
-  IN PUSHORT Port);
+KeDeregisterBugCheckCallback(
+  IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
 
 NTKERNELAPI
 VOID
 NTAPI
-READ_REGISTER_BUFFER_UCHAR(
-  IN PUCHAR Register,
-  IN PUCHAR Buffer,
-  IN ULONG Count);
+KeEnterCriticalRegion(VOID);
 
 NTKERNELAPI
 VOID
 NTAPI
-READ_REGISTER_BUFFER_ULONG(
-  IN PULONG Register,
-  IN PULONG Buffer,
-  IN ULONG Count);
+KeInitializeDeviceQueue(
+  OUT PKDEVICE_QUEUE  DeviceQueue);
 
 NTKERNELAPI
 VOID
 NTAPI
-READ_REGISTER_BUFFER_USHORT(
-  IN PUSHORT Register,
-  IN PUSHORT Buffer,
-  IN ULONG Count);
+KeInitializeDpc(
+  OUT PRKDPC  Dpc,
+  IN PKDEFERRED_ROUTINE  DeferredRoutine,
+  IN PVOID  DeferredContext OPTIONAL);
 
 NTKERNELAPI
-UCHAR
+VOID
 NTAPI
-READ_REGISTER_UCHAR(
-  IN PUCHAR Register);
+KeInitializeMutex(
+  OUT PRKMUTEX  Mutex,
+  IN ULONG  Level);
 
 NTKERNELAPI
-ULONG
+VOID
 NTAPI
-READ_REGISTER_ULONG(
-  IN PULONG Register);
+KeInitializeSemaphore(
+  OUT PRKSEMAPHORE  Semaphore,
+  IN LONG  Count,
+  IN LONG  Limit);
 
 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);
+KeInitializeTimer(
+  OUT PKTIMER  Timer);
 
-NTHALAPI
+NTKERNELAPI
 VOID
 NTAPI
-WRITE_PORT_BUFFER_ULONG(
-  IN PULONG Port,
-  IN PULONG Buffer,
-  IN ULONG Count);
+KeInitializeTimerEx(
+  OUT PKTIMER  Timer,
+  IN TIMER_TYPE  Type);
 
-NTHALAPI
-VOID
+NTKERNELAPI
+BOOLEAN
 NTAPI
-WRITE_PORT_BUFFER_USHORT(
-  IN PUSHORT Port,
-  IN PUSHORT Buffer,
-  IN ULONG Count);
+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);
 
-NTHALAPI
-VOID
+NTKERNELAPI
+BOOLEAN
 NTAPI
-WRITE_PORT_UCHAR(
-  IN PUCHAR Port,
-  IN UCHAR Value);
+KeInsertQueueDpc(
+  IN OUT PRKDPC  Dpc,
+  IN PVOID  SystemArgument1 OPTIONAL,
+  IN PVOID  SystemArgument2 OPTIONAL);
 
-NTHALAPI
+NTKERNELAPI
 VOID
 NTAPI
-WRITE_PORT_ULONG(
-  IN PULONG Port,
-  IN ULONG Value);
+KeLeaveCriticalRegion(VOID);
 
 NTHALAPI
-VOID
+LARGE_INTEGER
 NTAPI
-WRITE_PORT_USHORT(
-  IN PUSHORT Port,
-  IN USHORT Value);
+KeQueryPerformanceCounter(
+  OUT PLARGE_INTEGER  PerformanceFrequency  OPTIONAL);
 
 NTKERNELAPI
-VOID
+KPRIORITY
 NTAPI
-WRITE_REGISTER_BUFFER_UCHAR(
-  IN PUCHAR Register,
-  IN PUCHAR Buffer,
-  IN ULONG Count);
+KeQueryPriorityThread(
+  IN PRKTHREAD  Thread);
 
 NTKERNELAPI
-VOID
+ULONG
 NTAPI
-WRITE_REGISTER_BUFFER_ULONG(
-  IN PULONG Register,
-  IN PULONG Buffer,
-  IN ULONG Count);
+KeQueryTimeIncrement(
+  VOID);
 
 NTKERNELAPI
-VOID
+LONG
 NTAPI
-WRITE_REGISTER_BUFFER_USHORT(
-  IN PUSHORT Register,
-  IN PUSHORT Buffer,
-  IN ULONG Count);
+KeReadStateEvent(
+  IN PRKEVENT  Event);
 
 NTKERNELAPI
-VOID
+LONG
 NTAPI
-WRITE_REGISTER_UCHAR(
-  IN PUCHAR Register,
-  IN UCHAR Value);
+KeReadStateMutex(
+  IN PRKMUTEX  Mutex);
+
 
 NTKERNELAPI
-VOID
+LONG
 NTAPI
-WRITE_REGISTER_ULONG(
-  IN PULONG Register,
-  IN ULONG Value);
+KeReadStateSemaphore(
+  IN PRKSEMAPHORE  Semaphore);
 
 NTKERNELAPI
-VOID
+BOOLEAN
 NTAPI
-WRITE_REGISTER_USHORT(
-  IN PUSHORT Register,
-  IN USHORT Value);
+KeReadStateTimer(
+  IN PKTIMER  Timer);
 
-#else
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRegisterBugCheckCallback(
+  OUT PKBUGCHECK_CALLBACK_RECORD  CallbackRecord,
+  IN PKBUGCHECK_CALLBACK_ROUTINE  CallbackRoutine,
+  IN PVOID  Buffer,
+  IN ULONG  Length,
+  IN PUCHAR  Component);
 
-FORCEINLINE
-VOID
-READ_PORT_BUFFER_UCHAR(
-  IN PUCHAR Port,
-  IN PUCHAR Buffer,
-  IN ULONG Count)
-{
-  __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
+NTKERNELAPI
+LONG
+NTAPI
+KeReleaseMutex(
+  IN OUT PRKMUTEX  Mutex,
+  IN BOOLEAN  Wait);
 
-FORCEINLINE
-VOID
-READ_PORT_BUFFER_ULONG(
-  IN PULONG Port,
-  IN PULONG Buffer,
-  IN ULONG Count)
-{
-  __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
+NTKERNELAPI
+LONG
+NTAPI
+KeReleaseSemaphore(
+  IN OUT PRKSEMAPHORE  Semaphore,
+  IN KPRIORITY  Increment,
+  IN LONG  Adjustment,
+  IN BOOLEAN  Wait);
 
-FORCEINLINE
-VOID
-READ_PORT_BUFFER_USHORT(
-  IN PUSHORT Port,
-  IN PUSHORT Buffer,
-  IN ULONG Count)
-{
-  __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
+NTAPI
+KeRemoveByKeyDeviceQueue(
+  IN OUT PKDEVICE_QUEUE  DeviceQueue,
+  IN ULONG  SortKey);
 
-FORCEINLINE
-UCHAR
-READ_PORT_UCHAR(
-  IN PUCHAR Port)
-{
-  return __inbyte((USHORT)(ULONG_PTR)Port);
-}
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
+NTAPI
+KeRemoveDeviceQueue(
+  IN OUT PKDEVICE_QUEUE  DeviceQueue);
 
-FORCEINLINE
-ULONG
-READ_PORT_ULONG(
-  IN PULONG Port)
-{
-  return __indword((USHORT)(ULONG_PTR)Port);
-}
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRemoveEntryDeviceQueue(
+  IN OUT PKDEVICE_QUEUE  DeviceQueue,
+  IN OUT PKDEVICE_QUEUE_ENTRY  DeviceQueueEntry);
 
-FORCEINLINE
-USHORT
-READ_PORT_USHORT(
-  IN PUSHORT Port)
-{
-  return __inword((USHORT)(ULONG_PTR)Port);
-}
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRemoveQueueDpc(
+  IN OUT PRKDPC  Dpc);
 
-FORCEINLINE
-VOID
-READ_REGISTER_BUFFER_UCHAR(
-  IN PUCHAR Register,
-  IN PUCHAR Buffer,
-  IN ULONG Count)
-{
-  __movsb(Register, Buffer, Count);
-}
+NTKERNELAPI
+LONG
+NTAPI
+KeResetEvent(
+  IN OUT PRKEVENT  Event);
 
-FORCEINLINE
-VOID
-READ_REGISTER_BUFFER_ULONG(
-  IN PULONG Register,
-  IN PULONG Buffer,
-  IN ULONG Count)
-{
-  __movsd(Register, Buffer, Count);
-}
+NTKERNELAPI
+LONG
+NTAPI
+KeSetEvent(
+  IN OUT PRKEVENT  Event,
+  IN KPRIORITY  Increment,
+  IN BOOLEAN  Wait);
 
-FORCEINLINE
+NTKERNELAPI
 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;
-}
+NTAPI
+KeSetImportanceDpc(
+  IN OUT PRKDPC  Dpc,
+  IN KDPC_IMPORTANCE  Importance);
 
-FORCEINLINE
-VOID
-WRITE_PORT_BUFFER_UCHAR(
-  IN PUCHAR Port,
-  IN PUCHAR Buffer,
-  IN ULONG Count)
-{
-  __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
+NTKERNELAPI
+KPRIORITY
+NTAPI
+KeSetPriorityThread(
+  IN OUT PKTHREAD  Thread,
+  IN KPRIORITY  Priority);
 
-FORCEINLINE
-VOID
-WRITE_PORT_BUFFER_ULONG(
-  IN PULONG Port,
-  IN PULONG Buffer,
-  IN ULONG Count)
-{
-  __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSetTimer(
+  IN OUT PKTIMER  Timer,
+  IN LARGE_INTEGER  DueTime,
+  IN PKDPC  Dpc  OPTIONAL);
 
-FORCEINLINE
-VOID
-WRITE_PORT_BUFFER_USHORT(
-  IN PUSHORT Port,
-  IN PUSHORT Buffer,
-  IN ULONG Count)
-{
-  __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSetTimerEx(
+  IN OUT PKTIMER  Timer,
+  IN LARGE_INTEGER  DueTime,
+  IN LONG  Period  OPTIONAL,
+  IN PKDPC  Dpc  OPTIONAL);
 
-FORCEINLINE
+NTHALAPI
 VOID
-WRITE_PORT_UCHAR(
-  IN PUCHAR Port,
-  IN UCHAR Value)
-{
-  __outbyte((USHORT)(ULONG_PTR)Port, Value);
-}
+NTAPI
+KeStallExecutionProcessor(
+  IN ULONG  MicroSeconds);
 
-FORCEINLINE
-VOID
-WRITE_PORT_ULONG(
-  IN PULONG Port,
-  IN ULONG Value)
-{
-  __outdword((USHORT)(ULONG_PTR)Port, Value);
-}
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSynchronizeExecution(
+  IN OUT PKINTERRUPT    Interrupt,
+  IN PKSYNCHRONIZE_ROUTINE  SynchronizeRoutine,
+  IN PVOID  SynchronizeContext OPTIONAL);
 
-FORCEINLINE
-VOID
-WRITE_PORT_USHORT(
-  IN PUSHORT Port,
-  IN USHORT Value)
-{
-  __outword((USHORT)(ULONG_PTR)Port, Value);
-}
+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);
 
-FORCEINLINE
-VOID
-WRITE_REGISTER_BUFFER_UCHAR(
-  IN PUCHAR Register,
-  IN PUCHAR Buffer,
-  IN ULONG Count)
-{
-  LONG Synch;
-  __movsb(Register, Buffer, Count);
-  InterlockedOr(&Synch, 1);
-}
+#define KeWaitForMutexObject KeWaitForSingleObject
 
-FORCEINLINE
-VOID
-WRITE_REGISTER_BUFFER_ULONG(
-  IN PULONG Register,
-  IN PULONG Buffer,
-  IN ULONG Count)
-{
-  LONG Synch;
-  __movsd(Register, Buffer, Count);
-  InterlockedOr(&Synch, 1);
-}
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeWaitForSingleObject(
+  IN PVOID  Object,
+  IN KWAIT_REASON  WaitReason,
+  IN KPROCESSOR_MODE  WaitMode,
+  IN BOOLEAN  Alertable,
+  IN PLARGE_INTEGER  Timeout  OPTIONAL);
 
-FORCEINLINE
-VOID
-WRITE_REGISTER_BUFFER_USHORT(
-  IN PUSHORT Register,
-  IN PUSHORT Buffer,
-  IN ULONG Count)
-{
-  LONG Synch;
-  __movsw(Register, Buffer, Count);
-  InterlockedOr(&Synch, 1);
-}
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
-FORCEINLINE
-VOID
-WRITE_REGISTER_UCHAR(
-  IN volatile UCHAR *Register,
-  IN UCHAR Value)
-{
-  LONG Synch;
-  *Register = Value;
-  InterlockedOr(&Synch, 1);
-}
+#if (NTDDI_VERSION >= NTDDI_WINXP)
 
-FORCEINLINE
+_DECL_HAL_KE_IMPORT
 VOID
-WRITE_REGISTER_ULONG(
-  IN volatile ULONG *Register,
-  IN ULONG Value)
-{
-  LONG Synch;
-  *Register = Value;
-  InterlockedOr(&Synch, 1);
-}
+FASTCALL
+KeAcquireInStackQueuedSpinLock(
+  IN OUT PKSPIN_LOCK SpinLock,
+  OUT PKLOCK_QUEUE_HANDLE LockHandle);
 
-FORCEINLINE
+NTKERNELAPI
 VOID
-WRITE_REGISTER_USHORT(
-  IN volatile USHORT *Register,
-  IN USHORT Value)
-{
-  LONG Sync;
-  *Register = Value;
-  InterlockedOr(&Sync, 1);
-}
-#endif
+FASTCALL
+KeAcquireInStackQueuedSpinLockAtDpcLevel(
+  IN OUT PKSPIN_LOCK  SpinLock,
+  OUT PKLOCK_QUEUE_HANDLE  LockHandle);
 
-#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
-   (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+NTKERNELAPI
+KIRQL
+NTAPI
+KeAcquireInterruptSpinLock(
+  IN OUT PKINTERRUPT  Interrupt);
 
-#define DMA_MACROS_DEFINED
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeAreApcsDisabled(VOID);
 
-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 );
-}
+NTKERNELAPI
+ULONG
+NTAPI
+KeGetRecommendedSharedDataAlignment(VOID);
 
-FORCEINLINE
-BOOLEAN
+NTKERNELAPI
+ULONG
 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);
-}
+KeQueryRuntimeThread(
+  IN PKTHREAD Thread,
+  OUT PULONG UserTime);
 
-FORCEINLINE
+NTKERNELAPI
 VOID
-NTAPI
-IoFreeAdapterChannel(
-  IN PDMA_ADAPTER DmaAdapter)
-{
-  PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
-  FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel;
-  ASSERT(FreeAdapterChannel);
-  FreeAdapterChannel(DmaAdapter);
-}
+FASTCALL
+KeReleaseInStackQueuedSpinLockFromDpcLevel(
+  IN PKLOCK_QUEUE_HANDLE  LockHandle);
 
-FORCEINLINE
+NTKERNELAPI
 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);
-}
+KeReleaseInterruptSpinLock(
+  IN OUT PKINTERRUPT  Interrupt,
+  IN KIRQL  OldIrql);
 
-FORCEINLINE
-PHYSICAL_ADDRESS
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
 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
+KeRemoveByKeyDeviceQueueIfBusy(
+  IN OUT PKDEVICE_QUEUE DeviceQueue,
+  IN ULONG SortKey);
 
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+_DECL_HAL_KE_IMPORT
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLock(
+  IN PKLOCK_QUEUE_HANDLE LockHandle);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
 
 NTKERNELAPI
-VOID
+BOOLEAN
 NTAPI
-IoAcquireCancelSpinLock(
-  OUT PKIRQL Irql);
+KeDeregisterBugCheckReasonCallback(
+  IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord);
 
 NTKERNELAPI
-NTSTATUS
+BOOLEAN
 NTAPI
-IoAcquireRemoveLockEx(
-  IN PIO_REMOVE_LOCK RemoveLock,
-  IN PVOID Tag OPTIONAL,
-  IN PCSTR File,
-  IN ULONG Line,
-  IN ULONG RemlockSize);
+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
-NTSTATUS
+VOID
 NTAPI
-IoAllocateDriverObjectExtension(
-  IN PDRIVER_OBJECT DriverObject,
-  IN PVOID ClientIdentificationAddress,
-  IN ULONG DriverObjectExtensionSize,
-  OUT PVOID *DriverObjectExtension);
+KeFlushQueuedDpcs(
+  VOID);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
 
 NTKERNELAPI
 PVOID
 NTAPI
-IoAllocateErrorLogEntry(
-  IN PVOID IoObject,
-  IN UCHAR EntrySize);
+KeRegisterNmiCallback(
+  IN PNMI_CALLBACK CallbackRoutine,
+  IN PVOID Context OPTIONAL);
 
 NTKERNELAPI
-PIRP
+NTSTATUS
 NTAPI
-IoAllocateIrp(
-  IN CCHAR StackSize,
-  IN BOOLEAN ChargeQuota);
+KeDeregisterNmiCallback(
+  IN PVOID Handle);
 
 NTKERNELAPI
-PMDL
+VOID
 NTAPI
-IoAllocateMdl(
-  IN PVOID VirtualAddress OPTIONAL,
-  IN ULONG Length,
-  IN BOOLEAN SecondaryBuffer,
-  IN BOOLEAN ChargeQuota,
-  IN OUT PIRP Irp OPTIONAL);
+KeInitializeThreadedDpc(
+  OUT PRKDPC Dpc,
+  IN PKDEFERRED_ROUTINE DeferredRoutine,
+  IN PVOID DeferredContext OPTIONAL);
 
 NTKERNELAPI
-PIO_WORKITEM
+ULONG_PTR
 NTAPI
-IoAllocateWorkItem(
-  IN PDEVICE_OBJECT DeviceObject);
+KeIpiGenericCall(
+  IN PKIPI_BROADCAST_WORKER BroadcastFunction,
+  IN ULONG_PTR Context);
 
 NTKERNELAPI
-NTSTATUS
-NTAPI
-IoAttachDevice(
-  IN PDEVICE_OBJECT SourceDevice,
-  IN PUNICODE_STRING TargetDevice,
-  OUT PDEVICE_OBJECT *AttachedDevice);
+KIRQL
+FASTCALL
+KeAcquireSpinLockForDpc(
+  IN OUT PKSPIN_LOCK SpinLock);
 
 NTKERNELAPI
-PDEVICE_OBJECT
-NTAPI
-IoAttachDeviceToDeviceStack(
-  IN PDEVICE_OBJECT SourceDevice,
-  IN PDEVICE_OBJECT TargetDevice);
+VOID
+FASTCALL
+KeReleaseSpinLockForDpc(
+  IN OUT PKSPIN_LOCK SpinLock,
+  IN KIRQL OldIrql);
 
 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);
+BOOLEAN
+FASTCALL
+KeTestSpinLock(
+  IN PKSPIN_LOCK SpinLock);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
 
 NTKERNELAPI
-PIRP
+BOOLEAN
+FASTCALL
+KeTryToAcquireSpinLockAtDpcLevel(
+  IN OUT PKSPIN_LOCK SpinLock);
+
+NTKERNELAPI
+BOOLEAN
 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);
+KeAreAllApcsDisabled(
+  VOID);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireGuardedMutex(
+    IN OUT PKGUARDED_MUTEX GuardedMutex
+);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireGuardedMutexUnsafe(
+    IN OUT PKGUARDED_MUTEX GuardedMutex
+);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoBuildPartialMdl(
-  IN PMDL SourceMdl,
-  IN OUT PMDL TargetMdl,
-  IN PVOID VirtualAddress,
-  IN ULONG Length);
+KeEnterGuardedRegion(
+    VOID
+);
 
 NTKERNELAPI
-PIRP
+VOID
 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);
+KeLeaveGuardedRegion(
+    VOID
+);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 FASTCALL
-IofCallDriver(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN OUT PIRP Irp);
-#define IoCallDriver IofCallDriver
+KeInitializeGuardedMutex(
+    OUT PKGUARDED_MUTEX GuardedMutex
+);
 
 NTKERNELAPI
 VOID
 FASTCALL
-IofCompleteRequest(
-  IN PIRP Irp,
-  IN CCHAR PriorityBoost);
-#define IoCompleteRequest IofCompleteRequest
+KeReleaseGuardedMutexUnsafe(
+    IN OUT PKGUARDED_MUTEX GuardedMutex
+);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseGuardedMutex(
+    IN OUT PKGUARDED_MUTEX GuardedMutex
+);
 
 NTKERNELAPI
 BOOLEAN
-NTAPI
-IoCancelIrp(
-  IN PIRP Irp);
+FASTCALL
+KeTryToAcquireGuardedMutex(
+    IN OUT PKGUARDED_MUTEX GuardedMutex
+);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoCheckShareAccess(
-  IN ACCESS_MASK DesiredAccess,
-  IN ULONG DesiredShareAccess,
-  IN OUT PFILE_OBJECT FileObject,
-  IN OUT PSHARE_ACCESS ShareAccess,
-  IN BOOLEAN Update);
+#if (NTDDI_VERSION >= NTDDI_VISTA)
 
 NTKERNELAPI
 VOID
 FASTCALL
-IofCompleteRequest(
-  IN PIRP Irp,
-  IN CCHAR PriorityBoost);
+KeAcquireInStackQueuedSpinLockForDpc(
+  IN OUT PKSPIN_LOCK SpinLock,
+  OUT PKLOCK_QUEUE_HANDLE LockHandle);
 
 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);
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLockForDpc(
+  IN PKLOCK_QUEUE_HANDLE LockHandle);
 
 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);
+KeQueryDpcWatchdogInformation(
+  OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation);
 
+#if defined(SINGLE_GROUP_LEGACY_API)
 NTKERNELAPI
-NTSTATUS
+KAFFINITY
 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);
+KeSetSystemAffinityThreadEx(
+  IN KAFFINITY Affinity);
 
 NTKERNELAPI
-PKEVENT
+ULONG
 NTAPI
-IoCreateNotificationEvent(
-  IN PUNICODE_STRING EventName,
-  OUT PHANDLE EventHandle);
+KeQueryActiveProcessorCount(
+  OUT PKAFFINITY ActiveProcessors OPTIONAL);
 
 NTKERNELAPI
-NTSTATUS
+ULONG
 NTAPI
-IoCreateSymbolicLink(
-  IN PUNICODE_STRING SymbolicLinkName,
-  IN PUNICODE_STRING DeviceName);
+KeQueryMaximumProcessorCount(
+  VOID);
+#endif
 
-NTKERNELAPI
-PKEVENT
-NTAPI
-IoCreateSynchronizationEvent(
-  IN PUNICODE_STRING EventName,
-  OUT PHANDLE EventHandle);
+#endif /*  (NTDDI_VERSION >= NTDDI_VISTA) */
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoCreateUnprotectedSymbolicLink(
-  IN PUNICODE_STRING SymbolicLinkName,
-  IN PUNICODE_STRING DeviceName);
+#if (NTDDI_VERSION >= NTDDI_WS08)
+
+PVOID
+KeRegisterProcessorChangeCallback(
+  IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction,
+  IN PVOID CallbackContext OPTIONAL,
+  IN ULONG Flags);
 
-NTKERNELAPI
 VOID
+KeDeregisterProcessorChangeCallback(
+  IN PVOID CallbackHandle);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS08) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+ULONG64
 NTAPI
-IoDeleteDevice(
-  IN PDEVICE_OBJECT DeviceObject);
+KeQueryTotalCycleTimeProcess(
+  IN OUT PKPROCESS Process,
+  OUT PULONG64 CycleTimeStamp);
 
-NTKERNELAPI
-NTSTATUS
+ULONG64
 NTAPI
-IoDeleteSymbolicLink(
-  IN PUNICODE_STRING SymbolicLinkName);
+KeQueryTotalCycleTimeThread(
+  IN OUT PKTHREAD Thread,
+  OUT PULONG64 CycleTimeStamp);
 
 NTKERNELAPI
-VOID
+NTSTATUS
 NTAPI
-IoDetachDevice(
-  IN OUT PDEVICE_OBJECT TargetDevice);
+KeSetTargetProcessorDpcEx(
+  IN OUT PKDPC Dpc,
+  IN PPROCESSOR_NUMBER ProcNumber);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoDisconnectInterrupt(
-  IN PKINTERRUPT InterruptObject);
+KeSetSystemGroupAffinityThread(
+  IN PGROUP_AFFINITY Affinity,
+  OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoFreeIrp(
-  IN PIRP Irp);
+KeRevertToUserGroupAffinityThread(
+  IN PGROUP_AFFINITY PreviousAffinity);
 
 NTKERNELAPI
-VOID
+BOOLEAN
 NTAPI
-IoFreeMdl(
-  IN PMDL Mdl);
+KeSetCoalescableTimer(
+  IN OUT PKTIMER Timer,
+  IN LARGE_INTEGER DueTime,
+  IN ULONG Period,
+  IN ULONG TolerableDelay,
+  IN PKDPC Dpc OPTIONAL);
 
 NTKERNELAPI
-VOID
+ULONGLONG
 NTAPI
-IoFreeWorkItem(
-  IN PIO_WORKITEM IoWorkItem);
+KeQueryUnbiasedInterruptTime(
+  VOID);
 
 NTKERNELAPI
-PDEVICE_OBJECT
+ULONG
 NTAPI
-IoGetAttachedDevice(
-  IN PDEVICE_OBJECT DeviceObject);
+KeQueryActiveProcessorCountEx(
+  IN USHORT GroupNumber);
 
 NTKERNELAPI
-PDEVICE_OBJECT
+ULONG
 NTAPI
-IoGetAttachedDeviceReference(
-  IN PDEVICE_OBJECT DeviceObject);
+KeQueryMaximumProcessorCountEx(
+  IN USHORT GroupNumber);
 
 NTKERNELAPI
-NTSTATUS
+USHORT
 NTAPI
-IoGetBootDiskInformation(
-  IN OUT PBOOTDISK_INFORMATION BootDiskInformation,
-  IN ULONG Size);
+KeQueryActiveGroupCount(
+  VOID);
 
 NTKERNELAPI
-NTSTATUS
+USHORT
 NTAPI
-IoGetDeviceInterfaceAlias(
-  IN PUNICODE_STRING SymbolicLinkName,
-  IN CONST GUID *AliasInterfaceClassGuid,
-  OUT PUNICODE_STRING AliasSymbolicLinkName);
+KeQueryMaximumGroupCount(
+  VOID);
 
 NTKERNELAPI
-PEPROCESS
+KAFFINITY
 NTAPI
-IoGetCurrentProcess(VOID);
+KeQueryGroupAffinity 
+  IN USHORT GroupNumber);
 
 NTKERNELAPI
-NTSTATUS
+ULONG
 NTAPI
-IoGetDeviceInterfaces(
-  IN CONST GUID *InterfaceClassGuid,
-  IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
-  IN ULONG Flags,
-  OUT PWSTR *SymbolicLinkList);
+KeGetCurrentProcessorNumberEx(
+  OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoGetDeviceObjectPointer(
-  IN PUNICODE_STRING ObjectName,
-  IN ACCESS_MASK DesiredAccess,
-  OUT PFILE_OBJECT *FileObject,
-  OUT PDEVICE_OBJECT *DeviceObject);
+KeQueryNodeActiveAffinity(
+  IN USHORT NodeNumber,
+  OUT PGROUP_AFFINITY Affinity OPTIONAL,
+  OUT PUSHORT Count OPTIONAL);
 
 NTKERNELAPI
-NTSTATUS
+USHORT
 NTAPI
-IoGetDeviceProperty(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
-  IN ULONG BufferLength,
-  OUT PVOID PropertyBuffer,
-  OUT PULONG ResultLength);
+KeQueryNodeMaximumProcessorCount(
+  IN USHORT NodeNumber);
 
 NTKERNELAPI
-PDMA_ADAPTER
+USHORT
 NTAPI
-IoGetDmaAdapter(
-  IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
-  IN PDEVICE_DESCRIPTION DeviceDescription,
-  IN OUT PULONG NumberOfMapRegisters);
+KeQueryHighestNodeNumber(
+  VOID);
 
 NTKERNELAPI
-PVOID
+USHORT
 NTAPI
-IoGetDriverObjectExtension(
-  IN PDRIVER_OBJECT DriverObject,
-  IN PVOID ClientIdentificationAddress);
+KeGetCurrentNodeNumber(
+  VOID);
 
 NTKERNELAPI
-PVOID
+NTSTATUS
 NTAPI
-IoGetInitialStack(VOID);
+KeQueryLogicalProcessorRelationship(
+  IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL,
+  IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
+  OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL,
+  IN OUT PULONG Length);
 
 NTKERNELAPI
-PDEVICE_OBJECT
+NTSTATUS
 NTAPI
-IoGetRelatedDeviceObject(
-  IN PFILE_OBJECT FileObject);
+KeSaveExtendedProcessorState(
+  IN ULONG64 Mask,
+  OUT PXSTATE_SAVE XStateSave);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoQueueWorkItem(
-  IN PIO_WORKITEM IoWorkItem,
-  IN PIO_WORKITEM_ROUTINE WorkerRoutine,
-  IN WORK_QUEUE_TYPE QueueType,
-  IN PVOID Context OPTIONAL);
+KeRestoreExtendedProcessorState(
+  IN PXSTATE_SAVE XStateSave);
 
-NTKERNELAPI
+#endif /*  (NTDDI_VERSION >= NTDDI_WIN7) */
+
+#if !defined(_IA64_)
+NTHALAPI
 VOID
 NTAPI
-IoInitializeIrp(
-  IN OUT PIRP Irp,
-  IN USHORT PacketSize,
-  IN CCHAR StackSize);
+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
+
+#define PAGED_CODE_LOCKED() NOP_FUNCTION;
+
+/******************************************************************************
+ *                       Memory manager Functions                             *
+ ******************************************************************************/
+
+/*
+ * 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))
+
+/* ULONG
+ * BYTE_OFFSET(
+ *   IN PVOID Va)
+ */
+#define BYTE_OFFSET(Va) \
+  ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
 
-NTKERNELAPI
-VOID
-NTAPI
-IoInitializeRemoveLockEx(
-  IN PIO_REMOVE_LOCK Lock,
-  IN ULONG AllocateTag,
-  IN ULONG MaxLockedMinutes,
-  IN ULONG HighWatermark,
-  IN ULONG RemlockSize);
+/* ULONG
+ * BYTES_TO_PAGES(
+ *   IN ULONG Size)
+ */
+#define BYTES_TO_PAGES(Size) \
+  (((Size) >> PAGE_SHIFT) + (((Size) & (PAGE_SIZE - 1)) != 0))
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoInitializeTimer(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN PIO_TIMER_ROUTINE TimerRoutine,
-  IN PVOID Context OPTIONAL);
+/* PVOID
+ * PAGE_ALIGN(
+ *   IN PVOID Va)
+ */
+#define PAGE_ALIGN(Va) \
+  ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
 
-NTKERNELAPI
-VOID
-NTAPI
-IoInvalidateDeviceRelations(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN DEVICE_RELATION_TYPE Type);
+/* ULONG_PTR
+ * ROUND_TO_PAGES(
+ *   IN ULONG_PTR Size)
+ */
+#define ROUND_TO_PAGES(Size) \
+  (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
 
-NTKERNELAPI
-VOID
-NTAPI
-IoInvalidateDeviceState(
-  IN PDEVICE_OBJECT PhysicalDeviceObject);
+/* 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))
 
-NTKERNELAPI
-BOOLEAN
-NTAPI
-IoIsWdmVersionAvailable(
-  IN UCHAR MajorVersion,
-  IN UCHAR MinorVersion);
+/*
+ * ULONG
+ * MmGetMdlByteCount(
+ *   IN PMDL  Mdl)
+ */
+#define MmGetMdlByteCount(_Mdl) \
+  ((_Mdl)->ByteCount)
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoOpenDeviceInterfaceRegistryKey(
-  IN PUNICODE_STRING SymbolicLinkName,
-  IN ACCESS_MASK DesiredAccess,
-  OUT PHANDLE DeviceInterfaceKey);
+/*
+ * ULONG
+ * MmGetMdlByteOffset(
+ *   IN PMDL  Mdl)
+ */
+#define MmGetMdlByteOffset(_Mdl) \
+  ((_Mdl)->ByteOffset)
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoOpenDeviceRegistryKey(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN ULONG DevInstKeyType,
-  IN ACCESS_MASK DesiredAccess,
-  OUT PHANDLE DevInstRegKey);
+/*
+ * PPFN_NUMBER
+ * MmGetMdlPfnArray(
+ *   IN PMDL  Mdl)
+ */
+#define MmGetMdlPfnArray(_Mdl) \
+  ((PPFN_NUMBER) ((_Mdl) + 1))
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoRegisterDeviceInterface(
-  IN PDEVICE_OBJECT PhysicalDeviceObject,
-  IN CONST GUID *InterfaceClassGuid,
-  IN PUNICODE_STRING ReferenceString OPTIONAL,
-  OUT PUNICODE_STRING SymbolicLinkName);
+/*
+ * PVOID
+ * MmGetMdlVirtualAddress(
+ *   IN PMDL  Mdl)
+ */
+#define MmGetMdlVirtualAddress(_Mdl) \
+  ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
 
-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);
+#define MmGetProcedureAddress(Address) (Address)
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoRegisterShutdownNotification(
-  IN PDEVICE_OBJECT DeviceObject);
+/* 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)))
 
-NTKERNELAPI
-VOID
-NTAPI
-IoReleaseCancelSpinLock(
-  IN KIRQL Irql);
+/* 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)))
 
-NTKERNELAPI
-VOID
-NTAPI
-IoReleaseRemoveLockAndWaitEx(
-  IN PIO_REMOVE_LOCK RemoveLock,
-  IN PVOID Tag OPTIONAL,
-  IN ULONG RemlockSize);
+/*
+ * 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; \
+}
 
-NTKERNELAPI
-VOID
-NTAPI
-IoReleaseRemoveLockEx(
-  IN PIO_REMOVE_LOCK RemoveLock,
-  IN PVOID Tag OPTIONAL,
-  IN ULONG RemlockSize);
+/*
+ * 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); \
+  } \
+}
 
-NTKERNELAPI
-VOID
-NTAPI
-IoRemoveShareAccess(
-  IN PFILE_OBJECT FileObject,
-  IN OUT PSHARE_ACCESS ShareAccess);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
 NTKERNELAPI
-NTSTATUS
+PVOID
 NTAPI
-IoReportTargetDeviceChange(
-  IN PDEVICE_OBJECT PhysicalDeviceObject,
-  IN PVOID NotificationStructure);
+MmAllocateContiguousMemory(
+  IN SIZE_T  NumberOfBytes,
+  IN PHYSICAL_ADDRESS  HighestAcceptableAddress);
 
 NTKERNELAPI
-NTSTATUS
+PVOID
 NTAPI
-IoReportTargetDeviceChangeAsynchronous(
-  IN PDEVICE_OBJECT PhysicalDeviceObject,
-  IN PVOID NotificationStructure,
-  IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL,
-  IN PVOID Context OPTIONAL);
+MmAllocateContiguousMemorySpecifyCache(
+  IN SIZE_T  NumberOfBytes,
+  IN PHYSICAL_ADDRESS  LowestAcceptableAddress,
+  IN PHYSICAL_ADDRESS  HighestAcceptableAddress,
+  IN PHYSICAL_ADDRESS  BoundaryAddressMultiple  OPTIONAL,
+  IN MEMORY_CACHING_TYPE  CacheType);
 
 NTKERNELAPI
-VOID
+PMDL
 NTAPI
-IoRequestDeviceEject(
-  IN PDEVICE_OBJECT PhysicalDeviceObject);
+MmAllocatePagesForMdl(
+  IN PHYSICAL_ADDRESS  LowAddress,
+  IN PHYSICAL_ADDRESS  HighAddress,
+  IN PHYSICAL_ADDRESS  SkipBytes,
+  IN SIZE_T  TotalBytes);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoReuseIrp(
-  IN OUT PIRP Irp,
-  IN NTSTATUS Status);
+MmBuildMdlForNonPagedPool(
+  IN OUT PMDLX  MemoryDescriptorList);
 
+//DECLSPEC_DEPRECATED_DDK
 NTKERNELAPI
-NTSTATUS
+PMDL
 NTAPI
-IoSetDeviceInterfaceState(
-  IN PUNICODE_STRING SymbolicLinkName,
-  IN BOOLEAN Enable);
+MmCreateMdl(
+  IN PMDL  MemoryDescriptorList  OPTIONAL,
+  IN PVOID  Base,
+  IN SIZE_T  Length);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoSetShareAccess(
-  IN ACCESS_MASK DesiredAccess,
-  IN ULONG DesiredShareAccess,
-  IN OUT PFILE_OBJECT FileObject,
-  OUT PSHARE_ACCESS ShareAccess);
+MmFreeContiguousMemory(
+  IN PVOID  BaseAddress);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoStartNextPacket(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN BOOLEAN Cancelable);
+MmFreeContiguousMemorySpecifyCache(
+  IN PVOID  BaseAddress,
+  IN SIZE_T  NumberOfBytes,
+  IN MEMORY_CACHING_TYPE  CacheType);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoStartNextPacketByKey(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN BOOLEAN Cancelable,
-  IN ULONG Key);
+MmFreePagesFromMdl(
+  IN PMDLX MemoryDescriptorList);
 
 NTKERNELAPI
-VOID
+PVOID
 NTAPI
-IoStartPacket(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN PIRP Irp,
-  IN PULONG Key OPTIONAL,
-  IN PDRIVER_CANCEL CancelFunction OPTIONAL);
+MmGetSystemRoutineAddress(
+  IN PUNICODE_STRING  SystemRoutineName);
 
 NTKERNELAPI
-VOID
+LOGICAL
 NTAPI
-IoStartTimer(
-  IN PDEVICE_OBJECT DeviceObject);
+MmIsDriverVerifying(
+  IN struct _DRIVER_OBJECT *DriverObject);
 
 NTKERNELAPI
-VOID
+PVOID
 NTAPI
-IoStopTimer(
-  IN PDEVICE_OBJECT DeviceObject);
+MmLockPagableDataSection(
+  IN PVOID  AddressWithinSection);
 
 NTKERNELAPI
-NTSTATUS
+PVOID
 NTAPI
-IoUnregisterPlugPlayNotification(
-  IN PVOID NotificationEntry);
+MmMapIoSpace(
+  IN PHYSICAL_ADDRESS  PhysicalAddress,
+  IN SIZE_T  NumberOfBytes,
+  IN MEMORY_CACHING_TYPE  CacheEnable);
 
 NTKERNELAPI
-VOID
+PVOID
 NTAPI
-IoUnregisterShutdownNotification(
-  IN PDEVICE_OBJECT DeviceObject);
+MmMapLockedPages(
+  IN PMDL  MemoryDescriptorList,
+  IN KPROCESSOR_MODE  AccessMode);
 
 NTKERNELAPI
-VOID
+PVOID
 NTAPI
-IoUpdateShareAccess(
-  IN PFILE_OBJECT FileObject,
-  IN OUT PSHARE_ACCESS ShareAccess);
+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
-NTSTATUS
+PVOID
 NTAPI
-IoWMIAllocateInstanceIds(
-  IN GUID *Guid,
-  IN ULONG InstanceCount,
-  OUT ULONG *FirstInstanceId);
+MmPageEntireDriver(
+  IN PVOID  AddressWithinSection);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoWMIQuerySingleInstanceMultiple(
-  IN PVOID *DataBlockObjectList,
-  IN PUNICODE_STRING InstanceNames,
-  IN ULONG ObjectCount,
-  IN OUT ULONG *InOutBufferSize,
-  OUT PVOID OutBuffer);
+MmProbeAndLockPages(
+  IN OUT PMDL  MemoryDescriptorList,
+  IN KPROCESSOR_MODE  AccessMode,
+  IN LOCK_OPERATION  Operation);
 
 NTKERNELAPI
-NTSTATUS
+MM_SYSTEMSIZE
 NTAPI
-IoWMIRegistrationControl(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN ULONG Action);
+MmQuerySystemSize(
+  VOID);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoWMISuggestInstanceName(
-  IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
-  IN PUNICODE_STRING SymbolicLinkName OPTIONAL,
-  IN BOOLEAN CombineNames,
-  OUT PUNICODE_STRING SuggestedInstanceName);
+MmResetDriverPaging(
+  IN PVOID  AddressWithinSection);
 
 NTKERNELAPI
-NTSTATUS
+SIZE_T
 NTAPI
-IoWMIWriteEvent(
-  IN OUT PVOID WnodeEventItem);
+MmSizeOfMdl(
+  IN PVOID  Base,
+  IN SIZE_T  Length);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoWriteErrorLogEntry(
-  IN PVOID ElEntry);
+MmUnlockPagableImageSection(
+  IN PVOID  ImageSectionHandle);
 
 NTKERNELAPI
-PIRP
+VOID
 NTAPI
-IoGetTopLevelIrp(VOID);
+MmUnlockPages(
+  IN OUT PMDL  MemoryDescriptorList);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoRegisterLastChanceShutdownNotification(
-  IN PDEVICE_OBJECT DeviceObject);
+MmUnmapIoSpace(
+  IN PVOID  BaseAddress,
+  IN SIZE_T  NumberOfBytes);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoSetTopLevelIrp(
-  IN PIRP Irp OPTIONAL);
+MmProbeAndLockProcessPages(
+  IN OUT PMDL  MemoryDescriptorList,
+  IN PEPROCESS  Process,
+  IN KPROCESSOR_MODE  AccessMode,
+  IN LOCK_OPERATION  Operation);
 
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+NTKERNELAPI
+VOID
+NTAPI
+MmUnmapLockedPages(
+  IN PVOID  BaseAddress,
+  IN PMDL  MemoryDescriptorList);
 
+#endif
 
 #if (NTDDI_VERSION >= NTDDI_WINXP)
 
 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);
+MmAdvanceMdl(
+  IN OUT PMDL  Mdl,
+  IN ULONG  NumberOfBytes);
 
 NTKERNELAPI
-VOID
+PVOID
 NTAPI
-IoCsqInsertIrp(
-  IN PIO_CSQ Csq,
-  IN PIRP Irp,
-  IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL);
+MmAllocateMappingAddress(
+  IN SIZE_T  NumberOfBytes,
+  IN ULONG  PoolTag);
 
 NTKERNELAPI
-PIRP
+VOID
 NTAPI
-IoCsqRemoveIrp(
-  IN PIO_CSQ Csq,
-  IN PIO_CSQ_IRP_CONTEXT Context);
+MmFreeMappingAddress(
+  IN PVOID  BaseAddress,
+  IN ULONG  PoolTag);
 
 NTKERNELAPI
-PIRP
+NTSTATUS
 NTAPI
-IoCsqRemoveNextIrp(
-  IN PIO_CSQ Csq,
-  IN PVOID PeekContext OPTIONAL);
+MmIsVerifierEnabled(
+  OUT PULONG  VerifierFlags);
 
 NTKERNELAPI
-BOOLEAN
+PVOID
 NTAPI
-IoForwardIrpSynchronously(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN PIRP Irp);
+MmMapLockedPagesWithReservedMapping(
+  IN PVOID  MappingAddress,
+  IN ULONG  PoolTag,
+  IN PMDL  MemoryDescriptorList,
+  IN MEMORY_CACHING_TYPE  CacheType);
 
-#define IoForwardAndCatchIrp IoForwardIrpSynchronously
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmProtectMdlSystemAddress(
+  IN PMDL  MemoryDescriptorList,
+  IN ULONG  NewProtect);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoFreeErrorLogEntry(
-  PVOID ElEntry);
+MmUnmapReservedMapping(
+  IN PVOID  BaseAddress,
+  IN ULONG  PoolTag,
+  IN PMDL  MemoryDescriptorList);
 
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
 NTKERNELAPI
-NTSTATUS
+PMDL
 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);
+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
 
-VOID
+/******************************************************************************
+ *                            Security Manager Functions                      *
+ ******************************************************************************/
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+BOOLEAN
 NTAPI
-IoSetStartIoAttributes(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN BOOLEAN DeferredStartIo,
-  IN BOOLEAN NonCancelable);
+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
-IoWMIDeviceObjectToInstanceName(
-  IN PVOID DataBlockObject,
-  IN PDEVICE_OBJECT DeviceObject,
-  OUT PUNICODE_STRING InstanceName);
+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
-IoWMIExecuteMethod(
-  IN PVOID DataBlockObject,
-  IN PUNICODE_STRING InstanceName,
-  IN ULONG MethodId,
-  IN ULONG InBufferSize,
-  IN OUT PULONG OutBufferSize,
-  IN OUT  PUCHAR InOutBuffer);
+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
-IoWMIHandleToInstanceName(
-  IN PVOID DataBlockObject,
-  IN HANDLE FileHandle,
-  OUT PUNICODE_STRING InstanceName);
+SeDeassignSecurity(
+  IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor);
 
 NTKERNELAPI
-NTSTATUS
+BOOLEAN
 NTAPI
-IoWMIOpenBlock(
-  IN GUID *DataBlockGuid,
-  IN ULONG DesiredAccess,
-  OUT PVOID *DataBlockObject);
+SeValidSecurityDescriptor(
+  IN ULONG Length,
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
 
 NTKERNELAPI
-NTSTATUS
+ULONG
 NTAPI
-IoWMIQueryAllData(
-  IN PVOID DataBlockObject,
-  IN OUT ULONG *InOutBufferSize,
-  OUT PVOID OutBuffer);
+SeObjectCreateSaclAccessBits(
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoWMIQueryAllDataMultiple(
-  IN PVOID *DataBlockObjectList,
-  IN ULONG ObjectCount,
-  IN OUT ULONG *InOutBufferSize,
-  OUT PVOID OutBuffer);
+SeReleaseSubjectContext(
+  IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoWMIQuerySingleInstance(
-  IN PVOID DataBlockObject,
-  IN PUNICODE_STRING InstanceName,
-  IN OUT ULONG *InOutBufferSize,
-  OUT PVOID OutBuffer);
+SeUnlockSubjectContext(
+  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoWMISetNotificationCallback(
-  IN OUT PVOID Object,
-  IN WMI_NOTIFICATION_CALLBACK Callback,
-  IN PVOID Context OPTIONAL);
+SeCaptureSubjectContext(
+  OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
 
 NTKERNELAPI
+VOID
+NTAPI
+SeLockSubjectContext(
+  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+
 NTSTATUS
 NTAPI
-IoWMISetSingleInstance(
-  IN PVOID DataBlockObject,
-  IN PUNICODE_STRING InstanceName,
-  IN ULONG Version,
-  IN ULONG ValueBufferSize,
-  IN PVOID ValueBuffer);
+SeSetAuditParameter(
+  IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters,
+  IN SE_ADT_PARAMETER_TYPE Type,
+  IN ULONG Index,
+  IN PVOID Data);
 
-NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMISetSingleItem(
-  IN PVOID DataBlockObject,
-  IN PUNICODE_STRING InstanceName,
-  IN ULONG DataItemId,
-  IN ULONG Version,
-  IN ULONG ValueBufferSize,
-  IN PVOID ValueBuffer);
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+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)
 
-#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
 NTKERNELAPI
-NTSTATUS
+ULONG
 NTAPI
-IoValidateDeviceIoControlAccess(
-  IN PIRP Irp,
-  IN ULONG RequiredAccess);
-#endif
+SeComputeAutoInheritByObjectType(
+  IN PVOID ObjectType,
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
+  IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL);
 
-#if (NTDDI_VERSION >= NTDDI_WS03)
+#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) */
+
+/******************************************************************************
+ *                         Configuration Manager Functions                    *
+ ******************************************************************************/
 
+#if (NTDDI_VERSION >= NTDDI_WINXP)
 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);
+CmRegisterCallback(
+  IN PEX_CALLBACK_FUNCTION  Function,
+  IN PVOID  Context  OPTIONAL,
+  OUT PLARGE_INTEGER  Cookie);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoCsqInsertIrpEx(
-  IN PIO_CSQ Csq,
-  IN PIRP Irp,
-  IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL,
-  IN PVOID InsertContext OPTIONAL);
-#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+CmUnRegisterCallback(
+  IN LARGE_INTEGER  Cookie);
+#endif
 
 
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+/******************************************************************************
+ *                         I/O Manager Functions                              *
+ ******************************************************************************/
 
-NTKERNELAPI
-NTSTATUS
+#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
-IoGetBootDiskInformationLite(
-  OUT PBOOTDISK_INFORMATION_LITE *BootDiskInformation);
+READ_PORT_USHORT(
+  IN PUSHORT Port);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 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);
+READ_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR Register,
+  IN PUCHAR Buffer,
+  IN ULONG Count);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoConnectInterruptEx(
-  IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters);
+READ_REGISTER_BUFFER_ULONG(
+  IN PULONG Register,
+  IN PULONG Buffer,
+  IN ULONG Count);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoDisconnectInterruptEx(
-  IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters);
-
-LOGICAL
-NTAPI
-IoWithinStackLimits(
-  IN ULONG_PTR RegionStart,
-  IN SIZE_T RegionSize);
+READ_REGISTER_BUFFER_USHORT(
+  IN PUSHORT Register,
+  IN PUSHORT Buffer,
+  IN ULONG Count);
 
 NTKERNELAPI
-VOID
+UCHAR
 NTAPI
-IoSetShareAccessEx(
-  IN ACCESS_MASK DesiredAccess,
-  IN ULONG DesiredShareAccess,
-  IN OUT PFILE_OBJECT FileObject,
-  OUT PSHARE_ACCESS ShareAccess,
-  IN PBOOLEAN WritePermission);
+READ_REGISTER_UCHAR(
+  IN PUCHAR Register);
 
+NTKERNELAPI
 ULONG
 NTAPI
-IoSizeofWorkItem(VOID);
+READ_REGISTER_ULONG(
+  IN PULONG Register);
 
-VOID
+NTKERNELAPI
+USHORT
 NTAPI
-IoInitializeWorkItem(
-  IN PVOID IoObject,
-  IN PIO_WORKITEM IoWorkItem);
+READ_REGISTER_USHORT(
+  IN PUSHORT Register);
 
+NTHALAPI
 VOID
 NTAPI
-IoUninitializeWorkItem(
-  IN PIO_WORKITEM IoWorkItem);
+WRITE_PORT_BUFFER_UCHAR(
+  IN PUCHAR Port,
+  IN PUCHAR Buffer,
+  IN ULONG Count);
 
+NTHALAPI
 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);
+WRITE_PORT_BUFFER_ULONG(
+  IN PULONG Port,
+  IN PULONG Buffer,
+  IN ULONG Count);
 
-NTSTATUS
+NTHALAPI
+VOID
 NTAPI
-IoAllocateSfioStreamIdentifier(
-  IN PFILE_OBJECT FileObject,
-  IN ULONG Length,
-  IN PVOID Signature,
-  OUT PVOID *StreamIdentifier);
+WRITE_PORT_BUFFER_USHORT(
+  IN PUSHORT Port,
+  IN PUSHORT Buffer,
+  IN ULONG Count);
 
-PVOID
+NTHALAPI
+VOID
 NTAPI
-IoGetSfioStreamIdentifier(
-  IN PFILE_OBJECT FileObject,
-  IN PVOID Signature);
+WRITE_PORT_UCHAR(
+  IN PUCHAR Port,
+  IN UCHAR Value);
 
-NTSTATUS
+NTHALAPI
+VOID
 NTAPI
-IoFreeSfioStreamIdentifier(
-  IN PFILE_OBJECT FileObject,
-  IN PVOID Signature);
+WRITE_PORT_ULONG(
+  IN PULONG Port,
+  IN ULONG Value);
 
-NTKERNELAPI
-NTSTATUS
+NTHALAPI
+VOID
 NTAPI
-IoRequestDeviceEjectEx(
-  IN PDEVICE_OBJECT PhysicalDeviceObject,
-  IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL,
-  IN PVOID Context OPTIONAL,
-  IN PDRIVER_OBJECT DriverObject OPTIONAL);
+WRITE_PORT_USHORT(
+  IN PUSHORT Port,
+  IN USHORT Value);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 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);
+WRITE_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR Register,
+  IN PUCHAR Buffer,
+  IN ULONG Count);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoGetDevicePropertyData(
-  PDEVICE_OBJECT Pdo,
-  CONST DEVPROPKEY *PropertyKey,
-  LCID Lcid,
-  ULONG Flags,
-  ULONG Size,
-  PVOID Data,
-  PULONG RequiredSize,
-  PDEVPROPTYPE Type);
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-#define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
+WRITE_REGISTER_BUFFER_ULONG(
+  IN PULONG  Register,
+  IN PULONG  Buffer,
+  IN ULONG  Count);
 
-#if (NTDDI_VERSION >= NTDDI_WS08)
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoReplacePartitionUnit(
-  IN PDEVICE_OBJECT TargetPdo,
-  IN PDEVICE_OBJECT SparePdo,
-  IN ULONG Flags);
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+WRITE_REGISTER_BUFFER_USHORT(
+  IN PUSHORT Register,
+  IN PUSHORT Buffer,
+  IN ULONG Count);
 
 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);
+WRITE_REGISTER_UCHAR(
+  IN PUCHAR Register,
+  IN UCHAR Value);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoUnregisterPlugPlayNotificationEx(
-  IN PVOID NotificationEntry);
+WRITE_REGISTER_ULONG(
+  IN PULONG Register,
+  IN ULONG Value);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-IoGetDeviceNumaNode(
-  IN PDEVICE_OBJECT Pdo,
-  OUT PUSHORT NodeNumber);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+WRITE_REGISTER_USHORT(
+  IN PUSHORT  Register,
+  IN USHORT  Value);
 
-#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)
+READ_PORT_BUFFER_UCHAR(
+  IN PUCHAR Port,
+  IN PUCHAR Buffer,
+  IN ULONG Count)
 {
-  ASSERT(Irp->CurrentLocation <= Irp->StackCount);
-  Irp->CurrentLocation++;
-  Irp->Tail.Overlay.CurrentStackLocation++;
+    __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
 }
 
 FORCEINLINE
 VOID
-IoSetNextIrpStackLocation(
-  IN OUT PIRP Irp)
+READ_PORT_BUFFER_ULONG(
+  IN PULONG  Port,
+  IN PULONG  Buffer,
+  IN ULONG  Count)
 {
-  ASSERT(Irp->CurrentLocation > 0);
-  Irp->CurrentLocation--;
-  Irp->Tail.Overlay.CurrentStackLocation--;
+    __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
 }
 
 FORCEINLINE
-PIO_STACK_LOCATION
-IoGetNextIrpStackLocation(
-  IN PIRP Irp)
+VOID
+READ_PORT_BUFFER_USHORT(
+  IN PUSHORT Port,
+  IN PUSHORT Buffer,
+  IN ULONG Count)
 {
-  ASSERT(Irp->CurrentLocation > 0);
-  return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
+    __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
 }
 
 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)
+UCHAR
+READ_PORT_UCHAR(
+  IN PUCHAR Port)
 {
-  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;
-  }
+    return __inbyte((USHORT)(ULONG_PTR)Port);
+}
 
-  if (InvokeOnCancel) {
-    irpSp->Control |= SL_INVOKE_ON_CANCEL;
-  }
+FORCEINLINE
+ULONG
+READ_PORT_ULONG(
+  IN PULONG Port)
+{
+    return __indword((USHORT)(ULONG_PTR)Port);
 }
 
-/*
- * 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)))
+FORCEINLINE
+USHORT
+READ_PORT_USHORT(
+  IN PUSHORT Port)
+{
+    return __inword((USHORT)(ULONG_PTR)Port);
+}
 
-/*
- * VOID
- * IoRequestDpc(
*   IN PDEVICE_OBJECT  DeviceObject,
*   IN PIRP  Irp,
- *   IN PVOID  Context);
- */
-#define IoRequestDpc(DeviceObject, Irp, Context)( \
-  KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_UCHAR(
 IN PUCHAR Register,
 IN PUCHAR Buffer,
+  IN ULONG Count)
+{
+    __movsb(Register, Buffer, Count);
+}
 
-/*
- * VOID
- * IoReleaseRemoveLock(
*   IN PIO_REMOVE_LOCK  RemoveLock,
- *   IN PVOID  Tag)
- */
-#define IoReleaseRemoveLock(_RemoveLock, \
-                            _Tag) \
-  IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_ULONG(
 IN PULONG  Register,
+  IN PULONG  Buffer,
+  IN ULONG  Count)
+{
+    __movsd(Register, Buffer, Count);
+}
 
-/*
- * VOID
- * IoReleaseRemoveLockAndWait(
*   IN PIO_REMOVE_LOCK  RemoveLock,
- *   IN PVOID  Tag)
- */
-#define IoReleaseRemoveLockAndWait(_RemoveLock, \
-                                   _Tag) \
-  IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_USHORT(
 IN PUSHORT  Register,
+  IN PUSHORT  Buffer,
+  IN ULONG  Count)
+{
+    __movsw(Register, Buffer, Count);
+}
 
-#if defined(_WIN64)
-NTKERNELAPI
-BOOLEAN
-IoIs32bitProcess(
-  IN PIRP Irp OPTIONAL);
-#endif
+FORCEINLINE
+UCHAR
+READ_REGISTER_UCHAR(
+  IN volatile UCHAR *Register)
+{
+    return *Register;
+}
 
-#define PLUGPLAY_REGKEY_DEVICE                            1
-#define PLUGPLAY_REGKEY_DRIVER                            2
-#define PLUGPLAY_REGKEY_CURRENT_HWPROFILE                 4
+FORCEINLINE
+ULONG
+READ_REGISTER_ULONG(
+  IN volatile ULONG *Register)
+{
+    return *Register;
+}
 
 FORCEINLINE
-PIO_STACK_LOCATION
-IoGetCurrentIrpStackLocation(
-  IN PIRP Irp)
+USHORT
+READ_REGISTER_USHORT(
+  IN volatile USHORT *Register)
 {
-  ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
-  return Irp->Tail.Overlay.CurrentStackLocation;
+    return *Register;
 }
 
 FORCEINLINE
 VOID
-IoMarkIrpPending(
-  IN OUT PIRP Irp)
+WRITE_PORT_BUFFER_UCHAR(
+  IN PUCHAR Port,
+  IN PUCHAR Buffer,
+  IN ULONG Count)
 {
-  IoGetCurrentIrpStackLocation( (Irp) )->Control |= SL_PENDING_RETURNED;
+    __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
 }
 
-/*
- * 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))
+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
-IoInitializeDpcRequest(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN PIO_DPC_ROUTINE DpcRoutine)
+VOID
+WRITE_PORT_UCHAR(
+  IN PUCHAR Port,
+  IN UCHAR Value)
 {
-  KeInitializeDpc( &DeviceObject->Dpc,
-                   (PKDEFERRED_ROUTINE) DpcRoutine,
-                   DeviceObject );
+    __outbyte((USHORT)(ULONG_PTR)Port, Value);
 }
 
-#define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
+FORCEINLINE
+VOID
+WRITE_PORT_ULONG(
+  IN PULONG Port,
+  IN ULONG Value)
+{
+    __outdword((USHORT)(ULONG_PTR)Port, Value);
+}
 
-/*
- * ULONG
- * IoGetFunctionCodeFromCtlCode(
- *   IN ULONG  ControlCode)
- */
-#define IoGetFunctionCodeFromCtlCode(_ControlCode) \
-  (((_ControlCode) >> 2) & 0x00000FFF)
+FORCEINLINE
+VOID
+WRITE_PORT_USHORT(
+  IN PUSHORT Port,
+  IN USHORT Value)
+{
+    __outword((USHORT)(ULONG_PTR)Port, Value);
+}
 
 FORCEINLINE
 VOID
-IoCopyCurrentIrpStackLocationToNext(
-  IN OUT PIRP Irp)
+WRITE_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR Register,
+  IN PUCHAR Buffer,
+  IN ULONG Count)
 {
-  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;
+    LONG Synch;
+    __movsb(Register, Buffer, Count);
+    InterlockedOr(&Synch, 1);
 }
 
-NTKERNELAPI
+FORCEINLINE
 VOID
-NTAPI
-IoGetStackLimits(
-  OUT PULONG_PTR LowLimit,
-  OUT PULONG_PTR HighLimit);
+WRITE_REGISTER_BUFFER_ULONG(
+  IN PULONG Register,
+  IN PULONG Buffer,
+  IN ULONG Count)
+{
+    LONG Synch;
+    __movsd(Register, Buffer, Count);
+    InterlockedOr(&Synch, 1);
+}
 
 FORCEINLINE
-ULONG_PTR
-IoGetRemainingStackSize(VOID)
+VOID
+WRITE_REGISTER_BUFFER_USHORT(
+  IN PUSHORT Register,
+  IN PUSHORT Buffer,
+  IN ULONG Count)
 {
-  ULONG_PTR End, Begin;
-  ULONG_PTR Result;
+    LONG Synch;
+    __movsw(Register, Buffer, Count);
+    InterlockedOr(&Synch, 1);
+}
 
-  IoGetStackLimits(&Begin, &End);
-  Result = (ULONG_PTR)(&End) - Begin;
-  return Result;
+FORCEINLINE
+VOID
+WRITE_REGISTER_UCHAR(
+  IN volatile UCHAR *Register,
+  IN UCHAR Value)
+{
+    LONG Synch;
+    *Register = Value;
+    InterlockedOr(&Synch, 1);
 }
 
-#if (NTDDI_VERSION >= NTDDI_WS03)
+FORCEINLINE
 VOID
+WRITE_REGISTER_ULONG(
+  IN volatile ULONG *Register,
+  IN ULONG Value)
+{
+    LONG Synch;
+    *Register = Value;
+    InterlockedOr(&Synch, 1);
+}
+
 FORCEINLINE
-IoInitializeThreadedDpcRequest(
-  IN PDEVICE_OBJECT DeviceObject,
-  IN PIO_DPC_ROUTINE DpcRoutine)
+VOID
+WRITE_REGISTER_USHORT(
+  IN volatile USHORT *Register,
+  IN USHORT Value)
 {
-  KeInitializeThreadedDpc(&DeviceObject->Dpc,
-                          (PKDEFERRED_ROUTINE) DpcRoutine,
-                          DeviceObject );
+    LONG Sync;
+    *Register = Value;
+    InterlockedOr(&Sync, 1);
 }
 #endif
 
-/******************************************************************************
- *                     Power Management Support Functions                     *
- ******************************************************************************/
-
-#define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
+   (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
 
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+#define DMA_MACROS_DEFINED
 
-NTKERNELAPI
+FORCEINLINE
 NTSTATUS
-NTAPI
-PoCallDriver(
-  IN struct _DEVICE_OBJECT *DeviceObject,
-  IN OUT struct _IRP *Irp);
+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 );
+}
 
-NTKERNELAPI
-PULONG
+FORCEINLINE
+BOOLEAN
 NTAPI
-PoRegisterDeviceForIdleDetection(
-  IN struct _DEVICE_OBJECT *DeviceObject,
-  IN ULONG ConservationIdleTime,
-  IN ULONG PerformanceIdleTime,
-  IN DEVICE_POWER_STATE State);
+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);
+}
 
-NTKERNELAPI
-PVOID
+FORCEINLINE
+VOID
 NTAPI
-PoRegisterSystemState(
-  IN OUT PVOID StateHandle OPTIONAL,
-  IN EXECUTION_STATE Flags);
+IoFreeAdapterChannel(
+    IN PDMA_ADAPTER DmaAdapter)
+{
+    PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
+    FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel;
+    ASSERT(FreeAdapterChannel);
+    FreeAdapterChannel(DmaAdapter);
+}
 
-NTKERNELAPI
-NTSTATUS
+FORCEINLINE
+VOID
 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);
+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);
+}
 
-NTKERNELAPI
-POWER_STATE
+FORCEINLINE
+PHYSICAL_ADDRESS
 NTAPI
-PoSetPowerState(
-  IN struct _DEVICE_OBJECT *DeviceObject,
-  IN POWER_STATE_TYPE Type,
-  IN POWER_STATE State);
+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
 
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
 NTKERNELAPI
 VOID
 NTAPI
-PoSetSystemState(
-  IN EXECUTION_STATE Flags);
+IoAcquireCancelSpinLock(
+  OUT PKIRQL  Irql);
 
 NTKERNELAPI
-VOID
+NTSTATUS
 NTAPI
-PoStartNextPowerIrp(
-  IN OUT struct _IRP *Irp);
+IoAcquireRemoveLockEx(
+  IN PIO_REMOVE_LOCK  RemoveLock,
+  IN PVOID  Tag  OPTIONAL,
+  IN PCSTR  File,
+  IN ULONG  Line,
+  IN ULONG  RemlockSize);
+#endif
+
+/*
+ * 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); \
+    } \
+}
 
-NTKERNELAPI
-VOID
-NTAPI
-PoUnregisterSystemState(
-  IN OUT PVOID StateHandle);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-PoRequestShutdownEvent(
-  OUT PVOID *Event);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+IoAllocateDriverObjectExtension(
+  IN PDRIVER_OBJECT  DriverObject,
+  IN PVOID  ClientIdentificationAddress,
+  IN ULONG  DriverObjectExtensionSize,
+  OUT PVOID  *DriverObjectExtension);
 
 NTKERNELAPI
-VOID
+PVOID
 NTAPI
-PoSetSystemWake(
-  IN OUT struct _IRP *Irp);
+IoAllocateErrorLogEntry(
+  IN PVOID  IoObject,
+  IN UCHAR  EntrySize);
 
 NTKERNELAPI
-BOOLEAN
+PIRP
 NTAPI
-PoGetSystemWake(
-  IN struct _IRP *Irp);
+IoAllocateIrp(
+  IN CCHAR  StackSize,
+  IN BOOLEAN  ChargeQuota);
 
 NTKERNELAPI
-NTSTATUS
+PMDL
 NTAPI
-PoRegisterPowerSettingCallback(
-  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
-  IN LPCGUID SettingGuid,
-  IN PPOWER_SETTING_CALLBACK Callback,
-  IN PVOID Context OPTIONAL,
-  OUT PVOID *Handle OPTIONAL);
+IoAllocateMdl(
+  IN PVOID  VirtualAddress OPTIONAL,
+  IN ULONG  Length,
+  IN BOOLEAN  SecondaryBuffer,
+  IN BOOLEAN  ChargeQuota,
+  IN OUT PIRP  Irp  OPTIONAL);
 
 NTKERNELAPI
-NTSTATUS
+PIO_WORKITEM
 NTAPI
-PoUnregisterPowerSettingCallback(
-  IN OUT PVOID Handle);
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+IoAllocateWorkItem(
+  IN PDEVICE_OBJECT  DeviceObject);
 
-#if (NTDDI_VERSION >= NTDDI_VISTASP1)
 NTKERNELAPI
-VOID
+NTSTATUS
 NTAPI
-PoSetDeviceBusyEx(
-  IN OUT PULONG IdlePointer);
-#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+IoAttachDevice(
+  IN PDEVICE_OBJECT  SourceDevice,
+  IN PUNICODE_STRING  TargetDevice,
+  OUT PDEVICE_OBJECT  *AttachedDevice);
 
 NTKERNELAPI
-VOID
+PDEVICE_OBJECT
 NTAPI
-PoStartDeviceBusy(
-  IN OUT PULONG IdlePointer);
+IoAttachDeviceToDeviceStack(
+  IN PDEVICE_OBJECT  SourceDevice,
+  IN PDEVICE_OBJECT  TargetDevice);
 
 NTKERNELAPI
-VOID
+PIRP
 NTAPI
-PoEndDeviceBusy(
-  IN OUT PULONG IdlePointer);
+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
-BOOLEAN
+PIRP
 NTAPI
-PoQueryWatchdogTime(
-  IN PDEVICE_OBJECT Pdo,
-  OUT PULONG SecondsRemaining);
+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
-PoDeletePowerRequest(
-  IN OUT PVOID PowerRequest);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-PoSetPowerRequest(
-  IN OUT PVOID PowerRequest,
-  IN POWER_REQUEST_TYPE Type);
+IoBuildPartialMdl(
+  IN PMDL  SourceMdl,
+  IN OUT PMDL  TargetMdl,
+  IN PVOID  VirtualAddress,
+  IN ULONG  Length);
 
 NTKERNELAPI
-NTSTATUS
+PIRP
 NTAPI
-PoClearPowerRequest(
-  IN OUT PVOID PowerRequest,
-  IN POWER_REQUEST_TYPE Type);
+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
-NTAPI
-PoCreatePowerRequest(
-  OUT PVOID *PowerRequest,
-  IN PDEVICE_OBJECT DeviceObject,
-  IN PCOUNTED_REASON_CONTEXT Context);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-/******************************************************************************
- *                          Executive Functions                               *
- ******************************************************************************/
-
-#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);
+IofCallDriver(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN OUT PIRP  Irp);
+#define IoCallDriver IofCallDriver
 
 NTKERNELAPI
 VOID
 FASTCALL
-ExiReleaseFastMutex(
-  IN OUT PFAST_MUTEX FastMutex);
+IofCompleteRequest(
+  IN PIRP Irp,
+  IN CCHAR PriorityBoost);
+#define IoCompleteRequest IofCompleteRequest
 
 NTKERNELAPI
 BOOLEAN
-FASTCALL
-ExiTryToAcquireFastMutex(
-    IN OUT PFAST_MUTEX FastMutex);
-
-#define ExAcquireFastMutex ExiAcquireFastMutex
-#define ExReleaseFastMutex ExiReleaseFastMutex
-#define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
-
-#else
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTAPI
+IoCancelIrp(
+  IN PIRP  Irp);
 
 NTKERNELAPI
-VOID
-FASTCALL
-ExAcquireFastMutex(
-  IN OUT PFAST_MUTEX FastMutex);
+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
-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);
+IofCompleteRequest(
+  IN PIRP  Irp,
+  IN CCHAR  PriorityBoost);
 
 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
+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
-PSINGLE_LIST_ENTRY
-FASTCALL
-ExInterlockedFlushSList(
-  IN OUT PSLIST_HEADER ListHead);
-
-#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+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
-PSINGLE_LIST_ENTRY 
-FASTCALL
-ExInterlockedPopEntrySList(
-  IN PSLIST_HEADER ListHead,
-  IN PKSPIN_LOCK Lock);
+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
-PSINGLE_LIST_ENTRY 
-FASTCALL
-ExInterlockedPushEntrySList(
-  IN PSLIST_HEADER ListHead,
-  IN PSINGLE_LIST_ENTRY ListEntry,
-  IN PKSPIN_LOCK Lock);
+PKEVENT
+NTAPI
+IoCreateNotificationEvent(
+  IN PUNICODE_STRING  EventName,
+  OUT PHANDLE  EventHandle);
 
 NTKERNELAPI
-PVOID
+NTSTATUS
 NTAPI
-ExAllocateFromPagedLookasideList(
-  IN OUT PPAGED_LOOKASIDE_LIST Lookaside);
+IoCreateSymbolicLink(
+  IN PUNICODE_STRING  SymbolicLinkName,
+  IN PUNICODE_STRING  DeviceName);
 
 NTKERNELAPI
-VOID
+PKEVENT
 NTAPI
-ExFreeToPagedLookasideList(
-  IN OUT PPAGED_LOOKASIDE_LIST Lookaside,
-  IN PVOID Entry);
-
-#else
-
-#define ExInterlockedPopEntrySList(_ListHead, _Lock) \
-    InterlockedPopEntrySList(_ListHead)
-#define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
-    InterlockedPushEntrySList(_ListHead, _ListEntry)
-
-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 */
+IoCreateSynchronizationEvent(
+  IN PUNICODE_STRING  EventName,
+  OUT PHANDLE  EventHandle);
 
-#endif /* !defined(_WIN64) */
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateUnprotectedSymbolicLink(
+  IN PUNICODE_STRING  SymbolicLinkName,
+  IN PUNICODE_STRING  DeviceName);
 
-/* ERESOURCE_THREAD
- * ExGetCurrentResourceThread(
- *     VOID);
- */
-#define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
+NTKERNELAPI
+VOID
+NTAPI
+IoDeleteDevice(
+  IN PDEVICE_OBJECT  DeviceObject);
 
-#define ExReleaseResource(R) (ExReleaseResourceLite(R))
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoDeleteSymbolicLink(
+  IN PUNICODE_STRING  SymbolicLinkName);
 
-/* 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; \
-}
+NTKERNELAPI
+VOID
+NTAPI
+IoDetachDevice(
+  IN OUT PDEVICE_OBJECT  TargetDevice);
 
-FORCEINLINE
+NTKERNELAPI
 VOID
-ExInitializeFastMutex(
-  OUT PFAST_MUTEX FastMutex)
-{
-  FastMutex->Count = FM_LOCK_BIT;
-  FastMutex->Owner = NULL;
-  FastMutex->Contention = 0;
-  KeInitializeEvent(&FastMutex->Event, SynchronizationEvent, FALSE);
-  return;
-}
+NTAPI
+IoDisconnectInterrupt(
+  IN PKINTERRUPT  InterruptObject);
 
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeIrp(
+  IN PIRP Irp);
 
 NTKERNELAPI
 VOID
-FASTCALL
-ExAcquireFastMutexUnsafe(
-  IN OUT PFAST_MUTEX FastMutex);
+NTAPI
+IoFreeMdl(
+  IN PMDL Mdl);
 
 NTKERNELAPI
 VOID
-FASTCALL
-ExReleaseFastMutexUnsafe(
-  IN OUT PFAST_MUTEX FastMutex);
+NTAPI
+IoFreeWorkItem(
+  IN PIO_WORKITEM IoWorkItem);
 
 NTKERNELAPI
-BOOLEAN
+PDEVICE_OBJECT
 NTAPI
-ExAcquireResourceExclusiveLite(
-  IN OUT PERESOURCE Resource,
-  IN BOOLEAN Wait);
+IoGetAttachedDevice(
+  IN PDEVICE_OBJECT DeviceObject);
 
 NTKERNELAPI
-BOOLEAN
+PDEVICE_OBJECT
 NTAPI
-ExAcquireResourceSharedLite(
-  IN OUT PERESOURCE Resource,
-  IN BOOLEAN Wait);
+IoGetAttachedDeviceReference(
+  IN PDEVICE_OBJECT  DeviceObject);
 
 NTKERNELAPI
-BOOLEAN
+NTSTATUS
 NTAPI
-ExAcquireSharedStarveExclusive(
-  IN OUT PERESOURCE Resource,
-  IN BOOLEAN Wait);
+IoGetBootDiskInformation(
+  IN OUT PBOOTDISK_INFORMATION  BootDiskInformation,
+  IN ULONG  Size);
 
 NTKERNELAPI
-BOOLEAN
+NTSTATUS
 NTAPI
-ExAcquireSharedWaitForExclusive(
-  IN OUT PERESOURCE Resource,
-  IN BOOLEAN Wait);
+IoGetDeviceInterfaceAlias(
+  IN PUNICODE_STRING  SymbolicLinkName,
+  IN CONST GUID  *AliasInterfaceClassGuid,
+  OUT PUNICODE_STRING  AliasSymbolicLinkName);
 
 NTKERNELAPI
-PVOID
+PEPROCESS
 NTAPI
-ExAllocatePool(
-  IN POOL_TYPE PoolType,
-  IN SIZE_T NumberOfBytes);
+IoGetCurrentProcess(
+  VOID);
 
 NTKERNELAPI
-PVOID
+NTSTATUS
 NTAPI
-ExAllocatePoolWithQuota(
-  IN POOL_TYPE PoolType,
-  IN SIZE_T NumberOfBytes);
+IoGetDeviceInterfaces(
+  IN CONST GUID  *InterfaceClassGuid,
+  IN PDEVICE_OBJECT  PhysicalDeviceObject  OPTIONAL,
+  IN ULONG  Flags,
+  OUT PWSTR  *SymbolicLinkList);
 
 NTKERNELAPI
-PVOID
+NTSTATUS
 NTAPI
-ExAllocatePoolWithQuotaTag(
-  IN POOL_TYPE PoolType,
-  IN SIZE_T NumberOfBytes,
-  IN ULONG Tag);
+IoGetDeviceObjectPointer(
+  IN PUNICODE_STRING  ObjectName,
+  IN ACCESS_MASK  DesiredAccess,
+  OUT PFILE_OBJECT  *FileObject,
+  OUT PDEVICE_OBJECT  *DeviceObject);
 
-#ifndef POOL_TAGGING
-#define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
-#endif
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDeviceProperty(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN DEVICE_REGISTRY_PROPERTY  DeviceProperty,
+  IN ULONG  BufferLength,
+  OUT PVOID  PropertyBuffer,
+  OUT PULONG  ResultLength);
 
 NTKERNELAPI
-PVOID
+PDMA_ADAPTER
 NTAPI
-ExAllocatePoolWithTag(
-  IN POOL_TYPE PoolType,
-  IN SIZE_T NumberOfBytes,
-  IN ULONG Tag);
+IoGetDmaAdapter(
+  IN PDEVICE_OBJECT  PhysicalDeviceObject OPTIONAL,
+  IN PDEVICE_DESCRIPTION  DeviceDescription,
+  IN OUT PULONG  NumberOfMapRegisters);
 
-#ifndef POOL_TAGGING
-#define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
-#endif
+NTKERNELAPI
+PVOID
+NTAPI
+IoGetDriverObjectExtension(
+  IN PDRIVER_OBJECT  DriverObject,
+  IN PVOID  ClientIdentificationAddress);
 
 NTKERNELAPI
 PVOID
 NTAPI
-ExAllocatePoolWithTagPriority(
-  IN POOL_TYPE PoolType,
-  IN SIZE_T NumberOfBytes,
-  IN ULONG Tag,
-  IN EX_POOL_PRIORITY Priority);
+IoGetInitialStack(
+  VOID);
 
 NTKERNELAPI
-VOID
+PDEVICE_OBJECT
 NTAPI
-ExConvertExclusiveToSharedLite(
-  IN OUT PERESOURCE Resource);
+IoGetRelatedDeviceObject(
+  IN PFILE_OBJECT  FileObject);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-ExCreateCallback(
-  OUT PCALLBACK_OBJECT *CallbackObject,
-  IN POBJECT_ATTRIBUTES ObjectAttributes,
-  IN BOOLEAN Create,
-  IN BOOLEAN AllowMultipleCallbacks);
+IoQueueWorkItem(
+  IN PIO_WORKITEM  IoWorkItem,
+  IN PIO_WORKITEM_ROUTINE  WorkerRoutine,
+  IN WORK_QUEUE_TYPE  QueueType,
+  IN PVOID  Context OPTIONAL);
 
 NTKERNELAPI
 VOID
 NTAPI
-ExDeleteNPagedLookasideList(
-  IN OUT PNPAGED_LOOKASIDE_LIST Lookaside);
+IoInitializeIrp(
+  IN OUT PIRP  Irp,
+  IN USHORT  PacketSize,
+  IN CCHAR  StackSize);
 
 NTKERNELAPI
 VOID
 NTAPI
-ExDeletePagedLookasideList(
-  IN PPAGED_LOOKASIDE_LIST Lookaside);
+IoInitializeRemoveLockEx(
+  IN  PIO_REMOVE_LOCK Lock,
+  IN  ULONG   AllocateTag,
+  IN  ULONG   MaxLockedMinutes,
+  IN  ULONG   HighWatermark,
+  IN  ULONG   RemlockSize);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-ExDeleteResourceLite(
-  IN OUT PERESOURCE Resource);
+IoInitializeTimer(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN PIO_TIMER_ROUTINE  TimerRoutine,
+  IN PVOID  Context OPTIONAL);
 
 NTKERNELAPI
 VOID
 NTAPI
-ExFreePool(
-  IN PVOID P);
+IoInvalidateDeviceRelations(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN DEVICE_RELATION_TYPE  Type);
 
 NTKERNELAPI
 VOID
 NTAPI
-ExFreePoolWithTag(
-  IN PVOID P,
-  IN ULONG Tag);
+IoInvalidateDeviceState(
+  IN PDEVICE_OBJECT  PhysicalDeviceObject);
 
 NTKERNELAPI
-ULONG
+BOOLEAN
 NTAPI
-ExGetExclusiveWaiterCount(
-  IN PERESOURCE Resource);
+IoIsWdmVersionAvailable(
+  IN UCHAR  MajorVersion,
+  IN UCHAR  MinorVersion);
 
 NTKERNELAPI
-KPROCESSOR_MODE
+NTSTATUS
 NTAPI
-ExGetPreviousMode(VOID);
+IoOpenDeviceInterfaceRegistryKey(
+  IN PUNICODE_STRING  SymbolicLinkName,
+  IN ACCESS_MASK  DesiredAccess,
+  OUT PHANDLE  DeviceInterfaceKey);
 
 NTKERNELAPI
-ULONG
+NTSTATUS
 NTAPI
-ExGetSharedWaiterCount(
-  IN PERESOURCE Resource);
+IoOpenDeviceRegistryKey(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  DevInstKeyType,
+  IN ACCESS_MASK  DesiredAccess,
+  OUT PHANDLE  DevInstRegKey);
 
 NTKERNELAPI
-VOID
+NTSTATUS
 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);
+IoRegisterDeviceInterface(
+  IN PDEVICE_OBJECT  PhysicalDeviceObject,
+  IN CONST GUID  *InterfaceClassGuid,
+  IN PUNICODE_STRING  ReferenceString  OPTIONAL,
+  OUT PUNICODE_STRING  SymbolicLinkName);
 
 NTKERNELAPI
-VOID
+NTSTATUS
 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);
+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
-ExInitializeResourceLite(
-  OUT PERESOURCE Resource);
+IoRegisterShutdownNotification(
+  IN PDEVICE_OBJECT  DeviceObject);
 
 NTKERNELAPI
-LARGE_INTEGER
+VOID
 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
+IoReleaseCancelSpinLock(
+  IN KIRQL  Irql);
 
 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_)
+VOID
+NTAPI
+IoReleaseRemoveLockAndWaitEx(
+  IN PIO_REMOVE_LOCK  RemoveLock,
+  IN PVOID  Tag OPTIONAL,
+  IN ULONG  RemlockSize);
 
 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
+VOID
+NTAPI
+IoReleaseRemoveLockEx(
+  IN PIO_REMOVE_LOCK  RemoveLock,
+  IN PVOID  Tag OPTIONAL,
+  IN ULONG  RemlockSize);
 
 NTKERNELAPI
-LONGLONG
-FASTCALL
-ExInterlockedCompareExchange64(
-  IN OUT LONGLONG volatile *Destination,
-  IN PLONGLONG Exchange,
-  IN PLONGLONG Comparand,
-  IN PKSPIN_LOCK Lock);
-
-#endif /* defined(_AMD64_) || defined(_IA64_) */
+VOID
+NTAPI
+IoRemoveShareAccess(
+  IN PFILE_OBJECT  FileObject,
+  IN OUT PSHARE_ACCESS  ShareAccess);
 
 NTKERNELAPI
-PLIST_ENTRY
-FASTCALL
-ExInterlockedInsertHeadList(
-  IN OUT PLIST_ENTRY ListHead,
-  IN OUT PLIST_ENTRY ListEntry,
-  IN OUT PKSPIN_LOCK Lock);
+NTSTATUS
+NTAPI
+IoReportTargetDeviceChange(
+  IN PDEVICE_OBJECT  PhysicalDeviceObject,
+  IN PVOID  NotificationStructure);
 
 NTKERNELAPI
-PLIST_ENTRY
-FASTCALL
-ExInterlockedInsertTailList(
-  IN OUT PLIST_ENTRY ListHead,
-  IN OUT PLIST_ENTRY ListEntry,
-  IN OUT PKSPIN_LOCK Lock);
+NTSTATUS
+NTAPI
+IoReportTargetDeviceChangeAsynchronous(
+  IN PDEVICE_OBJECT  PhysicalDeviceObject,
+  IN PVOID  NotificationStructure,
+  IN PDEVICE_CHANGE_COMPLETE_CALLBACK  Callback  OPTIONAL,
+  IN PVOID  Context  OPTIONAL);
 
 NTKERNELAPI
-PSINGLE_LIST_ENTRY
-FASTCALL
-ExInterlockedPopEntryList(
-  IN OUT PSINGLE_LIST_ENTRY ListHead,
-  IN OUT PKSPIN_LOCK Lock);
+VOID
+NTAPI
+IoRequestDeviceEject(
+  IN PDEVICE_OBJECT  PhysicalDeviceObject);
 
 NTKERNELAPI
-PSINGLE_LIST_ENTRY
-FASTCALL
-ExInterlockedPushEntryList(
-  IN OUT PSINGLE_LIST_ENTRY ListHead,
-  IN OUT PSINGLE_LIST_ENTRY ListEntry,
-  IN OUT PKSPIN_LOCK Lock);
+VOID
+NTAPI
+IoReuseIrp(
+  IN OUT PIRP  Irp,
+  IN NTSTATUS  Status);
 
 NTKERNELAPI
-PLIST_ENTRY
-FASTCALL
-ExInterlockedRemoveHeadList(
-  IN OUT PLIST_ENTRY ListHead,
-  IN OUT PKSPIN_LOCK Lock);
+NTSTATUS
+NTAPI
+IoSetDeviceInterfaceState(
+  IN PUNICODE_STRING  SymbolicLinkName,
+  IN BOOLEAN  Enable);
 
 NTKERNELAPI
-BOOLEAN
+VOID
 NTAPI
-ExIsProcessorFeaturePresent(
-  IN ULONG ProcessorFeature);
+IoSetShareAccess(
+  IN ACCESS_MASK  DesiredAccess,
+  IN ULONG  DesiredShareAccess,
+  IN OUT PFILE_OBJECT  FileObject,
+  OUT PSHARE_ACCESS  ShareAccess);
 
 NTKERNELAPI
-BOOLEAN
+VOID
 NTAPI
-ExIsResourceAcquiredExclusiveLite(
-  IN PERESOURCE Resource);
+IoStartNextPacket(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN BOOLEAN  Cancelable);
 
 NTKERNELAPI
-ULONG
+VOID
 NTAPI
-ExIsResourceAcquiredSharedLite(
-  IN PERESOURCE Resource);
-
-#define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
+IoStartNextPacketByKey(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN BOOLEAN  Cancelable,
+  IN ULONG  Key);
 
 NTKERNELAPI
 VOID
 NTAPI
-ExLocalTimeToSystemTime(
-  IN PLARGE_INTEGER LocalTime,
-  OUT PLARGE_INTEGER SystemTime);
+IoStartPacket(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN PIRP  Irp,
+  IN PULONG  Key  OPTIONAL,
+  IN PDRIVER_CANCEL  CancelFunction  OPTIONAL);
 
 NTKERNELAPI
 VOID
 NTAPI
-ExNotifyCallback(
-  IN PCALLBACK_OBJECT CallbackObject,
-  IN PVOID Argument1 OPTIONAL,
-  IN PVOID Argument2 OPTIONAL);
+IoStartTimer(
+  IN PDEVICE_OBJECT  DeviceObject);
 
 NTKERNELAPI
 VOID
 NTAPI
-ExQueueWorkItem(
-  IN OUT PWORK_QUEUE_ITEM WorkItem,
-  IN WORK_QUEUE_TYPE QueueType);
+IoStopTimer(
+  IN PDEVICE_OBJECT  DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoUnregisterPlugPlayNotification(
+  IN PVOID  NotificationEntry);
 
 NTKERNELAPI
-DECLSPEC_NORETURN
 VOID
 NTAPI
-ExRaiseStatus(
-  IN NTSTATUS Status);
+IoUnregisterShutdownNotification(
+  IN PDEVICE_OBJECT  DeviceObject);
 
 NTKERNELAPI
-PVOID
+VOID
 NTAPI
-ExRegisterCallback(
-  IN PCALLBACK_OBJECT CallbackObject,
-  IN PCALLBACK_FUNCTION CallbackFunction,
-  IN PVOID CallbackContext OPTIONAL);
+IoUpdateShareAccess(
+  IN PFILE_OBJECT  FileObject,
+  IN OUT PSHARE_ACCESS  ShareAccess);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-ExReinitializeResourceLite(
-  IN OUT PERESOURCE Resource);
+IoWMIAllocateInstanceIds(
+  IN GUID  *Guid,
+  IN ULONG  InstanceCount,
+  OUT ULONG  *FirstInstanceId);
 
 NTKERNELAPI
-VOID
+NTSTATUS
 NTAPI
-ExReleaseResourceForThreadLite(
-  IN OUT PERESOURCE Resource,
-  IN ERESOURCE_THREAD ResourceThreadId);
-
-NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseResourceLite(
-  IN OUT PERESOURCE Resource);
+IoWMIQuerySingleInstanceMultiple(
+  IN PVOID  *DataBlockObjectList,
+  IN PUNICODE_STRING  InstanceNames,
+  IN ULONG  ObjectCount,
+  IN OUT ULONG  *InOutBufferSize,
+  OUT PVOID  OutBuffer);
 
 NTKERNELAPI
-VOID
+NTSTATUS
 NTAPI
-ExSetResourceOwnerPointer(
-  IN OUT PERESOURCE Resource,
-  IN PVOID OwnerPointer);
+IoWMIRegistrationControl(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  Action);
 
 NTKERNELAPI
-ULONG
+NTSTATUS
 NTAPI
-ExSetTimerResolution(
-  IN ULONG DesiredTime,
-  IN BOOLEAN SetResolution);
+IoWMISuggestInstanceName(
+  IN PDEVICE_OBJECT  PhysicalDeviceObject OPTIONAL,
+  IN PUNICODE_STRING  SymbolicLinkName OPTIONAL,
+  IN BOOLEAN  CombineNames,
+  OUT PUNICODE_STRING  SuggestedInstanceName);
 
 NTKERNELAPI
-VOID
+NTSTATUS
 NTAPI
-ExSystemTimeToLocalTime(
-  IN PLARGE_INTEGER SystemTime,
-  OUT PLARGE_INTEGER LocalTime);
+IoWMIWriteEvent(
+  IN PVOID  WnodeEventItem);
 
 NTKERNELAPI
 VOID
 NTAPI
-ExUnregisterCallback(
-  IN OUT PVOID CbRegistration);
+IoWriteErrorLogEntry(
+  IN PVOID  ElEntry);
 
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+#endif
 
 #if (NTDDI_VERSION >= NTDDI_WINXP)
 
 NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExAcquireRundownProtection(
-  IN OUT PEX_RUNDOWN_REF RunRef);
-
-NTKERNELAPI
-VOID
-FASTCALL
-ExInitializeRundownProtection(
-  OUT PEX_RUNDOWN_REF RunRef);
+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
-FASTCALL
-ExReInitializeRundownProtection(
-  IN OUT PEX_RUNDOWN_REF RunRef);
+NTAPI
+IoCsqInsertIrp(
+  IN PIO_CSQ Csq,
+  IN PIRP Irp,
+  IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL);
 
 NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseRundownProtection(
-  IN OUT PEX_RUNDOWN_REF RunRef);
+PIRP
+NTAPI
+IoCsqRemoveIrp(
+  IN PIO_CSQ Csq,
+  IN PIO_CSQ_IRP_CONTEXT Context);
 
 NTKERNELAPI
-VOID
-FASTCALL
-ExRundownCompleted(
-  OUT PEX_RUNDOWN_REF RunRef);
+PIRP
+NTAPI
+IoCsqRemoveNextIrp(
+  IN PIO_CSQ  Csq,
+  IN PVOID  PeekContext);
 
 NTKERNELAPI
 BOOLEAN
 NTAPI
-ExVerifySuite(
-  IN SUITE_TYPE SuiteType);
+IoForwardIrpSynchronously(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN PIRP  Irp);
+
+#define IoForwardAndCatchIrp IoForwardIrpSynchronously
 
 NTKERNELAPI
 VOID
-FASTCALL
-ExWaitForRundownProtectionRelease(
-  IN OUT PEX_RUNDOWN_REF RunRef);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
+NTAPI
+IoFreeErrorLogEntry(
+  PVOID  ElEntry);
 
 NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExAcquireRundownProtectionEx(
-  IN OUT PEX_RUNDOWN_REF RunRef,
-  IN ULONG Count);
+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);
 
-NTKERNELAPI
 VOID
-FASTCALL
-ExReleaseRundownProtectionEx(
-  IN OUT PEX_RUNDOWN_REF RunRef,
-  IN ULONG Count);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
-
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+NTAPI
+IoSetStartIoAttributes(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN BOOLEAN  DeferredStartIo,
+  IN BOOLEAN  NonCancelable);
 
 NTKERNELAPI
-PEX_RUNDOWN_REF_CACHE_AWARE
+NTSTATUS
 NTAPI
-ExAllocateCacheAwareRundownProtection(
-  IN POOL_TYPE PoolType,
-  IN ULONG PoolTag);
+IoWMIDeviceObjectToInstanceName(
+  IN PVOID  DataBlockObject,
+  IN PDEVICE_OBJECT  DeviceObject,
+  OUT PUNICODE_STRING  InstanceName);
 
 NTKERNELAPI
-SIZE_T
+NTSTATUS
 NTAPI
-ExSizeOfRundownProtectionCacheAware(VOID);
+IoWMIExecuteMethod(
+  IN PVOID  DataBlockObject,
+  IN PUNICODE_STRING  InstanceName,
+  IN ULONG  MethodId,
+  IN ULONG  InBufferSize,
+  IN OUT PULONG  OutBufferSize,
+  IN OUT  PUCHAR  InOutBuffer);
 
 NTKERNELAPI
-PVOID
+NTSTATUS
 NTAPI
-ExEnterCriticalRegionAndAcquireResourceShared(
-  IN OUT PERESOURCE Resource);
+IoWMIHandleToInstanceName(
+  IN PVOID  DataBlockObject,
+  IN HANDLE  FileHandle,
+  OUT PUNICODE_STRING  InstanceName);
 
 NTKERNELAPI
-PVOID
+NTSTATUS
 NTAPI
-ExEnterCriticalRegionAndAcquireResourceExclusive(
-  IN OUT PERESOURCE Resource);
+IoWMIOpenBlock(
+  IN GUID  *DataBlockGuid,
+  IN ULONG  DesiredAccess,
+  OUT PVOID  *DataBlockObject);
 
 NTKERNELAPI
-PVOID
+NTSTATUS
 NTAPI
-ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
-  IN OUT PERESOURCE Resource);
+IoWMIQueryAllData(
+  IN PVOID  DataBlockObject,
+  IN OUT ULONG  *InOutBufferSize,
+  OUT PVOID  OutBuffer);
 
 NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseResourceAndLeaveCriticalRegion(
-  IN OUT PERESOURCE Resource);
+NTSTATUS
+NTAPI
+IoWMIQueryAllDataMultiple(
+  IN PVOID  *DataBlockObjectList,
+  IN ULONG  ObjectCount,
+  IN OUT ULONG  *InOutBufferSize,
+  OUT PVOID  OutBuffer);
 
 NTKERNELAPI
-VOID
+NTSTATUS
 NTAPI
-ExInitializeRundownProtectionCacheAware(
-  OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
-  IN SIZE_T RunRefSize);
+IoWMIQuerySingleInstance(
+  IN PVOID  DataBlockObject,
+  IN PUNICODE_STRING  InstanceName,
+  IN OUT ULONG  *InOutBufferSize,
+  OUT PVOID OutBuffer);
 
 NTKERNELAPI
-VOID
+NTSTATUS
 NTAPI
-ExFreeCacheAwareRundownProtection(
-  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+IoWMISetNotificationCallback(
+  IN OUT PVOID  Object,
+  IN WMI_NOTIFICATION_CALLBACK  Callback,
+  IN PVOID  Context OPTIONAL);
 
 NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExAcquireRundownProtectionCacheAware(
-  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+NTSTATUS
+NTAPI
+IoWMISetSingleInstance(
+  IN PVOID  DataBlockObject,
+  IN PUNICODE_STRING  InstanceName,
+  IN ULONG  Version,
+  IN ULONG  ValueBufferSize,
+  IN PVOID  ValueBuffer);
 
 NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseRundownProtectionCacheAware(
-  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+NTSTATUS
+NTAPI
+IoWMISetSingleItem(
+  IN PVOID  DataBlockObject,
+  IN PUNICODE_STRING  InstanceName,
+  IN ULONG  DataItemId,
+  IN ULONG  Version,
+  IN ULONG  ValueBufferSize,
+  IN PVOID  ValueBuffer);
 
-NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExAcquireRundownProtectionCacheAwareEx(
-  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
-  IN ULONG Count);
+#endif
 
+#if defined(_WIN64)
 NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseRundownProtectionCacheAwareEx(
-  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef,
-  IN ULONG Count);
+ULONG
+NTAPI
+IoWMIDeviceObjectToProviderId(
+  IN PDEVICE_OBJECT DeviceObject);
+#else
+#define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
+#endif
 
-NTKERNELAPI
+/*
+ * USHORT
+ * IoSizeOfIrp(
+ *   IN CCHAR  StackSize)
+ */
+#define IoSizeOfIrp(_StackSize) \
+  ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
+
+FORCEINLINE
 VOID
-FASTCALL
-ExWaitForRundownProtectionReleaseCacheAware(
-  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef);
+IoSkipCurrentIrpStackLocation (
+  IN OUT PIRP Irp)
+{
+  ASSERT(Irp->CurrentLocation <= Irp->StackCount);
+  Irp->CurrentLocation++;
+  Irp->Tail.Overlay.CurrentStackLocation++;
+}
 
-NTKERNELAPI
+FORCEINLINE
 VOID
-FASTCALL
-ExReInitializeRundownProtectionCacheAware(
-  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+IoSetNextIrpStackLocation (
+  IN OUT PIRP Irp)
+{
+  ASSERT(Irp->CurrentLocation > 0);
+  Irp->CurrentLocation--;
+  Irp->Tail.Overlay.CurrentStackLocation--;
+}
 
-NTKERNELAPI
+FORCEINLINE
+PIO_STACK_LOCATION
+IoGetNextIrpStackLocation(
+  IN PIRP Irp)
+{
+  ASSERT(Irp->CurrentLocation > 0);
+  return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
+}
+
+FORCEINLINE
 VOID
-FASTCALL
-ExRundownCompletedCacheAware(
-  IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+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;
 
-#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
+  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 (NTDDI_VERSION >= NTDDI_VISTA)
+#if defined(_WIN64)
 
 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);
+BOOLEAN
+IoIs32bitProcess(
+  IN PIRP  Irp  OPTIONAL);
 
-NTKERNELAPI
-VOID
-NTAPI
-ExDeleteLookasideListEx(
-  IN OUT PLOOKASIDE_LIST_EX Lookaside);
+#endif
 
-NTKERNELAPI
-VOID
-NTAPI
-ExFlushLookasideListEx(
-  IN OUT PLOOKASIDE_LIST_EX Lookaside);
+#define PLUGPLAY_REGKEY_DEVICE                            1
+#define PLUGPLAY_REGKEY_DRIVER                            2
+#define PLUGPLAY_REGKEY_CURRENT_HWPROFILE                 4
 
 FORCEINLINE
-PVOID
-ExAllocateFromLookasideListEx(
-  IN OUT PLOOKASIDE_LIST_EX Lookaside)
+PIO_STACK_LOCATION
+IoGetCurrentIrpStackLocation(
+  IN PIRP Irp)
 {
-  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;
+  ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
+  return Irp->Tail.Overlay.CurrentStackLocation;
 }
 
 FORCEINLINE
 VOID
-ExFreeToLookasideListEx(
-  IN OUT PLOOKASIDE_LIST_EX Lookaside,
-  IN PVOID Entry)
+IoMarkIrpPending(
+  IN OUT PIRP Irp)
 {
-  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;
+  IoGetCurrentIrpStackLocation( (Irp) )->Control |= SL_PENDING_RETURNED;
 }
 
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+/*
+ * 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)))
 
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+/* 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))
 
-NTKERNELAPI
 VOID
-NTAPI
-ExSetResourceOwnerPointerEx(
-  IN OUT PERESOURCE Resource,
-  IN PVOID OwnerPointer,
-  IN ULONG Flags);
+FORCEINLINE
+IoInitializeDpcRequest(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIO_DPC_ROUTINE DpcRoutine)
+{
+  KeInitializeDpc( &DeviceObject->Dpc,
+                   (PKDEFERRED_ROUTINE) DpcRoutine,
+                   DeviceObject );
+}
 
-#define FLAG_OWNER_POINTER_IS_THREAD 0x1
+#define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
 
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+/*
+ * ULONG
+ * IoGetFunctionCodeFromCtlCode(
+ *   IN ULONG  ControlCode)
+ */
+#define IoGetFunctionCodeFromCtlCode(_ControlCode) \
+  (((_ControlCode) >> 2) & 0x00000FFF)
 
-static __inline PVOID
-ExAllocateFromNPagedLookasideList(
-  IN OUT PNPAGED_LOOKASIDE_LIST Lookaside)
+FORCEINLINE
+VOID
+IoCopyCurrentIrpStackLocationToNext(
+  IN PIRP Irp)
 {
-  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;
+  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;
 }
 
-static __inline VOID
-ExFreeToNPagedLookasideList(
-  IN OUT PNPAGED_LOOKASIDE_LIST Lookaside,
-  IN PVOID Entry)
+NTKERNELAPI
+VOID
+NTAPI
+IoGetStackLimits(
+  OUT PULONG_PTR  LowLimit,
+  OUT PULONG_PTR  HighLimit);
+
+FORCEINLINE
+ULONG_PTR
+IoGetRemainingStackSize(
+  VOID)
 {
-  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
-   }
-}
+  ULONG_PTR End, Begin;
+  ULONG_PTR Result;
 
+  IoGetStackLimits(&Begin, &End);
+  Result = (ULONG_PTR)(&End) - Begin;
+  return Result;
+}
 
 /******************************************************************************
- *                          Object Manager Functions                          *
+ *                     Power Management Support Functions                     *
  ******************************************************************************/
 
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+#define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
 
-NTKERNELAPI
-LONG_PTR
-FASTCALL
-ObfDereferenceObject(
-  IN PVOID Object);
-#define ObDereferenceObject ObfDereferenceObject
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-ObGetObjectSecurity(
-  IN PVOID Object,
-  OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
-  OUT PBOOLEAN MemoryAllocated);
+PoCallDriver(
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN OUT struct _IRP  *Irp);
 
 NTKERNELAPI
-LONG_PTR
-FASTCALL
-ObfReferenceObject(
-  IN PVOID Object);
-#define ObReferenceObject ObfReferenceObject
+PULONG
+NTAPI
+PoRegisterDeviceForIdleDetection(
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN ULONG  ConservationIdleTime,
+  IN ULONG  PerformanceIdleTime,
+  IN DEVICE_POWER_STATE  State);
 
 NTKERNELAPI
-NTSTATUS
+PVOID
 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);
+PoRegisterSystemState(
+  IN OUT PVOID StateHandle OPTIONAL,
+  IN EXECUTION_STATE Flags);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-ObReferenceObjectByPointer(
-  IN PVOID Object,
-  IN ACCESS_MASK DesiredAccess,
-  IN POBJECT_TYPE ObjectType OPTIONAL,
-  IN KPROCESSOR_MODE AccessMode);
+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
-VOID
+POWER_STATE
 NTAPI
-ObReleaseObjectSecurity(
-  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
-  IN BOOLEAN MemoryAllocated);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+PoSetPowerState(
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN POWER_STATE_TYPE  Type,
+  IN POWER_STATE  State);
 
-#if (NTDDI_VERSION >= NTDDI_VISTA)
 NTKERNELAPI
 VOID
 NTAPI
-ObDereferenceObjectDeferDelete(
-  IN PVOID Object);
-#endif
+PoSetSystemState(
+  IN EXECUTION_STATE  Flags);
 
-#if (NTDDI_VERSION >= NTDDI_VISTASP1)
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-ObRegisterCallbacks(
-  IN POB_CALLBACK_REGISTRATION CallbackRegistration,
-  OUT PVOID *RegistrationHandle);
+PoStartNextPowerIrp(
+  IN OUT struct _IRP *Irp);
 
 NTKERNELAPI
 VOID
 NTAPI
-ObUnRegisterCallbacks(
-  IN PVOID RegistrationHandle);
+PoUnregisterSystemState(
+  IN OUT PVOID StateHandle);
 
 NTKERNELAPI
-USHORT
+NTSTATUS
 NTAPI
-ObGetFilterVersion(VOID);
+PoRequestShutdownEvent(
+  OUT PVOID *Event);
 
-#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+#if (NTDDI_VERSION >= NTDDI_VISTA)
 
 NTKERNELAPI
-NTSTATUS
+VOID
 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);
+PoSetSystemWake(
+  IN OUT struct _IRP *Irp);
 
 NTKERNELAPI
-LONG_PTR
-FASTCALL
-ObfReferenceObjectWithTag(
-  IN PVOID Object,
-  IN ULONG Tag);
+BOOLEAN
+NTAPI
+PoGetSystemWake(
+  IN struct _IRP *Irp);
 
 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);
+PoRegisterPowerSettingCallback(
+  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+  IN LPCGUID SettingGuid,
+  IN PPOWER_SETTING_CALLBACK Callback,
+  IN PVOID Context OPTIONAL,
+  OUT PVOID *Handle OPTIONAL);
 
 NTKERNELAPI
-VOID
+NTSTATUS
 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) */
-
-
-/******************************************************************************
- *                          Process Manager Functions                         *
- ******************************************************************************/
+PoUnregisterPowerSettingCallback(
+  IN OUT PVOID Handle);
 
-/*
- * PEPROCESS
- * PsGetCurrentProcess(VOID)
- */
-#define PsGetCurrentProcess IoGetCurrentProcess
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
-#if !defined(_PSGETCURRENTTHREAD_)
-#define _PSGETCURRENTTHREAD_
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
 
-FORCEINLINE
-PETHREAD
+NTKERNELAPI
+VOID
 NTAPI
-PsGetCurrentThread(VOID)
-{
-  return (PETHREAD)KeGetCurrentThread();
-}
-
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+PoSetDeviceBusyEx(
+  IN OUT PULONG IdlePointer);
 
+#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
 
+#if (NTDDI_VERSION >= NTDDI_WIN7)
 NTKERNELAPI
-NTSTATUS
+VOID
 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);
+PoStartDeviceBusy(
+  IN OUT PULONG IdlePointer);
 
 NTKERNELAPI
-NTSTATUS
+VOID
 NTAPI
-PsTerminateSystemThread(
-  IN NTSTATUS ExitStatus);
-
-#endif
-
+PoEndDeviceBusy(
+  IN OUT PULONG IdlePointer);
 
 NTKERNELAPI
-NTSTATUS
+BOOLEAN
 NTAPI
-PsWrapApcWow64Thread(
-  IN OUT PVOID *ApcContext,
-  IN OUT PVOID *ApcRoutine);
+PoQueryWatchdogTime(
+  IN PDEVICE_OBJECT Pdo,
+  OUT PULONG SecondsRemaining);
 
-/******************************************************************************
- *                          WMI Library Support Functions                     *
- ******************************************************************************/
+NTKERNELAPI
+VOID
+NTAPI
+PoDeletePowerRequest(
+  IN OUT PVOID PowerRequest);
 
-#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)
+NTAPI
+PoSetPowerRequest(
+  IN OUT PVOID PowerRequest,
+  IN POWER_REQUEST_TYPE Type);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-WmiQueryTraceInformation(
-  IN TRACE_INFORMATION_CLASS TraceInformationClass,
-  OUT PVOID TraceInformation,
-  IN ULONG TraceInformationLength,
-  OUT PULONG RequiredLength OPTIONAL,
-  IN PVOID Buffer OPTIONAL);
+PoClearPowerRequest(
+  IN OUT PVOID PowerRequest,
+  IN POWER_REQUEST_TYPE Type);
 
-#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
+NTAPI
+PoCreatePowerRequest(
+  OUT PVOID *PowerRequest,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PCOUNTED_REASON_CONTEXT Context);
 
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
-#ifndef TRACE_INFORMATION_CLASS_DEFINE
+/******************************************************************************
+ *                          Executive Functions                               *
+ ******************************************************************************/
 
-#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 ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
+#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
+#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
 
-#define TRACE_INFORMATION_CLASS_DEFINE
+#define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
+#define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
+#define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
+#define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
 
-#endif /* TRACE_INFOPRMATION_CLASS_DEFINE */
+#define ExInitializeSListHead InitializeSListHead
 
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+#if defined(_X86_)
+#if defined(_NTHAL_)
+#define ExAcquireFastMutex ExiAcquireFastMutex
+#define ExReleaseFastMutex ExiReleaseFastMutex
+#define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
+#endif
+#define ExInterlockedAddUlong ExfInterlockedAddUlong
+#define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
+#define ExInterlockedInsertTailList ExfInterlockedInsertTailList
+#define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
+#define ExInterlockedPopEntryList ExfInterlockedPopEntryList
+#define ExInterlockedPushEntryList ExfInterlockedPushEntryList
+#endif
 
-NTSTATUS
-NTKERNELAPI
-NTAPI
-EtwRegister(
-  IN LPCGUID ProviderId,
-  IN PETWENABLECALLBACK EnableCallback OPTIONAL,
-  IN PVOID CallbackContext OPTIONAL,
-  OUT PREGHANDLE RegHandle);
+#if defined(_WIN64)
 
-NTSTATUS
+#if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
+    defined(_NTHAL_) || defined(_NTOSP_)
 NTKERNELAPI
-NTAPI
-EtwUnregister(
-  IN REGHANDLE RegHandle);
+USHORT
+ExQueryDepthSList(IN PSLIST_HEADER ListHead);
+#else
+FORCEINLINE
+USHORT
+ExQueryDepthSList(IN PSLIST_HEADER ListHead)
+{
+    return (USHORT)(ListHead->Alignment & 0xffff);
+}
+#endif
 
-BOOLEAN
 NTKERNELAPI
-NTAPI
-EtwEventEnabled(
-  IN REGHANDLE RegHandle,
-  IN PCEVENT_DESCRIPTOR EventDescriptor);
+PSLIST_ENTRY
+ExpInterlockedFlushSList(
+    PSLIST_HEADER ListHead);
 
-BOOLEAN
 NTKERNELAPI
-NTAPI
-EtwProviderEnabled(
-  IN REGHANDLE RegHandle,
-  IN UCHAR Level,
-  IN ULONGLONG Keyword);
+PSLIST_ENTRY
+ExpInterlockedPopEntrySList(
+    PSLIST_HEADER ListHead);
 
-NTSTATUS
 NTKERNELAPI
-NTAPI
-EtwActivityIdControl(
-  IN ULONG ControlCode,
-  IN OUT LPGUID ActivityId);
+PSLIST_ENTRY
+ExpInterlockedPushEntrySList(
+    PSLIST_HEADER ListHead,
+    PSLIST_ENTRY ListEntry);
 
-NTSTATUS
-NTKERNELAPI
-NTAPI
-EtwWrite(
-  IN REGHANDLE RegHandle,
-  IN PCEVENT_DESCRIPTOR EventDescriptor,
-  IN LPCGUID ActivityId OPTIONAL,
-  IN ULONG UserDataCount,
-  IN PEVENT_DATA_DESCRIPTOR  UserData OPTIONAL);
+#define ExInterlockedFlushSList(Head) \
+    ExpInterlockedFlushSList(Head)
+#define ExInterlockedPopEntrySList(Head, Lock) \
+    ExpInterlockedPopEntrySList(Head)
+#define ExInterlockedPushEntrySList(Head, Entry, Lock) \
+    ExpInterlockedPushEntrySList(Head, Entry)
 
-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);
+#else // !defined(_WIN64)
+
+#define ExQueryDepthSList(listhead) (listhead)->Depth
 
-NTSTATUS
 NTKERNELAPI
-NTAPI
-EtwWriteString(
-  IN REGHANDLE RegHandle,
-  IN UCHAR Level,
-  IN ULONGLONG Keyword,
-  IN LPCGUID ActivityId OPTIONAL,
-  IN PCWSTR String);
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedFlushSList(
+    IN PSLIST_HEADER ListHead);
 
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+NTKERNELAPI
+PSINGLE_LIST_ENTRY 
+FASTCALL
+ExInterlockedPopEntrySList(
+    IN PSLIST_HEADER ListHead,
+    IN PKSPIN_LOCK Lock);
 
-#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
+PSINGLE_LIST_ENTRY 
+FASTCALL
+ExInterlockedPushEntrySList(
+    IN PSLIST_HEADER ListHead,
+    IN PSINGLE_LIST_ENTRY ListEntry,
+    IN PKSPIN_LOCK Lock);
+#else
+#define ExInterlockedPopEntrySList(_ListHead, _Lock) \
+    InterlockedPopEntrySList(_ListHead)
+#define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
+    InterlockedPushEntrySList(_ListHead, _ListEntry)
+#endif // _WIN2K_COMPAT_SLIST_USAGE
 
+#endif // !defined(_WIN64)
 
+/* ERESOURCE_THREAD
+ * ExGetCurrentResourceThread(
+ *     VOID);
+ */
+#define ExGetCurrentResourceThread() ((ERESOURCE_THREAD)PsGetCurrentThread())
 
-/******************************************************************************
- *                          Kernel Debugger Functions                         *
- ******************************************************************************/
+#define ExReleaseResource(R) (ExReleaseResourceLite(R))
 
-#ifndef _DBGNT_
+/* 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; \
+}
 
-ULONG
-__cdecl
-DbgPrint(
-  IN PCSTR Format,
-  IN ...);
+FORCEINLINE
+VOID
+ExInitializeFastMutex(
+  OUT PFAST_MUTEX FastMutex)
+{
+  FastMutex->Count = FM_LOCK_BIT;
+  FastMutex->Owner = NULL;
+  FastMutex->Contention = 0;
+  KeInitializeEvent(&FastMutex->Event, SynchronizationEvent, FALSE);
+  return;
+}
 
 #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
+NTKERNELAPI
+VOID
+FASTCALL
+ExAcquireFastMutex(
+    IN OUT PFAST_MUTEX FastMutex);
 
-NTSYSAPI
-ULONG
-NTAPI
-vDbgPrintEx(
-  IN ULONG ComponentId,
-  IN ULONG Level,
-  IN PCCH Format,
-  IN va_list ap);
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseFastMutex(
+    IN OUT PFAST_MUTEX FastMutex);
 
-NTSYSAPI
-ULONG
-NTAPI
-vDbgPrintExWithPrefix(
-  IN PCCH Prefix,
-  IN ULONG ComponentId,
-  IN ULONG Level,
-  IN PCCH Format,
-  IN va_list ap);
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExTryToAcquireFastMutex(
+    IN OUT PFAST_MUTEX FastMutex);
 
-#endif /* _VA_LIST_DEFINED */
+NTKERNELAPI
+VOID
+FASTCALL
+ExAcquireFastMutexUnsafe(
+    IN OUT PFAST_MUTEX FastMutex);
 
-NTSYSAPI
-NTSTATUS
-NTAPI
-DbgQueryDebugFilterState(
-  IN ULONG ComponentId,
-  IN ULONG Level);
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseFastMutexUnsafe(
+    IN OUT PFAST_MUTEX FastMutex);
 
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+BOOLEAN
 NTAPI
-DbgSetDebugFilterState(
-  IN ULONG ComponentId,
-  IN ULONG Level,
-  IN BOOLEAN State);
+ExAcquireResourceExclusiveLite(
+    IN PERESOURCE Resource,
+    IN BOOLEAN Wait);
 
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireResourceSharedLite(
+    IN PERESOURCE Resource,
+    IN BOOLEAN Wait);
 
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireSharedStarveExclusive(
+    IN PERESOURCE Resource,
+    IN BOOLEAN Wait);
 
-typedef VOID
-(*PDEBUG_PRINT_CALLBACK)(
-  IN PSTRING Output,
-  IN ULONG ComponentId,
-  IN ULONG Level);
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireSharedWaitForExclusive(
+    IN PERESOURCE Resource,
+    IN BOOLEAN Wait);
 
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+PVOID
 NTAPI
-DbgSetDebugPrintCallback(
-  IN PDEBUG_PRINT_CALLBACK DebugPrintCallback,
-  IN BOOLEAN Enable);
+ExAllocatePool(
+    IN POOL_TYPE PoolType,
+    IN SIZE_T NumberOfBytes);
 
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+#ifdef POOL_TAGGING
+#define ExAllocatePool(p,n) ExAllocatePoolWithTag(p,n,' kdD')
+#endif /* POOL_TAGGING */
 
-#endif /* _DBGNT_ */
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithQuota(
+    IN POOL_TYPE PoolType,
+    IN SIZE_T NumberOfBytes);
 
-#if DBG
+#ifdef POOL_TAGGING
+#define ExAllocatePoolWithQuota(p,n) ExAllocatePoolWithQuotaTag(p,n,' kdD')
+#endif /* POOL_TAGGING */
 
-#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)
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithQuotaTag(
+  IN POOL_TYPE  PoolType,
+  IN SIZE_T  NumberOfBytes,
+  IN ULONG  Tag);
 
-#else /* !DBG */
+#ifndef POOL_TAGGING
+#define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
+#endif /* POOL_TAGGING */
 
-#define KdPrint(_x_)
-#define KdPrintEx(_x_)
-#define vKdPrintEx(_x_)
-#define vKdPrintExWithPrefix(_x_)
-#define KdBreakPoint()
-#define KdBreakPointWithStatus(s)
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithTag(
+    IN POOL_TYPE PoolType,
+    IN SIZE_T NumberOfBytes,
+    IN ULONG Tag);
 
-#endif /* !DBG */
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithTagPriority(
+    IN POOL_TYPE PoolType,
+    IN SIZE_T NumberOfBytes,
+    IN ULONG Tag,
+    IN EX_POOL_PRIORITY Priority);
 
-#if defined(__GNUC__)
+NTKERNELAPI
+VOID
+NTAPI
+ExConvertExclusiveToSharedLite(
+    IN PERESOURCE Resource);
 
-extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent;
-extern NTKERNELAPI BOOLEAN KdDebuggerEnabled;
-#define KD_DEBUGGER_ENABLED KdDebuggerEnabled
-#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExCreateCallback(
+    OUT PCALLBACK_OBJECT *CallbackObject,
+    IN POBJECT_ATTRIBUTES ObjectAttributes,
+    IN BOOLEAN Create,
+    IN BOOLEAN AllowMultipleCallbacks);
 
-#elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
+NTKERNELAPI
+VOID
+NTAPI
+ExDeleteNPagedLookasideList(
+    IN PNPAGED_LOOKASIDE_LIST Lookaside);
 
-extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent;
-extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled;
-#define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
-#define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
+NTKERNELAPI
+VOID
+NTAPI
+ExDeletePagedLookasideList(
+    IN PPAGED_LOOKASIDE_LIST Lookaside);
 
-#else
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExDeleteResourceLite(
+    IN PERESOURCE Resource);
 
-extern BOOLEAN KdDebuggerNotPresent;
-extern BOOLEAN KdDebuggerEnabled;
-#define KD_DEBUGGER_ENABLED KdDebuggerEnabled
-#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
+NTKERNELAPI
+VOID
+NTAPI
+ExFreePool(
+    IN PVOID P);
 
+#ifdef POOL_TAGGING
+#define ExFreePool(P) ExFreePoolWithTag(P, 0)
 #endif
 
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTKERNELAPI
+VOID
+NTAPI
+ExFreePoolWithTag(
+    IN PVOID P,
+    IN ULONG Tag);
 
 NTKERNELAPI
-NTSTATUS
+ULONG
 NTAPI
-KdDisableDebugger(VOID);
+ExGetExclusiveWaiterCount(
+    IN PERESOURCE Resource);
 
 NTKERNELAPI
-NTSTATUS
+KPROCESSOR_MODE
 NTAPI
-KdEnableDebugger(VOID);
+ExGetPreviousMode(
+    VOID);
 
-#if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
-#define DbgBreakPoint __debugbreak
-#else
+NTKERNELAPI
+ULONG
+NTAPI
+ExGetSharedWaiterCount(
+    IN PERESOURCE Resource);
+
+NTKERNELAPI
 VOID
 NTAPI
-DbgBreakPoint(VOID);
-#endif
+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);
 
-NTSYSAPI
+NTKERNELAPI
 VOID
 NTAPI
-DbgBreakPointWithStatus(
-  IN ULONG Status);
+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);
 
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExInitializeResourceLite(
+    IN PERESOURCE Resource);
 
-#if (NTDDI_VERSION >= NTDDI_WS03)
 NTKERNELAPI
-BOOLEAN
+LARGE_INTEGER
 NTAPI
-KdRefreshDebuggerNotPresent(VOID);
+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
 
-#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);
+ULONG
+FASTCALL
+ExInterlockedAddUlong(
+    IN PULONG Addend,
+    IN ULONG Increment,
+    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
-/* Hardware Abstraction Layer Functions */
 
-#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExInterlockedInsertHeadList(
+    IN PLIST_ENTRY ListHead,
+    IN PLIST_ENTRY ListEntry,
+    IN PKSPIN_LOCK Lock);
 
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExInterlockedInsertTailList(
+    IN PLIST_ENTRY ListHead,
+    IN PLIST_ENTRY ListEntry,
+    IN PKSPIN_LOCK Lock);
 
-FORCEINLINE
-PVOID
-NTAPI
-HalAllocateCommonBuffer(
-  IN PDMA_ADAPTER DmaAdapter,
-  IN ULONG Length,
-  OUT PPHYSICAL_ADDRESS LogicalAddress,
-  IN BOOLEAN CacheEnabled)
-{
-  PALLOCATE_COMMON_BUFFER allocateCommonBuffer;
-  PVOID commonBuffer;
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedPopEntryList(
+    IN PSINGLE_LIST_ENTRY ListHead,
+    IN PKSPIN_LOCK Lock);
 
-  allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer;
-  ASSERT( allocateCommonBuffer != NULL );
-  commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled );
-  return commonBuffer;
-}
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedPushEntryList(
+    IN PSINGLE_LIST_ENTRY ListHead,
+    IN PSINGLE_LIST_ENTRY ListEntry,
+    IN PKSPIN_LOCK Lock);
 
-FORCEINLINE
-VOID
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExInterlockedRemoveHeadList(
+    IN PLIST_ENTRY ListHead,
+    IN PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+BOOLEAN
 NTAPI
-HalFreeCommonBuffer(
-  IN PDMA_ADAPTER DmaAdapter,
-  IN ULONG Length,
-  IN PHYSICAL_ADDRESS LogicalAddress,
-  IN PVOID VirtualAddress,
-  IN BOOLEAN CacheEnabled)
-{
-  PFREE_COMMON_BUFFER freeCommonBuffer;
+ExIsProcessorFeaturePresent(
+    IN ULONG ProcessorFeature);
 
-  freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer;
-  ASSERT( freeCommonBuffer != NULL );
-  freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled );
-}
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExIsResourceAcquiredExclusiveLite(
+    IN PERESOURCE Resource);
 
-FORCEINLINE
+NTKERNELAPI
 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;
-}
+ExIsResourceAcquiredSharedLite(
+    IN PERESOURCE Resource);
 
-FORCEINLINE
-ULONG
-HalGetDmaAlignment(
-  IN PDMA_ADAPTER DmaAdapter)
-{
-  PGET_DMA_ALIGNMENT getDmaAlignment;
-  ULONG alignment;
+#define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
 
-  getDmaAlignment = *(DmaAdapter)->DmaOperations->GetDmaAlignment;
-  ASSERT( getDmaAlignment != NULL );
-  alignment = getDmaAlignment( DmaAdapter );
-  return alignment;
-}
+NTKERNELAPI
+VOID
+NTAPI
+ExLocalTimeToSystemTime(
+    IN PLARGE_INTEGER LocalTime,
+    OUT PLARGE_INTEGER SystemTime);
 
+NTKERNELAPI
+VOID
+NTAPI
+ExNotifyCallback(
+    IN PCALLBACK_OBJECT CallbackObject,
+    IN PVOID Argument1,
+    IN PVOID Argument2);
 
+NTKERNELAPI
+VOID
+NTAPI
+ExQueueWorkItem(
+    IN PWORK_QUEUE_ITEM WorkItem,
+    IN WORK_QUEUE_TYPE QueueType);
 
-#endif
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+ExRaiseStatus(
+    IN NTSTATUS Status);
 
-#ifndef _NTTMAPI_
-#define _NTTMAPI_
+NTKERNELAPI
+PVOID
+NTAPI
+ExRegisterCallback(
+    IN PCALLBACK_OBJECT CallbackObject,
+    IN PCALLBACK_FUNCTION CallbackFunction,
+    IN PVOID CallbackContext);
 
-#include <ktmtypes.h>
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExReinitializeResourceLite(
+    IN PERESOURCE Resource);
 
-#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;
+NTKERNELAPI
+VOID
+NTAPI
+ExReleaseResourceForThreadLite(
+    IN PERESOURCE Resource,
+    IN ERESOURCE_THREAD ResourceThreadId);
 
-typedef enum _KTMOBJECT_TYPE {
-  KTMOBJECT_TRANSACTION,
-  KTMOBJECT_TRANSACTION_MANAGER,
-  KTMOBJECT_RESOURCE_MANAGER,
-  KTMOBJECT_ENLISTMENT,
-  KTMOBJECT_INVALID
-} KTMOBJECT_TYPE, *PKTMOBJECT_TYPE;
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseResourceLite(
+    IN PERESOURCE Resource);
 
-typedef struct _KTMOBJECT_CURSOR {
-  GUID LastQuery;
-  ULONG ObjectIdCount;
-  GUID ObjectIds[1];
-} KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR;
+NTKERNELAPI
+VOID
+NTAPI
+ExSetResourceOwnerPointer(
+    IN PERESOURCE Resource,
+    IN PVOID OwnerPointer);
 
-typedef enum _TRANSACTION_INFORMATION_CLASS {
-  TransactionBasicInformation,
-  TransactionPropertiesInformation,
-  TransactionEnlistmentInformation,
-  TransactionSuperiorEnlistmentInformation
-} TRANSACTION_INFORMATION_CLASS;
+NTKERNELAPI
+ULONG
+NTAPI
+ExSetTimerResolution(
+    IN ULONG DesiredTime,
+    IN BOOLEAN SetResolution);
 
-typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS {
-  TransactionManagerBasicInformation,
-  TransactionManagerLogInformation,
-  TransactionManagerLogPathInformation,
-  TransactionManagerRecoveryInformation = 4
-} TRANSACTIONMANAGER_INFORMATION_CLASS;
+NTKERNELAPI
+VOID
+NTAPI
+ExSystemTimeToLocalTime(
+    IN PLARGE_INTEGER SystemTime,
+    OUT PLARGE_INTEGER LocalTime);
 
-typedef enum _RESOURCEMANAGER_INFORMATION_CLASS {
-  ResourceManagerBasicInformation,
-  ResourceManagerCompletionInformation,
-} RESOURCEMANAGER_INFORMATION_CLASS;
+NTKERNELAPI
+VOID
+NTAPI
+ExUnregisterCallback(
+    IN PVOID CbRegistration);
 
-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;
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
 
-typedef enum _ENLISTMENT_INFORMATION_CLASS {
-  EnlistmentBasicInformation,
-  EnlistmentRecoveryInformation,
-  EnlistmentCrmInformation
-} ENLISTMENT_INFORMATION_CLASS;
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtection(
+    IN OUT PEX_RUNDOWN_REF RunRef);
 
-typedef struct _TRANSACTION_LIST_ENTRY {
-#if defined(__cplusplus)
-  ::UOW UOW;
-#else
-  UOW UOW;
-#endif
-} TRANSACTION_LIST_ENTRY, *PTRANSACTION_LIST_ENTRY;
+NTKERNELAPI
+VOID
+FASTCALL
+ExInitializeRundownProtection(
+    OUT PEX_RUNDOWN_REF RunRef);
 
-typedef struct _TRANSACTION_LIST_INFORMATION {
-  ULONG NumberOfTransactions;
-  TRANSACTION_LIST_ENTRY TransactionInformation[1];
-} TRANSACTION_LIST_INFORMATION, *PTRANSACTION_LIST_INFORMATION;
+NTKERNELAPI
+VOID
+FASTCALL
+ExReInitializeRundownProtection(
+    OUT PEX_RUNDOWN_REF RunRef);
 
-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);
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseRundownProtection(
+    IN OUT PEX_RUNDOWN_REF RunRef);
 
-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);
+NTKERNELAPI
+VOID
+FASTCALL
+ExRundownCompleted(
+    OUT PEX_RUNDOWN_REF RunRef);
 
-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);
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExVerifySuite(
+    IN SUITE_TYPE SuiteType);
 
-typedef NTSTATUS
-(NTAPI *PFN_NT_SET_INFORMATION_TRANSACTION)(
-  IN HANDLE TransactionHandle,
-  IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
-  IN PVOID TransactionInformation,
-  IN ULONG TransactionInformationLength);
+NTKERNELAPI
+VOID
+FASTCALL
+ExWaitForRundownProtectionRelease(
+    IN OUT PEX_RUNDOWN_REF RunRef);
 
-typedef NTSTATUS
-(NTAPI *PFN_NT_COMMIT_TRANSACTION)(
-  IN HANDLE TransactionHandle,
-  IN BOOLEAN Wait);
+#endif // (NTDDI_VERSION >= NTDDI_WINXP)
 
-typedef NTSTATUS
-(NTAPI *PFN_NT_ROLLBACK_TRANSACTION)(
-  IN HANDLE TransactionHandle,
-  IN BOOLEAN Wait);
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionEx(
+    IN OUT PEX_RUNDOWN_REF RunRef,
+    IN ULONG Count);
 
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseRundownProtectionEx(
+    IN OUT PEX_RUNDOWN_REF RunRef,
+    IN ULONG Count);
+#endif // (NTDDI_VERSION >= NTDDI_WINXPSP2)
 
-NTSYSCALLAPI
-NTSTATUS
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+NTKERNELAPI
+PEX_RUNDOWN_REF_CACHE_AWARE
 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);
+ExAllocateCacheAwareRundownProtection(
+    IN POOL_TYPE PoolType,
+    IN ULONG PoolTag);
 
-NTSYSCALLAPI
-NTSTATUS
+NTKERNELAPI
+SIZE_T
 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);
+ExSizeOfRundownProtectionCacheAware(VOID);
+#endif // (NTDDI_VERSION >= NTDDI_WS03SP1)
 
-NTSYSCALLAPI
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtRenameTransactionManager(
-  IN PUNICODE_STRING LogFileName,
-  IN LPGUID ExistingTransactionManagerGuid);
+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);
+#endif
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtRollforwardTransactionManager(
-  IN HANDLE TransactionManagerHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+#if !defined(MIDL_PASS)
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtRecoverTransactionManager(
-  IN HANDLE TransactionManagerHandle);
+static __inline PVOID
+ExAllocateFromNPagedLookasideList(
+    IN PNPAGED_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;
+}
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtQueryInformationTransactionManager(
-  IN HANDLE TransactionManagerHandle,
-  IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
-  OUT PVOID TransactionManagerInformation,
-  IN ULONG TransactionManagerInformationLength,
-  OUT PULONG ReturnLength);
+static __inline PVOID
+ExAllocateFromPagedLookasideList(
+    IN 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;
+}
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtSetInformationTransactionManager(
-  IN HANDLE TmHandle OPTIONAL,
-  IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
-  IN PVOID TransactionManagerInformation,
-  IN ULONG TransactionManagerInformationLength);
+static __inline VOID
+ExFreeToNPagedLookasideList(
+    IN 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 {
+        InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
+    }
+}
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtEnumerateTransactionObject(
-  IN HANDLE RootObjectHandle OPTIONAL,
-  IN KTMOBJECT_TYPE QueryType,
-  IN OUT PKTMOBJECT_CURSOR ObjectCursor,
-  IN ULONG ObjectCursorLength,
-  OUT PULONG ReturnLength);
+static __inline VOID
+ExFreeToPagedLookasideList(
+    IN 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);
+    }
+}
 
-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);
+#endif // !defined(MIDL_PASS)
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtOpenTransaction(
-  OUT PHANDLE TransactionHandle,
-  IN ACCESS_MASK DesiredAccess,
-  IN POBJECT_ATTRIBUTES ObjectAttributes,
-  IN LPGUID Uow,
-  IN HANDLE TmHandle OPTIONAL);
+/******************************************************************************
+ *                          Object Manager Functions                          *
+ ******************************************************************************/
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfDereferenceObject(
+  IN PVOID Object);
+#define ObDereferenceObject ObfDereferenceObject
 
-NTSYSCALLAPI
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtQueryInformationTransaction(
-  IN HANDLE TransactionHandle,
-  IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
-  OUT PVOID TransactionInformation,
-  IN ULONG TransactionInformationLength,
-  OUT PULONG ReturnLength OPTIONAL);
+ObGetObjectSecurity(
+  IN PVOID Object,
+  OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
+  OUT PBOOLEAN MemoryAllocated);
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtSetInformationTransaction(
-  IN HANDLE TransactionHandle,
-  IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
-  IN PVOID TransactionInformation,
-  IN ULONG TransactionInformationLength);
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfReferenceObject(
+  IN PVOID Object);
+#define ObReferenceObject ObfReferenceObject
 
-NTSYSCALLAPI
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtCommitTransaction(
-  IN HANDLE TransactionHandle,
-  IN BOOLEAN Wait);
+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);
 
-NTSYSCALLAPI
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtRollbackTransaction(
-  IN HANDLE TransactionHandle,
-  IN BOOLEAN Wait);
+ObReferenceObjectByPointer(
+  IN PVOID  Object,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_TYPE ObjectType OPTIONAL,
+  IN KPROCESSOR_MODE AccessMode);
 
-NTSYSCALLAPI
-NTSTATUS
+NTKERNELAPI
+VOID
 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);
+ObReleaseObjectSecurity(
+  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+  IN BOOLEAN MemoryAllocated);
 
-NTSYSCALLAPI
-NTSTATUS
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+/******************************************************************************
+ *                          Process Manager Functions                         *
+ ******************************************************************************/
+
+/*
+ * PEPROCESS
+ * PsGetCurrentProcess(VOID)
+ */
+#define PsGetCurrentProcess IoGetCurrentProcess
+
+#if !defined(_PSGETCURRENTTHREAD_)
+
+#define _PSGETCURRENTTHREAD_
+
+FORCEINLINE
+PETHREAD
 NTAPI
-NtOpenEnlistment(
-  OUT PHANDLE EnlistmentHandle,
-  IN ACCESS_MASK DesiredAccess,
-  IN HANDLE ResourceManagerHandle,
-  IN LPGUID EnlistmentGuid,
-  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
+PsGetCurrentThread (
+  VOID)
+{
+  return (PETHREAD)KeGetCurrentThread();
+}
 
-NTSYSCALLAPI
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtQueryInformationEnlistment(
-  IN HANDLE EnlistmentHandle,
-  IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
-  OUT PVOID EnlistmentInformation,
-  IN ULONG EnlistmentInformationLength,
-  OUT PULONG ReturnLength);
+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);
 
-NTSYSCALLAPI
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtSetInformationEnlistment(
-  IN HANDLE EnlistmentHandle OPTIONAL,
-  IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
-  IN PVOID EnlistmentInformation,
-  IN ULONG EnlistmentInformationLength);
+PsTerminateSystemThread(
+  IN NTSTATUS  ExitStatus);
 
-NTSYSCALLAPI
+#endif
+
+/******************************************************************************
+ *                          WMI Library Support Functions                     *
+ ******************************************************************************/
+
+#ifdef RUN_WPP
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
 NTSTATUS
-NTAPI
-NtRecoverEnlistment(
-  IN HANDLE EnlistmentHandle,
-  IN PVOID EnlistmentKey OPTIONAL);
+DDKCDECLAPI
+WmiTraceMessage(
+  IN TRACEHANDLE  LoggerHandle,
+  IN ULONG  MessageFlags,
+  IN LPGUID  MessageGuid,
+  IN USHORT  MessageNumber,
+  IN ...);
+#endif
 
-NTSYSCALLAPI
+#endif
+
+ #if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtPrePrepareEnlistment(
-  IN HANDLE EnlistmentHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+WmiQueryTraceInformation(
+  IN TRACE_INFORMATION_CLASS  TraceInformationClass,
+  OUT PVOID  TraceInformation,
+  IN ULONG  TraceInformationLength,
+  OUT PULONG  RequiredLength OPTIONAL,
+  IN PVOID  Buffer OPTIONAL);
 
-NTSYSCALLAPI
+#if 0
+/* FIXME: Get va_list from where? */
+NTKERNELAPI
 NTSTATUS
+DDKCDECLAPI
+WmiTraceMessageVa(
+  IN TRACEHANDLE  LoggerHandle,
+  IN ULONG  MessageFlags,
+  IN LPGUID  MessageGuid,
+  IN USHORT  MessageNumber,
+  IN va_list  MessageArgList);
+#endif
+
+#endif
+
+/******************************************************************************
+ *                          Kernel Debugger Functions                         *
+ ******************************************************************************/
+
+#ifndef _DBGNT_
+ULONG
+DDKCDECLAPI
+DbgPrint(
+  IN PCSTR  Format,
+  IN ...);
+#endif
+
+#if DBG
+
+#define KdPrint(_x_) DbgPrint _x_
+#define KdPrintEx(_x_) DbgPrintEx _x_
+#define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
+#define KdBreakPoint() DbgBreakPoint()
+#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
+
+#else /* !DBG */
+
+#define KdPrint(_x_)
+#define KdPrintEx(_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
+
+#ifdef _VA_LIST_DEFINED
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTSYSAPI
+ULONG
 NTAPI
-NtPrepareEnlistment(
-  IN HANDLE EnlistmentHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+vDbgPrintEx(
+  IN ULONG ComponentId,
+  IN ULONG Level,
+  IN PCCH Format,
+  IN va_list ap);
 
-NTSYSCALLAPI
-NTSTATUS
+NTSYSAPI
+ULONG
 NTAPI
-NtCommitEnlistment(
-  IN HANDLE EnlistmentHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+vDbgPrintExWithPrefix(
+  IN PCCH Prefix,
+  IN ULONG ComponentId,
+  IN ULONG Level,
+  IN PCCH Format,
+  IN va_list ap);
 
-NTSYSCALLAPI
+#endif
+#endif // _VA_LIST_DEFINED
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtRollbackEnlistment(
-  IN HANDLE EnlistmentHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+KdDisableDebugger(
+  VOID);
 
-NTSYSCALLAPI
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtPrePrepareComplete(
-  IN HANDLE EnlistmentHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+KdEnableDebugger(
+  VOID);
 
-NTSYSCALLAPI
-NTSTATUS
+#if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
+#define DbgBreakPoint __debugbreak
+#else
+VOID
 NTAPI
-NtPrepareComplete(
-  IN HANDLE EnlistmentHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+DbgBreakPoint(
+  VOID);
+#endif
 
-NTSYSCALLAPI
-NTSTATUS
+NTSYSAPI
+VOID
 NTAPI
-NtCommitComplete(
-  IN HANDLE EnlistmentHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+DbgBreakPointWithStatus(
+  IN ULONG  Status);
+
+NTSYSAPI
+ULONG
+DDKCDECLAPI
+DbgPrintReturnControlC(
+  IN PCCH  Format,
+  IN ...);
+
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTSYSAPI
+ULONG
+DDKCDECLAPI
+DbgPrintEx(
+  IN ULONG  ComponentId,
+  IN ULONG  Level,
+  IN PCSTR  Format,
+  IN ...);
 
-NTSYSCALLAPI
+NTSYSAPI
 NTSTATUS
 NTAPI
-NtReadOnlyEnlistment(
-  IN HANDLE EnlistmentHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+DbgQueryDebugFilterState(
+  IN ULONG  ComponentId,
+  IN ULONG  Level);
 
-NTSYSCALLAPI
+NTSYSAPI
 NTSTATUS
 NTAPI
-NtRollbackComplete(
-  IN HANDLE EnlistmentHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+DbgSetDebugFilterState(
+  IN ULONG  ComponentId,
+  IN ULONG  Level,
+  IN BOOLEAN  State);
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtSinglePhaseReject(
-  IN HANDLE EnlistmentHandle,
-  IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+#endif
 
-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);
+#if (NTDDI_VERSION >= NTDDI_WS03)
 
-NTSYSCALLAPI
-NTSTATUS
+NTKERNELAPI
+BOOLEAN
 NTAPI
-NtOpenResourceManager(
-  OUT PHANDLE ResourceManagerHandle,
-  IN ACCESS_MASK DesiredAccess,
-  IN HANDLE TmHandle,
-  IN LPGUID ResourceManagerGuid OPTIONAL,
-  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
+KdRefreshDebuggerNotPresent(
+    VOID
+);
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtRecoverResourceManager(
-  IN HANDLE ResourceManagerHandle);
+#endif
 
-NTSYSCALLAPI
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+NTKERNELAPI
 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);
+KdChangeOption(
+  IN KD_OPTION Option,
+  IN ULONG InBufferBytes OPTIONAL,
+  IN PVOID InBuffer,
+  IN ULONG OutBufferBytes OPTIONAL,
+  OUT PVOID OutBuffer,
+  OUT PULONG OutBufferNeeded OPTIONAL);
+#endif
 
-NTSYSCALLAPI
-NTSTATUS
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+FORCEINLINE
+PVOID
 NTAPI
-NtQueryInformationResourceManager(
-  IN HANDLE ResourceManagerHandle,
-  IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
-  OUT PVOID ResourceManagerInformation,
-  IN ULONG ResourceManagerInformationLength,
-  OUT PULONG ReturnLength OPTIONAL);
+HalAllocateCommonBuffer(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN ULONG  Length,
+  OUT PPHYSICAL_ADDRESS  LogicalAddress,
+  IN BOOLEAN  CacheEnabled)
+{
+  PALLOCATE_COMMON_BUFFER allocateCommonBuffer;
+  PVOID commonBuffer;
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtSetInformationResourceManager(
-  IN HANDLE ResourceManagerHandle,
-  IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
-  IN PVOID ResourceManagerInformation,
-  IN ULONG ResourceManagerInformationLength);
+  allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer;
+  ASSERT( allocateCommonBuffer != NULL );
+  commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled );
+  return commonBuffer;
+}
 
-NTSYSCALLAPI
-NTSTATUS
+FORCEINLINE
+VOID
 NTAPI
-NtRegisterProtocolAddressInformation(
-  IN HANDLE ResourceManager,
-  IN PCRM_PROTOCOL_ID ProtocolId,
-  IN ULONG ProtocolInformationSize,
-  IN PVOID ProtocolInformation,
-  IN ULONG CreateOptions OPTIONAL);
+HalFreeCommonBuffer(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN ULONG  Length,
+  IN PHYSICAL_ADDRESS  LogicalAddress,
+  IN PVOID  VirtualAddress,
+  IN BOOLEAN  CacheEnabled)
+{
+  PFREE_COMMON_BUFFER freeCommonBuffer;
 
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtPropagationComplete(
-  IN HANDLE ResourceManagerHandle,
-  IN ULONG RequestCookie,
-  IN ULONG BufferLength,
-  IN PVOID Buffer);
+  freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer;
+  ASSERT( freeCommonBuffer != NULL );
+  freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled );
+}
 
-NTSYSCALLAPI
-NTSTATUS
+FORCEINLINE
+ULONG
 NTAPI
-NtPropagationFailed(
-  IN HANDLE ResourceManagerHandle,
-  IN ULONG RequestCookie,
-  IN NTSTATUS PropStatus);
+HalReadDmaCounter(
+  IN PDMA_ADAPTER DmaAdapter)
+{
+  PREAD_DMA_COUNTER readDmaCounter;
+  ULONG counter;
+
+  readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter;
+  ASSERT( readDmaCounter != NULL );
+  counter = readDmaCounter( DmaAdapter );
+  return counter;
+}
+
+#endif
+
+
+#ifndef _NTTMAPI_
+#define _NTTMAPI_
+
+#include <ktmtypes.h>
+
+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;
 
-#endif /* NTDDI_VERSION >= NTDDI_VISTA */
+typedef enum _ENLISTMENT_INFORMATION_CLASS {
+  EnlistmentBasicInformation,
+  EnlistmentRecoveryInformation,
+  EnlistmentCrmInformation
+} ENLISTMENT_INFORMATION_CLASS;
 
 #endif /* !_NTTMAPI_ */
 /******************************************************************************
  *                            ZwXxx Functions                                 *
  ******************************************************************************/
 
-
 /* Constants */
 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
 #define ZwCurrentProcess() NtCurrentProcess()
 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
 #define ZwCurrentThread() NtCurrentThread()
 
-
-
 #if (NTDDI_VERSION >= NTDDI_WIN2K)
 
-
-
 NTSYSAPI
 NTSTATUS
 NTAPI
 ZwClose(
-  IN HANDLE Handle);
+  IN HANDLE  Handle);
 
 NTSYSAPI
 NTSTATUS
 NTAPI
 ZwCreateDirectoryObject(
-  OUT PHANDLE DirectoryHandle,
-  IN ACCESS_MASK DesiredAccess,
-  IN POBJECT_ATTRIBUTES ObjectAttributes);
+  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);
+  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);
+  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
@@ -15264,7 +11081,7 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 ZwDeleteValueKey(
-  IN HANDLE KeyHandle,
+  IN HANDLE  KeyHandle,
   IN PUNICODE_STRING ValueName);
 
 NTSYSAPI
@@ -15293,7 +11110,7 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 ZwFlushKey(
-  IN HANDLE KeyHandle);
+  IN HANDLE  KeyHandle);
 
 NTSYSAPI
 NTSTATUS
@@ -15305,22 +11122,22 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 ZwMakeTemporaryObject(
-  IN HANDLE Handle);
+  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);
+  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
@@ -15337,35 +11154,35 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 ZwOpenKey(
-  OUT PHANDLE KeyHandle,
-  IN ACCESS_MASK DesiredAccess,
-  IN POBJECT_ATTRIBUTES ObjectAttributes);
+  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);
+  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);
+  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);
+  IN HANDLE  FileHandle,
+  OUT PIO_STATUS_BLOCK  IoStatusBlock,
+  OUT PVOID  FileInformation,
+  IN ULONG  Length,
+  IN FILE_INFORMATION_CLASS  FileInformationClass);
 
 NTSYSAPI
 NTSTATUS
@@ -15381,9 +11198,9 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 ZwQuerySymbolicLinkObject(
-  IN HANDLE LinkHandle,
-  IN OUT PUNICODE_STRING LinkTarget,
-  OUT PULONG ReturnedLength OPTIONAL);
+  IN HANDLE  LinkHandle,
+  IN OUT PUNICODE_STRING  LinkTarget,
+  OUT PULONG  ReturnedLength  OPTIONAL);
 
 NTSYSAPI
 NTSTATUS
@@ -15400,36 +11217,36 @@ 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);
+  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);
+  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);
+  IN HANDLE  KeyHandle,
+  IN PUNICODE_STRING  ValueName,
+  IN ULONG  TitleIndex  OPTIONAL,
+  IN ULONG  Type,
+  IN PVOID  Data OPTIONAL,
+  IN ULONG  DataSize);
 
 NTSYSAPI
 NTSTATUS
@@ -15441,22 +11258,22 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 ZwUnmapViewOfSection(
-  IN HANDLE ProcessHandle,
-  IN PVOID BaseAddress OPTIONAL);
+  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);
+  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
@@ -15465,11 +11282,10 @@ ZwQueryFullAttributesFile(
   IN POBJECT_ATTRIBUTES ObjectAttributes,
   OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation);
 
+#endif
 
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
+#if (NTDDI_VERSION >= NTDDI_WIN2003)
 
-#if (NTDDI_VERSION >= NTDDI_WS03)
 NTSYSCALLAPI
 NTSTATUS
 NTAPI
@@ -15477,6 +11293,7 @@ ZwOpenEvent(
   OUT PHANDLE EventHandle,
   IN ACCESS_MASK DesiredAccess,
   IN POBJECT_ATTRIBUTES ObjectAttributes);
+
 #endif
 
 #if (NTDDI_VERSION >= NTDDI_VISTA)
@@ -15803,13 +11620,10 @@ ZwSinglePhaseReject(
   IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
 
 
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
+#endif
 
 #if (NTDDI_VERSION >= NTDDI_WIN7)
 
-
-
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -15873,36 +11687,12 @@ ZwSetInformationKey(
   IN PVOID KeySetInformation,
   IN ULONG KeySetInformationLength);
 
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
+#endif
 
 /******************************************************************************
  *                          Unsorted                                          *
  ******************************************************************************/
 
-#ifdef _MAC
-
-#ifndef _INC_STRING
-#include <string.h>
-#endif
-
-#else
-#include <string.h>
-#endif /* _MAC */
-
-#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__
@@ -15919,6 +11709,11 @@ inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
 #endif /* __cplusplus */
 #endif /* !__IID_ALIGNED__ */
 
+typedef enum {
+    LT_DONT_CARE,
+    LT_LOWEST_LATENCY
+} LATENCY_TIME;
+
 #define MAXIMUM_SUSPEND_COUNT             MAXCHAR
 
 #define MAXIMUM_FILENAME_LENGTH           256
@@ -15934,6 +11729,14 @@ inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
 
+#define EVENT_QUERY_STATE (0x0001)
+#define EVENT_MODIFY_STATE (0x0002)
+#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
+
+#define SEMAPHORE_QUERY_STATE (0x0001)
+#define SEMAPHORE_MODIFY_STATE (0x0002)
+#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
+
 #define SYMBOLIC_LINK_QUERY               0x0001
 #define SYMBOLIC_LINK_ALL_ACCESS          (STANDARD_RIGHTS_REQUIRED | 0x1)
 
@@ -15942,21 +11745,21 @@ inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
 #define DUPLICATE_SAME_ATTRIBUTES         0x00000004
 
 /* 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
+
+/* 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
 
 #ifndef _TRACEHANDLE_DEFINED
 #define _TRACEHANDLE_DEFINED
 typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
 #endif
 
-extern PBOOLEAN Mm64BitPhysicalAddress;
 
-extern PVOID MmBadPointer;
 
 #ifdef __cplusplus
 }