- Fix a comment
[reactos.git] / reactos / include / ddk / winddk.h
index 721721b..33f1621 100644 (file)
 #ifndef __WINDDK_H
 #define __WINDDK_H
 
-#if __GNUC__ >= 3
-#pragma GCC system_header
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#include "intrin.h"
-
-/*
-** Definitions specific to this Device Driver Kit
-*/
-#define DDKAPI __stdcall
-#define DDKFASTAPI __fastcall
-#define FASTCALL __fastcall
-#define DDKCDECLAPI __cdecl
+#include <excpt.h>
+#include <ntdef.h>
+#include <ntstatus.h>
 
-/* FIXME: REMOVE THIS UNCOMPATIBLE CRUFT!!! */
-//#define NTKERNELAPI
+#ifdef __GNUC__
+#include "intrin.h"
+#endif
 
 #ifdef _NTOSKRNL_
-#define NTKERNELAPI 
+/* HACKHACKHACK!!! We shouldn't include this header from ntoskrnl! */
+#define NTKERNELAPI
 #else
 #define NTKERNELAPI DECLSPEC_IMPORT
 #endif
 
-
-#ifndef NTOSAPI
-#define NTOSAPI NTKERNELAPI
-#endif
-#if defined(_NTOSKRNL_)
-#define DECLARE_INTERNAL_OBJECT(x) typedef struct _##x; typedef struct _##x *P##x;
-#define DECLARE_INTERNAL_OBJECT2(x,y) typedef struct _##x; typedef struct _##x *P##y;
-#else
-#define DECLARE_INTERNAL_OBJECT(x) struct _##x; typedef struct _##x *P##x;
-#define DECLARE_INTERNAL_OBJECT2(x,y) struct _##x; typedef struct _##x *P##y;
-#endif
-
 #if !defined(_NTHAL_)
 #define NTHALAPI DECLSPEC_IMPORT
 #else
@@ -116,6 +96,18 @@ extern "C" {
 #define ALIGN_UP_POINTER(p, t) \
     (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t))
 
+/*
+ * GUID Comparison
+ */
+
+#ifndef __IID_ALIGNED__
+    #define __IID_ALIGNED__
+
+    #define IsEqualGUIDAligned(guid1, guid2) \
+        ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
+            (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
+#endif
+
 /*
 ** Forward declarations
 */
@@ -136,15 +128,15 @@ struct _DEVICE_DESCRIPTION;
 struct _SCATTER_GATHER_LIST;
 struct _DRIVE_LAYOUT_INFORMATION;
 struct _DRIVE_LAYOUT_INFORMATION_EX;
+struct _LOADER_PARAMETER_BLOCK;
 
+#ifndef _SECURITY_ATTRIBUTES_
+#define _SECURITY_ATTRIBUTES_
 typedef PVOID PSECURITY_DESCRIPTOR;
+#endif
 typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION;
 typedef PVOID PSID;
 
-DECLARE_INTERNAL_OBJECT(ADAPTER_OBJECT)
-DECLARE_INTERNAL_OBJECT(DMA_ADAPTER)
-DECLARE_INTERNAL_OBJECT(IO_STATUS_BLOCK)
-
 #if 1
 /* FIXME: Unknown definitions */
 struct _SET_PARTITION_INFORMATION_EX;
@@ -153,10 +145,20 @@ typedef ULONG WAIT_TYPE;
 #define WaitAny 1
 typedef HANDLE TRACEHANDLE;
 typedef PVOID PWMILIB_CONTEXT;
-typedef PVOID PSYSCTL_IRP_DISPOSITION;
 typedef ULONG LOGICAL;
 #endif
 
+/*
+** WmiLib specific structure
+*/
+typedef enum
+{
+    IrpProcessed,    // Irp was processed and possibly completed
+    IrpNotCompleted, // Irp was process and NOT completed
+    IrpNotWmi,       // Irp is not a WMI irp
+    IrpForward       // Irp is wmi irp, but targeted at another device object
+} SYSCTL_IRP_DISPOSITION, *PSYSCTL_IRP_DISPOSITION;
+
 /*
 ** Routines specific to this DDK
 */
@@ -177,45 +179,45 @@ typedef enum _MODE {
   MaximumMode
 } MODE;
 
-typedef struct _QUAD
-{
-    union
-    {
-        LONGLONG UseThisFieldToCopy;
-        float DoNotUseThisField;
-    };
-} QUAD, *PQUAD;
 
 /* Structures not exposed to drivers */
-typedef struct _IO_TIMER *PIO_TIMER;
-typedef struct _KPROCESS *PKPROCESS;
-typedef struct _EPROCESS *PEPROCESS;
-typedef struct _ETHREAD *PETHREAD;
-typedef struct _KINTERRUPT *PKINTERRUPT;
 typedef struct _OBJECT_TYPE *POBJECT_TYPE;
-typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
-typedef struct _COMPRESSED_DATA_INFO *PCOMPRESSED_DATA_INFO;
 typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE;
 typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE;
 typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
 typedef struct _BUS_HANDLER *PBUS_HANDLER;
-typedef struct _PEB *PPEB;
-typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
+
+typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; 
+typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
+typedef struct _ETHREAD *PETHREAD;
+typedef struct _EPROCESS *PEPROCESS;
+typedef struct _IO_TIMER *PIO_TIMER;
+typedef struct _KINTERRUPT *PKINTERRUPT;
+typedef struct _KPROCESS *PKPROCESS;
+typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
+
+//
+// Forwarder
+//
+struct _COMPRESSED_DATA_INFO;
 
 /* Constants */
 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
 #define ZwCurrentProcess() NtCurrentProcess()
 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
 #define ZwCurrentThread() NtCurrentThread()
-#ifdef _REACTOS_
-#define KIP0PCRADDRESS                      0xff000000
-#else
+
+#if (_M_IX86)
 #define KIP0PCRADDRESS                      0xffdff000
 #endif
 
 #define KERNEL_STACK_SIZE                   12288
 #define KERNEL_LARGE_STACK_SIZE             61440
+#define KERNEL_LARGE_STACK_COMMIT           12288
 
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
 
 #define DPFLTR_ERROR_LEVEL                  0
 #define DPFLTR_WARNING_LEVEL                1
@@ -223,6 +225,114 @@ typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
 #define DPFLTR_INFO_LEVEL                   3
 #define DPFLTR_MASK                         0x80000000
 
+typedef enum _DPFLTR_TYPE
+{
+    DPFLTR_SYSTEM_ID = 0,
+    DPFLTR_SMSS_ID = 1,
+    DPFLTR_SETUP_ID = 2,
+    DPFLTR_NTFS_ID = 3,
+    DPFLTR_FSTUB_ID = 4,
+    DPFLTR_CRASHDUMP_ID = 5,
+    DPFLTR_CDAUDIO_ID = 6,
+    DPFLTR_CDROM_ID = 7,
+    DPFLTR_CLASSPNP_ID = 8,
+    DPFLTR_DISK_ID = 9,
+    DPFLTR_REDBOOK_ID = 10,
+    DPFLTR_STORPROP_ID = 11,
+    DPFLTR_SCSIPORT_ID = 12,
+    DPFLTR_SCSIMINIPORT_ID = 13,
+    DPFLTR_CONFIG_ID = 14,
+    DPFLTR_I8042PRT_ID = 15,
+    DPFLTR_SERMOUSE_ID = 16,
+    DPFLTR_LSERMOUS_ID = 17,
+    DPFLTR_KBDHID_ID = 18,
+    DPFLTR_MOUHID_ID = 19,
+    DPFLTR_KBDCLASS_ID = 20,
+    DPFLTR_MOUCLASS_ID = 21,
+    DPFLTR_TWOTRACK_ID = 22,
+    DPFLTR_WMILIB_ID = 23,
+    DPFLTR_ACPI_ID = 24,
+    DPFLTR_AMLI_ID = 25,
+    DPFLTR_HALIA64_ID = 26,
+    DPFLTR_VIDEO_ID = 27,
+    DPFLTR_SVCHOST_ID = 28,
+    DPFLTR_VIDEOPRT_ID = 29,
+    DPFLTR_TCPIP_ID = 30,
+    DPFLTR_DMSYNTH_ID = 31,
+    DPFLTR_NTOSPNP_ID = 32,
+    DPFLTR_FASTFAT_ID = 33,
+    DPFLTR_SAMSS_ID = 34,
+    DPFLTR_PNPMGR_ID = 35,
+    DPFLTR_NETAPI_ID = 36,
+    DPFLTR_SCSERVER_ID = 37,
+    DPFLTR_SCCLIENT_ID = 38,
+    DPFLTR_SERIAL_ID = 39,
+    DPFLTR_SERENUM_ID = 40,
+    DPFLTR_UHCD_ID = 41,
+    DPFLTR_BOOTOK_ID = 42,
+    DPFLTR_BOOTVRFY_ID = 43,
+    DPFLTR_RPCPROXY_ID = 44,
+    DPFLTR_AUTOCHK_ID = 45,
+    DPFLTR_DCOMSS_ID = 46,
+    DPFLTR_UNIMODEM_ID = 47,
+    DPFLTR_SIS_ID = 48,
+    DPFLTR_FLTMGR_ID = 49,
+    DPFLTR_WMICORE_ID = 50,
+    DPFLTR_BURNENG_ID = 51,
+    DPFLTR_IMAPI_ID = 52,
+    DPFLTR_SXS_ID = 53,
+    DPFLTR_FUSION_ID = 54,
+    DPFLTR_IDLETASK_ID = 55,
+    DPFLTR_SOFTPCI_ID = 56,
+    DPFLTR_TAPE_ID = 57,
+    DPFLTR_MCHGR_ID = 58,
+    DPFLTR_IDEP_ID = 59,
+    DPFLTR_PCIIDE_ID = 60,
+    DPFLTR_FLOPPY_ID = 61,
+    DPFLTR_FDC_ID = 62,
+    DPFLTR_TERMSRV_ID = 63,
+    DPFLTR_W32TIME_ID = 64,
+    DPFLTR_PREFETCHER_ID = 65,
+    DPFLTR_RSFILTER_ID = 66,
+    DPFLTR_FCPORT_ID = 67,
+    DPFLTR_PCI_ID = 68,
+    DPFLTR_DMIO_ID = 69,
+    DPFLTR_DMCONFIG_ID = 70,
+    DPFLTR_DMADMIN_ID = 71,
+    DPFLTR_WSOCKTRANSPORT_ID = 72,
+    DPFLTR_VSS_ID = 73,
+    DPFLTR_PNPMEM_ID = 74,
+    DPFLTR_PROCESSOR_ID = 75,
+    DPFLTR_DMSERVER_ID = 76,
+    DPFLTR_SR_ID = 77,
+    DPFLTR_INFINIBAND_ID = 78,
+    DPFLTR_IHVDRIVER_ID = 79,
+    DPFLTR_IHVVIDEO_ID = 80,
+    DPFLTR_IHVAUDIO_ID = 81,
+    DPFLTR_IHVNETWORK_ID = 82,
+    DPFLTR_IHVSTREAMING_ID = 83,
+    DPFLTR_IHVBUS_ID = 84,
+    DPFLTR_HPS_ID = 85,
+    DPFLTR_RTLTHREADPOOL_ID = 86,
+    DPFLTR_LDR_ID = 87,
+    DPFLTR_TCPIP6_ID = 88,
+    DPFLTR_ISAPNP_ID = 89,
+    DPFLTR_SHPC_ID = 90,
+    DPFLTR_STORPORT_ID = 91,
+    DPFLTR_STORMINIPORT_ID = 92,
+    DPFLTR_PRINTSPOOLER_ID = 93,
+    DPFLTR_VDS_ID = 94,
+    DPFLTR_VDSBAS_ID = 95,
+    DPFLTR_VDSDYNDR_ID = 96,
+    DPFLTR_VDSUTIL_ID = 97,
+    DPFLTR_DFRGIFC_ID = 98,
+    DPFLTR_DEFAULT_ID = 99,
+    DPFLTR_MM_ID = 100,
+    DPFLTR_DFSC_ID = 101,
+    DPFLTR_WOW64_ID = 102,
+    DPFLTR_ENDOFTABLE_ID
+} DPFLTR_TYPE;
+
 #define MAXIMUM_PROCESSORS                32
 
 #define MAXIMUM_WAIT_OBJECTS              64
@@ -243,6 +353,8 @@ typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
 
 #define MAXIMUM_SUSPEND_COUNT             MAXCHAR
 
+#define MAXIMUM_FILENAME_LENGTH           256
+
 #define FILE_SUPERSEDED                   0x00000000
 #define FILE_OPENED                       0x00000001
 #define FILE_CREATED                      0x00000002
@@ -400,6 +512,7 @@ extern POBJECT_TYPE NTSYSAPI IoFileObjectType;
 extern POBJECT_TYPE NTSYSAPI PsThreadType;
 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType;
 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType;
+extern POBJECT_TYPE NTSYSAPI PsProcessType;
 
 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
 extern volatile CCHAR NTSYSAPI KeNumberProcessors;
@@ -431,6 +544,11 @@ typedef struct _KSYSTEM_TIME
 
 extern volatile KSYSTEM_TIME KeTickCount;
 
+#define NX_SUPPORT_POLICY_ALWAYSOFF 0
+#define NX_SUPPORT_POLICY_ALWAYSON 1
+#define NX_SUPPORT_POLICY_OPTIN 2
+#define NX_SUPPORT_POLICY_OPTOUT 3
+
 typedef struct _KUSER_SHARED_DATA
 {
     ULONG TickCountLowDeprecated;
@@ -611,6 +729,15 @@ typedef struct _KUSER_SHARED_DATA
 
 #define IRP_MN_REGINFO_EX                 0x0b
 
+typedef enum _IO_PAGING_PRIORITY
+{
+  IoPagingPriorityInvalid,
+  IoPagingPriorityNormal,
+  IoPagingPriorityHigh,
+  IoPagingPriorityReserved1,
+  IoPagingPriorityReserved2
+} IO_PAGING_PRIORITY;
+
 typedef enum _IO_ALLOCATION_ACTION {
   KeepObject = 1,
   DeallocateObject,
@@ -624,6 +751,7 @@ typedef IO_ALLOCATION_ACTION
   IN PVOID  MapRegisterBase,
   IN PVOID  Context);
 
+
 typedef EXCEPTION_DISPOSITION
 (DDKAPI *PEXCEPTION_ROUTINE)(
   IN struct _EXCEPTION_RECORD *ExceptionRecord,
@@ -639,20 +767,23 @@ typedef VOID
   IN PVOID  Context);
 
 typedef NTSTATUS
-(DDKAPI *PDRIVER_ADD_DEVICE)(
+(DDKAPI DRIVER_ADD_DEVICE)(
   IN struct _DRIVER_OBJECT  *DriverObject,
   IN struct _DEVICE_OBJECT  *PhysicalDeviceObject);
+typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE;
 
 typedef NTSTATUS
-(DDKAPI *PIO_COMPLETION_ROUTINE)(
+(DDKAPI IO_COMPLETION_ROUTINE)(
   IN struct _DEVICE_OBJECT  *DeviceObject,
   IN struct _IRP  *Irp,
   IN PVOID  Context);
+typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE;
 
 typedef VOID
-(DDKAPI *PDRIVER_CANCEL)(
+(DDKAPI DRIVER_CANCEL)(
   IN struct _DEVICE_OBJECT  *DeviceObject,
   IN struct _IRP  *Irp);
+typedef DRIVER_CANCEL *PDRIVER_CANCEL;
 
 typedef VOID
 (DDKAPI *PKDEFERRED_ROUTINE)(
@@ -662,9 +793,10 @@ typedef VOID
   IN PVOID  SystemArgument2);
 
 typedef NTSTATUS
-(DDKAPI *PDRIVER_DISPATCH)(
+(DDKAPI DRIVER_DISPATCH)(
   IN struct _DEVICE_OBJECT  *DeviceObject,
   IN struct _IRP  *Irp);
+typedef DRIVER_DISPATCH *PDRIVER_DISPATCH;
 
 typedef VOID
 (DDKAPI *PIO_DPC_ROUTINE)(
@@ -687,14 +819,16 @@ typedef NTSTATUS
   IN PUNICODE_STRING  RegistryPath);
 
 typedef NTSTATUS
-(DDKAPI *PDRIVER_INITIALIZE)(
+(DDKAPI DRIVER_INITIALIZE)(
   IN struct _DRIVER_OBJECT  *DriverObject,
   IN PUNICODE_STRING  RegistryPath);
+typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE;
 
 typedef BOOLEAN
-(DDKAPI *PKSERVICE_ROUTINE)(
+(DDKAPI KSERVICE_ROUTINE)(
   IN struct _KINTERRUPT  *Interrupt,
   IN PVOID  ServiceContext);
+typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE;
 
 typedef VOID
 (DDKAPI *PIO_TIMER_ROUTINE)(
@@ -708,17 +842,19 @@ typedef VOID
   IN ULONG  Count);
 
 typedef VOID
-(DDKAPI *PDRIVER_STARTIO)(
+(DDKAPI DRIVER_STARTIO)(
   IN struct _DEVICE_OBJECT  *DeviceObject,
   IN struct _IRP  *Irp);
+typedef DRIVER_STARTIO *PDRIVER_STARTIO;
 
 typedef BOOLEAN
 (DDKAPI *PKSYNCHRONIZE_ROUTINE)(
   IN PVOID  SynchronizeContext);
 
 typedef VOID
-(DDKAPI *PDRIVER_UNLOAD)(
+(DDKAPI DRIVER_UNLOAD)(
   IN struct _DRIVER_OBJECT  *DriverObject);
+typedef DRIVER_UNLOAD *PDRIVER_UNLOAD;
 
 
 
@@ -998,19 +1134,19 @@ typedef struct _OBJECT_NAME_INFORMATION {
   UNICODE_STRING  Name;
 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
 
-typedef VOID
-(DDKAPI *PIO_APC_ROUTINE)(
-  IN PVOID ApcContext,
-  IN PIO_STATUS_BLOCK IoStatusBlock,
-  IN ULONG Reserved);
-
 typedef struct _IO_STATUS_BLOCK {
   _ANONYMOUS_UNION union {
     NTSTATUS  Status;
     PVOID  Pointer;
   } DUMMYUNIONNAME;
   ULONG_PTR  Information;
-} IO_STATUS_BLOCK;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+
+typedef VOID
+(DDKAPI *PIO_APC_ROUTINE)(
+  IN PVOID ApcContext,
+  IN PIO_STATUS_BLOCK IoStatusBlock,
+  IN ULONG Reserved);
 
 typedef VOID
 (DDKAPI *PKNORMAL_ROUTINE)(
@@ -1138,7 +1274,7 @@ typedef PVOID PKIPI_CONTEXT;
 
 typedef
 VOID
-(*PKIPI_WORKER)(
+(NTAPI *PKIPI_WORKER)(
     IN PKIPI_CONTEXT PacketContext,
     IN PVOID Parameter1,
     IN PVOID Parameter2,
@@ -1206,8 +1342,8 @@ typedef struct _EX_RUNDOWN_REF
 {
     union
     {
-        ULONG_PTR Count;
-        PVOID Ptr;
+        volatile ULONG_PTR Count;
+        volatile PVOID Ptr;
     };
 } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
 
@@ -1295,6 +1431,8 @@ typedef enum _TIMER_TYPE {
 #define IO_VIDEO_INCREMENT                1
 #define SEMAPHORE_INCREMENT               1
 
+#define MM_MAXIMUM_DISK_IO_SIZE          (0x10000)
+
 typedef struct _IRP {
   CSHORT  Type;
   USHORT  Size;
@@ -1302,7 +1440,7 @@ typedef struct _IRP {
   ULONG  Flags;
   union {
     struct _IRP  *MasterIrp;
-    LONG  IrpCount;
+    volatile LONG  IrpCount;
     PVOID  SystemBuffer;
   } AssociatedIrp;
   LIST_ENTRY  ThreadListEntry;
@@ -1324,7 +1462,7 @@ typedef struct _IRP {
     } AsynchronousParameters;
     LARGE_INTEGER  AllocationSize;
   } Overlay;
-  PDRIVER_CANCEL  CancelRoutine;
+  volatile PDRIVER_CANCEL  CancelRoutine;
   PVOID  UserBuffer;
   union {
     struct {
@@ -1603,8 +1741,25 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
     struct {
       ULONG Level;
       ULONG Vector;
-      ULONG Affinity;
+      KAFFINITY Affinity;
     } Interrupt;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    struct {
+      union {
+        struct {
+          USHORT Reserved;
+          USHORT MessageCount;
+          ULONG Vector;
+          KAFFINITY Affinity;
+        } Raw;
+        struct {
+          ULONG Level;
+          ULONG Vector;
+          KAFFINITY Affinity;
+        } Translated;
+      };
+    } MessageInterrupt;
+#endif
     struct {
       PHYSICAL_ADDRESS Start;
       ULONG Length;
@@ -1627,6 +1782,20 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
       ULONG Reserved1;
       ULONG Reserved2;
     } DeviceSpecificData;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length40;
+    } Memory40;
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length48;
+    } Memory48;
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length64;
+    } Memory64;
+#endif
   } u;
 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
 
@@ -1717,8 +1886,43 @@ typedef struct _CM_INT13_DRIVE_PARAMETER {
   USHORT  MaxHeads;
   USHORT  NumberDrives;
 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
+
+typedef struct _CM_PNP_BIOS_DEVICE_NODE
+{
+    USHORT Size;
+    UCHAR Node;
+    ULONG ProductId;
+    UCHAR DeviceType[3];
+    USHORT DeviceAttributes;
+} CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE;
+
+typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
+{
+    UCHAR Signature[4];
+    UCHAR Revision;
+    UCHAR Length;
+    USHORT ControlField;
+    UCHAR Checksum;
+    ULONG EventFlagAddress;
+    USHORT RealModeEntryOffset;
+    USHORT RealModeEntrySegment;
+    USHORT ProtectedModeEntryOffset;
+    ULONG ProtectedModeCodeBaseAddress;
+    ULONG OemDeviceId;
+    USHORT RealModeDataBaseAddress;
+    ULONG ProtectedModeDataBaseAddress;
+} CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK;
+
 #include <poppack.h>
 
+typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
+{
+    ULONG BytesPerSector;
+    ULONG NumberOfCylinders;
+    ULONG SectorsPerTrack;
+    ULONG NumberOfHeads;
+} CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
+
 typedef struct _CM_KEYBOARD_DEVICE_DATA {
   USHORT  Version;
   USHORT  Revision;
@@ -1776,6 +1980,15 @@ typedef struct _CM_SERIAL_DEVICE_DATA {
   ULONG  BaudClock;
 } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
 
+typedef struct _IO_COUNTERS {
+    ULONGLONG  ReadOperationCount;
+    ULONGLONG  WriteOperationCount;
+    ULONGLONG  OtherOperationCount;
+    ULONGLONG ReadTransferCount;
+    ULONGLONG WriteTransferCount;
+    ULONGLONG OtherTransferCount;
+} IO_COUNTERS, *PIO_COUNTERS;
+
 typedef struct _VM_COUNTERS
 {
     SIZE_T PeakVirtualSize;
@@ -2027,6 +2240,7 @@ typedef struct _VPB {
 #define DO_POWER_PAGABLE                  0x00002000
 #define DO_POWER_INRUSH                   0x00004000
 #define DO_LOW_PRIORITY_FILESYSTEM        0x00010000
+#define DO_XIP                            0x00020000
 
 /* DEVICE_OBJECT.Characteristics */
 
@@ -2114,7 +2328,7 @@ typedef struct _VPB {
 #define FILE_DEVICE_SERENUM               0x00000037
 #define FILE_DEVICE_TERMSRV               0x00000038
 #define FILE_DEVICE_KSEC                  0x00000039
-#define FILE_DEVICE_FIPS                             0x0000003a
+#define FILE_DEVICE_FIPS                  0x0000003a
 
 typedef struct _DEVICE_OBJECT {
   CSHORT  Type;
@@ -2127,7 +2341,7 @@ typedef struct _DEVICE_OBJECT {
   PIO_TIMER  Timer;
   ULONG  Flags;
   ULONG  Characteristics;
-  PVPB  Vpb;
+  volatile PVPB  Vpb;
   PVOID  DeviceExtension;
   DEVICE_TYPE  DeviceType;
   CCHAR  StackSize;
@@ -2170,7 +2384,7 @@ typedef struct _SCATTER_GATHER_ELEMENT {
 typedef struct _SCATTER_GATHER_LIST {
   ULONG  NumberOfElements;
   ULONG_PTR  Reserved;
-  SCATTER_GATHER_ELEMENT  Elements[0];
+  SCATTER_GATHER_ELEMENT  Elements[1];
 } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
 
 typedef struct _MDL {
@@ -2184,20 +2398,23 @@ typedef struct _MDL {
   ULONG  ByteOffset;
 } MDL, *PMDL;
 
-#define MDL_MAPPED_TO_SYSTEM_VA           0x0001
-#define MDL_PAGES_LOCKED                  0x0002
-#define MDL_SOURCE_IS_NONPAGED_POOL       0x0004
-#define MDL_ALLOCATED_FIXED_SIZE          0x0008
-#define MDL_PARTIAL                       0x0010
-#define MDL_PARTIAL_HAS_BEEN_MAPPED       0x0020
-#define MDL_IO_PAGE_READ                  0x0040
-#define MDL_WRITE_OPERATION               0x0080
-#define MDL_PARENT_MAPPED_SYSTEM_VA       0x0100
-#define MDL_FREE_EXTRA_PTES               0x0200
-#define MDL_IO_SPACE                      0x0800
-#define MDL_NETWORK_HEADER                0x1000
-#define MDL_MAPPING_CAN_FAIL              0x2000
-#define MDL_ALLOCATED_MUST_SUCCEED        0x4000
+#define MDL_MAPPED_TO_SYSTEM_VA     0x0001
+#define MDL_PAGES_LOCKED            0x0002
+#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
+#define MDL_ALLOCATED_FIXED_SIZE    0x0008
+#define MDL_PARTIAL                 0x0010
+#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
+#define MDL_IO_PAGE_READ            0x0040
+#define MDL_WRITE_OPERATION         0x0080
+#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
+#define MDL_FREE_EXTRA_PTES         0x0200
+#define MDL_DESCRIBES_AWE           0x0400
+#define MDL_IO_SPACE                0x0800
+#define MDL_NETWORK_HEADER          0x1000
+#define MDL_MAPPING_CAN_FAIL        0x2000
+#define MDL_ALLOCATED_MUST_SUCCEED  0x4000
+#define MDL_INTERNAL                0x8000
+
 
 #define MDL_MAPPING_FLAGS ( \
   MDL_MAPPED_TO_SYSTEM_VA     | \
@@ -2242,6 +2459,12 @@ typedef struct _DRIVER_OBJECT {
 } DRIVER_OBJECT;
 typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
 
+typedef struct _DMA_ADAPTER {
+  USHORT  Version;
+  USHORT  Size;
+  struct _DMA_OPERATIONS*  DmaOperations;
+} DMA_ADAPTER, *PDMA_ADAPTER;
+
 typedef VOID
 (DDKAPI *PPUT_DMA_ADAPTER)(
   IN PDMA_ADAPTER  DmaAdapter);
@@ -2370,13 +2593,6 @@ typedef struct _DMA_OPERATIONS {
   PBUILD_MDL_FROM_SCATTER_GATHER_LIST  BuildMdlFromScatterGatherList;
 } DMA_OPERATIONS, *PDMA_OPERATIONS;
 
-typedef struct _DMA_ADAPTER {
-  USHORT  Version;
-  USHORT  Size;
-  PDMA_OPERATIONS  DmaOperations;
-} DMA_ADAPTER;
-
-
 typedef enum _ARBITER_REQUEST_SOURCE {
   ArbiterRequestUndefined = -1,
   ArbiterRequestLegacyReported,
@@ -2563,7 +2779,12 @@ typedef struct
     DEBUG_MEMORY_REQUIREMENTS Memory;
 } DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR;
 
+typedef enum _KD_OPTION {
+    KD_OPTION_SET_BLOCK_ENABLE,
+} KD_OPTION;
+
 /* Function Type Defintions for Dispatch Functions */
+struct _DEVICE_CONTROL_CONTEXT;
 
 typedef VOID
 (DDKAPI *PDEVICE_CONTROL_COMPLETION)(
@@ -2629,35 +2850,35 @@ typedef NTSTATUS
   IN PDEVICE_CONTROL_COMPLETION  CompletionRoutine);
 
 typedef VOID
-(DDKFASTAPI *pHalExamineMBR)(
+(FASTCALL *pHalExamineMBR)(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  SectorSize,
   IN ULONG  MBRTypeIdentifier,
   OUT PVOID  *Buffer);
 
 typedef VOID
-(DDKFASTAPI *pHalIoAssignDriveLetters)(
+(FASTCALL *pHalIoAssignDriveLetters)(
   IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
   IN PSTRING NtDeviceName,
   OUT PUCHAR NtSystemPath,
   OUT PSTRING NtSystemPathString);
 
 typedef NTSTATUS
-(DDKFASTAPI *pHalIoReadPartitionTable)(
+(FASTCALL *pHalIoReadPartitionTable)(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  SectorSize,
   IN BOOLEAN  ReturnRecognizedPartitions,
   OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
 
 typedef NTSTATUS
-(DDKFASTAPI *pHalIoSetPartitionInformation)(
+(FASTCALL *pHalIoSetPartitionInformation)(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  SectorSize,
   IN ULONG  PartitionNumber,
   IN ULONG  PartitionType);
 
 typedef NTSTATUS
-(DDKFASTAPI *pHalIoWritePartitionTable)(
+(FASTCALL *pHalIoWritePartitionTable)(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  SectorSize,
   IN ULONG  SectorsPerTrack,
@@ -2665,12 +2886,12 @@ typedef NTSTATUS
   IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
 
 typedef PBUS_HANDLER
-(DDKFASTAPI *pHalHandlerForBus)(
+(FASTCALL *pHalHandlerForBus)(
   IN INTERFACE_TYPE  InterfaceType,
   IN ULONG  BusNumber);
 
 typedef VOID
-(DDKFASTAPI *pHalReferenceBusHandler)(
+(FASTCALL *pHalReferenceBusHandler)(
   IN PBUS_HANDLER  BusHandler);
 
 typedef NTSTATUS
@@ -2901,10 +3122,10 @@ typedef struct {
 } HAL_DISPATCH, *PHAL_DISPATCH;
 
 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
-extern DECL_IMPORT PHAL_DISPATCH HalDispatchTable;
+extern DECLSPEC_IMPORT PHAL_DISPATCH HalDispatchTable;
 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
 #else
-extern DECL_EXPORT HAL_DISPATCH HalDispatchTable;
+extern DECLSPEC_EXPORT HAL_DISPATCH HalDispatchTable;
 #define HALDISPATCH (&HalDispatchTable)
 #endif
 
@@ -2913,11 +3134,6 @@ extern DECL_EXPORT HAL_DISPATCH HalDispatchTable;
 #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
@@ -2931,6 +3147,14 @@ extern DECL_EXPORT HAL_DISPATCH HalDispatchTable;
 #define HalEndOfBoot                    HALDISPATCH->HalEndOfBoot
 #define HalMirrorVerify                 HALDISPATCH->HalMirrorVerify
 
+#ifndef _NTOSKRNL_
+#define HalDeviceControl                HALDISPATCH->HalDeviceControl
+#define HalIoAssignDriveLetters         HALDISPATCH->HalIoAssignDriveLetters
+#define HalIoReadPartitionTable         HALDISPATCH->HalIoReadPartitionTable
+#define HalIoSetPartitionInformation    HALDISPATCH->HalIoSetPartitionInformation
+#define HalIoWritePartitionTable        HALDISPATCH->HalIoWritePartitionTable
+#endif
+
 typedef enum _FILE_INFORMATION_CLASS {
   FileDirectoryInformation = 1,
   FileFullDirectoryInformation,
@@ -3033,6 +3257,11 @@ typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
   LARGE_INTEGER  ValidDataLength;
 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
 
+typedef union _FILE_SEGMENT_ELEMENT {
+    PVOID64 Buffer;
+    ULONGLONG Alignment;
+}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
+
 typedef enum _FSINFOCLASS {
   FileFsVolumeInformation = 1,
   FileFsLabelInformation,
@@ -3078,22 +3307,25 @@ typedef struct _OWNER_ENTRY {
 
 #define RESOURCE_HASH_TABLE_SIZE          64
 
-typedef struct _ERESOURCE {
-  LIST_ENTRY  SystemResourcesList;
-  POWNER_ENTRY  OwnerTable;
-  SHORT  ActiveCount;
-  USHORT  Flag;
-  PKSEMAPHORE  SharedWaiters;
-  PKEVENT  ExclusiveWaiters;
-  OWNER_ENTRY  OwnerThreads[2];
-  ULONG  ContentionCount;
-  USHORT  NumberOfSharedWaiters;
-  USHORT  NumberOfExclusiveWaiters;
-  _ANONYMOUS_UNION union {
-    PVOID  Address;
-    ULONG_PTR  CreatorBackTraceIndex;
-  } DUMMYUNIONNAME;
-  KSPIN_LOCK  SpinLock;
+typedef struct _ERESOURCE
+{
+    LIST_ENTRY SystemResourcesList;
+    POWNER_ENTRY OwnerTable;
+    SHORT ActiveCount;
+    USHORT Flag;
+    volatile PKSEMAPHORE SharedWaiters;
+    volatile PKEVENT ExclusiveWaiters;
+    OWNER_ENTRY OwnerEntry;
+    ULONG ActiveEntries;
+    ULONG ContentionCount;
+    ULONG NumberOfSharedWaiters;
+    ULONG NumberOfExclusiveWaiters;
+    union
+    {
+        PVOID Address;
+        ULONG_PTR CreatorBackTraceIndex;
+    };
+    KSPIN_LOCK SpinLock;
 } ERESOURCE, *PERESOURCE;
 
 typedef struct _DEVOBJ_EXTENSION
@@ -3184,7 +3416,7 @@ typedef BOOLEAN
 typedef BOOLEAN
 (DDKAPI *PFAST_IO_UNLOCK_ALL_BY_KEY)(
   IN struct _FILE_OBJECT  *FileObject,
-  PEPROCESS  ProcessId,
+  PVOID  ProcessId,
   ULONG  Key,
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
@@ -3390,37 +3622,40 @@ typedef struct _IO_COMPLETION_CONTEXT {
 #define FO_RANDOM_ACCESS                  0x00100000
 #define FO_FILE_OPEN_CANCELLED            0x00200000
 #define FO_VOLUME_OPEN                    0x00400000
-#define FO_FILE_OBJECT_HAS_EXTENSION      0x00800000
 #define FO_REMOTE_ORIGIN                  0x01000000
 
-typedef struct _FILE_OBJECT {
-  CSHORT  Type;
-  CSHORT  Size;
-  PDEVICE_OBJECT  DeviceObject;
-  PVPB  Vpb;
-  PVOID  FsContext;
-  PVOID  FsContext2;
-  PSECTION_OBJECT_POINTERS  SectionObjectPointer;
-  PVOID  PrivateCacheMap;
-  NTSTATUS  FinalStatus;
-  struct _FILE_OBJECT  *RelatedFileObject;
-  BOOLEAN  LockOperation;
-  BOOLEAN  DeletePending;
-  BOOLEAN  ReadAccess;
-  BOOLEAN  WriteAccess;
-  BOOLEAN  DeleteAccess;
-  BOOLEAN  SharedRead;
-  BOOLEAN  SharedWrite;
-  BOOLEAN  SharedDelete;
-  ULONG  Flags;
-  UNICODE_STRING  FileName;
-  LARGE_INTEGER  CurrentByteOffset;
-  ULONG  Waiters;
-  ULONG  Busy;
-  PVOID  LastLock;
-  KEVENT  Lock;
-  KEVENT  Event;
-  PIO_COMPLETION_CONTEXT  CompletionContext;
+typedef struct _FILE_OBJECT
+{
+    CSHORT Type;
+    CSHORT Size;
+    PDEVICE_OBJECT DeviceObject;
+    PVPB Vpb;
+    PVOID FsContext;
+    PVOID FsContext2;
+    PSECTION_OBJECT_POINTERS SectionObjectPointer;
+    PVOID PrivateCacheMap;
+    NTSTATUS FinalStatus;
+    struct _FILE_OBJECT *RelatedFileObject;
+    BOOLEAN LockOperation;
+    BOOLEAN DeletePending;
+    BOOLEAN ReadAccess;
+    BOOLEAN WriteAccess;
+    BOOLEAN DeleteAccess;
+    BOOLEAN SharedRead;
+    BOOLEAN SharedWrite;
+    BOOLEAN SharedDelete;
+    ULONG Flags;
+    UNICODE_STRING FileName;
+    LARGE_INTEGER CurrentByteOffset;
+    volatile ULONG Waiters;
+    volatile ULONG Busy;
+    PVOID LastLock;
+    KEVENT Lock;
+    KEVENT Event;
+    volatile PIO_COMPLETION_CONTEXT CompletionContext;
+    KSPIN_LOCK IrpListLock;
+    LIST_ENTRY IrpList;
+    volatile PVOID FileObjectExtension;
 } FILE_OBJECT;
 typedef struct _FILE_OBJECT *PFILE_OBJECT;
 
@@ -3771,6 +4006,7 @@ typedef struct _IO_STACK_LOCATION {
 /* IO_STACK_LOCATION.Control */
 
 #define SL_PENDING_RETURNED               0x01
+#define SL_ERROR_RETURNED                 0x02
 #define SL_INVOKE_ON_CANCEL               0x20
 #define SL_INVOKE_ON_SUCCESS              0x40
 #define SL_INVOKE_ON_ERROR                0x80
@@ -3877,10 +4113,6 @@ typedef enum _KEY_SET_INFORMATION_CLASS {
   MaxKeySetInfoClass
 } KEY_SET_INFORMATION_CLASS;
 
-#define REG_CREATED_NEW_KEY         0x00000001L
-#define REG_OPENED_EXISTING_KEY     0x00000002L
-
-
 /* KEY_VALUE_Xxx.Type */
 
 #define REG_NONE                           0
@@ -4057,7 +4289,7 @@ typedef struct _PCI_COMMON_CONFIG {
 
 #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_3D_CTLR            0x02
 #define PCI_SUBCLASS_VID_OTHER              0x80
 
 /* PCI device subclasses for class 4 (multimedia device)*/
@@ -4092,6 +4324,7 @@ typedef struct _PCI_COMMON_CONFIG {
 #define PCI_SUBCLASS_SB_SSA                 0x02
 #define PCI_SUBCLASS_SB_USB                 0x03
 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL       0x04
+#define PCI_SUBCLASS_SB_SMBUS               0x05
 
 #define PCI_MAX_DEVICES        32
 #define PCI_MAX_FUNCTION       8
@@ -4129,14 +4362,14 @@ typedef enum _POOL_TYPE {
   NonPagedPoolCacheAligned,
   PagedPoolCacheAligned,
   NonPagedPoolCacheAlignedMustS,
-       MaxPoolType,
-       NonPagedPoolSession = 32,
-       PagedPoolSession,
-       NonPagedPoolMustSucceedSession,
-       DontUseThisTypeSession,
-       NonPagedPoolCacheAlignedSession,
-       PagedPoolCacheAlignedSession,
-       NonPagedPoolCacheAlignedMustSSession
+  MaxPoolType,
+  NonPagedPoolSession = 32,
+  PagedPoolSession,
+  NonPagedPoolMustSucceedSession,
+  DontUseThisTypeSession,
+  NonPagedPoolCacheAlignedSession,
+  PagedPoolCacheAlignedSession,
+  NonPagedPoolCacheAlignedMustSSession
 } POOL_TYPE;
 
 #define POOL_COLD_ALLOCATION                256
@@ -4156,34 +4389,73 @@ typedef enum _EX_POOL_PRIORITY {
   HighPoolPrioritySpecialPoolUnderrun = 41
 } EX_POOL_PRIORITY;
 
-/* PRIVILEGE_SET.Control */
-
-#define PRIVILEGE_SET_ALL_NECESSARY       1
-
-typedef struct _RTL_OSVERSIONINFOW {
-  ULONG  dwOSVersionInfoSize;
-  ULONG  dwMajorVersion;
-  ULONG  dwMinorVersion;
-  ULONG  dwBuildNumber;
-  ULONG  dwPlatformId;
-  WCHAR  szCSDVersion[128];
-} RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
-
-typedef struct _RTL_OSVERSIONINFOEXW {
-  ULONG  dwOSVersionInfoSize;
-  ULONG  dwMajorVersion;
-  ULONG  dwMinorVersion;
-  ULONG  dwBuildNumber;
-  ULONG  dwPlatformId;
-  WCHAR  szCSDVersion[128];
-  USHORT  wServicePackMajor;
-  USHORT  wServicePackMinor;
-  USHORT  wSuiteMask;
-  UCHAR  wProductType;
-  UCHAR  wReserved;
-} RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
-
-NTOSAPI
+typedef struct _OSVERSIONINFOA {
+    ULONG dwOSVersionInfoSize;
+    ULONG dwMajorVersion;
+    ULONG dwMinorVersion;
+    ULONG dwBuildNumber;
+    ULONG dwPlatformId;
+    CHAR   szCSDVersion[128];
+} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
+
+typedef struct _OSVERSIONINFOW {
+    ULONG dwOSVersionInfoSize;
+    ULONG dwMajorVersion;
+    ULONG dwMinorVersion;
+    ULONG dwBuildNumber;
+    ULONG dwPlatformId;
+    WCHAR  szCSDVersion[128];
+} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
+
+#ifdef UNICODE
+typedef OSVERSIONINFOW OSVERSIONINFO;
+typedef POSVERSIONINFOW POSVERSIONINFO;
+typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
+#else
+typedef OSVERSIONINFOA OSVERSIONINFO;
+typedef POSVERSIONINFOA POSVERSIONINFO;
+typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
+#endif // UNICODE
+
+typedef struct _OSVERSIONINFOEXA {
+    ULONG dwOSVersionInfoSize;
+    ULONG dwMajorVersion;
+    ULONG dwMinorVersion;
+    ULONG dwBuildNumber;
+    ULONG dwPlatformId;
+    CHAR   szCSDVersion[128];
+    USHORT wServicePackMajor;
+    USHORT wServicePackMinor;
+    USHORT wSuiteMask;
+    UCHAR wProductType;
+    UCHAR wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+
+typedef struct _OSVERSIONINFOEXW {
+    ULONG dwOSVersionInfoSize;
+    ULONG dwMajorVersion;
+    ULONG dwMinorVersion;
+    ULONG dwBuildNumber;
+    ULONG dwPlatformId;
+    WCHAR  szCSDVersion[128];
+    USHORT wServicePackMajor;
+    USHORT wServicePackMinor;
+    USHORT wSuiteMask;
+    UCHAR wProductType;
+    UCHAR wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
+
+#ifdef UNICODE
+typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
+typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
+typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
+#else
+typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
+typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
+typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
+#endif // UNICODE
+
+NTSYSAPI
 ULONGLONG
 DDKAPI
 VerSetConditionMask(
@@ -4224,11 +4496,15 @@ typedef struct _RTL_BITMAP {
   PULONG  Buffer;
 } RTL_BITMAP, *PRTL_BITMAP;
 
+#define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP) / 32]) >> ((BP) % 32)) & 0x1)
+
 typedef struct _RTL_BITMAP_RUN {
     ULONG  StartingIndex;
     ULONG  NumberOfBits;
 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
 
+struct _RTL_RANGE;
+
 typedef BOOLEAN
 (NTAPI *PRTL_CONFLICT_RANGE_CALLBACK) (
     PVOID Context,
@@ -4265,7 +4541,7 @@ typedef NTSTATUS
 typedef struct _RTL_QUERY_REGISTRY_TABLE {
   PRTL_QUERY_REGISTRY_ROUTINE  QueryRoutine;
   ULONG  Flags;
-  PWSTR  Name;
+  PCWSTR Name;
   PVOID  EntryContext;
   ULONG  DefaultType;
   PVOID  DefaultData;
@@ -4331,8 +4607,6 @@ typedef struct _PAGED_LOOKASIDE_LIST {
   FAST_MUTEX  Obsoleted;
 } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
 
-typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
-
 typedef VOID
 (DDKAPI *PCALLBACK_FUNCTION)(
   IN PVOID  CallbackContext,
@@ -4397,7 +4671,7 @@ typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK;
 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
   BOOLEAN  Removed;
   BOOLEAN  Reserved[3];
-  LONG  IoCount;
+  volatile LONG  IoCount;
   KEVENT  RemoveEvent;
 } IO_REMOVE_LOCK_COMMON_BLOCK;
 
@@ -4408,7 +4682,7 @@ typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
   LONG  AllocateTag;
   LIST_ENTRY  LockList;
   KSPIN_LOCK  Spin;
-  LONG  LowMemoryCount;
+  volatile LONG  LowMemoryCount;
   ULONG  Reserved1[4];
   PVOID  Reserved2;
   PIO_REMOVE_LOCK_TRACKING_BLOCK  Blocks;
@@ -4424,9 +4698,10 @@ typedef struct _IO_REMOVE_LOCK {
 typedef struct _IO_WORKITEM *PIO_WORKITEM;
 
 typedef VOID
-(DDKAPI *PIO_WORKITEM_ROUTINE)(
+(DDKAPI IO_WORKITEM_ROUTINE)(
   IN PDEVICE_OBJECT  DeviceObject,
   IN PVOID  Context);
+typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE;
 
 typedef struct _SHARE_ACCESS {
   ULONG  OpenCount;
@@ -4538,12 +4813,16 @@ typedef enum _CONFIGURATION_TYPE {
   SystemMemory,
   DockingInformation,
   RealModeIrqRoutingTable,
+  RealModePCIEnumeration,
   MaximumType
 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
 
 #define IO_FORCE_ACCESS_CHECK               0x001
 #define IO_NO_PARAMETER_CHECKING            0x100
 
+#define IO_REPARSE                      0x0
+#define IO_REMOUNT                      0x1
+
 typedef NTSTATUS
 (DDKAPI *PIO_QUERY_DEVICE_ROUTINE)(
   IN PVOID  Context,
@@ -4579,7 +4858,7 @@ typedef VOID
 typedef struct _WORK_QUEUE_ITEM {
   LIST_ENTRY  List;
   PWORKER_THREAD_ROUTINE  WorkerRoutine;
-  PVOID  Parameter;
+  volatile PVOID  Parameter;
 } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
 
 typedef enum _KBUGCHECK_CALLBACK_REASON {
@@ -4589,6 +4868,8 @@ typedef enum _KBUGCHECK_CALLBACK_REASON {
   KbCallbackDumpIo,
 } KBUGCHECK_CALLBACK_REASON;
 
+struct _KBUGCHECK_REASON_CALLBACK_RECORD;
+
 typedef VOID
 (DDKAPI *PKBUGCHECK_REASON_CALLBACK_ROUTINE)(
   IN KBUGCHECK_CALLBACK_REASON  Reason,
@@ -4628,6 +4909,11 @@ typedef struct _KBUGCHECK_CALLBACK_RECORD {
   UCHAR  State;
 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
 
+typedef BOOLEAN
+(DDKAPI *PNMI_CALLBACK)(
+    IN PVOID Context,
+    IN BOOLEAN Handled);
+
 /*
  * VOID
  * KeInitializeCallbackRecord(
@@ -4668,6 +4954,8 @@ typedef enum _LOCK_OPERATION {
   IoModifyAccess
 } LOCK_OPERATION;
 
+#define FLUSH_MULTIPLE_MAXIMUM 32
+
 typedef enum _MM_SYSTEM_SIZE {
   MmSmallSystem,
   MmMediumSystem,
@@ -4724,6 +5012,19 @@ typedef VOID
   IN HANDLE  ProcessId,
   IN PIMAGE_INFO  ImageInfo);
 
+typedef struct _NT_TIB {
+    struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+    PVOID StackBase;
+    PVOID StackLimit;
+    PVOID SubSystemTib;
+       _ANONYMOUS_UNION union {
+               PVOID FiberData;
+               ULONG Version;
+       } DUMMYUNIONNAME;
+    PVOID ArbitraryUserPointer;
+    struct _NT_TIB *Self;
+} NT_TIB, *PNT_TIB;
+
 typedef enum _PROCESSINFOCLASS {
   ProcessBasicInformation,
   ProcessQuotaLimits,
@@ -4802,7 +5103,7 @@ typedef enum _THREADINFOCLASS {
 typedef struct _PROCESS_BASIC_INFORMATION
 {
     NTSTATUS ExitStatus;
-    PPEB PebBaseAddress;
+    struct _PEB *PebBaseAddress;
     ULONG_PTR AffinityMask;
     KPRIORITY BasePriority;
     ULONG_PTR UniqueProcessId;
@@ -4850,13 +5151,6 @@ typedef struct _PROCESS_SESSION_INFORMATION
     ULONG SessionId;
 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
 
-#define ES_SYSTEM_REQUIRED                0x00000001
-#define ES_DISPLAY_REQUIRED               0x00000002
-#define ES_USER_PRESENT                   0x00000004
-#define ES_CONTINUOUS                     0x80000000
-
-typedef ULONG EXECUTION_STATE;
-
 typedef VOID
 (DDKAPI *PREQUEST_POWER_COMPLETE)(
   IN PDEVICE_OBJECT  DeviceObject,
@@ -5046,7 +5340,8 @@ typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
 */
 typedef enum _PARTITION_STYLE {
   PARTITION_STYLE_MBR,
-  PARTITION_STYLE_GPT
+  PARTITION_STYLE_GPT,
+  PARTITION_STYLE_RAW
 } PARTITION_STYLE;
 
 typedef struct _CREATE_DISK_MBR {
@@ -5080,7 +5375,7 @@ typedef struct _DISK_SIGNATURE {
 } DISK_SIGNATURE, *PDISK_SIGNATURE;
 
 typedef VOID
-(DDKFASTAPI*PTIME_UPDATE_NOTIFY_ROUTINE)(
+(FASTCALL*PTIME_UPDATE_NOTIFY_ROUTINE)(
   IN HANDLE  ThreadId,
   IN KPROCESSOR_MODE  Mode);
 
@@ -5152,10 +5447,69 @@ typedef VOID
 /*
 ** Architecture specific structures
 */
+#define PCR_MINOR_VERSION 1
+#define PCR_MAJOR_VERSION 1
 
 #ifdef _X86_
 
+#define SIZE_OF_80387_REGISTERS        80
+#define CONTEXT_i386   0x10000
+#define CONTEXT_i486   0x10000
+#define CONTEXT_CONTROL        (CONTEXT_i386|0x00000001L)
+#define CONTEXT_INTEGER        (CONTEXT_i386|0x00000002L)
+#define CONTEXT_SEGMENTS       (CONTEXT_i386|0x00000004L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
+#define CONTEXT_DEBUG_REGISTERS        (CONTEXT_i386|0x00000010L)
+#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
+#define CONTEXT_FULL   (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
+#define MAXIMUM_SUPPORTED_EXTENSION  512
+
+typedef struct _FLOATING_SAVE_AREA {
+    ULONG ControlWord;
+    ULONG StatusWord;
+    ULONG TagWord;
+    ULONG ErrorOffset;
+    ULONG ErrorSelector;
+    ULONG DataOffset;
+    ULONG DataSelector;
+    UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
+    ULONG Cr0NpxState;
+} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
+
+typedef struct _CONTEXT {
+    ULONG ContextFlags;
+    ULONG Dr0;
+    ULONG Dr1;
+    ULONG Dr2;
+    ULONG Dr3;
+    ULONG Dr6;
+    ULONG Dr7;
+    FLOATING_SAVE_AREA FloatSave;
+    ULONG SegGs;
+    ULONG SegFs;
+    ULONG SegEs;
+    ULONG SegDs;
+    ULONG Edi;
+    ULONG Esi;
+    ULONG Ebx;
+    ULONG Edx;
+    ULONG Ecx;
+    ULONG Eax;
+    ULONG Ebp;
+    ULONG Eip;
+    ULONG SegCs;
+    ULONG EFlags;
+    ULONG Esp;
+    ULONG SegSs;
+    UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
+} CONTEXT;
+
+//
+// Used to contain PFNs and PFN counts
+//
+typedef ULONG PFN_COUNT;
 typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
+typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
 
 #define PASSIVE_LEVEL                      0
 #define LOW_LEVEL                          0
@@ -5175,15 +5529,12 @@ typedef struct _KPCR_TIB {
   PVOID  SubSystemTib;          /* 0C */
   _ANONYMOUS_UNION union {
     PVOID  FiberData;           /* 10 */
-    DWORD  Version;             /* 10 */
+    ULONG  Version;             /* 10 */
   } DUMMYUNIONNAME;
   PVOID  ArbitraryUserPointer;  /* 14 */
   struct _KPCR_TIB *Self;       /* 18 */
 } KPCR_TIB, *PKPCR_TIB;         /* 1C */
 
-#define PCR_MINOR_VERSION 1
-#define PCR_MAJOR_VERSION 1
-
 typedef struct _KPCR {
   KPCR_TIB  Tib;                /* 00 */
   struct _KPCR  *Self;          /* 1C */
@@ -5202,8 +5553,16 @@ typedef struct _KPCR {
   ULONG  StallScaleFactor;      /* 4C */
   UCHAR  SpareUnused;           /* 50 */
   UCHAR  Number;                /* 51 */
+  UCHAR Spare0;
+  UCHAR SecondLevelCacheAssociativity;
+  ULONG VdmAlert;
+  ULONG KernelReserved[14];         // For use by the kernel
+  ULONG SecondLevelCacheSize;
+  ULONG HalReserved[16];            // For use by Hal
 } KPCR, *PKPCR;                 /* 54 */
 
+#define KeGetPcr()                      PCR
+
 typedef struct _KFLOATING_SAVE {
   ULONG  ControlWord;
   ULONG  StatusWord;
@@ -5215,42 +5574,6 @@ typedef struct _KFLOATING_SAVE {
   ULONG  Spare1;
 } KFLOATING_SAVE, *PKFLOATING_SAVE;
 
-#define PAGE_SIZE                         0x1000
-#define PAGE_SHIFT                        12L
-
-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_LOWEST_USER_ADDRESS            (PVOID)0x10000
-#define MM_LOWEST_SYSTEM_ADDRESS          (PVOID)0xC0C00000
-
-#define KI_USER_SHARED_DATA               0xffdf0000
-#define SharedUserData                    ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
-
-#define EFLAG_SIGN                        0x8000
-#define EFLAG_ZERO                        0x4000
-#define EFLAG_SELECT                      (EFLAG_SIGN | EFLAG_ZERO)
-
-#define RESULT_NEGATIVE                   ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
-#define RESULT_ZERO                       ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
-#define RESULT_POSITIVE                   ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
-
-typedef enum _INTERLOCKED_RESULT {
-  ResultNegative = RESULT_NEGATIVE,
-  ResultZero = RESULT_ZERO,
-  ResultPositive = RESULT_POSITIVE
-} INTERLOCKED_RESULT;
-
-NTHALAPI
-KIRQL
-DDKAPI
-KeGetCurrentIrql(
-  VOID);
-
 static __inline
 ULONG
 DDKAPI
@@ -5275,105 +5598,148 @@ KeGetCurrentProcessorNumber(VOID)
 #endif
 }
 
-#if !defined(__INTERLOCKED_DECLARED)
-#define __INTERLOCKED_DECLARED
-
-NTOSAPI
-LONG
-DDKFASTAPI
-InterlockedIncrement(
-  IN OUT LONG volatile *Addend);
+NTHALAPI
+KIRQL
+DDKAPI
+KeGetCurrentIrql(
+    VOID);
 
-NTOSAPI
-LONG
-DDKFASTAPI
-InterlockedDecrement(
-  IN OUT LONG volatile *Addend);
+NTKERNELAPI
+PRKTHREAD
+NTAPI
+KeGetCurrentThread(
+    VOID);
 
-NTOSAPI
-LONG
-DDKFASTAPI
-InterlockedCompareExchange(
-  IN OUT LONG volatile *Destination,
-  IN LONG  Exchange,
-  IN LONG  Comparand);
+#define KI_USER_SHARED_DATA               0xffdf0000
 
-NTOSAPI
-LONG
-DDKFASTAPI
-InterlockedExchange(
-  IN OUT LONG volatile *Destination,
-  IN LONG Value);
+#elif defined(__x86_64__)
 
-NTOSAPI
-LONG
-DDKFASTAPI
-InterlockedExchangeAdd(
-  IN OUT LONG volatile *Addend,
-  IN LONG  Value);
+//
+// Used to contain PFNs and PFN counts
+//
+typedef ULONG PFN_COUNT;
+typedef ULONG64 PFN_NUMBER, *PPFN_NUMBER;
+typedef LONG64 SPFN_NUMBER, *PSPFN_NUMBER;
 
-/*
- * PVOID
- * InterlockedExchangePointer(
- *   IN OUT PVOID VOLATILE  *Target,
- *   IN PVOID  Value)
- */
-#define InterlockedExchangePointer(Target, Value) \
-  ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
+#define PASSIVE_LEVEL                      0
+#define LOW_LEVEL                          0
+#define APC_LEVEL                          1
+#define DISPATCH_LEVEL                     2
+#define CLOCK_LEVEL                       13
+#define IPI_LEVEL                         14
+#define POWER_LEVEL                       14
+#define PROFILE_LEVEL                     15
+#define HIGH_LEVEL                        15
+
+#define PAGE_SIZE   0x1000
+#define PAGE_SHIFT 12L
+#define PTI_SHIFT  12L
+#define PDI_SHIFT  21L
+#define PPI_SHIFT  30L
+#define PXI_SHIFT  39L
+#define PTE_PER_PAGE 512
+#define PDE_PER_PAGE 512
+#define PPE_PER_PAGE 512
+#define PXE_PER_PAGE 512
+#define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
+#define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
+#define PPI_MASK (PPE_PER_PAGE - 1)
+#define PXI_MASK (PXE_PER_PAGE - 1)
+
+#define PXE_BASE    0xFFFFF6FB7DBED000ULL
+#define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
+#define PPE_BASE    0xFFFFF6FB7DA00000ULL
+#define PDE_BASE    0xFFFFF6FB40000000ULL
+#define PTE_BASE    0xFFFFF68000000000ULL
+#define PXE_TOP     0xFFFFF6FB7DBEDFFFULL
+#define PPE_TOP     0xFFFFF6FB7DBFFFFFULL
+#define PDE_TOP     0xFFFFF6FB7FFFFFFFULL
+#define PTE_TOP     0xFFFFF6FFFFFFFFFFULL
+
+#define MM_LOWEST_USER_ADDRESS   (PVOID)0x10000
+#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
+#define KI_USER_SHARED_DATA       0xFFFFF78000000000ULL
+
+#define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
+#define SharedInterruptTime (&SharedUserData->InterruptTime)
+#define SharedSystemTime (&SharedUserData->SystemTime)
+#define SharedTickCount (&SharedUserData->TickCount)
+
+#define KeQueryInterruptTime() \
+    (*(volatile ULONG64*)SharedInterruptTime)
+#define KeQuerySystemTime(CurrentCount) \
+    *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
+#define KeQueryTickCount(CurrentCount) \
+    *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
+
+typedef struct _KPCR
+{
+    union
+    {
+        NT_TIB NtTib;
+        struct
+        {
+            union _KGDTENTRY64 *GdtBase;
+            struct _KTSS64 *TssBase;
+            ULONG64 UserRsp;
+            struct _KPCR *Self;
+            struct _KPRCB *CurrentPrcb;
+            PKSPIN_LOCK_QUEUE LockArray;
+            PVOID Used_Self;
+        };
+    };
+    union _KIDTENTRY64 *IdtBase;
+    ULONG64 Unused[2];
+    KIRQL Irql;
+    UCHAR SecondLevelCacheAssociativity;
+    UCHAR ObsoleteNumber;
+    UCHAR Fill0;
+    ULONG Unused0[3];
+    USHORT MajorVersion;
+    USHORT MinorVersion;
+    ULONG StallScaleFactor;
+    PVOID Unused1[3];
+    ULONG KernelReserved[15];
+    ULONG SecondLevelCacheSize;
+    ULONG HalReserved[16];
+    ULONG Unused2;
+    PVOID KdVersionBlock;
+    PVOID Unused3;
+    ULONG PcrAlign1[24];
+} KPCR, *PKPCR;
 
-/*
- * PVOID
- * InterlockedCompareExchangePointer(
- *   IN OUT PVOID  *Destination,
- *   IN PVOID  Exchange,
- *   IN PVOID  Comparand)
- */
-#define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
-  ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
+typedef struct _KFLOATING_SAVE {
+  ULONG Dummy;
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
 
-#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
-#define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
-#define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
+NTKERNELAPI
+PRKTHREAD
+NTAPI
+KeGetCurrentThread(
+    VOID);
 
-#endif /* !__INTERLOCKED_DECLARED */
-
-NTOSAPI
-VOID
-DDKFASTAPI
-KefAcquireSpinLockAtDpcLevel(
-  IN PKSPIN_LOCK  SpinLock);
-
-NTOSAPI
-VOID
-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
+FORCEINLINE
+PKPCR
+KeGetPcr(VOID)
+{
+    return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self));
+}
 
-#define KeGetDcacheFillSize() 1L
+FORCEINLINE
+ULONG
+KeGetCurrentProcessorNumber(VOID)
+{
+    return (ULONG)__readgsword(0x184);
+}
 
-#elif defined(_PPC_)
+#elif defined(__PowerPC__)
 
+//
+// Used to contain PFNs and PFN counts
+//
+typedef ULONG PFN_COUNT;
 typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
+typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
 
 #define PASSIVE_LEVEL                      0
 #define LOW_LEVEL                          0
@@ -5383,30 +5749,12 @@ typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
 #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
-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_LOWEST_USER_ADDRESS            (PVOID)0x10000
-#define MM_LOWEST_SYSTEM_ADDRESS          (PVOID)0xC0C00000
-
-#define KI_USER_SHARED_DATA               0xffdf0000
-#define SharedUserData                    ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
-
-#define EFLAG_SIGN                        0x8000
-#define EFLAG_ZERO                        0x4000
-#define EFLAG_SELECT                      (EFLAG_SIGN | EFLAG_ZERO)
 
-#define RESULT_NEGATIVE                   ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
-#define RESULT_ZERO                       ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
-#define RESULT_POSITIVE                   ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+typedef struct _KFLOATING_SAVE {
+  ULONG Dummy;
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
 
 typedef struct _KPCR_TIB {
   PVOID  ExceptionList;         /* 00 */
@@ -5415,7 +5763,7 @@ typedef struct _KPCR_TIB {
   PVOID  SubSystemTib;          /* 0C */
   _ANONYMOUS_UNION union {
     PVOID  FiberData;           /* 10 */
-    DWORD  Version;             /* 10 */
+    ULONG  Version;             /* 10 */
   } DUMMYUNIONNAME;
   PVOID  ArbitraryUserPointer;  /* 14 */
   struct _KPCR_TIB *Self;       /* 18 */
@@ -5444,49 +5792,203 @@ typedef struct _KPCR {
   UCHAR  Number;                /* 51 */
 } KPCR, *PKPCR;                 /* 54 */
 
-NTHALAPI
-KIRQL
+#define KeGetPcr()                      PCR
+
+static __inline
+ULONG
 DDKAPI
-KeGetCurrentIrql(
-  VOID);
+KeGetCurrentProcessorNumber(VOID)
+{
+    ULONG Number;
+  __asm__ __volatile__ (
+    "lwz %0, %c1(12)\n"
+    : "=r" (Number)
+    : "i" (FIELD_OFFSET(KPCR, Number))
+  );
+  return Number;
+}
+
+#elif defined(_MIPS_)
+
+#error MIPS Headers are totally incorrect
+
+//
+// Used to contain PFNs and PFN counts
+//
+typedef ULONG PFN_COUNT;
+typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
+typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
+
+#define PASSIVE_LEVEL                      0
+#define APC_LEVEL                          1
+#define DISPATCH_LEVEL                     2
+#define PROFILE_LEVEL                     27
+#define IPI_LEVEL                         29
+#define HIGH_LEVEL                        31
+
+typedef struct _KPCR {
+    struct _KPRCB  *Prcb;         /* 20 */
+    KIRQL  Irql;                  /* 24 */
+    ULONG  IRR;                   /* 28 */
+    ULONG  IDR;                   /* 30 */
+} KPCR, *PKPCR;
+
+#define KeGetPcr()                      PCR
+
+typedef struct _KFLOATING_SAVE {
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
+
+static __inline
+ULONG
+DDKAPI
+KeGetCurrentProcessorNumber(VOID)
+{
+    return 0;
+}
+
+#elif defined(_M_ARM)
+
+//
+// NT-ARM is not documented, need DDK-ARM
+//
+#include <armddk.h>
+
+#else
+#error Unknown architecture
+#endif
+
+#define PAGE_SIZE                         0x1000
+#define PAGE_SHIFT                        12L
+
+#define SharedUserData                    ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
+
+extern NTKERNELAPI PVOID MmHighestUserAddress;
+extern NTKERNELAPI PVOID MmSystemRangeStart;
+extern NTKERNELAPI ULONG_PTR MmUserProbeAddress;
+
+#define MM_HIGHEST_USER_ADDRESS           MmHighestUserAddress
+#define MM_SYSTEM_RANGE_START             MmSystemRangeStart
+#define MM_USER_PROBE_ADDRESS             MmUserProbeAddress
+#define MM_LOWEST_USER_ADDRESS            (PVOID)0x10000
+#define MM_LOWEST_SYSTEM_ADDRESS          (PVOID)0xC0C00000
+
+#define MM_KSEG0_BASE       MM_SYSTEM_RANGE_START
+#define MM_SYSTEM_SPACE_END 0xFFFFFFFF
+
+
+#define EFLAG_SIGN                        0x8000
+#define EFLAG_ZERO                        0x4000
+#define EFLAG_SELECT                      (EFLAG_SIGN | EFLAG_ZERO)
+
+#define RESULT_NEGATIVE                   ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+#define RESULT_ZERO                       ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
+#define RESULT_POSITIVE                   ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+
+typedef enum _INTERLOCKED_RESULT {
+  ResultNegative = RESULT_NEGATIVE,
+  ResultZero = RESULT_ZERO,
+  ResultPositive = RESULT_POSITIVE
+} INTERLOCKED_RESULT;
+
+typedef VOID
+(NTAPI *PciPin2Line)(
+    IN struct _BUS_HANDLER *BusHandler,
+    IN struct _BUS_HANDLER *RootHandler,
+    IN PCI_SLOT_NUMBER SlotNumber,
+    IN PPCI_COMMON_CONFIG PciData
+);
+
+typedef VOID
+(NTAPI *PciLine2Pin)(
+    IN struct _BUS_HANDLER *BusHandler,
+    IN struct _BUS_HANDLER *RootHandler,
+    IN PCI_SLOT_NUMBER SlotNumber,
+    IN PPCI_COMMON_CONFIG PciNewData,
+    IN PPCI_COMMON_CONFIG PciOldData
+);
+
+typedef VOID
+(NTAPI *PciReadWriteConfig)(
+    IN struct _BUS_HANDLER *BusHandler,
+    IN PCI_SLOT_NUMBER Slot,
+    IN PVOID Buffer,
+    IN ULONG Offset,
+    IN ULONG Length
+);
+
+#define PCI_DATA_TAG TAG('P', 'C', 'I', ' ')
+#define PCI_DATA_VERSION 1
+
+typedef struct _PCIBUSDATA
+{
+    ULONG Tag;
+    ULONG Version;
+    PciReadWriteConfig ReadConfig;
+    PciReadWriteConfig WriteConfig;
+    PciPin2Line Pin2Line;
+    PciLine2Pin Line2Pin;
+    PCI_SLOT_NUMBER ParentSlot;
+    PVOID Reserved[4];
+} PCIBUSDATA, *PPCIBUSDATA;
+
+
+/** INTERLOCKED FUNCTIONS *****************************************************/
 
 #if !defined(__INTERLOCKED_DECLARED)
 #define __INTERLOCKED_DECLARED
 
-NTOSAPI
+#if defined (_X86_)
+#if defined(NO_INTERLOCKED_INTRINSICS)
+NTKERNELAPI
 LONG
-DDKFASTAPI
+FASTCALL
 InterlockedIncrement(
-  IN PLONG  VOLATILE  Addend);
+  IN OUT LONG volatile *Addend);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKFASTAPI
+FASTCALL
 InterlockedDecrement(
-  IN PLONG  VOLATILE  Addend);
+  IN OUT LONG volatile *Addend);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKFASTAPI
+FASTCALL
 InterlockedCompareExchange(
-  IN OUT PLONG  VOLATILE  Destination,
+  IN OUT LONG volatile *Destination,
   IN LONG  Exchange,
   IN LONG  Comparand);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKFASTAPI
+FASTCALL
 InterlockedExchange(
-  IN OUT PLONG  VOLATILE  Target,
+  IN OUT LONG volatile *Destination,
   IN LONG Value);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKFASTAPI
+FASTCALL
 InterlockedExchangeAdd(
-  IN OUT PLONG VOLATILE  Addend,
+  IN OUT LONG volatile *Addend,
   IN LONG  Value);
 
+#else // !defined(NO_INTERLOCKED_INTRINSICS)
+
+#define InterlockedExchange _InterlockedExchange
+#define InterlockedIncrement _InterlockedIncrement
+#define InterlockedDecrement _InterlockedDecrement
+#define InterlockedExchangeAdd _InterlockedExchangeAdd
+#define InterlockedCompareExchange _InterlockedCompareExchange
+#define InterlockedOr _InterlockedOr
+#define InterlockedAnd _InterlockedAnd
+#define InterlockedXor _InterlockedXor
+
+#endif // !defined(NO_INTERLOCKED_INTRINSICS)
+
+#endif // defined (_X86_)
+
+#if !defined (_WIN64)
 /*
  * PVOID
  * InterlockedExchangePointer(
@@ -5505,73 +6007,151 @@ InterlockedExchangeAdd(
  */
 #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
   ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
+
+#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
+#define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
 #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
 
+#endif // !defined (_WIN64)
+
+#if defined (_M_AMD64)
+
+#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b)
+#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
+#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
+#define InterlockedAnd _InterlockedAnd
+#define InterlockedOr _InterlockedOr
+#define InterlockedXor _InterlockedXor
+#define InterlockedIncrement _InterlockedIncrement
+#define InterlockedDecrement _InterlockedDecrement
+#define InterlockedAdd _InterlockedAdd
+#define InterlockedExchange _InterlockedExchange
+#define InterlockedExchangeAdd _InterlockedExchangeAdd
+#define InterlockedCompareExchange _InterlockedCompareExchange
+#define InterlockedAnd64 _InterlockedAnd64
+#define InterlockedOr64 _InterlockedOr64
+#define InterlockedXor64 _InterlockedXor64
+#define InterlockedIncrement64 _InterlockedIncrement64
+#define InterlockedDecrement64 _InterlockedDecrement64
+#define InterlockedAdd64 _InterlockedAdd64
+#define InterlockedExchange64 _InterlockedExchange64
+#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
+#define InterlockedCompareExchange64 _InterlockedCompareExchange64
+#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
+#define InterlockedExchangePointer _InterlockedExchangePointer
+
+#define ExInterlockedPopEntrySList(Head, Lock) ExpInterlockedPopEntrySList(Head)
+#define ExInterlockedPushEntrySList(Head, Entry, Lock) ExpInterlockedPushEntrySList(Head, Entry)
+#define ExInterlockedFlushSList(Head) ExpInterlockedFlushSList(Head)
+
+#if !defined(_WINBASE_)
+#define InterlockedPopEntrySList(Head) ExpInterlockedPopEntrySList(Head)
+#define InterlockedPushEntrySList(Head, Entry) ExpInterlockedPushEntrySList(Head, Entry)
+#define InterlockedFlushSList(Head) ExpInterlockedFlushSList(Head)
+#define QueryDepthSList(Head) ExQueryDepthSList(Head)
+#endif // !defined(_WINBASE_)
+
+#endif // _M_AMD64
+
 #endif /* !__INTERLOCKED_DECLARED */
 
-NTOSAPI
-VOID
-DDKFASTAPI
-KefAcquireSpinLockAtDpcLevel(
-  IN PKSPIN_LOCK  SpinLock);
 
-NTOSAPI
+/** SPINLOCK FUNCTIONS ********************************************************/
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTryToAcquireSpinLockAtDpcLevel(
+    IN OUT PKSPIN_LOCK SpinLock
+);
+
+#if defined (_X86_)
+
+NTKERNELAPI
 VOID
-DDKFASTAPI
-KefReleaseSpinLockFromDpcLevel(
+NTAPI
+KeInitializeSpinLock(
   IN PKSPIN_LOCK  SpinLock);
 
 NTHALAPI
 KIRQL
-DDKFASTAPI
+FASTCALL
 KfAcquireSpinLock(
   IN PKSPIN_LOCK SpinLock);
 
 NTHALAPI
 VOID
-DDKFASTAPI
+FASTCALL
 KfReleaseSpinLock(
   IN PKSPIN_LOCK SpinLock,
   IN KIRQL NewIrql);
 
+NTKERNELAPI
+VOID
+FASTCALL
+KefAcquireSpinLockAtDpcLevel(
+  IN PKSPIN_LOCK  SpinLock);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KefReleaseSpinLockFromDpcLevel(
+  IN PKSPIN_LOCK  SpinLock);
+
 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
 #define KeAcquireSpinLock(a,b)  *(b) = KfAcquireSpinLock(a)
 #define KeReleaseSpinLock(a,b)  KfReleaseSpinLock(a,b)
 
-#define RtlCopyMemoryNonTemporal RtlCopyMemory
+#else // !defined (_X86_)
 
-#define KeGetDcacheFillSize() 1L
+FORCEINLINE
+VOID
+NTAPI
+KeInitializeSpinLock(
+  PKSPIN_LOCK SpinLock)
+{
+    *SpinLock = 0;
+}
 
-typedef enum _INTERLOCKED_RESULT {
-  ResultNegative = -1,
-  ResultZero = 0,
-  ResultPositive = 1
-} INTERLOCKED_RESULT;
+NTKERNELAPI
+VOID
+KeReleaseSpinLock(
+  IN PKSPIN_LOCK SpinLock,
+  IN KIRQL NewIrql);
 
-typedef struct _KFLOATING_SAVE {
-    ULONG Fr[32];
-} KFLOATING_SAVE, *PKFLOATING_SAVE;
+NTKERNELAPI
+VOID
+KeAcquireSpinLockAtDpcLevel(
+  IN PKSPIN_LOCK SpinLock);
 
-static __inline
-ULONG
-DDKAPI
-KeGetCurrentProcessorNumber(VOID)
-{
-       return 0; // XXX arty fixme
-}
+NTKERNELAPI
+VOID
+KeReleaseSpinLockFromDpcLevel(
+  IN PKSPIN_LOCK SpinLock);
+
+NTKERNELAPI
+KIRQL
+KeAcquireSpinLockRaiseToDpc(
+  IN PKSPIN_LOCK SpinLock);
+
+#define KeAcquireSpinLock(SpinLock, OldIrql) \
+  *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
+
+#endif // !defined (_X86_)
+
+#define RtlCopyMemoryNonTemporal RtlCopyMemory
+
+#define KeGetDcacheFillSize() 1L
 
-#define PAGE_SIZE                         0x1000
-#define PAGE_SHIFT                        12L
 
-#endif /* _X86_ */
 
 /*
 ** Utillity functions
 */
 
 #define ARGUMENT_PRESENT(ArgumentPointer) \
-  ((BOOLEAN) ((PVOID)ArgumentPointer != (PVOID)NULL))
+  ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
 
 /*
  * ULONG
@@ -5589,28 +6169,6 @@ KeGetCurrentProcessorNumber(VOID)
 #define BYTES_TO_PAGES(Size) \
   ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
 
-/*
- * PCHAR
- * CONTAINING_RECORD(
- *   IN PCHAR  Address,
- *   IN TYPE  Type,
- *   IN PCHAR  Field);
- */
-#ifndef CONTAINING_RECORD
-#define CONTAINING_RECORD(address, type, field) \
-  ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
-#endif
-
-/* LONG
- * FIELD_OFFSET(
- *   IN TYPE  Type,
- *   IN PCHAR  Field);
- */
-#ifndef FIELD_OFFSET
-#define FIELD_OFFSET(Type, Field) \
-  ((LONG) (&(((Type *) 0)->Field)))
-#endif
-
 /*
  * PVOID
  * PAGE_ALIGN(
@@ -5801,17 +6359,17 @@ RemoveTailList(
   return Entry;
 }
 
-#if !defined(_WINBASE_H) || _WIN32_WINNT < 0x0501
+#if !defined(_WINBASE_) || _WIN32_WINNT < 0x0501
 
-NTOSAPI
+NTKERNELAPI
 PSLIST_ENTRY
-DDKFASTAPI
+FASTCALL
 InterlockedPopEntrySList(
   IN PSLIST_HEADER  ListHead);
 
-NTOSAPI
+NTKERNELAPI
 PSLIST_ENTRY
-DDKFASTAPI
+FASTCALL
 InterlockedPushEntrySList(
   IN PSLIST_HEADER  ListHead,
   IN PSLIST_ENTRY  ListEntry);
@@ -5828,9 +6386,9 @@ InterlockedPushEntrySList(
 
 #define InterlockedFlushSList(ListHead) ExInterlockedFlushSList(ListHead)
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlxAnsiStringToUnicodeSize(
   IN PCANSI_STRING  AnsiString);
 
@@ -5840,106 +6398,108 @@ RtlxAnsiStringToUnicodeSize(
   ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR)   \
 )
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlAnsiStringToUnicodeString(
   IN OUT PUNICODE_STRING  DestinationString,
   IN PANSI_STRING  SourceString,
   IN BOOLEAN  AllocateDestinationString);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlAppendUnicodeStringToString(
   IN OUT PUNICODE_STRING  Destination,
   IN PCUNICODE_STRING  Source);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlAppendUnicodeToString(
   IN OUT PUNICODE_STRING  Destination,
   IN PCWSTR  Source);
 
-NTOSAPI
+NTSYSAPI
 BOOLEAN
-DDKAPI
+NTAPI
 RtlAreBitsClear(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  StartingIndex,
   IN ULONG  Length);
 
-NTOSAPI
+NTSYSAPI
 BOOLEAN
-DDKAPI
+NTAPI
 RtlAreBitsSet(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  StartingIndex,
   IN ULONG  Length);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlCharToInteger(
   IN PCSZ  String,
   IN ULONG  Base  OPTIONAL,
   IN OUT PULONG  Value);
 
-NTOSAPI
+#if 0
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlCheckBit(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  BitPosition);
+#endif
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlCheckRegistryKey(
   IN ULONG  RelativeTo,
   IN PWSTR  Path);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlClearAllBits(
   IN PRTL_BITMAP  BitMapHeader);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlClearBit(
   PRTL_BITMAP  BitMapHeader,
   ULONG  BitNumber);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlClearBits(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  StartingIndex,
   IN ULONG  NumberToClear);
 
-NTOSAPI
+NTSYSAPI
 SIZE_T
-DDKAPI
+NTAPI
 RtlCompareMemory(
   IN CONST VOID  *Source1,
   IN CONST VOID  *Source2,
   IN SIZE_T  Length);
 
-NTOSAPI
+NTSYSAPI
 LONG
-DDKAPI
+NTAPI
 RtlCompareString(
   IN PSTRING  String1,
   IN PSTRING  String2,
   BOOLEAN  CaseInSensitive);
 
-NTOSAPI
+NTSYSAPI
 LONG
-DDKAPI
+NTAPI
 RtlCompareUnicodeString(
   IN PCUNICODE_STRING  String1,
   IN PCUNICODE_STRING  String2,
@@ -5956,24 +6516,61 @@ RtlConvertLongToLargeInteger(LONG SignedInteger)
     return Result;
 }
 
-NTOSAPI
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertUlongToLargeInteger(
+  ULONG UnsignedInteger)
+{
+    LARGE_INTEGER ret;
+    ret.QuadPart = UnsignedInteger;
+    return ret;
+}
+
+NTSYSAPI
 LUID
-DDKAPI
+NTAPI
 RtlConvertLongToLuid(
   IN LONG  Long);
 
-NTOSAPI
-LARGE_INTEGER
-DDKAPI
-RtlConvertUlongToLargeInteger(
-  IN ULONG  UnsignedInteger);
 
-NTOSAPI
+NTSYSAPI
 LUID
-DDKAPI
+NTAPI
 RtlConvertUlongToLuid(
   ULONG  Ulong);
 
+#ifdef _M_AMD64
+
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedIntegerMultiply(
+  LARGE_INTEGER Multiplicand,
+  LONG Multiplier)
+{
+    LARGE_INTEGER ret;
+    ret.QuadPart = Multiplicand.QuadPart * Multiplier;
+    return ret;
+}
+
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedLargeIntegerDivide(
+  LARGE_INTEGER Dividend,
+  ULONG Divisor,
+  PULONG Remainder)
+{
+    LARGE_INTEGER ret;
+    ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
+    if (Remainder)
+        *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+    return ret;
+}
+
+#endif
+
 /*
  * VOID
  * RtlCopyMemory(
@@ -5990,45 +6587,45 @@ RtlConvertUlongToLuid(
 #define RtlCopyBytes RtlCopyMemory
 #endif
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlCopyMemory32(
   IN VOID UNALIGNED  *Destination,
   IN CONST VOID UNALIGNED  *Source,
   IN ULONG  Length);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlCopyString(
   IN OUT PSTRING  DestinationString,
   IN PSTRING  SourceString  OPTIONAL);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlCopyUnicodeString(
   IN OUT PUNICODE_STRING  DestinationString,
   IN PCUNICODE_STRING  SourceString);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlCreateRegistryKey(
   IN ULONG  RelativeTo,
   IN PWSTR  Path);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlCreateSecurityDescriptor(
   IN OUT PSECURITY_DESCRIPTOR  SecurityDescriptor,
   IN ULONG  Revision);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlDeleteRegistryValue(
   IN ULONG  RelativeTo,
   IN PCWSTR  Path,
@@ -6053,17 +6650,17 @@ RtlDeleteRegistryValue(
  */
 #define RtlEqualMemory(Destination, Source, Length) (!memcmp(Destination, Source, Length))
 
-NTOSAPI
+NTSYSAPI
 BOOLEAN
-DDKAPI
+NTAPI
 RtlEqualString(
   IN PSTRING  String1,
   IN PSTRING  String2,
   IN BOOLEAN  CaseInSensitive);
 
-NTOSAPI
+NTSYSAPI
 BOOLEAN
-DDKAPI
+NTAPI
 RtlEqualUnicodeString(
   IN CONST UNICODE_STRING  *String1,
   IN CONST UNICODE_STRING  *String2,
@@ -6085,178 +6682,178 @@ RtlEqualUnicodeString(
 #define RtlFillBytes RtlFillMemory
 #endif
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlFindClearBits(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  NumberToFind,
   IN ULONG  HintIndex);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlFindClearBitsAndSet(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  NumberToFind,
   IN ULONG  HintIndex);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlFindClearRuns(
   IN PRTL_BITMAP  BitMapHeader,
   OUT PRTL_BITMAP_RUN  RunArray,
   IN ULONG  SizeOfRunArray,
   IN BOOLEAN  LocateLongestRuns);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlFindFirstRunClear(
   IN PRTL_BITMAP  BitMapHeader,
   OUT PULONG  StartingIndex);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlFindLastBackwardRunClear(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  FromIndex,
   OUT PULONG  StartingRunIndex);
 
-NTOSAPI
+NTSYSAPI
 CCHAR
-DDKAPI
+NTAPI
 RtlFindLeastSignificantBit(
   IN ULONGLONG  Set);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlFindLongestRunClear(
   IN PRTL_BITMAP  BitMapHeader,
   OUT PULONG  StartingIndex);
 
-NTOSAPI
+NTSYSAPI
 CCHAR
-DDKAPI
+NTAPI
 RtlFindMostSignificantBit(
   IN ULONGLONG  Set);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlFindNextForwardRunClear(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  FromIndex,
   OUT PULONG  StartingRunIndex);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlFindSetBits(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  NumberToFind,
   IN ULONG  HintIndex);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlFindSetBitsAndClear(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  NumberToFind,
   IN ULONG  HintIndex);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlFreeAnsiString(
   IN PANSI_STRING  AnsiString);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlFreeUnicodeString(
   IN PUNICODE_STRING  UnicodeString);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlGetCallersAddress(
   OUT PVOID  *CallersAddress,
   OUT PVOID  *CallersCaller);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlGetVersion(
   IN OUT PRTL_OSVERSIONINFOW  lpVersionInformation);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlGUIDFromString(
   IN PUNICODE_STRING  GuidString,
   OUT GUID  *Guid);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlHashUnicodeString(
   IN CONST UNICODE_STRING  *String,
   IN BOOLEAN  CaseInSensitive,
   IN ULONG  HashAlgorithm,
   OUT PULONG  HashValue);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlInitAnsiString(
   IN OUT PANSI_STRING  DestinationString,
   IN PCSZ  SourceString);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlInitializeBitMap(
   IN PRTL_BITMAP  BitMapHeader,
   IN PULONG  BitMapBuffer,
   IN ULONG  SizeOfBitMap);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlInitString(
   IN OUT PSTRING  DestinationString,
   IN PCSZ  SourceString);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlInitUnicodeString(
   IN OUT PUNICODE_STRING  DestinationString,
   IN PCWSTR  SourceString);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlInt64ToUnicodeString(
   IN ULONGLONG  Value,
   IN ULONG  Base OPTIONAL,
   IN OUT PUNICODE_STRING  String);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlIntegerToUnicodeString(
   IN ULONG  Value,
   IN ULONG  Base  OPTIONAL,
   IN OUT PUNICODE_STRING  String);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlIntPtrToUnicodeString(
   PLONG  Value,
   ULONG  Base  OPTIONAL,
@@ -6270,15 +6867,15 @@ RtlIntPtrToUnicodeString(
 #define RtlIsZeroLuid(_L1) \
   ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlLengthSecurityDescriptor(
   IN PSECURITY_DESCRIPTOR  SecurityDescriptor);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlMapGenericMask(
   IN OUT PACCESS_MASK  AccessMask,
   IN PGENERIC_MAPPING  GenericMapping);
@@ -6292,36 +6889,36 @@ RtlMapGenericMask(
  */
 #define RtlMoveMemory memmove
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlNumberOfClearBits(
   IN PRTL_BITMAP  BitMapHeader);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlNumberOfSetBits(
   IN PRTL_BITMAP  BitMapHeader);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKFASTAPI
+FASTCALL
 RtlPrefetchMemoryNonTemporal(
   IN PVOID  Source,
   IN SIZE_T  Length);
 
-NTOSAPI
+NTSYSAPI
 BOOLEAN
-DDKAPI
+NTAPI
 RtlPrefixUnicodeString(
   IN PCUNICODE_STRING  String1,
   IN PCUNICODE_STRING  String2,
   IN BOOLEAN  CaseInSensitive);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlQueryRegistryValues(
   IN ULONG  RelativeTo,
   IN PCWSTR  Path,
@@ -6353,95 +6950,95 @@ RtlQueryRegistryValues(
         *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
     }
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlRetrieveUshort(
   IN OUT PUSHORT  DestinationAddress,
   IN PUSHORT  SourceAddress);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlSetAllBits(
   IN PRTL_BITMAP  BitMapHeader);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlSetBit(
   PRTL_BITMAP  BitMapHeader,
   ULONG  BitNumber);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlSetBits(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  StartingIndex,
   IN ULONG  NumberToSet);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlSetDaclSecurityDescriptor(
   IN OUT PSECURITY_DESCRIPTOR  SecurityDescriptor,
   IN BOOLEAN  DaclPresent,
   IN PACL  Dacl  OPTIONAL,
   IN BOOLEAN  DaclDefaulted  OPTIONAL);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlStoreUlong(
   IN PULONG  Address,
   IN ULONG  Value);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlStoreUlonglong(
   IN OUT PULONGLONG  Address,
   ULONGLONG  Value);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlStoreUlongPtr(
   IN OUT PULONG_PTR  Address,
   IN ULONG_PTR  Value);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlStoreUshort(
   IN PUSHORT  Address,
   IN USHORT  Value);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlStringFromGUID(
   IN REFGUID  Guid,
   OUT PUNICODE_STRING  GuidString);
 
-NTOSAPI
+NTSYSAPI
 BOOLEAN
-DDKAPI
+NTAPI
 RtlTestBit(
   IN PRTL_BITMAP  BitMapHeader,
   IN ULONG  BitNumber);
 
-NTOSAPI
+NTSYSAPI
 BOOLEAN
-DDKAPI
+NTAPI
 RtlTimeFieldsToTime(
   IN PTIME_FIELDS  TimeFields,
   IN PLARGE_INTEGER  Time);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlTimeToTimeFields(
   IN PLARGE_INTEGER  Time,
   IN PTIME_FIELDS  TimeFields);
@@ -6473,45 +7070,56 @@ RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString,
     UnicodeString->Buffer = Buffer;
 }
 
-NTOSAPI
+FORCEINLINE
+VOID
+RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString,
+                       IN PCHAR Buffer,
+                       IN USHORT BufferSize)
+{
+    AnsiString->Length = 0;
+    AnsiString->MaximumLength = BufferSize;
+    AnsiString->Buffer = Buffer;
+}
+
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlUnicodeStringToAnsiString(
   IN OUT PANSI_STRING  DestinationString,
   IN PCUNICODE_STRING  SourceString,
   IN BOOLEAN  AllocateDestinationString);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlUnicodeStringToInteger(
   IN PCUNICODE_STRING  String,
   IN ULONG  Base  OPTIONAL,
   OUT PULONG  Value);
 
-NTOSAPI
+NTSYSAPI
 WCHAR
-DDKAPI
+NTAPI
 RtlUpcaseUnicodeChar(
   IN WCHAR  SourceCharacter);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlUpcaseUnicodeString(
   IN OUT PUNICODE_STRING  DestinationString  OPTIONAL,
   IN PCUNICODE_STRING  SourceString,
   IN BOOLEAN  AllocateDestinationString);
 
-NTOSAPI
+NTSYSAPI
 CHAR
-DDKAPI
+NTAPI
 RtlUpperChar(
   IN CHAR Character);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 RtlUpperString(
   IN OUT PSTRING  DestinationString,
   IN PSTRING  SourceString);
@@ -6521,46 +7129,46 @@ FASTCALL
 RtlUshortByteSwap(
   IN USHORT  Source);
 
-NTOSAPI
+NTSYSAPI
 BOOLEAN
-DDKAPI
+NTAPI
 RtlValidRelativeSecurityDescriptor(
   IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
   IN ULONG  SecurityDescriptorLength,
   IN SECURITY_INFORMATION  RequiredInformation);
 
-NTOSAPI
+NTSYSAPI
 BOOLEAN
-DDKAPI
+NTAPI
 RtlValidSecurityDescriptor(
   IN PSECURITY_DESCRIPTOR  SecurityDescriptor);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlVerifyVersionInfo(
   IN PRTL_OSVERSIONINFOEXW  VersionInfo,
   IN ULONG  TypeMask,
   IN ULONGLONG  ConditionMask);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlVolumeDeviceToDosName(
   IN PVOID  VolumeDeviceObject,
   OUT PUNICODE_STRING  DosName);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlWalkFrameChain(
   OUT PVOID  *Callers,
   IN ULONG  Count,
   IN ULONG  Flags);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 RtlWriteRegistryValue(
   IN ULONG  RelativeTo,
   IN PCWSTR  Path,
@@ -6569,9 +7177,9 @@ RtlWriteRegistryValue(
   IN PVOID  ValueData,
   IN ULONG  ValueLength);
 
-NTOSAPI
+NTSYSAPI
 ULONG
-DDKAPI
+NTAPI
 RtlxUnicodeStringToAnsiSize(
   IN PCUNICODE_STRING  UnicodeString);
 
@@ -6590,57 +7198,87 @@ RtlxUnicodeStringToAnsiSize(
 #define RtlZeroBytes RtlZeroMemory
 #endif
 
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeAreAllApcsDisabled(
+    VOID
+);
 
 /* Guarded Mutex routines */
 
+NTKERNELAPI
 VOID
 FASTCALL
 KeAcquireGuardedMutex(
     IN OUT PKGUARDED_MUTEX GuardedMutex
 );
 
+NTKERNELAPI
 VOID
 FASTCALL
 KeAcquireGuardedMutexUnsafe(
     IN OUT PKGUARDED_MUTEX GuardedMutex
 );
 
+NTKERNELAPI
 VOID
 NTAPI
 KeEnterGuardedRegion(
     VOID
 );
 
+NTKERNELAPI
 VOID
 NTAPI
 KeLeaveGuardedRegion(
     VOID
 );
 
+NTKERNELAPI
 VOID
 FASTCALL
 KeInitializeGuardedMutex(
     OUT PKGUARDED_MUTEX GuardedMutex
 );
 
+NTKERNELAPI
 VOID
 FASTCALL
 KeReleaseGuardedMutexUnsafe(
     IN OUT PKGUARDED_MUTEX GuardedMutex
 );
 
+NTKERNELAPI
 VOID
 FASTCALL
 KeReleaseGuardedMutex(
     IN OUT PKGUARDED_MUTEX GuardedMutex
 );
 
+NTKERNELAPI
 BOOLEAN
 FASTCALL
 KeTryToAcquireGuardedMutex(
     IN OUT PKGUARDED_MUTEX GuardedMutex
 );
 
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionEx(
+     IN OUT PEX_RUNDOWN_REF RunRef,
+     IN ULONG Count
+);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseRundownProtectionEx(
+     IN OUT PEX_RUNDOWN_REF RunRef,
+     IN ULONG Count
+);
+
 /* Fast Mutex */
 #define ExInitializeFastMutex(_FastMutex) \
 { \
@@ -6650,28 +7288,28 @@ KeTryToAcquireGuardedMutex(
     KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
 }
 
-NTOSAPI
+NTKERNELAPI
 VOID
 FASTCALL
 ExAcquireFastMutexUnsafe(IN OUT PFAST_MUTEX FastMutex);
 
-NTOSAPI
+NTKERNELAPI
 VOID
 FASTCALL
 ExReleaseFastMutexUnsafe(IN OUT PFAST_MUTEX FastMutex);
 
 #if defined(_NTHAL_) && defined(_X86_)
-NTOSAPI
+NTKERNELAPI
 VOID
 FASTCALL
 ExiAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex);
 
-NTOSAPI
+NTKERNELAPI
 VOID
 FASTCALL
 ExiReleaseFastMutex(IN OUT PFAST_MUTEX FastMutex);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
 FASTCALL
 ExiTryToAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex);
@@ -6682,17 +7320,17 @@ ExiTryToAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex);
 
 #else
 
-NTOSAPI
+NTKERNELAPI
 VOID
 FASTCALL
 ExAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex);
 
-NTOSAPI
+NTKERNELAPI
 VOID
 FASTCALL
 ExReleaseFastMutex(IN OUT PFAST_MUTEX FastMutex);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
 FASTCALL
 ExTryToAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex);
@@ -6700,30 +7338,30 @@ ExTryToAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex);
 
 /** Executive support routines **/
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 ExAcquireResourceExclusiveLite(
   IN PERESOURCE  Resource,
   IN BOOLEAN  Wait);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 ExAcquireResourceSharedLite(
   IN PERESOURCE  Resource,
   IN BOOLEAN  Wait);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 ExAcquireSharedStarveExclusive(
   IN PERESOURCE  Resource,
   IN BOOLEAN  Wait);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 ExAcquireSharedWaitForExclusive(
   IN PERESOURCE  Resource,
   IN BOOLEAN  Wait);
@@ -6758,17 +7396,17 @@ ExAllocateFromPagedLookasideList(
   return Entry;
 }
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 ExAllocatePoolWithQuotaTag(
   IN POOL_TYPE  PoolType,
   IN SIZE_T  NumberOfBytes,
   IN ULONG  Tag);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 ExAllocatePoolWithTag(
   IN POOL_TYPE  PoolType,
   IN SIZE_T  NumberOfBytes,
@@ -6781,67 +7419,67 @@ ExAllocatePoolWithTag(
 
 #else /* !POOL_TAGGING */
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 ExAllocatePool(
   IN POOL_TYPE  PoolType,
   IN SIZE_T  NumberOfBytes);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 ExAllocatePoolWithQuota(
   IN POOL_TYPE  PoolType,
   IN SIZE_T  NumberOfBytes);
 
 #endif /* POOL_TAGGING */
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 ExAllocatePoolWithTagPriority(
   IN POOL_TYPE  PoolType,
   IN SIZE_T  NumberOfBytes,
   IN ULONG  Tag,
   IN EX_POOL_PRIORITY  Priority);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExConvertExclusiveToSharedLite(
   IN PERESOURCE  Resource);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ExCreateCallback(
   OUT PCALLBACK_OBJECT  *CallbackObject,
   IN POBJECT_ATTRIBUTES  ObjectAttributes,
   IN BOOLEAN  Create,
   IN BOOLEAN  AllowMultipleCallbacks);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExDeleteNPagedLookasideList(
   IN PNPAGED_LOOKASIDE_LIST  Lookaside);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExDeletePagedLookasideList(
   IN PPAGED_LOOKASIDE_LIST  Lookaside);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ExDeleteResourceLite(
   IN PERESOURCE  Resource);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExFreePool(
   IN PVOID  P);
 
@@ -6851,9 +7489,9 @@ ExFreePool(
 #define ExFreePool(P) ExFreePoolWithTag(P, 0)
 #endif
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExFreePoolWithTag(
   IN PVOID  P,
   IN ULONG  Tag);
@@ -6895,35 +7533,35 @@ ExFreeToPagedLookasideList(
  */
 #define ExGetCurrentResourceThread() ((ERESOURCE_THREAD) PsGetCurrentThread())
 
-NTOSAPI
+NTKERNELAPI
 ULONG
-DDKAPI
+NTAPI
 ExGetExclusiveWaiterCount(
   IN PERESOURCE  Resource);
 
-NTOSAPI
+NTKERNELAPI
 KPROCESSOR_MODE
-DDKAPI
+NTAPI
 ExGetPreviousMode(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 ULONG
-DDKAPI
+NTAPI
 ExGetSharedWaiterCount(
   IN PERESOURCE  Resource);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeInitializeEvent(
   IN PRKEVENT  Event,
   IN EVENT_TYPE  Type,
   IN BOOLEAN  State);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExInitializeNPagedLookasideList(
   IN PNPAGED_LOOKASIDE_LIST  Lookaside,
   IN PALLOCATE_FUNCTION  Allocate  OPTIONAL,
@@ -6933,9 +7571,9 @@ ExInitializeNPagedLookasideList(
   IN ULONG  Tag,
   IN USHORT  Depth);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExInitializePagedLookasideList(
   IN PPAGED_LOOKASIDE_LIST  Lookaside,
   IN PALLOCATE_FUNCTION  Allocate  OPTIONAL,
@@ -6945,9 +7583,9 @@ ExInitializePagedLookasideList(
   IN ULONG  Tag,
   IN USHORT  Depth);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ExInitializeResourceLite(
   IN PERESOURCE  Resource);
 
@@ -6961,71 +7599,71 @@ ExInitializeResourceLite(
 
 #define ExInitializeSListHead InitializeSListHead
 
-NTOSAPI
+NTKERNELAPI
 LARGE_INTEGER
-DDKAPI
+NTAPI
 ExInterlockedAddLargeInteger(
   IN PLARGE_INTEGER  Addend,
   IN LARGE_INTEGER  Increment,
   IN PKSPIN_LOCK  Lock);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKFASTAPI
+FASTCALL
 ExInterlockedAddLargeStatistic(
   IN PLARGE_INTEGER  Addend,
   IN ULONG  Increment);
 
-NTOSAPI
+NTKERNELAPI
 ULONG
-DDKAPI
+NTAPI
 ExInterlockedAddUlong(
   IN PULONG  Addend,
   IN ULONG  Increment,
   PKSPIN_LOCK  Lock);
 
-NTOSAPI
+NTKERNELAPI
 LONGLONG
-DDKFASTAPI
+FASTCALL
 ExInterlockedCompareExchange64(
   IN OUT PLONGLONG  Destination,
   IN PLONGLONG  Exchange,
   IN PLONGLONG  Comparand,
   IN PKSPIN_LOCK  Lock);
 
-NTOSAPI
+NTKERNELAPI
 LONGLONG
-DDKFASTAPI
+FASTCALL
 ExfInterlockedCompareExchange64(
   IN OUT LONGLONG volatile  *Destination,
   IN PLONGLONG  Exchange,
   IN PLONGLONG  Comperand);
 
-NTOSAPI
+NTKERNELAPI
 PSINGLE_LIST_ENTRY
-DDKFASTAPI
+FASTCALL
 ExInterlockedFlushSList(
   IN PSLIST_HEADER  ListHead);
 
-NTOSAPI
+NTKERNELAPI
 PLIST_ENTRY
-DDKAPI
+NTAPI
 ExInterlockedInsertHeadList(
   IN PLIST_ENTRY  ListHead,
   IN PLIST_ENTRY  ListEntry,
   IN PKSPIN_LOCK  Lock);
 
-NTOSAPI
+NTKERNELAPI
 PLIST_ENTRY
-DDKAPI
+NTAPI
 ExInterlockedInsertTailList(
   IN PLIST_ENTRY  ListHead,
   IN PLIST_ENTRY  ListEntry,
   IN PKSPIN_LOCK  Lock);
 
-NTOSAPI
+NTKERNELAPI
 PSINGLE_LIST_ENTRY
-DDKAPI
+NTAPI
 ExInterlockedPopEntryList(
   IN PSINGLE_LIST_ENTRY  ListHead,
   IN PKSPIN_LOCK  Lock);
@@ -7040,9 +7678,9 @@ ExInterlockedPopEntryList(
                                    _Lock) \
   InterlockedPopEntrySList(_ListHead)
 
-NTOSAPI
+NTKERNELAPI
 PSINGLE_LIST_ENTRY
-DDKAPI
+NTAPI
 ExInterlockedPushEntryList(
   IN PSINGLE_LIST_ENTRY  ListHead,
   IN PSINGLE_LIST_ENTRY  ListEntry,
@@ -7060,139 +7698,137 @@ ExInterlockedPushEntryList(
                                     _Lock) \
   InterlockedPushEntrySList(_ListHead, _ListEntry)
 
-NTOSAPI
+NTKERNELAPI
 PLIST_ENTRY
-DDKAPI
+NTAPI
 ExInterlockedRemoveHeadList(
   IN PLIST_ENTRY  ListHead,
   IN PKSPIN_LOCK  Lock);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 ExIsProcessorFeaturePresent(
   IN ULONG  ProcessorFeature);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 ExIsResourceAcquiredExclusiveLite(
   IN PERESOURCE  Resource);
 
-NTOSAPI
+NTKERNELAPI
 USHORT
-DDKAPI
+NTAPI
 ExIsResourceAcquiredLite(
   IN PERESOURCE  Resource);
 
-NTOSAPI
+NTKERNELAPI
 ULONG
-DDKAPI
+NTAPI
 ExIsResourceAcquiredSharedLite(
   IN PERESOURCE  Resource);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExLocalTimeToSystemTime(
   IN PLARGE_INTEGER  LocalTime,
   OUT PLARGE_INTEGER  SystemTime);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExNotifyCallback(
   IN PCALLBACK_OBJECT  CallbackObject,
   IN PVOID  Argument1,
   IN PVOID  Argument2);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
+__declspec(noreturn)
 ExRaiseAccessViolation(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
+__declspec(noreturn)
 ExRaiseDatatypeMisalignment(
   VOID);
 
-NTOSAPI
+DECLSPEC_NORETURN
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
+__declspec(noreturn)
 ExRaiseStatus(
   IN NTSTATUS  Status);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 ExRegisterCallback(
   IN PCALLBACK_OBJECT  CallbackObject,
   IN PCALLBACK_FUNCTION  CallbackFunction,
   IN PVOID  CallbackContext);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ExReinitializeResourceLite(
   IN PERESOURCE  Resource);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExReleaseResourceForThreadLite(
   IN PERESOURCE  Resource,
   IN ERESOURCE_THREAD  ResourceThreadId);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKFASTAPI
+FASTCALL
 ExReleaseResourceLite(
   IN PERESOURCE  Resource);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExSetResourceOwnerPointer(
   IN PERESOURCE  Resource,
   IN PVOID  OwnerPointer);
 
-NTOSAPI
+NTKERNELAPI
 ULONG
-DDKAPI
+NTAPI
 ExSetTimerResolution(
   IN ULONG  DesiredTime,
   IN BOOLEAN  SetResolution);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExSystemTimeToLocalTime(
   IN PLARGE_INTEGER  SystemTime,
   OUT PLARGE_INTEGER  LocalTime);
 
-NTOSAPI
-BOOLEAN
-DDKAPI
-ExTryToAcquireResourceExclusiveLite(
-  IN PERESOURCE  Resource);
-
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ExUnregisterCallback(
   IN PVOID  CbRegistration);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ExUuidCreate(
   OUT UUID  *Uuid);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 ExVerifySuite(
   IN SUITE_TYPE  SuiteType);
 
@@ -7211,37 +7847,37 @@ ExVerifySuite(
 
 #endif
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ProbeForRead(
   IN CONST VOID  *Address,
-  IN ULONG  Length,
+  IN SIZE_T  Length,
   IN ULONG  Alignment);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ProbeForWrite(
   IN PVOID  Address,
-  IN ULONG  Length,
+  IN SIZE_T  Length,
   IN ULONG  Alignment);
 
 
 
 /** Configuration manager routines **/
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 CmRegisterCallback(
   IN PEX_CALLBACK_FUNCTION  Function,
   IN PVOID  Context,
   IN OUT PLARGE_INTEGER  Cookie);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 CmUnRegisterCallback(
   IN LARGE_INTEGER  Cookie);
 
@@ -7249,9 +7885,9 @@ CmUnRegisterCallback(
 
 /** Filesystem runtime library routines **/
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 FsRtlIsTotalDeviceFailure(
   IN NTSTATUS  Status);
 
@@ -7261,13 +7897,13 @@ FsRtlIsTotalDeviceFailure(
 
 NTHALAPI
 BOOLEAN
-DDKAPI
+NTAPI
 HalMakeBeep(
   IN ULONG Frequency);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKFASTAPI
+FASTCALL
 HalExamineMBR(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  SectorSize,
@@ -7291,9 +7927,12 @@ IoAllocateAdapterChannel(
     IN PVOID Context
 );
 
+/** Io access routines **/
+
+#if !defined(_M_AMD64)
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 READ_PORT_BUFFER_UCHAR(
   IN PUCHAR  Port,
   IN PUCHAR  Buffer,
@@ -7301,7 +7940,7 @@ READ_PORT_BUFFER_UCHAR(
 
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 READ_PORT_BUFFER_ULONG(
   IN PULONG  Port,
   IN PULONG  Buffer,
@@ -7309,7 +7948,7 @@ READ_PORT_BUFFER_ULONG(
 
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 READ_PORT_BUFFER_USHORT(
   IN PUSHORT  Port,
   IN PUSHORT  Buffer,
@@ -7317,67 +7956,67 @@ READ_PORT_BUFFER_USHORT(
 
 NTHALAPI
 UCHAR
-DDKAPI
+NTAPI
 READ_PORT_UCHAR(
   IN PUCHAR  Port);
 
 NTHALAPI
 ULONG
-DDKAPI
+NTAPI
 READ_PORT_ULONG(
   IN PULONG  Port);
 
 NTHALAPI
 USHORT
-DDKAPI
+NTAPI
 READ_PORT_USHORT(
   IN PUSHORT  Port);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 READ_REGISTER_BUFFER_UCHAR(
   IN PUCHAR  Register,
   IN PUCHAR  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 READ_REGISTER_BUFFER_ULONG(
   IN PULONG  Register,
   IN PULONG  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 READ_REGISTER_BUFFER_USHORT(
   IN PUSHORT  Register,
   IN PUSHORT  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTKERNELAPI
 UCHAR
-DDKAPI
+NTAPI
 READ_REGISTER_UCHAR(
   IN PUCHAR  Register);
 
-NTOSAPI
+NTKERNELAPI
 ULONG
-DDKAPI
+NTAPI
 READ_REGISTER_ULONG(
   IN PULONG  Register);
 
-NTOSAPI
+NTKERNELAPI
 USHORT
-DDKAPI
+NTAPI
 READ_REGISTER_USHORT(
   IN PUSHORT  Register);
 
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_PORT_BUFFER_UCHAR(
   IN PUCHAR  Port,
   IN PUCHAR  Buffer,
@@ -7385,7 +8024,7 @@ WRITE_PORT_BUFFER_UCHAR(
 
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_PORT_BUFFER_ULONG(
   IN PULONG  Port,
   IN PULONG  Buffer,
@@ -7393,7 +8032,7 @@ WRITE_PORT_BUFFER_ULONG(
 
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_PORT_BUFFER_USHORT(
   IN PUSHORT  Port,
   IN PUSHORT  Buffer,
@@ -7401,81 +8040,319 @@ WRITE_PORT_BUFFER_USHORT(
 
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_PORT_UCHAR(
   IN PUCHAR  Port,
   IN UCHAR  Value);
 
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_PORT_ULONG(
   IN PULONG  Port,
   IN ULONG  Value);
 
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_PORT_USHORT(
   IN PUSHORT  Port,
   IN USHORT  Value);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_REGISTER_BUFFER_UCHAR(
   IN PUCHAR  Register,
   IN PUCHAR  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_REGISTER_BUFFER_ULONG(
   IN PULONG  Register,
   IN PULONG  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_REGISTER_BUFFER_USHORT(
   IN PUSHORT  Register,
   IN PUSHORT  Buffer,
   IN ULONG  Count);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_REGISTER_UCHAR(
   IN PUCHAR  Register,
   IN UCHAR  Value);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_REGISTER_ULONG(
   IN PULONG  Register,
   IN ULONG  Value);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 WRITE_REGISTER_USHORT(
   IN PUSHORT  Register,
   IN USHORT  Value);
 
+#else
+
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_UCHAR(
+  IN PUCHAR  Port,
+  IN PUCHAR  Buffer,
+  IN ULONG  Count)
+{
+    __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_ULONG(
+  IN PULONG  Port,
+  IN PULONG  Buffer,
+  IN ULONG  Count)
+{
+    __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_USHORT(
+  IN PUSHORT  Port,
+  IN PUSHORT  Buffer,
+  IN ULONG  Count)
+{
+    __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+UCHAR
+READ_PORT_UCHAR(
+  IN PUCHAR  Port)
+{
+    return __inbyte((USHORT)(ULONG_PTR)Port);
+}
+
+FORCEINLINE
+ULONG
+READ_PORT_ULONG(
+  IN PULONG  Port)
+{
+    return __indword((USHORT)(ULONG_PTR)Port);
+}
+
+FORCEINLINE
+USHORT
+READ_PORT_USHORT(
+  IN PUSHORT  Port)
+{
+    return __inword((USHORT)(ULONG_PTR)Port);
+}
+
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR  Register,
+  IN PUCHAR  Buffer,
+  IN ULONG  Count)
+{
+    __movsb(Register, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_ULONG(
+  IN PULONG  Register,
+  IN PULONG  Buffer,
+  IN ULONG  Count)
+{
+    __movsd(Register, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_USHORT(
+  IN PUSHORT  Register,
+  IN PUSHORT  Buffer,
+  IN ULONG  Count)
+{
+    __movsw(Register, Buffer, Count);
+}
+
+FORCEINLINE
+UCHAR
+READ_REGISTER_UCHAR(
+  IN PUCHAR Register)
+{
+    return *Register;
+}
+
+FORCEINLINE
+ULONG
+READ_REGISTER_ULONG(
+  IN PULONG Register)
+{
+    return *Register;
+}
+
+FORCEINLINE
+USHORT
+READ_REGISTER_USHORT(
+  IN PUSHORT Register)
+{
+    return *Register;
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_UCHAR(
+  IN PUCHAR  Port,
+  IN PUCHAR  Buffer,
+  IN ULONG  Count)
+{
+    __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_ULONG(
+  IN PULONG  Port,
+  IN PULONG  Buffer,
+  IN ULONG  Count)
+{
+    __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_USHORT(
+  IN PUSHORT  Port,
+  IN PUSHORT  Buffer,
+  IN ULONG  Count)
+{
+    __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_UCHAR(
+  IN PUCHAR  Port,
+  IN UCHAR  Value)
+{
+    __outbyte((USHORT)(ULONG_PTR)Port, Value);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_ULONG(
+  IN PULONG  Port,
+  IN ULONG  Value)
+{
+    __outdword((USHORT)(ULONG_PTR)Port, Value);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_USHORT(
+  IN PUSHORT  Port,
+  IN USHORT  Value)
+{
+    __outword((USHORT)(ULONG_PTR)Port, Value);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_BUFFER_UCHAR(
+  IN PUCHAR  Register,
+  IN PUCHAR  Buffer,
+  IN ULONG  Count)
+{
+    LONG Synch;
+    __movsb(Register, Buffer, Count);
+    InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_BUFFER_ULONG(
+  IN PULONG  Register,
+  IN PULONG  Buffer,
+  IN ULONG  Count)
+{
+    LONG Synch;
+    __movsd(Register, Buffer, Count);
+    InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_BUFFER_USHORT(
+  IN PUSHORT  Register,
+  IN PUSHORT  Buffer,
+  IN ULONG  Count)
+{
+    LONG Synch;
+    __movsw(Register, Buffer, Count);
+    InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_UCHAR(
+  IN PUCHAR  Register,
+  IN UCHAR  Value)
+{
+    LONG Synch;
+    *Register = Value;
+    InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_ULONG(
+  IN PULONG  Register,
+  IN ULONG  Value)
+{
+    LONG Synch;
+    *Register = Value;
+    InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_USHORT(
+  IN PUSHORT  Register,
+  IN USHORT  Value)
+{
+       LONG Sync;
+       *Register = Value;
+       InterlockedOr(&Sync, 1);
+}
+
+#endif
+
 /** I/O manager routines **/
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoAcquireCancelSpinLock(
   OUT PKIRQL  Irql);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoAcquireRemoveLockEx(
   IN PIO_REMOVE_LOCK  RemoveLock,
   IN OPTIONAL PVOID  Tag  OPTIONAL,
@@ -7512,41 +8389,41 @@ IoAcquireRemoveLockEx(
     } \
 }
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoAllocateController(
   IN PCONTROLLER_OBJECT  ControllerObject,
   IN PDEVICE_OBJECT  DeviceObject,
   IN PDRIVER_CONTROL  ExecutionRoutine,
   IN PVOID  Context);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoAllocateDriverObjectExtension(
   IN PDRIVER_OBJECT  DriverObject,
   IN PVOID  ClientIdentificationAddress,
   IN ULONG  DriverObjectExtensionSize,
   OUT PVOID  *DriverObjectExtension);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 IoAllocateErrorLogEntry(
   IN PVOID  IoObject,
   IN UCHAR  EntrySize);
 
-NTOSAPI
+NTKERNELAPI
 PIRP
-DDKAPI
+NTAPI
 IoAllocateIrp(
   IN CCHAR  StackSize,
   IN BOOLEAN  ChargeQuota);
 
-NTOSAPI
+NTKERNELAPI
 PMDL
-DDKAPI
+NTAPI
 IoAllocateMdl(
   IN PVOID  VirtualAddress,
   IN ULONG  Length,
@@ -7554,9 +8431,9 @@ IoAllocateMdl(
   IN BOOLEAN  ChargeQuota,
   IN OUT PIRP  Irp  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 PIO_WORKITEM
-DDKAPI
+NTAPI
 IoAllocateWorkItem(
   IN PDEVICE_OBJECT  DeviceObject);
 
@@ -7568,24 +8445,24 @@ IoAllocateWorkItem(
 #define IoAssignArcName(_ArcName, _DeviceName) ( \
   IoCreateSymbolicLink((_ArcName), (_DeviceName)))
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoAttachDevice(
   IN PDEVICE_OBJECT  SourceDevice,
   IN PUNICODE_STRING  TargetDevice,
   OUT PDEVICE_OBJECT  *AttachedDevice);
 
-NTOSAPI
+NTKERNELAPI
 PDEVICE_OBJECT
-DDKAPI
+NTAPI
 IoAttachDeviceToDeviceStack(
   IN PDEVICE_OBJECT  SourceDevice,
   IN PDEVICE_OBJECT  TargetDevice);
 
-NTOSAPI
+NTKERNELAPI
 PIRP
-DDKAPI
+NTAPI
 IoBuildAsynchronousFsdRequest(
   IN ULONG  MajorFunction,
   IN PDEVICE_OBJECT  DeviceObject,
@@ -7594,9 +8471,9 @@ IoBuildAsynchronousFsdRequest(
   IN PLARGE_INTEGER  StartingOffset  OPTIONAL,
   IN PIO_STATUS_BLOCK  IoStatusBlock  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 PIRP
-DDKAPI
+NTAPI
 IoBuildDeviceIoControlRequest(
   IN ULONG  IoControlCode,
   IN PDEVICE_OBJECT  DeviceObject,
@@ -7608,18 +8485,18 @@ IoBuildDeviceIoControlRequest(
   IN PKEVENT  Event,
   OUT PIO_STATUS_BLOCK  IoStatusBlock);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoBuildPartialMdl(
   IN PMDL  SourceMdl,
   IN OUT PMDL  TargetMdl,
   IN PVOID  VirtualAddress,
   IN ULONG  Length);
 
-NTOSAPI
+NTKERNELAPI
 PIRP
-DDKAPI
+NTAPI
 IoBuildSynchronousFsdRequest(
   IN ULONG  MajorFunction,
   IN PDEVICE_OBJECT  DeviceObject,
@@ -7629,9 +8506,9 @@ IoBuildSynchronousFsdRequest(
   IN PKEVENT  Event,
   OUT PIO_STATUS_BLOCK  IoStatusBlock);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKFASTAPI
+FASTCALL
 IofCallDriver(
   IN PDEVICE_OBJECT  DeviceObject,
   IN OUT PIRP  Irp);
@@ -7644,22 +8521,22 @@ IofCallDriver(
  */
 #define IoCallDriver IofCallDriver
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoCancelFileOpen(
   IN PDEVICE_OBJECT  DeviceObject,
   IN PFILE_OBJECT  FileObject);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 IoCancelIrp(
   IN PIRP  Irp);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoCheckShareAccess(
   IN ACCESS_MASK  DesiredAccess,
   IN ULONG  DesiredShareAccess,
@@ -7667,9 +8544,9 @@ IoCheckShareAccess(
   IN OUT PSHARE_ACCESS  ShareAccess,
   IN BOOLEAN  Update);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKFASTAPI
+FASTCALL
 IofCompleteRequest(
   IN PIRP  Irp,
   IN CCHAR  PriorityBoost);
@@ -7682,9 +8559,9 @@ IofCompleteRequest(
  */
 #define IoCompleteRequest IofCompleteRequest
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoConnectInterrupt(
   OUT PKINTERRUPT  *InterruptObject,
   IN PKSERVICE_ROUTINE  ServiceRoutine,
@@ -7730,15 +8607,15 @@ IoConnectInterrupt(
   _NextIrpSp->Control = 0; \
 }
 
-NTOSAPI
+NTKERNELAPI
 PCONTROLLER_OBJECT
-DDKAPI
+NTAPI
 IoCreateController(
   IN ULONG  Size);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoCreateDevice(
   IN PDRIVER_OBJECT  DriverObject,
   IN ULONG  DeviceExtensionSize,
@@ -7748,16 +8625,16 @@ IoCreateDevice(
   IN BOOLEAN  Exclusive,
   OUT PDEVICE_OBJECT  *DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoCreateDisk(
   IN PDEVICE_OBJECT  DeviceObject,
   IN PCREATE_DISK  Disk);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoCreateFile(
   OUT PHANDLE FileHandle,
   IN ACCESS_MASK DesiredAccess,
@@ -7774,37 +8651,37 @@ IoCreateFile(
   IN PVOID ExtraCreateParameters OPTIONAL,
   IN ULONG Options);
 
-NTOSAPI
+NTKERNELAPI
 PKEVENT
-DDKAPI
+NTAPI
 IoCreateNotificationEvent(
   IN PUNICODE_STRING  EventName,
   OUT PHANDLE  EventHandle);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoCreateSymbolicLink(
   IN PUNICODE_STRING  SymbolicLinkName,
   IN PUNICODE_STRING  DeviceName);
 
-NTOSAPI
+NTKERNELAPI
 PKEVENT
-DDKAPI
+NTAPI
 IoCreateSynchronizationEvent(
   IN PUNICODE_STRING  EventName,
   OUT PHANDLE  EventHandle);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoCreateUnprotectedSymbolicLink(
   IN PUNICODE_STRING  SymbolicLinkName,
   IN PUNICODE_STRING  DeviceName);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoCsqInitialize(
   PIO_CSQ  Csq,
   IN PIO_CSQ_INSERT_IRP  CsqInsertIrp,
@@ -7814,43 +8691,43 @@ IoCsqInitialize(
   IN PIO_CSQ_RELEASE_LOCK  CsqReleaseLock,
   IN PIO_CSQ_COMPLETE_CANCELED_IRP  CsqCompleteCanceledIrp);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoCsqInsertIrp(
   IN  PIO_CSQ  Csq,
   IN  PIRP  Irp,
   IN  PIO_CSQ_IRP_CONTEXT  Context);
 
-NTOSAPI
+NTKERNELAPI
 PIRP
-DDKAPI
+NTAPI
 IoCsqRemoveIrp(
   IN  PIO_CSQ  Csq,
   IN  PIO_CSQ_IRP_CONTEXT  Context);
 
-NTOSAPI
+NTKERNELAPI
 PIRP
-DDKAPI
+NTAPI
 IoCsqRemoveNextIrp(
   IN PIO_CSQ  Csq,
   IN PVOID  PeekContext);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoDeleteController(
   IN PCONTROLLER_OBJECT  ControllerObject);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoDeleteDevice(
   IN PDEVICE_OBJECT  DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoDeleteSymbolicLink(
   IN PUNICODE_STRING  SymbolicLinkName);
 
@@ -7861,91 +8738,91 @@ IoDeleteSymbolicLink(
  */
 #define IoDeassignArcName IoDeleteSymbolicLink
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoDetachDevice(
   IN OUT PDEVICE_OBJECT  TargetDevice);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoDisconnectInterrupt(
   IN PKINTERRUPT  InterruptObject);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 IoForwardIrpSynchronously(
   IN PDEVICE_OBJECT  DeviceObject,
   IN PIRP  Irp);
 
 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoFreeController(
   IN PCONTROLLER_OBJECT  ControllerObject);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoFreeErrorLogEntry(
   PVOID  ElEntry);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoFreeIrp(
   IN PIRP  Irp);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoFreeMdl(
   IN PMDL  Mdl);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoFreeWorkItem(
   IN PIO_WORKITEM  pIOWorkItem);
 
-NTOSAPI
+NTKERNELAPI
 PDEVICE_OBJECT
-DDKAPI
+NTAPI
 IoGetAttachedDevice(
   IN PDEVICE_OBJECT  DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 PDEVICE_OBJECT
-DDKAPI
+NTAPI
 IoGetAttachedDeviceReference(
   IN PDEVICE_OBJECT  DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoGetBootDiskInformation(
   IN OUT PBOOTDISK_INFORMATION  BootDiskInformation,
   IN ULONG  Size);
 
-NTOSAPI
+NTKERNELAPI
 PCONFIGURATION_INFORMATION
-DDKAPI
+NTAPI
 IoGetConfigurationInformation(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 PEPROCESS
-DDKAPI
+NTAPI
 IoGetCurrentProcess(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoGetDeviceInterfaceAlias(
   IN PUNICODE_STRING  SymbolicLinkName,
   IN CONST GUID  *AliasInterfaceClassGuid,
@@ -7953,27 +8830,27 @@ IoGetDeviceInterfaceAlias(
 
 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoGetDeviceInterfaces(
   IN CONST GUID  *InterfaceClassGuid,
   IN PDEVICE_OBJECT  PhysicalDeviceObject  OPTIONAL,
   IN ULONG  Flags,
   OUT PWSTR  *SymbolicLinkList);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoGetDeviceObjectPointer(
   IN PUNICODE_STRING  ObjectName,
   IN ACCESS_MASK  DesiredAccess,
   OUT PFILE_OBJECT  *FileObject,
   OUT PDEVICE_OBJECT  *DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoGetDeviceProperty(
   IN PDEVICE_OBJECT  DeviceObject,
   IN DEVICE_REGISTRY_PROPERTY  DeviceProperty,
@@ -7981,30 +8858,30 @@ IoGetDeviceProperty(
   OUT PVOID  PropertyBuffer,
   OUT PULONG  ResultLength);
 
-NTOSAPI
+NTKERNELAPI
 PDEVICE_OBJECT
-DDKAPI
+NTAPI
 IoGetDeviceToVerify(
   IN PETHREAD  Thread);
 
-NTOSAPI
+NTKERNELAPI
 PDMA_ADAPTER
-DDKAPI
+NTAPI
 IoGetDmaAdapter(
   IN PDEVICE_OBJECT  PhysicalDeviceObject,
   IN PDEVICE_DESCRIPTION  DeviceDescription,
   IN OUT PULONG  NumberOfMapRegisters);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 IoGetDriverObjectExtension(
   IN PDRIVER_OBJECT  DriverObject,
   IN PVOID  ClientIdentificationAddress);
 
-NTOSAPI
+NTKERNELAPI
 PGENERIC_MAPPING
-DDKAPI
+NTAPI
 IoGetFileObjectGenericMapping(
   VOID);
 
@@ -8016,34 +8893,42 @@ IoGetFileObjectGenericMapping(
 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
   (((_ControlCode) >> 2) & 0x00000FFF)
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 IoGetInitialStack(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 PDEVICE_OBJECT
-DDKAPI
+NTAPI
 IoGetRelatedDeviceObject(
   IN PFILE_OBJECT  FileObject);
 
-NTOSAPI
-ULONG
-DDKAPI
-IoGetRemainingStackSize(
-  VOID);
-
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoGetStackLimits(
   OUT PULONG_PTR  LowLimit,
   OUT PULONG_PTR  HighLimit);
 
-NTOSAPI
+FORCEINLINE
+ULONG_PTR
+IoGetRemainingStackSize(
+  VOID
+)
+{
+    ULONG_PTR End, Begin;
+    ULONG_PTR Result;
+
+    IoGetStackLimits(&Begin, &End);
+    Result = (ULONG_PTR)(&End) - Begin;
+    return Result;
+}
+
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeInitializeDpc(
   IN PRKDPC  Dpc,
   IN PKDEFERRED_ROUTINE  DeferredRoutine,
@@ -8061,17 +8946,17 @@ KeInitializeDpc(
     (PKDEFERRED_ROUTINE) (_DpcRoutine), \
     _DeviceObject)
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoInitializeIrp(
   IN OUT PIRP  Irp,
   IN USHORT  PacketSize,
   IN CCHAR  StackSize);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoInitializeRemoveLockEx(
   IN  PIO_REMOVE_LOCK Lock,
   IN  ULONG   AllocateTag,
@@ -8091,30 +8976,30 @@ IoInitializeRemoveLockEx(
   IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
     HighWatermark, sizeof(IO_REMOVE_LOCK))
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoInitializeTimer(
   IN PDEVICE_OBJECT  DeviceObject,
   IN PIO_TIMER_ROUTINE  TimerRoutine,
   IN PVOID  Context);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoInvalidateDeviceRelations(
   IN PDEVICE_OBJECT  DeviceObject,
   IN DEVICE_RELATION_TYPE  Type);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoInvalidateDeviceState(
   IN PDEVICE_OBJECT  PhysicalDeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 IoIs32bitProcess(
   IN PIRP  Irp  OPTIONAL);
 
@@ -8124,7 +9009,7 @@ IoIs32bitProcess(
  *   IN NTSTATUS  Status);
  */
 #define IoIsErrorUserInduced(Status) \
-       ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
+   ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
    ((Status) == STATUS_IO_TIMEOUT) || \
    ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
    ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
@@ -8132,16 +9017,16 @@ IoIs32bitProcess(
    ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
    ((Status) == STATUS_WRONG_VOLUME)))
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 IoIsWdmVersionAvailable(
   IN UCHAR  MajorVersion,
   IN UCHAR  MinorVersion);
 
-NTOSAPI
+NTKERNELAPI
 PIRP
-DDKAPI
+NTAPI
 IoMakeAssociatedIrp(
   IN PIRP  Irp,
   IN CCHAR  StackSize);
@@ -8154,9 +9039,9 @@ IoMakeAssociatedIrp(
 #define IoMarkIrpPending(_Irp) \
   (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoOpenDeviceInterfaceRegistryKey(
   IN PUNICODE_STRING  SymbolicLinkName,
   IN ACCESS_MASK  DesiredAccess,
@@ -8166,18 +9051,18 @@ IoOpenDeviceInterfaceRegistryKey(
 #define PLUGPLAY_REGKEY_DRIVER                            2
 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE                 4
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoOpenDeviceRegistryKey(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  DevInstKeyType,
   IN ACCESS_MASK  DesiredAccess,
   OUT PHANDLE  DevInstRegKey);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoQueryDeviceDescription(
   IN PINTERFACE_TYPE  BusType  OPTIONAL,
   IN PULONG  BusNumber  OPTIONAL,
@@ -8188,82 +9073,82 @@ IoQueryDeviceDescription(
   IN PIO_QUERY_DEVICE_ROUTINE  CalloutRoutine,
   IN PVOID  Context);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoQueueWorkItem(
   IN PIO_WORKITEM  pIOWorkItem,
   IN PIO_WORKITEM_ROUTINE  Routine,
   IN WORK_QUEUE_TYPE  QueueType,
   IN PVOID  Context);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoRaiseHardError(
   IN PIRP  Irp,
   IN PVPB  Vpb  OPTIONAL,
   IN PDEVICE_OBJECT  RealDeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 IoRaiseInformationalHardError(
   IN NTSTATUS  ErrorStatus,
   IN PUNICODE_STRING  String  OPTIONAL,
   IN PKTHREAD  Thread  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoReadDiskSignature(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  BytesPerSector,
   OUT PDISK_SIGNATURE  Signature);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoReadPartitionTableEx(
   IN PDEVICE_OBJECT  DeviceObject,
   IN struct _DRIVE_LAYOUT_INFORMATION_EX  **PartitionBuffer);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoRegisterBootDriverReinitialization(
   IN PDRIVER_OBJECT  DriverObject,
   IN PDRIVER_REINITIALIZE  DriverReinitializationRoutine,
   IN PVOID  Context);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoRegisterBootDriverReinitialization(
   IN PDRIVER_OBJECT  DriverObject,
   IN PDRIVER_REINITIALIZE  DriverReinitializationRoutine,
   IN PVOID  Context);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoRegisterDeviceInterface(
   IN PDEVICE_OBJECT  PhysicalDeviceObject,
   IN CONST GUID  *InterfaceClassGuid,
   IN PUNICODE_STRING  ReferenceString  OPTIONAL,
   OUT PUNICODE_STRING  SymbolicLinkName);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoRegisterDriverReinitialization(
   IN PDRIVER_OBJECT  DriverObject,
   IN PDRIVER_REINITIALIZE  DriverReinitializationRoutine,
   IN PVOID  Context);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoRegisterPlugPlayNotification(
   IN IO_NOTIFICATION_EVENT_CATEGORY  EventCategory,
   IN ULONG  EventCategoryFlags,
@@ -8273,29 +9158,29 @@ IoRegisterPlugPlayNotification(
   IN PVOID  Context,
   OUT PVOID  *NotificationEntry);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoRegisterShutdownNotification(
   IN PDEVICE_OBJECT  DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoReleaseCancelSpinLock(
   IN KIRQL  Irql);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoReleaseRemoveLockAndWaitEx(
   IN PIO_REMOVE_LOCK  RemoveLock,
   IN PVOID  Tag,
   IN ULONG  RemlockSize);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoReleaseRemoveLockEx(
   IN PIO_REMOVE_LOCK  RemoveLock,
   IN PVOID  Tag,
@@ -8321,16 +9206,16 @@ IoReleaseRemoveLockEx(
                                    _Tag) \
   IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoRemoveShareAccess(
   IN PFILE_OBJECT  FileObject,
   IN OUT PSHARE_ACCESS  ShareAccess);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoReportDetectedDevice(
   IN PDRIVER_OBJECT  DriverObject,
   IN INTERFACE_TYPE  LegacyBusType,
@@ -8341,9 +9226,9 @@ IoReportDetectedDevice(
   IN BOOLEAN  ResourceAssigned,
   IN OUT PDEVICE_OBJECT  *DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoReportResourceForDetection(
   IN PDRIVER_OBJECT  DriverObject,
   IN PCM_RESOURCE_LIST  DriverList  OPTIONAL,
@@ -8353,9 +9238,9 @@ IoReportResourceForDetection(
   IN ULONG  DeviceListSize  OPTIONAL,
   OUT PBOOLEAN  ConflictDetected);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoReportResourceUsage(
   IN PUNICODE_STRING  DriverClassName  OPTIONAL,
   IN PDRIVER_OBJECT  DriverObject,
@@ -8367,25 +9252,25 @@ IoReportResourceUsage(
   IN BOOLEAN  OverrideConflict,
   OUT PBOOLEAN  ConflictDetected);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoReportTargetDeviceChange(
   IN PDEVICE_OBJECT  PhysicalDeviceObject,
   IN PVOID  NotificationStructure);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoReportTargetDeviceChangeAsynchronous(
   IN PDEVICE_OBJECT  PhysicalDeviceObject,
   IN PVOID  NotificationStructure,
   IN PDEVICE_CHANGE_COMPLETE_CALLBACK  Callback  OPTIONAL,
   IN PVOID  Context  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoRequestDeviceEject(
   IN PDEVICE_OBJECT  PhysicalDeviceObject);
 
@@ -8399,9 +9284,9 @@ IoRequestDeviceEject(
 #define IoRequestDpc(DeviceObject, Irp, Context)( \
   KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoReuseIrp(
   IN OUT PIRP  Irp,
   IN NTSTATUS  Status);
@@ -8412,12 +9297,11 @@ IoReuseIrp(
  *   IN PIRP  Irp,
  *   IN PDRIVER_CANCEL  CancelRoutine)
  */
-#define IoSetCancelRoutine(_Irp, \
-                           _CancelRoutine) \
-  ((PDRIVER_CANCEL) InterlockedExchangePointer( \
-    (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
-
-/*
+#define IoSetCancelRoutine( Irp, NewCancelRoutine ) (  \
+ (PDRIVER_CANCEL)InterlockedExchange( (PLONG)&(Irp)->CancelRoutine, (LONG)(NewCancelRoutine) ) )
+    
+    
+    /*
  * VOID
  * IoSetCompletionRoutine(
  *   IN PIRP  Irp,
@@ -8435,20 +9319,20 @@ IoReuseIrp(
                                _InvokeOnCancel) \
 { \
   PIO_STACK_LOCATION _IrpSp; \
-  ASSERT(_InvokeOnSuccess || _InvokeOnError || _InvokeOnCancel ? \
-    _CompletionRoutine != NULL : TRUE); \
+  ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \
+    (_CompletionRoutine) != NULL : TRUE); \
   _IrpSp = IoGetNextIrpStackLocation(_Irp); \
   _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
-       _IrpSp->Context = (_Context); \
+  _IrpSp->Context = (_Context); \
   _IrpSp->Control = 0; \
   if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
   if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
   if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
 }
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoSetCompletionRoutineEx(
   IN PDEVICE_OBJECT  DeviceObject,
   IN PIRP  Irp,
@@ -8458,16 +9342,16 @@ IoSetCompletionRoutineEx(
   IN BOOLEAN  InvokeOnError,
   IN BOOLEAN  InvokeOnCancel);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoSetDeviceInterfaceState(
   IN PUNICODE_STRING  SymbolicLinkName,
   IN BOOLEAN  Enable);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoSetHardErrorOrVerifyDevice(
   IN PIRP  Irp,
   IN PDEVICE_OBJECT  DeviceObject);
@@ -8483,40 +9367,40 @@ IoSetHardErrorOrVerifyDevice(
   (_Irp)->Tail.Overlay.CurrentStackLocation--; \
 }
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoSetPartitionInformationEx(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  PartitionNumber,
   IN struct _SET_PARTITION_INFORMATION_EX  *PartitionInfo);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoSetShareAccess(
   IN ACCESS_MASK  DesiredAccess,
   IN ULONG  DesiredShareAccess,
   IN OUT PFILE_OBJECT  FileObject,
   OUT PSHARE_ACCESS  ShareAccess);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoSetStartIoAttributes(
   IN PDEVICE_OBJECT  DeviceObject,
   IN BOOLEAN  DeferredStartIo,
   IN BOOLEAN  NonCancelable);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoSetSystemPartition(
   IN PUNICODE_STRING  VolumeNameString);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 IoSetThreadHardErrorMode(
   IN BOOLEAN  EnableHardErrors);
 
@@ -8539,100 +9423,100 @@ IoSetThreadHardErrorMode(
   (_Irp)->Tail.Overlay.CurrentStackLocation++; \
 }
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoStartNextPacket(
   IN PDEVICE_OBJECT  DeviceObject,
   IN BOOLEAN  Cancelable);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoStartNextPacketByKey(
   IN PDEVICE_OBJECT  DeviceObject,
   IN BOOLEAN  Cancelable,
   IN ULONG  Key);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoStartPacket(
   IN PDEVICE_OBJECT  DeviceObject,
   IN PIRP  Irp,
   IN PULONG  Key  OPTIONAL,
   IN PDRIVER_CANCEL  CancelFunction  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoStartTimer(
   IN PDEVICE_OBJECT  DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoStopTimer(
   IN PDEVICE_OBJECT  DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoUnregisterPlugPlayNotification(
   IN PVOID  NotificationEntry);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoUnregisterShutdownNotification(
   IN PDEVICE_OBJECT  DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoUpdateShareAccess(
   IN PFILE_OBJECT  FileObject,
   IN OUT PSHARE_ACCESS  ShareAccess);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoVerifyPartitionTable(
   IN PDEVICE_OBJECT  DeviceObject,
   IN BOOLEAN  FixErrors);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoVolumeDeviceToDosName(
   IN  PVOID  VolumeDeviceObject,
   OUT PUNICODE_STRING  DosName);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIAllocateInstanceIds(
   IN GUID  *Guid,
   IN ULONG  InstanceCount,
   OUT ULONG  *FirstInstanceId);
 
-NTOSAPI
+NTKERNELAPI
 ULONG
-DDKAPI
+NTAPI
 IoWMIDeviceObjectToProviderId(
   IN PDEVICE_OBJECT  DeviceObject);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIDeviceObjectToInstanceName(
   IN PVOID  DataBlockObject,
   IN PDEVICE_OBJECT  DeviceObject,
   OUT PUNICODE_STRING  InstanceName);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIExecuteMethod(
   IN PVOID  DataBlockObject,
   IN PUNICODE_STRING  InstanceName,
@@ -8641,51 +9525,51 @@ IoWMIExecuteMethod(
   IN OUT PULONG  OutBufferSize,
   IN OUT  PUCHAR  InOutBuffer);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIHandleToInstanceName(
   IN PVOID  DataBlockObject,
   IN HANDLE  FileHandle,
   OUT PUNICODE_STRING  InstanceName);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIOpenBlock(
   IN GUID  *DataBlockGuid,
   IN ULONG  DesiredAccess,
   OUT PVOID  *DataBlockObject);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIQueryAllData(
   IN PVOID  DataBlockObject,
   IN OUT ULONG  *InOutBufferSize,
   OUT PVOID  OutBuffer);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIQueryAllDataMultiple(
   IN PVOID  *DataBlockObjectList,
   IN ULONG  ObjectCount,
   IN OUT ULONG  *InOutBufferSize,
   OUT PVOID  OutBuffer);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIQuerySingleInstance(
   IN PVOID  DataBlockObject,
   IN PUNICODE_STRING  InstanceName,
   IN OUT ULONG  *InOutBufferSize,
   OUT PVOID OutBuffer);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIQuerySingleInstanceMultiple(
   IN PVOID  *DataBlockObjectList,
   IN PUNICODE_STRING  InstanceNames,
@@ -8693,24 +9577,24 @@ IoWMIQuerySingleInstanceMultiple(
   IN OUT ULONG  *InOutBufferSize,
   OUT PVOID  OutBuffer);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIRegistrationControl(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  Action);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMISetNotificationCallback(
   IN PVOID  Object,
   IN WMI_NOTIFICATION_CALLBACK  Callback,
   IN PVOID  Context);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMISetSingleInstance(
   IN PVOID  DataBlockObject,
   IN PUNICODE_STRING  InstanceName,
@@ -8718,9 +9602,9 @@ IoWMISetSingleInstance(
   IN ULONG  ValueBufferSize,
   IN PVOID  ValueBuffer);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMISetSingleItem(
   IN PVOID  DataBlockObject,
   IN PUNICODE_STRING  InstanceName,
@@ -8729,30 +9613,30 @@ IoWMISetSingleItem(
   IN ULONG  ValueBufferSize,
   IN PVOID  ValueBuffer);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMISuggestInstanceName(
   IN PDEVICE_OBJECT  PhysicalDeviceObject OPTIONAL,
   IN PUNICODE_STRING  SymbolicLinkName OPTIONAL,
   IN BOOLEAN  CombineNames,
   OUT PUNICODE_STRING  SuggestedInstanceName);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWMIWriteEvent(
   IN PVOID  WnodeEventItem);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 IoWriteErrorLogEntry(
   IN PVOID  ElEntry);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 IoWritePartitionTableEx(
   IN PDEVICE_OBJECT  DeviceObject,
   IN struct _DRIVE_LAYOUT_INFORMATION_EX  *PartitionBuffer);
@@ -8761,41 +9645,64 @@ IoWritePartitionTableEx(
 
 /** Kernel routines **/
 
+#if defined (_M_AMD64)
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireInStackQueuedSpinLock(
+  IN PKSPIN_LOCK  SpinLock,
+  IN PKLOCK_QUEUE_HANDLE  LockHandle);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLock(
+  IN PKLOCK_QUEUE_HANDLE  LockHandle);
+#else
 NTHALAPI
 VOID
-DDKFASTAPI
+FASTCALL
 KeAcquireInStackQueuedSpinLock(
   IN PKSPIN_LOCK  SpinLock,
   IN PKLOCK_QUEUE_HANDLE  LockHandle);
 
-NTOSAPI
+NTHALAPI
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLock(
+  IN PKLOCK_QUEUE_HANDLE  LockHandle);
+#endif
+
+NTKERNELAPI
 VOID
-DDKFASTAPI
+FASTCALL
 KeAcquireInStackQueuedSpinLockAtDpcLevel(
   IN PKSPIN_LOCK  SpinLock,
   IN PKLOCK_QUEUE_HANDLE  LockHandle);
 
-NTOSAPI
+NTKERNELAPI
 KIRQL
-DDKAPI
+NTAPI
 KeAcquireInterruptSpinLock(
   IN PKINTERRUPT  Interrupt);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeAreApcsDisabled(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
+__declspec(noreturn)
 KeBugCheck(
   IN ULONG  BugCheckCode);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
+__declspec(noreturn)
 KeBugCheckEx(
   IN ULONG  BugCheckCode,
   IN ULONG_PTR  BugCheckParameter1,
@@ -8803,35 +9710,35 @@ KeBugCheckEx(
   IN ULONG_PTR  BugCheckParameter3,
   IN ULONG_PTR  BugCheckParameter4);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeCancelTimer(
   IN PKTIMER  Timer);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeClearEvent(
   IN PRKEVENT  Event);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 KeDelayExecutionThread(
   IN KPROCESSOR_MODE  WaitMode,
   IN BOOLEAN  Alertable,
   IN PLARGE_INTEGER  Interval);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeDeregisterBugCheckCallback(
   IN PKBUGCHECK_CALLBACK_RECORD  CallbackRecord);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeEnterCriticalRegion(
   VOID);
 
@@ -8844,95 +9751,82 @@ KeEnterCriticalRegion(
  */
 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
 
+#define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
+#define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
+#define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
+#define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
+
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 KeFlushWriteBuffer(VOID);
 
-NTOSAPI
-PRKTHREAD
-DDKAPI
-KeGetCurrentThread(
-  VOID);
-
-NTOSAPI
-KPROCESSOR_MODE
-DDKAPI
-KeGetPreviousMode(
-  VOID);
-
-NTOSAPI
+NTKERNELAPI
 ULONG
-DDKAPI
+NTAPI
 KeGetRecommendedSharedDataAlignment(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeInitializeDeviceQueue(
   IN PKDEVICE_QUEUE  DeviceQueue);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeInitializeMutex(
   IN PRKMUTEX  Mutex,
   IN ULONG  Level);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeInitializeSemaphore(
   IN PRKSEMAPHORE  Semaphore,
   IN LONG  Count,
   IN LONG  Limit);
 
-NTOSAPI
-VOID
-DDKAPI
-KeInitializeSpinLock(
-  IN PKSPIN_LOCK  SpinLock);
-
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeInitializeTimer(
   IN PKTIMER  Timer);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeInitializeTimerEx(
   IN PKTIMER  Timer,
   IN TIMER_TYPE  Type);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeInsertByKeyDeviceQueue(
   IN PKDEVICE_QUEUE  DeviceQueue,
   IN PKDEVICE_QUEUE_ENTRY  DeviceQueueEntry,
   IN ULONG  SortKey);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeInsertDeviceQueue(
   IN PKDEVICE_QUEUE  DeviceQueue,
   IN PKDEVICE_QUEUE_ENTRY  DeviceQueueEntry);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeInsertQueueDpc(
   IN PRKDPC  Dpc,
   IN PVOID  SystemArgument1,
   IN PVOID  SystemArgument2);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeLeaveCriticalRegion(
   VOID);
 
@@ -8951,89 +9845,96 @@ KeMemoryBarrier(
 #endif
 }
 
-#elif defined(_PPC_)
-
-static __inline
-VOID
-KeMemoryBarrier(
-  VOID)
-{
-}
-
 #endif
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKAPI
+NTAPI
 KePulseEvent(
   IN PRKEVENT  Event,
   IN KPRIORITY  Increment,
   IN BOOLEAN  Wait);
 
-NTOSAPI
-ULONGLONG
-DDKAPI
-KeQueryInterruptTime(
-  VOID);
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeQueryActiveProcessors(
+    VOID
+);
 
 NTHALAPI
 LARGE_INTEGER
-DDKAPI
+NTAPI
 KeQueryPerformanceCounter(
   OUT PLARGE_INTEGER  PerformanceFrequency  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 KPRIORITY
-DDKAPI
+NTAPI
 KeQueryPriorityThread(
   IN PRKTHREAD  Thread);
 
-NTOSAPI
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryRuntimeThread(
+  IN PKTHREAD Thread,
+  OUT PULONG UserTime);
+
+#if !defined(_M_AMD64)
+NTKERNELAPI
+ULONGLONG
+NTAPI
+KeQueryInterruptTime(
+  VOID);
+
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeQuerySystemTime(
   OUT PLARGE_INTEGER  CurrentTime);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeQueryTickCount(
   OUT PLARGE_INTEGER  TickCount);
+#endif
 
-NTOSAPI
+NTKERNELAPI
 ULONG
-DDKAPI
+NTAPI
 KeQueryTimeIncrement(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKAPI
+NTAPI
 KeReadStateEvent(
   IN PRKEVENT  Event);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKAPI
+NTAPI
 KeReadStateMutex(
   IN PRKMUTEX  Mutex);
 
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKAPI
+NTAPI
 KeReadStateSemaphore(
   IN PRKSEMAPHORE  Semaphore);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeReadStateTimer(
   IN PKTIMER  Timer);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeRegisterBugCheckCallback(
   IN PKBUGCHECK_CALLBACK_RECORD  CallbackRecord,
   IN PKBUGCHECK_CALLBACK_ROUTINE  CallbackRoutine,
@@ -9041,172 +9942,166 @@ KeRegisterBugCheckCallback(
   IN ULONG  Length,
   IN PUCHAR  Component);
 
-NTHALAPI
-VOID
-DDKFASTAPI
-KeReleaseInStackQueuedSpinLock(
-  IN PKLOCK_QUEUE_HANDLE  LockHandle);
-
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKFASTAPI
+FASTCALL
 KeReleaseInStackQueuedSpinLockFromDpcLevel(
   IN PKLOCK_QUEUE_HANDLE  LockHandle);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeReleaseInterruptSpinLock(
   IN PKINTERRUPT  Interrupt,
   IN KIRQL  OldIrql);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKAPI
+NTAPI
 KeReleaseMutex(
   IN PRKMUTEX  Mutex,
   IN BOOLEAN  Wait);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKAPI
+NTAPI
 KeReleaseSemaphore(
   IN PRKSEMAPHORE  Semaphore,
   IN KPRIORITY  Increment,
   IN LONG  Adjustment,
   IN BOOLEAN  Wait);
 
-NTOSAPI
+NTKERNELAPI
 PKDEVICE_QUEUE_ENTRY
-DDKAPI
+NTAPI
 KeRemoveByKeyDeviceQueue(
   IN PKDEVICE_QUEUE  DeviceQueue,
   IN ULONG  SortKey);
 
-NTOSAPI
+NTKERNELAPI
 PKDEVICE_QUEUE_ENTRY
-DDKAPI
+NTAPI
 KeRemoveDeviceQueue(
   IN PKDEVICE_QUEUE  DeviceQueue);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeRemoveEntryDeviceQueue(
   IN PKDEVICE_QUEUE  DeviceQueue,
   IN PKDEVICE_QUEUE_ENTRY  DeviceQueueEntry);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeRemoveQueueDpc(
   IN PRKDPC  Dpc);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKAPI
+NTAPI
 KeResetEvent(
   IN PRKEVENT  Event);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 KeRestoreFloatingPointState(
   IN PKFLOATING_SAVE  FloatSave);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeRevertToUserAffinityThread(VOID);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 KeSaveFloatingPointState(
   OUT PKFLOATING_SAVE  FloatSave);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKAPI
+NTAPI
 KeSetBasePriorityThread(
   IN PRKTHREAD  Thread,
   IN LONG  Increment);
 
-NTOSAPI
+NTKERNELAPI
 LONG
-DDKAPI
+NTAPI
 KeSetEvent(
   IN PRKEVENT  Event,
   IN KPRIORITY  Increment,
   IN BOOLEAN  Wait);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeSetImportanceDpc(
   IN PRKDPC  Dpc,
   IN KDPC_IMPORTANCE  Importance);
 
-NTOSAPI
+NTKERNELAPI
 KPRIORITY
-DDKAPI
+NTAPI
 KeSetPriorityThread(
   IN PKTHREAD  Thread,
   IN KPRIORITY  Priority);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeSetSystemAffinityThread(
     IN KAFFINITY Affinity);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeSetTargetProcessorDpc(
   IN PRKDPC  Dpc,
   IN CCHAR  Number);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeSetTimer(
   IN PKTIMER  Timer,
   IN LARGE_INTEGER  DueTime,
   IN PKDPC  Dpc  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeSetTimerEx(
   IN PKTIMER  Timer,
   IN LARGE_INTEGER  DueTime,
   IN LONG  Period  OPTIONAL,
   IN PKDPC  Dpc  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKFASTAPI
+FASTCALL
 KeSetTimeUpdateNotifyRoutine(
   IN PTIME_UPDATE_NOTIFY_ROUTINE  NotifyRoutine);
 
 NTHALAPI
 VOID
-DDKAPI
+NTAPI
 KeStallExecutionProcessor(
   IN ULONG  MicroSeconds);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 KeSynchronizeExecution(
   IN PKINTERRUPT    Interrupt,
   IN PKSYNCHRONIZE_ROUTINE  SynchronizeRoutine,
   IN PVOID  SynchronizeContext);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 KeWaitForMultipleObjects(
   IN ULONG  Count,
   IN PVOID  Object[],
@@ -9217,9 +10112,9 @@ KeWaitForMultipleObjects(
   IN PLARGE_INTEGER  Timeout  OPTIONAL,
   IN PKWAIT_BLOCK  WaitBlockArray  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 KeWaitForMutexObject(
   IN PRKMUTEX  Mutex,
   IN KWAIT_REASON  WaitReason,
@@ -9227,9 +10122,9 @@ KeWaitForMutexObject(
   IN BOOLEAN  Alertable,
   IN PLARGE_INTEGER  Timeout  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 KeWaitForSingleObject(
   IN PVOID  Object,
   IN KWAIT_REASON  WaitReason,
@@ -9280,7 +10175,51 @@ KeRaiseIrqlToSynchLevel(
 #define KeLowerIrql(a) KfLowerIrql(a)
 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
 
-#elif defined(_PPC_)
+#elif defined(_M_AMD64)
+
+FORCEINLINE
+KIRQL
+KeGetCurrentIrql(VOID)
+{
+    return (KIRQL)__readcr8();
+}
+
+FORCEINLINE
+VOID
+KeLowerIrql(IN KIRQL NewIrql)
+{
+    ASSERT(KeGetCurrentIrql() >= NewIrql);
+    __writecr8(NewIrql);
+}
+
+FORCEINLINE
+KIRQL
+KfRaiseIrql(IN KIRQL NewIrql)
+{
+    KIRQL OldIrql;
+
+    OldIrql = __readcr8();
+    ASSERT(OldIrql <= NewIrql);
+    __writecr8(NewIrql);
+    return OldIrql;
+}
+#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+
+FORCEINLINE
+KIRQL
+KeRaiseIrqlToDpcLevel(VOID)
+{
+    return KfRaiseIrql(DISPATCH_LEVEL);
+}
+
+FORCEINLINE
+KIRQL
+KeRaiseIrqlToSynchLevel(VOID)
+{
+    return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
+}
+
+#elif defined(__PowerPC__)
 
 NTHALAPI
 VOID
@@ -9290,66 +10229,106 @@ KfLowerIrql(
 
 NTHALAPI
 KIRQL
-FASTCALL
+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)
+
+#elif defined(_M_MIPS)
+
+#define KeLowerIrql(a) KfLowerIrql(a)
+#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+
+NTKERNELAPI
+VOID
+NTAPI
+KfLowerIrql(
+  IN KIRQL  NewIrql);
+
+NTKERNELAPI
+KIRQL
+NTAPI
 KfRaiseIrql(
   IN KIRQL  NewIrql);
 
-NTHALAPI
+NTKERNELAPI
 KIRQL
-DDKAPI
+NTAPI
 KeRaiseIrqlToDpcLevel(
   VOID);
-  
-NTHALAPI
+
+NTKERNELAPI
 KIRQL
 DDKAPI
 KeRaiseIrqlToSynchLevel(
     VOID);
 
-#define KeLowerIrql(a) KfLowerIrql(a)
-#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+#elif defined(_M_ARM)
+
+#include <armddk.h>
 
 #else
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 KeLowerIrql(
   IN KIRQL  NewIrql);
 
-NTOSAPI
-KIRQL
-DDKAPI
+NTKERNELAPI
+VOID
+NTAPI
 KeRaiseIrql(
-  IN KIRQL  NewIrql);
+  IN KIRQL  NewIrql,
+  OUT PKIRQL  OldIrql);
 
-NTOSAPI
+NTKERNELAPI
 KIRQL
-DDKAPI
+NTAPI
 KeRaiseIrqlToDpcLevel(
   VOID);
 
+NTKERNELAPI
+KIRQL
+DDKAPI
+KeRaiseIrqlToSynchLevel(
+    VOID);
+
 #endif
 
 /** Memory manager routines **/
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmAdvanceMdl(
   IN PMDL  Mdl,
   IN ULONG  NumberOfBytes);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmAllocateContiguousMemory(
   IN ULONG  NumberOfBytes,
   IN PHYSICAL_ADDRESS  HighestAcceptableAddress);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmAllocateContiguousMemorySpecifyCache(
   IN SIZE_T  NumberOfBytes,
   IN PHYSICAL_ADDRESS  LowestAcceptableAddress,
@@ -9357,90 +10336,77 @@ MmAllocateContiguousMemorySpecifyCache(
   IN PHYSICAL_ADDRESS  BoundaryAddressMultiple  OPTIONAL,
   IN MEMORY_CACHING_TYPE  CacheType);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmAllocateMappingAddress(
   IN SIZE_T  NumberOfBytes,
   IN ULONG  PoolTag);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmAllocateNonCachedMemory(
   IN ULONG  NumberOfBytes);
 
-NTOSAPI
+NTKERNELAPI
 PMDL
-DDKAPI
+NTAPI
 MmAllocatePagesForMdl(
   IN PHYSICAL_ADDRESS  LowAddress,
   IN PHYSICAL_ADDRESS  HighAddress,
   IN PHYSICAL_ADDRESS  SkipBytes,
   IN SIZE_T  TotalBytes);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmBuildMdlForNonPagedPool(
   IN OUT PMDL  MemoryDescriptorList);
 
-NTOSAPI
-NTSTATUS
-DDKAPI
-MmCreateSection(
-  OUT PVOID *SectionObject,
-  IN ACCESS_MASK  DesiredAccess,
-  IN POBJECT_ATTRIBUTES  ObjectAttributes  OPTIONAL,
-  IN PLARGE_INTEGER  MaximumSize,
-  IN ULONG  SectionPageProtection,
-  IN ULONG  AllocationAttributes,
-  IN HANDLE  FileHandle  OPTIONAL,
-  IN PFILE_OBJECT  File  OPTIONAL);
-
 typedef enum _MMFLUSH_TYPE {
   MmFlushForDelete,
   MmFlushForWrite
 } MMFLUSH_TYPE;
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 MmFlushImageSection(
   IN PSECTION_OBJECT_POINTERS  SectionObjectPointer,
   IN MMFLUSH_TYPE  FlushType);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmFreeContiguousMemory(
   IN PVOID  BaseAddress);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmFreeContiguousMemorySpecifyCache(
   IN PVOID  BaseAddress,
   IN SIZE_T  NumberOfBytes,
   IN MEMORY_CACHING_TYPE  CacheType);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmFreeMappingAddress(
   IN PVOID  BaseAddress,
   IN ULONG  PoolTag);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmFreeNonCachedMemory(
   IN PVOID  BaseAddress,
   IN SIZE_T  NumberOfBytes);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmFreePagesFromMdl(
   IN PMDL  MemoryDescriptorList);
 
@@ -9476,27 +10442,27 @@ MmFreePagesFromMdl(
 #define MmGetMdlVirtualAddress(_Mdl) \
   ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
 
-NTOSAPI
+NTKERNELAPI
 PHYSICAL_ADDRESS
-DDKAPI
+NTAPI
 MmGetPhysicalAddress(
   IN PVOID  BaseAddress);
 
-NTOSAPI
+NTKERNELAPI
 PPHYSICAL_MEMORY_RANGE
-DDKAPI
+NTAPI
 MmGetPhysicalMemoryRanges(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmGetVirtualForPhysical(
   IN PHYSICAL_ADDRESS  PhysicalAddress);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmMapLockedPagesSpecifyCache(
   IN PMDL  MemoryDescriptorList,
   IN KPROCESSOR_MODE  AccessMode,
@@ -9505,57 +10471,57 @@ MmMapLockedPagesSpecifyCache(
   IN ULONG  BugCheckOnFailure,
   IN MM_PAGE_PRIORITY  Priority);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmMapLockedPagesWithReservedMapping(
   IN PVOID  MappingAddress,
   IN ULONG  PoolTag,
   IN PMDL  MemoryDescriptorList,
   IN MEMORY_CACHING_TYPE  CacheType);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmMapUserAddressesToPage(
   IN PVOID  BaseAddress,
   IN SIZE_T  NumberOfBytes,
   IN PVOID  PageAddress);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmMapVideoDisplay(
   IN PHYSICAL_ADDRESS  PhysicalAddress,
   IN SIZE_T  NumberOfBytes,
   IN MEMORY_CACHING_TYPE  CacheType);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmMapViewInSessionSpace(
   IN PVOID  Section,
   OUT PVOID  *MappedBase,
   IN OUT PSIZE_T  ViewSize);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmMapViewInSystemSpace(
   IN PVOID  Section,
   OUT PVOID  *MappedBase,
   IN PSIZE_T  ViewSize);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmMarkPhysicalMemoryAsBad(
   IN PPHYSICAL_ADDRESS  StartAddress,
   IN OUT PLARGE_INTEGER  NumberOfBytes);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmMarkPhysicalMemoryAsGood(
   IN PPHYSICAL_ADDRESS  StartAddress,
   IN OUT PLARGE_INTEGER  NumberOfBytes);
@@ -9567,15 +10533,15 @@ MmMarkPhysicalMemoryAsGood(
  *   IN MM_PAGE_PRIORITY  Priority)
  */
 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
-  ((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
+  (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
     | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
     (_Mdl)->MappedSystemVa : \
     (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
-      KernelMode, MmCached, NULL, FALSE, _Priority)
+      KernelMode, MmCached, NULL, FALSE, (_Priority)))
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmGetSystemRoutineAddress(
   IN PUNICODE_STRING  SystemRoutineName);
 
@@ -9610,39 +10576,39 @@ MmGetSystemRoutineAddress(
   (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
 }
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 MmIsAddressValid(
   IN PVOID  VirtualAddress);
 
-NTOSAPI
+NTKERNELAPI
 LOGICAL
-DDKAPI
+NTAPI
 MmIsDriverVerifying(
   IN PDRIVER_OBJECT  DriverObject);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 MmIsThisAnNtAsSystem(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmIsVerifierEnabled(
   OUT PULONG  VerifierFlags);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmLockPagableDataSection(
   IN PVOID  AddressWithinSection);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmLockPagableImageSection(
   IN PVOID  AddressWithinSection);
 
@@ -9651,73 +10617,87 @@ MmLockPagableImageSection(
  * MmLockPagableCodeSection(
  *   IN PVOID  AddressWithinSection)
  */
-#define MmLockPagableCodeSection MmLockPagableDataSection
+#define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmLockPagableSectionByHandle(
   IN PVOID  ImageSectionHandle);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmMapIoSpace(
   IN PHYSICAL_ADDRESS  PhysicalAddress,
   IN ULONG  NumberOfBytes,
   IN MEMORY_CACHING_TYPE  CacheEnable);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 MmMapLockedPages(
   IN PMDL  MemoryDescriptorList,
   IN KPROCESSOR_MODE  AccessMode);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
+MmLockPageableDataSection (
+    IN PVOID AddressWithinSection
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnlockPageableImageSection(
+    IN PVOID ImageSectionHandle
+);
+
+NTKERNELAPI
+PVOID
+NTAPI
 MmPageEntireDriver(
   IN PVOID  AddressWithinSection);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmProbeAndLockProcessPages(
   IN OUT PMDL  MemoryDescriptorList,
   IN PEPROCESS  Process,
   IN KPROCESSOR_MODE  AccessMode,
   IN LOCK_OPERATION  Operation);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmProtectMdlSystemAddress(
   IN PMDL  MemoryDescriptorList,
   IN ULONG  NewProtect);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmUnmapLockedPages(
   IN PVOID  BaseAddress,
   IN PMDL  MemoryDescriptorList);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmUnmapViewInSessionSpace(
   IN PVOID  MappedBase);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmUnmapViewInSystemSpace(
   IN PVOID MappedBase);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmUnsecureVirtualMemory(
   IN HANDLE  SecureHandle);
 
@@ -9736,78 +10716,80 @@ MmUnsecureVirtualMemory(
   } \
 }
 
-NTOSAPI
+#define MmGetProcedureAddress(Address) (Address)
+
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmProbeAndLockPages(
   IN OUT PMDL  MemoryDescriptorList,
   IN KPROCESSOR_MODE  AccessMode,
   IN LOCK_OPERATION  Operation);
 
-NTOSAPI
+NTKERNELAPI
 MM_SYSTEMSIZE
-DDKAPI
+NTAPI
 MmQuerySystemSize(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 MmRemovePhysicalMemory(
   IN PPHYSICAL_ADDRESS  StartAddress,
   IN OUT PLARGE_INTEGER  NumberOfBytes);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmResetDriverPaging(
   IN PVOID  AddressWithinSection);
 
-NTOSAPI
+NTKERNELAPI
 HANDLE
-DDKAPI
+NTAPI
 MmSecureVirtualMemory(
   IN PVOID  Address,
   IN SIZE_T  Size,
   IN ULONG  ProbeMode);
 
-NTOSAPI
+NTKERNELAPI
 ULONG
-DDKAPI
+NTAPI
 MmSizeOfMdl(
   IN PVOID  Base,
   IN SIZE_T  Length);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmUnlockPagableImageSection(
   IN PVOID  ImageSectionHandle);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmUnlockPages(
   IN PMDL  MemoryDescriptorList);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmUnmapIoSpace(
   IN PVOID  BaseAddress,
   IN SIZE_T  NumberOfBytes);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmUnmapReservedMapping(
   IN PVOID  BaseAddress,
   IN ULONG  PoolTag,
   IN PMDL  MemoryDescriptorList);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 MmUnmapVideoDisplay(
   IN PVOID  BaseAddress,
   IN SIZE_T  NumberOfBytes);
@@ -9816,25 +10798,25 @@ MmUnmapVideoDisplay(
 
 /** Object manager routines **/
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ObAssignSecurity(
   IN PACCESS_STATE  AccessState,
   IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
   IN PVOID  Object,
   IN POBJECT_TYPE  Type);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ObDereferenceSecurityDescriptor(
   PSECURITY_DESCRIPTOR  SecurityDescriptor,
   ULONG  Count);
 
-NTOSAPI
+NTKERNELAPI
 LONG_PTR
-DDKFASTAPI
+FASTCALL
 ObfDereferenceObject(
   IN PVOID  Object);
 
@@ -9845,17 +10827,17 @@ ObfDereferenceObject(
  */
 #define ObDereferenceObject ObfDereferenceObject
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ObGetObjectSecurity(
   IN PVOID  Object,
   OUT PSECURITY_DESCRIPTOR  *SecurityDescriptor,
   OUT PBOOLEAN  MemoryAllocated);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ObInsertObject(
   IN PVOID  Object,
   IN PACCESS_STATE  PassedAccessState  OPTIONAL,
@@ -9864,15 +10846,15 @@ ObInsertObject(
   OUT PVOID*  ReferencedObject  OPTIONAL,
   OUT PHANDLE  Handle);
 
-NTOSAPI
+NTKERNELAPI
 LONG_PTR
-DDKFASTAPI
+FASTCALL
 ObfReferenceObject(
   IN PVOID  Object);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ObLogSecurityDescriptor(
   IN PSECURITY_DESCRIPTOR  InputSecurityDescriptor,
   OUT PSECURITY_DESCRIPTOR  *OutputSecurityDescriptor,
@@ -9884,15 +10866,15 @@ ObLogSecurityDescriptor(
  */
 #define ObReferenceObject ObfReferenceObject
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ObMakeTemporaryObject(
   IN PVOID  Object);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ObOpenObjectByName(
   IN POBJECT_ATTRIBUTES  ObjectAttributes,
   IN POBJECT_TYPE  ObjectType,
@@ -9902,9 +10884,9 @@ ObOpenObjectByName(
   IN OUT PVOID  ParseContext  OPTIONAL,
   OUT PHANDLE  Handle);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ObOpenObjectByPointer(
   IN PVOID  Object,
   IN ULONG  HandleAttributes,
@@ -9914,16 +10896,16 @@ ObOpenObjectByPointer(
   IN KPROCESSOR_MODE  AccessMode,
   OUT PHANDLE  Handle);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ObQueryObjectAuditingByHandle(
   IN HANDLE  Handle,
   OUT PBOOLEAN  GenerateOnClose);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ObReferenceObjectByHandle(
   IN HANDLE  Handle,
   IN ACCESS_MASK  DesiredAccess,
@@ -9932,9 +10914,9 @@ ObReferenceObjectByHandle(
   OUT PVOID  *Object,
   OUT POBJECT_HANDLE_INFORMATION  HandleInformation  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ObReferenceObjectByName(
   IN PUNICODE_STRING  ObjectPath,
   IN ULONG  Attributes,
@@ -9945,25 +10927,25 @@ ObReferenceObjectByName(
   IN OUT PVOID  ParseContext  OPTIONAL,
   OUT PVOID  *Object);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ObReferenceObjectByPointer(
   IN PVOID  Object,
   IN ACCESS_MASK  DesiredAccess,
   IN POBJECT_TYPE  ObjectType,
   IN KPROCESSOR_MODE  AccessMode);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ObReferenceSecurityDescriptor(
   IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
   IN ULONG  Count);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 ObReleaseObjectSecurity(
   IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
   IN BOOLEAN  MemoryAllocated);
@@ -9972,17 +10954,17 @@ ObReleaseObjectSecurity(
 
 /** Process manager routines **/
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PsCreateSystemProcess(
   IN PHANDLE  ProcessHandle,
   IN ACCESS_MASK  DesiredAccess,
   IN POBJECT_ATTRIBUTES  ObjectAttributes);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PsCreateSystemThread(
   OUT PHANDLE  ThreadHandle,
   IN ULONG  DesiredAccess,
@@ -9998,9 +10980,9 @@ PsCreateSystemThread(
  */
 #define PsGetCurrentProcess IoGetCurrentProcess
 
-NTOSAPI
+NTKERNELAPI
 HANDLE
-DDKAPI
+NTAPI
 PsGetCurrentProcessId(
   VOID);
 
@@ -10011,65 +10993,71 @@ PsGetCurrentProcessId(
 #define PsGetCurrentThread() \
   ((PETHREAD) KeGetCurrentThread())
 
-NTOSAPI
+NTKERNELAPI
 HANDLE
-DDKAPI
+NTAPI
 PsGetCurrentThreadId(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetProcessId(PEPROCESS Process);
+
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 PsGetVersion(
   PULONG  MajorVersion  OPTIONAL,
   PULONG  MinorVersion  OPTIONAL,
   PULONG  BuildNumber  OPTIONAL,
   PUNICODE_STRING  CSDVersion  OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PsRemoveCreateThreadNotifyRoutine(
   IN PCREATE_THREAD_NOTIFY_ROUTINE  NotifyRoutine);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PsRemoveLoadImageNotifyRoutine(
   IN PLOAD_IMAGE_NOTIFY_ROUTINE  NotifyRoutine);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PsSetCreateProcessNotifyRoutine(
   IN PCREATE_PROCESS_NOTIFY_ROUTINE  NotifyRoutine,
   IN BOOLEAN  Remove);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PsSetCreateThreadNotifyRoutine(
   IN PCREATE_THREAD_NOTIFY_ROUTINE  NotifyRoutine);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PsSetLoadImageNotifyRoutine(
   IN PLOAD_IMAGE_NOTIFY_ROUTINE  NotifyRoutine);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PsTerminateSystemThread(
   IN NTSTATUS  ExitStatus);
 
+extern NTSYSAPI PEPROCESS PsInitialSystemProcess;
 
 
 /** Security reference monitor routines **/
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 SeAccessCheck(
   IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
   IN PSECURITY_SUBJECT_CONTEXT  SubjectSecurityContext,
@@ -10082,9 +11070,9 @@ SeAccessCheck(
   OUT PACCESS_MASK  GrantedAccess,
   OUT PNTSTATUS  AccessStatus);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 SeAssignSecurity(
   IN PSECURITY_DESCRIPTOR  ParentDescriptor  OPTIONAL,
   IN PSECURITY_DESCRIPTOR  ExplicitDescriptor  OPTIONAL,
@@ -10094,9 +11082,9 @@ SeAssignSecurity(
   IN PGENERIC_MAPPING  GenericMapping,
   IN POOL_TYPE  PoolType);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 SeAssignSecurityEx(
   IN PSECURITY_DESCRIPTOR  ParentDescriptor  OPTIONAL,
   IN PSECURITY_DESCRIPTOR  ExplicitDescriptor  OPTIONAL,
@@ -10108,22 +11096,22 @@ SeAssignSecurityEx(
   IN PGENERIC_MAPPING  GenericMapping,
   IN POOL_TYPE  PoolType);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 SeDeassignSecurity(
   IN OUT PSECURITY_DESCRIPTOR  *SecurityDescriptor);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 SeSinglePrivilegeCheck(
   LUID  PrivilegeValue,
   KPROCESSOR_MODE  PreviousMode);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 SeValidSecurityDescriptor(
   IN ULONG  Length,
   IN PSECURITY_DESCRIPTOR  SecurityDescriptor);
@@ -10132,18 +11120,18 @@ SeValidSecurityDescriptor(
 
 /** NtXxx routines **/
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtOpenProcess(
   OUT PHANDLE  ProcessHandle,
   IN ACCESS_MASK  DesiredAccess,
   IN POBJECT_ATTRIBUTES  ObjectAttributes,
   IN PCLIENT_ID  ClientId  OPTIONAL);
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtQueryInformationProcess(
   IN HANDLE  ProcessHandle,
   IN PROCESSINFOCLASS  ProcessInformationClass,
@@ -10155,36 +11143,36 @@ NtQueryInformationProcess(
 
 /** NtXxx and ZwXxx routines **/
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwCancelTimer(
   IN HANDLE  TimerHandle,
   OUT PBOOLEAN  CurrentState  OPTIONAL);
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtClose(
   IN HANDLE  Handle);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwClose(
   IN HANDLE  Handle);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwCreateDirectoryObject(
   OUT PHANDLE  DirectoryHandle,
   IN ACCESS_MASK  DesiredAccess,
   IN POBJECT_ATTRIBUTES  ObjectAttributes);
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtCreateEvent(
   OUT PHANDLE  EventHandle,
   IN ACCESS_MASK  DesiredAccess,
@@ -10192,9 +11180,9 @@ NtCreateEvent(
   IN EVENT_TYPE  EventType,
   IN BOOLEAN  InitialState);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwCreateEvent(
   OUT PHANDLE  EventHandle,
   IN ACCESS_MASK  DesiredAccess,
@@ -10202,9 +11190,9 @@ ZwCreateEvent(
   IN EVENT_TYPE  EventType,
   IN BOOLEAN  InitialState);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwCreateFile(
   OUT PHANDLE  FileHandle,
   IN ACCESS_MASK  DesiredAccess,
@@ -10218,9 +11206,9 @@ ZwCreateFile(
   IN PVOID  EaBuffer  OPTIONAL,
   IN ULONG  EaLength);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwCreateKey(
   OUT PHANDLE  KeyHandle,
   IN ACCESS_MASK  DesiredAccess,
@@ -10230,31 +11218,31 @@ ZwCreateKey(
   IN ULONG  CreateOptions,
   OUT PULONG  Disposition  OPTIONAL);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwCreateTimer(
   OUT PHANDLE  TimerHandle,
   IN ACCESS_MASK  DesiredAccess,
   IN POBJECT_ATTRIBUTES  ObjectAttributes  OPTIONAL,
   IN TIMER_TYPE  TimerType);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwDeleteKey(
   IN HANDLE  KeyHandle);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwDeleteValueKey(
   IN HANDLE  KeyHandle,
   IN PUNICODE_STRING  ValueName);
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtDeviceIoControlFile(
   IN HANDLE  DeviceHandle,
   IN HANDLE  Event  OPTIONAL,
@@ -10267,9 +11255,9 @@ NtDeviceIoControlFile(
   OUT PVOID  OutputBuffer,
   IN ULONG  OutputBufferSize);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwDeviceIoControlFile(
   IN HANDLE  DeviceHandle,
   IN HANDLE  Event  OPTIONAL,
@@ -10282,9 +11270,9 @@ ZwDeviceIoControlFile(
   OUT PVOID  OutputBuffer,
   IN ULONG  OutputBufferSize);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwEnumerateKey(
   IN HANDLE  KeyHandle,
   IN ULONG  Index,
@@ -10293,9 +11281,9 @@ ZwEnumerateKey(
   IN ULONG  Length,
   OUT PULONG  ResultLength);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwEnumerateValueKey(
   IN HANDLE  KeyHandle,
   IN ULONG  Index,
@@ -10304,51 +11292,51 @@ ZwEnumerateValueKey(
   IN ULONG  Length,
   OUT PULONG  ResultLength);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwFlushKey(
   IN HANDLE  KeyHandle);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwMakeTemporaryObject(
   IN HANDLE  Handle);
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtMapViewOfSection(
   IN HANDLE  SectionHandle,
   IN HANDLE  ProcessHandle,
   IN OUT PVOID  *BaseAddress,
-  IN ULONG  ZeroBits,
-  IN ULONG  CommitSize,
+  IN ULONG_PTR  ZeroBits,
+  IN SIZE_T  CommitSize,
   IN OUT PLARGE_INTEGER  SectionOffset  OPTIONAL,
   IN OUT PSIZE_T  ViewSize,
   IN SECTION_INHERIT  InheritDisposition,
   IN ULONG  AllocationType,
   IN ULONG  Protect);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwMapViewOfSection(
   IN HANDLE  SectionHandle,
   IN HANDLE  ProcessHandle,
   IN OUT PVOID  *BaseAddress,
-  IN ULONG  ZeroBits,
-  IN ULONG  CommitSize,
+  IN ULONG_PTR  ZeroBits,
+  IN SIZE_T  CommitSize,
   IN OUT PLARGE_INTEGER  SectionOffset  OPTIONAL,
   IN OUT PSIZE_T  ViewSize,
   IN SECTION_INHERIT  InheritDisposition,
   IN ULONG  AllocationType,
   IN ULONG  Protect);
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtOpenFile(
   OUT PHANDLE  FileHandle,
   IN ACCESS_MASK  DesiredAccess,
@@ -10357,9 +11345,9 @@ NtOpenFile(
   IN ULONG  ShareAccess,
   IN ULONG  OpenOptions);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwOpenFile(
   OUT PHANDLE  FileHandle,
   IN ACCESS_MASK  DesiredAccess,
@@ -10368,41 +11356,41 @@ ZwOpenFile(
   IN ULONG  ShareAccess,
   IN ULONG  OpenOptions);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwOpenKey(
   OUT PHANDLE  KeyHandle,
   IN ACCESS_MASK  DesiredAccess,
   IN POBJECT_ATTRIBUTES  ObjectAttributes);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwOpenSection(
   OUT PHANDLE  SectionHandle,
   IN ACCESS_MASK  DesiredAccess,
   IN POBJECT_ATTRIBUTES  ObjectAttributes);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwOpenSymbolicLinkObject(
   OUT PHANDLE  LinkHandle,
   IN ACCESS_MASK  DesiredAccess,
   IN POBJECT_ATTRIBUTES  ObjectAttributes);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwOpenTimer(
   OUT PHANDLE  TimerHandle,
   IN ACCESS_MASK  DesiredAccess,
   IN POBJECT_ATTRIBUTES  ObjectAttributes);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwQueryInformationFile(
   IN HANDLE  FileHandle,
   OUT PIO_STATUS_BLOCK  IoStatusBlock,
@@ -10410,9 +11398,9 @@ ZwQueryInformationFile(
   IN ULONG  Length,
   IN FILE_INFORMATION_CLASS  FileInformationClass);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwQueryKey(
   IN HANDLE  KeyHandle,
   IN KEY_INFORMATION_CLASS  KeyInformationClass,
@@ -10420,17 +11408,17 @@ ZwQueryKey(
   IN ULONG  Length,
   OUT PULONG  ResultLength);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwQuerySymbolicLinkObject(
   IN HANDLE  LinkHandle,
   IN OUT PUNICODE_STRING  LinkTarget,
   OUT PULONG  ReturnedLength  OPTIONAL);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwQueryValueKey(
   IN HANDLE  KeyHandle,
   IN PUNICODE_STRING  ValueName,
@@ -10439,9 +11427,9 @@ ZwQueryValueKey(
   IN ULONG  Length,
   OUT PULONG  ResultLength);
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtReadFile(
   IN HANDLE  FileHandle,
   IN HANDLE  Event  OPTIONAL,
@@ -10453,9 +11441,9 @@ NtReadFile(
   IN PLARGE_INTEGER  ByteOffset  OPTIONAL,
   IN PULONG  Key  OPTIONAL);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwReadFile(
   IN HANDLE  FileHandle,
   IN HANDLE  Event  OPTIONAL,
@@ -10467,23 +11455,23 @@ ZwReadFile(
   IN PLARGE_INTEGER  ByteOffset  OPTIONAL,
   IN PULONG  Key  OPTIONAL);
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtSetEvent(
   IN HANDLE  EventHandle,
   OUT PLONG  PreviousState  OPTIONAL);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwSetEvent(
   IN HANDLE  EventHandle,
   OUT PLONG  PreviousState  OPTIONAL);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwSetInformationFile(
   IN HANDLE  FileHandle,
   OUT PIO_STATUS_BLOCK  IoStatusBlock,
@@ -10491,18 +11479,18 @@ ZwSetInformationFile(
   IN ULONG  Length,
   IN FILE_INFORMATION_CLASS  FileInformationClass);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwSetInformationThread(
   IN HANDLE  ThreadHandle,
   IN THREADINFOCLASS  ThreadInformationClass,
   IN PVOID  ThreadInformation,
   IN ULONG  ThreadInformationLength);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwSetTimer(
   IN HANDLE  TimerHandle,
   IN PLARGE_INTEGER  DueTime,
@@ -10512,9 +11500,9 @@ ZwSetTimer(
   IN LONG  Period  OPTIONAL,
   OUT PBOOLEAN  PreviousState  OPTIONAL);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwSetValueKey(
   IN HANDLE  KeyHandle,
   IN PUNICODE_STRING  ValueName,
@@ -10528,39 +11516,39 @@ ZwSetValueKey(
 #define AT_RESERVED                       0x20000000
 #define AT_ROUND_TO_PAGE                  0x40000000
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtUnmapViewOfSection(
   IN HANDLE  ProcessHandle,
   IN PVOID  BaseAddress);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwUnmapViewOfSection(
   IN HANDLE  ProcessHandle,
   IN PVOID  BaseAddress);
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtWaitForSingleObject(
   IN HANDLE  ObjectHandle,
   IN BOOLEAN  Alertable,
   IN PLARGE_INTEGER  TimeOut  OPTIONAL);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwWaitForSingleObject(
   IN HANDLE  ObjectHandle,
   IN BOOLEAN  Alertable,
   IN PLARGE_INTEGER  TimeOut  OPTIONAL);
 
-NTOSAPI
+NTSYSCALLAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NtWriteFile(
   IN HANDLE  FileHandle,
   IN HANDLE  Event  OPTIONAL,
@@ -10572,9 +11560,9 @@ NtWriteFile(
   IN PLARGE_INTEGER  ByteOffset  OPTIONAL,
   IN PULONG  Key  OPTIONAL);
 
-NTOSAPI
+NTSYSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 ZwWriteFile(
   IN HANDLE  FileHandle,
   IN HANDLE  Event  OPTIONAL,
@@ -10590,32 +11578,32 @@ ZwWriteFile(
 
 /** Power management support routines **/
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PoCallDriver(
   IN PDEVICE_OBJECT  DeviceObject,
   IN OUT PIRP  Irp);
 
-NTOSAPI
+NTKERNELAPI
 PULONG
-DDKAPI
+NTAPI
 PoRegisterDeviceForIdleDetection(
   IN PDEVICE_OBJECT  DeviceObject,
   IN ULONG  ConservationIdleTime,
   IN ULONG  PerformanceIdleTime,
   IN DEVICE_POWER_STATE  State);
 
-NTOSAPI
+NTKERNELAPI
 PVOID
-DDKAPI
+NTAPI
 PoRegisterSystemState(
   IN PVOID  StateHandle,
   IN EXECUTION_STATE  Flags);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PoRequestPowerIrp(
   IN PDEVICE_OBJECT  DeviceObject,
   IN UCHAR  MinorFunction,
@@ -10624,41 +11612,44 @@ PoRequestPowerIrp(
   IN PVOID  Context,
   OUT PIRP  *Irp OPTIONAL);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 PoRequestShutdownEvent(
   OUT PVOID  *Event);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 PoSetDeviceBusy(
   PULONG  IdlePointer);
 
-NTOSAPI
+#define PoSetDeviceBusy(IdlePointer) \
+ ((void)(*(IdlePointer) = 0))
+
+NTKERNELAPI
 POWER_STATE
-DDKAPI
+NTAPI
 PoSetPowerState(
   IN PDEVICE_OBJECT  DeviceObject,
   IN POWER_STATE_TYPE  Type,
   IN POWER_STATE  State);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 PoSetSystemState(
   IN EXECUTION_STATE  Flags);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 PoStartNextPowerIrp(
   IN PIRP  Irp);
 
-NTOSAPI
+NTKERNELAPI
 VOID
-DDKAPI
+NTAPI
 PoUnregisterSystemState(
   IN PVOID  StateHandle);
 
@@ -10666,9 +11657,8 @@ PoUnregisterSystemState(
 
 /** WMI library support routines **/
 
-NTOSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 WmiCompleteRequest(
   IN PDEVICE_OBJECT  DeviceObject,
   IN PIRP  Irp,
@@ -10676,9 +11666,8 @@ WmiCompleteRequest(
   IN ULONG  BufferUsed,
   IN CCHAR  PriorityBoost);
 
-NTOSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 WmiFireEvent(
   IN PDEVICE_OBJECT  DeviceObject,
   IN LPGUID  Guid,
@@ -10686,9 +11675,9 @@ WmiFireEvent(
   IN ULONG  EventDataSize,
   IN PVOID  EventData);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 WmiQueryTraceInformation(
   IN TRACE_INFORMATION_CLASS  TraceInformationClass,
   OUT PVOID  TraceInformation,
@@ -10696,16 +11685,15 @@ WmiQueryTraceInformation(
   OUT PULONG  RequiredLength OPTIONAL,
   IN PVOID  Buffer OPTIONAL);
 
-NTOSAPI
 NTSTATUS
-DDKAPI
+NTAPI
 WmiSystemControl(
   IN PWMILIB_CONTEXT  WmiLibInfo,
   IN PDEVICE_OBJECT  DeviceObject,
   IN PIRP  Irp,
   OUT PSYSCTL_IRP_DISPOSITION  IrpDisposition);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
 DDKCDECLAPI
 WmiTraceMessage(
@@ -10717,7 +11705,7 @@ WmiTraceMessage(
 
 #if 0
 /* FIXME: Get va_list from where? */
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
 DDKCDECLAPI
 WmiTraceMessageVa(
@@ -10731,60 +11719,90 @@ WmiTraceMessageVa(
 
 /** Kernel debugger routines **/
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 KdDisableDebugger(
   VOID);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 KdEnableDebugger(
   VOID);
 
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KdChangeOption(
+  IN KD_OPTION Option,
+  IN ULONG InBufferBytes OPTIONAL,
+  IN PVOID InBuffer,
+  IN ULONG OutBufferBytes OPTIONAL,
+  OUT PVOID OutBuffer,
+  OUT PULONG OutBufferNeeded OPTIONAL);
+#endif
+
 VOID
 NTAPI
 DbgBreakPoint(
   VOID);
 
-NTOSAPI
+NTSYSAPI
 VOID
-DDKAPI
+NTAPI
 DbgBreakPointWithStatus(
   IN ULONG  Status);
 
 ULONG
-__cdecl
+DDKCDECLAPI
 DbgPrint(
   IN PCCH  Format,
   IN ...);
 
 ULONG
-__cdecl
+DDKCDECLAPI
 DbgPrintEx(
   IN ULONG  ComponentId,
   IN ULONG  Level,
   IN PCCH  Format,
   IN ...);
 
-NTOSAPI
+ULONG
+NTAPI
+vDbgPrintEx(
+  IN ULONG ComponentId,
+  IN ULONG Level,
+  IN LPCSTR Format,
+  IN va_list ap);
+
+ULONG
+NTAPI
+vDbgPrintExWithPrefix(
+  IN LPCSTR Prefix,
+  IN ULONG ComponentId,
+  IN ULONG Level,
+  IN LPCSTR Format,
+  IN va_list ap);
+
+NTKERNELAPI
 ULONG
 DDKCDECLAPI
 DbgPrintReturnControlC(
   IN PCH  Format,
   IN ...);
 
-NTOSAPI
+NTKERNELAPI
 BOOLEAN
-DDKAPI
+NTAPI
 DbgQueryDebugFilterState(
   IN ULONG  ComponentId,
   IN ULONG  Level);
 
-NTOSAPI
+NTKERNELAPI
 NTSTATUS
-DDKAPI
+NTAPI
 DbgSetDebugFilterState(
   IN ULONG  ComponentId,
   IN ULONG  Level,
@@ -10808,8 +11826,8 @@ DbgSetDebugFilterState(
 
 #if defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
 
-extern NTOSAPI PBOOLEAN KdDebuggerNotPresent;
-extern NTOSAPI PBOOLEAN KdDebuggerEnabled;
+extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent;
+extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled;
 #define KD_DEBUGGER_ENABLED     *KdDebuggerEnabled
 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
 
@@ -10822,53 +11840,6 @@ extern BOOLEAN KdDebuggerEnabled;
 
 #endif
 
-#ifdef __GNUC__
-
-/* Available as intrinsics on MSVC */
-#ifdef _X86_
-static __inline void _disable(void) {__asm__ __volatile__("cli\n");}
-static __inline void _enable(void)  {__asm__ __volatile__("sti\n");}
-
-static __inline ULONG64 __readcr3(void)
-{
-    ULONG_PTR Ret;
-    __asm__ __volatile__("movl %%cr3, %0;\n"
-        :"=r"(Ret));
-    return (ULONG64)Ret;
-}
-
-static __inline ULONG64 __readcr4(void)
-{
-    ULONG_PTR Ret;
-    __asm__ __volatile__("movl %%cr4, %0; \n"
-        :"=r"(Ret));
-    return (ULONG64)Ret;
-}
-#elif defined(_PPC_)
-#ifndef _ENABLE_DISABLE_DEFINED
-#define _ENABLE_DISABLE_DEFINED
-static __inline void _disable(void) {
-       /* Turn off EE bit */
-       __asm__ __volatile__
-               ("mfmsr 3\n\t"
-                "xor 4,5,5\n\t"
-                "addi 4,4,-1\n\t"
-                "and 0,3,4\n\t"
-                "mtmsr 0\n\t"
-                );
-}
-static __inline void _enable(void)  {
-       /* Turn on EE bit */
-       __asm__ __volatile__
-               ("mfmsr 3\n\t"
-                "ori 0,3,0x8000\n\t"
-                "mtmsr 0\n\t"
-                );
-}
-#endif
-#endif /*_X86_*/
-#endif
-
 #ifdef __cplusplus
 }
 #endif