Sync to trunk (r44371)
[reactos.git] / reactos / include / ddk / winddk.h
index 699b987..d12c010 100644 (file)
@@ -31,9 +31,7 @@ extern "C" {
 #include <ntdef.h>
 #include <ntstatus.h>
 
-#ifdef __GNUC__
 #include "intrin.h"
-#endif
 
 #if !defined(_NTHAL_)
 #define NTHALAPI DECLSPEC_IMPORT
@@ -48,10 +46,15 @@ extern "C" {
 #define UNALLIGNED
 
 #define CONST const
-#define VOLATILE volatile
 
 #define RESTRICTED_POINTER
+
+#if defined(_WIN64)
+#define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
+#else
 #define POINTER_ALIGNMENT
+#endif
+
 #define DECLSPEC_ADDRSAFE
 
 #ifdef NONAMELESSUNION
@@ -62,18 +65,6 @@ extern "C" {
 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
 #endif
 
-#if !defined(_NTSYSTEM_)
-#define NTSYSAPI     DECLSPEC_IMPORT
-#define NTSYSCALLAPI DECLSPEC_IMPORT
-#else
-#define NTSYSAPI
-#if defined(_NTDLLBUILD_)
-#define NTSYSCALLAPI
-#else
-#define NTSYSCALLAPI DECLSPEC_ADDRSAFE
-#endif
-#endif
-
 /*
  * Alignment Macros
  */
@@ -95,10 +86,15 @@ extern "C" {
 
 #ifndef __IID_ALIGNED__
     #define __IID_ALIGNED__
-
-    #define IsEqualGUIDAligned(guid1, guid2) \
-        ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
-            (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
+    #ifdef __cplusplus
+        inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
+        {
+            return ((*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)));
+        }
+    #else
+        #define IsEqualGUIDAligned(guid1, guid2) \
+            ((*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)))
+    #endif 
 #endif
 
 /*
@@ -177,6 +173,7 @@ struct _COMPRESSED_DATA_INFO;
 
 #if (_M_IX86)
 #define KIP0PCRADDRESS                      0xffdff000
+    
 #endif
 
 #define KERNEL_STACK_SIZE                   12288
@@ -1202,8 +1199,8 @@ typedef enum _KSPIN_LOCK_QUEUE_NUMBER
 } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER;
 
 typedef struct _KSPIN_LOCK_QUEUE {
-  struct _KSPIN_LOCK_QUEUE  *VOLATILE Next;
-  PKSPIN_LOCK VOLATILE  Lock;
+  struct _KSPIN_LOCK_QUEUE  *volatile Next;
+  PKSPIN_LOCK volatile  Lock;
 } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE;
 
 typedef struct _KLOCK_QUEUE_HANDLE {
@@ -1609,27 +1606,6 @@ typedef struct _CM_FLOPPY_DEVICE_DATA {
   UCHAR  DataTransferRate;
 } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
 
-typedef enum _INTERFACE_TYPE {
-  InterfaceTypeUndefined = -1,
-  Internal,
-  Isa,
-  Eisa,
-  MicroChannel,
-  TurboChannel,
-  PCIBus,
-  VMEBus,
-  NuBus,
-  PCMCIABus,
-  CBus,
-  MPIBus,
-  MPSABus,
-  ProcessorInternal,
-  InternalPowerBus,
-  PNPISABus,
-  PNPBus,
-  MaximumInterfaceType
-} INTERFACE_TYPE, *PINTERFACE_TYPE;
-
 typedef struct _PNP_BUS_INFORMATION {
   GUID  BusTypeGuid;
   INTERFACE_TYPE  LegacyBusType;
@@ -1637,80 +1613,6 @@ typedef struct _PNP_BUS_INFORMATION {
 } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
 
 #include <pshpack1.h>
-typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
-  UCHAR Type;
-  UCHAR ShareDisposition;
-  USHORT Flags;
-  union {
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length;
-    } Generic;
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length;
-    } Port;
-    struct {
-      ULONG Level;
-      ULONG Vector;
-      KAFFINITY Affinity;
-    } Interrupt;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
-    struct {
-      union {
-        struct {
-          USHORT Reserved;
-          USHORT MessageCount;
-          ULONG Vector;
-          KAFFINITY Affinity;
-        } Raw;
-        struct {
-          ULONG Level;
-          ULONG Vector;
-          KAFFINITY Affinity;
-        } Translated;
-      };
-    } MessageInterrupt;
-#endif
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length;
-    } Memory;
-    struct {
-      ULONG Channel;
-      ULONG Port;
-      ULONG Reserved1;
-    } Dma;
-    struct {
-      ULONG Data[3];
-    } DevicePrivate;
-    struct {
-      ULONG Start;
-      ULONG Length;
-      ULONG Reserved;
-    } BusNumber;
-    struct {
-      ULONG DataSize;
-      ULONG Reserved1;
-      ULONG Reserved2;
-    } DeviceSpecificData;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length40;
-    } Memory40;
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length48;
-    } Memory48;
-    struct {
-      PHYSICAL_ADDRESS Start;
-      ULONG Length64;
-    } Memory64;
-#endif
-  } u;
-} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
-
 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
 
 #define CmResourceTypeNull                0
@@ -1827,6 +1729,7 @@ typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
 
 #include <poppack.h>
 
+
 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
 {
     ULONG BytesPerSector;
@@ -1952,80 +1855,6 @@ typedef enum _KINTERRUPT_POLARITY
     InterruptActiveLow
 } KINTERRUPT_POLARITY, *PKINTERRUPT_POLARITY;
 
-/* IO_RESOURCE_DESCRIPTOR.Option */
-
-#define IO_RESOURCE_PREFERRED             0x01
-#define IO_RESOURCE_DEFAULT               0x02
-#define IO_RESOURCE_ALTERNATIVE           0x08
-
-typedef struct _IO_RESOURCE_DESCRIPTOR {
-  UCHAR  Option;
-  UCHAR  Type;
-  UCHAR  ShareDisposition;
-  UCHAR  Spare1;
-  USHORT  Flags;
-  USHORT  Spare2;
-  union {
-    struct {
-      ULONG  Length;
-      ULONG  Alignment;
-      PHYSICAL_ADDRESS  MinimumAddress;
-      PHYSICAL_ADDRESS  MaximumAddress;
-    } Port;
-    struct {
-      ULONG  Length;
-      ULONG  Alignment;
-      PHYSICAL_ADDRESS  MinimumAddress;
-      PHYSICAL_ADDRESS  MaximumAddress;
-    } Memory;
-    struct {
-      ULONG  MinimumVector;
-      ULONG  MaximumVector;
-    } Interrupt;
-    struct {
-      ULONG  MinimumChannel;
-      ULONG  MaximumChannel;
-    } Dma;
-    struct {
-      ULONG  Length;
-      ULONG  Alignment;
-      PHYSICAL_ADDRESS  MinimumAddress;
-      PHYSICAL_ADDRESS  MaximumAddress;
-    } Generic;
-    struct {
-      ULONG  Data[3];
-    } DevicePrivate;
-    struct {
-      ULONG  Length;
-      ULONG  MinBusNumber;
-      ULONG  MaxBusNumber;
-      ULONG  Reserved;
-    } BusNumber;
-    struct {
-      ULONG  Priority;
-      ULONG  Reserved1;
-      ULONG  Reserved2;
-    } ConfigData;
-  } u;
-} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
-
-typedef struct _IO_RESOURCE_LIST {
-  USHORT  Version;
-  USHORT  Revision;
-  ULONG  Count;
-  IO_RESOURCE_DESCRIPTOR  Descriptors[1];
-} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
-
-typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
-  ULONG  ListSize;
-  INTERFACE_TYPE  InterfaceType;
-  ULONG  BusNumber;
-  ULONG  SlotNumber;
-  ULONG  Reserved[3];
-  ULONG  AlternativeLists;
-  IO_RESOURCE_LIST  List[1];
-} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
-
 typedef struct _IO_ERROR_LOG_PACKET {
   UCHAR  MajorFunctionCode;
   UCHAR  RetryCount;
@@ -2299,17 +2128,6 @@ typedef struct _SCATTER_GATHER_LIST {
   SCATTER_GATHER_ELEMENT  Elements[1];
 } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
 
-typedef struct _MDL {
-  struct _MDL  *Next;
-  CSHORT  Size;
-  CSHORT  MdlFlags;
-  struct _EPROCESS  *Process;
-  PVOID  MappedSystemVa;
-  PVOID  StartVa;
-  ULONG  ByteCount;
-  ULONG  ByteOffset;
-} MDL, *PMDL;
-
 #define MDL_MAPPED_TO_SYSTEM_VA     0x0001
 #define MDL_PAGES_LOCKED            0x0002
 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
@@ -2615,6 +2433,34 @@ typedef struct _ARBITER_INTERFACE {
   ULONG  Flags;
 } ARBITER_INTERFACE, *PARBITER_INTERFACE;
 
+typedef enum _KPROFILE_SOURCE {
+  ProfileTime,
+  ProfileAlignmentFixup,
+  ProfileTotalIssues,
+  ProfilePipelineDry,
+  ProfileLoadInstructions,
+  ProfilePipelineFrozen,
+  ProfileBranchInstructions,
+  ProfileTotalNonissues,
+  ProfileDcacheMisses,
+  ProfileIcacheMisses,
+  ProfileCacheMisses,
+  ProfileBranchMispredictions,
+  ProfileStoreInstructions,
+  ProfileFpInstructions,
+  ProfileIntegerInstructions,
+  Profile2Issue,
+  Profile3Issue,
+  Profile4Issue,
+  ProfileSpecialInstructions,
+  ProfileTotalCycles,
+  ProfileIcacheIssues,
+  ProfileDcacheAccesses,
+  ProfileMemoryBarrierCycles,
+  ProfileLoadLinkedIssues,
+  ProfileMaximum
+} KPROFILE_SOURCE;
+
 typedef enum _HAL_QUERY_INFORMATION_CLASS {
   HalInstalledBusInformation,
   HalProfileSourceInformation,
@@ -2652,6 +2498,19 @@ typedef enum _HAL_SET_INFORMATION_CLASS {
   HalGenerateCmcInterrupt
 } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
 
+typedef struct _HAL_PROFILE_SOURCE_INTERVAL
+{
+    KPROFILE_SOURCE Source;
+    ULONG_PTR Interval;
+} HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
+
+typedef struct _HAL_PROFILE_SOURCE_INFORMATION
+{
+    KPROFILE_SOURCE Source;
+    BOOLEAN Supported;
+    ULONG Interval;
+} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
+
 typedef struct _MAP_REGISTER_ENTRY
 {
     PVOID MapRegister;
@@ -3034,10 +2893,10 @@ typedef struct {
 } HAL_DISPATCH, *PHAL_DISPATCH;
 
 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
-extern DECLSPEC_IMPORT PHAL_DISPATCH HalDispatchTable;
+extern NTSYSAPI PHAL_DISPATCH HalDispatchTable;
 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
 #else
-extern DECLSPEC_EXPORT HAL_DISPATCH HalDispatchTable;
+extern __declspec(dllexport) HAL_DISPATCH HalDispatchTable;
 #define HALDISPATCH (&HalDispatchTable)
 #endif
 
@@ -3059,14 +2918,6 @@ extern DECLSPEC_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,
@@ -4425,7 +4276,7 @@ typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
 
 typedef struct _IO_REMOVE_LOCK {
   IO_REMOVE_LOCK_COMMON_BLOCK  Common;
-#ifdef DBG
+#if DBG
   IO_REMOVE_LOCK_DBG_BLOCK  Dbg;
 #endif
 } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
@@ -4459,34 +4310,6 @@ typedef VOID
 (DDKAPI *PKINTERRUPT_ROUTINE)(
   VOID);
 
-typedef enum _KPROFILE_SOURCE {
-  ProfileTime,
-  ProfileAlignmentFixup,
-  ProfileTotalIssues,
-  ProfilePipelineDry,
-  ProfileLoadInstructions,
-  ProfilePipelineFrozen,
-  ProfileBranchInstructions,
-  ProfileTotalNonissues,
-  ProfileDcacheMisses,
-  ProfileIcacheMisses,
-  ProfileCacheMisses,
-  ProfileBranchMispredictions,
-  ProfileStoreInstructions,
-  ProfileFpInstructions,
-  ProfileIntegerInstructions,
-  Profile2Issue,
-  Profile3Issue,
-  Profile4Issue,
-  ProfileSpecialInstructions,
-  ProfileTotalCycles,
-  ProfileIcacheIssues,
-  ProfileDcacheAccesses,
-  ProfileMemoryBarrierCycles,
-  ProfileLoadLinkedIssues,
-  ProfileMaximum
-} KPROFILE_SOURCE;
-
 typedef enum _CREATE_FILE_TYPE {
   CreateFileTypeNone,
   CreateFileTypeNamedPipe,
@@ -4579,23 +4402,6 @@ typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
   IoQueryDeviceMaxData
 } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
 
-typedef enum _WORK_QUEUE_TYPE {
-  CriticalWorkQueue,
-  DelayedWorkQueue,
-  HyperCriticalWorkQueue,
-  MaximumWorkQueue
-} WORK_QUEUE_TYPE;
-
-typedef VOID
-(DDKAPI *PWORKER_THREAD_ROUTINE)(
-  IN PVOID Parameter);
-
-typedef struct _WORK_QUEUE_ITEM {
-  LIST_ENTRY  List;
-  PWORKER_THREAD_ROUTINE  WorkerRoutine;
-  volatile PVOID  Parameter;
-} WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
-
 typedef enum _KBUGCHECK_CALLBACK_REASON {
   KbCallbackInvalid,
   KbCallbackReserved1,
@@ -4747,6 +4553,25 @@ typedef VOID
   IN HANDLE  ProcessId,
   IN PIMAGE_INFO  ImageInfo);
 
+#pragma pack(push,4)
+typedef enum _BUS_DATA_TYPE {
+    ConfigurationSpaceUndefined = -1,
+    Cmos,
+    EisaConfiguration,
+    Pos,
+    CbusConfiguration,
+    PCIConfiguration,
+    VMEConfiguration,
+    NuBusConfiguration,
+    PCMCIAConfiguration,
+    MPIConfiguration,
+    MPSAConfiguration,
+    PNPISAConfiguration,
+    SgiInternalConfiguration,
+    MaximumBusDataType
+} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
+#pragma pack(pop)
+
 typedef struct _NT_TIB {
     struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
     PVOID StackBase;
@@ -5128,7 +4953,7 @@ typedef struct _PHYSICAL_MEMORY_RANGE {
 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
 
 typedef ULONG_PTR
-(*PDRIVER_VERIFIER_THUNK_ROUTINE)(
+(NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
   IN PVOID  Context);
 
 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
@@ -5294,9 +5119,8 @@ typedef struct _KFLOATING_SAVE {
   ULONG  Spare1;
 } KFLOATING_SAVE, *PKFLOATING_SAVE;
 
-static __inline
+FORCEINLINE
 ULONG
-DDKAPI
 KeGetCurrentProcessorNumber(VOID)
 {
 #if defined(__GNUC__)
@@ -5311,7 +5135,7 @@ KeGetCurrentProcessorNumber(VOID)
 #if _MSC_FULL_VER >= 13012035
   return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number));
 #else
-  __asm { movzx eax, _PCR KPCR.Number }
+  __asm { movzx eax, fs:[0] KPCR.Number }
 #endif
 #else
 #error Unknown compiler
@@ -5349,7 +5173,7 @@ extern NTKERNELAPI ULONG_PTR MmUserProbeAddress;
 
 #define MM_KSEG0_BASE       MM_SYSTEM_RANGE_START
 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
-
+    
 #elif defined(__x86_64__)
 
 #define CONTEXT_AMD64 0x100000
@@ -5412,7 +5236,7 @@ typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
     USHORT SegFs;
     USHORT SegGs;
     USHORT SegSs;
-    USHORT EFlags;
+    ULONG EFlags;
 
     /* Debug */
     ULONG64 Dr0;
@@ -5730,6 +5554,10 @@ KeGetCurrentProcessorNumber(VOID)
 #error Unknown architecture
 #endif
 
+#define MM_DONT_ZERO_ALLOCATION             0x00000001
+#define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY    0x00000002
+
+    
 #define EFLAG_SIGN                        0x8000
 #define EFLAG_ZERO                        0x4000
 #define EFLAG_SELECT                      (EFLAG_SIGN | EFLAG_ZERO)
@@ -5770,7 +5598,7 @@ typedef VOID
     IN ULONG Length
 );
 
-#define PCI_DATA_TAG TAG('P', 'C', 'I', ' ')
+#define PCI_DATA_TAG ' ICP'
 #define PCI_DATA_VERSION 1
 
 typedef struct _PCIBUSDATA
@@ -5795,13 +5623,35 @@ KeTryToAcquireSpinLockAtDpcLevel(
     IN OUT PKSPIN_LOCK SpinLock
 );
 
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTestSpinLock(
+    IN PKSPIN_LOCK SpinLock
+);
+
 #if defined (_X86_)
 
+#if defined(WIN9X_COMPAT_SPINLOCK)
+
 NTKERNELAPI
 VOID
 NTAPI
 KeInitializeSpinLock(
-  IN PKSPIN_LOCK  SpinLock);
+    IN PKSPIN_LOCK SpinLock
+);
+
+#else
+
+FORCEINLINE
+VOID
+KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock)
+{
+    /* Clear the lock */
+    *SpinLock = 0;
+}
+
+#endif
 
 NTHALAPI
 KIRQL
@@ -5833,8 +5683,58 @@ KefReleaseSpinLockFromDpcLevel(
 #define KeAcquireSpinLock(a,b)  *(b) = KfAcquireSpinLock(a)
 #define KeReleaseSpinLock(a,b)  KfReleaseSpinLock(a,b)
 
-#else // !defined (_X86_)
-
+#define KeGetDcacheFillSize() 1L
+    
+#elif defined(_M_ARM) // !defined (_X86_)
+    
+    FORCEINLINE
+    VOID
+    KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock)
+    {
+        /* Clear the lock */
+        *SpinLock = 0;
+    }
+    
+    NTHALAPI
+    KIRQL
+    FASTCALL
+    KfAcquireSpinLock(
+                      IN PKSPIN_LOCK SpinLock);
+    
+    NTHALAPI
+    VOID
+    FASTCALL
+    KfReleaseSpinLock(
+                      IN PKSPIN_LOCK SpinLock,
+                      IN KIRQL NewIrql);
+    
+    
+    NTKERNELAPI
+    VOID
+    FASTCALL
+    KefAcquireSpinLockAtDpcLevel(
+                                 IN PKSPIN_LOCK  SpinLock);
+    
+    NTKERNELAPI
+    VOID
+    FASTCALL
+    KefReleaseSpinLockFromDpcLevel(
+                                   IN PKSPIN_LOCK  SpinLock);
+    
+    
+#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
+#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
+#define KeAcquireSpinLock(a,b)  *(b) = KfAcquireSpinLock(a)
+#define KeReleaseSpinLock(a,b)  KfReleaseSpinLock(a,b)
+    
+    NTKERNELAPI
+    VOID
+    NTAPI
+    KeInitializeSpinLock(
+                         IN PKSPIN_LOCK  SpinLock);
+    
+#else
+    
 FORCEINLINE
 VOID
 NTAPI
@@ -5867,13 +5767,9 @@ KeAcquireSpinLockRaiseToDpc(
 
 #define KeAcquireSpinLock(SpinLock, OldIrql) \
   *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
-
+    
 #endif // !defined (_X86_)
 
-#define KeGetDcacheFillSize() 1L
-
-
-
 /*
 ** Utillity functions
 */
@@ -5913,18 +5809,37 @@ KeAcquireSpinLockRaiseToDpc(
 #define ROUND_TO_PAGES(Size) \
   ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
 
-#ifdef DBG
+
+
+#if defined(_X86_) || defined(_AMD64_)
+
+//
+// x86 and x64 performs a 0x2C interrupt
+//
+#define DbgRaiseAssertionFailure __int2c
+
+#elif defined(_ARM_)
+
+//
+// TODO
+//
+
+#else
+#error Unsupported Architecture
+#endif
+
+#if DBG
 
 #define ASSERT(exp) \
   (VOID)((!(exp)) ? \
-    RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE : TRUE)
+    RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
 
 #define ASSERTMSG(msg, exp) \
   (VOID)((!(exp)) ? \
-    RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE : TRUE)
+    RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
 
 #define RTL_SOFT_ASSERT(exp) \
-  (VOID)((!(_exp)) ? \
+  (VOID)((!(exp)) ? \
     DbgPrint("%s(%d): Soft assertion failed\n   Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
 
 #define RTL_SOFT_ASSERTMSG(msg, exp) \
@@ -5937,6 +5852,36 @@ KeAcquireSpinLockRaiseToDpc(
 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
 
+#if defined(_MSC_VER)
+
+#define NT_ASSERT(exp) \
+   ((!(exp)) ? \
+      (__annotation(L"Debug", L"AssertFail", L#exp), \
+       DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_ASSERTMSG(msg, exp) \
+   ((!(exp)) ? \
+      (__annotation(L"Debug", L"AssertFail", L##msg), \
+      DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_ASSERTMSGW(msg, exp) \
+    ((!(exp)) ? \
+        (__annotation(L"Debug", L"AssertFail", msg), \
+         DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#else
+
+//
+// GCC doesn't support __annotation (nor PDB)
+//
+#define NT_ASSERT(exp) \
+   (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_ASSERTMSG NT_ASSERT
+#define NT_ASSERTMSGW NT_ASSERT
+
+#endif
+
 #else /* !DBG */
 
 #define ASSERT(exp) ((VOID) 0)
@@ -5951,6 +5896,10 @@ KeAcquireSpinLockRaiseToDpc(
 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
 
+#define NT_ASSERT(exp)     ((VOID)0)
+#define NT_ASSERTMSG(exp)  ((VOID)0)
+#define NT_ASSERTMSGW(exp) ((VOID)0)
+
 #endif /* DBG */
 
 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
@@ -6047,7 +5996,7 @@ RemoveEntryList(
   OldBlink = Entry->Blink;
   OldFlink->Blink = OldBlink;
   OldBlink->Flink = OldFlink;
-  return (OldFlink == OldBlink);
+  return (BOOLEAN)(OldFlink == OldBlink);
 }
 
 static __inline PLIST_ENTRY
@@ -6094,17 +6043,39 @@ RtlCompareString(
   IN PSTRING  String2,
   BOOLEAN  CaseInSensitive);
 
-NTSYSAPI
+#if !defined(MIDL_PASS)
+
+FORCEINLINE
 LUID
 NTAPI
 RtlConvertLongToLuid(
-  IN LONG  Long);
+    IN LONG Val)
+{
+    LUID Luid;
+    LARGE_INTEGER Temp;
 
-NTSYSAPI
+    Temp.QuadPart = Val;
+    Luid.LowPart = Temp.u.LowPart;
+    Luid.HighPart = Temp.u.HighPart;
+
+    return Luid;
+}
+
+FORCEINLINE
 LUID
 NTAPI
 RtlConvertUlongToLuid(
-  ULONG  Ulong);
+    IN ULONG Val)
+{
+    LUID Luid;
+
+    Luid.LowPart = Val;
+    Luid.HighPart = 0;
+
+    return Luid;
+}
+#endif
+
 
 NTSYSAPI
 VOID
@@ -6281,86 +6252,127 @@ KeTryToAcquireGuardedMutex(
     KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
 }
 
-/** Executive support routines **/
-
-static __inline PVOID
-ExAllocateFromNPagedLookasideList(
-  IN PNPAGED_LOOKASIDE_LIST  Lookaside)
-{
-  PVOID Entry;
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeEvent(
+  IN PRKEVENT  Event,
+  IN EVENT_TYPE  Type,
+  IN BOOLEAN  State);
 
-  Lookaside->L.TotalAllocates++;
-  Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
-  if (Entry == NULL) {
-    Lookaside->L.AllocateMisses++;
-    Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, Lookaside->L.Size, Lookaside->L.Tag);
-  }
-  return Entry;
-}
+/******************************************************************************
+ *                            Executive Types                                 *
+ ******************************************************************************/
 
-static __inline PVOID
-ExAllocateFromPagedLookasideList(
-  IN PPAGED_LOOKASIDE_LIST  Lookaside)
-{
-  PVOID Entry;
+typedef struct _ZONE_SEGMENT_HEADER {
+  SINGLE_LIST_ENTRY  SegmentList;
+  PVOID  Reserved;
+} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
 
-  Lookaside->L.TotalAllocates++;
-  Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
-  if (Entry == NULL) {
-    Lookaside->L.AllocateMisses++;
-    Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, Lookaside->L.Size, Lookaside->L.Tag);
-  }
-  return Entry;
-}
+typedef struct _ZONE_HEADER {
+  SINGLE_LIST_ENTRY  FreeList;
+  SINGLE_LIST_ENTRY  SegmentList;
+  ULONG  BlockSize;
+  ULONG  TotalSegmentSize;
+} ZONE_HEADER, *PZONE_HEADER;
 
 #define PROTECTED_POOL                    0x80000000
 
-static __inline VOID
-ExFreeToNPagedLookasideList(
-  IN PNPAGED_LOOKASIDE_LIST  Lookaside,
-  IN PVOID  Entry)
+/******************************************************************************
+ *                          Executive Functions                               *
+ ******************************************************************************/
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExExtendZone(
+  IN PZONE_HEADER  Zone,
+  IN PVOID  Segment,
+  IN ULONG  SegmentSize);
+
+static __inline PVOID
+ExAllocateFromZone(
+  IN PZONE_HEADER  Zone)
 {
-  Lookaside->L.TotalFrees++;
-  if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
-    Lookaside->L.FreeMisses++;
-    (Lookaside->L.Free)(Entry);
-  } else {
-    InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
-  }
+  if (Zone->FreeList.Next)
+    Zone->FreeList.Next = Zone->FreeList.Next->Next;
+  return (PVOID) Zone->FreeList.Next;
 }
 
-static __inline VOID
-ExFreeToPagedLookasideList(
-  IN PPAGED_LOOKASIDE_LIST  Lookaside,
-  IN PVOID  Entry)
+static __inline PVOID
+ExFreeToZone(
+  IN PZONE_HEADER  Zone,
+  IN PVOID  Block)
 {
-  Lookaside->L.TotalFrees++;
-  if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
-    Lookaside->L.FreeMisses++;
-    (Lookaside->L.Free)(Entry);
-  } else {
-    InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
-  }
+  ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
+  Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
+  return ((PSINGLE_LIST_ENTRY) Block)->Next;
 }
 
 NTKERNELAPI
-VOID
+NTSTATUS
 NTAPI
-KeInitializeEvent(
-  IN PRKEVENT  Event,
-  IN EVENT_TYPE  Type,
-  IN BOOLEAN  State);
+ExInitializeZone(
+  IN PZONE_HEADER  Zone,
+  IN ULONG  BlockSize,
+  IN PVOID  InitialSegment,
+  IN ULONG  InitialSegmentSize);
 
 /*
- * VOID
- * InitializeSListHead(
- *   IN PSLIST_HEADER  SListHead)
+ * PVOID
+ * ExInterlockedAllocateFromZone(
+ *   IN PZONE_HEADER  Zone,
+ *   IN PKSPIN_LOCK  Lock)
  */
-#define InitializeSListHead(_SListHead) \
-       (_SListHead)->Alignment = 0
+#define ExInterlockedAllocateFromZone(Zone, Lock) \
+    ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExInterlockedExtendZone(
+  IN PZONE_HEADER  Zone,
+  IN PVOID  Segment,
+  IN ULONG  SegmentSize,
+  IN PKSPIN_LOCK  Lock);
+
+/* PVOID
+ * ExInterlockedFreeToZone(
+ *  IN PZONE_HEADER  Zone,
+ *  IN PVOID  Block,
+ *  IN PKSPIN_LOCK  Lock);
+ */
+#define ExInterlockedFreeToZone(Zone, Block, Lock) \
+    ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
+
+/*
+ * VOID
+ * InitializeSListHead(
+ *   IN PSLIST_HEADER  SListHead)
+ */
+#define InitializeSListHead(_SListHead) \
+       (_SListHead)->Alignment = 0
 
 #define ExInitializeSListHead InitializeSListHead
 
+/*
+ * BOOLEAN
+ * ExIsFullZone(
+ *  IN PZONE_HEADER  Zone)
+ */
+#define ExIsFullZone(Zone) \
+  ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
+
+/* BOOLEAN
+ * ExIsObjectInFirstZoneSegment(
+ *     IN PZONE_HEADER Zone,
+ *     IN PVOID Object);
+ */
+#define ExIsObjectInFirstZoneSegment(Zone,Object) \
+    ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
+                ((PUCHAR)(Object) <  (PUCHAR)(Zone)->SegmentList.Next + \
+                         (Zone)->TotalSegmentSize)) )
+
 NTKERNELAPI
 DECLSPEC_NORETURN
 VOID
@@ -6381,7 +6393,18 @@ NTAPI
 ExUuidCreate(
   OUT UUID  *Uuid);
 
-#ifdef DBG
+#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
+#define ExAcquireResourceShared ExAcquireResourceSharedLite
+#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
+#define ExDeleteResource ExDeleteResourceLite
+#define ExInitializeResource ExInitializeResourceLite
+#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
+#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
+#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
+#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
+
+
+#if DBG
 
 #define PAGED_CODE() { \
   if (KeGetCurrentIrql() > APC_LEVEL) { \
@@ -6465,16 +6488,6 @@ HalPutDmaAdapter(
     PADAPTER_OBJECT AdapterObject
 );
 
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoAllocateAdapterChannel(
-    IN PADAPTER_OBJECT AdapterObject,
-    IN PDEVICE_OBJECT DeviceObject,
-    IN ULONG NumberOfMapRegisters,
-    IN PDRIVER_CONTROL ExecutionRoutine,
-    IN PVOID Context
-);
 
 /** Io access routines **/
 
@@ -6938,6 +6951,18 @@ IoAcquireRemoveLockEx(
     } \
 }
 
+#ifndef DMA_MACROS_DEFINED
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAllocateAdapterChannel(
+    IN PADAPTER_OBJECT AdapterObject,
+    IN PDEVICE_OBJECT DeviceObject,
+    IN ULONG NumberOfMapRegisters,
+    IN PDRIVER_CONTROL ExecutionRoutine,
+    IN PVOID Context);
+#endif
+
 NTKERNELAPI
 VOID
 NTAPI
@@ -7655,6 +7680,15 @@ IoReadDiskSignature(
   IN ULONG  BytesPerSector,
   OUT PDISK_SIGNATURE  Signature);
 
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoReadPartitionTable(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN BOOLEAN  ReturnRecognizedPartitions,
+  OUT struct _DRIVE_LAYOUT_INFORMATION  **PartitionBuffer);
+
 NTKERNELAPI
 NTSTATUS
 NTAPI
@@ -7917,6 +7951,15 @@ IoSetHardErrorOrVerifyDevice(
   (_Irp)->Tail.Overlay.CurrentStackLocation--; \
 }
 
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoSetPartitionInformation(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN ULONG  PartitionNumber,
+  IN ULONG  PartitionType);
+
 NTKERNELAPI
 NTSTATUS
 NTAPI
@@ -8184,6 +8227,16 @@ NTAPI
 IoWriteErrorLogEntry(
   IN PVOID  ElEntry);
 
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoWritePartitionTable(
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN ULONG  SectorSize,
+  IN ULONG  SectorsPerTrack,
+  IN ULONG  NumberOfHeads,
+  IN struct _DRIVE_LAYOUT_INFORMATION  *PartitionBuffer);
+
 NTKERNELAPI
 NTSTATUS
 NTAPI
@@ -8243,16 +8296,16 @@ KeAreApcsDisabled(
   VOID);
 
 NTKERNELAPI
+DECLSPEC_NORETURN
 VOID
 NTAPI
-__declspec(noreturn)
 KeBugCheck(
   IN ULONG  BugCheckCode);
 
 NTKERNELAPI
+DECLSPEC_NORETURN
 VOID
 NTAPI
-__declspec(noreturn)
 KeBugCheckEx(
   IN ULONG  BugCheckCode,
   IN ULONG_PTR  BugCheckParameter1,
@@ -8306,6 +8359,13 @@ KeEnterCriticalRegion(
 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
 
+NTKERNELAPI
+VOID
+NTAPI
+KeFlushQueuedDpcs(
+    VOID
+);
+
 NTHALAPI
 VOID
 NTAPI
@@ -9076,19 +9136,6 @@ MmMarkPhysicalMemoryAsGood(
   IN PPHYSICAL_ADDRESS  StartAddress,
   IN OUT PLARGE_INTEGER  NumberOfBytes);
 
-/*
- * PVOID
- * MmGetSystemAddressForMdlSafe(
- *   IN PMDL  Mdl,
- *   IN MM_PAGE_PRIORITY  Priority)
- */
-#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
-  (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
-    | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
-    (_Mdl)->MappedSystemVa : \
-    (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
-      KernelMode, MmCached, NULL, FALSE, (_Priority)))
-
 NTKERNELAPI
 PVOID
 NTAPI
@@ -9304,7 +9351,7 @@ MmSecureVirtualMemory(
   IN ULONG  ProbeMode);
 
 NTKERNELAPI
-ULONG
+SIZE_T
 NTAPI
 MmSizeOfMdl(
   IN PVOID  Base,
@@ -10281,6 +10328,13 @@ NTAPI
 KdEnableDebugger(
   VOID);
 
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KdRefreshDebuggerNotPresent(
+    VOID
+);
+
 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
 NTKERNELAPI
 NTSTATUS
@@ -10311,6 +10365,7 @@ DbgPrint(
   IN PCCH  Format,
   IN ...);
 
+NTSYSAPI
 ULONG
 DDKCDECLAPI
 DbgPrintEx(
@@ -10324,27 +10379,35 @@ NTAPI
 vDbgPrintEx(
   IN ULONG ComponentId,
   IN ULONG Level,
-  IN LPCSTR Format,
+  IN PCCH Format,
   IN va_list ap);
 
 ULONG
 NTAPI
 vDbgPrintExWithPrefix(
-  IN LPCSTR Prefix,
+  IN PCCH Prefix,
   IN ULONG ComponentId,
   IN ULONG Level,
-  IN LPCSTR Format,
+  IN PCCH Format,
   IN va_list ap);
 
 NTKERNELAPI
 ULONG
 DDKCDECLAPI
 DbgPrintReturnControlC(
-  IN PCH  Format,
+  IN PCCH  Format,
   IN ...);
 
+ULONG
+NTAPI
+DbgPrompt(
+    IN PCCH Prompt,
+    OUT PCH Response,
+    IN ULONG MaximumResponseLength
+);
+
 NTKERNELAPI
-BOOLEAN
+NTSTATUS
 NTAPI
 DbgQueryDebugFilterState(
   IN ULONG  ComponentId,
@@ -10358,7 +10421,7 @@ DbgSetDebugFilterState(
   IN ULONG  Level,
   IN BOOLEAN  State);
 
-#ifdef DBG
+#if DBG
 
 #define KdPrint(_x_) DbgPrint _x_
 #define KdPrintEx(_x_) DbgPrintEx _x_
@@ -10374,7 +10437,14 @@ DbgSetDebugFilterState(
 
 #endif /* !DBG */
 
-#if defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
+#if defined(__GNUC__)
+
+extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent;
+extern NTKERNELAPI BOOLEAN KdDebuggerEnabled;
+#define KD_DEBUGGER_ENABLED     KdDebuggerEnabled
+#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
+
+#elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
 
 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent;
 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled;
@@ -10390,6 +10460,405 @@ extern BOOLEAN KdDebuggerEnabled;
 
 #endif
 
+/** Stuff from winnt4.h */
+
+#ifndef DMA_MACROS_DEFINED
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+BOOLEAN
+NTAPI
+IoFlushAdapterBuffers(
+    IN PADAPTER_OBJECT AdapterObject,
+    IN PMDL Mdl,
+    IN PVOID MapRegisterBase,
+    IN PVOID CurrentVa,
+    IN ULONG Length,
+    IN BOOLEAN WriteToDevice);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
+NTAPI
+IoFreeAdapterChannel(
+    IN PADAPTER_OBJECT AdapterObject);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
+NTAPI
+IoFreeMapRegisters(
+    IN PADAPTER_OBJECT AdapterObject,
+    IN PVOID MapRegisterBase,
+    IN ULONG NumberOfMapRegisters);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+PHYSICAL_ADDRESS
+NTAPI
+IoMapTransfer(
+    IN PADAPTER_OBJECT AdapterObject,
+    IN PMDL Mdl,
+    IN PVOID MapRegisterBase,
+    IN PVOID CurrentVa,
+    IN OUT PULONG Length,
+    IN BOOLEAN WriteToDevice);
+
+
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
+#endif // !defined(DMA_MACROS_DEFINED)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAssignResources(
+  IN PUNICODE_STRING  RegistryPath,
+  IN PUNICODE_STRING  DriverClassName  OPTIONAL,
+  IN PDRIVER_OBJECT  DriverObject,
+  IN PDEVICE_OBJECT  DeviceObject  OPTIONAL,
+  IN PIO_RESOURCE_REQUIREMENTS_LIST  RequestedResources,
+  IN OUT PCM_RESOURCE_LIST  *AllocatedResources);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAttachDeviceByPointer(
+  IN PDEVICE_OBJECT  SourceDevice,
+  IN PDEVICE_OBJECT  TargetDevice);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmIsNonPagedSystemAddressValid(
+  IN PVOID  VirtualAddress);
+
+#if defined(_AMD64_) || defined(_IA64_)
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerDivide(
+    IN LARGE_INTEGER Dividend,
+    IN LARGE_INTEGER Divisor,
+    IN OUT PLARGE_INTEGER Remainder)
+{
+    LARGE_INTEGER ret;
+    ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
+    if (Remainder)
+        Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
+    return ret;
+}
+#else
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlLargeIntegerDivide(
+  IN LARGE_INTEGER  Dividend,
+  IN LARGE_INTEGER  Divisor,
+  IN OUT PLARGE_INTEGER  Remainder);
+#endif
+
+NTKERNELAPI
+INTERLOCKED_RESULT
+NTAPI
+ExInterlockedDecrementLong(
+  IN PLONG  Addend,
+  IN PKSPIN_LOCK  Lock);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExInterlockedExchangeUlong(
+  IN PULONG  Target,
+  IN ULONG  Value,
+  IN PKSPIN_LOCK  Lock);
+
+NTKERNELAPI
+INTERLOCKED_RESULT
+NTAPI
+ExInterlockedIncrementLong(
+  IN PLONG  Addend,
+  IN PKSPIN_LOCK  Lock);
+
+NTHALAPI
+VOID
+NTAPI
+HalAcquireDisplayOwnership(
+  IN PHAL_RESET_DISPLAY_PARAMETERS  ResetDisplayParameters);
+
+NTHALAPI
+NTSTATUS
+NTAPI
+HalAllocateAdapterChannel(
+  IN PADAPTER_OBJECT  AdapterObject,
+  IN PWAIT_CONTEXT_BLOCK  Wcb,
+  IN ULONG  NumberOfMapRegisters,
+  IN PDRIVER_CONTROL  ExecutionRoutine);
+
+NTHALAPI
+PVOID
+NTAPI
+HalAllocateCommonBuffer(
+  IN PADAPTER_OBJECT  AdapterObject,
+  IN ULONG  Length,
+  OUT PPHYSICAL_ADDRESS  LogicalAddress,
+  IN BOOLEAN  CacheEnabled);
+
+NTHALAPI
+NTSTATUS
+NTAPI
+HalAssignSlotResources(
+  IN PUNICODE_STRING  RegistryPath,
+  IN PUNICODE_STRING  DriverClassName,
+  IN PDRIVER_OBJECT  DriverObject,
+  IN PDEVICE_OBJECT  DeviceObject,
+  IN INTERFACE_TYPE  BusType,
+  IN ULONG  BusNumber,
+  IN ULONG  SlotNumber,
+  IN OUT PCM_RESOURCE_LIST  *AllocatedResources);
+
+NTHALAPI
+VOID
+NTAPI
+HalFreeCommonBuffer(
+  IN PADAPTER_OBJECT  AdapterObject,
+  IN ULONG  Length,
+  IN PHYSICAL_ADDRESS  LogicalAddress,
+  IN PVOID  VirtualAddress,
+  IN BOOLEAN  CacheEnabled);
+
+NTHALAPI
+PADAPTER_OBJECT
+NTAPI
+HalGetAdapter(
+  IN PDEVICE_DESCRIPTION  DeviceDescription,
+  IN OUT PULONG  NumberOfMapRegisters);
+
+NTHALAPI
+ULONG
+NTAPI
+HalGetBusData(
+  IN BUS_DATA_TYPE  BusDataType,
+  IN ULONG  BusNumber,
+  IN ULONG  SlotNumber,
+  IN PVOID  Buffer,
+  IN ULONG  Length);
+
+NTHALAPI
+ULONG
+NTAPI
+HalGetBusDataByOffset(
+  IN BUS_DATA_TYPE  BusDataType,
+  IN ULONG  BusNumber,
+  IN ULONG  SlotNumber,
+  IN PVOID  Buffer,
+  IN ULONG  Offset,
+  IN ULONG  Length);
+
+NTHALAPI
+ULONG
+NTAPI
+HalGetDmaAlignmentRequirement(
+  VOID);
+
+NTHALAPI
+ULONG
+NTAPI
+HalGetInterruptVector(
+  IN INTERFACE_TYPE  InterfaceType,
+  IN ULONG  BusNumber,
+  IN ULONG  BusInterruptLevel,
+  IN ULONG  BusInterruptVector,
+  OUT PKIRQL  Irql,
+  OUT PKAFFINITY  Affinity);
+
+NTHALAPI
+ULONG
+NTAPI
+HalReadDmaCounter(
+  IN PADAPTER_OBJECT  AdapterObject);
+
+NTHALAPI
+ULONG
+NTAPI
+HalSetBusData(
+  IN BUS_DATA_TYPE  BusDataType,
+  IN ULONG  BusNumber,
+  IN ULONG  SlotNumber,
+  IN PVOID  Buffer,
+  IN ULONG  Length);
+
+NTHALAPI
+ULONG
+NTAPI
+HalSetBusDataByOffset(
+  IN BUS_DATA_TYPE  BusDataType,
+  IN ULONG  BusNumber,
+  IN ULONG  SlotNumber,
+  IN PVOID  Buffer,
+  IN ULONG  Offset,
+  IN ULONG  Length);
+
+NTHALAPI
+BOOLEAN
+NTAPI
+HalTranslateBusAddress(
+  IN INTERFACE_TYPE  InterfaceType,
+  IN ULONG  BusNumber,
+  IN PHYSICAL_ADDRESS  BusAddress,
+  IN OUT PULONG  AddressSpace,
+  OUT PPHYSICAL_ADDRESS  TranslatedAddress);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerEqualToZero(
+  IN LARGE_INTEGER  Operand);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerGreaterOrEqualToZero(
+  IN LARGE_INTEGER  Operand);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerGreaterThan(
+  IN LARGE_INTEGER  Operand1,
+  IN LARGE_INTEGER  Operand2);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerGreaterThanOrEqualTo(
+  IN LARGE_INTEGER  Operand1,
+  IN LARGE_INTEGER  Operand2);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerGreaterThanZero(
+  IN LARGE_INTEGER  Operand);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerLessOrEqualToZero(
+  IN LARGE_INTEGER  Operand);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerLessThan(
+  IN LARGE_INTEGER  Operand1,
+  IN LARGE_INTEGER  Operand2);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerLessThanOrEqualTo(
+  IN LARGE_INTEGER  Operand1,
+  IN LARGE_INTEGER  Operand2);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerLessThanZero(
+  IN LARGE_INTEGER  Operand);
+
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlLargeIntegerNegate(
+  IN LARGE_INTEGER  Subtrahend);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerNotEqualTo(
+  IN LARGE_INTEGER  Operand1,
+  IN LARGE_INTEGER  Operand2);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLargeIntegerNotEqualToZero(
+  IN LARGE_INTEGER  Operand);
+
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlLargeIntegerShiftLeft(
+  IN LARGE_INTEGER  LargeInteger,
+  IN CCHAR  ShiftCount);
+
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlLargeIntegerShiftRight(
+  IN LARGE_INTEGER  LargeInteger,
+  IN CCHAR  ShiftCount);
+
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlLargeIntegerSubtract(
+  IN LARGE_INTEGER  Minuend,
+  IN LARGE_INTEGER  Subtrahend);
+
+
+/*
+ * ULONG
+ * COMPUTE_PAGES_SPANNED(
+ *   IN PVOID  Va,
+ *   IN ULONG  Size)
+ */
+#define COMPUTE_PAGES_SPANNED(Va, \
+                              Size) \
+  (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
+
+
+/*
+** Architecture specific structures
+*/
+
+#ifdef _X86_
+
+NTKERNELAPI
+INTERLOCKED_RESULT
+FASTCALL
+Exfi386InterlockedIncrementLong(
+  IN PLONG  Addend);
+
+NTKERNELAPI
+INTERLOCKED_RESULT
+FASTCALL
+Exfi386InterlockedDecrementLong(
+  IN PLONG  Addend);
+
+NTKERNELAPI
+ULONG
+FASTCALL
+Exfi386InterlockedExchangeUlong(
+  IN PULONG  Target,
+  IN ULONG  Value);
+
+#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
+#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
+#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
+
+#endif /* _X86_ */
+    
+#ifdef _M_ARM
+//
+// NT-ARM is not documented
+//
+#include <armddk.h>   
+#endif
+
 #ifdef __cplusplus
 }
 #endif