Sync to trunk (r44371)
[reactos.git] / reactos / include / ddk / winddk.h
index 0da9b56..d12c010 100644 (file)
 #ifndef __WINDDK_H
 #define __WINDDK_H
 
-#if __GNUC__ >= 3
-#pragma GCC system_header
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#ifdef __GNUC__
-#include "intrin.h"
-#endif
-
-/*
-** Definitions specific to this Device Driver Kit
-*/
-#define DDKAPI __stdcall
-#define FASTCALL __fastcall
-#define DDKCDECLAPI __cdecl
-
-#ifdef _NTOSKRNL_
-/* HACKHACKHACK!!! We shouldn't include this header from ntoskrnl! */
-#define NTKERNELAPI
-#else
-#define NTKERNELAPI DECLSPEC_IMPORT
-#endif
+#include <excpt.h>
+#include <ntdef.h>
+#include <ntstatus.h>
 
-#if defined(_NTOSKRNL_)
-#define DECLARE_INTERNAL_OBJECT(x) typedef struct _##x; typedef struct _##x *P##x;
-#define DECLARE_INTERNAL_OBJECT2(x,y) typedef struct _##x; typedef struct _##x *P##y;
-#else
-#define DECLARE_INTERNAL_OBJECT(x) struct _##x; typedef struct _##x *P##x;
-#define DECLARE_INTERNAL_OBJECT2(x,y) struct _##x; typedef struct _##x *P##y;
-#endif
+#include "intrin.h"
 
 #if !defined(_NTHAL_)
 #define NTHALAPI DECLSPEC_IMPORT
@@ -70,10 +46,15 @@ extern "C" {
 #define UNALLIGNED
 
 #define CONST const
-#define VOLATILE volatile
 
 #define RESTRICTED_POINTER
+
+#if defined(_WIN64)
+#define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
+#else
 #define POINTER_ALIGNMENT
+#endif
+
 #define DECLSPEC_ADDRSAFE
 
 #ifdef NONAMELESSUNION
@@ -84,18 +65,6 @@ extern "C" {
 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
 #endif
 
-#if !defined(_NTSYSTEM_)
-#define NTSYSAPI     DECLSPEC_IMPORT
-#define NTSYSCALLAPI DECLSPEC_IMPORT
-#else
-#define NTSYSAPI
-#if defined(_NTDLLBUILD_)
-#define NTSYSCALLAPI
-#else
-#define NTSYSCALLAPI DECLSPEC_ADDRSAFE
-#endif
-#endif
-
 /*
  * Alignment Macros
  */
@@ -117,10 +86,15 @@ extern "C" {
 
 #ifndef __IID_ALIGNED__
     #define __IID_ALIGNED__
-
-    #define IsEqualGUIDAligned(guid1, guid2) \
-        ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
-            (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
+    #ifdef __cplusplus
+        inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
+        {
+            return ((*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)));
+        }
+    #else
+        #define IsEqualGUIDAligned(guid1, guid2) \
+            ((*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)))
+    #endif 
 #endif
 
 /*
@@ -145,17 +119,8 @@ struct _DRIVE_LAYOUT_INFORMATION;
 struct _DRIVE_LAYOUT_INFORMATION_EX;
 struct _LOADER_PARAMETER_BLOCK;
 
-#ifndef _SECURITY_ATTRIBUTES_
-#define _SECURITY_ATTRIBUTES_
-typedef PVOID PSECURITY_DESCRIPTOR;
-#endif
-typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION;
 typedef PVOID PSID;
 
-DECLARE_INTERNAL_OBJECT(ADAPTER_OBJECT)
-DECLARE_INTERNAL_OBJECT(DMA_ADAPTER)
-DECLARE_INTERNAL_OBJECT(IO_STATUS_BLOCK)
-
 #if 1
 /* FIXME: Unknown definitions */
 struct _SET_PARTITION_INFORMATION_EX;
@@ -187,10 +152,7 @@ typedef enum
 ** Simple structures
 */
 
-typedef LONG KPRIORITY;
 typedef UCHAR KIRQL, *PKIRQL;
-typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
-typedef UCHAR KPROCESSOR_MODE;
 
 typedef enum _MODE {
   KernelMode,
@@ -198,30 +160,10 @@ typedef enum _MODE {
   MaximumMode
 } MODE;
 
-typedef struct _QUAD
-{
-    union
-    {
-        LONGLONG UseThisFieldToCopy;
-        float DoNotUseThisField;
-    };
-} QUAD, *PQUAD;
-
-/* Structures not exposed to drivers */
-typedef struct _IO_TIMER *PIO_TIMER;
-typedef struct _KPROCESS *PKPROCESS;
-typedef struct _EPROCESS *PEPROCESS;
-typedef struct _ETHREAD *PETHREAD;
-typedef struct _KINTERRUPT *PKINTERRUPT;
-typedef struct _OBJECT_TYPE *POBJECT_TYPE;
-typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
-typedef struct _COMPRESSED_DATA_INFO *PCOMPRESSED_DATA_INFO;
-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 _BUS_HANDLER *PBUS_HANDLER;
-typedef struct _PEB *PPEB;
-typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
+//
+// Forwarder
+//
+struct _COMPRESSED_DATA_INFO;
 
 /* Constants */
 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
@@ -231,12 +173,17 @@ typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
 
 #if (_M_IX86)
 #define KIP0PCRADDRESS                      0xffdff000
+    
 #endif
 
 #define KERNEL_STACK_SIZE                   12288
 #define KERNEL_LARGE_STACK_SIZE             61440
 #define KERNEL_LARGE_STACK_COMMIT           12288
 
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
 #define DPFLTR_ERROR_LEVEL                  0
 #define DPFLTR_WARNING_LEVEL                1
 #define DPFLTR_TRACE_LEVEL                  2
@@ -749,11 +696,11 @@ typedef struct _KUSER_SHARED_DATA
 
 typedef enum _IO_PAGING_PRIORITY
 {
-  IoPagingPriorityInvalid,        
-  IoPagingPriorityNormal,         
-  IoPagingPriorityHigh,           
-  IoPagingPriorityReserved1,      
-  IoPagingPriorityReserved2       
+  IoPagingPriorityInvalid,
+  IoPagingPriorityNormal,
+  IoPagingPriorityHigh,
+  IoPagingPriorityReserved1,
+  IoPagingPriorityReserved2
 } IO_PAGING_PRIORITY;
 
 typedef enum _IO_ALLOCATION_ACTION {
@@ -1152,19 +1099,19 @@ typedef struct _OBJECT_NAME_INFORMATION {
   UNICODE_STRING  Name;
 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
 
-typedef VOID
-(DDKAPI *PIO_APC_ROUTINE)(
-  IN PVOID ApcContext,
-  IN PIO_STATUS_BLOCK IoStatusBlock,
-  IN ULONG Reserved);
-
 typedef struct _IO_STATUS_BLOCK {
   _ANONYMOUS_UNION union {
     NTSTATUS  Status;
     PVOID  Pointer;
   } DUMMYUNIONNAME;
   ULONG_PTR  Information;
-} IO_STATUS_BLOCK;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+
+typedef VOID
+(DDKAPI *PIO_APC_ROUTINE)(
+  IN PVOID ApcContext,
+  IN PIO_STATUS_BLOCK IoStatusBlock,
+  IN ULONG Reserved);
 
 typedef VOID
 (DDKAPI *PKNORMAL_ROUTINE)(
@@ -1252,8 +1199,8 @@ typedef enum _KSPIN_LOCK_QUEUE_NUMBER
 } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER;
 
 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 {
@@ -1309,62 +1256,6 @@ typedef struct _WAIT_CONTEXT_BLOCK {
   PKDPC  BufferChainingDpc;
 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
 
-typedef struct _DISPATCHER_HEADER
-{
-    union
-    {
-        struct
-        {
-            UCHAR Type;
-            union
-            {
-                UCHAR Absolute;
-                UCHAR NpxIrql;
-            };
-            union
-            {
-                UCHAR Size;
-                UCHAR Hand;
-            };
-            union
-            {
-                UCHAR Inserted;
-                BOOLEAN DebugActive;
-            };
-        };
-        volatile LONG Lock;
-    };
-    LONG SignalState;
-    LIST_ENTRY WaitListHead;
-} DISPATCHER_HEADER, *PDISPATCHER_HEADER;
-
-typedef struct _KEVENT {
-  DISPATCHER_HEADER  Header;
-} KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
-
-typedef struct _KSEMAPHORE {
-    DISPATCHER_HEADER Header;
-    LONG Limit;
-} KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
-
-typedef struct _FAST_MUTEX
-{
-    LONG Count;
-    PKTHREAD Owner;
-    ULONG Contention;
-    KEVENT Gate;
-    ULONG OldIrql;
-} FAST_MUTEX, *PFAST_MUTEX;
-
-typedef struct _EX_RUNDOWN_REF
-{
-    union
-    {
-        volatile ULONG_PTR Count;
-        volatile PVOID Ptr;
-    };
-} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
-
 #define ASSERT_GATE(object) \
     ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
           (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
@@ -1715,27 +1606,6 @@ typedef struct _CM_FLOPPY_DEVICE_DATA {
   UCHAR  DataTransferRate;
 } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
 
-typedef enum _INTERFACE_TYPE {
-  InterfaceTypeUndefined = -1,
-  Internal,
-  Isa,
-  Eisa,
-  MicroChannel,
-  TurboChannel,
-  PCIBus,
-  VMEBus,
-  NuBus,
-  PCMCIABus,
-  CBus,
-  MPIBus,
-  MPSABus,
-  ProcessorInternal,
-  InternalPowerBus,
-  PNPISABus,
-  PNPBus,
-  MaximumInterfaceType
-} INTERFACE_TYPE, *PINTERFACE_TYPE;
-
 typedef struct _PNP_BUS_INFORMATION {
   GUID  BusTypeGuid;
   INTERFACE_TYPE  LegacyBusType;
@@ -1743,80 +1613,6 @@ typedef struct _PNP_BUS_INFORMATION {
 } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
 
 #include <pshpack1.h>
-typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
-  UCHAR Type;
-  UCHAR ShareDisposition;
-  USHORT Flags;
-  union {
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length;
-    } Generic;
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length;
-    } Port;
-    struct {
-      ULONG Level;
-      ULONG Vector;
-      KAFFINITY Affinity;
-    } Interrupt;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
-    struct {
-      union {
-        struct {
-          USHORT Reserved;
-          USHORT MessageCount;
-          ULONG Vector;
-          KAFFINITY Affinity;
-        } Raw;
-        struct {
-          ULONG Level;
-          ULONG Vector;
-          KAFFINITY Affinity;
-        } Translated;
-      };
-    } MessageInterrupt;
-#endif
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length;
-    } Memory;
-    struct {
-      ULONG Channel;
-      ULONG Port;
-      ULONG Reserved1;
-    } Dma;
-    struct {
-      ULONG Data[3];
-    } DevicePrivate;
-    struct {
-      ULONG Start;
-      ULONG Length;
-      ULONG Reserved;
-    } BusNumber;
-    struct {
-      ULONG DataSize;
-      ULONG Reserved1;
-      ULONG Reserved2;
-    } DeviceSpecificData;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length40;
-    } Memory40;
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length48;
-    } Memory48;
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length64;
-    } Memory64;
-#endif
-  } u;
-} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
-
 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
 
 #define CmResourceTypeNull                0
@@ -1933,6 +1729,7 @@ typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
 
 #include <poppack.h>
 
+
 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
 {
     ULONG BytesPerSector;
@@ -1998,6 +1795,15 @@ typedef struct _CM_SERIAL_DEVICE_DATA {
   ULONG  BaudClock;
 } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
 
+typedef struct _IO_COUNTERS {
+    ULONGLONG  ReadOperationCount;
+    ULONGLONG  WriteOperationCount;
+    ULONGLONG  OtherOperationCount;
+    ULONGLONG ReadTransferCount;
+    ULONGLONG WriteTransferCount;
+    ULONGLONG OtherTransferCount;
+} IO_COUNTERS, *PIO_COUNTERS;
+
 typedef struct _VM_COUNTERS
 {
     SIZE_T PeakVirtualSize;
@@ -2049,80 +1855,6 @@ typedef enum _KINTERRUPT_POLARITY
     InterruptActiveLow
 } KINTERRUPT_POLARITY, *PKINTERRUPT_POLARITY;
 
-/* IO_RESOURCE_DESCRIPTOR.Option */
-
-#define IO_RESOURCE_PREFERRED             0x01
-#define IO_RESOURCE_DEFAULT               0x02
-#define IO_RESOURCE_ALTERNATIVE           0x08
-
-typedef struct _IO_RESOURCE_DESCRIPTOR {
-  UCHAR  Option;
-  UCHAR  Type;
-  UCHAR  ShareDisposition;
-  UCHAR  Spare1;
-  USHORT  Flags;
-  USHORT  Spare2;
-  union {
-    struct {
-      ULONG  Length;
-      ULONG  Alignment;
-      PHYSICAL_ADDRESS  MinimumAddress;
-      PHYSICAL_ADDRESS  MaximumAddress;
-    } Port;
-    struct {
-      ULONG  Length;
-      ULONG  Alignment;
-      PHYSICAL_ADDRESS  MinimumAddress;
-      PHYSICAL_ADDRESS  MaximumAddress;
-    } Memory;
-    struct {
-      ULONG  MinimumVector;
-      ULONG  MaximumVector;
-    } Interrupt;
-    struct {
-      ULONG  MinimumChannel;
-      ULONG  MaximumChannel;
-    } Dma;
-    struct {
-      ULONG  Length;
-      ULONG  Alignment;
-      PHYSICAL_ADDRESS  MinimumAddress;
-      PHYSICAL_ADDRESS  MaximumAddress;
-    } Generic;
-    struct {
-      ULONG  Data[3];
-    } DevicePrivate;
-    struct {
-      ULONG  Length;
-      ULONG  MinBusNumber;
-      ULONG  MaxBusNumber;
-      ULONG  Reserved;
-    } BusNumber;
-    struct {
-      ULONG  Priority;
-      ULONG  Reserved1;
-      ULONG  Reserved2;
-    } ConfigData;
-  } u;
-} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
-
-typedef struct _IO_RESOURCE_LIST {
-  USHORT  Version;
-  USHORT  Revision;
-  ULONG  Count;
-  IO_RESOURCE_DESCRIPTOR  Descriptors[1];
-} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
-
-typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
-  ULONG  ListSize;
-  INTERFACE_TYPE  InterfaceType;
-  ULONG  BusNumber;
-  ULONG  SlotNumber;
-  ULONG  Reserved[3];
-  ULONG  AlternativeLists;
-  IO_RESOURCE_LIST  List[1];
-} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
-
 typedef struct _IO_ERROR_LOG_PACKET {
   UCHAR  MajorFunctionCode;
   UCHAR  RetryCount;
@@ -2393,20 +2125,9 @@ typedef struct _SCATTER_GATHER_ELEMENT {
 typedef struct _SCATTER_GATHER_LIST {
   ULONG  NumberOfElements;
   ULONG_PTR  Reserved;
-  SCATTER_GATHER_ELEMENT  Elements[0];
+  SCATTER_GATHER_ELEMENT  Elements[1];
 } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
 
-typedef struct _MDL {
-  struct _MDL  *Next;
-  CSHORT  Size;
-  CSHORT  MdlFlags;
-  struct _EPROCESS  *Process;
-  PVOID  MappedSystemVa;
-  PVOID  StartVa;
-  ULONG  ByteCount;
-  ULONG  ByteOffset;
-} MDL, *PMDL;
-
 #define MDL_MAPPED_TO_SYSTEM_VA     0x0001
 #define MDL_PAGES_LOCKED            0x0002
 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
@@ -2468,6 +2189,12 @@ typedef struct _DRIVER_OBJECT {
 } DRIVER_OBJECT;
 typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
 
+typedef struct _DMA_ADAPTER {
+  USHORT  Version;
+  USHORT  Size;
+  struct _DMA_OPERATIONS*  DmaOperations;
+} DMA_ADAPTER, *PDMA_ADAPTER;
+
 typedef VOID
 (DDKAPI *PPUT_DMA_ADAPTER)(
   IN PDMA_ADAPTER  DmaAdapter);
@@ -2596,13 +2323,6 @@ typedef struct _DMA_OPERATIONS {
   PBUILD_MDL_FROM_SCATTER_GATHER_LIST  BuildMdlFromScatterGatherList;
 } DMA_OPERATIONS, *PDMA_OPERATIONS;
 
-typedef struct _DMA_ADAPTER {
-  USHORT  Version;
-  USHORT  Size;
-  PDMA_OPERATIONS  DmaOperations;
-} DMA_ADAPTER;
-
-
 typedef enum _ARBITER_REQUEST_SOURCE {
   ArbiterRequestUndefined = -1,
   ArbiterRequestLegacyReported,
@@ -2713,6 +2433,34 @@ typedef struct _ARBITER_INTERFACE {
   ULONG  Flags;
 } ARBITER_INTERFACE, *PARBITER_INTERFACE;
 
+typedef enum _KPROFILE_SOURCE {
+  ProfileTime,
+  ProfileAlignmentFixup,
+  ProfileTotalIssues,
+  ProfilePipelineDry,
+  ProfileLoadInstructions,
+  ProfilePipelineFrozen,
+  ProfileBranchInstructions,
+  ProfileTotalNonissues,
+  ProfileDcacheMisses,
+  ProfileIcacheMisses,
+  ProfileCacheMisses,
+  ProfileBranchMispredictions,
+  ProfileStoreInstructions,
+  ProfileFpInstructions,
+  ProfileIntegerInstructions,
+  Profile2Issue,
+  Profile3Issue,
+  Profile4Issue,
+  ProfileSpecialInstructions,
+  ProfileTotalCycles,
+  ProfileIcacheIssues,
+  ProfileDcacheAccesses,
+  ProfileMemoryBarrierCycles,
+  ProfileLoadLinkedIssues,
+  ProfileMaximum
+} KPROFILE_SOURCE;
+
 typedef enum _HAL_QUERY_INFORMATION_CLASS {
   HalInstalledBusInformation,
   HalProfileSourceInformation,
@@ -2750,6 +2498,19 @@ typedef enum _HAL_SET_INFORMATION_CLASS {
   HalGenerateCmcInterrupt
 } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
 
+typedef struct _HAL_PROFILE_SOURCE_INTERVAL
+{
+    KPROFILE_SOURCE Source;
+    ULONG_PTR Interval;
+} HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
+
+typedef struct _HAL_PROFILE_SOURCE_INFORMATION
+{
+    KPROFILE_SOURCE Source;
+    BOOLEAN Supported;
+    ULONG Interval;
+} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
+
 typedef struct _MAP_REGISTER_ENTRY
 {
     PVOID MapRegister;
@@ -2794,6 +2555,7 @@ typedef enum _KD_OPTION {
 } KD_OPTION;
 
 /* Function Type Defintions for Dispatch Functions */
+struct _DEVICE_CONTROL_CONTEXT;
 
 typedef VOID
 (DDKAPI *PDEVICE_CONTROL_COMPLETION)(
@@ -3131,10 +2893,10 @@ typedef struct {
 } HAL_DISPATCH, *PHAL_DISPATCH;
 
 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
-extern DECL_IMPORT PHAL_DISPATCH HalDispatchTable;
+extern NTSYSAPI PHAL_DISPATCH HalDispatchTable;
 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
 #else
-extern DECL_EXPORT HAL_DISPATCH HalDispatchTable;
+extern __declspec(dllexport) HAL_DISPATCH HalDispatchTable;
 #define HALDISPATCH (&HalDispatchTable)
 #endif
 
@@ -3156,14 +2918,6 @@ extern DECL_EXPORT HAL_DISPATCH HalDispatchTable;
 #define HalEndOfBoot                    HALDISPATCH->HalEndOfBoot
 #define HalMirrorVerify                 HALDISPATCH->HalMirrorVerify
 
-#ifndef _NTOSKRNL_
-#define HalDeviceControl                HALDISPATCH->HalDeviceControl
-#define HalIoAssignDriveLetters         HALDISPATCH->HalIoAssignDriveLetters
-#define HalIoReadPartitionTable         HALDISPATCH->HalIoReadPartitionTable
-#define HalIoSetPartitionInformation    HALDISPATCH->HalIoSetPartitionInformation
-#define HalIoWritePartitionTable        HALDISPATCH->HalIoWritePartitionTable
-#endif
-
 typedef enum _FILE_INFORMATION_CLASS {
   FileDirectoryInformation = 1,
   FileFullDirectoryInformation,
@@ -3266,6 +3020,11 @@ typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
   LARGE_INTEGER  ValidDataLength;
 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
 
+typedef union _FILE_SEGMENT_ELEMENT {
+    PVOID64 Buffer;
+    ULONGLONG Alignment;
+}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
+
 typedef enum _FSINFOCLASS {
   FileFsVolumeInformation = 1,
   FileFsLabelInformation,
@@ -3292,17 +3051,6 @@ typedef struct _FILE_FULL_EA_INFORMATION {
   CHAR  EaName[1];
 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
 
-typedef ULONG_PTR ERESOURCE_THREAD;
-typedef ERESOURCE_THREAD *PERESOURCE_THREAD;
-
-typedef struct _OWNER_ENTRY {
-  ERESOURCE_THREAD  OwnerThread;
-  _ANONYMOUS_UNION union {
-      LONG  OwnerCount;
-      ULONG  TableSize;
-  } DUMMYUNIONNAME;
-} OWNER_ENTRY, *POWNER_ENTRY;
-
 /* ERESOURCE.Flag */
 
 #define ResourceNeverExclusive            0x0010
@@ -3311,27 +3059,6 @@ typedef struct _OWNER_ENTRY {
 
 #define RESOURCE_HASH_TABLE_SIZE          64
 
-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;
-    union
-    {
-        PVOID Address;
-        ULONG_PTR CreatorBackTraceIndex;
-    };
-    KSPIN_LOCK SpinLock;
-} ERESOURCE, *PERESOURCE;
-
 typedef struct _DEVOBJ_EXTENSION
 {
     CSHORT Type;
@@ -4117,10 +3844,6 @@ typedef enum _KEY_SET_INFORMATION_CLASS {
   MaxKeySetInfoClass
 } KEY_SET_INFORMATION_CLASS;
 
-#define REG_CREATED_NEW_KEY         0x00000001L
-#define REG_OPENED_EXISTING_KEY     0x00000002L
-
-
 /* KEY_VALUE_Xxx.Type */
 
 #define REG_NONE                           0
@@ -4362,67 +4085,75 @@ typedef struct _PCI_SLOT_NUMBER {
   } u;
 } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
 
-typedef enum _POOL_TYPE {
-  NonPagedPool,
-  PagedPool,
-  NonPagedPoolMustSucceed,
-  DontUseThisType,
-  NonPagedPoolCacheAligned,
-  PagedPoolCacheAligned,
-  NonPagedPoolCacheAlignedMustS,
-  MaxPoolType,
-  NonPagedPoolSession = 32,
-  PagedPoolSession,
-  NonPagedPoolMustSucceedSession,
-  DontUseThisTypeSession,
-  NonPagedPoolCacheAlignedSession,
-  PagedPoolCacheAlignedSession,
-  NonPagedPoolCacheAlignedMustSSession
-} POOL_TYPE;
-
 #define POOL_COLD_ALLOCATION                256
 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE    8
 #define POOL_RAISE_IF_ALLOCATION_FAILURE    16
 
-
-typedef enum _EX_POOL_PRIORITY {
-  LowPoolPriority,
-  LowPoolPrioritySpecialPoolOverrun = 8,
-  LowPoolPrioritySpecialPoolUnderrun = 9,
-  NormalPoolPriority = 16,
-  NormalPoolPrioritySpecialPoolOverrun = 24,
-  NormalPoolPrioritySpecialPoolUnderrun = 25,
-  HighPoolPriority = 32,
-  HighPoolPrioritySpecialPoolOverrun = 40,
-  HighPoolPrioritySpecialPoolUnderrun = 41
-} EX_POOL_PRIORITY;
-
-/* PRIVILEGE_SET.Control */
-
-#define PRIVILEGE_SET_ALL_NECESSARY       1
-
-typedef struct _RTL_OSVERSIONINFOW {
-  ULONG  dwOSVersionInfoSize;
-  ULONG  dwMajorVersion;
-  ULONG  dwMinorVersion;
-  ULONG  dwBuildNumber;
-  ULONG  dwPlatformId;
-  WCHAR  szCSDVersion[128];
-} RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
-
-typedef struct _RTL_OSVERSIONINFOEXW {
-  ULONG  dwOSVersionInfoSize;
-  ULONG  dwMajorVersion;
-  ULONG  dwMinorVersion;
-  ULONG  dwBuildNumber;
-  ULONG  dwPlatformId;
-  WCHAR  szCSDVersion[128];
-  USHORT  wServicePackMajor;
-  USHORT  wServicePackMinor;
-  USHORT  wSuiteMask;
-  UCHAR  wProductType;
-  UCHAR  wReserved;
-} RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
+typedef struct _OSVERSIONINFOA {
+    ULONG dwOSVersionInfoSize;
+    ULONG dwMajorVersion;
+    ULONG dwMinorVersion;
+    ULONG dwBuildNumber;
+    ULONG dwPlatformId;
+    CHAR   szCSDVersion[128];
+} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
+
+typedef struct _OSVERSIONINFOW {
+    ULONG dwOSVersionInfoSize;
+    ULONG dwMajorVersion;
+    ULONG dwMinorVersion;
+    ULONG dwBuildNumber;
+    ULONG dwPlatformId;
+    WCHAR  szCSDVersion[128];
+} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
+
+#ifdef UNICODE
+typedef OSVERSIONINFOW OSVERSIONINFO;
+typedef POSVERSIONINFOW POSVERSIONINFO;
+typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
+#else
+typedef OSVERSIONINFOA OSVERSIONINFO;
+typedef POSVERSIONINFOA POSVERSIONINFO;
+typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
+#endif // UNICODE
+
+typedef struct _OSVERSIONINFOEXA {
+    ULONG dwOSVersionInfoSize;
+    ULONG dwMajorVersion;
+    ULONG dwMinorVersion;
+    ULONG dwBuildNumber;
+    ULONG dwPlatformId;
+    CHAR   szCSDVersion[128];
+    USHORT wServicePackMajor;
+    USHORT wServicePackMinor;
+    USHORT wSuiteMask;
+    UCHAR wProductType;
+    UCHAR wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+
+typedef struct _OSVERSIONINFOEXW {
+    ULONG dwOSVersionInfoSize;
+    ULONG dwMajorVersion;
+    ULONG dwMinorVersion;
+    ULONG dwBuildNumber;
+    ULONG dwPlatformId;
+    WCHAR  szCSDVersion[128];
+    USHORT wServicePackMajor;
+    USHORT wServicePackMinor;
+    USHORT wSuiteMask;
+    UCHAR wProductType;
+    UCHAR wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
+
+#ifdef UNICODE
+typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
+typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
+typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
+#else
+typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
+typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
+typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
+#endif // UNICODE
 
 NTSYSAPI
 ULONGLONG
@@ -4460,17 +4191,7 @@ VerSetConditionMask(
 #define VER_CONDITION_MASK              7
 #define VER_NUM_BITS_PER_CONDITION_MASK 3
 
-typedef struct _RTL_BITMAP {
-  ULONG  SizeOfBitMap;
-  PULONG  Buffer;
-} RTL_BITMAP, *PRTL_BITMAP;
-
-#define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP) / 32]) >> ((BP) % 32)) & 0x1)
-
-typedef struct _RTL_BITMAP_RUN {
-    ULONG  StartingIndex;
-    ULONG  NumberOfBits;
-} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
+struct _RTL_RANGE;
 
 typedef BOOLEAN
 (NTAPI *PRTL_CONFLICT_RANGE_CALLBACK) (
@@ -4478,110 +4199,6 @@ typedef BOOLEAN
     struct _RTL_RANGE *Range
 );
 
-typedef NTSTATUS
-(DDKAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
-  IN PWSTR  ValueName,
-  IN ULONG  ValueType,
-  IN PVOID  ValueData,
-  IN ULONG  ValueLength,
-  IN PVOID  Context,
-  IN PVOID  EntryContext);
-
-#define RTL_REGISTRY_ABSOLUTE             0
-#define RTL_REGISTRY_SERVICES             1
-#define RTL_REGISTRY_CONTROL              2
-#define RTL_REGISTRY_WINDOWS_NT           3
-#define RTL_REGISTRY_DEVICEMAP            4
-#define RTL_REGISTRY_USER                 5
-#define RTL_REGISTRY_HANDLE               0x40000000
-#define RTL_REGISTRY_OPTIONAL             0x80000000
-
-/* RTL_QUERY_REGISTRY_TABLE.Flags */
-#define RTL_QUERY_REGISTRY_SUBKEY         0x00000001
-#define RTL_QUERY_REGISTRY_TOPKEY         0x00000002
-#define RTL_QUERY_REGISTRY_REQUIRED       0x00000004
-#define RTL_QUERY_REGISTRY_NOVALUE        0x00000008
-#define RTL_QUERY_REGISTRY_NOEXPAND       0x00000010
-#define RTL_QUERY_REGISTRY_DIRECT         0x00000020
-#define RTL_QUERY_REGISTRY_DELETE         0x00000040
-
-typedef struct _RTL_QUERY_REGISTRY_TABLE {
-  PRTL_QUERY_REGISTRY_ROUTINE  QueryRoutine;
-  ULONG  Flags;
-  PWSTR  Name;
-  PVOID  EntryContext;
-  ULONG  DefaultType;
-  PVOID  DefaultData;
-  ULONG  DefaultLength;
-} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
-
-typedef struct _TIME_FIELDS {
-  CSHORT  Year;
-  CSHORT  Month;
-  CSHORT  Day;
-  CSHORT  Hour;
-  CSHORT  Minute;
-  CSHORT  Second;
-  CSHORT  Milliseconds;
-  CSHORT  Weekday;
-} TIME_FIELDS, *PTIME_FIELDS;
-
-typedef PVOID
-(DDKAPI *PALLOCATE_FUNCTION)(
-  IN POOL_TYPE  PoolType,
-  IN SIZE_T  NumberOfBytes,
-  IN ULONG  Tag);
-
-typedef VOID
-(DDKAPI *PFREE_FUNCTION)(
-  IN PVOID  Buffer);
-
-typedef struct _GENERAL_LOOKASIDE {
-  SLIST_HEADER  ListHead;
-  USHORT  Depth;
-  USHORT  MaximumDepth;
-  ULONG  TotalAllocates;
-  union {
-    ULONG  AllocateMisses;
-    ULONG  AllocateHits;
-  };
-  ULONG  TotalFrees;
-  union {
-    ULONG  FreeMisses;
-    ULONG  FreeHits;
-  };
-  POOL_TYPE  Type;
-  ULONG  Tag;
-  ULONG  Size;
-  PALLOCATE_FUNCTION  Allocate;
-  PFREE_FUNCTION  Free;
-  LIST_ENTRY  ListEntry;
-  ULONG  LastTotalAllocates;
-  union {
-    ULONG  LastAllocateMisses;
-    ULONG  LastAllocateHits;
-  };
-  ULONG Future[2];
-} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
-
-typedef struct _NPAGED_LOOKASIDE_LIST {
-  GENERAL_LOOKASIDE  L;
-  KSPIN_LOCK  Obsoleted;
-} NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
-
-typedef struct _PAGED_LOOKASIDE_LIST {
-  GENERAL_LOOKASIDE  L;
-  FAST_MUTEX  Obsoleted;
-} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
-
-typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
-
-typedef VOID
-(DDKAPI *PCALLBACK_FUNCTION)(
-  IN PVOID  CallbackContext,
-  IN PVOID  Argument1,
-  IN PVOID  Argument2);
-
 typedef enum _EVENT_TYPE {
   NotificationEvent,
   SynchronizationEvent
@@ -4659,7 +4276,7 @@ typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
 
 typedef struct _IO_REMOVE_LOCK {
   IO_REMOVE_LOCK_COMMON_BLOCK  Common;
-#ifdef DBG
+#if DBG
   IO_REMOVE_LOCK_DBG_BLOCK  Dbg;
 #endif
 } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
@@ -4693,34 +4310,6 @@ typedef VOID
 (DDKAPI *PKINTERRUPT_ROUTINE)(
   VOID);
 
-typedef enum _KPROFILE_SOURCE {
-  ProfileTime,
-  ProfileAlignmentFixup,
-  ProfileTotalIssues,
-  ProfilePipelineDry,
-  ProfileLoadInstructions,
-  ProfilePipelineFrozen,
-  ProfileBranchInstructions,
-  ProfileTotalNonissues,
-  ProfileDcacheMisses,
-  ProfileIcacheMisses,
-  ProfileCacheMisses,
-  ProfileBranchMispredictions,
-  ProfileStoreInstructions,
-  ProfileFpInstructions,
-  ProfileIntegerInstructions,
-  Profile2Issue,
-  Profile3Issue,
-  Profile4Issue,
-  ProfileSpecialInstructions,
-  ProfileTotalCycles,
-  ProfileIcacheIssues,
-  ProfileDcacheAccesses,
-  ProfileMemoryBarrierCycles,
-  ProfileLoadLinkedIssues,
-  ProfileMaximum
-} KPROFILE_SOURCE;
-
 typedef enum _CREATE_FILE_TYPE {
   CreateFileTypeNone,
   CreateFileTypeNamedPipe,
@@ -4813,23 +4402,6 @@ typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
   IoQueryDeviceMaxData
 } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
 
-typedef enum _WORK_QUEUE_TYPE {
-  CriticalWorkQueue,
-  DelayedWorkQueue,
-  HyperCriticalWorkQueue,
-  MaximumWorkQueue
-} WORK_QUEUE_TYPE;
-
-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;
-
 typedef enum _KBUGCHECK_CALLBACK_REASON {
   KbCallbackInvalid,
   KbCallbackReserved1,
@@ -4837,6 +4409,8 @@ typedef enum _KBUGCHECK_CALLBACK_REASON {
   KbCallbackDumpIo,
 } KBUGCHECK_CALLBACK_REASON;
 
+struct _KBUGCHECK_REASON_CALLBACK_RECORD;
+
 typedef VOID
 (DDKAPI *PKBUGCHECK_REASON_CALLBACK_ROUTINE)(
   IN KBUGCHECK_CALLBACK_REASON  Reason,
@@ -4921,11 +4495,6 @@ typedef enum _LOCK_OPERATION {
   IoModifyAccess
 } LOCK_OPERATION;
 
-typedef ULONG PFN_COUNT;
-
-typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
-typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
-
 #define FLUSH_MULTIPLE_MAXIMUM 32
 
 typedef enum _MM_SYSTEM_SIZE {
@@ -4984,6 +4553,38 @@ typedef VOID
   IN HANDLE  ProcessId,
   IN PIMAGE_INFO  ImageInfo);
 
+#pragma pack(push,4)
+typedef enum _BUS_DATA_TYPE {
+    ConfigurationSpaceUndefined = -1,
+    Cmos,
+    EisaConfiguration,
+    Pos,
+    CbusConfiguration,
+    PCIConfiguration,
+    VMEConfiguration,
+    NuBusConfiguration,
+    PCMCIAConfiguration,
+    MPIConfiguration,
+    MPSAConfiguration,
+    PNPISAConfiguration,
+    SgiInternalConfiguration,
+    MaximumBusDataType
+} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
+#pragma pack(pop)
+
+typedef struct _NT_TIB {
+    struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+    PVOID StackBase;
+    PVOID StackLimit;
+    PVOID SubSystemTib;
+       _ANONYMOUS_UNION union {
+               PVOID FiberData;
+               ULONG Version;
+       } DUMMYUNIONNAME;
+    PVOID ArbitraryUserPointer;
+    struct _NT_TIB *Self;
+} NT_TIB, *PNT_TIB;
+
 typedef enum _PROCESSINFOCLASS {
   ProcessBasicInformation,
   ProcessQuotaLimits,
@@ -5062,7 +4663,7 @@ typedef enum _THREADINFOCLASS {
 typedef struct _PROCESS_BASIC_INFORMATION
 {
     NTSTATUS ExitStatus;
-    PPEB PebBaseAddress;
+    struct _PEB *PebBaseAddress;
     ULONG_PTR AffinityMask;
     KPRIORITY BasePriority;
     ULONG_PTR UniqueProcessId;
@@ -5110,13 +4711,6 @@ typedef struct _PROCESS_SESSION_INFORMATION
     ULONG SessionId;
 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
 
-#define ES_SYSTEM_REQUIRED                0x00000001
-#define ES_DISPLAY_REQUIRED               0x00000002
-#define ES_USER_PRESENT                   0x00000004
-#define ES_CONTINUOUS                     0x80000000
-
-typedef ULONG EXECUTION_STATE;
-
 typedef VOID
 (DDKAPI *PREQUEST_POWER_COMPLETE)(
   IN PDEVICE_OBJECT  DeviceObject,
@@ -5359,7 +4953,7 @@ typedef struct _PHYSICAL_MEMORY_RANGE {
 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
 
 typedef ULONG_PTR
-(*PDRIVER_VERIFIER_THUNK_ROUTINE)(
+(NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
   IN PVOID  Context);
 
 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
@@ -5377,21 +4971,6 @@ typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
 #define HASH_STRING_ALGORITHM_X65599      1
 #define HASH_STRING_ALGORITHM_INVALID     0xffffffff
 
-typedef enum _SUITE_TYPE {
-  SmallBusiness,
-  Enterprise,
-  BackOffice,
-  CommunicationServer,
-  TerminalServer,
-  SmallBusinessRestricted,
-  EmbeddedNT,
-  DataCenter,
-  SingleUserTS,
-  Personal,
-  Blade,
-  MaxSuiteType
-} SUITE_TYPE;
-
 typedef VOID
 (DDKAPI *PTIMER_APC_ROUTINE)(
   IN PVOID  TimerContext,
@@ -5418,7 +4997,64 @@ typedef VOID
 
 #ifdef _X86_
 
+#define SIZE_OF_80387_REGISTERS        80
+#define CONTEXT_i386   0x10000
+#define CONTEXT_i486   0x10000
+#define CONTEXT_CONTROL        (CONTEXT_i386|0x00000001L)
+#define CONTEXT_INTEGER        (CONTEXT_i386|0x00000002L)
+#define CONTEXT_SEGMENTS       (CONTEXT_i386|0x00000004L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
+#define CONTEXT_DEBUG_REGISTERS        (CONTEXT_i386|0x00000010L)
+#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
+#define CONTEXT_FULL   (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
+#define MAXIMUM_SUPPORTED_EXTENSION  512
+
+typedef struct _FLOATING_SAVE_AREA {
+    ULONG ControlWord;
+    ULONG StatusWord;
+    ULONG TagWord;
+    ULONG ErrorOffset;
+    ULONG ErrorSelector;
+    ULONG DataOffset;
+    ULONG DataSelector;
+    UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
+    ULONG Cr0NpxState;
+} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
+
+typedef struct _CONTEXT {
+    ULONG ContextFlags;
+    ULONG Dr0;
+    ULONG Dr1;
+    ULONG Dr2;
+    ULONG Dr3;
+    ULONG Dr6;
+    ULONG Dr7;
+    FLOATING_SAVE_AREA FloatSave;
+    ULONG SegGs;
+    ULONG SegFs;
+    ULONG SegEs;
+    ULONG SegDs;
+    ULONG Edi;
+    ULONG Esi;
+    ULONG Ebx;
+    ULONG Edx;
+    ULONG Ecx;
+    ULONG Eax;
+    ULONG Ebp;
+    ULONG Eip;
+    ULONG SegCs;
+    ULONG EFlags;
+    ULONG Esp;
+    ULONG SegSs;
+    UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
+} CONTEXT;
+
+//
+// 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 LOW_LEVEL                          0
@@ -5438,7 +5074,7 @@ typedef struct _KPCR_TIB {
   PVOID  SubSystemTib;          /* 0C */
   _ANONYMOUS_UNION union {
     PVOID  FiberData;           /* 10 */
-    DWORD  Version;             /* 10 */
+    ULONG  Version;             /* 10 */
   } DUMMYUNIONNAME;
   PVOID  ArbitraryUserPointer;  /* 14 */
   struct _KPCR_TIB *Self;       /* 18 */
@@ -5483,9 +5119,8 @@ typedef struct _KFLOATING_SAVE {
   ULONG  Spare1;
 } KFLOATING_SAVE, *PKFLOATING_SAVE;
 
-static __inline
+FORCEINLINE
 ULONG
-DDKAPI
 KeGetCurrentProcessorNumber(VOID)
 {
 #if defined(__GNUC__)
@@ -5500,7 +5135,7 @@ KeGetCurrentProcessorNumber(VOID)
 #if _MSC_FULL_VER >= 13012035
   return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number));
 #else
-  __asm { movzx eax, _PCR KPCR.Number }
+  __asm { movzx eax, fs:[0] KPCR.Number }
 #endif
 #else
 #error Unknown compiler
@@ -5521,11 +5156,164 @@ KeGetCurrentThread(
 
 #define KI_USER_SHARED_DATA               0xffdf0000
 
-#elif defined(__x86_64__)
+#define PAGE_SIZE                         0x1000
+#define PAGE_SHIFT                        12L
 
-#define PASSIVE_LEVEL                      0
-#define LOW_LEVEL                          0
-#define APC_LEVEL                          1
+#define SharedUserData                    ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
+
+extern NTKERNELAPI PVOID MmHighestUserAddress;
+extern NTKERNELAPI PVOID MmSystemRangeStart;
+extern NTKERNELAPI ULONG_PTR MmUserProbeAddress;
+
+#define MM_HIGHEST_USER_ADDRESS           MmHighestUserAddress
+#define MM_SYSTEM_RANGE_START             MmSystemRangeStart
+#define MM_USER_PROBE_ADDRESS             MmUserProbeAddress
+#define MM_LOWEST_USER_ADDRESS            (PVOID)0x10000
+#define MM_LOWEST_SYSTEM_ADDRESS          (PVOID)0xC0C00000
+
+#define MM_KSEG0_BASE       MM_SYSTEM_RANGE_START
+#define MM_SYSTEM_SPACE_END 0xFFFFFFFF
+    
+#elif defined(__x86_64__)
+
+#define CONTEXT_AMD64 0x100000
+#if !defined(RC_INVOKED)
+#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
+#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
+#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
+
+#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
+#define CONTEXT_SERVICE_ACTIVE 0x10000000
+#define CONTEXT_EXCEPTION_REQUEST 0x40000000
+#define CONTEXT_EXCEPTION_REPORTING 0x80000000
+#endif
+
+typedef struct DECLSPEC_ALIGN(16) _M128A {
+    ULONGLONG Low;
+    LONGLONG High;
+} M128A, *PM128A;
+
+typedef struct _XMM_SAVE_AREA32 {
+    USHORT ControlWord;
+    USHORT StatusWord;
+    UCHAR TagWord;
+    UCHAR Reserved1;
+    USHORT ErrorOpcode;
+    ULONG ErrorOffset;
+    USHORT ErrorSelector;
+    USHORT Reserved2;
+    ULONG DataOffset;
+    USHORT DataSelector;
+    USHORT Reserved3;
+    ULONG MxCsr;
+    ULONG MxCsr_Mask;
+    M128A FloatRegisters[8];
+    M128A XmmRegisters[16];
+    UCHAR Reserved4[96];
+} XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
+
+typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
+    ULONG64 P1Home;
+    ULONG64 P2Home;
+    ULONG64 P3Home;
+    ULONG64 P4Home;
+    ULONG64 P5Home;
+    ULONG64 P6Home;
+
+    /* Control flags */
+    ULONG ContextFlags;
+    ULONG MxCsr;
+
+    /* Segment */
+    USHORT SegCs;
+    USHORT SegDs;
+    USHORT SegEs;
+    USHORT SegFs;
+    USHORT SegGs;
+    USHORT SegSs;
+    ULONG EFlags;
+
+    /* Debug */
+    ULONG64 Dr0;
+    ULONG64 Dr1;
+    ULONG64 Dr2;
+    ULONG64 Dr3;
+    ULONG64 Dr6;
+    ULONG64 Dr7;
+
+    /* Integer */
+    ULONG64 Rax;
+    ULONG64 Rcx;
+    ULONG64 Rdx;
+    ULONG64 Rbx;
+    ULONG64 Rsp;
+    ULONG64 Rbp;
+    ULONG64 Rsi;
+    ULONG64 Rdi;
+    ULONG64 R8;
+    ULONG64 R9;
+    ULONG64 R10;
+    ULONG64 R11;
+    ULONG64 R12;
+    ULONG64 R13;
+    ULONG64 R14;
+    ULONG64 R15;
+
+    /* Counter */
+    ULONG64 Rip;
+
+   /* Floating point */
+   union {
+       XMM_SAVE_AREA32 FltSave;
+       struct {
+           M128A Header[2];
+           M128A Legacy[8];
+           M128A Xmm0;
+           M128A Xmm1;
+           M128A Xmm2;
+           M128A Xmm3;
+           M128A Xmm4;
+           M128A Xmm5;
+           M128A Xmm6;
+           M128A Xmm7;
+           M128A Xmm8;
+           M128A Xmm9;
+           M128A Xmm10;
+           M128A Xmm11;
+           M128A Xmm12;
+           M128A Xmm13;
+           M128A Xmm14;
+           M128A Xmm15;
+      } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+
+     /* Vector */
+    M128A VectorRegister[26];
+    ULONG64 VectorControl;
+
+    /* Debug control */
+    ULONG64 DebugControl;
+    ULONG64 LastBranchToRip;
+    ULONG64 LastBranchFromRip;
+    ULONG64 LastExceptionToRip;
+    ULONG64 LastExceptionFromRip;
+} CONTEXT;
+
+//
+// Used to contain PFNs and PFN counts
+//
+typedef ULONG PFN_COUNT;
+typedef ULONG64 PFN_NUMBER, *PPFN_NUMBER;
+typedef LONG64 SPFN_NUMBER, *PSPFN_NUMBER;
+
+#define PASSIVE_LEVEL                      0
+#define LOW_LEVEL                          0
+#define APC_LEVEL                          1
 #define DISPATCH_LEVEL                     2
 #define CLOCK_LEVEL                       13
 #define IPI_LEVEL                         14
@@ -5558,6 +5346,13 @@ KeGetCurrentThread(
 #define PDE_TOP     0xFFFFF6FB7FFFFFFFULL
 #define PTE_TOP     0xFFFFF6FFFFFFFFFFULL
 
+extern NTKERNELAPI PVOID MmHighestUserAddress;
+extern NTKERNELAPI PVOID MmSystemRangeStart;
+extern NTKERNELAPI ULONG_PTR MmUserProbeAddress;
+
+#define MM_HIGHEST_USER_ADDRESS           MmHighestUserAddress
+#define MM_SYSTEM_RANGE_START             MmSystemRangeStart
+#define MM_USER_PROBE_ADDRESS             MmUserProbeAddress
 #define MM_LOWEST_USER_ADDRESS   (PVOID)0x10000
 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
 #define KI_USER_SHARED_DATA       0xFFFFF78000000000ULL
@@ -5636,7 +5431,12 @@ KeGetCurrentProcessorNumber(VOID)
 
 #elif defined(__PowerPC__)
 
+//
+// 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 LOW_LEVEL                          0
@@ -5660,7 +5460,7 @@ typedef struct _KPCR_TIB {
   PVOID  SubSystemTib;          /* 0C */
   _ANONYMOUS_UNION union {
     PVOID  FiberData;           /* 10 */
-    DWORD  Version;             /* 10 */
+    ULONG  Version;             /* 10 */
   } DUMMYUNIONNAME;
   PVOID  ArbitraryUserPointer;  /* 14 */
   struct _KPCR_TIB *Self;       /* 18 */
@@ -5709,7 +5509,12 @@ KeGetCurrentProcessorNumber(VOID)
 
 #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
@@ -5749,25 +5554,10 @@ KeGetCurrentProcessorNumber(VOID)
 #error Unknown architecture
 #endif
 
-#define PAGE_SIZE                         0x1000
-#define PAGE_SHIFT                        12L
-
-#define SharedUserData                    ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
-
-extern NTKERNELAPI PVOID MmHighestUserAddress;
-extern NTKERNELAPI PVOID MmSystemRangeStart;
-extern NTKERNELAPI ULONG_PTR MmUserProbeAddress;
-
-#define MM_HIGHEST_USER_ADDRESS           MmHighestUserAddress
-#define MM_SYSTEM_RANGE_START             MmSystemRangeStart
-#define MM_USER_PROBE_ADDRESS             MmUserProbeAddress
-#define MM_LOWEST_USER_ADDRESS            (PVOID)0x10000
-#define MM_LOWEST_SYSTEM_ADDRESS          (PVOID)0xC0C00000
-
-#define MM_KSEG0_BASE       MM_SYSTEM_RANGE_START
-#define MM_SYSTEM_SPACE_END 0xFFFFFFFF
-
+#define MM_DONT_ZERO_ALLOCATION             0x00000001
+#define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY    0x00000002
 
+    
 #define EFLAG_SIGN                        0x8000
 #define EFLAG_ZERO                        0x4000
 #define EFLAG_SELECT                      (EFLAG_SIGN | EFLAG_ZERO)
@@ -5808,7 +5598,7 @@ typedef VOID
     IN ULONG Length
 );
 
-#define PCI_DATA_TAG TAG('P', 'C', 'I', ' ')
+#define PCI_DATA_TAG ' ICP'
 #define PCI_DATA_VERSION 1
 
 typedef struct _PCIBUSDATA
@@ -5824,130 +5614,6 @@ typedef struct _PCIBUSDATA
 } PCIBUSDATA, *PPCIBUSDATA;
 
 
-/** INTERLOCKED FUNCTIONS *****************************************************/
-
-#if !defined(__INTERLOCKED_DECLARED)
-#define __INTERLOCKED_DECLARED
-
-#if defined (_X86_)
-#if defined(NO_INTERLOCKED_INTRINSICS)
-NTKERNELAPI
-LONG
-FASTCALL
-InterlockedIncrement(
-  IN OUT LONG volatile *Addend);
-
-NTKERNELAPI
-LONG
-FASTCALL
-InterlockedDecrement(
-  IN OUT LONG volatile *Addend);
-
-NTKERNELAPI
-LONG
-FASTCALL
-InterlockedCompareExchange(
-  IN OUT LONG volatile *Destination,
-  IN LONG  Exchange,
-  IN LONG  Comparand);
-
-NTKERNELAPI
-LONG
-FASTCALL
-InterlockedExchange(
-  IN OUT LONG volatile *Destination,
-  IN LONG Value);
-
-NTKERNELAPI
-LONG
-FASTCALL
-InterlockedExchangeAdd(
-  IN OUT LONG volatile *Addend,
-  IN LONG  Value);
-
-#else // !defined(NO_INTERLOCKED_INTRINSICS)
-
-#define InterlockedExchange _InterlockedExchange
-#define InterlockedIncrement _InterlockedIncrement
-#define InterlockedDecrement _InterlockedDecrement
-#define InterlockedExchangeAdd _InterlockedExchangeAdd
-#define InterlockedCompareExchange _InterlockedCompareExchange
-#define InterlockedOr _InterlockedOr
-#define InterlockedAnd _InterlockedAnd
-#define InterlockedXor _InterlockedXor
-
-#endif // !defined(NO_INTERLOCKED_INTRINSICS)
-
-#endif // defined (_X86_)
-
-#if !defined (_WIN64)
-/*
- * PVOID
- * InterlockedExchangePointer(
- *   IN OUT PVOID VOLATILE  *Target,
- *   IN PVOID  Value)
- */
-#define InterlockedExchangePointer(Target, Value) \
-  ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
-
-/*
- * PVOID
- * InterlockedCompareExchangePointer(
- *   IN OUT PVOID  *Destination,
- *   IN PVOID  Exchange,
- *   IN PVOID  Comparand)
- */
-#define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
-  ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
-
-#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
-#define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
-#define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
-
-#endif // !defined (_WIN64)
-
-#if defined (_M_AMD64)
-
-#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b)
-#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
-#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
-#define InterlockedAnd _InterlockedAnd
-#define InterlockedOr _InterlockedOr
-#define InterlockedXor _InterlockedXor
-#define InterlockedIncrement _InterlockedIncrement
-#define InterlockedDecrement _InterlockedDecrement
-#define InterlockedAdd _InterlockedAdd
-#define InterlockedExchange _InterlockedExchange
-#define InterlockedExchangeAdd _InterlockedExchangeAdd
-#define InterlockedCompareExchange _InterlockedCompareExchange
-#define InterlockedAnd64 _InterlockedAnd64
-#define InterlockedOr64 _InterlockedOr64
-#define InterlockedXor64 _InterlockedXor64
-#define InterlockedIncrement64 _InterlockedIncrement64
-#define InterlockedDecrement64 _InterlockedDecrement64
-#define InterlockedAdd64 _InterlockedAdd64
-#define InterlockedExchange64 _InterlockedExchange64
-#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
-#define InterlockedCompareExchange64 _InterlockedCompareExchange64
-#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
-#define InterlockedExchangePointer _InterlockedExchangePointer
-
-#define ExInterlockedPopEntrySList(Head, Lock) ExpInterlockedPopEntrySList(Head)
-#define ExInterlockedPushEntrySList(Head, Entry, Lock) ExpInterlockedPushEntrySList(Head, Entry)
-#define ExInterlockedFlushSList(Head) ExpInterlockedFlushSList(Head)
-
-#if !defined(_WINBASE_)
-#define InterlockedPopEntrySList(Head) ExpInterlockedPopEntrySList(Head)
-#define InterlockedPushEntrySList(Head, Entry) ExpInterlockedPushEntrySList(Head, Entry)
-#define InterlockedFlushSList(Head) ExpInterlockedFlushSList(Head)
-#define QueryDepthSList(Head) ExQueryDepthSList(Head)
-#endif // !defined(_WINBASE_)
-
-#endif // _M_AMD64
-
-#endif /* !__INTERLOCKED_DECLARED */
-
-
 /** SPINLOCK FUNCTIONS ********************************************************/
 
 NTKERNELAPI
@@ -5957,13 +5623,35 @@ KeTryToAcquireSpinLockAtDpcLevel(
     IN OUT PKSPIN_LOCK SpinLock
 );
 
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTestSpinLock(
+    IN PKSPIN_LOCK SpinLock
+);
+
 #if defined (_X86_)
 
+#if defined(WIN9X_COMPAT_SPINLOCK)
+
 NTKERNELAPI
 VOID
 NTAPI
 KeInitializeSpinLock(
-  IN PKSPIN_LOCK  SpinLock);
+    IN PKSPIN_LOCK SpinLock
+);
+
+#else
+
+FORCEINLINE
+VOID
+KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock)
+{
+    /* Clear the lock */
+    *SpinLock = 0;
+}
+
+#endif
 
 NTHALAPI
 KIRQL
@@ -5995,8 +5683,58 @@ KefReleaseSpinLockFromDpcLevel(
 #define KeAcquireSpinLock(a,b)  *(b) = KfAcquireSpinLock(a)
 #define KeReleaseSpinLock(a,b)  KfReleaseSpinLock(a,b)
 
-#else // !defined (_X86_)
-
+#define KeGetDcacheFillSize() 1L
+    
+#elif defined(_M_ARM) // !defined (_X86_)
+    
+    FORCEINLINE
+    VOID
+    KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock)
+    {
+        /* Clear the lock */
+        *SpinLock = 0;
+    }
+    
+    NTHALAPI
+    KIRQL
+    FASTCALL
+    KfAcquireSpinLock(
+                      IN PKSPIN_LOCK SpinLock);
+    
+    NTHALAPI
+    VOID
+    FASTCALL
+    KfReleaseSpinLock(
+                      IN PKSPIN_LOCK SpinLock,
+                      IN KIRQL NewIrql);
+    
+    
+    NTKERNELAPI
+    VOID
+    FASTCALL
+    KefAcquireSpinLockAtDpcLevel(
+                                 IN PKSPIN_LOCK  SpinLock);
+    
+    NTKERNELAPI
+    VOID
+    FASTCALL
+    KefReleaseSpinLockFromDpcLevel(
+                                   IN PKSPIN_LOCK  SpinLock);
+    
+    
+#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
+#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
+#define KeAcquireSpinLock(a,b)  *(b) = KfAcquireSpinLock(a)
+#define KeReleaseSpinLock(a,b)  KfReleaseSpinLock(a,b)
+    
+    NTKERNELAPI
+    VOID
+    NTAPI
+    KeInitializeSpinLock(
+                         IN PKSPIN_LOCK  SpinLock);
+    
+#else
+    
 FORCEINLINE
 VOID
 NTAPI
@@ -6029,15 +5767,9 @@ KeAcquireSpinLockRaiseToDpc(
 
 #define KeAcquireSpinLock(SpinLock, OldIrql) \
   *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
-
+    
 #endif // !defined (_X86_)
 
-#define RtlCopyMemoryNonTemporal RtlCopyMemory
-
-#define KeGetDcacheFillSize() 1L
-
-
-
 /*
 ** Utillity functions
 */
@@ -6061,28 +5793,6 @@ KeAcquireSpinLockRaiseToDpc(
 #define BYTES_TO_PAGES(Size) \
   ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
 
-/*
- * PCHAR
- * CONTAINING_RECORD(
- *   IN PCHAR  Address,
- *   IN TYPE  Type,
- *   IN PCHAR  Field);
- */
-#ifndef CONTAINING_RECORD
-#define CONTAINING_RECORD(address, type, field) \
-  ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
-#endif
-
-/* LONG
- * FIELD_OFFSET(
- *   IN TYPE  Type,
- *   IN PCHAR  Field);
- */
-#ifndef FIELD_OFFSET
-#define FIELD_OFFSET(Type, Field) \
-  ((LONG) (&(((Type *) 0)->Field)))
-#endif
-
 /*
  * PVOID
  * PAGE_ALIGN(
@@ -6099,27 +5809,37 @@ KeAcquireSpinLockRaiseToDpc(
 #define ROUND_TO_PAGES(Size) \
   ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
 
-NTSYSAPI
-VOID
-NTAPI
-RtlAssert(
-  IN PVOID  FailedAssertion,
-  IN PVOID  FileName,
-  IN ULONG  LineNumber,
-  IN PCHAR  Message);
 
-#ifdef DBG
+
+#if defined(_X86_) || defined(_AMD64_)
+
+//
+// x86 and x64 performs a 0x2C interrupt
+//
+#define DbgRaiseAssertionFailure __int2c
+
+#elif defined(_ARM_)
+
+//
+// TODO
+//
+
+#else
+#error Unsupported Architecture
+#endif
+
+#if DBG
 
 #define ASSERT(exp) \
   (VOID)((!(exp)) ? \
-    RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE : TRUE)
+    RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
 
 #define ASSERTMSG(msg, exp) \
   (VOID)((!(exp)) ? \
-    RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE : TRUE)
+    RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
 
 #define RTL_SOFT_ASSERT(exp) \
-  (VOID)((!(_exp)) ? \
+  (VOID)((!(exp)) ? \
     DbgPrint("%s(%d): Soft assertion failed\n   Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
 
 #define RTL_SOFT_ASSERTMSG(msg, exp) \
@@ -6132,6 +5852,36 @@ RtlAssert(
 #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)
+
+#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)
@@ -6146,6 +5896,10 @@ RtlAssert(
 #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(exp)  ((VOID)0)
+#define NT_ASSERTMSGW(exp) ((VOID)0)
+
 #endif /* DBG */
 
 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
@@ -6242,7 +5996,7 @@ RemoveEntryList(
   OldBlink = Entry->Blink;
   OldFlink->Blink = OldBlink;
   OldBlink->Flink = OldFlink;
-  return (OldFlink == OldBlink);
+  return (BOOLEAN)(OldFlink == OldBlink);
 }
 
 static __inline PLIST_ENTRY
@@ -6273,1721 +6027,618 @@ RemoveTailList(
   return Entry;
 }
 
-#if !defined(_WINBASE_) || _WIN32_WINNT < 0x0501
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCharToInteger(
+  IN PCSZ  String,
+  IN ULONG  Base  OPTIONAL,
+  IN OUT PULONG  Value);
 
-NTKERNELAPI
-PSLIST_ENTRY
-FASTCALL
-InterlockedPopEntrySList(
-  IN PSLIST_HEADER  ListHead);
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareString(
+  IN PSTRING  String1,
+  IN PSTRING  String2,
+  BOOLEAN  CaseInSensitive);
 
-NTKERNELAPI
-PSLIST_ENTRY
-FASTCALL
-InterlockedPushEntrySList(
-  IN PSLIST_HEADER  ListHead,
-  IN PSLIST_ENTRY  ListEntry);
+#if !defined(MIDL_PASS)
 
-#endif
+FORCEINLINE
+LUID
+NTAPI
+RtlConvertLongToLuid(
+    IN LONG Val)
+{
+    LUID Luid;
+    LARGE_INTEGER Temp;
 
-/*
- * USHORT
- * QueryDepthSList(
- *   IN PSLIST_HEADER  SListHead)
- */
-#define QueryDepthSList(_SListHead) \
-  ((USHORT) ((_SListHead)->Alignment & 0xffff))
+    Temp.QuadPart = Val;
+    Luid.LowPart = Temp.u.LowPart;
+    Luid.HighPart = Temp.u.HighPart;
 
-#define InterlockedFlushSList(ListHead) ExInterlockedFlushSList(ListHead)
+    return Luid;
+}
 
-NTSYSAPI
-ULONG
+FORCEINLINE
+LUID
 NTAPI
-RtlxAnsiStringToUnicodeSize(
-  IN PCANSI_STRING  AnsiString);
-
-#define RtlAnsiStringToUnicodeSize(STRING) (               \
-  NLS_MB_CODE_PAGE_TAG ?                                   \
-  RtlxAnsiStringToUnicodeSize(STRING) :                    \
-  ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR)   \
-)
+RtlConvertUlongToLuid(
+    IN ULONG Val)
+{
+    LUID Luid;
 
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlAnsiStringToUnicodeString(
-  IN OUT PUNICODE_STRING  DestinationString,
-  IN PANSI_STRING  SourceString,
-  IN BOOLEAN  AllocateDestinationString);
+    Luid.LowPart = Val;
+    Luid.HighPart = 0;
 
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlAppendUnicodeStringToString(
-  IN OUT PUNICODE_STRING  Destination,
-  IN PCUNICODE_STRING  Source);
+    return Luid;
+}
+#endif
 
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlAppendUnicodeToString(
-  IN OUT PUNICODE_STRING  Destination,
-  IN PCWSTR  Source);
 
 NTSYSAPI
-BOOLEAN
+VOID
 NTAPI
-RtlAreBitsClear(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  StartingIndex,
+RtlCopyMemory32(
+  IN VOID UNALIGNED  *Destination,
+  IN CONST VOID UNALIGNED  *Source,
   IN ULONG  Length);
 
 NTSYSAPI
-BOOLEAN
+VOID
 NTAPI
-RtlAreBitsSet(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  StartingIndex,
-  IN ULONG  Length);
+RtlCopyString(
+  IN OUT PSTRING  DestinationString,
+  IN PSTRING  SourceString  OPTIONAL);
 
 NTSYSAPI
-NTSTATUS
+BOOLEAN
 NTAPI
-RtlCharToInteger(
-  IN PCSZ  String,
-  IN ULONG  Base  OPTIONAL,
-  IN OUT PULONG  Value);
+RtlEqualString(
+  IN PSTRING  String1,
+  IN PSTRING  String2,
+  IN BOOLEAN  CaseInSensitive);
 
-#if 0
+#if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
+#define RtlGetCallersAddress(CallersAddress, CallersCaller) \
+    *CallersAddress = (PVOID)_ReturnAddress(); \
+    *CallersCaller = NULL;
+#else
 NTSYSAPI
-ULONG
+VOID
 NTAPI
-RtlCheckBit(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  BitPosition);
+RtlGetCallersAddress(
+  OUT PVOID  *CallersAddress,
+  OUT PVOID  *CallersCaller);
 #endif
 
 NTSYSAPI
 NTSTATUS
 NTAPI
-RtlCheckRegistryKey(
-  IN ULONG  RelativeTo,
-  IN PWSTR  Path);
+RtlGetVersion(
+  IN OUT PRTL_OSVERSIONINFOW  lpVersionInformation);
 
 NTSYSAPI
 VOID
 NTAPI
-RtlClearAllBits(
-  IN PRTL_BITMAP  BitMapHeader);
+RtlMapGenericMask(
+  IN OUT PACCESS_MASK  AccessMask,
+  IN PGENERIC_MAPPING  GenericMapping);
 
 NTSYSAPI
-VOID
+BOOLEAN
 NTAPI
-RtlClearBit(
-  PRTL_BITMAP  BitMapHeader,
-  ULONG  BitNumber);
+RtlPrefixUnicodeString(
+  IN PCUNICODE_STRING  String1,
+  IN PCUNICODE_STRING  String2,
+  IN BOOLEAN  CaseInSensitive);
 
 NTSYSAPI
-VOID
+NTSTATUS
 NTAPI
-RtlClearBits(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  StartingIndex,
-  IN ULONG  NumberToClear);
+RtlUpcaseUnicodeString(
+  IN OUT PUNICODE_STRING  DestinationString  OPTIONAL,
+  IN PCUNICODE_STRING  SourceString,
+  IN BOOLEAN  AllocateDestinationString);
 
 NTSYSAPI
-SIZE_T
+CHAR
 NTAPI
-RtlCompareMemory(
-  IN CONST VOID  *Source1,
-  IN CONST VOID  *Source2,
-  IN SIZE_T  Length);
+RtlUpperChar(
+  IN CHAR Character);
 
 NTSYSAPI
-LONG
+VOID
 NTAPI
-RtlCompareString(
-  IN PSTRING  String1,
-  IN PSTRING  String2,
-  BOOLEAN  CaseInSensitive);
+RtlUpperString(
+  IN OUT PSTRING  DestinationString,
+  IN PSTRING  SourceString);
 
 NTSYSAPI
-LONG
+NTSTATUS
 NTAPI
-RtlCompareUnicodeString(
-  IN PCUNICODE_STRING  String1,
-  IN PCUNICODE_STRING  String2,
-  IN BOOLEAN  CaseInSensitive);
-
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlConvertLongToLargeInteger(LONG SignedInteger)
-{
-    LARGE_INTEGER Result;
-
-    Result.QuadPart = SignedInteger;
-    return Result;
-}
-
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlConvertUlongToLargeInteger(
-  ULONG UnsignedInteger)
-{
-    LARGE_INTEGER ret;
-    ret.QuadPart = UnsignedInteger;
-    return ret;
-}
+RtlVerifyVersionInfo(
+  IN PRTL_OSVERSIONINFOEXW  VersionInfo,
+  IN ULONG  TypeMask,
+  IN ULONGLONG  ConditionMask);
 
 NTSYSAPI
-LUID
+NTSTATUS
 NTAPI
-RtlConvertLongToLuid(
-  IN LONG  Long);
-
+RtlVolumeDeviceToDosName(
+  IN PVOID  VolumeDeviceObject,
+  OUT PUNICODE_STRING  DosName);
 
 NTSYSAPI
-LUID
+ULONG
 NTAPI
-RtlConvertUlongToLuid(
-  ULONG  Ulong);
-
-#ifdef _M_AMD64
-
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlExtendedIntegerMultiply(
-  LARGE_INTEGER Multiplicand,
-  LONG Multiplier)
-{
-    LARGE_INTEGER ret;
-    ret.QuadPart = Multiplicand.QuadPart * Multiplier;
-    return ret;
-}
+RtlWalkFrameChain(
+  OUT PVOID  *Callers,
+  IN ULONG  Count,
+  IN ULONG  Flags);
 
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlExtendedLargeIntegerDivide(
-  LARGE_INTEGER Dividend,
-  ULONG Divisor,
-  PULONG Remainder)
-{
-    LARGE_INTEGER ret;
-    ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
-    if (Remainder)
-        *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
-    return ret;
-}
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeAreAllApcsDisabled(
+    VOID
+);
 
-#endif
+/* Guarded Mutex routines */
 
-/*
- * VOID
- * RtlCopyMemory(
- *   IN VOID UNALIGNED  *Destination,
- *   IN CONST VOID UNALIGNED  *Source,
- *   IN SIZE_T  Length)
- */
-#ifndef RtlCopyMemory
-#define RtlCopyMemory(Destination, Source, Length) \
-  memcpy(Destination, Source, Length)
-#endif
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireGuardedMutex(
+    IN OUT PKGUARDED_MUTEX GuardedMutex
+);
 
-#ifndef RtlCopyBytes
-#define RtlCopyBytes RtlCopyMemory
-#endif
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireGuardedMutexUnsafe(
+    IN OUT PKGUARDED_MUTEX GuardedMutex
+);
 
-NTSYSAPI
+NTKERNELAPI
 VOID
 NTAPI
-RtlCopyMemory32(
-  IN VOID UNALIGNED  *Destination,
-  IN CONST VOID UNALIGNED  *Source,
-  IN ULONG  Length);
+KeEnterGuardedRegion(
+    VOID
+);
 
-NTSYSAPI
+NTKERNELAPI
 VOID
 NTAPI
-RtlCopyString(
-  IN OUT PSTRING  DestinationString,
-  IN PSTRING  SourceString  OPTIONAL);
+KeLeaveGuardedRegion(
+    VOID
+);
 
-NTSYSAPI
+NTKERNELAPI
 VOID
-NTAPI
-RtlCopyUnicodeString(
-  IN OUT PUNICODE_STRING  DestinationString,
-  IN PCUNICODE_STRING  SourceString);
+FASTCALL
+KeInitializeGuardedMutex(
+    OUT PKGUARDED_MUTEX GuardedMutex
+);
 
-NTSYSAPI
-NTSTATUS
+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
+);
+
+/* Fast Mutex */
+#define ExInitializeFastMutex(_FastMutex) \
+{ \
+    (_FastMutex)->Count = FM_LOCK_BIT; \
+    (_FastMutex)->Owner = NULL; \
+    (_FastMutex)->Contention = 0; \
+    KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
+}
+
+NTKERNELAPI
+VOID
 NTAPI
-RtlCreateRegistryKey(
-  IN ULONG  RelativeTo,
-  IN PWSTR  Path);
+KeInitializeEvent(
+  IN PRKEVENT  Event,
+  IN EVENT_TYPE  Type,
+  IN BOOLEAN  State);
 
-NTSYSAPI
+/******************************************************************************
+ *                            Executive Types                                 *
+ ******************************************************************************/
+
+typedef struct _ZONE_SEGMENT_HEADER {
+  SINGLE_LIST_ENTRY  SegmentList;
+  PVOID  Reserved;
+} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
+
+typedef struct _ZONE_HEADER {
+  SINGLE_LIST_ENTRY  FreeList;
+  SINGLE_LIST_ENTRY  SegmentList;
+  ULONG  BlockSize;
+  ULONG  TotalSegmentSize;
+} ZONE_HEADER, *PZONE_HEADER;
+
+#define PROTECTED_POOL                    0x80000000
+
+/******************************************************************************
+ *                          Executive Functions                               *
+ ******************************************************************************/
+
+NTKERNELAPI
 NTSTATUS
 NTAPI
-RtlCreateSecurityDescriptor(
-  IN OUT PSECURITY_DESCRIPTOR  SecurityDescriptor,
-  IN ULONG  Revision);
+ExExtendZone(
+  IN PZONE_HEADER  Zone,
+  IN PVOID  Segment,
+  IN ULONG  SegmentSize);
 
-NTSYSAPI
+static __inline PVOID
+ExAllocateFromZone(
+  IN PZONE_HEADER  Zone)
+{
+  if (Zone->FreeList.Next)
+    Zone->FreeList.Next = Zone->FreeList.Next->Next;
+  return (PVOID) Zone->FreeList.Next;
+}
+
+static __inline PVOID
+ExFreeToZone(
+  IN PZONE_HEADER  Zone,
+  IN PVOID  Block)
+{
+  ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
+  Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
+  return ((PSINGLE_LIST_ENTRY) Block)->Next;
+}
+
+NTKERNELAPI
 NTSTATUS
 NTAPI
-RtlDeleteRegistryValue(
-  IN ULONG  RelativeTo,
-  IN PCWSTR  Path,
-  IN PCWSTR  ValueName);
+ExInitializeZone(
+  IN PZONE_HEADER  Zone,
+  IN ULONG  BlockSize,
+  IN PVOID  InitialSegment,
+  IN ULONG  InitialSegmentSize);
 
 /*
- * 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)
+ * PVOID
+ * ExInterlockedAllocateFromZone(
+ *   IN PZONE_HEADER  Zone,
+ *   IN PKSPIN_LOCK  Lock)
  */
-#define RtlEqualMemory(Destination, Source, Length) (!memcmp(Destination, Source, Length))
+#define ExInterlockedAllocateFromZone(Zone, Lock) \
+    ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
 
-NTSYSAPI
-BOOLEAN
+NTKERNELAPI
+NTSTATUS
 NTAPI
-RtlEqualString(
-  IN PSTRING  String1,
-  IN PSTRING  String2,
-  IN BOOLEAN  CaseInSensitive);
+ExInterlockedExtendZone(
+  IN PZONE_HEADER  Zone,
+  IN PVOID  Segment,
+  IN ULONG  SegmentSize,
+  IN PKSPIN_LOCK  Lock);
 
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlEqualUnicodeString(
-  IN CONST UNICODE_STRING  *String1,
-  IN CONST UNICODE_STRING  *String2,
-  IN BOOLEAN  CaseInSensitive);
+/* PVOID
+ * ExInterlockedFreeToZone(
+ *  IN PZONE_HEADER  Zone,
+ *  IN PVOID  Block,
+ *  IN PKSPIN_LOCK  Lock);
+ */
+#define ExInterlockedFreeToZone(Zone, Block, Lock) \
+    ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
 
 /*
  * VOID
- * RtlFillMemory(
- *   IN VOID UNALIGNED  *Destination,
- *   IN SIZE_T  Length,
- *   IN UCHAR  Fill)
+ * InitializeSListHead(
+ *   IN PSLIST_HEADER  SListHead)
  */
-#ifndef RtlFillMemory
-#define RtlFillMemory(Destination, Length, Fill) \
-  memset(Destination, Fill, Length)
-#endif
+#define InitializeSListHead(_SListHead) \
+       (_SListHead)->Alignment = 0
 
-#ifndef RtlFillBytes
-#define RtlFillBytes RtlFillMemory
-#endif
+#define ExInitializeSListHead InitializeSListHead
 
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindClearBits(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  NumberToFind,
-  IN ULONG  HintIndex);
+/*
+ * BOOLEAN
+ * ExIsFullZone(
+ *  IN PZONE_HEADER  Zone)
+ */
+#define ExIsFullZone(Zone) \
+  ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
 
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindClearBitsAndSet(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  NumberToFind,
-  IN ULONG  HintIndex);
+/* BOOLEAN
+ * ExIsObjectInFirstZoneSegment(
+ *     IN PZONE_HEADER Zone,
+ *     IN PVOID Object);
+ */
+#define ExIsObjectInFirstZoneSegment(Zone,Object) \
+    ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
+                ((PUCHAR)(Object) <  (PUCHAR)(Zone)->SegmentList.Next + \
+                         (Zone)->TotalSegmentSize)) )
 
-NTSYSAPI
-ULONG
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
 NTAPI
-RtlFindClearRuns(
-  IN PRTL_BITMAP  BitMapHeader,
-  OUT PRTL_BITMAP_RUN  RunArray,
-  IN ULONG  SizeOfRunArray,
-  IN BOOLEAN  LocateLongestRuns);
+ExRaiseAccessViolation(
+  VOID);
 
-NTSYSAPI
-ULONG
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
 NTAPI
-RtlFindFirstRunClear(
-  IN PRTL_BITMAP  BitMapHeader,
-  OUT PULONG  StartingIndex);
+ExRaiseDatatypeMisalignment(
+  VOID);
 
-NTSYSAPI
-ULONG
+NTKERNELAPI
+NTSTATUS
 NTAPI
-RtlFindLastBackwardRunClear(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  FromIndex,
-  OUT PULONG  StartingRunIndex);
+ExUuidCreate(
+  OUT UUID  *Uuid);
 
-NTSYSAPI
-CCHAR
-NTAPI
-RtlFindLeastSignificantBit(
-  IN ULONGLONG  Set);
+#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
+#define ExAcquireResourceShared ExAcquireResourceSharedLite
+#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
+#define ExDeleteResource ExDeleteResourceLite
+#define ExInitializeResource ExInitializeResourceLite
+#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
+#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
+#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
+#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
 
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindLongestRunClear(
-  IN PRTL_BITMAP  BitMapHeader,
-  OUT PULONG  StartingIndex);
 
-NTSYSAPI
-CCHAR
-NTAPI
-RtlFindMostSignificantBit(
-  IN ULONGLONG  Set);
+#if DBG
 
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindNextForwardRunClear(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  FromIndex,
-  OUT PULONG  StartingRunIndex);
+#define PAGED_CODE() { \
+  if (KeGetCurrentIrql() > APC_LEVEL) { \
+    KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
+    ASSERT(FALSE); \
+  } \
+}
 
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindSetBits(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  NumberToFind,
-  IN ULONG  HintIndex);
+#else
 
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindSetBitsAndClear(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  NumberToFind,
-  IN ULONG  HintIndex);
+#define PAGED_CODE()
 
-NTSYSAPI
-VOID
-NTAPI
-RtlFreeAnsiString(
-  IN PANSI_STRING  AnsiString);
+#endif
 
-NTSYSAPI
+NTKERNELAPI
 VOID
 NTAPI
-RtlFreeUnicodeString(
-  IN PUNICODE_STRING  UnicodeString);
+ProbeForRead(
+  IN CONST VOID  *Address,
+  IN SIZE_T  Length,
+  IN ULONG  Alignment);
 
-NTSYSAPI
+NTKERNELAPI
 VOID
 NTAPI
-RtlGetCallersAddress(
-  OUT PVOID  *CallersAddress,
-  OUT PVOID  *CallersCaller);
+ProbeForWrite(
+  IN PVOID  Address,
+  IN SIZE_T  Length,
+  IN ULONG  Alignment);
 
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlGetVersion(
-  IN OUT PRTL_OSVERSIONINFOW  lpVersionInformation);
 
-NTSYSAPI
+
+/** Configuration manager routines **/
+
+NTKERNELAPI
 NTSTATUS
 NTAPI
-RtlGUIDFromString(
-  IN PUNICODE_STRING  GuidString,
-  OUT GUID  *Guid);
+CmRegisterCallback(
+  IN PEX_CALLBACK_FUNCTION  Function,
+  IN PVOID  Context,
+  IN OUT PLARGE_INTEGER  Cookie);
 
-NTSYSAPI
+NTKERNELAPI
 NTSTATUS
 NTAPI
-RtlHashUnicodeString(
-  IN CONST UNICODE_STRING  *String,
-  IN BOOLEAN  CaseInSensitive,
-  IN ULONG  HashAlgorithm,
-  OUT PULONG  HashValue);
+CmUnRegisterCallback(
+  IN LARGE_INTEGER  Cookie);
 
-NTSYSAPI
-VOID
+
+
+/** Filesystem runtime library routines **/
+
+NTKERNELAPI
+BOOLEAN
 NTAPI
-RtlInitAnsiString(
-  IN OUT PANSI_STRING  DestinationString,
-  IN PCSZ  SourceString);
+FsRtlIsTotalDeviceFailure(
+  IN NTSTATUS  Status);
 
-NTSYSAPI
-VOID
+
+
+/** Hardware abstraction layer routines **/
+
+NTHALAPI
+BOOLEAN
 NTAPI
-RtlInitializeBitMap(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN PULONG  BitMapBuffer,
-  IN ULONG  SizeOfBitMap);
+HalMakeBeep(
+  IN ULONG Frequency);
 
-NTSYSAPI
+NTKERNELAPI
 VOID
-NTAPI
-RtlInitString(
-  IN OUT PSTRING  DestinationString,
-  IN PCSZ  SourceString);
+FASTCALL
+HalExamineMBR(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN ULONG  MBRTypeIdentifier,
+  OUT PVOID  *Buffer);
 
-NTSYSAPI
 VOID
 NTAPI
-RtlInitUnicodeString(
-  IN OUT PUNICODE_STRING  DestinationString,
-  IN PCWSTR  SourceString);
+HalPutDmaAdapter(
+    PADAPTER_OBJECT AdapterObject
+);
 
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlInt64ToUnicodeString(
-  IN ULONGLONG  Value,
-  IN ULONG  Base OPTIONAL,
-  IN OUT PUNICODE_STRING  String);
 
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlIntegerToUnicodeString(
-  IN ULONG  Value,
-  IN ULONG  Base  OPTIONAL,
-  IN OUT PUNICODE_STRING  String);
+/** Io access routines **/
 
-NTSYSAPI
-NTSTATUS
+#if !defined(_M_AMD64)
+NTHALAPI
+VOID
 NTAPI
-RtlIntPtrToUnicodeString(
-  PLONG  Value,
-  ULONG  Base  OPTIONAL,
-  PUNICODE_STRING  String);
-
-/*
- * BOOLEAN
- * RtlIsZeroLuid(
- *   IN PLUID  L1)
- */
-#define RtlIsZeroLuid(_L1) \
-  ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
+READ_PORT_BUFFER_UCHAR(
+  IN PUCHAR  Port,
+  IN PUCHAR  Buffer,
+  IN ULONG  Count);
 
-NTSYSAPI
-ULONG
+NTHALAPI
+VOID
 NTAPI
-RtlLengthSecurityDescriptor(
-  IN PSECURITY_DESCRIPTOR  SecurityDescriptor);
+READ_PORT_BUFFER_ULONG(
+  IN PULONG  Port,
+  IN PULONG  Buffer,
+  IN ULONG  Count);
 
-NTSYSAPI
+NTHALAPI
 VOID
 NTAPI
-RtlMapGenericMask(
-  IN OUT PACCESS_MASK  AccessMask,
-  IN PGENERIC_MAPPING  GenericMapping);
+READ_PORT_BUFFER_USHORT(
+  IN PUSHORT  Port,
+  IN PUSHORT  Buffer,
+  IN ULONG  Count);
 
-/*
- * VOID
- * RtlMoveMemory(
- *  IN VOID UNALIGNED  *Destination,
- *  IN CONST VOID UNALIGNED  *Source,
- *  IN SIZE_T  Length)
- */
-#define RtlMoveMemory memmove
+NTHALAPI
+UCHAR
+NTAPI
+READ_PORT_UCHAR(
+  IN PUCHAR  Port);
 
-NTSYSAPI
+NTHALAPI
 ULONG
 NTAPI
-RtlNumberOfClearBits(
-  IN PRTL_BITMAP  BitMapHeader);
+READ_PORT_ULONG(
+  IN PULONG  Port);
 
-NTSYSAPI
-ULONG
+NTHALAPI
+USHORT
 NTAPI
-RtlNumberOfSetBits(
-  IN PRTL_BITMAP  BitMapHeader);
+READ_PORT_USHORT(
+  IN PUSHORT  Port);
 
-NTSYSAPI
+NTKERNELAPI
 VOID
-FASTCALL
-RtlPrefetchMemoryNonTemporal(
-  IN PVOID  Source,
-  IN SIZE_T  Length);
-
-NTSYSAPI
-BOOLEAN
 NTAPI
-RtlPrefixUnicodeString(
-  IN PCUNICODE_STRING  String1,
-  IN PCUNICODE_STRING  String2,
-  IN BOOLEAN  CaseInSensitive);
+READ_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR  Register,
+  IN PUCHAR  Buffer,
+  IN ULONG  Count);
 
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+VOID
 NTAPI
-RtlQueryRegistryValues(
-  IN ULONG  RelativeTo,
-  IN PCWSTR  Path,
-  IN PRTL_QUERY_REGISTRY_TABLE  QueryTable,
-  IN PVOID  Context,
-  IN PVOID  Environment  OPTIONAL);
+READ_REGISTER_BUFFER_ULONG(
+  IN PULONG  Register,
+  IN PULONG  Buffer,
+  IN ULONG  Count);
 
+NTKERNELAPI
+VOID
+NTAPI
+READ_REGISTER_BUFFER_USHORT(
+  IN PUSHORT  Register,
+  IN PUSHORT  Buffer,
+  IN ULONG  Count);
 
-#define LONG_SIZE (sizeof(LONG))
-#define LONG_MASK (LONG_SIZE - 1)
+NTKERNELAPI
+UCHAR
+NTAPI
+READ_REGISTER_UCHAR(
+  IN PUCHAR  Register);
 
-/*
- * VOID
- * RtlRetrieveUlong (
- *     PULONG  DestinationAddress,
- *     PULONG  SourceAddress
- *     );
- */
-#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)); \
-    }
+NTKERNELAPI
+ULONG
+NTAPI
+READ_REGISTER_ULONG(
+  IN PULONG  Register);
 
-NTSYSAPI
-VOID
+NTKERNELAPI
+USHORT
 NTAPI
-RtlRetrieveUshort(
-  IN OUT PUSHORT  DestinationAddress,
-  IN PUSHORT  SourceAddress);
+READ_REGISTER_USHORT(
+  IN PUSHORT  Register);
 
-NTSYSAPI
+NTHALAPI
 VOID
 NTAPI
-RtlSetAllBits(
-  IN PRTL_BITMAP  BitMapHeader);
+WRITE_PORT_BUFFER_UCHAR(
+  IN PUCHAR  Port,
+  IN PUCHAR  Buffer,
+  IN ULONG  Count);
 
-NTSYSAPI
+NTHALAPI
 VOID
 NTAPI
-RtlSetBit(
-  PRTL_BITMAP  BitMapHeader,
-  ULONG  BitNumber);
+WRITE_PORT_BUFFER_ULONG(
+  IN PULONG  Port,
+  IN PULONG  Buffer,
+  IN ULONG  Count);
 
-NTSYSAPI
+NTHALAPI
 VOID
 NTAPI
-RtlSetBits(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  StartingIndex,
-  IN ULONG  NumberToSet);
+WRITE_PORT_BUFFER_USHORT(
+  IN PUSHORT  Port,
+  IN PUSHORT  Buffer,
+  IN ULONG  Count);
 
-NTSYSAPI
-NTSTATUS
+NTHALAPI
+VOID
 NTAPI
-RtlSetDaclSecurityDescriptor(
-  IN OUT PSECURITY_DESCRIPTOR  SecurityDescriptor,
-  IN BOOLEAN  DaclPresent,
-  IN PACL  Dacl  OPTIONAL,
-  IN BOOLEAN  DaclDefaulted  OPTIONAL);
+WRITE_PORT_UCHAR(
+  IN PUCHAR  Port,
+  IN UCHAR  Value);
 
-NTSYSAPI
+NTHALAPI
 VOID
 NTAPI
-RtlStoreUlong(
-  IN PULONG  Address,
+WRITE_PORT_ULONG(
+  IN PULONG  Port,
   IN ULONG  Value);
 
-NTSYSAPI
+NTHALAPI
 VOID
 NTAPI
-RtlStoreUlonglong(
-  IN OUT PULONGLONG  Address,
-  ULONGLONG  Value);
+WRITE_PORT_USHORT(
+  IN PUSHORT  Port,
+  IN USHORT  Value);
 
-NTSYSAPI
+NTKERNELAPI
 VOID
 NTAPI
-RtlStoreUlongPtr(
-  IN OUT PULONG_PTR  Address,
-  IN ULONG_PTR  Value);
+WRITE_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR  Register,
+  IN PUCHAR  Buffer,
+  IN ULONG  Count);
 
-NTSYSAPI
+NTKERNELAPI
 VOID
 NTAPI
-RtlStoreUshort(
-  IN PUSHORT  Address,
-  IN USHORT  Value);
+WRITE_REGISTER_BUFFER_ULONG(
+  IN PULONG  Register,
+  IN PULONG  Buffer,
+  IN ULONG  Count);
 
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlStringFromGUID(
-  IN REFGUID  Guid,
-  OUT PUNICODE_STRING  GuidString);
-
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlTestBit(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  BitNumber);
-
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlTimeFieldsToTime(
-  IN PTIME_FIELDS  TimeFields,
-  IN PLARGE_INTEGER  Time);
-
-NTSYSAPI
-VOID
-NTAPI
-RtlTimeToTimeFields(
-  IN PLARGE_INTEGER  Time,
-  IN PTIME_FIELDS  TimeFields);
-
-ULONG
-FASTCALL
-RtlUlongByteSwap(
-  IN ULONG  Source);
-
-ULONGLONG
-FASTCALL
-RtlUlonglongByteSwap(
-  IN ULONGLONG  Source);
-
-#define RtlUnicodeStringToAnsiSize(STRING) (                  \
-    NLS_MB_CODE_PAGE_TAG ?                                    \
-    RtlxUnicodeStringToAnsiSize(STRING) :                     \
-    ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
-)
-
-FORCEINLINE
-VOID
-RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString,
-                          IN PWSTR Buffer,
-                          IN USHORT BufferSize)
-{
-    UnicodeString->Length = 0;
-    UnicodeString->MaximumLength = BufferSize;
-    UnicodeString->Buffer = Buffer;
-}
-
-FORCEINLINE
-VOID
-RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString,
-                       IN PCHAR Buffer,
-                       IN USHORT BufferSize)
-{
-    AnsiString->Length = 0;
-    AnsiString->MaximumLength = BufferSize;
-    AnsiString->Buffer = Buffer;
-}
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlUnicodeStringToAnsiString(
-  IN OUT PANSI_STRING  DestinationString,
-  IN PCUNICODE_STRING  SourceString,
-  IN BOOLEAN  AllocateDestinationString);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlUnicodeStringToInteger(
-  IN PCUNICODE_STRING  String,
-  IN ULONG  Base  OPTIONAL,
-  OUT PULONG  Value);
-
-NTSYSAPI
-WCHAR
-NTAPI
-RtlUpcaseUnicodeChar(
-  IN WCHAR  SourceCharacter);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlUpcaseUnicodeString(
-  IN OUT PUNICODE_STRING  DestinationString  OPTIONAL,
-  IN PCUNICODE_STRING  SourceString,
-  IN BOOLEAN  AllocateDestinationString);
-
-NTSYSAPI
-CHAR
-NTAPI
-RtlUpperChar(
-  IN CHAR Character);
-
-NTSYSAPI
-VOID
-NTAPI
-RtlUpperString(
-  IN OUT PSTRING  DestinationString,
-  IN PSTRING  SourceString);
-
-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
-RtlVerifyVersionInfo(
-  IN PRTL_OSVERSIONINFOEXW  VersionInfo,
-  IN ULONG  TypeMask,
-  IN ULONGLONG  ConditionMask);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlVolumeDeviceToDosName(
-  IN PVOID  VolumeDeviceObject,
-  OUT PUNICODE_STRING  DosName);
-
-NTSYSAPI
-ULONG
-NTAPI
-RtlWalkFrameChain(
-  OUT PVOID  *Callers,
-  IN ULONG  Count,
-  IN ULONG  Flags);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlWriteRegistryValue(
-  IN ULONG  RelativeTo,
-  IN PCWSTR  Path,
-  IN PCWSTR  ValueName,
-  IN ULONG  ValueType,
-  IN PVOID  ValueData,
-  IN ULONG  ValueLength);
-
-NTSYSAPI
-ULONG
-NTAPI
-RtlxUnicodeStringToAnsiSize(
-  IN PCUNICODE_STRING  UnicodeString);
-
-/*
- * VOID
- * RtlZeroMemory(
- *   IN VOID UNALIGNED  *Destination,
- *   IN SIZE_T  Length)
- */
-#ifndef RtlZeroMemory
-#define RtlZeroMemory(Destination, Length) \
-  memset(Destination, 0, Length)
-#endif
-
-#ifndef RtlZeroBytes
-#define RtlZeroBytes RtlZeroMemory
-#endif
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeAreAllApcsDisabled(
-    VOID
-);
-
-/* Guarded Mutex routines */
-
-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
-);
-
-NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExAcquireRundownProtectionEx(
-     IN OUT PEX_RUNDOWN_REF RunRef,
-     IN ULONG Count
-);
-
-NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseRundownProtectionEx(
-     IN OUT PEX_RUNDOWN_REF RunRef,
-     IN ULONG Count
-);
-
-/* Fast Mutex */
-#define ExInitializeFastMutex(_FastMutex) \
-{ \
-    (_FastMutex)->Count = FM_LOCK_BIT; \
-    (_FastMutex)->Owner = NULL; \
-    (_FastMutex)->Contention = 0; \
-    KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
-}
-
-NTKERNELAPI
-VOID
-FASTCALL
-ExAcquireFastMutexUnsafe(IN OUT PFAST_MUTEX FastMutex);
-
-NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseFastMutexUnsafe(IN OUT PFAST_MUTEX FastMutex);
-
-#if defined(_NTHAL_) && defined(_X86_)
-NTKERNELAPI
-VOID
-FASTCALL
-ExiAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex);
-
-NTKERNELAPI
-VOID
-FASTCALL
-ExiReleaseFastMutex(IN OUT PFAST_MUTEX FastMutex);
-
-NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExiTryToAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex);
-
-#define ExAcquireFastMutex(FastMutex)       ExiAcquireFastMutex(FastMutex)
-#define ExReleaseFastMutex(FastMutex)       ExiReleaseFastMutex(FastMutex)
-#define ExTryToAcquireFastMutex(FastMutex)  ExiTryToAcquireFastMutex(FastMutex)
-
-#else
-
-NTKERNELAPI
-VOID
-FASTCALL
-ExAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex);
-
-NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseFastMutex(IN OUT PFAST_MUTEX FastMutex);
-
-NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExTryToAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex);
-#endif
-
-/** Executive support routines **/
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-ExAcquireResourceExclusiveLite(
-  IN PERESOURCE  Resource,
-  IN BOOLEAN  Wait);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-ExAcquireResourceSharedLite(
-  IN PERESOURCE  Resource,
-  IN BOOLEAN  Wait);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-ExAcquireSharedStarveExclusive(
-  IN PERESOURCE  Resource,
-  IN BOOLEAN  Wait);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-ExAcquireSharedWaitForExclusive(
-  IN PERESOURCE  Resource,
-  IN BOOLEAN  Wait);
-
-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;
-}
-
-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;
-}
-
-NTKERNELAPI
-PVOID
-NTAPI
-ExAllocatePoolWithQuotaTag(
-  IN POOL_TYPE  PoolType,
-  IN SIZE_T  NumberOfBytes,
-  IN ULONG  Tag);
-
-NTKERNELAPI
-PVOID
-NTAPI
-ExAllocatePoolWithTag(
-  IN POOL_TYPE  PoolType,
-  IN SIZE_T  NumberOfBytes,
-  IN ULONG  Tag);
-
-#ifdef POOL_TAGGING
-
-#define ExAllocatePoolWithQuota(p,n) ExAllocatePoolWithQuotaTag(p,n,' kdD')
-#define ExAllocatePool(p,n) ExAllocatePoolWithTag(p,n,' kdD')
-
-#else /* !POOL_TAGGING */
-
-NTKERNELAPI
-PVOID
-NTAPI
-ExAllocatePool(
-  IN POOL_TYPE  PoolType,
-  IN SIZE_T  NumberOfBytes);
-
-NTKERNELAPI
-PVOID
-NTAPI
-ExAllocatePoolWithQuota(
-  IN POOL_TYPE  PoolType,
-  IN SIZE_T  NumberOfBytes);
-
-#endif /* POOL_TAGGING */
-
-NTKERNELAPI
-PVOID
-NTAPI
-ExAllocatePoolWithTagPriority(
-  IN POOL_TYPE  PoolType,
-  IN SIZE_T  NumberOfBytes,
-  IN ULONG  Tag,
-  IN EX_POOL_PRIORITY  Priority);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExConvertExclusiveToSharedLite(
-  IN PERESOURCE  Resource);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-ExCreateCallback(
-  OUT PCALLBACK_OBJECT  *CallbackObject,
-  IN POBJECT_ATTRIBUTES  ObjectAttributes,
-  IN BOOLEAN  Create,
-  IN BOOLEAN  AllowMultipleCallbacks);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExDeleteNPagedLookasideList(
-  IN PNPAGED_LOOKASIDE_LIST  Lookaside);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExDeletePagedLookasideList(
-  IN PPAGED_LOOKASIDE_LIST  Lookaside);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-ExDeleteResourceLite(
-  IN PERESOURCE  Resource);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExFreePool(
-  IN PVOID  P);
-
-#define PROTECTED_POOL                    0x80000000
-
-#ifdef POOL_TAGGING
-#define ExFreePool(P) ExFreePoolWithTag(P, 0)
-#endif
-
-NTKERNELAPI
-VOID
-NTAPI
-ExFreePoolWithTag(
-  IN PVOID  P,
-  IN ULONG  Tag);
-
-#define ExQueryDepthSList(ListHead) QueryDepthSList(ListHead)
-
-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);
-  }
-}
-
-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);
-  }
-}
-
-/*
- * ERESOURCE_THREAD
- * ExGetCurrentResourceThread(
- *   VOID);
- */
-#define ExGetCurrentResourceThread() ((ERESOURCE_THREAD) PsGetCurrentThread())
-
-NTKERNELAPI
-ULONG
-NTAPI
-ExGetExclusiveWaiterCount(
-  IN PERESOURCE  Resource);
-
-NTKERNELAPI
-KPROCESSOR_MODE
-NTAPI
-ExGetPreviousMode(
-  VOID);
-
-NTKERNELAPI
-ULONG
-NTAPI
-ExGetSharedWaiterCount(
-  IN PERESOURCE  Resource);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeInitializeEvent(
-  IN PRKEVENT  Event,
-  IN EVENT_TYPE  Type,
-  IN BOOLEAN  State);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExInitializeNPagedLookasideList(
-  IN PNPAGED_LOOKASIDE_LIST  Lookaside,
-  IN PALLOCATE_FUNCTION  Allocate  OPTIONAL,
-  IN PFREE_FUNCTION  Free  OPTIONAL,
-  IN ULONG  Flags,
-  IN SIZE_T  Size,
-  IN ULONG  Tag,
-  IN USHORT  Depth);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExInitializePagedLookasideList(
-  IN PPAGED_LOOKASIDE_LIST  Lookaside,
-  IN PALLOCATE_FUNCTION  Allocate  OPTIONAL,
-  IN PFREE_FUNCTION  Free  OPTIONAL,
-  IN ULONG  Flags,
-  IN SIZE_T  Size,
-  IN ULONG  Tag,
-  IN USHORT  Depth);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-ExInitializeResourceLite(
-  IN PERESOURCE  Resource);
-
-/*
- * VOID
- * InitializeSListHead(
- *   IN PSLIST_HEADER  SListHead)
- */
-#define InitializeSListHead(_SListHead) \
-       (_SListHead)->Alignment = 0
-
-#define ExInitializeSListHead InitializeSListHead
-
-NTKERNELAPI
-LARGE_INTEGER
-NTAPI
-ExInterlockedAddLargeInteger(
-  IN PLARGE_INTEGER  Addend,
-  IN LARGE_INTEGER  Increment,
-  IN PKSPIN_LOCK  Lock);
-
-NTKERNELAPI
-VOID
-FASTCALL
-ExInterlockedAddLargeStatistic(
-  IN PLARGE_INTEGER  Addend,
-  IN ULONG  Increment);
-
-NTKERNELAPI
-ULONG
-NTAPI
-ExInterlockedAddUlong(
-  IN PULONG  Addend,
-  IN ULONG  Increment,
-  PKSPIN_LOCK  Lock);
-
-NTKERNELAPI
-LONGLONG
-FASTCALL
-ExInterlockedCompareExchange64(
-  IN OUT PLONGLONG  Destination,
-  IN PLONGLONG  Exchange,
-  IN PLONGLONG  Comparand,
-  IN PKSPIN_LOCK  Lock);
-
-NTKERNELAPI
-LONGLONG
-FASTCALL
-ExfInterlockedCompareExchange64(
-  IN OUT LONGLONG volatile  *Destination,
-  IN PLONGLONG  Exchange,
-  IN PLONGLONG  Comperand);
-
-NTKERNELAPI
-PSINGLE_LIST_ENTRY
-FASTCALL
-ExInterlockedFlushSList(
-  IN PSLIST_HEADER  ListHead);
-
-NTKERNELAPI
-PLIST_ENTRY
-NTAPI
-ExInterlockedInsertHeadList(
-  IN PLIST_ENTRY  ListHead,
-  IN PLIST_ENTRY  ListEntry,
-  IN PKSPIN_LOCK  Lock);
-
-NTKERNELAPI
-PLIST_ENTRY
-NTAPI
-ExInterlockedInsertTailList(
-  IN PLIST_ENTRY  ListHead,
-  IN PLIST_ENTRY  ListEntry,
-  IN PKSPIN_LOCK  Lock);
-
-NTKERNELAPI
-PSINGLE_LIST_ENTRY
-NTAPI
-ExInterlockedPopEntryList(
-  IN PSINGLE_LIST_ENTRY  ListHead,
-  IN PKSPIN_LOCK  Lock);
-
-/*
- * PSINGLE_LIST_ENTRY
- * ExInterlockedPopEntrySList(
- *   IN PSLIST_HEADER  ListHead,
- *   IN PKSPIN_LOCK  Lock)
- */
-#define ExInterlockedPopEntrySList(_ListHead, \
-                                   _Lock) \
-  InterlockedPopEntrySList(_ListHead)
-
-NTKERNELAPI
-PSINGLE_LIST_ENTRY
-NTAPI
-ExInterlockedPushEntryList(
-  IN PSINGLE_LIST_ENTRY  ListHead,
-  IN PSINGLE_LIST_ENTRY  ListEntry,
-  IN PKSPIN_LOCK  Lock);
-
-/*
- * PSINGLE_LIST_ENTRY FASTCALL
- * ExInterlockedPushEntrySList(
- *   IN PSLIST_HEADER  ListHead,
- *   IN PSINGLE_LIST_ENTRY  ListEntry,
- *   IN PKSPIN_LOCK  Lock)
- */
-#define ExInterlockedPushEntrySList(_ListHead, \
-                                    _ListEntry, \
-                                    _Lock) \
-  InterlockedPushEntrySList(_ListHead, _ListEntry)
-
-NTKERNELAPI
-PLIST_ENTRY
-NTAPI
-ExInterlockedRemoveHeadList(
-  IN PLIST_ENTRY  ListHead,
-  IN PKSPIN_LOCK  Lock);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-ExIsProcessorFeaturePresent(
-  IN ULONG  ProcessorFeature);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-ExIsResourceAcquiredExclusiveLite(
-  IN PERESOURCE  Resource);
-
-NTKERNELAPI
-USHORT
-NTAPI
-ExIsResourceAcquiredLite(
-  IN PERESOURCE  Resource);
-
-NTKERNELAPI
-ULONG
-NTAPI
-ExIsResourceAcquiredSharedLite(
-  IN PERESOURCE  Resource);
-
-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
-ExRaiseAccessViolation(
-  VOID);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExRaiseDatatypeMisalignment(
-  VOID);
-
-DECLSPEC_NORETURN
-NTKERNELAPI
-VOID
-NTAPI
-ExRaiseStatus(
-  IN NTSTATUS  Status);
-
-NTKERNELAPI
-PVOID
-NTAPI
-ExRegisterCallback(
-  IN PCALLBACK_OBJECT  CallbackObject,
-  IN PCALLBACK_FUNCTION  CallbackFunction,
-  IN PVOID  CallbackContext);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-ExReinitializeResourceLite(
-  IN PERESOURCE  Resource);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExReleaseResourceForThreadLite(
-  IN PERESOURCE  Resource,
-  IN ERESOURCE_THREAD  ResourceThreadId);
-
-NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseResourceLite(
-  IN PERESOURCE  Resource);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExSetResourceOwnerPointer(
-  IN PERESOURCE  Resource,
-  IN PVOID  OwnerPointer);
-
-NTKERNELAPI
-ULONG
-NTAPI
-ExSetTimerResolution(
-  IN ULONG  DesiredTime,
-  IN BOOLEAN  SetResolution);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExSystemTimeToLocalTime(
-  IN PLARGE_INTEGER  SystemTime,
-  OUT PLARGE_INTEGER  LocalTime);
-
-NTKERNELAPI
-VOID
-NTAPI
-ExUnregisterCallback(
-  IN PVOID  CbRegistration);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-ExUuidCreate(
-  OUT UUID  *Uuid);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-ExVerifySuite(
-  IN SUITE_TYPE  SuiteType);
-
-#ifdef DBG
-
-#define PAGED_CODE() { \
-  if (KeGetCurrentIrql() > APC_LEVEL) { \
-    KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
-    ASSERT(FALSE); \
-  } \
-}
-
-#else
-
-#define PAGED_CODE()
-
-#endif
-
-NTKERNELAPI
-VOID
-NTAPI
-ProbeForRead(
-  IN CONST VOID  *Address,
-  IN SIZE_T  Length,
-  IN ULONG  Alignment);
-
-NTKERNELAPI
-VOID
-NTAPI
-ProbeForWrite(
-  IN PVOID  Address,
-  IN SIZE_T  Length,
-  IN ULONG  Alignment);
-
-
-
-/** Configuration manager routines **/
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-CmRegisterCallback(
-  IN PEX_CALLBACK_FUNCTION  Function,
-  IN PVOID  Context,
-  IN OUT PLARGE_INTEGER  Cookie);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-CmUnRegisterCallback(
-  IN LARGE_INTEGER  Cookie);
-
-
-
-/** Filesystem runtime library routines **/
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlIsTotalDeviceFailure(
-  IN NTSTATUS  Status);
-
-
-
-/** Hardware abstraction layer routines **/
-
-NTHALAPI
-BOOLEAN
-NTAPI
-HalMakeBeep(
-  IN ULONG Frequency);
-
-NTKERNELAPI
-VOID
-FASTCALL
-HalExamineMBR(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN ULONG  SectorSize,
-  IN ULONG  MBRTypeIdentifier,
-  OUT PVOID  *Buffer);
-
-VOID
-NTAPI
-HalPutDmaAdapter(
-    PADAPTER_OBJECT AdapterObject
-);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoAllocateAdapterChannel(
-    IN PADAPTER_OBJECT AdapterObject,
-    IN PDEVICE_OBJECT DeviceObject,
-    IN ULONG NumberOfMapRegisters,
-    IN PDRIVER_CONTROL ExecutionRoutine,
-    IN PVOID Context
-);
-
-/** Io access routines **/
-
-#if !defined(_M_AMD64)
-NTHALAPI
-VOID
-NTAPI
-READ_PORT_BUFFER_UCHAR(
-  IN PUCHAR  Port,
-  IN PUCHAR  Buffer,
-  IN ULONG  Count);
-
-NTHALAPI
-VOID
-NTAPI
-READ_PORT_BUFFER_ULONG(
-  IN PULONG  Port,
-  IN PULONG  Buffer,
-  IN ULONG  Count);
-
-NTHALAPI
-VOID
-NTAPI
-READ_PORT_BUFFER_USHORT(
-  IN PUSHORT  Port,
-  IN PUSHORT  Buffer,
-  IN ULONG  Count);
-
-NTHALAPI
-UCHAR
-NTAPI
-READ_PORT_UCHAR(
-  IN PUCHAR  Port);
-
-NTHALAPI
-ULONG
-NTAPI
-READ_PORT_ULONG(
-  IN PULONG  Port);
-
-NTHALAPI
-USHORT
-NTAPI
-READ_PORT_USHORT(
-  IN PUSHORT  Port);
-
-NTKERNELAPI
-VOID
-NTAPI
-READ_REGISTER_BUFFER_UCHAR(
-  IN PUCHAR  Register,
-  IN PUCHAR  Buffer,
-  IN ULONG  Count);
-
-NTKERNELAPI
-VOID
-NTAPI
-READ_REGISTER_BUFFER_ULONG(
-  IN PULONG  Register,
-  IN PULONG  Buffer,
-  IN ULONG  Count);
-
-NTKERNELAPI
-VOID
-NTAPI
-READ_REGISTER_BUFFER_USHORT(
-  IN PUSHORT  Register,
-  IN PUSHORT  Buffer,
-  IN ULONG  Count);
-
-NTKERNELAPI
-UCHAR
-NTAPI
-READ_REGISTER_UCHAR(
-  IN PUCHAR  Register);
-
-NTKERNELAPI
-ULONG
-NTAPI
-READ_REGISTER_ULONG(
-  IN PULONG  Register);
-
-NTKERNELAPI
-USHORT
-NTAPI
-READ_REGISTER_USHORT(
-  IN PUSHORT  Register);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_BUFFER_UCHAR(
-  IN PUCHAR  Port,
-  IN PUCHAR  Buffer,
-  IN ULONG  Count);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_BUFFER_ULONG(
-  IN PULONG  Port,
-  IN PULONG  Buffer,
-  IN ULONG  Count);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_BUFFER_USHORT(
-  IN PUSHORT  Port,
-  IN PUSHORT  Buffer,
-  IN ULONG  Count);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_UCHAR(
-  IN PUCHAR  Port,
-  IN UCHAR  Value);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_ULONG(
-  IN PULONG  Port,
-  IN ULONG  Value);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_USHORT(
-  IN PUSHORT  Port,
-  IN USHORT  Value);
-
-NTKERNELAPI
-VOID
-NTAPI
-WRITE_REGISTER_BUFFER_UCHAR(
-  IN PUCHAR  Register,
-  IN PUCHAR  Buffer,
-  IN ULONG  Count);
-
-NTKERNELAPI
-VOID
-NTAPI
-WRITE_REGISTER_BUFFER_ULONG(
-  IN PULONG  Register,
-  IN PULONG  Buffer,
-  IN ULONG  Count);
-
-NTKERNELAPI
-VOID
+NTKERNELAPI
+VOID
 NTAPI
 WRITE_REGISTER_BUFFER_USHORT(
   IN PUSHORT  Register,
@@ -8300,6 +6951,18 @@ IoAcquireRemoveLockEx(
     } \
 }
 
+#ifndef DMA_MACROS_DEFINED
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAllocateAdapterChannel(
+    IN PADAPTER_OBJECT AdapterObject,
+    IN PDEVICE_OBJECT DeviceObject,
+    IN ULONG NumberOfMapRegisters,
+    IN PDRIVER_CONTROL ExecutionRoutine,
+    IN PVOID Context);
+#endif
+
 NTKERNELAPI
 VOID
 NTAPI
@@ -8816,12 +7479,6 @@ NTAPI
 IoGetRelatedDeviceObject(
   IN PFILE_OBJECT  FileObject);
 
-NTKERNELAPI
-ULONG
-NTAPI
-IoGetRemainingStackSize(
-  VOID);
-
 NTKERNELAPI
 VOID
 NTAPI
@@ -8829,6 +7486,20 @@ IoGetStackLimits(
   OUT PULONG_PTR  LowLimit,
   OUT PULONG_PTR  HighLimit);
 
+FORCEINLINE
+ULONG_PTR
+IoGetRemainingStackSize(
+  VOID
+)
+{
+    ULONG_PTR End, Begin;
+    ULONG_PTR Result;
+
+    IoGetStackLimits(&Begin, &End);
+    Result = (ULONG_PTR)(&End) - Begin;
+    return Result;
+}
+
 NTKERNELAPI
 VOID
 NTAPI
@@ -9009,6 +7680,15 @@ IoReadDiskSignature(
   IN ULONG  BytesPerSector,
   OUT PDISK_SIGNATURE  Signature);
 
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoReadPartitionTable(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN BOOLEAN  ReturnRecognizedPartitions,
+  OUT struct _DRIVE_LAYOUT_INFORMATION  **PartitionBuffer);
+
 NTKERNELAPI
 NTSTATUS
 NTAPI
@@ -9271,6 +7951,15 @@ IoSetHardErrorOrVerifyDevice(
   (_Irp)->Tail.Overlay.CurrentStackLocation--; \
 }
 
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoSetPartitionInformation(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN ULONG  PartitionNumber,
+  IN ULONG  PartitionType);
+
 NTKERNELAPI
 NTSTATUS
 NTAPI
@@ -9538,6 +8227,16 @@ NTAPI
 IoWriteErrorLogEntry(
   IN PVOID  ElEntry);
 
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoWritePartitionTable(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN ULONG  SectorsPerTrack,
+  IN ULONG  NumberOfHeads,
+  IN struct _DRIVE_LAYOUT_INFORMATION  *PartitionBuffer);
+
 NTKERNELAPI
 NTSTATUS
 NTAPI
@@ -9597,12 +8296,14 @@ KeAreApcsDisabled(
   VOID);
 
 NTKERNELAPI
+DECLSPEC_NORETURN
 VOID
 NTAPI
 KeBugCheck(
   IN ULONG  BugCheckCode);
 
 NTKERNELAPI
+DECLSPEC_NORETURN
 VOID
 NTAPI
 KeBugCheckEx(
@@ -9658,6 +8359,13 @@ KeEnterCriticalRegion(
 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
 
+NTKERNELAPI
+VOID
+NTAPI
+KeFlushQueuedDpcs(
+    VOID
+);
+
 NTHALAPI
 VOID
 NTAPI
@@ -9776,6 +8484,13 @@ NTAPI
 KeQueryPriorityThread(
   IN PRKTHREAD  Thread);
 
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryRuntimeThread(
+  IN PKTHREAD Thread,
+  OUT PULONG UserTime);
+
 #if !defined(_M_AMD64)
 NTKERNELAPI
 ULONGLONG
@@ -10421,19 +9136,6 @@ MmMarkPhysicalMemoryAsGood(
   IN PPHYSICAL_ADDRESS  StartAddress,
   IN OUT PLARGE_INTEGER  NumberOfBytes);
 
-/*
- * 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
 PVOID
 NTAPI
@@ -10512,7 +9214,7 @@ MmLockPagableImageSection(
  * MmLockPagableCodeSection(
  *   IN PVOID  AddressWithinSection)
  */
-#define MmLockPagableCodeSection MmLockPagableDataSection
+#define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
 
 NTKERNELAPI
 VOID
@@ -10612,7 +9314,6 @@ MmUnsecureVirtualMemory(
 }
 
 #define MmGetProcedureAddress(Address) (Address)
-#define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
 
 NTKERNELAPI
 VOID
@@ -10650,7 +9351,7 @@ MmSecureVirtualMemory(
   IN ULONG  ProbeMode);
 
 NTKERNELAPI
-ULONG
+SIZE_T
 NTAPI
 MmSizeOfMdl(
   IN PVOID  Base,
@@ -11287,52 +9988,171 @@ ZwOpenTimer(
 NTSYSAPI
 NTSTATUS
 NTAPI
-ZwQueryInformationFile(
+ZwQueryInformationFile(
+  IN HANDLE  FileHandle,
+  OUT PIO_STATUS_BLOCK  IoStatusBlock,
+  OUT PVOID  FileInformation,
+  IN ULONG  Length,
+  IN FILE_INFORMATION_CLASS  FileInformationClass);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryKey(
+  IN HANDLE  KeyHandle,
+  IN KEY_INFORMATION_CLASS  KeyInformationClass,
+  OUT PVOID  KeyInformation,
+  IN ULONG  Length,
+  OUT PULONG  ResultLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQuerySymbolicLinkObject(
+  IN HANDLE  LinkHandle,
+  IN OUT PUNICODE_STRING  LinkTarget,
+  OUT PULONG  ReturnedLength  OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryValueKey(
+  IN HANDLE  KeyHandle,
+  IN PUNICODE_STRING  ValueName,
+  IN KEY_VALUE_INFORMATION_CLASS  KeyValueInformationClass,
+  OUT PVOID  KeyValueInformation,
+  IN ULONG  Length,
+  OUT PULONG  ResultLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtReadFile(
+  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
+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);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtSetEvent(
+  IN HANDLE  EventHandle,
+  OUT PLONG  PreviousState  OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetEvent(
+  IN HANDLE  EventHandle,
+  OUT PLONG  PreviousState  OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationFile(
   IN HANDLE  FileHandle,
   OUT PIO_STATUS_BLOCK  IoStatusBlock,
-  OUT PVOID  FileInformation,
+  IN PVOID  FileInformation,
   IN ULONG  Length,
   IN FILE_INFORMATION_CLASS  FileInformationClass);
 
 NTSYSAPI
 NTSTATUS
 NTAPI
-ZwQueryKey(
-  IN HANDLE  KeyHandle,
-  IN KEY_INFORMATION_CLASS  KeyInformationClass,
-  OUT PVOID  KeyInformation,
-  IN ULONG  Length,
-  OUT PULONG  ResultLength);
+ZwSetInformationThread(
+  IN HANDLE  ThreadHandle,
+  IN THREADINFOCLASS  ThreadInformationClass,
+  IN PVOID  ThreadInformation,
+  IN ULONG  ThreadInformationLength);
 
 NTSYSAPI
 NTSTATUS
 NTAPI
-ZwQuerySymbolicLinkObject(
-  IN HANDLE  LinkHandle,
-  IN OUT PUNICODE_STRING  LinkTarget,
-  OUT PULONG  ReturnedLength  OPTIONAL);
+ZwSetTimer(
+  IN HANDLE  TimerHandle,
+  IN PLARGE_INTEGER  DueTime,
+  IN PTIMER_APC_ROUTINE  TimerApcRoutine  OPTIONAL,
+  IN PVOID  TimerContext  OPTIONAL,
+  IN BOOLEAN  WakeTimer,
+  IN LONG  Period  OPTIONAL,
+  OUT PBOOLEAN  PreviousState  OPTIONAL);
 
 NTSYSAPI
 NTSTATUS
 NTAPI
-ZwQueryValueKey(
+ZwSetValueKey(
   IN HANDLE  KeyHandle,
   IN PUNICODE_STRING  ValueName,
-  IN KEY_VALUE_INFORMATION_CLASS  KeyValueInformationClass,
-  OUT PVOID  KeyValueInformation,
-  IN ULONG  Length,
-  OUT PULONG  ResultLength);
+  IN ULONG  TitleIndex  OPTIONAL,
+  IN ULONG  Type,
+  IN PVOID  Data,
+  IN ULONG  DataSize);
+
+/* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
+#define AT_EXTENDABLE_FILE                0x00002000
+#define AT_RESERVED                       0x20000000
+#define AT_ROUND_TO_PAGE                  0x40000000
 
 NTSYSCALLAPI
 NTSTATUS
 NTAPI
-NtReadFile(
+NtUnmapViewOfSection(
+  IN HANDLE  ProcessHandle,
+  IN PVOID  BaseAddress);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwUnmapViewOfSection(
+  IN HANDLE  ProcessHandle,
+  IN PVOID  BaseAddress);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtWaitForSingleObject(
+  IN HANDLE  ObjectHandle,
+  IN BOOLEAN  Alertable,
+  IN PLARGE_INTEGER  TimeOut  OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwWaitForSingleObject(
+  IN HANDLE  ObjectHandle,
+  IN BOOLEAN  Alertable,
+  IN PLARGE_INTEGER  TimeOut  OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtWriteFile(
   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 PVOID  Buffer,
   IN ULONG  Length,
   IN PLARGE_INTEGER  ByteOffset  OPTIONAL,
   IN PULONG  Key  OPTIONAL);
@@ -11340,400 +10160,703 @@ NtReadFile(
 NTSYSAPI
 NTSTATUS
 NTAPI
-ZwReadFile(
+ZwWriteFile(
   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 PVOID  Buffer,
   IN ULONG  Length,
   IN PLARGE_INTEGER  ByteOffset  OPTIONAL,
   IN PULONG  Key  OPTIONAL);
 
-NTSYSCALLAPI
+
+
+/** Power management support routines **/
+
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtSetEvent(
-  IN HANDLE  EventHandle,
-  OUT PLONG  PreviousState  OPTIONAL);
+PoCallDriver(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN OUT PIRP  Irp);
 
-NTSYSAPI
+NTKERNELAPI
+PULONG
+NTAPI
+PoRegisterDeviceForIdleDetection(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  ConservationIdleTime,
+  IN ULONG  PerformanceIdleTime,
+  IN DEVICE_POWER_STATE  State);
+
+NTKERNELAPI
+PVOID
+NTAPI
+PoRegisterSystemState(
+  IN PVOID  StateHandle,
+  IN EXECUTION_STATE  Flags);
+
+NTKERNELAPI
 NTSTATUS
 NTAPI
-ZwSetEvent(
-  IN HANDLE  EventHandle,
-  OUT PLONG  PreviousState  OPTIONAL);
+PoRequestPowerIrp(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN UCHAR  MinorFunction,
+  IN POWER_STATE  PowerState,
+  IN PREQUEST_POWER_COMPLETE  CompletionFunction,
+  IN PVOID  Context,
+  OUT PIRP  *Irp OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoRequestShutdownEvent(
+  OUT PVOID  *Event);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoSetDeviceBusy(
+  PULONG  IdlePointer);
+
+#define PoSetDeviceBusy(IdlePointer) \
+ ((void)(*(IdlePointer) = 0))
+
+NTKERNELAPI
+POWER_STATE
+NTAPI
+PoSetPowerState(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN POWER_STATE_TYPE  Type,
+  IN POWER_STATE  State);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoSetSystemState(
+  IN EXECUTION_STATE  Flags);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoStartNextPowerIrp(
+  IN PIRP  Irp);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoUnregisterSystemState(
+  IN PVOID  StateHandle);
+
+
+
+/** WMI library support routines **/
+
+NTSTATUS
+NTAPI
+WmiCompleteRequest(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN PIRP  Irp,
+  IN NTSTATUS  Status,
+  IN ULONG  BufferUsed,
+  IN CCHAR  PriorityBoost);
+
+NTSTATUS
+NTAPI
+WmiFireEvent(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN LPGUID  Guid,
+  IN ULONG  InstanceIndex,
+  IN ULONG  EventDataSize,
+  IN PVOID  EventData);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+WmiQueryTraceInformation(
+  IN TRACE_INFORMATION_CLASS  TraceInformationClass,
+  OUT PVOID  TraceInformation,
+  IN ULONG  TraceInformationLength,
+  OUT PULONG  RequiredLength OPTIONAL,
+  IN PVOID  Buffer OPTIONAL);
+
+NTSTATUS
+NTAPI
+WmiSystemControl(
+  IN PWMILIB_CONTEXT  WmiLibInfo,
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN PIRP  Irp,
+  OUT PSYSCTL_IRP_DISPOSITION  IrpDisposition);
+
+NTKERNELAPI
+NTSTATUS
+DDKCDECLAPI
+WmiTraceMessage(
+  IN TRACEHANDLE  LoggerHandle,
+  IN ULONG  MessageFlags,
+  IN LPGUID  MessageGuid,
+  IN USHORT  MessageNumber,
+  IN ...);
+
+#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
+
+
+/** Kernel debugger routines **/
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KdDisableDebugger(
+  VOID);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KdEnableDebugger(
+  VOID);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KdRefreshDebuggerNotPresent(
+    VOID
+);
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KdChangeOption(
+  IN KD_OPTION Option,
+  IN ULONG InBufferBytes OPTIONAL,
+  IN PVOID InBuffer,
+  IN ULONG OutBufferBytes OPTIONAL,
+  OUT PVOID OutBuffer,
+  OUT PULONG OutBufferNeeded OPTIONAL);
+#endif
 
-NTSYSAPI
-NTSTATUS
+VOID
 NTAPI
-ZwSetInformationFile(
-  IN HANDLE  FileHandle,
-  OUT PIO_STATUS_BLOCK  IoStatusBlock,
-  IN PVOID  FileInformation,
-  IN ULONG  Length,
-  IN FILE_INFORMATION_CLASS  FileInformationClass);
+DbgBreakPoint(
+  VOID);
 
 NTSYSAPI
-NTSTATUS
+VOID
 NTAPI
-ZwSetInformationThread(
-  IN HANDLE  ThreadHandle,
-  IN THREADINFOCLASS  ThreadInformationClass,
-  IN PVOID  ThreadInformation,
-  IN ULONG  ThreadInformationLength);
+DbgBreakPointWithStatus(
+  IN ULONG  Status);
+
+ULONG
+DDKCDECLAPI
+DbgPrint(
+  IN PCCH  Format,
+  IN ...);
 
 NTSYSAPI
-NTSTATUS
+ULONG
+DDKCDECLAPI
+DbgPrintEx(
+  IN ULONG  ComponentId,
+  IN ULONG  Level,
+  IN PCCH  Format,
+  IN ...);
+
+ULONG
 NTAPI
-ZwSetTimer(
-  IN HANDLE  TimerHandle,
-  IN PLARGE_INTEGER  DueTime,
-  IN PTIMER_APC_ROUTINE  TimerApcRoutine  OPTIONAL,
-  IN PVOID  TimerContext  OPTIONAL,
-  IN BOOLEAN  WakeTimer,
-  IN LONG  Period  OPTIONAL,
-  OUT PBOOLEAN  PreviousState  OPTIONAL);
+vDbgPrintEx(
+  IN ULONG ComponentId,
+  IN ULONG Level,
+  IN PCCH Format,
+  IN va_list ap);
 
-NTSYSAPI
-NTSTATUS
+ULONG
 NTAPI
-ZwSetValueKey(
-  IN HANDLE  KeyHandle,
-  IN PUNICODE_STRING  ValueName,
-  IN ULONG  TitleIndex  OPTIONAL,
-  IN ULONG  Type,
-  IN PVOID  Data,
-  IN ULONG  DataSize);
+vDbgPrintExWithPrefix(
+  IN PCCH Prefix,
+  IN ULONG ComponentId,
+  IN ULONG Level,
+  IN PCCH Format,
+  IN va_list ap);
 
-/* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
-#define AT_EXTENDABLE_FILE                0x00002000
-#define AT_RESERVED                       0x20000000
-#define AT_ROUND_TO_PAGE                  0x40000000
+NTKERNELAPI
+ULONG
+DDKCDECLAPI
+DbgPrintReturnControlC(
+  IN PCCH  Format,
+  IN ...);
 
-NTSYSCALLAPI
-NTSTATUS
+ULONG
 NTAPI
-NtUnmapViewOfSection(
-  IN HANDLE  ProcessHandle,
-  IN PVOID  BaseAddress);
+DbgPrompt(
+    IN PCCH Prompt,
+    OUT PCH Response,
+    IN ULONG MaximumResponseLength
+);
 
-NTSYSAPI
+NTKERNELAPI
 NTSTATUS
 NTAPI
-ZwUnmapViewOfSection(
-  IN HANDLE  ProcessHandle,
-  IN PVOID  BaseAddress);
+DbgQueryDebugFilterState(
+  IN ULONG  ComponentId,
+  IN ULONG  Level);
 
-NTSYSCALLAPI
+NTKERNELAPI
 NTSTATUS
 NTAPI
-NtWaitForSingleObject(
-  IN HANDLE  ObjectHandle,
-  IN BOOLEAN  Alertable,
-  IN PLARGE_INTEGER  TimeOut  OPTIONAL);
+DbgSetDebugFilterState(
+  IN ULONG  ComponentId,
+  IN ULONG  Level,
+  IN BOOLEAN  State);
 
-NTSYSAPI
-NTSTATUS
+#if DBG
+
+#define KdPrint(_x_) DbgPrint _x_
+#define KdPrintEx(_x_) DbgPrintEx _x_
+#define KdBreakPoint() DbgBreakPoint()
+#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
+
+#else /* !DBG */
+
+#define KdPrint(_x_)
+#define KdPrintEx(_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(_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
+
+/** Stuff from winnt4.h */
+
+#ifndef DMA_MACROS_DEFINED
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+BOOLEAN
 NTAPI
-ZwWaitForSingleObject(
-  IN HANDLE  ObjectHandle,
-  IN BOOLEAN  Alertable,
-  IN PLARGE_INTEGER  TimeOut  OPTIONAL);
+IoFlushAdapterBuffers(
+    IN PADAPTER_OBJECT AdapterObject,
+    IN PMDL Mdl,
+    IN PVOID MapRegisterBase,
+    IN PVOID CurrentVa,
+    IN ULONG Length,
+    IN BOOLEAN WriteToDevice);
 
-NTSYSCALLAPI
-NTSTATUS
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
 NTAPI
-NtWriteFile(
-  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);
+IoFreeAdapterChannel(
+    IN PADAPTER_OBJECT AdapterObject);
 
-NTSYSAPI
-NTSTATUS
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
 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);
+IoFreeMapRegisters(
+    IN PADAPTER_OBJECT AdapterObject,
+    IN PVOID MapRegisterBase,
+    IN ULONG NumberOfMapRegisters);
 
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+PHYSICAL_ADDRESS
+NTAPI
+IoMapTransfer(
+    IN PADAPTER_OBJECT AdapterObject,
+    IN PMDL Mdl,
+    IN PVOID MapRegisterBase,
+    IN PVOID CurrentVa,
+    IN OUT PULONG Length,
+    IN BOOLEAN WriteToDevice);
 
 
-/** Power management support routines **/
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
+#endif // !defined(DMA_MACROS_DEFINED)
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-PoCallDriver(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN OUT PIRP  Irp);
+IoAssignResources(
+  IN PUNICODE_STRING  RegistryPath,
+  IN PUNICODE_STRING  DriverClassName  OPTIONAL,
+  IN PDRIVER_OBJECT  DriverObject,
+  IN PDEVICE_OBJECT  DeviceObject  OPTIONAL,
+  IN PIO_RESOURCE_REQUIREMENTS_LIST  RequestedResources,
+  IN OUT PCM_RESOURCE_LIST  *AllocatedResources);
 
 NTKERNELAPI
-PULONG
+NTSTATUS
 NTAPI
-PoRegisterDeviceForIdleDetection(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN ULONG  ConservationIdleTime,
-  IN ULONG  PerformanceIdleTime,
-  IN DEVICE_POWER_STATE  State);
+IoAttachDeviceByPointer(
+  IN PDEVICE_OBJECT  SourceDevice,
+  IN PDEVICE_OBJECT  TargetDevice);
 
 NTKERNELAPI
-PVOID
+BOOLEAN
 NTAPI
-PoRegisterSystemState(
-  IN PVOID  StateHandle,
-  IN EXECUTION_STATE  Flags);
+MmIsNonPagedSystemAddressValid(
+  IN PVOID  VirtualAddress);
+
+#if defined(_AMD64_) || defined(_IA64_)
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerDivide(
+    IN LARGE_INTEGER Dividend,
+    IN LARGE_INTEGER Divisor,
+    IN OUT PLARGE_INTEGER Remainder)
+{
+    LARGE_INTEGER ret;
+    ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
+    if (Remainder)
+        Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
+    return ret;
+}
+#else
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlLargeIntegerDivide(
+  IN LARGE_INTEGER  Dividend,
+  IN LARGE_INTEGER  Divisor,
+  IN OUT PLARGE_INTEGER  Remainder);
+#endif
 
 NTKERNELAPI
-NTSTATUS
+INTERLOCKED_RESULT
 NTAPI
-PoRequestPowerIrp(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN UCHAR  MinorFunction,
-  IN POWER_STATE  PowerState,
-  IN PREQUEST_POWER_COMPLETE  CompletionFunction,
-  IN PVOID  Context,
-  OUT PIRP  *Irp OPTIONAL);
+ExInterlockedDecrementLong(
+  IN PLONG  Addend,
+  IN PKSPIN_LOCK  Lock);
 
 NTKERNELAPI
-NTSTATUS
+ULONG
 NTAPI
-PoRequestShutdownEvent(
-  OUT PVOID  *Event);
+ExInterlockedExchangeUlong(
+  IN PULONG  Target,
+  IN ULONG  Value,
+  IN PKSPIN_LOCK  Lock);
 
 NTKERNELAPI
+INTERLOCKED_RESULT
+NTAPI
+ExInterlockedIncrementLong(
+  IN PLONG  Addend,
+  IN PKSPIN_LOCK  Lock);
+
+NTHALAPI
 VOID
 NTAPI
-PoSetDeviceBusy(
-  PULONG  IdlePointer);
+HalAcquireDisplayOwnership(
+  IN PHAL_RESET_DISPLAY_PARAMETERS  ResetDisplayParameters);
 
-#define PoSetDeviceBusy(IdlePointer) \
- ((void)(*(IdlePointer) = 0))
+NTHALAPI
+NTSTATUS
+NTAPI
+HalAllocateAdapterChannel(
+  IN PADAPTER_OBJECT  AdapterObject,
+  IN PWAIT_CONTEXT_BLOCK  Wcb,
+  IN ULONG  NumberOfMapRegisters,
+  IN PDRIVER_CONTROL  ExecutionRoutine);
 
-NTKERNELAPI
-POWER_STATE
+NTHALAPI
+PVOID
 NTAPI
-PoSetPowerState(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN POWER_STATE_TYPE  Type,
-  IN POWER_STATE  State);
+HalAllocateCommonBuffer(
+  IN PADAPTER_OBJECT  AdapterObject,
+  IN ULONG  Length,
+  OUT PPHYSICAL_ADDRESS  LogicalAddress,
+  IN BOOLEAN  CacheEnabled);
 
-NTKERNELAPI
-VOID
+NTHALAPI
+NTSTATUS
 NTAPI
-PoSetSystemState(
-  IN EXECUTION_STATE  Flags);
+HalAssignSlotResources(
+  IN PUNICODE_STRING  RegistryPath,
+  IN PUNICODE_STRING  DriverClassName,
+  IN PDRIVER_OBJECT  DriverObject,
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN INTERFACE_TYPE  BusType,
+  IN ULONG  BusNumber,
+  IN ULONG  SlotNumber,
+  IN OUT PCM_RESOURCE_LIST  *AllocatedResources);
 
-NTKERNELAPI
+NTHALAPI
 VOID
 NTAPI
-PoStartNextPowerIrp(
-  IN PIRP  Irp);
+HalFreeCommonBuffer(
+  IN PADAPTER_OBJECT  AdapterObject,
+  IN ULONG  Length,
+  IN PHYSICAL_ADDRESS  LogicalAddress,
+  IN PVOID  VirtualAddress,
+  IN BOOLEAN  CacheEnabled);
 
-NTKERNELAPI
-VOID
+NTHALAPI
+PADAPTER_OBJECT
 NTAPI
-PoUnregisterSystemState(
-  IN PVOID  StateHandle);
+HalGetAdapter(
+  IN PDEVICE_DESCRIPTION  DeviceDescription,
+  IN OUT PULONG  NumberOfMapRegisters);
 
+NTHALAPI
+ULONG
+NTAPI
+HalGetBusData(
+  IN BUS_DATA_TYPE  BusDataType,
+  IN ULONG  BusNumber,
+  IN ULONG  SlotNumber,
+  IN PVOID  Buffer,
+  IN ULONG  Length);
 
+NTHALAPI
+ULONG
+NTAPI
+HalGetBusDataByOffset(
+  IN BUS_DATA_TYPE  BusDataType,
+  IN ULONG  BusNumber,
+  IN ULONG  SlotNumber,
+  IN PVOID  Buffer,
+  IN ULONG  Offset,
+  IN ULONG  Length);
 
-/** WMI library support routines **/
+NTHALAPI
+ULONG
+NTAPI
+HalGetDmaAlignmentRequirement(
+  VOID);
 
-NTSTATUS
+NTHALAPI
+ULONG
 NTAPI
-WmiCompleteRequest(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN PIRP  Irp,
-  IN NTSTATUS  Status,
-  IN ULONG  BufferUsed,
-  IN CCHAR  PriorityBoost);
+HalGetInterruptVector(
+  IN INTERFACE_TYPE  InterfaceType,
+  IN ULONG  BusNumber,
+  IN ULONG  BusInterruptLevel,
+  IN ULONG  BusInterruptVector,
+  OUT PKIRQL  Irql,
+  OUT PKAFFINITY  Affinity);
 
-NTSTATUS
+NTHALAPI
+ULONG
 NTAPI
-WmiFireEvent(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN LPGUID  Guid,
-  IN ULONG  InstanceIndex,
-  IN ULONG  EventDataSize,
-  IN PVOID  EventData);
+HalReadDmaCounter(
+  IN PADAPTER_OBJECT  AdapterObject);
 
-NTKERNELAPI
-NTSTATUS
+NTHALAPI
+ULONG
 NTAPI
-WmiQueryTraceInformation(
-  IN TRACE_INFORMATION_CLASS  TraceInformationClass,
-  OUT PVOID  TraceInformation,
-  IN ULONG  TraceInformationLength,
-  OUT PULONG  RequiredLength OPTIONAL,
-  IN PVOID  Buffer OPTIONAL);
+HalSetBusData(
+  IN BUS_DATA_TYPE  BusDataType,
+  IN ULONG  BusNumber,
+  IN ULONG  SlotNumber,
+  IN PVOID  Buffer,
+  IN ULONG  Length);
 
-NTSTATUS
+NTHALAPI
+ULONG
 NTAPI
-WmiSystemControl(
-  IN PWMILIB_CONTEXT  WmiLibInfo,
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN PIRP  Irp,
-  OUT PSYSCTL_IRP_DISPOSITION  IrpDisposition);
+HalSetBusDataByOffset(
+  IN BUS_DATA_TYPE  BusDataType,
+  IN ULONG  BusNumber,
+  IN ULONG  SlotNumber,
+  IN PVOID  Buffer,
+  IN ULONG  Offset,
+  IN ULONG  Length);
 
-NTKERNELAPI
-NTSTATUS
-DDKCDECLAPI
-WmiTraceMessage(
-  IN TRACEHANDLE  LoggerHandle,
-  IN ULONG  MessageFlags,
-  IN LPGUID  MessageGuid,
-  IN USHORT  MessageNumber,
-  IN ...);
+NTHALAPI
+BOOLEAN
+NTAPI
+HalTranslateBusAddress(
+  IN INTERFACE_TYPE  InterfaceType,
+  IN ULONG  BusNumber,
+  IN PHYSICAL_ADDRESS  BusAddress,
+  IN OUT PULONG  AddressSpace,
+  OUT PPHYSICAL_ADDRESS  TranslatedAddress);
 
-#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
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerEqualToZero(
+  IN LARGE_INTEGER  Operand);
 
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerGreaterOrEqualToZero(
+  IN LARGE_INTEGER  Operand);
 
-/** Kernel debugger routines **/
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerGreaterThan(
+  IN LARGE_INTEGER  Operand1,
+  IN LARGE_INTEGER  Operand2);
 
-NTKERNELAPI
-NTSTATUS
+NTSYSAPI
+BOOLEAN
 NTAPI
-KdDisableDebugger(
-  VOID);
+RtlLargeIntegerGreaterThanOrEqualTo(
+  IN LARGE_INTEGER  Operand1,
+  IN LARGE_INTEGER  Operand2);
 
-NTKERNELAPI
-NTSTATUS
+NTSYSAPI
+BOOLEAN
 NTAPI
-KdEnableDebugger(
-  VOID);
+RtlLargeIntegerGreaterThanZero(
+  IN LARGE_INTEGER  Operand);
 
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
-NTKERNELAPI
-NTSTATUS
+NTSYSAPI
+BOOLEAN
 NTAPI
-KdChangeOption(
-  IN KD_OPTION Option,
-  IN ULONG InBufferBytes OPTIONAL,
-  IN PVOID InBuffer,
-  IN ULONG OutBufferBytes OPTIONAL,
-  OUT PVOID OutBuffer,
-  OUT PULONG OutBufferNeeded OPTIONAL);
-#endif
+RtlLargeIntegerLessOrEqualToZero(
+  IN LARGE_INTEGER  Operand);
 
-VOID
+NTSYSAPI
+BOOLEAN
 NTAPI
-DbgBreakPoint(
-  VOID);
+RtlLargeIntegerLessThan(
+  IN LARGE_INTEGER  Operand1,
+  IN LARGE_INTEGER  Operand2);
 
 NTSYSAPI
-VOID
+BOOLEAN
 NTAPI
-DbgBreakPointWithStatus(
-  IN ULONG  Status);
+RtlLargeIntegerLessThanOrEqualTo(
+  IN LARGE_INTEGER  Operand1,
+  IN LARGE_INTEGER  Operand2);
 
-ULONG
-DDKCDECLAPI
-DbgPrint(
-  IN PCCH  Format,
-  IN ...);
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerLessThanZero(
+  IN LARGE_INTEGER  Operand);
 
-ULONG
-DDKCDECLAPI
-DbgPrintEx(
-  IN ULONG  ComponentId,
-  IN ULONG  Level,
-  IN PCCH  Format,
-  IN ...);
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlLargeIntegerNegate(
+  IN LARGE_INTEGER  Subtrahend);
 
-ULONG
+NTSYSAPI
+BOOLEAN
 NTAPI
-vDbgPrintEx(
-  IN ULONG ComponentId,
-  IN ULONG Level,
-  IN LPCSTR Format,
-  IN va_list ap);
+RtlLargeIntegerNotEqualTo(
+  IN LARGE_INTEGER  Operand1,
+  IN LARGE_INTEGER  Operand2);
 
-ULONG
+NTSYSAPI
+BOOLEAN
 NTAPI
-vDbgPrintExWithPrefix(
-  IN LPCSTR Prefix,
-  IN ULONG ComponentId,
-  IN ULONG Level,
-  IN LPCSTR Format,
-  IN va_list ap);
+RtlLargeIntegerNotEqualToZero(
+  IN LARGE_INTEGER  Operand);
 
-NTKERNELAPI
-ULONG
-DDKCDECLAPI
-DbgPrintReturnControlC(
-  IN PCH  Format,
-  IN ...);
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlLargeIntegerShiftLeft(
+  IN LARGE_INTEGER  LargeInteger,
+  IN CCHAR  ShiftCount);
 
-NTKERNELAPI
-BOOLEAN
+NTSYSAPI
+LARGE_INTEGER
 NTAPI
-DbgQueryDebugFilterState(
-  IN ULONG  ComponentId,
-  IN ULONG  Level);
+RtlLargeIntegerShiftRight(
+  IN LARGE_INTEGER  LargeInteger,
+  IN CCHAR  ShiftCount);
 
-NTKERNELAPI
-NTSTATUS
+NTSYSAPI
+LARGE_INTEGER
 NTAPI
-DbgSetDebugFilterState(
-  IN ULONG  ComponentId,
-  IN ULONG  Level,
-  IN BOOLEAN  State);
+RtlLargeIntegerSubtract(
+  IN LARGE_INTEGER  Minuend,
+  IN LARGE_INTEGER  Subtrahend);
 
-#ifdef DBG
 
-#define KdPrint(_x_) DbgPrint _x_
-#define KdPrintEx(_x_) DbgPrintEx _x_
-#define KdBreakPoint() DbgBreakPoint()
-#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
+/*
+ * ULONG
+ * COMPUTE_PAGES_SPANNED(
+ *   IN PVOID  Va,
+ *   IN ULONG  Size)
+ */
+#define COMPUTE_PAGES_SPANNED(Va, \
+                              Size) \
+  (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
 
-#else /* !DBG */
 
-#define KdPrint(_x_)
-#define KdPrintEx(_x_)
-#define KdBreakPoint()
-#define KdBreakPointWithStatus(s)
+/*
+** Architecture specific structures
+*/
 
-#endif /* !DBG */
+#ifdef _X86_
 
-#if defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
+NTKERNELAPI
+INTERLOCKED_RESULT
+FASTCALL
+Exfi386InterlockedIncrementLong(
+  IN PLONG  Addend);
 
-extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent;
-extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled;
-#define KD_DEBUGGER_ENABLED     *KdDebuggerEnabled
-#define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
+NTKERNELAPI
+INTERLOCKED_RESULT
+FASTCALL
+Exfi386InterlockedDecrementLong(
+  IN PLONG  Addend);
 
-#else
+NTKERNELAPI
+ULONG
+FASTCALL
+Exfi386InterlockedExchangeUlong(
+  IN PULONG  Target,
+  IN ULONG  Value);
 
-extern BOOLEAN KdDebuggerNotPresent;
-extern BOOLEAN KdDebuggerEnabled;
-#define KD_DEBUGGER_ENABLED     KdDebuggerEnabled
-#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
+#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
+#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
+#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
 
+#endif /* _X86_ */
+    
+#ifdef _M_ARM
+//
+// NT-ARM is not documented
+//
+#include <armddk.h>   
 #endif
 
 #ifdef __cplusplus