- Update KTHREAD and KUSER_SHARED_DATA to latest versions. This should make 2K3 drive...
[reactos.git] / reactos / w32api / include / ddk / winddk.h
index ed7e8f2..e7dc0f7 100644 (file)
@@ -34,10 +34,11 @@ extern "C" {
 /*
 ** Definitions specific to this Device Driver Kit
 */
-#define DDKAPI __attribute__((stdcall))
-#define DDKFASTAPI __attribute__((fastcall))
-#define DDKCDECLAPI __attribute__((cdecl))
+#define DDKAPI __stdcall
+#define DDKFASTAPI __fastcall
+#define DDKCDECLAPI __cdecl
 
+/* FIXME: REMOVE THIS UNCOMPATIBLE CRUFT!!! */
 #if defined(_NTOSKRNL_)
 #ifndef NTOSAPI
 #define NTOSAPI DECL_EXPORT
@@ -52,6 +53,16 @@ extern "C" {
 #define DECLARE_INTERNAL_OBJECT2(x,y) struct _##x; typedef struct _##x *P##y;
 #endif
 
+#if defined(_NTHAL_)
+#ifndef NTHALAPI
+#define NTHALAPI DECL_EXPORT
+#endif
+#else
+#ifndef NTHALAPI
+#define NTHALAPI DECL_IMPORT
+#endif
+#endif
+
 /* Pseudo modifiers for parameters */
 #define IN
 #define OUT
@@ -63,6 +74,7 @@ extern "C" {
 
 #define RESTRICTED_POINTER
 #define POINTER_ALIGNMENT
+#define DECLSPEC_ADDRSAFE
 
 #ifdef NONAMELESSUNION
 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
@@ -72,6 +84,18 @@ 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
+
 /*
 ** Forward declarations
 */
@@ -91,6 +115,8 @@ struct _SECTION_OBJECT;
 struct _IO_STATUS_BLOCK;
 struct _DEVICE_DESCRIPTION;
 struct _SCATTER_GATHER_LIST;
+struct _DRIVE_LAYOUT_INFORMATION;
+struct _DRIVE_LAYOUT_INFORMATION_EX;
 
 DECLARE_INTERNAL_OBJECT(ADAPTER_OBJECT)
 DECLARE_INTERNAL_OBJECT(DMA_ADAPTER)
@@ -101,6 +127,8 @@ DECLARE_INTERNAL_OBJECT(SECTION_OBJECT)
 /* FIXME: Unknown definitions */
 struct _SET_PARTITION_INFORMATION_EX;
 typedef ULONG WAIT_TYPE;
+#define WaitAll 0
+#define WaitAny 1
 typedef HANDLE TRACEHANDLE;
 typedef PVOID PWMILIB_CONTEXT;
 typedef PVOID PSYSCTL_IRP_DISPOSITION;
@@ -110,22 +138,40 @@ typedef ULONG LOGICAL;
 /*
 ** Routines specific to this DDK
 */
-
-#define TAG(_a, _b, _c, _d) (ULONG) \
-       (((_a) << 0) + ((_b) << 8) + ((_c) << 16) + ((_d) << 24))
+#define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )   
 
 static __inline struct _KPCR * KeGetCurrentKPCR(
   VOID)
 {
   ULONG Value;
-
-  __asm__ __volatile__ ("movl %%fs:0x18, %0\n\t"
+#if defined(__GNUC__)
+  __asm__ __volatile__ ("movl %%fs:0x1C, %0\n\t"
          : "=r" (Value)
     : /* no inputs */
   );
+#elif defined(_MSC_VER)
+  __asm mov eax, fs:[1Ch]
+  __asm mov [Value], eax
+#endif
   return (struct _KPCR *) Value;
 }
 
+static __inline struct _KPRCB * KeGetCurrentPrcb(
+  VOID)
+{
+  ULONG Value;
+#if defined(__GNUC__)
+  __asm__ __volatile__ ("movl %%fs:0x20, %0\n\t"
+         : "=r" (Value)
+    : /* no inputs */
+  );
+#elif defined(_MSC_VER)
+  __asm mov eax, fs:[20h]
+  __asm mov [Value], eax
+#endif
+  return (struct _KPRCB *) Value;
+}
+
 /*
 ** Simple structures
 */
@@ -134,7 +180,7 @@ typedef LONG KPRIORITY;
 typedef UCHAR KIRQL, *PKIRQL;
 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
 typedef ULONG KAFFINITY, *PKAFFINITY;
-typedef CCHAR KPROCESSOR_MODE;
+typedef UCHAR KPROCESSOR_MODE;
 
 typedef enum _MODE {
   KernelMode,
@@ -142,9 +188,18 @@ 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;
@@ -153,11 +208,24 @@ 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 _DRIVE_LAYOUT_INFORMATION *PDRIVE_LAYOUT_INFORMATION;
-typedef struct _DRIVE_LAYOUT_INFORMATION_EX *PDRIVE_LAYOUT_INFORMATION_EX;
+typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
+typedef struct _BUS_HANDLER *PBUS_HANDLER;
+typedef struct _PEB *PPEB;
+typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
 
 /* Constants */
-#define        MAXIMUM_PROCESSORS                32
+#define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )  
+#define ZwCurrentProcess() NtCurrentProcess()         
+#define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )   
+#define ZwCurrentThread() NtCurrentThread()      
+
+#define DPFLTR_ERROR_LEVEL                  0
+#define DPFLTR_WARNING_LEVEL                1
+#define DPFLTR_TRACE_LEVEL                  2
+#define DPFLTR_INFO_LEVEL                   3
+#define DPFLTR_MASK                         0x80000000
+
+#define MAXIMUM_PROCESSORS                32
 
 #define MAXIMUM_WAIT_OBJECTS              64
 
@@ -289,31 +357,107 @@ typedef struct _DRIVE_LAYOUT_INFORMATION_EX *PDRIVE_LAYOUT_INFORMATION_EX;
    SYNCHRONIZE)
 /* end winnt.h */
 
+#define OBJECT_TYPE_CREATE (0x0001)
+#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
+
 #define DIRECTORY_QUERY (0x0001)
 #define DIRECTORY_TRAVERSE (0x0002)
 #define DIRECTORY_CREATE_OBJECT (0x0004)
 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
-  
+
+#define EVENT_QUERY_STATE (0x0001)
+#define EVENT_MODIFY_STATE (0x0002)
+#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
+
+#define SEMAPHORE_QUERY_STATE (0x0001)
+#define SEMAPHORE_MODIFY_STATE (0x0002)
+#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
+
+#define THREAD_ALERT (0x0004)
+
 /* Exported object types */
 extern NTOSAPI POBJECT_TYPE ExDesktopObjectType;
 extern NTOSAPI POBJECT_TYPE ExEventObjectType;
 extern NTOSAPI POBJECT_TYPE ExSemaphoreObjectType;
 extern NTOSAPI POBJECT_TYPE ExWindowStationObjectType;
-extern NTOSAPI POBJECT_TYPE IoAdapterObjectType;
 extern NTOSAPI ULONG IoDeviceHandlerObjectSize;
 extern NTOSAPI POBJECT_TYPE IoDeviceHandlerObjectType;
 extern NTOSAPI POBJECT_TYPE IoDeviceObjectType;
 extern NTOSAPI POBJECT_TYPE IoDriverObjectType;
 extern NTOSAPI POBJECT_TYPE IoFileObjectType;
+extern NTOSAPI POBJECT_TYPE PsThreadType;
 extern NTOSAPI POBJECT_TYPE LpcPortObjectType;
 extern NTOSAPI POBJECT_TYPE MmSectionObjectType;
 extern NTOSAPI POBJECT_TYPE SeTokenObjectType;
 
 extern NTOSAPI CCHAR KeNumberProcessors;
-extern NTOSAPI PHAL_DISPATCH_TABLE HalDispatchTable;
-extern NTOSAPI PHAL_PRIVATE_DISPATCH_TABLE HalPrivateDispatchTable;
 
+#define PROCESSOR_FEATURE_MAX 64
+#define MAX_WOW64_SHARED_ENTRIES 16
+
+typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE 
+{
+    StandardDesign,
+    NEC98x86,
+    EndAlternatives
+} ALTERNATIVE_ARCHITECTURE_TYPE;
+
+typedef struct _KSYSTEM_TIME 
+{
+    ULONG LowPart;
+    LONG High1Time;
+    LONG High2Time;
+} KSYSTEM_TIME, *PKSYSTEM_TIME;
+
+typedef struct _KUSER_SHARED_DATA 
+{
+    ULONG TickCountLowDeprecated;
+    ULONG TickCountMultiplier;
+    volatile KSYSTEM_TIME InterruptTime;
+    volatile KSYSTEM_TIME SystemTime;
+    volatile KSYSTEM_TIME TimeZoneBias;
+    USHORT ImageNumberLow;
+    USHORT ImageNumberHigh;
+    WCHAR NtSystemRoot[260];
+    ULONG MaxStackTraceDepth;
+    ULONG CryptoExponent;
+    ULONG TimeZoneId;
+    ULONG LargePageMinimum;
+    ULONG Reserved2[7];
+    NT_PRODUCT_TYPE NtProductType;
+    BOOLEAN ProductTypeIsValid;
+    ULONG NtMajorVersion;
+    ULONG NtMinorVersion;
+    BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
+    ULONG Reserved1;
+    ULONG Reserved3;
+    volatile ULONG TimeSlip;
+    ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
+    LARGE_INTEGER SystemExpirationDate;
+    ULONG SuiteMask;
+    BOOLEAN KdDebuggerEnabled;
+    volatile ULONG ActiveConsoleId;
+    volatile ULONG DismountCount;
+    ULONG ComPlusPackage;
+    ULONG LastSystemRITEventTickCount;
+    ULONG NumberOfPhysicalPages;
+    BOOLEAN SafeBootMode;
+    ULONG TraceLogging;
+    ULONG Fill0;
+    ULONGLONG TestRetInstruction;
+    ULONG SystemCall;
+    ULONG SystemCallReturn;
+    ULONGLONG SystemCallPad[3];
+    union {
+        volatile KSYSTEM_TIME TickCount;
+        volatile ULONG64 TickCountQuad;
+    };
+    ULONG Cookie;
+    LONGLONG ConsoleSessionForegroundProcessId;
+    ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
+    ULONG UserModeGlobalLogging;
+} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
 
 /*
 ** IRP function codes
@@ -487,13 +631,13 @@ typedef NTSTATUS
   VOID);
 
 typedef NTSTATUS
-(DDKAPI *PDRIVER_ENTRY)( 
-  IN struct _DRIVER_OBJECT  *DriverObject, 
-  IN PUNICODE_STRING  RegistryPath); 
+(DDKAPI *PDRIVER_ENTRY)(
+  IN struct _DRIVER_OBJECT  *DriverObject,
+  IN PUNICODE_STRING  RegistryPath);
 
 typedef NTSTATUS
 (DDKAPI *PDRIVER_INITIALIZE)(
-  IN struct _DRIVER_OBJECT  *DriverObject, 
+  IN struct _DRIVER_OBJECT  *DriverObject,
   IN PUNICODE_STRING  RegistryPath);
 
 typedef BOOLEAN
@@ -507,12 +651,12 @@ typedef VOID
   IN PVOID  Context);
 
 typedef VOID
-(DDKAPI *PDRIVER_REINITIALIZE)( 
-  IN struct _DRIVER_OBJECT  *DriverObject, 
-  IN PVOID  Context, 
-  IN ULONG  Count); 
+(DDKAPI *PDRIVER_REINITIALIZE)(
+  IN struct _DRIVER_OBJECT  *DriverObject,
+  IN PVOID  Context,
+  IN ULONG  Count);
 
-typedef NTSTATUS
+typedef VOID
 (DDKAPI *PDRIVER_STARTIO)(
   IN struct _DEVICE_OBJECT  *DeviceObject,
   IN struct _IRP  *Irp);
@@ -522,8 +666,8 @@ typedef BOOLEAN
   IN PVOID  SynchronizeContext);
 
 typedef VOID
-(DDKAPI *PDRIVER_UNLOAD)( 
-  IN struct _DRIVER_OBJECT  *DriverObject); 
+(DDKAPI *PDRIVER_UNLOAD)(
+  IN struct _DRIVER_OBJECT  *DriverObject);
 
 
 
@@ -531,30 +675,30 @@ typedef VOID
 ** Plug and Play structures
 */
 
-typedef VOID DDKAPI
-(*PINTERFACE_REFERENCE)(
+typedef VOID
+(DDKAPI *PINTERFACE_REFERENCE)(
   PVOID  Context);
 
-typedef VOID DDKAPI
-(*PINTERFACE_DEREFERENCE)(
+typedef VOID
+(DDKAPI *PINTERFACE_DEREFERENCE)(
   PVOID Context);
 
-typedef BOOLEAN DDKAPI
-(*PTRANSLATE_BUS_ADDRESS)(
+typedef BOOLEAN
+(DDKAPI *PTRANSLATE_BUS_ADDRESS)(
   IN PVOID  Context,
   IN PHYSICAL_ADDRESS  BusAddress,
   IN ULONG  Length,
   IN OUT PULONG  AddressSpace,
   OUT PPHYSICAL_ADDRESS  TranslatedAddress);
 
-typedef struct _DMA_ADAPTER* DDKAPI
-(*PGET_DMA_ADAPTER)(
+typedef struct _DMA_ADAPTER*
+(DDKAPI *PGET_DMA_ADAPTER)(
   IN PVOID  Context,
   IN struct _DEVICE_DESCRIPTION  *DeviceDescriptor,
   OUT PULONG  NumberOfMapRegisters);
 
-typedef ULONG DDKAPI
-(*PGET_SET_DEVICE_DATA)(
+typedef ULONG
+(DDKAPI *PGET_SET_DEVICE_DATA)(
   IN PVOID  Context,
   IN ULONG  DataType,
   IN PVOID  Buffer,
@@ -637,11 +781,11 @@ typedef struct _INTERFACE {
   PVOID  Context;
   PINTERFACE_REFERENCE  InterfaceReference;
   PINTERFACE_DEREFERENCE  InterfaceDereference;
-} INTERFACE, *PINTERFACE; 
+} INTERFACE, *PINTERFACE;
 
 typedef struct _PLUGPLAY_NOTIFICATION_HEADER {
-  USHORT  Version; 
-  USHORT  Size; 
+  USHORT  Version;
+  USHORT  Size;
   GUID  Event;
 } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
 
@@ -730,17 +874,16 @@ typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
 
 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES    0x00000001
 
-typedef NTSTATUS DDKAPI
-(*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE)(
+typedef NTSTATUS
+(DDKAPI *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE)(
   IN PVOID NotificationStructure,
   IN PVOID Context);
 
-typedef VOID DDKAPI
-(*PDEVICE_CHANGE_COMPLETE_CALLBACK)(
+typedef VOID
+(DDKAPI *PDEVICE_CHANGE_COMPLETE_CALLBACK)(
   IN PVOID Context);
 
 
-
 /*
 ** System structures
 */
@@ -754,12 +897,12 @@ typedef VOID DDKAPI
 #define DUPLICATE_SAME_ATTRIBUTES         0x00000004
 /* end winnt.h */
 
-typedef struct _OBJECT_NAME_INFORMATION {               
-  UNICODE_STRING  Name;                                
-} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;   
+typedef struct _OBJECT_NAME_INFORMATION {
+  UNICODE_STRING  Name;
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
 
-typedef VOID DDKAPI
-(*PIO_APC_ROUTINE)(
+typedef VOID
+(DDKAPI *PIO_APC_ROUTINE)(
   IN PVOID ApcContext,
   IN PIO_STATUS_BLOCK IoStatusBlock,
   IN ULONG Reserved);
@@ -772,43 +915,46 @@ typedef struct _IO_STATUS_BLOCK {
   ULONG_PTR  Information;
 } IO_STATUS_BLOCK;
 
-typedef VOID DDKAPI
-(*PKNORMAL_ROUTINE)(
+typedef VOID
+(DDKAPI *PKNORMAL_ROUTINE)(
   IN PVOID  NormalContext,
   IN PVOID  SystemArgument1,
   IN PVOID  SystemArgument2);
 
-typedef VOID DDKAPI
-(*PKKERNEL_ROUTINE)(
+typedef VOID
+(DDKAPI *PKKERNEL_ROUTINE)(
   IN struct _KAPC  *Apc,
   IN OUT PKNORMAL_ROUTINE  *NormalRoutine,
   IN OUT PVOID  *NormalContext,
   IN OUT PVOID  *SystemArgument1,
   IN OUT PVOID  *SystemArgument2);
 
-typedef VOID DDKAPI
-(*PKRUNDOWN_ROUTINE)(
+typedef VOID
+(DDKAPI *PKRUNDOWN_ROUTINE)(
   IN struct _KAPC  *Apc);
 
-typedef BOOLEAN DDKAPI
-(*PKTRANSFER_ROUTINE)(
+typedef BOOLEAN
+(DDKAPI *PKTRANSFER_ROUTINE)(
   VOID);
 
-typedef struct _KAPC {
-  CSHORT  Type;
-  CSHORT  Size;
-  ULONG  Spare0;
-  struct _KTHREAD  *Thread;
-  LIST_ENTRY  ApcListEntry;
-  PKKERNEL_ROUTINE  KernelRoutine;
-  PKRUNDOWN_ROUTINE  RundownRoutine;
-  PKNORMAL_ROUTINE  NormalRoutine;
-  PVOID  NormalContext;
-  PVOID  SystemArgument1;
-  PVOID  SystemArgument2;
-  CCHAR  ApcStateIndex;
-  KPROCESSOR_MODE  ApcMode;
-  BOOLEAN  Inserted;
+typedef struct _KAPC
+{
+    UCHAR Type;
+    UCHAR SpareByte0;
+    UCHAR Size;
+    UCHAR SpareByte1;
+    ULONG SpareLong0;
+    struct _KTHREAD *Thread;
+    LIST_ENTRY ApcListEntry;
+    PKKERNEL_ROUTINE KernelRoutine;
+    PKRUNDOWN_ROUTINE RundownRoutine;
+    PKNORMAL_ROUTINE NormalRoutine;
+    PVOID NormalContext;
+    PVOID SystemArgument1;
+    PVOID SystemArgument2;
+    CCHAR ApcStateIndex;
+    KPROCESSOR_MODE ApcMode;
+    BOOLEAN Inserted;
 } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
 
 typedef struct _KDEVICE_QUEUE {
@@ -867,19 +1013,12 @@ typedef struct _KDPC {
   PVOID  DeferredContext;
   PVOID  SystemArgument1;
   PVOID  SystemArgument2;
-  PULONG_PTR  Lock;
+  PVOID  DpcData;
 } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
 
-typedef struct _KDPC_DATA {
-  LIST_ENTRY  DpcListHead;
-  ULONG  DpcLock;
-  ULONG  DpcQueueDepth;
-  ULONG  DpcCount;
-} KDPC_DATA, *PKDPC_DATA;
-
 typedef struct _WAIT_CONTEXT_BLOCK {
   KDEVICE_QUEUE_ENTRY  WaitQueueEntry;
-  struct _DRIVER_CONTROL  *DeviceRoutine;
+  PDRIVER_CONTROL  DeviceRoutine;
   PVOID  DeviceContext;
   ULONG  NumberOfMapRegisters;
   PVOID  DeviceObject;
@@ -887,13 +1026,33 @@ typedef struct _WAIT_CONTEXT_BLOCK {
   PKDPC  BufferChainingDpc;
 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
 
-typedef struct _DISPATCHER_HEADER {
-  UCHAR  Type;
-  UCHAR  Absolute;
-  UCHAR  Size;
-  UCHAR  Inserted;
-  LONG  SignalState;
-  LIST_ENTRY  WaitListHead;
+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 {
@@ -913,6 +1072,26 @@ typedef struct _FAST_MUTEX {
   ULONG  OldIrql;
 } FAST_MUTEX, *PFAST_MUTEX;
 
+typedef struct _KGATE
+{
+    DISPATCHER_HEADER Header;
+} KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE;
+
+typedef struct _KGUARDED_MUTEX
+{
+    LONG Count;
+    struct _KTHREAD* Owner;
+    ULONG Contention;
+    KGATE Gate;
+    union {
+        struct {
+            SHORT KernelApcDisable;
+            SHORT SpecialApcDisable;
+        };
+        ULONG CombinedApcDisable;
+    };
+} KGUARDED_MUTEX, *PKGUARDED_MUTEX, *RESTRICTED_POINTER PRKGUARDED_MUTEX;
+
 typedef struct _KTIMER {
   DISPATCHER_HEADER  Header;
   ULARGE_INTEGER  DueTime;
@@ -1054,25 +1233,10 @@ enum
    IRP_RETRY_IO_COMPLETION = 0x4000
 };
 
-
-typedef struct _DRIVE_LAYOUT_INFORMATION_MBR {
-  ULONG  Signature;
-} DRIVE_LAYOUT_INFORMATION_MBR, *PDRIVE_LAYOUT_INFORMATION_MBR;
-
-typedef struct _DRIVE_LAYOUT_INFORMATION_GPT {
-  GUID  DiskId;
-  LARGE_INTEGER  StartingUsableOffset;
-  LARGE_INTEGER  UsableLength;
-  ULONG  MaxPartitionCount;
-} DRIVE_LAYOUT_INFORMATION_GPT, *PDRIVE_LAYOUT_INFORMATION_GPT;
-
-typedef struct _PARTITION_INFORMATION_MBR {
-  UCHAR  PartitionType;
-  BOOLEAN  BootIndicator;
-  BOOLEAN  RecognizedPartition;
-  ULONG  HiddenSectors;
-} PARTITION_INFORMATION_MBR, *PPARTITION_INFORMATION_MBR;
-
+#define IRP_QUOTA_CHARGED                 0x01
+#define IRP_ALLOCATED_MUST_SUCCEED        0x02
+#define IRP_ALLOCATED_FIXED_SIZE          0x04
+#define IRP_LOOKASIDE_ALLOCATION          0x08
 
 typedef struct _BOOTDISK_INFORMATION {
   LONGLONG  BootPartitionOffset;
@@ -1396,14 +1560,14 @@ typedef struct _CM_KEYBOARD_DEVICE_DATA {
   USHORT  KeyboardFlags;
 } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA;
 
-#define KEYBOARD_INSERT_ON                0x80
-#define KEYBOARD_CAPS_LOCK_ON             0x40
-#define KEYBOARD_NUM_LOCK_ON              0x20
-#define KEYBOARD_SCROLL_LOCK_ON           0x10
-#define KEYBOARD_ALT_KEY_DOWN             0x08
-#define KEYBOARD_CTRL_KEY_DOWN            0x04
-#define KEYBOARD_LEFT_SHIFT_DOWN          0x02
-#define KEYBOARD_RIGHT_SHIFT_DOWN         0x01
+#define KEYBOARD_INSERT_ON                0x08
+#define KEYBOARD_CAPS_LOCK_ON             0x04
+#define KEYBOARD_NUM_LOCK_ON              0x02
+#define KEYBOARD_SCROLL_LOCK_ON           0x01
+#define KEYBOARD_ALT_KEY_DOWN             0x80
+#define KEYBOARD_CTRL_KEY_DOWN            0x40
+#define KEYBOARD_LEFT_SHIFT_DOWN          0x20
+#define KEYBOARD_RIGHT_SHIFT_DOWN         0x10
 
 typedef struct _CM_MCA_POS_DATA {
   USHORT  AdapterId;
@@ -1445,6 +1609,50 @@ typedef struct _CM_SERIAL_DEVICE_DATA {
   ULONG  BaudClock;
 } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
 
+typedef struct _VM_COUNTERS 
+{
+    SIZE_T PeakVirtualSize;
+    SIZE_T VirtualSize;
+    ULONG PageFaultCount;
+    SIZE_T PeakWorkingSetSize;
+    SIZE_T WorkingSetSize;
+    SIZE_T QuotaPeakPagedPoolUsage;
+    SIZE_T QuotaPagedPoolUsage;
+    SIZE_T QuotaPeakNonPagedPoolUsage;
+    SIZE_T QuotaNonPagedPoolUsage;
+    SIZE_T PagefileUsage;
+    SIZE_T PeakPagefileUsage;
+} VM_COUNTERS, *PVM_COUNTERS;
+
+typedef struct _VM_COUNTERS_EX 
+{
+    SIZE_T PeakVirtualSize;
+    SIZE_T VirtualSize;
+    ULONG PageFaultCount;
+    SIZE_T PeakWorkingSetSize;
+    SIZE_T WorkingSetSize;
+    SIZE_T QuotaPeakPagedPoolUsage;
+    SIZE_T QuotaPagedPoolUsage;
+    SIZE_T QuotaPeakNonPagedPoolUsage;
+    SIZE_T QuotaNonPagedPoolUsage;
+    SIZE_T PagefileUsage;
+    SIZE_T PeakPagefileUsage;
+    SIZE_T PrivateUsage;
+} VM_COUNTERS_EX, *PVM_COUNTERS_EX;
+
+typedef struct _POOLED_USAGE_AND_LIMITS
+{
+    SIZE_T PeakPagedPoolUsage;
+    SIZE_T PagedPoolUsage;
+    SIZE_T PagedPoolLimit;
+    SIZE_T PeakNonPagedPoolUsage;
+    SIZE_T NonPagedPoolUsage;
+    SIZE_T NonPagedPoolLimit;
+    SIZE_T PeakPagefileUsage;
+    SIZE_T PagefileUsage;
+    SIZE_T PagefileLimit;
+} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
+
 /* IO_RESOURCE_DESCRIPTOR.Option */
 
 #define IO_RESOURCE_PREFERRED             0x01
@@ -1519,6 +1727,36 @@ typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
   IO_RESOURCE_LIST  List[1];
 } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
 
+typedef struct _IO_ERROR_LOG_PACKET {
+  UCHAR  MajorFunctionCode;
+  UCHAR  RetryCount;
+  USHORT  DumpDataSize;
+  USHORT  NumberOfStrings;
+  USHORT  StringOffset;
+  USHORT  EventCategory;
+  NTSTATUS  ErrorCode;
+  ULONG  UniqueErrorValue;
+  NTSTATUS  FinalStatus;
+  ULONG  SequenceNumber;
+  ULONG  IoControlCode;
+  LARGE_INTEGER  DeviceOffset;
+  ULONG  DumpData[1];
+} IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
+
+typedef struct _IO_ERROR_LOG_MESSAGE {
+  USHORT  Type;
+  USHORT  Size;
+  USHORT  DriverNameLength;
+  LARGE_INTEGER  TimeStamp;
+  ULONG  DriverNameOffset;
+  IO_ERROR_LOG_PACKET  EntryData;
+} IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
+
+#define ERROR_LOG_LIMIT_SIZE               240
+#define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
+                                            sizeof(IO_ERROR_LOG_PACKET) + \
+                                            (sizeof(WCHAR) * 40))
+
 typedef struct _CONTROLLER_OBJECT {
   CSHORT  Type;
   CSHORT  Size;
@@ -1560,7 +1798,7 @@ typedef struct _DEVICE_DESCRIPTION {
   BOOLEAN  IgnoreCount;
   BOOLEAN  Reserved1;
   BOOLEAN  Dma64BitAddresses;
-  ULONG  BusNumber; 
+  ULONG  BusNumber;
   ULONG  DmaChannel;
   INTERFACE_TYPE  InterfaceType;
   DMA_WIDTH  DmaWidth;
@@ -1592,21 +1830,21 @@ typedef struct _VPB {
 
 /* DEVICE_OBJECT.Flags */
 
-#define DO_VERIFY_VOLUME                  0x00000002      
-#define DO_BUFFERED_IO                    0x00000004      
-#define DO_EXCLUSIVE                      0x00000008      
-#define DO_DIRECT_IO                      0x00000010      
-#define DO_MAP_IO_BUFFER                  0x00000020      
-#define DO_DEVICE_HAS_NAME                0x00000040      
-#define DO_DEVICE_INITIALIZING            0x00000080      
-#define DO_SYSTEM_BOOT_PARTITION          0x00000100      
-#define DO_LONG_TERM_REQUESTS             0x00000200      
-#define DO_NEVER_LAST_DEVICE              0x00000400      
-#define DO_SHUTDOWN_REGISTERED            0x00000800      
-#define DO_BUS_ENUMERATED_DEVICE          0x00001000      
-#define DO_POWER_PAGABLE                  0x00002000      
-#define DO_POWER_INRUSH                   0x00004000      
-#define DO_LOW_PRIORITY_FILESYSTEM        0x00010000      
+#define DO_VERIFY_VOLUME                  0x00000002
+#define DO_BUFFERED_IO                    0x00000004
+#define DO_EXCLUSIVE                      0x00000008
+#define DO_DIRECT_IO                      0x00000010
+#define DO_MAP_IO_BUFFER                  0x00000020
+#define DO_DEVICE_HAS_NAME                0x00000040
+#define DO_DEVICE_INITIALIZING            0x00000080
+#define DO_SYSTEM_BOOT_PARTITION          0x00000100
+#define DO_LONG_TERM_REQUESTS             0x00000200
+#define DO_NEVER_LAST_DEVICE              0x00000400
+#define DO_SHUTDOWN_REGISTERED            0x00000800
+#define DO_BUS_ENUMERATED_DEVICE          0x00001000
+#define DO_POWER_PAGABLE                  0x00002000
+#define DO_POWER_INRUSH                   0x00004000
+#define DO_LOW_PRIORITY_FILESYSTEM        0x00010000
 
 /* DEVICE_OBJECT.Characteristics */
 
@@ -1725,8 +1963,7 @@ typedef struct _DEVICE_OBJECT {
   USHORT  Spare1;
   struct _DEVOBJ_EXTENSION  *DeviceObjectExtension;
   PVOID  Reserved;
-} DEVICE_OBJECT;
-typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
+} DEVICE_OBJECT, *PDEVICE_OBJECT;
 
 typedef enum _DEVICE_RELATION_TYPE {
   BusRelations,
@@ -1743,8 +1980,8 @@ typedef struct _DEVICE_RELATIONS {
 } DEVICE_RELATIONS, *PDEVICE_RELATIONS;
 
 typedef struct _SCATTER_GATHER_ELEMENT {
-  PHYSICAL_ADDRESS  Address;   
-  ULONG  Length;          
+  PHYSICAL_ADDRESS  Address;
+  ULONG  Length;
   ULONG_PTR  Reserved;
 } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
 
@@ -1789,35 +2026,35 @@ typedef struct _MDL {
   MDL_SYSTEM_VA               | \
   MDL_IO_SPACE)
 
-typedef VOID DDKAPI
-(*PPUT_DMA_ADAPTER)(
+typedef VOID
+(DDKAPI *PPUT_DMA_ADAPTER)(
   IN PDMA_ADAPTER  DmaAdapter);
 
-typedef PVOID DDKAPI
-(*PALLOCATE_COMMON_BUFFER)(
+typedef PVOID
+(DDKAPI *PALLOCATE_COMMON_BUFFER)(
   IN PDMA_ADAPTER  DmaAdapter,
   IN ULONG  Length,
   OUT PPHYSICAL_ADDRESS  LogicalAddress,
   IN BOOLEAN  CacheEnabled);
 
-typedef VOID DDKAPI
-(*PFREE_COMMON_BUFFER)(
+typedef VOID
+(DDKAPI *PFREE_COMMON_BUFFER)(
   IN PDMA_ADAPTER  DmaAdapter,
   IN ULONG  Length,
   IN PHYSICAL_ADDRESS  LogicalAddress,
   IN PVOID  VirtualAddress,
   IN BOOLEAN  CacheEnabled);
 
-typedef NTSTATUS DDKAPI
-(*PALLOCATE_ADAPTER_CHANNEL)(
+typedef NTSTATUS
+(DDKAPI *PALLOCATE_ADAPTER_CHANNEL)(
   IN PDMA_ADAPTER  DmaAdapter,
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  NumberOfMapRegisters,
   IN PDRIVER_CONTROL  ExecutionRoutine,
   IN PVOID  Context);
 
-typedef BOOLEAN DDKAPI
-(*PFLUSH_ADAPTER_BUFFERS)(
+typedef BOOLEAN
+(DDKAPI *PFLUSH_ADAPTER_BUFFERS)(
   IN PDMA_ADAPTER  DmaAdapter,
   IN PMDL  Mdl,
   IN PVOID  MapRegisterBase,
@@ -1825,18 +2062,18 @@ typedef BOOLEAN DDKAPI
   IN ULONG  Length,
   IN BOOLEAN  WriteToDevice);
 
-typedef VOID DDKAPI
-(*PFREE_ADAPTER_CHANNEL)(
+typedef VOID
+(DDKAPI *PFREE_ADAPTER_CHANNEL)(
   IN PDMA_ADAPTER  DmaAdapter);
 
-typedef VOID DDKAPI
-(*PFREE_MAP_REGISTERS)(
+typedef VOID
+(DDKAPI *PFREE_MAP_REGISTERS)(
   IN PDMA_ADAPTER  DmaAdapter,
   PVOID  MapRegisterBase,
   ULONG  NumberOfMapRegisters);
 
-typedef PHYSICAL_ADDRESS DDKAPI
-(*PMAP_TRANSFER)(
+typedef PHYSICAL_ADDRESS
+(DDKAPI *PMAP_TRANSFER)(
   IN PDMA_ADAPTER  DmaAdapter,
   IN PMDL  Mdl,
   IN PVOID  MapRegisterBase,
@@ -1844,16 +2081,16 @@ typedef PHYSICAL_ADDRESS DDKAPI
   IN OUT PULONG  Length,
   IN BOOLEAN  WriteToDevice);
 
-typedef ULONG DDKAPI
-(*PGET_DMA_ALIGNMENT)(
+typedef ULONG
+(DDKAPI *PGET_DMA_ALIGNMENT)(
   IN PDMA_ADAPTER  DmaAdapter);
 
-typedef ULONG DDKAPI
-(*PREAD_DMA_COUNTER)(
+typedef ULONG
+(DDKAPI *PREAD_DMA_COUNTER)(
   IN PDMA_ADAPTER  DmaAdapter);
 
-typedef NTSTATUS DDKAPI
-(*PGET_SCATTER_GATHER_LIST)(
+typedef NTSTATUS
+(DDKAPI *PGET_SCATTER_GATHER_LIST)(
   IN PDMA_ADAPTER  DmaAdapter,
   IN PDEVICE_OBJECT  DeviceObject,
   IN PMDL  Mdl,
@@ -1863,14 +2100,14 @@ typedef NTSTATUS DDKAPI
   IN PVOID  Context,
   IN BOOLEAN  WriteToDevice);
 
-typedef VOID DDKAPI
-(*PPUT_SCATTER_GATHER_LIST)(
+typedef VOID
+(DDKAPI *PPUT_SCATTER_GATHER_LIST)(
   IN PDMA_ADAPTER  DmaAdapter,
   IN PSCATTER_GATHER_LIST  ScatterGather,
   IN BOOLEAN  WriteToDevice);
 
-typedef NTSTATUS DDKAPI
-(*PCALCULATE_SCATTER_GATHER_LIST_SIZE)(
+typedef NTSTATUS
+(DDKAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)(
   IN PDMA_ADAPTER  DmaAdapter,
   IN PMDL  Mdl  OPTIONAL,
   IN PVOID  CurrentVa,
@@ -1878,8 +2115,8 @@ typedef NTSTATUS DDKAPI
   OUT PULONG  ScatterGatherListSize,
   OUT PULONG  pNumberOfMapRegisters  OPTIONAL);
 
-typedef NTSTATUS DDKAPI
-(*PBUILD_SCATTER_GATHER_LIST)(
+typedef NTSTATUS
+(DDKAPI *PBUILD_SCATTER_GATHER_LIST)(
   IN PDMA_ADAPTER  DmaAdapter,
   IN PDEVICE_OBJECT  DeviceObject,
   IN PMDL  Mdl,
@@ -1891,8 +2128,8 @@ typedef NTSTATUS DDKAPI
   IN PVOID  ScatterGatherBuffer,
   IN ULONG  ScatterGatherLength);
 
-typedef NTSTATUS DDKAPI
-(*PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(
+typedef NTSTATUS
+(DDKAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(
   IN PDMA_ADAPTER  DmaAdapter,
   IN PSCATTER_GATHER_LIST  ScatterGather,
   IN PMDL  OriginalMdl,
@@ -1923,6 +2160,391 @@ typedef struct _DMA_ADAPTER {
   PDMA_OPERATIONS  DmaOperations;
 } DMA_ADAPTER;
 
+
+typedef enum _ARBITER_REQUEST_SOURCE {
+  ArbiterRequestUndefined = -1,
+  ArbiterRequestLegacyReported,
+  ArbiterRequestHalReported,
+  ArbiterRequestLegacyAssigned,
+  ArbiterRequestPnpDetected,
+  ArbiterRequestPnpEnumerated
+} ARBITER_REQUEST_SOURCE;
+
+typedef enum _ARBITER_RESULT {
+  ArbiterResultUndefined = -1,
+  ArbiterResultSuccess,
+  ArbiterResultExternalConflict,
+  ArbiterResultNullRequest
+} ARBITER_RESULT;
+
+typedef enum _ARBITER_ACTION {
+  ArbiterActionTestAllocation,
+  ArbiterActionRetestAllocation,
+  ArbiterActionCommitAllocation,
+  ArbiterActionRollbackAllocation,
+  ArbiterActionQueryAllocatedResources,
+  ArbiterActionWriteReservedResources,
+  ArbiterActionQueryConflict,
+  ArbiterActionQueryArbitrate,
+  ArbiterActionAddReserved,
+  ArbiterActionBootAllocation
+} ARBITER_ACTION, *PARBITER_ACTION;
+
+typedef struct _ARBITER_CONFLICT_INFO {
+  PDEVICE_OBJECT  OwningObject;
+  ULONGLONG  Start;
+  ULONGLONG  End;
+} ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
+
+typedef struct _ARBITER_PARAMETERS {
+  union {
+    struct {
+      IN OUT PLIST_ENTRY  ArbitrationList;
+      IN ULONG  AllocateFromCount;
+      IN PCM_PARTIAL_RESOURCE_DESCRIPTOR  AllocateFrom;
+    } TestAllocation;
+
+    struct {
+      IN OUT PLIST_ENTRY  ArbitrationList;
+      IN ULONG  AllocateFromCount;
+      IN PCM_PARTIAL_RESOURCE_DESCRIPTOR  AllocateFrom;
+    } RetestAllocation;
+
+    struct {
+      IN OUT PLIST_ENTRY  ArbitrationList;
+    } BootAllocation;
+
+    struct {
+      OUT PCM_PARTIAL_RESOURCE_LIST  *AllocatedResources;
+    } QueryAllocatedResources;
+
+    struct {
+      IN PDEVICE_OBJECT  PhysicalDeviceObject;
+      IN PIO_RESOURCE_DESCRIPTOR  ConflictingResource;
+      OUT PULONG  ConflictCount;
+      OUT PARBITER_CONFLICT_INFO  *Conflicts;
+    } QueryConflict;
+
+    struct {
+      IN PLIST_ENTRY  ArbitrationList;
+    } QueryArbitrate;
+
+    struct {
+      IN PDEVICE_OBJECT  ReserveDevice;
+    } AddReserved;
+  } Parameters;
+} ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
+
+#define ARBITER_FLAG_BOOT_CONFIG 0x00000001
+
+typedef struct _ARBITER_LIST_ENTRY {
+  LIST_ENTRY  ListEntry;
+  ULONG  AlternativeCount;
+  PIO_RESOURCE_DESCRIPTOR  Alternatives;
+  PDEVICE_OBJECT  PhysicalDeviceObject;
+  ARBITER_REQUEST_SOURCE  RequestSource;
+  ULONG  Flags;
+  LONG_PTR  WorkSpace;
+  INTERFACE_TYPE  InterfaceType;
+  ULONG  SlotNumber;
+  ULONG  BusNumber;
+  PCM_PARTIAL_RESOURCE_DESCRIPTOR  Assignment;
+  PIO_RESOURCE_DESCRIPTOR  SelectedAlternative;
+  ARBITER_RESULT  Result;
+} ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY;
+
+typedef NTSTATUS
+(DDKAPI *PARBITER_HANDLER)(
+  IN PVOID  Context,
+  IN ARBITER_ACTION  Action,
+  IN OUT PARBITER_PARAMETERS  Parameters);
+
+#define ARBITER_PARTIAL 0x00000001
+
+typedef struct _ARBITER_INTERFACE {
+  USHORT  Size;
+  USHORT  Version;
+  PVOID  Context;
+  PINTERFACE_REFERENCE  InterfaceReference;
+  PINTERFACE_DEREFERENCE  InterfaceDereference;
+  PARBITER_HANDLER  ArbiterHandler;
+  ULONG  Flags;
+} ARBITER_INTERFACE, *PARBITER_INTERFACE;
+
+typedef enum _HAL_QUERY_INFORMATION_CLASS {
+  HalInstalledBusInformation,
+  HalProfileSourceInformation,
+  HalInformationClassUnused1,
+  HalPowerInformation,
+  HalProcessorSpeedInformation,
+  HalCallbackInformation,
+  HalMapRegisterInformation,
+  HalMcaLogInformation,
+  HalFrameBufferCachingInformation,
+  HalDisplayBiosInformation,
+  HalProcessorFeatureInformation,
+  HalNumaTopologyInterface,
+  HalErrorInformation,
+  HalCmcLogInformation,
+  HalCpeLogInformation,
+  HalQueryMcaInterface,
+  HalQueryAMLIIllegalIOPortAddresses,
+  HalQueryMaxHotPlugMemoryAddress,
+  HalPartitionIpiInterface,
+  HalPlatformInformation,
+  HalQueryProfileSourceList
+} HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
+
+typedef enum _HAL_SET_INFORMATION_CLASS {
+  HalProfileSourceInterval,
+  HalProfileSourceInterruptHandler,
+  HalMcaRegisterDriver,
+  HalKernelErrorHandler,
+  HalCmcRegisterDriver,
+  HalCpeRegisterDriver,
+  HalMcaLog,
+  HalCmcLog,
+  HalCpeLog,
+  HalGenerateCmcInterrupt
+} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
+
+/* Function Type Defintions for Dispatch Functions */
+
+typedef VOID
+(DDKAPI *PDEVICE_CONTROL_COMPLETION)(
+  IN struct _DEVICE_CONTROL_CONTEXT  *ControlContext);
+
+typedef struct _DEVICE_CONTROL_CONTEXT {
+  NTSTATUS  Status;
+  PDEVICE_HANDLER_OBJECT  DeviceHandler;
+  PDEVICE_OBJECT  DeviceObject;
+  ULONG  ControlCode;
+  PVOID  Buffer;
+  PULONG  BufferLength;
+  PVOID  Context;
+} DEVICE_CONTROL_CONTEXT, *PDEVICE_CONTROL_CONTEXT;
+
+typedef struct _PM_DISPATCH_TABLE {
+  ULONG  Signature;
+  ULONG  Version;
+  PVOID  Function[1];
+} PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
+
+typedef enum _RESOURCE_TRANSLATION_DIRECTION {
+  TranslateChildToParent,
+  TranslateParentToChild
+} RESOURCE_TRANSLATION_DIRECTION;
+
+typedef NTSTATUS
+(DDKAPI *PTRANSLATE_RESOURCE_HANDLER)(
+  IN PVOID  Context,
+  IN PCM_PARTIAL_RESOURCE_DESCRIPTOR  Source,
+  IN RESOURCE_TRANSLATION_DIRECTION  Direction,
+  IN ULONG  AlternativesCount,
+  IN IO_RESOURCE_DESCRIPTOR  Alternatives[],
+  IN PDEVICE_OBJECT  PhysicalDeviceObject,
+  OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR  Target);
+
+typedef NTSTATUS
+(DDKAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
+  IN PVOID  Context,
+  IN PIO_RESOURCE_DESCRIPTOR  Source,
+  IN PDEVICE_OBJECT  PhysicalDeviceObject,
+  OUT PULONG  TargetCount,
+  OUT PIO_RESOURCE_DESCRIPTOR  *Target);
+
+typedef struct _TRANSLATOR_INTERFACE {
+  USHORT  Size;
+  USHORT  Version;
+  PVOID  Context;
+  PINTERFACE_REFERENCE  InterfaceReference;
+  PINTERFACE_DEREFERENCE  InterfaceDereference;
+  PTRANSLATE_RESOURCE_HANDLER  TranslateResources;
+  PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER  TranslateResourceRequirements;
+} TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
+
+typedef NTSTATUS
+(DDKAPI *pHalDeviceControl)(
+  IN PDEVICE_HANDLER_OBJECT  DeviceHandler,
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  ControlCode,
+  IN OUT PVOID  Buffer OPTIONAL,
+  IN OUT PULONG  BufferLength OPTIONAL,
+  IN PVOID  Context,
+  IN PDEVICE_CONTROL_COMPLETION  CompletionRoutine);
+
+typedef VOID
+(DDKFASTAPI *pHalExamineMBR)(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN ULONG  MBRTypeIdentifier,
+  OUT PVOID  *Buffer);
+
+typedef VOID
+(DDKFASTAPI *pHalIoAssignDriveLetters)(
+  IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
+  IN PSTRING NtDeviceName,
+  OUT PUCHAR NtSystemPath,
+  OUT PSTRING NtSystemPathString);
+
+typedef NTSTATUS
+(DDKFASTAPI *pHalIoReadPartitionTable)(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN BOOLEAN  ReturnRecognizedPartitions,
+  OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
+
+typedef NTSTATUS
+(DDKFASTAPI *pHalIoSetPartitionInformation)(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN ULONG  PartitionNumber,
+  IN ULONG  PartitionType);
+
+typedef NTSTATUS
+(DDKFASTAPI *pHalIoWritePartitionTable)(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN ULONG  SectorsPerTrack,
+  IN ULONG  NumberOfHeads,
+  IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
+
+typedef PBUS_HANDLER
+(DDKFASTAPI *pHalHandlerForBus)(
+  IN INTERFACE_TYPE  InterfaceType,
+  IN ULONG  BusNumber);
+
+typedef VOID
+(DDKFASTAPI *pHalReferenceBusHandler)(
+  IN PBUS_HANDLER  BusHandler);
+
+typedef NTSTATUS
+(DDKAPI *pHalQuerySystemInformation)(
+  IN HAL_QUERY_INFORMATION_CLASS  InformationClass,
+  IN ULONG  BufferSize,
+  IN OUT PVOID  Buffer,
+  OUT PULONG  ReturnedLength);
+
+typedef NTSTATUS
+(DDKAPI *pHalSetSystemInformation)(
+  IN HAL_SET_INFORMATION_CLASS  InformationClass,
+  IN ULONG  BufferSize,
+  IN PVOID  Buffer);
+
+typedef NTSTATUS
+(DDKAPI *pHalQueryBusSlots)(
+  IN PBUS_HANDLER  BusHandler,
+  IN ULONG  BufferSize,
+  OUT PULONG  SlotNumbers,
+  OUT PULONG  ReturnedLength);
+
+typedef NTSTATUS
+(DDKAPI *pHalInitPnpDriver)(
+  VOID);
+typedef NTSTATUS
+(DDKAPI *pHalInitPowerManagement)(
+  IN PPM_DISPATCH_TABLE  PmDriverDispatchTable,
+  OUT PPM_DISPATCH_TABLE  *PmHalDispatchTable);
+
+typedef struct _DMA_ADAPTER*
+(DDKAPI *pHalGetDmaAdapter)(
+  IN PVOID  Context,
+  IN struct _DEVICE_DESCRIPTION  *DeviceDescriptor,
+  OUT PULONG  NumberOfMapRegisters);
+                    
+typedef NTSTATUS
+(DDKAPI *pHalGetInterruptTranslator)(
+  IN INTERFACE_TYPE  ParentInterfaceType,
+  IN ULONG  ParentBusNumber,
+  IN INTERFACE_TYPE  BridgeInterfaceType,
+  IN USHORT  Size,
+  IN USHORT  Version,
+  OUT PTRANSLATOR_INTERFACE  Translator,
+  OUT PULONG  BridgeBusNumber);
+
+typedef NTSTATUS
+(DDKAPI *pHalStartMirroring)(
+  VOID);
+
+typedef NTSTATUS
+(DDKAPI *pHalEndMirroring)(
+  IN ULONG  PassNumber);
+
+typedef NTSTATUS
+(DDKAPI *pHalMirrorPhysicalMemory)(
+  IN PHYSICAL_ADDRESS  PhysicalAddress,
+  IN LARGE_INTEGER  NumberOfBytes);
+
+typedef NTSTATUS
+(DDKAPI *pHalMirrorVerify)(
+  IN PHYSICAL_ADDRESS  PhysicalAddress,
+  IN LARGE_INTEGER  NumberOfBytes);
+
+typedef VOID
+(DDKAPI *pHalEndOfBoot)(
+  VOID);
+
+typedef BOOLEAN
+(DDKAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
+  ULONG Columns, ULONG Rows);
+           
+typedef struct {
+  ULONG  Version;
+  pHalQuerySystemInformation  HalQuerySystemInformation;
+  pHalSetSystemInformation  HalSetSystemInformation;
+  pHalQueryBusSlots  HalQueryBusSlots;
+  ULONG  Spare1;
+  pHalExamineMBR  HalExamineMBR;
+  pHalIoAssignDriveLetters  HalIoAssignDriveLetters;
+  pHalIoReadPartitionTable  HalIoReadPartitionTable;
+  pHalIoSetPartitionInformation  HalIoSetPartitionInformation;
+  pHalIoWritePartitionTable  HalIoWritePartitionTable;
+  pHalHandlerForBus  HalReferenceHandlerForBus;
+  pHalReferenceBusHandler  HalReferenceBusHandler;
+  pHalReferenceBusHandler  HalDereferenceBusHandler;
+  pHalInitPnpDriver  HalInitPnpDriver;
+  pHalInitPowerManagement  HalInitPowerManagement;
+  pHalGetDmaAdapter  HalGetDmaAdapter;
+  pHalGetInterruptTranslator  HalGetInterruptTranslator;
+  pHalStartMirroring  HalStartMirroring;
+  pHalEndMirroring  HalEndMirroring;
+  pHalMirrorPhysicalMemory  HalMirrorPhysicalMemory;
+  pHalEndOfBoot  HalEndOfBoot;
+  pHalMirrorVerify  HalMirrorVerify;
+} HAL_DISPATCH, *PHAL_DISPATCH;
+
+#if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_)
+extern DECL_IMPORT PHAL_DISPATCH HalDispatchTable;
+#define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
+#else
+extern DECL_EXPORT HAL_DISPATCH HalDispatchTable;
+#define HALDISPATCH (&HalDispatchTable)
+#endif
+
+#define HAL_DISPATCH_VERSION            3
+#define HalDispatchTableVersion         HALDISPATCH->Version
+#define HalQuerySystemInformation       HALDISPATCH->HalQuerySystemInformation
+#define HalSetSystemInformation         HALDISPATCH->HalSetSystemInformation
+#define HalQueryBusSlots                HALDISPATCH->HalQueryBusSlots
+#define HalDeviceControl                HALDISPATCH->HalDeviceControl
+#define HalIoAssignDriveLetters         HALDISPATCH->HalIoAssignDriveLetters
+#define HalIoReadPartitionTable         HALDISPATCH->HalIoReadPartitionTable
+#define HalIoSetPartitionInformation    HALDISPATCH->HalIoSetPartitionInformation
+#define HalIoWritePartitionTable        HALDISPATCH->HalIoWritePartitionTable
+#define HalReferenceHandlerForBus       HALDISPATCH->HalReferenceHandlerForBus
+#define HalReferenceBusHandler          HALDISPATCH->HalReferenceBusHandler
+#define HalDereferenceBusHandler        HALDISPATCH->HalDereferenceBusHandler
+#define HalInitPnpDriver                HALDISPATCH->HalInitPnpDriver
+#define HalInitPowerManagement          HALDISPATCH->HalInitPowerManagement
+#define HalGetDmaAdapter                HALDISPATCH->HalGetDmaAdapter
+#define HalGetInterruptTranslator       HALDISPATCH->HalGetInterruptTranslator
+#define HalStartMirroring               HALDISPATCH->HalStartMirroring
+#define HalEndMirroring                 HALDISPATCH->HalEndMirroring
+#define HalMirrorPhysicalMemory         HALDISPATCH->HalMirrorPhysicalMemory
+#define HalEndOfBoot                    HALDISPATCH->HalEndOfBoot
+#define HalMirrorVerify                 HALDISPATCH->HalMirrorVerify
+
 typedef enum _FILE_INFORMATION_CLASS {
   FileDirectoryInformation = 1,
   FileFullDirectoryInformation,
@@ -1967,19 +2589,20 @@ typedef enum _FILE_INFORMATION_CLASS {
   FileMaximumInformation
 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
 
-typedef struct _FILE_POSITION_INFORMATION {                 
-  LARGE_INTEGER  CurrentByteOffset;                        
-} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;   
+typedef struct _FILE_POSITION_INFORMATION {
+  LARGE_INTEGER  CurrentByteOffset;
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
 
 typedef struct _FILE_ALIGNMENT_INFORMATION {
   ULONG  AlignmentRequirement;
-} FILE_ALIGNMENT_INFORMATION;
+} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
 
-typedef struct _FILE_NAME_INFORMATION {                     
-  ULONG  FileNameLength;                                   
-  WCHAR  FileName[1];                                      
-} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;           
+typedef struct _FILE_NAME_INFORMATION {
+  ULONG  FileNameLength;
+  WCHAR  FileName[1];
+} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
 
+#include <pshpack8.h>
 typedef struct _FILE_BASIC_INFORMATION {
   LARGE_INTEGER  CreationTime;
   LARGE_INTEGER  LastAccessTime;
@@ -1987,6 +2610,7 @@ typedef struct _FILE_BASIC_INFORMATION {
   LARGE_INTEGER  ChangeTime;
   ULONG  FileAttributes;
 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
+#include <poppack.h>
 
 typedef struct _FILE_STANDARD_INFORMATION {
   LARGE_INTEGER  AllocationSize;
@@ -1996,32 +2620,42 @@ typedef struct _FILE_STANDARD_INFORMATION {
   BOOLEAN  Directory;
 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
 
-typedef struct _FILE_NETWORK_OPEN_INFORMATION {                 
-  LARGE_INTEGER  CreationTime;                                 
-  LARGE_INTEGER  LastAccessTime;                               
-  LARGE_INTEGER  LastWriteTime;                                
-  LARGE_INTEGER  ChangeTime;                                   
-  LARGE_INTEGER  AllocationSize;                               
-  LARGE_INTEGER  EndOfFile;                                    
-  ULONG  FileAttributes;                                       
-} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;   
-
-typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {               
-  ULONG  FileAttributes;                                       
-  ULONG  ReparseTag;                                           
+typedef struct _FILE_NETWORK_OPEN_INFORMATION {
+  LARGE_INTEGER  CreationTime;
+  LARGE_INTEGER  LastAccessTime;
+  LARGE_INTEGER  LastWriteTime;
+  LARGE_INTEGER  ChangeTime;
+  LARGE_INTEGER  AllocationSize;
+  LARGE_INTEGER  EndOfFile;
+  ULONG  FileAttributes;
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
+
+typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
+  ULONG  FileAttributes;
+  ULONG  ReparseTag;
 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
 
-typedef struct _FILE_DISPOSITION_INFORMATION {                  
-  BOOLEAN  DeleteFile;                                         
-} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; 
-                                                                
-typedef struct _FILE_END_OF_FILE_INFORMATION {                  
-  LARGE_INTEGER  EndOfFile;                                    
-} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; 
-                                                                
-typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {                                    
-  LARGE_INTEGER  ValidDataLength;                                                      
-} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;             
+typedef struct _FILE_DISPOSITION_INFORMATION {
+  BOOLEAN  DeleteFile;
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
+
+typedef struct _FILE_QUOTA_INFORMATION {
+    ULONG NextEntryOffset;
+    ULONG SidLength;
+    LARGE_INTEGER ChangeTime;
+    LARGE_INTEGER QuotaUsed;
+    LARGE_INTEGER QuotaThreshold;
+    LARGE_INTEGER QuotaLimit;
+    SID Sid;
+} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
+
+typedef struct _FILE_END_OF_FILE_INFORMATION {
+  LARGE_INTEGER  EndOfFile;
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
+
+typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
+  LARGE_INTEGER  ValidDataLength;
+} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
 
 typedef enum _FSINFOCLASS {
   FileFsVolumeInformation = 1,
@@ -2086,16 +2720,22 @@ typedef struct _ERESOURCE {
   KSPIN_LOCK  SpinLock;
 } ERESOURCE, *PERESOURCE;
 
-/* NOTE: PVOID for methods to avoid 'assignment from incompatible pointer type' warning */
+typedef struct _DEVOBJ_EXTENSION
+{
+    CSHORT Type;
+    USHORT Size;
+    PDEVICE_OBJECT DeviceObject;
+} DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
+
 typedef struct _DRIVER_EXTENSION {
   struct _DRIVER_OBJECT  *DriverObject;
-  PVOID  AddDevice;
+  PDRIVER_ADD_DEVICE  AddDevice;
   ULONG  Count;
   UNICODE_STRING  ServiceKeyName;
 } DRIVER_EXTENSION, *PDRIVER_EXTENSION;
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_CHECK_IF_POSSIBLE)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_CHECK_IF_POSSIBLE)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN ULONG  Length,
@@ -2105,8 +2745,8 @@ typedef BOOLEAN DDKAPI
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_READ)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_READ)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN ULONG  Length,
@@ -2116,8 +2756,8 @@ typedef BOOLEAN DDKAPI
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_WRITE)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_WRITE)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN ULONG  Length,
@@ -2127,24 +2767,24 @@ typedef BOOLEAN DDKAPI
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_QUERY_BASIC_INFO)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_QUERY_BASIC_INFO)(
   IN struct _FILE_OBJECT  *FileObject,
   IN BOOLEAN  Wait,
   OUT PFILE_BASIC_INFORMATION  Buffer,
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_QUERY_STANDARD_INFO)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_QUERY_STANDARD_INFO)(
   IN struct _FILE_OBJECT  *FileObject,
   IN BOOLEAN  Wait,
   OUT PFILE_STANDARD_INFORMATION  Buffer,
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_LOCK)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_LOCK)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN PLARGE_INTEGER  Length,
@@ -2155,8 +2795,8 @@ typedef BOOLEAN DDKAPI
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_UNLOCK_SINGLE)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_UNLOCK_SINGLE)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN PLARGE_INTEGER  Length,
@@ -2165,23 +2805,23 @@ typedef BOOLEAN DDKAPI
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_UNLOCK_ALL)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_UNLOCK_ALL)(
   IN struct _FILE_OBJECT  *FileObject,
   PEPROCESS  ProcessId,
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_UNLOCK_ALL_BY_KEY)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_UNLOCK_ALL_BY_KEY)(
   IN struct _FILE_OBJECT  *FileObject,
   PEPROCESS  ProcessId,
   ULONG  Key,
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_DEVICE_CONTROL)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_DEVICE_CONTROL)(
   IN struct _FILE_OBJECT  *FileObject,
   IN BOOLEAN  Wait,
   IN PVOID  InputBuffer  OPTIONAL,
@@ -2192,36 +2832,36 @@ typedef BOOLEAN DDKAPI
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef VOID DDKAPI
-(*PFAST_IO_ACQUIRE_FILE)(
+typedef VOID
+(DDKAPI *PFAST_IO_ACQUIRE_FILE)(
   IN struct _FILE_OBJECT  *FileObject);
 
-typedef VOID DDKAPI
-(*PFAST_IO_RELEASE_FILE)(
+typedef VOID
+(DDKAPI *PFAST_IO_RELEASE_FILE)(
   IN struct _FILE_OBJECT  *FileObject);
 
-typedef VOID DDKAPI
-(*PFAST_IO_DETACH_DEVICE)(
+typedef VOID
+(DDKAPI *PFAST_IO_DETACH_DEVICE)(
   IN struct _DEVICE_OBJECT  *SourceDevice,
   IN struct _DEVICE_OBJECT  *TargetDevice);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_QUERY_NETWORK_OPEN_INFO)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_QUERY_NETWORK_OPEN_INFO)(
   IN struct _FILE_OBJECT  *FileObject,
   IN BOOLEAN  Wait,
   OUT struct _FILE_NETWORK_OPEN_INFORMATION  *Buffer,
   OUT struct _IO_STATUS_BLOCK  *IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef NTSTATUS DDKAPI
-(*PFAST_IO_ACQUIRE_FOR_MOD_WRITE)(
+typedef NTSTATUS
+(DDKAPI *PFAST_IO_ACQUIRE_FOR_MOD_WRITE)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  EndingOffset,
   OUT struct _ERESOURCE  **ResourceToRelease,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_MDL_READ)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_MDL_READ)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN ULONG  Length,
@@ -2230,14 +2870,14 @@ typedef BOOLEAN DDKAPI
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_MDL_READ_COMPLETE)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_MDL_READ_COMPLETE)(
   IN struct _FILE_OBJECT *FileObject,
   IN PMDL MdlChain,
   IN struct _DEVICE_OBJECT *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_PREPARE_MDL_WRITE)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_PREPARE_MDL_WRITE)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN ULONG  Length,
@@ -2246,15 +2886,15 @@ typedef BOOLEAN DDKAPI
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_MDL_WRITE_COMPLETE)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_MDL_WRITE_COMPLETE)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN PMDL  MdlChain,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_READ_COMPRESSED)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_READ_COMPRESSED)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN ULONG  Length,
@@ -2266,8 +2906,8 @@ typedef BOOLEAN DDKAPI
   IN ULONG  CompressedDataInfoLength,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_WRITE_COMPRESSED)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_WRITE_COMPRESSED)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN ULONG  Length,
@@ -2279,38 +2919,38 @@ typedef BOOLEAN DDKAPI
   IN ULONG  CompressedDataInfoLength,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PMDL  MdlChain,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)(
   IN struct _FILE_OBJECT  *FileObject,
   IN PLARGE_INTEGER  FileOffset,
   IN PMDL  MdlChain,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef BOOLEAN DDKAPI
-(*PFAST_IO_QUERY_OPEN)(
+typedef BOOLEAN
+(DDKAPI *PFAST_IO_QUERY_OPEN)(
   IN struct _IRP  *Irp,
   OUT PFILE_NETWORK_OPEN_INFORMATION  NetworkInformation,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef NTSTATUS DDKAPI
-(*PFAST_IO_RELEASE_FOR_MOD_WRITE)(
+typedef NTSTATUS
+(DDKAPI *PFAST_IO_RELEASE_FOR_MOD_WRITE)(
   IN struct _FILE_OBJECT  *FileObject,
   IN struct _ERESOURCE  *ResourceToRelease,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef NTSTATUS DDKAPI
-(*PFAST_IO_ACQUIRE_FOR_CCFLUSH)(
+typedef NTSTATUS
+(DDKAPI *PFAST_IO_ACQUIRE_FOR_CCFLUSH)(
   IN struct _FILE_OBJECT  *FileObject,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
-typedef NTSTATUS DDKAPI
-(*PFAST_IO_RELEASE_FOR_CCFLUSH) (
+typedef NTSTATUS
+(DDKAPI *PFAST_IO_RELEASE_FOR_CCFLUSH) (
   IN struct _FILE_OBJECT  *FileObject,
   IN struct _DEVICE_OBJECT  *DeviceObject);
 
@@ -2345,6 +2985,14 @@ typedef struct _FAST_IO_DISPATCH {
   PFAST_IO_RELEASE_FOR_CCFLUSH  ReleaseForCcFlush;
 } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
 
+#define DRVO_UNLOAD_INVOKED               0x00000001
+#define DRVO_LEGACY_DRIVER                0x00000002
+#define DRVO_BUILTIN_DRIVER               0x00000004
+#define DRVO_REINIT_REGISTERED            0x00000008
+#define DRVO_INITIALIZED                  0x00000010
+#define DRVO_BOOTREINIT_REGISTERED        0x00000020
+#define DRVO_LEGACY_RESOURCES             0x00000040
+
 typedef struct _DRIVER_OBJECT {
   CSHORT  Type;
   CSHORT  Size;
@@ -2449,6 +3097,39 @@ typedef struct _INITIAL_PRIVILEGE_SET {
   LUID_AND_ATTRIBUTES  Privilege[INITIAL_PRIVILEGE_COUNT];
 } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
 
+#define SE_MIN_WELL_KNOWN_PRIVILEGE       2
+#define SE_CREATE_TOKEN_PRIVILEGE         2
+#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE   3
+#define SE_LOCK_MEMORY_PRIVILEGE          4
+#define SE_INCREASE_QUOTA_PRIVILEGE       5
+#define SE_UNSOLICITED_INPUT_PRIVILEGE    6
+#define SE_MACHINE_ACCOUNT_PRIVILEGE      6
+#define SE_TCB_PRIVILEGE                  7
+#define SE_SECURITY_PRIVILEGE             8
+#define SE_TAKE_OWNERSHIP_PRIVILEGE       9
+#define SE_LOAD_DRIVER_PRIVILEGE          10
+#define SE_SYSTEM_PROFILE_PRIVILEGE       11
+#define SE_SYSTEMTIME_PRIVILEGE           12
+#define SE_PROF_SINGLE_PROCESS_PRIVILEGE  13
+#define SE_INC_BASE_PRIORITY_PRIVILEGE    14
+#define SE_CREATE_PAGEFILE_PRIVILEGE      15
+#define SE_CREATE_PERMANENT_PRIVILEGE     16
+#define SE_BACKUP_PRIVILEGE               17
+#define SE_RESTORE_PRIVILEGE              18
+#define SE_SHUTDOWN_PRIVILEGE             19
+#define SE_DEBUG_PRIVILEGE                20
+#define SE_AUDIT_PRIVILEGE                21
+#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE   22
+#define SE_CHANGE_NOTIFY_PRIVILEGE        23
+#define SE_REMOTE_SHUTDOWN_PRIVILEGE      24
+#define SE_UNDOCK_PRIVILEGE               25
+#define SE_SYNC_AGENT_PRIVILEGE           26
+#define SE_ENABLE_DELEGATION_PRIVILEGE    27
+#define SE_MANAGE_VOLUME_PRIVILEGE        28
+#define SE_IMPERSONATE_PRIVILEGE          29
+#define SE_CREATE_GLOBAL_PRIVILEGE        30
+#define SE_MAX_WELL_KNOWN_PRIVILEGE       SE_CREATE_GLOBAL_PRIVILEGE
+
 typedef struct _SECURITY_SUBJECT_CONTEXT {
   PACCESS_TOKEN  ClientToken;
   SECURITY_IMPERSONATION_LEVEL  ImpersonationLevel;
@@ -2488,6 +3169,23 @@ typedef struct _IO_SECURITY_CONTEXT {
   ULONG  FullCreateOptions;
 } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
 
+#define IO_TYPE_ADAPTER                 1
+#define IO_TYPE_CONTROLLER              2
+#define IO_TYPE_DEVICE                  3
+#define IO_TYPE_DRIVER                  4
+#define IO_TYPE_FILE                    5
+#define IO_TYPE_IRP                     6
+#define IO_TYPE_MASTER_ADAPTER          7
+#define IO_TYPE_OPEN_PACKET             8
+#define IO_TYPE_TIMER                   9
+#define IO_TYPE_VPB                     10
+#define IO_TYPE_ERROR_LOG               11
+#define IO_TYPE_ERROR_MESSAGE          12
+#define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
+
+#define IO_TYPE_CSQ_IRP_CONTEXT 1
+#define IO_TYPE_CSQ 2
+
 struct _IO_CSQ;
 
 typedef struct _IO_CSQ_IRP_CONTEXT {
@@ -2496,34 +3194,34 @@ typedef struct _IO_CSQ_IRP_CONTEXT {
   struct _IO_CSQ  *Csq;
 } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT;
 
-typedef VOID DDKAPI
-(*PIO_CSQ_INSERT_IRP)(
+typedef VOID
+(DDKAPI *PIO_CSQ_INSERT_IRP)(
   IN struct _IO_CSQ  *Csq,
   IN PIRP  Irp);
 
-typedef VOID DDKAPI
-(*PIO_CSQ_REMOVE_IRP)(
+typedef VOID
+(DDKAPI *PIO_CSQ_REMOVE_IRP)(
   IN struct _IO_CSQ  *Csq,
   IN PIRP  Irp);
 
-typedef PIRP DDKAPI
-(*PIO_CSQ_PEEK_NEXT_IRP)(
+typedef PIRP
+(DDKAPI *PIO_CSQ_PEEK_NEXT_IRP)(
   IN struct _IO_CSQ  *Csq,
   IN PIRP  Irp,
   IN PVOID  PeekContext);
 
-typedef VOID DDKAPI
-(*PIO_CSQ_ACQUIRE_LOCK)(
+typedef VOID
+(DDKAPI *PIO_CSQ_ACQUIRE_LOCK)(
   IN  struct _IO_CSQ  *Csq,
   OUT PKIRQL  Irql);
 
-typedef VOID DDKAPI
-(*PIO_CSQ_RELEASE_LOCK)(
+typedef VOID
+(DDKAPI *PIO_CSQ_RELEASE_LOCK)(
   IN struct _IO_CSQ  *Csq,
   IN KIRQL  Irql);
 
-typedef VOID DDKAPI
-(*PIO_CSQ_COMPLETE_CANCELED_IRP)(
+typedef VOID
+(DDKAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)(
   IN  struct _IO_CSQ  *Csq,
   IN  PIRP  Irp);
 
@@ -2538,7 +3236,9 @@ typedef struct _IO_CSQ {
   PVOID  ReservePointer;
 } IO_CSQ, *PIO_CSQ;
 
+#if !defined(_ALPHA_)
 #include <pshpack4.h>
+#endif
 typedef struct _IO_STACK_LOCATION {
   UCHAR  MajorFunction;
   UCHAR  MinorFunction;
@@ -2562,6 +3262,16 @@ typedef struct _IO_STACK_LOCATION {
       ULONG POINTER_ALIGNMENT  Key;
       LARGE_INTEGER  ByteOffset;
     } Write;
+    struct {
+      ULONG  Length;
+      PUNICODE_STRING  FileName;
+      FILE_INFORMATION_CLASS  FileInformationClass;
+      ULONG  FileIndex;
+    } QueryDirectory;
+    struct {
+      ULONG  Length;
+      ULONG  CompletionFilter;
+    } NotifyDirectory;
     struct {
       ULONG  Length;
       FILE_INFORMATION_CLASS POINTER_ALIGNMENT  FileInformationClass;
@@ -2579,10 +3289,34 @@ typedef struct _IO_STACK_LOCATION {
         HANDLE  DeleteHandle;
       } DUMMYUNIONNAME;
     } SetFile;
+    struct {
+      ULONG  Length;
+      PVOID  EaList;
+      ULONG  EaListLength;
+      ULONG  EaIndex;
+    } QueryEa;
+    struct {
+      ULONG  Length;
+    } SetEa;
     struct {
       ULONG  Length;
       FS_INFORMATION_CLASS POINTER_ALIGNMENT  FsInformationClass;
     } QueryVolume;
+    struct {
+      ULONG  Length;
+      FS_INFORMATION_CLASS  FsInformationClass;
+    } SetVolume;
+    struct {
+      ULONG  OutputBufferLength;
+      ULONG  InputBufferLength;
+      ULONG  FsControlCode;
+      PVOID  Type3InputBuffer;
+    } FileSystemControl;
+    struct {
+      PLARGE_INTEGER  Length;
+      ULONG  Key;
+      LARGE_INTEGER  ByteOffset;
+    } LockControl;
     struct {
       ULONG  OutputBufferLength;
       ULONG POINTER_ALIGNMENT  InputBufferLength;
@@ -2608,6 +3342,15 @@ typedef struct _IO_STACK_LOCATION {
     struct {
       struct _SCSI_REQUEST_BLOCK  *Srb;
     } Scsi;
+    struct {
+      ULONG  Length;
+      PSID  StartSid;
+      struct _FILE_GET_QUOTA_INFORMATION  *SidList;
+      ULONG  SidListLength;
+    } QueryQuota;
+    struct {
+      ULONG  Length;
+    } SetQuota;
     struct {
       DEVICE_RELATION_TYPE  Type;
     } QueryDeviceRelations;
@@ -2679,7 +3422,9 @@ typedef struct _IO_STACK_LOCATION {
   PIO_COMPLETION_ROUTINE  CompletionRoutine;
   PVOID  Context;
 } IO_STACK_LOCATION, *PIO_STACK_LOCATION;
+#if !defined(_ALPHA_)
 #include <poppack.h>
+#endif
 
 /* IO_STACK_LOCATION.Control */
 
@@ -2688,6 +3433,11 @@ typedef struct _IO_STACK_LOCATION {
 #define SL_INVOKE_ON_SUCCESS              0x40
 #define SL_INVOKE_ON_ERROR                0x80
 
+/* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
+
+#define PCI_WHICHSPACE_CONFIG             0x0
+#define PCI_WHICHSPACE_ROM                0x52696350 /* 'PciR' */
+
 typedef enum _KEY_INFORMATION_CLASS {
   KeyBasicInformation,
   KeyNodeInformation,
@@ -2771,6 +3521,24 @@ typedef enum _KEY_VALUE_INFORMATION_CLASS {
   KeyValuePartialInformationAlign64
 } KEY_VALUE_INFORMATION_CLASS;
 
+typedef struct _KEY_WRITE_TIME_INFORMATION {
+  LARGE_INTEGER  LastWriteTime;
+} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
+
+typedef struct _KEY_USER_FLAGS_INFORMATION {
+  ULONG  UserFlags;
+} KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
+
+typedef enum _KEY_SET_INFORMATION_CLASS {
+  KeyWriteTimeInformation,
+  KeyUserFlagsInformation,
+  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
@@ -2820,47 +3588,47 @@ typedef struct _PCI_COMMON_CONFIG {
       UCHAR  MinimumGrant;
       UCHAR  MaximumLatency;
     } type0;
-      struct _PCI_HEADER_TYPE_1 {
-        ULONG  BaseAddresses[PCI_TYPE1_ADDRESSES];
-        UCHAR  PrimaryBus;
-        UCHAR  SecondaryBus;
-        UCHAR  SubordinateBus;
-        UCHAR  SecondaryLatency;
-        UCHAR  IOBase;
-        UCHAR  IOLimit;
-        USHORT  SecondaryStatus;
-        USHORT  MemoryBase;
-        USHORT  MemoryLimit;
-        USHORT  PrefetchBase;
-        USHORT  PrefetchLimit;
-        ULONG  PrefetchBaseUpper32;
-        ULONG  PrefetchLimitUpper32;
-        USHORT  IOBaseUpper16;
-        USHORT  IOLimitUpper16;
-        UCHAR  CapabilitiesPtr;
-        UCHAR  Reserved1[3];
-        ULONG  ROMBaseAddress;
-        UCHAR  InterruptLine;
-        UCHAR  InterruptPin;
-        USHORT  BridgeControl;
-      } type1;
-      struct _PCI_HEADER_TYPE_2 {
-        ULONG  SocketRegistersBaseAddress;
-        UCHAR  CapabilitiesPtr;
-        UCHAR  Reserved;
-        USHORT  SecondaryStatus;
-        UCHAR  PrimaryBus;
-        UCHAR  SecondaryBus;
-        UCHAR  SubordinateBus;
-        UCHAR  SecondaryLatency;
-        struct {
-          ULONG  Base;
-          ULONG  Limit;
-        } Range[PCI_TYPE2_ADDRESSES - 1];
-        UCHAR  InterruptLine;
-        UCHAR  InterruptPin;
-        USHORT  BridgeControl;
-      } type2;
+    struct _PCI_HEADER_TYPE_1 {
+      ULONG  BaseAddresses[PCI_TYPE1_ADDRESSES];
+      UCHAR  PrimaryBus;
+      UCHAR  SecondaryBus;
+      UCHAR  SubordinateBus;
+      UCHAR  SecondaryLatency;
+      UCHAR  IOBase;
+      UCHAR  IOLimit;
+      USHORT  SecondaryStatus;
+      USHORT  MemoryBase;
+      USHORT  MemoryLimit;
+      USHORT  PrefetchBase;
+      USHORT  PrefetchLimit;
+      ULONG  PrefetchBaseUpper32;
+      ULONG  PrefetchLimitUpper32;
+      USHORT  IOBaseUpper16;
+      USHORT  IOLimitUpper16;
+      UCHAR  CapabilitiesPtr;
+      UCHAR  Reserved1[3];
+      ULONG  ROMBaseAddress;
+      UCHAR  InterruptLine;
+      UCHAR  InterruptPin;
+      USHORT  BridgeControl;
+    } type1;
+    struct _PCI_HEADER_TYPE_2 {
+      ULONG  SocketRegistersBaseAddress;
+      UCHAR  CapabilitiesPtr;
+      UCHAR  Reserved;
+      USHORT  SecondaryStatus;
+      UCHAR  PrimaryBus;
+      UCHAR  SecondaryBus;
+      UCHAR  SubordinateBus;
+      UCHAR  SecondaryLatency;
+      struct {
+        ULONG  Base;
+        ULONG  Limit;
+      } Range[PCI_TYPE2_ADDRESSES - 1];
+      UCHAR  InterruptLine;
+      UCHAR  InterruptPin;
+      USHORT  BridgeControl;
+    } type2;
   } u;
   UCHAR  DeviceSpecific[192];
 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
@@ -2905,6 +3673,101 @@ typedef struct _PCI_COMMON_CONFIG {
 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
   ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
 
+/* PCI device classes */
+
+#define PCI_CLASS_PRE_20                    0x00
+#define PCI_CLASS_MASS_STORAGE_CTLR         0x01
+#define PCI_CLASS_NETWORK_CTLR              0x02
+#define PCI_CLASS_DISPLAY_CTLR              0x03
+#define PCI_CLASS_MULTIMEDIA_DEV            0x04
+#define PCI_CLASS_MEMORY_CTLR               0x05
+#define PCI_CLASS_BRIDGE_DEV                0x06
+#define PCI_CLASS_SIMPLE_COMMS_CTLR         0x07
+#define PCI_CLASS_BASE_SYSTEM_DEV           0x08
+#define PCI_CLASS_INPUT_DEV                 0x09
+#define PCI_CLASS_DOCKING_STATION           0x0a
+#define PCI_CLASS_PROCESSOR                 0x0b
+#define PCI_CLASS_SERIAL_BUS_CTLR           0x0c
+
+/* PCI device subclasses for class 0 */
+
+#define PCI_SUBCLASS_PRE_20_NON_VGA         0x00
+#define PCI_SUBCLASS_PRE_20_VGA             0x01
+
+/* PCI device subclasses for class 1 (mass storage controllers)*/
+
+#define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR      0x00
+#define PCI_SUBCLASS_MSC_IDE_CTLR           0x01
+#define PCI_SUBCLASS_MSC_FLOPPY_CTLR        0x02
+#define PCI_SUBCLASS_MSC_IPI_CTLR           0x03
+#define PCI_SUBCLASS_MSC_RAID_CTLR          0x04
+#define PCI_SUBCLASS_MSC_OTHER              0x80
+
+/* PCI device subclasses for class 2 (network controllers)*/
+
+#define PCI_SUBCLASS_NET_ETHERNET_CTLR      0x00
+#define PCI_SUBCLASS_NET_TOKEN_RING_CTLR    0x01
+#define PCI_SUBCLASS_NET_FDDI_CTLR          0x02
+#define PCI_SUBCLASS_NET_ATM_CTLR           0x03
+#define PCI_SUBCLASS_NET_OTHER              0x80
+
+/* PCI device subclasses for class 3 (display controllers)*/
+
+#define PCI_SUBCLASS_VID_VGA_CTLR           0x00
+#define PCI_SUBCLASS_VID_XGA_CTLR           0x01
+#define PCI_SUBLCASS_VID_3D_CTLR            0x02
+#define PCI_SUBCLASS_VID_OTHER              0x80
+
+/* PCI device subclasses for class 4 (multimedia device)*/
+
+#define PCI_SUBCLASS_MM_VIDEO_DEV           0x00
+#define PCI_SUBCLASS_MM_AUDIO_DEV           0x01
+#define PCI_SUBCLASS_MM_TELEPHONY_DEV       0x02
+#define PCI_SUBCLASS_MM_OTHER               0x80
+
+/* PCI device subclasses for class 5 (memory controller)*/
+
+#define PCI_SUBCLASS_MEM_RAM                0x00
+#define PCI_SUBCLASS_MEM_FLASH              0x01
+#define PCI_SUBCLASS_MEM_OTHER              0x80
+
+/* PCI device subclasses for class 6 (bridge device)*/
+
+#define PCI_SUBCLASS_BR_HOST                0x00
+#define PCI_SUBCLASS_BR_ISA                 0x01
+#define PCI_SUBCLASS_BR_EISA                0x02
+#define PCI_SUBCLASS_BR_MCA                 0x03
+#define PCI_SUBCLASS_BR_PCI_TO_PCI          0x04
+#define PCI_SUBCLASS_BR_PCMCIA              0x05
+#define PCI_SUBCLASS_BR_NUBUS               0x06
+#define PCI_SUBCLASS_BR_CARDBUS             0x07
+#define PCI_SUBCLASS_BR_OTHER               0x80
+
+/* PCI device subclasses for class C (serial bus controller)*/
+
+#define PCI_SUBCLASS_SB_IEEE1394            0x00
+#define PCI_SUBCLASS_SB_ACCESS              0x01
+#define PCI_SUBCLASS_SB_SSA                 0x02
+#define PCI_SUBCLASS_SB_USB                 0x03
+#define PCI_SUBCLASS_SB_FIBRE_CHANNEL       0x04
+
+#define PCI_MAX_DEVICES        32
+#define PCI_MAX_FUNCTION       8
+#define PCI_MAX_BRIDGE_NUMBER  0xFF
+#define PCI_INVALID_VENDORID   0xFFFF
+#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
+
+#define PCI_ADDRESS_IO_SPACE                0x01
+#define PCI_ADDRESS_MEMORY_TYPE_MASK        0x06
+#define PCI_ADDRESS_MEMORY_PREFETCHABLE     0x08
+#define PCI_ADDRESS_IO_ADDRESS_MASK         0xfffffffc
+#define PCI_ADDRESS_MEMORY_ADDRESS_MASK     0xfffffff0
+#define PCI_ADDRESS_ROM_ADDRESS_MASK        0xfffff800
+
+#define PCI_TYPE_32BIT 0
+#define PCI_TYPE_20BIT 2
+#define PCI_TYPE_64BIT 4
+
 typedef struct _PCI_SLOT_NUMBER {
   union {
     struct {
@@ -3019,8 +3882,40 @@ typedef struct _RTL_BITMAP_RUN {
     ULONG  NumberOfBits;
 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
 
-typedef NTSTATUS DDKAPI
-(*PRTL_QUERY_REGISTRY_ROUTINE)(
+typedef struct _RTL_RANGE_LIST
+{
+    LIST_ENTRY ListHead;
+    ULONG Flags;  /* RTL_RANGE_LIST_... flags */
+    ULONG Count;
+    ULONG Stamp;
+} RTL_RANGE_LIST, *PRTL_RANGE_LIST;
+
+typedef struct _RTL_RANGE
+{
+    ULONGLONG Start;
+    ULONGLONG End;
+    PVOID UserData;
+    PVOID Owner;
+    UCHAR Attributes;
+    UCHAR Flags;  /* RTL_RANGE_... flags */
+} RTL_RANGE, *PRTL_RANGE;
+
+typedef struct _RANGE_LIST_ITERATOR
+{
+    PLIST_ENTRY RangeListHead;
+    PLIST_ENTRY MergedHead;
+    PVOID Current;
+    ULONG Stamp;
+} RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
+
+typedef BOOLEAN
+(NTAPI *PRTL_CONFLICT_RANGE_CALLBACK) (
+    PVOID Context,
+    struct _RTL_RANGE *Range
+);
+
+typedef NTSTATUS
+(DDKAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
   IN PWSTR  ValueName,
   IN ULONG  ValueType,
   IN PVOID  ValueData,
@@ -3034,6 +3929,8 @@ typedef NTSTATUS DDKAPI
 #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
@@ -3065,65 +3962,58 @@ typedef struct _TIME_FIELDS {
   CSHORT  Weekday;
 } TIME_FIELDS, *PTIME_FIELDS;
 
-typedef PVOID DDKAPI
-(*PALLOCATE_FUNCTION)(
+typedef PVOID
+(DDKAPI *PALLOCATE_FUNCTION)(
   IN POOL_TYPE  PoolType,
   IN SIZE_T  NumberOfBytes,
   IN ULONG  Tag);
 
-typedef VOID DDKAPI
-(*PFREE_FUNCTION)(
+typedef VOID
+(DDKAPI *PFREE_FUNCTION)(
   IN PVOID  Buffer);
 
-#define GENERAL_LOOKASIDE_S \
-  SLIST_HEADER  ListHead; \
-  USHORT  Depth; \
-  USHORT  MaximumDepth; \
-  ULONG  TotalAllocates; \
-  _ANONYMOUS_UNION union { \
-    ULONG  AllocateMisses; \
-    ULONG  AllocateHits; \
-  } DUMMYUNIONNAME; \
-  ULONG  TotalFrees; \
-  _ANONYMOUS_UNION union { \
-    ULONG  FreeMisses; \
-    ULONG  FreeHits; \
-  } DUMMYUNIONNAME2; \
-  POOL_TYPE  Type; \
-  ULONG  Tag; \
-  ULONG  Size; \
-  PALLOCATE_FUNCTION  Allocate; \
-  PFREE_FUNCTION  Free; \
-  LIST_ENTRY  ListEntry; \
-  ULONG  LastTotalAllocates; \
-  _ANONYMOUS_UNION union { \
-    ULONG  LastAllocateMisses; \
-    ULONG  LastAllocateHits; \
-  } DUMMYUNIONNAME3; \
-  ULONG Future[2];
-
 typedef struct _GENERAL_LOOKASIDE {
-  GENERAL_LOOKASIDE_S
+  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_S
+  GENERAL_LOOKASIDE  L;
   KSPIN_LOCK  Obsoleted;
 } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
 
 typedef struct _PAGED_LOOKASIDE_LIST {
-  GENERAL_LOOKASIDE_S
+  GENERAL_LOOKASIDE  L;
   FAST_MUTEX  Obsoleted;
 } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
 
-typedef struct _PP_LOOKASIDE_LIST {
-   struct _GENERAL_LOOKASIDE *P;
-   struct _GENERAL_LOOKASIDE *L;
-} PP_LOOKASIDE_LIST, *PPP_LOOKASIDE_LIST;
-
 typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
 
-typedef VOID DDKAPI (*PCALLBACK_FUNCTION)(
+typedef VOID
+(DDKAPI *PCALLBACK_FUNCTION)(
   IN PVOID  CallbackContext,
   IN PVOID  Argument1,
   IN PVOID  Argument2);
@@ -3156,11 +4046,18 @@ typedef enum _KWAIT_REASON {
   WrPageOut,
   WrRendezvous,
   Spare2,
-  Spare3,
+  WrGuardedMutex,
   Spare4,
   Spare5,
   Spare6,
   WrKernel,
+  WrResource,
+  WrPushLock,
+  WrMutex,
+  WrQuantumEnd,
+  WrDispatchInt,
+  WrPreempted,
+  WrYieldExecution,
   MaximumWaitReason
 } KWAIT_REASON;
 
@@ -3204,8 +4101,8 @@ typedef struct _IO_REMOVE_LOCK {
 
 typedef struct _IO_WORKITEM *PIO_WORKITEM;
 
-typedef VOID DDKAPI
-(*PIO_WORKITEM_ROUTINE)(
+typedef VOID
+(DDKAPI *PIO_WORKITEM_ROUTINE)(
   IN PDEVICE_OBJECT  DeviceObject,
   IN PVOID  Context);
 
@@ -3224,8 +4121,10 @@ typedef enum _KINTERRUPT_MODE {
   Latched
 } KINTERRUPT_MODE;
 
-typedef VOID DDKAPI
-(*PKINTERRUPT_ROUTINE)(
+#define THREAD_WAIT_OBJECTS 3
+
+typedef VOID
+(DDKAPI *PKINTERRUPT_ROUTINE)(
   VOID);
 
 typedef enum _KPROFILE_SOURCE {
@@ -3320,7 +4219,11 @@ typedef enum _CONFIGURATION_TYPE {
   MaximumType
 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
 
-typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE)(
+#define IO_FORCE_ACCESS_CHECK               0x001
+#define IO_NO_PARAMETER_CHECKING            0x100
+
+typedef NTSTATUS
+(DDKAPI *PIO_QUERY_DEVICE_ROUTINE)(
   IN PVOID  Context,
   IN PUNICODE_STRING  PathName,
   IN INTERFACE_TYPE  BusType,
@@ -3333,6 +4236,13 @@ typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE)(
   IN ULONG  PeripheralNumber,
   IN PKEY_VALUE_FULL_INFORMATION  *PeripheralInformation);
 
+typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
+  IoQueryDeviceIdentifier = 0,
+  IoQueryDeviceConfigurationData,
+  IoQueryDeviceComponentInformation,
+  IoQueryDeviceMaxData
+} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
+
 typedef enum _WORK_QUEUE_TYPE {
   CriticalWorkQueue,
   DelayedWorkQueue,
@@ -3340,8 +4250,8 @@ typedef enum _WORK_QUEUE_TYPE {
   MaximumWorkQueue
 } WORK_QUEUE_TYPE;
 
-typedef VOID DDKAPI
-(*PWORKER_THREAD_ROUTINE)(
+typedef VOID
+(DDKAPI *PWORKER_THREAD_ROUTINE)(
   IN PVOID Parameter);
 
 typedef struct _WORK_QUEUE_ITEM {
@@ -3350,16 +4260,39 @@ typedef struct _WORK_QUEUE_ITEM {
   PVOID  Parameter;
 } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
 
+typedef enum _KBUGCHECK_CALLBACK_REASON {
+  KbCallbackInvalid,
+  KbCallbackReserved1,
+  KbCallbackSecondaryDumpData,
+  KbCallbackDumpIo,
+} KBUGCHECK_CALLBACK_REASON;
+
+typedef VOID
+(DDKAPI *PKBUGCHECK_REASON_CALLBACK_ROUTINE)(
+  IN KBUGCHECK_CALLBACK_REASON  Reason,
+  IN struct _KBUGCHECK_REASON_CALLBACK_RECORD  *Record,
+  IN OUT PVOID  ReasonSpecificData,
+  IN ULONG  ReasonSpecificDataLength);
+
+typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD {
+  LIST_ENTRY  Entry;
+  PKBUGCHECK_REASON_CALLBACK_ROUTINE  CallbackRoutine;
+  PUCHAR  Component;
+  ULONG_PTR  Checksum;
+  KBUGCHECK_CALLBACK_REASON  Reason;
+  UCHAR  State;
+} KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD;
+
 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE {
-    BufferEmpty,
-    BufferInserted,
-    BufferStarted,
-    BufferFinished,
-    BufferIncomplete
+  BufferEmpty,
+  BufferInserted,
+  BufferStarted,
+  BufferFinished,
+  BufferIncomplete
 } KBUGCHECK_BUFFER_DUMP_STATE;
 
-typedef VOID DDKAPI
-(*PKBUGCHECK_CALLBACK_ROUTINE)(
+typedef VOID
+(DDKAPI *PKBUGCHECK_CALLBACK_ROUTINE)(
   IN PVOID  Buffer,
   IN ULONG  Length);
 
@@ -3429,18 +4362,18 @@ typedef struct _CLIENT_ID {
   HANDLE  UniqueThread;
 } CLIENT_ID, *PCLIENT_ID;
 
-typedef VOID DDKAPI
-(*PKSTART_ROUTINE)(
+typedef VOID
+(DDKAPI *PKSTART_ROUTINE)(
   IN PVOID  StartContext);
 
-typedef VOID DDKAPI
-(*PCREATE_PROCESS_NOTIFY_ROUTINE)(
+typedef VOID
+(DDKAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)(
   IN HANDLE  ParentId,
   IN HANDLE  ProcessId,
   IN BOOLEAN  Create);
 
-typedef VOID DDKAPI
-(*PCREATE_THREAD_NOTIFY_ROUTINE)(
+typedef VOID
+(DDKAPI *PCREATE_THREAD_NOTIFY_ROUTINE)(
   IN HANDLE  ProcessId,
   IN HANDLE  ThreadId,
   IN BOOLEAN  Create);
@@ -3463,8 +4396,8 @@ typedef struct _IMAGE_INFO {
 
 #define IMAGE_ADDRESSING_MODE_32BIT       3
 
-typedef VOID DDKAPI
-(*PLOAD_IMAGE_NOTIFY_ROUTINE)(
+typedef VOID
+(DDKAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(
   IN PUNICODE_STRING  FullImageName,
   IN HANDLE  ProcessId,
   IN PIMAGE_INFO  ImageInfo);
@@ -3503,6 +4436,14 @@ typedef enum _PROCESSINFOCLASS {
   ProcessDebugObjectHandle,
   ProcessDebugFlags,
   ProcessHandleTracing,
+  ProcessIoPriority,
+  ProcessExecuteFlags,
+  ProcessTlsInformation,
+  ProcessCookie,
+  ProcessImageInformation,
+  ProcessCycleTime,
+  ProcessPagePriority,
+  ProcessInstrumentationCallback,
   MaxProcessInfoClass
 } PROCESSINFOCLASS;
 
@@ -3526,9 +4467,67 @@ typedef enum _THREADINFOCLASS {
   ThreadIsIoPending,
   ThreadHideFromDebugger,
   ThreadBreakOnTermination,
+  ThreadSwitchLegacyState,
+  ThreadIsTerminated,
+  ThreadLastSystemCall,
+  ThreadIoPriority,
+  ThreadCycleTime,
+  ThreadPagePriority,
+  ThreadActualBasePriority,
   MaxThreadInfoClass
 } THREADINFOCLASS;
 
+typedef struct _PROCESS_BASIC_INFORMATION
+{
+    NTSTATUS ExitStatus;
+    PPEB PebBaseAddress;
+    ULONG_PTR AffinityMask;
+    KPRIORITY BasePriority;
+    ULONG_PTR UniqueProcessId;
+    ULONG_PTR InheritedFromUniqueProcessId;
+} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
+
+typedef struct _PROCESS_WS_WATCH_INFORMATION
+{
+    PVOID FaultingPc;
+    PVOID FaultingVa;
+} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
+
+typedef struct _PROCESS_DEVICEMAP_INFORMATION
+{
+    union
+    {
+        struct
+        {
+            HANDLE DirectoryHandle;
+        } Set;
+        struct
+        {
+            ULONG DriveMap;
+            UCHAR DriveType[32];
+        } Query;
+    };
+} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
+
+typedef struct _KERNEL_USER_TIMES
+{
+    LARGE_INTEGER CreateTime;
+    LARGE_INTEGER ExitTime;
+    LARGE_INTEGER KernelTime;
+    LARGE_INTEGER UserTime;
+} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
+
+typedef struct _PROCESS_ACCESS_TOKEN
+{
+    HANDLE Token;
+    HANDLE Thread;
+} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
+
+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
@@ -3536,8 +4535,8 @@ typedef enum _THREADINFOCLASS {
 
 typedef ULONG EXECUTION_STATE;
 
-typedef VOID DDKAPI
-(*PREQUEST_POWER_COMPLETE)(
+typedef VOID
+(DDKAPI *PREQUEST_POWER_COMPLETE)(
   IN PDEVICE_OBJECT  DeviceObject,
   IN UCHAR  MinorFunction,
   IN POWER_STATE  PowerState,
@@ -3555,13 +4554,164 @@ typedef enum _TRACE_INFORMATION_CLASS {
   TraceHandleByNameClass
 } TRACE_INFORMATION_CLASS;
 
-typedef NTSTATUS DDKAPI
-(*PEX_CALLBACK_FUNCTION)(
+typedef enum _REG_NOTIFY_CLASS
+{
+  RegNtDeleteKey,
+  RegNtPreDeleteKey = RegNtDeleteKey,
+  RegNtSetValueKey,
+  RegNtPreSetValueKey = RegNtSetValueKey,
+  RegNtDeleteValueKey,
+  RegNtPreDeleteValueKey = RegNtDeleteValueKey,
+  RegNtSetInformationKey,
+  RegNtPreSetInformationKey = RegNtSetInformationKey,
+  RegNtRenameKey,
+  RegNtPreRenameKey = RegNtRenameKey,
+  RegNtEnumerateKey,
+  RegNtPreEnumerateKey = RegNtEnumerateKey,
+  RegNtEnumerateValueKey,
+  RegNtPreEnumerateValueKey = RegNtEnumerateValueKey,
+  RegNtQueryKey,
+  RegNtPreQueryKey = RegNtQueryKey,
+  RegNtQueryValueKey,
+  RegNtPreQueryValueKey = RegNtQueryValueKey,
+  RegNtQueryMultipleValueKey,
+  RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey,
+  RegNtPreCreateKey,
+  RegNtPostCreateKey,
+  RegNtPreOpenKey,
+  RegNtPostOpenKey,
+  RegNtKeyHandleClose,
+  RegNtPreKeyHandleClose = RegNtKeyHandleClose,
+  RegNtPostDeleteKey,
+  RegNtPostSetValueKey,
+  RegNtPostDeleteValueKey,
+  RegNtPostSetInformationKey,
+  RegNtPostRenameKey,
+  RegNtPostEnumerateKey,
+  RegNtPostEnumerateValueKey,
+  RegNtPostQueryKey,
+  RegNtPostQueryValueKey,
+  RegNtPostQueryMultipleValueKey,
+  RegNtPostKeyHandleClose,
+  RegNtPreCreateKeyEx,
+  RegNtPostCreateKeyEx,
+  RegNtPreOpenKeyEx,
+  RegNtPostOpenKeyEx
+} REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS;
+
+typedef NTSTATUS
+(DDKAPI *PEX_CALLBACK_FUNCTION)(
   IN PVOID  CallbackContext,
-  IN PVOID  Argument1,
+  IN REG_NOTIFY_CLASS  Argument1,
   IN PVOID  Argument2);
 
+typedef struct _REG_DELETE_KEY_INFORMATION
+{
+    PVOID Object;
+} REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION;
 
+typedef struct _REG_SET_VALUE_KEY_INFORMATION
+{
+    PVOID Object;
+    PUNICODE_STRING ValueName;
+    ULONG TitleIndex;
+    ULONG Type;
+    PVOID Data;
+    ULONG DataSize;
+} REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_DELETE_VALUE_KEY_INFORMATION 
+{
+    PVOID Object;
+    PUNICODE_STRING ValueName;
+} REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
+{
+    PVOID Object;
+    KEY_SET_INFORMATION_CLASS KeySetInformationClass;
+    PVOID KeySetInformation;
+    ULONG KeySetInformationLength;
+} REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION;
+
+typedef struct _REG_ENUMERATE_KEY_INFORMATION
+{
+    PVOID Object;
+    ULONG Index;
+    KEY_INFORMATION_CLASS KeyInformationClass;
+    PVOID KeyInformation;
+    ULONG Length;
+    PULONG ResultLength;
+} REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION;
+
+typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION 
+{
+    PVOID Object;
+    ULONG Index;
+    KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
+    PVOID KeyValueInformation;
+    ULONG Length;
+    PULONG ResultLength;
+} REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_QUERY_KEY_INFORMATION
+{
+    PVOID Object;
+    KEY_INFORMATION_CLASS KeyInformationClass;
+    PVOID KeyInformation;
+    ULONG Length;
+    PULONG ResultLength;
+} REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION;
+
+typedef struct _REG_QUERY_VALUE_KEY_INFORMATION 
+{
+    PVOID Object;
+    PUNICODE_STRING ValueName;
+    KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
+    PVOID KeyValueInformation;
+    ULONG Length;
+    PULONG ResultLength;
+} REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
+{
+    PVOID Object;
+    PKEY_VALUE_ENTRY ValueEntries;
+    ULONG EntryCount;
+    PVOID ValueBuffer;
+    PULONG BufferLength;
+    PULONG RequiredBufferLength;
+} REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_PRE_CREATE_KEY_INFORMATION 
+{
+    PUNICODE_STRING CompleteName;
+} REG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_CREATE_KEY_INFORMATION;
+
+typedef struct _REG_POST_CREATE_KEY_INFORMATION 
+{
+    PUNICODE_STRING CompleteName;
+    PVOID Object;
+    NTSTATUS Status;
+} REG_POST_CREATE_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION;
+
+typedef struct _REG_PRE_OPEN_KEY_INFORMATION 
+{
+    PUNICODE_STRING  CompleteName;
+} REG_PRE_OPEN_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;
+
+typedef struct _REG_POST_OPEN_KEY_INFORMATION 
+{
+    PUNICODE_STRING CompleteName;
+    PVOID Object;
+    NTSTATUS Status;
+} REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION;
+
+typedef struct _REG_POST_OPERATION_INFORMATION 
+{
+    PVOID Object;
+    NTSTATUS Status;
+} REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
 
 /*
 ** Storage structures
@@ -3601,8 +4751,8 @@ typedef struct _DISK_SIGNATURE {
   } DUMMYUNIONNAME;
 } DISK_SIGNATURE, *PDISK_SIGNATURE;
 
-typedef VOID DDKFASTAPI
-(*PTIME_UPDATE_NOTIFY_ROUTINE)(
+typedef VOID
+(DDKFASTAPI*PTIME_UPDATE_NOTIFY_ROUTINE)(
   IN HANDLE  ThreadId,
   IN KPROCESSOR_MODE  Mode);
 
@@ -3634,48 +4784,6 @@ typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS      0x0008
 #define DRIVER_VERIFIER_IO_CHECKING                 0x0010
 
-#define RTL_RANGE_LIST_ADD_IF_CONFLICT    0x00000001
-#define RTL_RANGE_LIST_ADD_SHARED         0x00000002
-
-#define RTL_RANGE_LIST_SHARED_OK          0x00000001
-#define RTL_RANGE_LIST_NULL_CONFLICT_OK   0x00000002
-
-#define RTL_RANGE_LIST_SHARED_OK          0x00000001
-#define RTL_RANGE_LIST_NULL_CONFLICT_OK   0x00000002
-
-#define RTL_RANGE_LIST_MERGE_IF_CONFLICT  RTL_RANGE_LIST_ADD_IF_CONFLICT
-
-typedef struct _RTL_RANGE {
-  ULONGLONG  Start;
-  ULONGLONG  End;
-  PVOID  UserData;
-  PVOID  Owner;
-  UCHAR  Attributes;
-  UCHAR  Flags;
-} RTL_RANGE, *PRTL_RANGE;
-
-#define RTL_RANGE_SHARED                  0x01
-#define RTL_RANGE_CONFLICT                0x02
-
-typedef struct _RTL_RANGE_LIST {
-  LIST_ENTRY  ListHead;
-  ULONG  Flags;
-  ULONG  Count;
-  ULONG  Stamp;
-} RTL_RANGE_LIST, *PRTL_RANGE_LIST;
-
-typedef struct _RANGE_LIST_ITERATOR {
-  PLIST_ENTRY  RangeListHead;
-  PLIST_ENTRY  MergedHead;
-  PVOID  Current;
-  ULONG  Stamp;
-} RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
-
-typedef BOOLEAN
-(*PRTL_CONFLICT_RANGE_CALLBACK)(
-  IN PVOID  Context,
-  IN PRTL_RANGE  Range);
-
 #define HASH_STRING_ALGORITHM_DEFAULT     0
 #define HASH_STRING_ALGORITHM_X65599      1
 #define HASH_STRING_ALGORITHM_INVALID     0xffffffff
@@ -3695,8 +4803,8 @@ typedef enum _SUITE_TYPE {
   MaxSuiteType
 } SUITE_TYPE;
 
-typedef VOID DDKAPI
-(*PTIMER_APC_ROUTINE)(
+typedef VOID
+(DDKAPI *PTIMER_APC_ROUTINE)(
   IN PVOID  TimerContext,
   IN ULONG  TimerLowValue,
   IN LONG  TimerHighValue);
@@ -3707,8 +4815,8 @@ typedef VOID DDKAPI
 ** WMI structures
 */
 
-typedef VOID DDKAPI
-(*WMI_NOTIFICATION_CALLBACK)(
+typedef VOID
+(DDKAPI *WMI_NOTIFICATION_CALLBACK)(
   PVOID  Wnode,
   PVOID  Context);
 
@@ -3725,11 +4833,11 @@ typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
 #define LOW_LEVEL                          0
 #define APC_LEVEL                          1
 #define DISPATCH_LEVEL                     2
-#define SYNCH_LEVEL                       27
 #define PROFILE_LEVEL                     27
 #define CLOCK1_LEVEL                      28
 #define CLOCK2_LEVEL                      28
 #define IPI_LEVEL                         29
+#define SYNCH_LEVEL                     (IPI_LEVEL-1)
 #define POWER_LEVEL                       30
 #define HIGH_LEVEL                        31
 
@@ -3743,7 +4851,7 @@ typedef struct _KPCR_TIB {
     DWORD  Version;             /* 10 */
   } DUMMYUNIONNAME;
   PVOID  ArbitraryUserPointer;  /* 14 */
-  struct _NT_TIB *Self;         /* 18 */
+  struct _KPCR_TIB *Self;       /* 18 */
 } KPCR_TIB, *PKPCR_TIB;         /* 1C */
 
 #define PCR_MINOR_VERSION 1
@@ -3752,7 +4860,7 @@ typedef struct _KPCR_TIB {
 typedef struct _KPCR {
   KPCR_TIB  Tib;                /* 00 */
   struct _KPCR  *Self;          /* 1C */
-  struct _KPRCB  *PCRCB;        /* 20 */
+  struct _KPRCB  *Prcb;         /* 20 */
   KIRQL  Irql;                  /* 24 */
   ULONG  IRR;                   /* 28 */
   ULONG  IrrActive;             /* 2C */
@@ -3783,13 +4891,13 @@ typedef struct _KFLOATING_SAVE {
 #define PAGE_SIZE                         0x1000
 #define PAGE_SHIFT                        12L
 
-extern NTOSAPI PVOID *MmHighestUserAddress;
-extern NTOSAPI PVOID *MmSystemRangeStart;
-extern NTOSAPI ULONG *MmUserProbeAddress;
+extern NTOSAPI PVOID MmHighestUserAddress;
+extern NTOSAPI PVOID MmSystemRangeStart;
+extern NTOSAPI ULONG_PTR MmUserProbeAddress;
 
-#define MM_HIGHEST_USER_ADDRESS           *MmHighestUserAddress
-#define MM_SYSTEM_RANGE_START             *MmSystemRangeStart
-#define MM_USER_PROBE_ADDRESS             *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
 
@@ -3810,7 +4918,7 @@ typedef enum _INTERLOCKED_RESULT {
   ResultPositive = RESULT_POSITIVE
 } INTERLOCKED_RESULT;
 
-NTOSAPI
+NTHALAPI
 KIRQL
 DDKAPI
 KeGetCurrentIrql(
@@ -3822,7 +4930,7 @@ KeGetCurrentIrql(
  *   VOID)
  */
 #define KeGetCurrentProcessorNumber() \
-  ((ULONG)KeGetCurrentKPCR()->ProcessorNumber)
+  ((ULONG)KeGetCurrentKPCR()->Number)
 
 #if !defined(__INTERLOCKED_DECLARED)
 #define __INTERLOCKED_DECLARED
@@ -3894,8 +5002,23 @@ DDKFASTAPI
 KefReleaseSpinLockFromDpcLevel(
   IN PKSPIN_LOCK  SpinLock);
 
+NTHALAPI
+KIRQL
+DDKFASTAPI
+KfAcquireSpinLock(
+  IN PKSPIN_LOCK SpinLock);
+
+NTHALAPI
+VOID
+DDKFASTAPI
+KfReleaseSpinLock(
+  IN PKSPIN_LOCK SpinLock,
+  IN KIRQL NewIrql);
+
 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
+#define KeAcquireSpinLock(a,b)  *(b) = KfAcquireSpinLock(a)
+#define KeReleaseSpinLock(a,b)  KfReleaseSpinLock(a,b)
 
 #define RtlCopyMemoryNonTemporal RtlCopyMemory
 
@@ -3936,8 +5059,8 @@ KefReleaseSpinLockFromDpcLevel(
  *   IN PCHAR  Field);
  */
 #ifndef CONTAINING_RECORD
-#define CONTAINING_RECORD(Address, Type, Field) \
-  ((Type *) (((ULONG_PTR) Address) - FIELD_OFFSET(Type, Field)))
+#define CONTAINING_RECORD(address, type, field) \
+  ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
 #endif
 
 /* LONG
@@ -3978,20 +5101,20 @@ RtlAssert(
 #ifdef DBG
 
 #define ASSERT(exp) \
-  ((!(exp)) ? \
-    (RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE) : TRUE)
+  (VOID)((!(exp)) ? \
+    RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE : TRUE)
 
 #define ASSERTMSG(msg, exp) \
-  ((!(exp)) ? \
-    (RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE) : TRUE)
+  (VOID)((!(exp)) ? \
+    RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE : TRUE)
 
 #define RTL_SOFT_ASSERT(exp) \
-  ((!(_exp)) ? \
-    (DbgPrint("%s(%d): Soft assertion failed\n   Expression: %s\n", __FILE__, __LINE__, #exp), FALSE) : TRUE)
+  (VOID)((!(_exp)) ? \
+    DbgPrint("%s(%d): Soft assertion failed\n   Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
 
 #define RTL_SOFT_ASSERTMSG(msg, exp) \
-  ((!(exp)) ? \
-    (DbgPrint("%s(%d): Soft assertion failed\n   Expression: %s\n   Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE) : TRUE)
+  (VOID)((!(exp)) ? \
+    DbgPrint("%s(%d): Soft assertion failed\n   Expression: %s\n   Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
 
 #define RTL_VERIFY(exp) ASSERT(exp)
 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
@@ -4015,6 +5138,17 @@ RtlAssert(
 
 #endif /* DBG */
 
+/* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
+#if defined(_NTSYSTEM_) || defined(__GNUC__)
+#define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
+#define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
+#else
+#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
+#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
+#endif /* _NT_SYSTEM */
+
+extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
+extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
 
 /*
 ** Driver support routines
@@ -4022,49 +5156,37 @@ RtlAssert(
 
 /** Runtime library routines **/
 
-/*
- * VOID
- * InitializeListHead(
- *   IN PLIST_ENTRY  ListHead)
- */
-#define InitializeListHead(_ListHead) \
-{ \
-  (_ListHead)->Flink = (_ListHead); \
-  (_ListHead)->Blink = (_ListHead); \
+static __inline VOID
+InitializeListHead(
+  IN PLIST_ENTRY  ListHead)
+{
+  ListHead->Flink = ListHead->Blink = ListHead;
 }
 
-/*
- * VOID
- * InsertHeadList(
- *   IN PLIST_ENTRY  ListHead,
- *   IN PLIST_ENTRY  Entry)
- */
-#define InsertHeadList(_ListHead, \
-                       _Entry) \
-{ \
-  PLIST_ENTRY _OldFlink; \
-  _OldFlink = (_ListHead)->Flink; \
-  (_Entry)->Flink = _OldFlink; \
-  (_Entry)->Blink = (_ListHead); \
-  _OldFlink->Blink = (_Entry); \
-  (_ListHead)->Flink = (_Entry); \
+static __inline VOID
+InsertHeadList(
+  IN PLIST_ENTRY  ListHead,
+  IN PLIST_ENTRY  Entry)
+{
+  PLIST_ENTRY OldFlink;
+  OldFlink = ListHead->Flink;
+  Entry->Flink = OldFlink;
+  Entry->Blink = ListHead;
+  OldFlink->Blink = Entry;
+  ListHead->Flink = Entry;
 }
 
-/*
- * VOID
- * InsertTailList(
- *   IN PLIST_ENTRY  ListHead,
- *   IN PLIST_ENTRY  Entry)
- */
-#define InsertTailList(_ListHead, \
-                       _Entry) \
-{ \
-       PLIST_ENTRY _OldBlink; \
-       _OldBlink = (_ListHead)->Blink; \
-       (_Entry)->Flink = (_ListHead); \
-       (_Entry)->Blink = _OldBlink; \
-       _OldBlink->Flink = (_Entry); \
-       (_ListHead)->Blink = (_Entry); \
+static __inline VOID
+InsertTailList(
+  IN PLIST_ENTRY  ListHead,
+  IN PLIST_ENTRY  Entry)
+{
+  PLIST_ENTRY OldBlink;
+  OldBlink = ListHead->Blink;
+  Entry->Flink = ListHead;
+  Entry->Blink = OldBlink;
+  OldBlink->Flink = Entry;
+  ListHead->Blink = Entry;
 }
 
 /*
@@ -4075,19 +5197,19 @@ RtlAssert(
 #define IsListEmpty(_ListHead) \
   ((_ListHead)->Flink == (_ListHead))
 
-static __inline PSINGLE_LIST_ENTRY 
-PopEntryList(
-  IN PSINGLE_LIST_ENTRY  ListHead)
-{
-       PSINGLE_LIST_ENTRY Entry;
-
-       Entry = ListHead->Next;
-       if (Entry != NULL)
-       {
-               ListHead->Next = Entry->Next;
-       }
-  return Entry;
-}
+/*
+ * PSINGLE_LIST_ENTRY
+ * PopEntryList(
+ *   IN PSINGLE_LIST_ENTRY  ListHead)
+ */
+#define PopEntryList(ListHead) \
+  (ListHead)->Next; \
+  { \
+    PSINGLE_LIST_ENTRY _FirstEntry; \
+    _FirstEntry = (ListHead)->Next; \
+    if (_FirstEntry != NULL) \
+      (ListHead)->Next = _FirstEntry->Next; \
+  }
 
 /*
  * VOID
@@ -4095,73 +5217,49 @@ PopEntryList(
  *   IN PSINGLE_LIST_ENTRY  ListHead,
  *   IN PSINGLE_LIST_ENTRY  Entry)
  */
-#define PushEntryList(_ListHead, \
-                      _Entry) \
-{ \
+#define PushEntryList(_ListHead, _Entry) \
        (_Entry)->Next = (_ListHead)->Next; \
        (_ListHead)->Next = (_Entry); \
-}
 
-/*
- * VOID
- * RemoveEntryList(
- *   IN PLIST_ENTRY  Entry)
- */
-#define RemoveEntryList(_Entry) \
-{ \
-       PLIST_ENTRY _OldFlink; \
-       PLIST_ENTRY _OldBlink; \
-       _OldFlink = (_Entry)->Flink; \
-       _OldBlink = (_Entry)->Blink; \
-       _OldFlink->Blink = _OldBlink; \
-       _OldBlink->Flink = _OldFlink; \
-  (_Entry)->Flink = NULL; \
-  (_Entry)->Blink = NULL; \
+static __inline BOOLEAN
+RemoveEntryList(
+  IN PLIST_ENTRY  Entry)
+{
+  PLIST_ENTRY OldFlink;
+  PLIST_ENTRY OldBlink;
+
+  OldFlink = Entry->Flink;
+  OldBlink = Entry->Blink;
+  OldFlink->Blink = OldBlink;
+  OldBlink->Flink = OldFlink;
+  return (OldFlink == OldBlink);
 }
 
-static __inline PLIST_ENTRY 
+static __inline PLIST_ENTRY
 RemoveHeadList(
   IN PLIST_ENTRY  ListHead)
 {
-       PLIST_ENTRY OldFlink;
-       PLIST_ENTRY OldBlink;
-       PLIST_ENTRY Entry;
-
-       Entry = ListHead->Flink;
-       OldFlink = ListHead->Flink->Flink;
-       OldBlink = ListHead->Flink->Blink;
-       OldFlink->Blink = OldBlink;
-       OldBlink->Flink = OldFlink;
-
-  if (Entry != ListHead)
-  {
-    Entry->Flink = NULL;
-    Entry->Blink = NULL;
-  }
+  PLIST_ENTRY Flink;
+  PLIST_ENTRY Entry;
 
-       return Entry;
+  Entry = ListHead->Flink;
+  Flink = Entry->Flink;
+  ListHead->Flink = Flink;
+  Flink->Blink = ListHead;
+  return Entry;
 }
 
 static __inline PLIST_ENTRY
 RemoveTailList(
   IN PLIST_ENTRY  ListHead)
 {
-       PLIST_ENTRY OldFlink;
-       PLIST_ENTRY OldBlink;
-       PLIST_ENTRY Entry;
-
-       Entry = ListHead->Blink;
-       OldFlink = ListHead->Blink->Flink;
-       OldBlink = ListHead->Blink->Blink;
-       OldFlink->Blink = OldBlink;
-       OldBlink->Flink = OldFlink;
-
-  if (Entry != ListHead)
-  {
-    Entry->Flink = NULL;
-    Entry->Blink = NULL;
-  }
-   
+  PLIST_ENTRY Blink;
+  PLIST_ENTRY Entry;
+
+  Entry = ListHead->Blink;
+  Blink = Entry->Blink;
+  ListHead->Blink = Blink;
+  Blink->Flink = ListHead;
   return Entry;
 }
 
@@ -4195,20 +5293,14 @@ InterlockedPushEntrySList(
 NTOSAPI
 ULONG
 DDKAPI
-RtlAnsiStringToUnicodeSize(
-  IN PANSI_STRING  AnsiString);
+RtlxAnsiStringToUnicodeSize(
+  IN PCANSI_STRING  AnsiString);
 
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlAddRange(
-  IN OUT PRTL_RANGE_LIST  RangeList,
-  IN ULONGLONG  Start,
-  IN ULONGLONG  End,
-  IN UCHAR  Attributes,
-  IN ULONG  Flags,
-  IN PVOID  UserData  OPTIONAL,
-  IN PVOID  Owner  OPTIONAL);
+#define RtlAnsiStringToUnicodeSize(STRING) (               \
+  NLS_MB_CODE_PAGE_TAG ?                                   \
+  RtlxAnsiStringToUnicodeSize(STRING) :                    \
+  ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR)   \
+)
 
 NTOSAPI
 NTSTATUS
@@ -4223,7 +5315,7 @@ NTSTATUS
 DDKAPI
 RtlAppendUnicodeStringToString(
   IN OUT PUNICODE_STRING  Destination,
-  IN PUNICODE_STRING  Source);
+  IN PCUNICODE_STRING  Source);
 
 NTOSAPI
 NTSTATUS
@@ -4238,7 +5330,7 @@ DDKAPI
 RtlAreBitsClear(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  StartingIndex,
-  IN ULONG  Length); 
+  IN ULONG  Length);
 
 NTOSAPI
 BOOLEAN
@@ -4246,7 +5338,7 @@ DDKAPI
 RtlAreBitsSet(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  StartingIndex,
-  IN ULONG  Length); 
+  IN ULONG  Length);
 
 NTOSAPI
 NTSTATUS
@@ -4261,7 +5353,7 @@ ULONG
 DDKAPI
 RtlCheckBit(
   IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  BitPosition); 
+  IN ULONG  BitPosition);
 
 NTOSAPI
 NTSTATUS
@@ -4274,7 +5366,7 @@ NTOSAPI
 VOID
 DDKAPI
 RtlClearAllBits(
-  IN PRTL_BITMAP  BitMapHeader); 
+  IN PRTL_BITMAP  BitMapHeader);
 
 NTOSAPI
 VOID
@@ -4289,7 +5381,7 @@ DDKAPI
 RtlClearBits(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  StartingIndex,
-  IN ULONG  NumberToClear); 
+  IN ULONG  NumberToClear);
 
 NTOSAPI
 SIZE_T
@@ -4311,15 +5403,20 @@ NTOSAPI
 LONG
 DDKAPI
 RtlCompareUnicodeString(
-  IN PUNICODE_STRING  String1,
-  IN PUNICODE_STRING  String2,
+  IN PCUNICODE_STRING  String1,
+  IN PCUNICODE_STRING  String2,
   IN BOOLEAN  CaseInSensitive);
 
-NTOSAPI
+static __inline
 LARGE_INTEGER
-DDKAPI
-RtlConvertLongToLargeInteger(
-  IN LONG  SignedInteger);
+NTAPI_INLINE
+RtlConvertLongToLargeInteger(LONG SignedInteger)
+{
+    LARGE_INTEGER Result;
+
+    Result.QuadPart = SignedInteger;
+    return Result;
+}
 
 NTOSAPI
 LUID
@@ -4363,13 +5460,6 @@ RtlCopyMemory32(
   IN CONST VOID UNALIGNED  *Source,
   IN ULONG  Length);
 
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlCopyRangeList(
-  OUT PRTL_RANGE_LIST  CopyRangeList,
-  IN PRTL_RANGE_LIST  RangeList);
-
 NTOSAPI
 VOID
 DDKAPI
@@ -4382,7 +5472,7 @@ VOID
 DDKAPI
 RtlCopyUnicodeString(
   IN OUT PUNICODE_STRING  DestinationString,
-  IN PUNICODE_STRING  SourceString);
+  IN PCUNICODE_STRING  SourceString);
 
 NTOSAPI
 NTSTATUS
@@ -4398,22 +5488,6 @@ RtlCreateSecurityDescriptor(
   IN OUT PSECURITY_DESCRIPTOR  SecurityDescriptor,
   IN ULONG  Revision);
 
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlDeleteOwnersRanges(
-  IN OUT PRTL_RANGE_LIST  RangeList,
-  IN PVOID  Owner);
-
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlDeleteRange(
-  IN OUT PRTL_RANGE_LIST  RangeList,
-  IN ULONGLONG  Start,
-  IN ULONGLONG  End,
-  IN PVOID  Owner);
-
 NTOSAPI
 NTSTATUS
 DDKAPI
@@ -4424,7 +5498,7 @@ RtlDeleteRegistryValue(
 
 /*
  * BOOLEAN
- * RtlEqualLuid( 
+ * RtlEqualLuid(
  *   IN PLUID  Luid1,
  *   IN PLUID  Luid2)
  */
@@ -4479,7 +5553,7 @@ DDKAPI
 RtlFindClearBits(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  NumberToFind,
-  IN ULONG  HintIndex); 
+  IN ULONG  HintIndex);
 
 NTOSAPI
 ULONG
@@ -4487,15 +5561,15 @@ DDKAPI
 RtlFindClearBitsAndSet(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  NumberToFind,
-  IN ULONG  HintIndex); 
+  IN ULONG  HintIndex);
 
 NTOSAPI
 ULONG
 DDKAPI
-RtlFindClearRuns( 
-  IN PRTL_BITMAP  BitMapHeader, 
-  OUT PRTL_BITMAP_RUN  RunArray, 
-  IN ULONG  SizeOfRunArray, 
+RtlFindClearRuns(
+  IN PRTL_BITMAP  BitMapHeader,
+  OUT PRTL_BITMAP_RUN  RunArray,
+  IN ULONG  SizeOfRunArray,
   IN BOOLEAN  LocateLongestRuns);
 
 NTOSAPI
@@ -4509,9 +5583,9 @@ NTOSAPI
 ULONG
 DDKAPI
 RtlFindLastBackwardRunClear(
-  IN PRTL_BITMAP  BitMapHeader, 
-  IN ULONG  FromIndex, 
-  OUT PULONG  StartingRunIndex); 
+  IN PRTL_BITMAP  BitMapHeader,
+  IN ULONG  FromIndex,
+  OUT PULONG  StartingRunIndex);
 
 NTOSAPI
 CCHAR
@@ -4524,7 +5598,7 @@ ULONG
 DDKAPI
 RtlFindLongestRunClear(
   IN PRTL_BITMAP  BitMapHeader,
-  OUT PULONG  StartingIndex); 
+  OUT PULONG  StartingIndex);
 
 NTOSAPI
 CCHAR
@@ -4536,32 +5610,17 @@ NTOSAPI
 ULONG
 DDKAPI
 RtlFindNextForwardRunClear(
-  IN PRTL_BITMAP  BitMapHeader, 
-  IN ULONG  FromIndex, 
+  IN PRTL_BITMAP  BitMapHeader,
+  IN ULONG  FromIndex,
   OUT PULONG  StartingRunIndex);
 
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlFindRange(
-  IN PRTL_RANGE_LIST  RangeList,
-  IN ULONGLONG  Minimum,
-  IN ULONGLONG  Maximum,
-  IN ULONG  Length,
-  IN ULONG  Alignment,
-  IN ULONG  Flags,
-  IN UCHAR  AttributeAvailableMask,
-  IN PVOID  Context  OPTIONAL,
-  IN PRTL_CONFLICT_RANGE_CALLBACK  Callback  OPTIONAL,
-  OUT PULONGLONG  Start);
-
 NTOSAPI
 ULONG
 DDKAPI
 RtlFindSetBits(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  NumberToFind,
-  IN ULONG  HintIndex); 
+  IN ULONG  HintIndex);
 
 NTOSAPI
 ULONG
@@ -4569,7 +5628,7 @@ DDKAPI
 RtlFindSetBitsAndClear(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  NumberToFind,
-  IN ULONG  HintIndex); 
+  IN ULONG  HintIndex);
 
 NTOSAPI
 VOID
@@ -4577,12 +5636,6 @@ DDKAPI
 RtlFreeAnsiString(
   IN PANSI_STRING  AnsiString);
 
-NTOSAPI
-VOID
-DDKAPI
-RtlFreeRangeList(
-  IN PRTL_RANGE_LIST  RangeList);
-
 NTOSAPI
 VOID
 DDKAPI
@@ -4605,34 +5658,8 @@ RtlGetVersion(
 NTOSAPI
 NTSTATUS
 DDKAPI
-RtlGetFirstRange(
-  IN PRTL_RANGE_LIST  RangeList,
-  OUT PRTL_RANGE_LIST_ITERATOR  Iterator,
-  OUT PRTL_RANGE  *Range);
-
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlGetNextRange(
-  IN OUT  PRTL_RANGE_LIST_ITERATOR  Iterator,
-  OUT PRTL_RANGE  *Range,
-  IN BOOLEAN  MoveForwards);
-
-#define FOR_ALL_RANGES(RangeList, Iterator, Current)          \
-  for (RtlGetFirstRange((RangeList), (Iterator), &(Current)); \
-    (Current) != NULL;                                        \
-    RtlGetNextRange((Iterator), &(Current), TRUE))
-
-#define FOR_ALL_RANGES_BACKWARDS(RangeList, Iterator, Current) \
-  for (RtlGetLastRange((RangeList), (Iterator), &(Current));   \
-    (Current) != NULL;                                         \
-    RtlGetNextRange((Iterator), &(Current), FALSE))
-
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlGUIDFromString( 
-  IN PUNICODE_STRING  GuidString, 
+RtlGUIDFromString(
+  IN PUNICODE_STRING  GuidString,
   OUT GUID  *Guid);
 
 NTOSAPI
@@ -4657,13 +5684,7 @@ DDKAPI
 RtlInitializeBitMap(
   IN PRTL_BITMAP  BitMapHeader,
   IN PULONG  BitMapBuffer,
-  IN ULONG  SizeOfBitMap); 
-
-NTOSAPI
-VOID
-DDKAPI
-RtlInitializeRangeList(
-  IN OUT PRTL_RANGE_LIST  RangeList);
+  IN ULONG  SizeOfBitMap);
 
 NTOSAPI
 VOID
@@ -4703,26 +5724,6 @@ RtlIntPtrToUnicodeString(
   ULONG  Base  OPTIONAL,
   PUNICODE_STRING  String);
 
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlInvertRangeList(
-  OUT PRTL_RANGE_LIST  InvertedRangeList,
-  IN PRTL_RANGE_LIST  RangeList);
-
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlIsRangeAvailable(
-  IN PRTL_RANGE_LIST  RangeList,
-  IN ULONGLONG  Start,
-  IN ULONGLONG  End,
-  IN ULONG  Flags,
-  IN UCHAR  AttributeAvailableMask,
-  IN PVOID  Context  OPTIONAL,
-  IN PRTL_CONFLICT_RANGE_CALLBACK  Callback  OPTIONAL,
-  OUT PBOOLEAN  Available);
-
 /*
  * BOOLEAN
  * RtlIsZeroLuid(
@@ -4744,15 +5745,6 @@ RtlMapGenericMask(
   IN OUT PACCESS_MASK  AccessMask,
   IN PGENERIC_MAPPING  GenericMapping);
 
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlMergeRangeLists(
-  OUT PRTL_RANGE_LIST  MergedRangeList,
-  IN PRTL_RANGE_LIST  RangeList1,
-  IN PRTL_RANGE_LIST  RangeList2,
-  IN ULONG  Flags);
-
 /*
  * VOID
  * RtlMoveMemory(
@@ -4772,7 +5764,7 @@ NTOSAPI
 ULONG
 DDKAPI
 RtlNumberOfSetBits(
-  IN PRTL_BITMAP  BitMapHeader); 
+  IN PRTL_BITMAP  BitMapHeader);
 
 NTOSAPI
 VOID
@@ -4784,9 +5776,9 @@ RtlPrefetchMemoryNonTemporal(
 NTOSAPI
 BOOLEAN
 DDKAPI
-RtlPrefixUnicodeString( 
-  IN PUNICODE_STRING  String1, 
-  IN PUNICODE_STRING  String2, 
+RtlPrefixUnicodeString(
+  IN PCUNICODE_STRING  String1,
+  IN PCUNICODE_STRING  String2,
   IN BOOLEAN  CaseInSensitive);
 
 NTOSAPI
@@ -4799,12 +5791,29 @@ RtlQueryRegistryValues(
   IN PVOID  Context,
   IN PVOID  Environment  OPTIONAL);
 
-NTOSAPI
-VOID
-DDKAPI
-RtlRetrieveUlong(
-  IN OUT PULONG  DestinationAddress,
-  IN PULONG  SourceAddress);
+  
+#define LONG_SIZE (sizeof(LONG))
+#define LONG_MASK (LONG_SIZE - 1)
+
+/*
+ * 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)); \
+    }
 
 NTOSAPI
 VOID
@@ -4817,7 +5826,7 @@ NTOSAPI
 VOID
 DDKAPI
 RtlSetAllBits(
-  IN PRTL_BITMAP  BitMapHeader); 
+  IN PRTL_BITMAP  BitMapHeader);
 
 NTOSAPI
 VOID
@@ -4832,7 +5841,7 @@ DDKAPI
 RtlSetBits(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  StartingIndex,
-  IN ULONG  NumberToSet); 
+  IN ULONG  NumberToSet);
 
 NTOSAPI
 NTSTATUS
@@ -4874,8 +5883,8 @@ RtlStoreUshort(
 NTOSAPI
 NTSTATUS
 DDKAPI
-RtlStringFromGUID( 
-  IN REFGUID  Guid, 
+RtlStringFromGUID(
+  IN REFGUID  Guid,
   OUT PUNICODE_STRING  GuidString);
 
 NTOSAPI
@@ -4911,32 +5920,32 @@ DDKFASTAPI
 RtlUlonglongByteSwap(
   IN ULONGLONG  Source);
 
-NTOSAPI
-ULONG
-DDKAPI
-RtlUnicodeStringToAnsiSize(
-  IN PUNICODE_STRING  UnicodeString);
+#define RtlUnicodeStringToAnsiSize(STRING) (                  \
+    NLS_MB_CODE_PAGE_TAG ?                                    \
+    RtlxUnicodeStringToAnsiSize(STRING) :                     \
+    ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
+)
 
 NTOSAPI
 NTSTATUS
 DDKAPI
 RtlUnicodeStringToAnsiString(
   IN OUT PANSI_STRING  DestinationString,
-  IN PUNICODE_STRING  SourceString,
+  IN PCUNICODE_STRING  SourceString,
   IN BOOLEAN  AllocateDestinationString);
 
 NTOSAPI
 NTSTATUS
 DDKAPI
 RtlUnicodeStringToInteger(
-  IN PUNICODE_STRING  String,
+  IN PCUNICODE_STRING  String,
   IN ULONG  Base  OPTIONAL,
   OUT PULONG  Value);
 
 NTOSAPI
 WCHAR
 DDKAPI
-RtlUpcaseUnicodeChar( 
+RtlUpcaseUnicodeChar(
   IN WCHAR  SourceCharacter);
 
 NTOSAPI
@@ -4950,7 +5959,7 @@ RtlUpcaseUnicodeString(
 NTOSAPI
 CHAR
 DDKAPI
-RtlUpperChar( 
+RtlUpperChar(
   IN CHAR Character);
 
 NTOSAPI
@@ -4970,7 +5979,7 @@ NTOSAPI
 BOOLEAN
 DDKAPI
 RtlValidRelativeSecurityDescriptor(
-  IN PSECURITY_DESCRIPTOR  SecurityDescriptorInput,
+  IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
   IN ULONG  SecurityDescriptorLength,
   IN SECURITY_INFORMATION  RequiredInformation);
 
@@ -5018,7 +6027,7 @@ NTOSAPI
 ULONG
 DDKAPI
 RtlxUnicodeStringToAnsiSize(
-  IN PUNICODE_STRING  UnicodeString);
+  IN PCUNICODE_STRING  UnicodeString);
 
 /*
  * VOID
@@ -5036,9 +6045,59 @@ RtlxUnicodeStringToAnsiSize(
 #endif
 
 
+/* Guarded Mutex routines */
+
+VOID 
+FASTCALL
+KeAcquireGuardedMutex(
+    PKGUARDED_MUTEX GuardedMutex
+);
+
+VOID
+FASTCALL
+KeAcquireGuardedMutexUnsafe(
+    PKGUARDED_MUTEX GuardedMutex
+);
+
+VOID 
+STDCALL
+KeEnterGuardedRegion(VOID);
+
+VOID
+STDCALL
+KeLeaveGuardedRegion(VOID);
+
+VOID 
+FASTCALL
+KeInitializeGuardedMutex(
+    PKGUARDED_MUTEX GuardedMutex
+);
+
+VOID 
+FASTCALL
+KeReleaseGuardedMutexUnsafe(
+    PKGUARDED_MUTEX GuardedMutex
+);
+
+VOID 
+FASTCALL
+KeReleaseGuardedMutex(
+    PKGUARDED_MUTEX GuardedMutex
+);
+
+BOOL 
+FASTCALL
+KeTryToAcquireGuardedMutex(
+    PKGUARDED_MUTEX GuardedMutex
+);
+
 /** Executive support routines **/
 
+#if defined(_X86_)
+NTHALAPI
+#else
 NTOSAPI
+#endif
 VOID
 DDKFASTAPI
 ExAcquireFastMutex(
@@ -5082,14 +6141,14 @@ static __inline PVOID
 ExAllocateFromNPagedLookasideList(
   IN PNPAGED_LOOKASIDE_LIST  Lookaside)
 {
-       PVOID Entry;
-
-       Lookaside->TotalAllocates++;
-  Entry = InterlockedPopEntrySList(&Lookaside->ListHead);
-       if (Entry == NULL) {
-               Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++;
-               Entry = (Lookaside->Allocate)(Lookaside->Type, Lookaside->Size, Lookaside->Tag);
-       }
+  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;
 }
 
@@ -5099,12 +6158,11 @@ ExAllocateFromPagedLookasideList(
 {
   PVOID Entry;
 
-  Lookaside->TotalAllocates++;
-  Entry = InterlockedPopEntrySList(&Lookaside->ListHead);
+  Lookaside->L.TotalAllocates++;
+  Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
   if (Entry == NULL) {
-    Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++;
-    Entry = (Lookaside->Allocate)(Lookaside->Type,
-      Lookaside->Size, Lookaside->Tag);
+    Lookaside->L.AllocateMisses++;
+    Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, Lookaside->L.Size, Lookaside->L.Tag);
   }
   return Entry;
 }
@@ -5216,14 +6274,13 @@ ExFreeToNPagedLookasideList(
   IN PNPAGED_LOOKASIDE_LIST  Lookaside,
   IN PVOID  Entry)
 {
-  Lookaside->TotalFrees++;
-       if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) {
-               Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++;
-               (Lookaside->Free)(Entry);
+  Lookaside->L.TotalFrees++;
+  if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
+    Lookaside->L.FreeMisses++;
+    (Lookaside->L.Free)(Entry);
   } else {
-               InterlockedPushEntrySList(&Lookaside->ListHead,
-      (PSLIST_ENTRY)Entry);
-       }
+    InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
+  }
 }
 
 static __inline VOID
@@ -5231,12 +6288,12 @@ ExFreeToPagedLookasideList(
   IN PPAGED_LOOKASIDE_LIST  Lookaside,
   IN PVOID  Entry)
 {
-  Lookaside->TotalFrees++;
-  if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) {
-    Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++;
-    (Lookaside->Free)(Entry);
+  Lookaside->L.TotalFrees++;
+  if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
+    Lookaside->L.FreeMisses++;
+    (Lookaside->L.Free)(Entry);
   } else {
-    InterlockedPushEntrySList(&Lookaside->ListHead, (PSLIST_ENTRY)Entry);
+    InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
   }
 }
 
@@ -5256,7 +6313,7 @@ ExGetExclusiveWaiterCount(
 NTOSAPI
 KPROCESSOR_MODE
 DDKAPI
-ExGetPreviousMode( 
+ExGetPreviousMode(
   VOID);
 
 NTOSAPI
@@ -5356,7 +6413,15 @@ ExInterlockedCompareExchange64(
   IN OUT PLONGLONG  Destination,
   IN PLONGLONG  Exchange,
   IN PLONGLONG  Comparand,
-  IN PKSPIN_LOCK  Lock); 
+  IN PKSPIN_LOCK  Lock);
+
+NTOSAPI
+LONGLONG
+DDKFASTAPI
+ExfInterlockedCompareExchange64(
+  IN OUT LONGLONG volatile  *Destination,
+  IN PLONGLONG  Exchange,
+  IN PLONGLONG  Comperand);
 
 NTOSAPI
 PSINGLE_LIST_ENTRY
@@ -5495,7 +6560,11 @@ DDKAPI
 ExReinitializeResourceLite(
   IN PERESOURCE  Resource);
 
+#if defined(_X86_)
+NTHALAPI
+#else
 NTOSAPI
+#endif
 VOID
 DDKFASTAPI
 ExReleaseFastMutex(
@@ -5523,7 +6592,7 @@ ExReleaseResourceLite(
 NTOSAPI
 VOID
 DDKAPI
-ExSetResourceOwnerPointer( 
+ExSetResourceOwnerPointer(
   IN PERESOURCE  Resource,
   IN PVOID  OwnerPointer);
 
@@ -5541,7 +6610,11 @@ ExSystemTimeToLocalTime(
   IN PLARGE_INTEGER  SystemTime,
   OUT PLARGE_INTEGER  LocalTime);
 
+#ifdef _M_IX86
+NTHALAPI
+#else
 NTOSAPI
+#endif
 BOOLEAN
 DDKFASTAPI
 ExTryToAcquireFastMutex(
@@ -5634,6 +6707,12 @@ FsRtlIsTotalDeviceFailure(
 
 /** Hardware abstraction layer routines **/
 
+NTHALAPI
+BOOLEAN
+DDKAPI
+HalMakeBeep(
+  IN ULONG Frequency);
+
 NTOSAPI
 VOID
 DDKFASTAPI
@@ -5641,9 +6720,9 @@ HalExamineMBR(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  SectorSize,
   IN ULONG  MBRTypeIdentifier,
-  OUT PVOID  Buffer);
+  OUT PVOID  *Buffer);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKAPI
 READ_PORT_BUFFER_UCHAR(
@@ -5651,7 +6730,7 @@ READ_PORT_BUFFER_UCHAR(
   IN PUCHAR  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKAPI
 READ_PORT_BUFFER_ULONG(
@@ -5659,7 +6738,7 @@ READ_PORT_BUFFER_ULONG(
   IN PULONG  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKAPI
 READ_PORT_BUFFER_USHORT(
@@ -5667,19 +6746,19 @@ READ_PORT_BUFFER_USHORT(
   IN PUSHORT  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTHALAPI
 UCHAR
 DDKAPI
 READ_PORT_UCHAR(
   IN PUCHAR  Port);
 
-NTOSAPI
+NTHALAPI
 ULONG
 DDKAPI
 READ_PORT_ULONG(
   IN PULONG  Port);
 
-NTOSAPI
+NTHALAPI
 USHORT
 DDKAPI
 READ_PORT_USHORT(
@@ -5727,7 +6806,7 @@ DDKAPI
 READ_REGISTER_USHORT(
   IN PUSHORT  Register);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKAPI
 WRITE_PORT_BUFFER_UCHAR(
@@ -5735,7 +6814,7 @@ WRITE_PORT_BUFFER_UCHAR(
   IN PUCHAR  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKAPI
 WRITE_PORT_BUFFER_ULONG(
@@ -5743,7 +6822,7 @@ WRITE_PORT_BUFFER_ULONG(
   IN PULONG  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKAPI
 WRITE_PORT_BUFFER_USHORT(
@@ -5751,21 +6830,21 @@ WRITE_PORT_BUFFER_USHORT(
   IN PUSHORT  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKAPI
 WRITE_PORT_UCHAR(
   IN PUCHAR  Port,
   IN UCHAR  Value);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKAPI
 WRITE_PORT_ULONG(
   IN PULONG  Port,
   IN ULONG  Value);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKAPI
 WRITE_PORT_USHORT(
@@ -5882,22 +6961,6 @@ IoAllocateDriverObjectExtension(
   IN ULONG  DriverObjectExtensionSize,
   OUT PVOID  *DriverObjectExtension);
 
-typedef struct _IO_ERROR_LOG_PACKET { 
-       UCHAR  MajorFunctionCode; 
-       UCHAR  RetryCount; 
-       USHORT  DumpDataSize; 
-       USHORT  NumberOfStrings; 
-       USHORT  StringOffset; 
-       USHORT  EventCategory; 
-       NTSTATUS  ErrorCode; 
-       ULONG  UniqueErrorValue; 
-       NTSTATUS  FinalStatus; 
-       ULONG  SequenceNumber; 
-       ULONG  IoControlCode; 
-       LARGE_INTEGER  DeviceOffset; 
-       ULONG  DumpData[1]; 
-} IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET; 
-
 NTOSAPI
 PVOID
 DDKAPI
@@ -6171,7 +7234,7 @@ IoCreateUnprotectedSymbolicLink(
   IN PUNICODE_STRING  DeviceName);
 
 NTOSAPI
-VOID
+NTSTATUS
 DDKAPI
 IoCsqInitialize(
   PIO_CSQ  Csq,
@@ -6302,7 +7365,7 @@ IoGetBootDiskInformation(
 NTOSAPI
 PCONFIGURATION_INFORMATION
 DDKAPI
-IoGetConfigurationInformation( 
+IoGetConfigurationInformation(
   VOID);
 
 NTOSAPI
@@ -6667,6 +7730,16 @@ IoReleaseRemoveLockEx(
   IN PVOID  Tag,
   IN ULONG  RemlockSize);
 
+/*
+ * VOID
+ * IoReleaseRemoveLock(
+ *   IN PIO_REMOVE_LOCK  RemoveLock,
+ *   IN PVOID  Tag)
+ */
+#define IoReleaseRemoveLock(_RemoveLock, \
+                            _Tag) \
+  IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+
 /*
  * VOID
  * IoReleaseRemoveLockAndWait(
@@ -6675,7 +7748,7 @@ IoReleaseRemoveLockEx(
  */
 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
                                    _Tag) \
-  IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+  IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
 
 NTOSAPI
 VOID
@@ -6803,14 +7876,14 @@ IoReuseIrp(
 }
 
 NTOSAPI
-VOID
+NTSTATUS
 DDKAPI
 IoSetCompletionRoutineEx(
   IN PDEVICE_OBJECT  DeviceObject,
   IN PIRP  Irp,
   IN PIO_COMPLETION_ROUTINE  CompletionRoutine,
   IN PVOID  Context,
-  IN BOOLEAN    InvokeOnSuccess,
+  IN BOOLEAN  InvokeOnSuccess,
   IN BOOLEAN  InvokeOnError,
   IN BOOLEAN  InvokeOnCancel);
 
@@ -6860,9 +7933,9 @@ NTOSAPI
 VOID
 DDKAPI
 IoSetStartIoAttributes(
-  IN PDEVICE_OBJECT  DeviceObject, 
-  IN BOOLEAN  DeferredStartIo, 
-  IN BOOLEAN  NonCancelable); 
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN BOOLEAN  DeferredStartIo,
+  IN BOOLEAN  NonCancelable);
 
 NTOSAPI
 NTSTATUS
@@ -7117,7 +8190,7 @@ IoWritePartitionTableEx(
 
 /** Kernel routines **/
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKFASTAPI
 KeAcquireInStackQueuedSpinLock(
@@ -7137,49 +8210,12 @@ DDKAPI
 KeAcquireInterruptSpinLock(
   IN PKINTERRUPT  Interrupt);
 
-NTOSAPI
-VOID
-DDKAPI
-KeAcquireSpinLock(
-  IN PKSPIN_LOCK  SpinLock,
-  OUT PKIRQL  OldIrql);
-
-/* System Service Dispatch Table */
-typedef PVOID (NTAPI * SSDT)(VOID);
-typedef SSDT * PSSDT;
-
-/* System Service Parameters Table */
-typedef UCHAR SSPT, * PSSPT;
-
-typedef struct _SSDT_ENTRY {
-       PSSDT  SSDT;
-       PULONG  ServiceCounterTable;
-       ULONG  NumberOfServices;
-       PSSPT  SSPT;
-} SSDT_ENTRY, *PSSDT_ENTRY;
-
-NTOSAPI
-BOOLEAN
-DDKAPI
-KeAddSystemServiceTable(
-  IN PSSDT  SSDT,
-  IN PULONG  ServiceCounterTable,
-  IN ULONG  NumberOfServices,
-  IN PSSPT  SSPT,
-  IN ULONG  TableIndex);
-
 NTOSAPI
 BOOLEAN
 DDKAPI
 KeAreApcsDisabled(
   VOID);
 
-NTOSAPI
-VOID
-DDKAPI
-KeAttachProcess(
-  IN PEPROCESS  Process);
-
 NTOSAPI
 VOID
 DDKAPI
@@ -7222,12 +8258,6 @@ DDKAPI
 KeDeregisterBugCheckCallback(
   IN PKBUGCHECK_CALLBACK_RECORD  CallbackRecord);
 
-NTOSAPI
-VOID
-DDKAPI
-KeDetachProcess(
-  VOID);
-
 NTOSAPI
 VOID
 DDKAPI
@@ -7243,6 +8273,11 @@ KeEnterCriticalRegion(
  */
 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
 
+NTHALAPI
+VOID
+DDKAPI
+KeFlushWriteBuffer(VOID);
+
 NTOSAPI
 PRKTHREAD
 DDKAPI
@@ -7261,19 +8296,6 @@ DDKAPI
 KeGetRecommendedSharedDataAlignment(
   VOID);
 
-NTOSAPI
-VOID
-DDKAPI
-KeInitializeApc(
-  IN PKAPC  Apc,
-       IN PKTHREAD  Thread,
-       IN UCHAR  StateIndex,
-       IN PKKERNEL_ROUTINE  KernelRoutine,
-       IN PKRUNDOWN_ROUTINE  RundownRoutine,
-       IN PKNORMAL_ROUTINE  NormalRoutine,
-       IN UCHAR  Mode,
-       IN PVOID  Context);
-
 NTOSAPI
 VOID
 DDKAPI
@@ -7343,8 +8365,21 @@ DDKAPI
 KeLeaveCriticalRegion(
   VOID);
 
+static __inline
+VOID
+KeMemoryBarrier(
+  VOID)
+{
+  volatile LONG Barrier;
+#if defined(__GNUC__)
+  __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
+#elif defined(_MSC_VER)
+  __asm xchg [Barrier], eax
+#endif
+}
+
 NTOSAPI
-NTSTATUS
+LONG
 DDKAPI
 KePulseEvent(
   IN PRKEVENT  Event,
@@ -7357,7 +8392,7 @@ DDKAPI
 KeQueryInterruptTime(
   VOID);
 
-NTOSAPI
+NTHALAPI
 LARGE_INTEGER
 DDKAPI
 KeQueryPerformanceCounter(
@@ -7399,6 +8434,7 @@ DDKAPI
 KeReadStateMutex(
   IN PRKMUTEX  Mutex);
 
+
 NTOSAPI
 LONG
 DDKAPI
@@ -7421,7 +8457,7 @@ KeRegisterBugCheckCallback(
   IN ULONG  Length,
   IN PUCHAR  Component);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKFASTAPI
 KeReleaseInStackQueuedSpinLock(
@@ -7456,16 +8492,9 @@ KeReleaseSemaphore(
   IN LONG  Adjustment,
   IN BOOLEAN  Wait);
 
-NTOSAPI
-VOID
-DDKAPI
-KeReleaseSpinLock(
-  IN PKSPIN_LOCK  SpinLock,
-  IN KIRQL  NewIrql);
-
 NTOSAPI
 PKDEVICE_QUEUE_ENTRY
-DDKAPI 
+DDKAPI
 KeRemoveByKeyDeviceQueue(
   IN PKDEVICE_QUEUE  DeviceQueue,
   IN ULONG  SortKey);
@@ -7501,6 +8530,11 @@ DDKAPI
 KeRestoreFloatingPointState(
   IN PKFLOATING_SAVE  FloatSave);
 
+NTOSAPI
+VOID
+DDKAPI
+KeRevertToUserAffinityThread(VOID);
+
 NTOSAPI
 NTSTATUS
 DDKAPI
@@ -7536,6 +8570,12 @@ KeSetPriorityThread(
   IN PKTHREAD  Thread,
   IN KPRIORITY  Priority);
 
+NTOSAPI
+VOID
+DDKAPI
+KeSetSystemAffinityThread(
+    IN KAFFINITY Affinity);
+
 NTOSAPI
 VOID
 DDKAPI
@@ -7566,7 +8606,7 @@ DDKFASTAPI
 KeSetTimeUpdateNotifyRoutine(
   IN PTIME_UPDATE_NOTIFY_ROUTINE  NotifyRoutine);
 
-NTOSAPI
+NTHALAPI
 VOID
 DDKAPI
 KeStallExecutionProcessor(
@@ -7615,18 +8655,30 @@ KeWaitForSingleObject(
 
 #if defined(_X86_)
 
-NTOSAPI
+NTHALAPI
 VOID
 FASTCALL
 KfLowerIrql(
   IN KIRQL  NewIrql);
 
-NTOSAPI
+NTHALAPI
 KIRQL
 FASTCALL
 KfRaiseIrql(
   IN KIRQL  NewIrql);
 
+NTHALAPI
+KIRQL
+DDKAPI
+KeRaiseIrqlToDpcLevel(
+  VOID);
+  
+NTHALAPI
+KIRQL
+DDKAPI
+KeRaiseIrqlToSynchLevel(
+    VOID);
+
 #define KeLowerIrql(a) KfLowerIrql(a)
 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
 
@@ -7644,14 +8696,14 @@ DDKAPI
 KeRaiseIrql(
   IN KIRQL  NewIrql);
 
-#endif
-
 NTOSAPI
 KIRQL
 DDKAPI
 KeRaiseIrqlToDpcLevel(
   VOID);
 
+#endif
+
 /** Memory manager routines **/
 
 NTOSAPI
@@ -8172,7 +9224,7 @@ DDKAPI
 ObGetObjectSecurity(
   IN PVOID  Object,
   OUT PSECURITY_DESCRIPTOR  *SecurityDescriptor,
-  OUT PBOOLEAN  MemoryAllocated); 
+  OUT PBOOLEAN  MemoryAllocated);
 
 NTOSAPI
 NTSTATUS
@@ -8509,8 +9561,8 @@ DDKAPI
 NtCreateEvent(
   OUT PHANDLE  EventHandle,
   IN ACCESS_MASK  DesiredAccess,
-  IN POBJECT_ATTRIBUTES  ObjectAttributes,
-  IN BOOLEAN  ManualReset,
+  IN POBJECT_ATTRIBUTES  ObjectAttributes  OPTIONAL,
+  IN EVENT_TYPE  EventType,
   IN BOOLEAN  InitialState);
 
 NTOSAPI
@@ -8519,8 +9571,8 @@ DDKAPI
 ZwCreateEvent(
   OUT PHANDLE  EventHandle,
   IN ACCESS_MASK  DesiredAccess,
-  IN POBJECT_ATTRIBUTES  ObjectAttributes,
-  IN BOOLEAN  ManualReset,
+  IN POBJECT_ATTRIBUTES  ObjectAttributes  OPTIONAL,
+  IN EVENT_TYPE  EventType,
   IN BOOLEAN  InitialState);
 
 NTOSAPI
@@ -8578,12 +9630,12 @@ NTSTATUS
 DDKAPI
 NtDeviceIoControlFile(
   IN HANDLE  DeviceHandle,
-  IN HANDLE  Event  OPTIONAL, 
-  IN PIO_APC_ROUTINE  UserApcRoutine  OPTIONAL, 
-  IN PVOID  UserApcContext  OPTIONAL, 
-  OUT PIO_STATUS_BLOCK  IoStatusBlock, 
+  IN HANDLE  Event  OPTIONAL,
+  IN PIO_APC_ROUTINE  UserApcRoutine  OPTIONAL,
+  IN PVOID  UserApcContext  OPTIONAL,
+  OUT PIO_STATUS_BLOCK  IoStatusBlock,
   IN ULONG  IoControlCode,
-  IN PVOID  InputBuffer, 
+  IN PVOID  InputBuffer,
   IN ULONG  InputBufferSize,
   OUT PVOID  OutputBuffer,
   IN ULONG  OutputBufferSize);
@@ -8593,12 +9645,12 @@ NTSTATUS
 DDKAPI
 ZwDeviceIoControlFile(
   IN HANDLE  DeviceHandle,
-  IN HANDLE  Event  OPTIONAL, 
-  IN PIO_APC_ROUTINE  UserApcRoutine  OPTIONAL, 
-  IN PVOID  UserApcContext  OPTIONAL, 
-  OUT PIO_STATUS_BLOCK  IoStatusBlock, 
+  IN HANDLE  Event  OPTIONAL,
+  IN PIO_APC_ROUTINE  UserApcRoutine  OPTIONAL,
+  IN PVOID  UserApcContext  OPTIONAL,
+  OUT PIO_STATUS_BLOCK  IoStatusBlock,
   IN ULONG  IoControlCode,
-  IN PVOID  InputBuffer, 
+  IN PVOID  InputBuffer,
   IN ULONG  InputBufferSize,
   OUT PVOID  OutputBuffer,
   IN ULONG  OutputBufferSize);
@@ -8793,14 +9845,14 @@ NTSTATUS
 DDKAPI
 NtSetEvent(
   IN HANDLE  EventHandle,
-  IN PULONG  NumberOfThreadsReleased);
+  OUT PLONG  PreviousState  OPTIONAL);
 
 NTOSAPI
 NTSTATUS
 DDKAPI
 ZwSetEvent(
   IN HANDLE  EventHandle,
-  IN PULONG  NumberOfThreadsReleased);
+  OUT PLONG  PreviousState  OPTIONAL);
 
 NTOSAPI
 NTSTATUS
@@ -8868,17 +9920,17 @@ NTOSAPI
 NTSTATUS
 DDKAPI
 NtWaitForSingleObject(
-  IN HANDLE  Object,
+  IN HANDLE  ObjectHandle,
   IN BOOLEAN  Alertable,
-  IN PLARGE_INTEGER  Time);
+  IN PLARGE_INTEGER  TimeOut  OPTIONAL);
 
 NTOSAPI
 NTSTATUS
 DDKAPI
 ZwWaitForSingleObject(
-  IN HANDLE  Object,
+  IN HANDLE  ObjectHandle,
   IN BOOLEAN  Alertable,
-  IN PLARGE_INTEGER  Time);
+  IN PLARGE_INTEGER  TimeOut  OPTIONAL);
 
 NTOSAPI
 NTSTATUS
@@ -8940,7 +9992,7 @@ NTSTATUS
 DDKAPI
 PoRequestPowerIrp(
   IN PDEVICE_OBJECT  DeviceObject,
-  IN UCHAR  MinorFunction,  
+  IN UCHAR  MinorFunction,
   IN POWER_STATE  PowerState,
   IN PREQUEST_POWER_COMPLETE  CompletionFunction,
   IN PVOID  Context,
@@ -8956,7 +10008,7 @@ NTOSAPI
 VOID
 DDKAPI
 PoSetDeviceBusy(
-  PULONG  IdlePointer); 
+  PULONG  IdlePointer);
 
 NTOSAPI
 POWER_STATE
@@ -9003,10 +10055,10 @@ NTSTATUS
 DDKAPI
 WmiFireEvent(
   IN PDEVICE_OBJECT  DeviceObject,
-  IN LPGUID  Guid, 
+  IN LPGUID  Guid,
   IN ULONG  InstanceIndex,
   IN ULONG  EventDataSize,
-  IN PVOID  EventData); 
+  IN PVOID  EventData);
 
 NTOSAPI
 NTSTATUS
@@ -9101,7 +10153,7 @@ DbgPrintReturnControlC(
   IN ...);
 
 NTOSAPI
-NTSTATUS
+BOOLEAN
 DDKAPI
 DbgQueryDebugFilterState(
   IN ULONG  ComponentId,
@@ -9115,16 +10167,6 @@ DbgSetDebugFilterState(
   IN ULONG  Level,
   IN BOOLEAN  State);
 
-NTOSAPI
-BOOLEAN
-DDKAPI
-KeRosPrintAddress ( PVOID address );
-
-NTOSAPI
-VOID
-DDKAPI
-KeRosDumpStackFrames ( PULONG Frame, ULONG FrameCount );
-
 #ifdef DBG
 
 #define KdPrint(_x_) DbgPrint _x_
@@ -9141,11 +10183,22 @@ KeRosDumpStackFrames ( PULONG Frame, ULONG FrameCount );
 
 #endif /* !DBG */
 
+#if defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
+
 extern NTOSAPI PBOOLEAN KdDebuggerNotPresent;
 extern NTOSAPI PBOOLEAN KdDebuggerEnabled;
 #define KD_DEBUGGER_ENABLED     *KdDebuggerEnabled
 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
 
+#else
+
+extern BOOLEAN KdDebuggerNotPresent;
+extern BOOLEAN KdDebuggerEnabled;
+#define KD_DEBUGGER_ENABLED     KdDebuggerEnabled
+#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
+
+#endif
+
 #ifdef __cplusplus
 }
 #endif