[HEADERS]
[reactos.git] / reactos / include / psdk / winnt.h
index e7f8749..bd0fac1 100644 (file)
@@ -56,8 +56,9 @@ extern "C" {
 #include <string.h>
 
 /* FIXME: add more architectures. Is there a way to specify this in GCC? */
-#ifdef _X86_
-#define UNALIGNED
+#if defined(_M_AMD64)
+#undef UNALIGNED
+#define UNALIGNED __unaligned
 #else
 #define UNALIGNED
 #endif
@@ -70,11 +71,13 @@ extern "C" {
 #endif
 #endif
 
+/*#ifdef _WINE*/
 #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
 #define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
 #else
 #define __WINE_ALLOC_SIZE(x)
 #endif
+/*#endif*/
 
 #ifndef FORCEINLINE
 #if (_MSC_VER >= 1200)
@@ -103,7 +106,7 @@ extern "C" {
 #endif
 typedef char CHAR;
 typedef short SHORT;
-#ifndef __ROS_LONG64__
+#if !defined(__ROS_LONG64__) || defined(_M_AMD64)
 typedef long LONG;
 #else
 typedef int LONG;
@@ -195,7 +198,7 @@ typedef WORD LANGID;
 #endif
 #undef __int64
 #define __int64 long long
-#elif defined(__WATCOMC__) && (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64 )
+#elif (defined(__WATCOMC__) || defined(_MSC_VER)) && (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64 )
 #define _HAVE_INT64
 #endif /* __GNUC__/__WATCOMC */
 #if defined(_HAVE_INT64) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)
@@ -223,19 +226,20 @@ typedef BYTE FCHAR;
 typedef WORD FSHORT;
 typedef DWORD FLONG;
 
-#define __C_ASSERT_JOIN(X, Y) __C_ASSERT_DO_JOIN(X, Y)
-#define __C_ASSERT_DO_JOIN(X, Y) __C_ASSERT_DO_JOIN2(X, Y)
-#define __C_ASSERT_DO_JOIN2(X, Y) X##Y
-
-#define C_ASSERT(e) typedef char __C_ASSERT_JOIN(__C_ASSERT__, __LINE__)[(e) ? 1 : -1]
+#define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
 
-
-#ifdef __GNUC__
 #include "intrin.h"
-#endif
 
 #define NTAPI __stdcall
 #include <basetsd.h>
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4201)
+#pragma warning(disable:4214)
+#pragma warning(disable:4820)
+#endif
+
 #define ACE_OBJECT_TYPE_PRESENT           0x00000001
 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x00000002
 #define APPLICATION_ERROR_MASK       0x20000000
@@ -396,7 +400,7 @@ typedef DWORD FLONG;
 #define FILE_CREATE_TREE_CONNECTION    0x00000080
 #define FILE_COMPLETE_IF_OPLOCKED      0x00000100
 #define FILE_NO_EA_KNOWLEDGE           0x00000200
-#define FILE_OPEN_FOR_RECOVERY         0x00000400
+#define FILE_OPEN_REMOTE_INSTANCE      0x00000400
 #define FILE_RANDOM_ACCESS             0x00000800
 #define FILE_DELETE_ON_CLOSE           0x00001000
 #define FILE_OPEN_BY_FILE_ID           0x00002000
@@ -464,12 +468,9 @@ typedef DWORD FLONG;
 #define FILE_SUPPORTS_ENCRYPTION        0x00020000
 #define FILE_NAMED_STREAMS              0x00040000
 
-/* FIXME: Oh how I wish, I wish the w32api DDK wouldn't include winnt.h... */
-#ifndef _NTDDK_
 #define IO_COMPLETION_QUERY_STATE       0x0001
 #define IO_COMPLETION_MODIFY_STATE      0x0002
 #define IO_COMPLETION_ALL_ACCESS        (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
-#endif
 /* end ntifs.h */
 
 /* also in ddk/winddk.h */
@@ -479,8 +480,6 @@ typedef DWORD FLONG;
 
 #define MAILSLOT_NO_MESSAGE    ((DWORD)-1)
 #define MAILSLOT_WAIT_FOREVER  ((DWORD)-1)
-/* FIXME: Oh how I wish, I wish the w32api DDK wouldn't include winnt.h... */
-#ifndef _NTDDK_
 #define PROCESS_TERMINATE      1
 #define PROCESS_CREATE_THREAD  2
 #define PROCESS_SET_SESSIONID  4
@@ -494,23 +493,17 @@ typedef DWORD FLONG;
 #define PROCESS_SUSPEND_RESUME 2048
 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xFFF)
-#endif
 #define PROCESS_DUP_HANDLE     64
 #define THREAD_TERMINATE       1
 #define THREAD_SUSPEND_RESUME  2
 #define THREAD_GET_CONTEXT     8
 #define THREAD_SET_CONTEXT     16
 #define THREAD_SET_INFORMATION 32
-/* FIXME: Oh how I wish, I wish the w32api DDK wouldn't include winnt.h... */
-#ifndef _NTDDK_
 #define THREAD_QUERY_INFORMATION       64
 #define THREAD_SET_THREAD_TOKEN        128
 #define THREAD_IMPERSONATE     256
 #define THREAD_DIRECT_IMPERSONATION    0x200
-#endif
 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3FF)
-/* FIXME: Oh how I wish, I wish the w32api DDK wouldn't include winnt.h... */
-#ifndef _NTDDK_
 #define MUTANT_QUERY_STATE     0x0001
 #define MUTANT_ALL_ACCESS      (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
 #define TIMER_QUERY_STATE      0x0001
@@ -520,7 +513,6 @@ typedef DWORD FLONG;
 #define THREAD_BASE_PRIORITY_MAX       2
 #define THREAD_BASE_PRIORITY_MIN       (-2)
 #define THREAD_BASE_PRIORITY_IDLE      (-15)
-#endif
 /*
  * To prevent gcc compiler warnings, bracket these defines when initialising
  * a  SID_IDENTIFIER_AUTHORITY, eg.
@@ -738,8 +730,6 @@ typedef enum {
 #define SE_CHANGE_NOTIFY_NAME  TEXT("SeChangeNotifyPrivilege")
 #define SE_REMOTE_SHUTDOWN_NAME        TEXT("SeRemoteShutdownPrivilege")
 #define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
-/* FIXME: Oh how I wish, I wish the w32api DDK wouldn't include winnt.h... */
-#ifndef _NTDDK_
 #define SE_GROUP_MANDATORY 1
 #define SE_GROUP_ENABLED_BY_DEFAULT 2
 #define SE_GROUP_ENABLED 4
@@ -747,7 +737,6 @@ typedef enum {
 #define SE_GROUP_USE_FOR_DENY_ONLY 16
 #define SE_GROUP_LOGON_ID 3221225472U
 #define SE_GROUP_RESOURCE 536870912
-#endif
 #define LANG_NEUTRAL   0x00
 #define LANG_INVARIANT   0x7f
 #define LANG_AFRIKAANS   0x36
@@ -873,6 +862,19 @@ typedef enum {
 #define LANG_YI   0x78
 #define LANG_YORUBA   0x6a
 #define LANG_ZULU   0x35
+
+/* FIXME: non-standard */
+#define LANG_ESPERANTO      0x8f
+#define LANG_WALON          0x90
+#define LANG_CORNISH        0x91
+
+/* FIXME: not present in the official headers */
+#define LANG_GAELIC         0x94
+#define LANG_SAAMI          0x3b
+#define LANG_SUTU           0x30
+#define LANG_TSONGA         0x31
+#define LANG_VENDA          0x33
+
 #define SUBLANG_CUSTOM_UNSPECIFIED   0x04
 #define SUBLANG_CUSTOM_DEFAULT   0x03
 #define SUBLANG_UI_CUSTOM_DEFAULT   0x05
@@ -1122,6 +1124,7 @@ typedef enum {
 #define LANG_SYSTEM_DEFAULT    MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT)
 #define LANG_USER_DEFAULT      MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT)
 #define LOCALE_NEUTRAL MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT)
+#define LOCALE_INVARIANT MAKELCID(MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT)
 #define ACL_REVISION   2
 #define ACL_REVISION_DS 4
 #define ACL_REVISION1 1
@@ -1256,8 +1259,6 @@ typedef enum {
 #define MEM_WRITE_WATCH           0x200000 /* 98/Me */
 #define MEM_PHYSICAL      0x400000
 #define MEM_4MB_PAGES    0x80000000
-/* FIXME: Oh how I wish, I wish the w32api DDK wouldn't include winnt.h... */
-#ifndef _NTDDK_
 #define MEM_IMAGE        SEC_IMAGE
 #define SEC_NO_CHANGE  0x00400000
 #define SEC_FILE       0x00800000
@@ -1266,7 +1267,6 @@ typedef enum {
 #define SEC_RESERVE    0x04000000
 #define SEC_COMMIT     0x08000000
 #define SEC_NOCACHE    0x10000000
-#endif
 #define SECTION_EXTEND_SIZE 16
 #define SECTION_MAP_READ 4
 #define SECTION_MAP_WRITE 2
@@ -1274,13 +1274,15 @@ typedef enum {
 #define SECTION_MAP_EXECUTE 8
 #define SECTION_ALL_ACCESS 0xf001f
 #define WRITE_WATCH_FLAG_RESET 0x01
-#ifndef _NTDDK_
 #define MESSAGE_RESOURCE_UNICODE 1
-#endif
 #define RTL_CRITSECT_TYPE 0
 #define RTL_RESOURCE_TYPE 1
 /* Also in winddk.h */
-#define FIELD_OFFSET(t,f) ((LONG_PTR)&(((t*)0)->f))
+#if !defined(__GNUC__)
+#define FIELD_OFFSET(t,f) ((LONG)(LONG_PTR)&(((t*) 0)->f))
+#else
+#define FIELD_OFFSET(t,f) ((LONG)__builtin_offsetof(t,f))
+#endif
 #ifndef CONTAINING_RECORD
 #define CONTAINING_RECORD(address, type, field) \
   ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
@@ -1902,8 +1904,6 @@ typedef struct _GENERIC_MAPPING {
        ACCESS_MASK GenericExecute;
        ACCESS_MASK GenericAll;
 } GENERIC_MAPPING, *PGENERIC_MAPPING;
-/* Sigh..when will they learn... */
-#ifndef _NTDDK_
 typedef struct _ACE_HEADER {
        BYTE AceType;
        BYTE AceFlags;
@@ -2024,7 +2024,6 @@ typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
        GUID InheritedObjectType;
        DWORD SidStart;
 } SYSTEM_ALARM_CALLBACK_OBJECT_ACE, *PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
-#endif
 typedef struct _ACL {
        BYTE AclRevision;
        BYTE Sbz1;
@@ -2811,6 +2810,10 @@ typedef struct _CONTEXT {
 } CONTEXT;
 #elif defined(ARM)
 
+#ifndef PAGE_SIZE
+#define PAGE_SIZE                         0x1000 // FIXME: This should probably go elsewhere
+#endif
+
 /* The following flags control the contents of the CONTEXT structure. */
 
 #define CONTEXT_ARM    0x0000040
@@ -2934,12 +2937,14 @@ typedef union _ULARGE_INTEGER {
 typedef struct _LUID {
     LARGE_INTEGER_ORDER(LONG)
 } LUID, *PLUID;
-#pragma pack(push,4)
+
+#include <pshpack4.h>
 typedef struct _LUID_AND_ATTRIBUTES {
        LUID   Luid;
        DWORD  Attributes;
 } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
-#pragma pack(pop)
+#include <poppack.h>
+
 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
 typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
 typedef struct _PRIVILEGE_SET {
@@ -2972,8 +2977,6 @@ typedef struct _SE_IMPERSONATION_STATE {
        BOOLEAN EffectiveOnly;
        SECURITY_IMPERSONATION_LEVEL Level;
 } SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
-/* Steven you are my hero when you fix the w32api ddk! */
-#if !defined(_NTDDK_)
 typedef struct _SID_IDENTIFIER_AUTHORITY {
        BYTE Value[6];
 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
@@ -3038,6 +3041,8 @@ typedef enum tagTOKEN_TYPE {
        TokenPrimary = 1,
        TokenImpersonation
 } TOKEN_TYPE,*PTOKEN_TYPE;
+
+#include <pshpack4.h>
 typedef struct _TOKEN_STATISTICS {
        LUID TokenId;
        LUID AuthenticationId;
@@ -3050,6 +3055,8 @@ typedef struct _TOKEN_STATISTICS {
        DWORD PrivilegeCount;
        LUID ModifiedId;
 } TOKEN_STATISTICS, *PTOKEN_STATISTICS;
+#include <poppack.h>
+
 typedef struct _TOKEN_USER {
        SID_AND_ATTRIBUTES User;
 } TOKEN_USER, *PTOKEN_USER;
@@ -3078,14 +3085,39 @@ typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
     DWORD Sacl;
     DWORD Dacl;
 } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
+
 typedef enum _TOKEN_INFORMATION_CLASS {
-       TokenUser=1,TokenGroups,TokenPrivileges,TokenOwner,
-       TokenPrimaryGroup,TokenDefaultDacl,TokenSource,TokenType,
-       TokenImpersonationLevel,TokenStatistics,TokenRestrictedSids,
-       TokenSessionId,TokenGroupsAndPrivileges,TokenSessionReference,
-       TokenSandBoxInert,TokenAuditPolicy,TokenOrigin,
+  TokenUser = 1,
+  TokenGroups,
+  TokenPrivileges,
+  TokenOwner,
+  TokenPrimaryGroup,
+  TokenDefaultDacl,
+  TokenSource,
+  TokenType,
+  TokenImpersonationLevel,
+  TokenStatistics,
+  TokenRestrictedSids,
+  TokenSessionId,
+  TokenGroupsAndPrivileges,
+  TokenSessionReference,
+  TokenSandBoxInert,
+  TokenAuditPolicy,
+  TokenOrigin,
+  TokenElevationType,
+  TokenLinkedToken,
+  TokenElevation,
+  TokenHasRestrictions,
+  TokenAccessInformation,
+  TokenVirtualizationAllowed,
+  TokenVirtualizationEnabled,
+  TokenIntegrityLevel,
+  TokenUIAccess,
+  TokenMandatoryPolicy,
+  TokenLogonSid,
+  MaxTokenInfoClass
 } TOKEN_INFORMATION_CLASS;
-#endif
+
 typedef enum _SID_NAME_USE {
        SidTypeUser=1,SidTypeGroup,SidTypeDomain,SidTypeAlias,
        SidTypeWellKnownGroup,SidTypeDeletedAccount,SidTypeInvalid,
@@ -3172,13 +3204,11 @@ typedef struct _TAPE_CREATE_PARTITION {
        DWORD Count;
        DWORD Size;
 } TAPE_CREATE_PARTITION,*PTAPE_CREATE_PARTITION;
-/* Sigh..when will they learn... */
-#ifndef _NTDDK_
 typedef struct _MEMORY_BASIC_INFORMATION {
        PVOID BaseAddress;
        PVOID AllocationBase;
        DWORD AllocationProtect;
-       DWORD RegionSize;
+       SIZE_T RegionSize;
        DWORD State;
        DWORD Protect;
        DWORD Type;
@@ -3197,29 +3227,73 @@ typedef struct _MESSAGE_RESOURCE_DATA {
        DWORD NumberOfBlocks;
        MESSAGE_RESOURCE_BLOCK Blocks[1];
 } MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
-#endif
 typedef struct _LIST_ENTRY {
        struct _LIST_ENTRY *Flink;
        struct _LIST_ENTRY *Blink;
 } LIST_ENTRY,*PLIST_ENTRY;
+typedef struct _LIST_ENTRY32 {
+       DWORD Flink;
+       DWORD Blink;
+} LIST_ENTRY32,*PLIST_ENTRY32;
+typedef struct _LIST_ENTRY64 {
+       ULONGLONG Flink;
+       ULONGLONG Blink;
+} LIST_ENTRY64,*PLIST_ENTRY64;
+
 typedef struct _SINGLE_LIST_ENTRY {
        struct _SINGLE_LIST_ENTRY *Next;
 } SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
 
+//
+// Slist Header
+//
 #ifndef _SLIST_HEADER_
 #define _SLIST_HEADER_
+
+#if defined(_WIN64)
+typedef struct _SLIST_ENTRY *PSLIST_ENTRY;
+typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
+       PSLIST_ENTRY Next;
+} SLIST_ENTRY;
+typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {
+    struct {
+        ULONGLONG Alignment;
+        ULONGLONG Region;
+    } DUMMYSTRUCTNAME;
+    struct {
+        ULONGLONG Depth:16;
+        ULONGLONG Sequence:9;
+        ULONGLONG NextEntry:39;
+        ULONGLONG HeaderType:1;
+        ULONGLONG Init:1;
+        ULONGLONG Reserved:59;
+        ULONGLONG Region:3;
+    } Header8;
+    struct {
+        ULONGLONG Depth:16;
+        ULONGLONG Sequence:48;
+        ULONGLONG HeaderType:1;
+        ULONGLONG Init:1;
+        ULONGLONG Reserved:2;
+        ULONGLONG NextEntry:60;
+    } Header16;
+} SLIST_HEADER, *PSLIST_HEADER;
+#else
 #define SLIST_ENTRY SINGLE_LIST_ENTRY
 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
 typedef union _SLIST_HEADER {
-       ULONGLONG Alignment;
-       _ANONYMOUS_STRUCT struct {
-               SLIST_ENTRY Next;
-               WORD Depth;
-               WORD Sequence;
-       } DUMMYSTRUCTNAME;
-} SLIST_HEADER,*PSLIST_HEADER;
-#endif /* !_SLIST_HEADER_ */
+    ULONGLONG Alignment;
+    struct {
+        SLIST_ENTRY Next;
+        USHORT Depth;
+        USHORT Sequence;
+    } DUMMYSTRUCTNAME;
+} SLIST_HEADER, *PSLIST_HEADER;
+#endif
+
+#endif /* _SLIST_HEADER_ */
+
 
 NTSYSAPI
 VOID
@@ -3264,8 +3338,6 @@ RtlQueryDepthSList (
     IN PSLIST_HEADER ListHead
     );
 
-/* FIXME: Please oh please stop including winnt.h from the DDK... */
-#ifndef _NTDDK_
 typedef struct _RTL_CRITICAL_SECTION_DEBUG {
        WORD Type;
        WORD CreatorBackTraceIndex;
@@ -3285,7 +3357,6 @@ typedef struct _RTL_CRITICAL_SECTION {
        HANDLE LockSemaphore;
        ULONG_PTR SpinCount;
 } RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;
-#endif
 
 NTSYSAPI
 WORD
@@ -3358,6 +3429,7 @@ typedef struct _EVENTLOGRECORD {
        DWORD DataLength;
        DWORD DataOffset;
 } EVENTLOGRECORD,*PEVENTLOGRECORD;
+
 typedef struct _OSVERSIONINFOA {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
@@ -3366,6 +3438,7 @@ typedef struct _OSVERSIONINFOA {
        DWORD dwPlatformId;
        CHAR szCSDVersion[128];
 } OSVERSIONINFOA,*POSVERSIONINFOA,*LPOSVERSIONINFOA;
+
 typedef struct _OSVERSIONINFOW {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
@@ -3374,6 +3447,7 @@ typedef struct _OSVERSIONINFOW {
        DWORD dwPlatformId;
        WCHAR szCSDVersion[128];
 } OSVERSIONINFOW,*POSVERSIONINFOW,*LPOSVERSIONINFOW;
+
 typedef struct _OSVERSIONINFOEXA {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
@@ -3387,6 +3461,7 @@ typedef struct _OSVERSIONINFOEXA {
        BYTE wProductType;
        BYTE wReserved;
 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+
 typedef struct _OSVERSIONINFOEXW {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
@@ -3400,7 +3475,8 @@ typedef struct _OSVERSIONINFOEXW {
        BYTE wProductType;
        BYTE wReserved;
 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
-#pragma pack(push,2)
+
+#include <pshpack2.h>
 typedef struct _IMAGE_VXD_HEADER {
        WORD e32_magic;
        BYTE e32_border;
@@ -3454,8 +3530,8 @@ typedef struct _IMAGE_VXD_HEADER {
        WORD e32_devid;
        WORD e32_ddkver;
 } IMAGE_VXD_HEADER,*PIMAGE_VXD_HEADER;
-#pragma pack(pop)
-#pragma pack(push,4)
+#include <poppack.h>
+
 typedef struct _IMAGE_FILE_HEADER {
        WORD Machine;
        WORD NumberOfSections;
@@ -3465,10 +3541,12 @@ typedef struct _IMAGE_FILE_HEADER {
        WORD SizeOfOptionalHeader;
        WORD Characteristics;
 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
+
 typedef struct _IMAGE_DATA_DIRECTORY {
        DWORD VirtualAddress;
        DWORD Size;
 } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
+
 typedef struct _IMAGE_OPTIONAL_HEADER32 {
        WORD Magic;
        BYTE MajorLinkerVersion;
@@ -3502,6 +3580,7 @@ typedef struct _IMAGE_OPTIONAL_HEADER32 {
        DWORD NumberOfRvaAndSizes;
        IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
 } IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
+
 typedef struct _IMAGE_OPTIONAL_HEADER64 {
        WORD Magic;
        BYTE MajorLinkerVersion;
@@ -3534,6 +3613,7 @@ typedef struct _IMAGE_OPTIONAL_HEADER64 {
        DWORD NumberOfRvaAndSizes;
        IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
 } IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
+
 typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
        WORD Magic;
        BYTE MajorLinkerVersion;
@@ -3549,8 +3629,8 @@ typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
        DWORD CprMask[4];
        DWORD GpValue;
 } IMAGE_ROM_OPTIONAL_HEADER,*PIMAGE_ROM_OPTIONAL_HEADER;
-#pragma pack(pop)
-#pragma pack(push,2)
+
+#include <pshpack2.h>
 typedef struct _IMAGE_DOS_HEADER {
        WORD e_magic;
        WORD e_cblp;
@@ -3572,6 +3652,7 @@ typedef struct _IMAGE_DOS_HEADER {
        WORD e_res2[10];
        LONG e_lfanew;
 } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
+
 typedef struct _IMAGE_OS2_HEADER {
        WORD ne_magic;
        CHAR ne_ver;
@@ -3604,18 +3685,20 @@ typedef struct _IMAGE_OS2_HEADER {
        WORD ne_swaparea;
        WORD ne_expver;
 } IMAGE_OS2_HEADER,*PIMAGE_OS2_HEADER;
-#pragma pack(pop)
-#pragma pack(push,4)
+#include <poppack.h>
+
 typedef struct _IMAGE_NT_HEADERS32 {
        DWORD Signature;
        IMAGE_FILE_HEADER FileHeader;
        IMAGE_OPTIONAL_HEADER32 OptionalHeader;
 } IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;
+
 typedef struct _IMAGE_NT_HEADERS64 {
        DWORD Signature;
        IMAGE_FILE_HEADER FileHeader;
        IMAGE_OPTIONAL_HEADER64 OptionalHeader;
 } IMAGE_NT_HEADERS64,*PIMAGE_NT_HEADERS64;
+
 #ifdef _WIN64
 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
@@ -3627,10 +3710,12 @@ typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
 #endif
+
 typedef struct _IMAGE_ROM_HEADERS {
        IMAGE_FILE_HEADER FileHeader;
        IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
 } IMAGE_ROM_HEADERS,*PIMAGE_ROM_HEADERS;
+
 typedef struct _IMAGE_SECTION_HEADER {
        BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
        union {
@@ -3646,8 +3731,8 @@ typedef struct _IMAGE_SECTION_HEADER {
        WORD NumberOfLinenumbers;
        DWORD Characteristics;
 } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
-#pragma pack(pop)
-#pragma pack(push,2)
+
+#include <pshpack2.h>
 typedef struct _IMAGE_SYMBOL {
        union {
                BYTE ShortName[8];
@@ -3663,6 +3748,15 @@ typedef struct _IMAGE_SYMBOL {
        BYTE StorageClass;
        BYTE NumberOfAuxSymbols;
 } IMAGE_SYMBOL,*PIMAGE_SYMBOL;
+
+typedef struct _IMAGE_LINENUMBER {
+       union {
+               DWORD SymbolTableIndex;
+               DWORD VirtualAddress;
+       } Type;
+       WORD Linenumber;
+} IMAGE_LINENUMBER,*PIMAGE_LINENUMBER;
+
 typedef union _IMAGE_AUX_SYMBOL {
        struct {
                DWORD TagIndex;
@@ -3763,6 +3857,7 @@ typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
        DWORD RvaToFirstByteOfData;
        DWORD RvaToLastByteOfData;
 } IMAGE_COFF_SYMBOLS_HEADER,*PIMAGE_COFF_SYMBOLS_HEADER;
+
 typedef struct _IMAGE_RELOCATION {
        _ANONYMOUS_UNION union {
                DWORD VirtualAddress;
@@ -3771,23 +3866,13 @@ typedef struct _IMAGE_RELOCATION {
        DWORD SymbolTableIndex;
        WORD Type;
 } IMAGE_RELOCATION,*PIMAGE_RELOCATION;
-#pragma pack(pop)
-#pragma pack(push,4)
+#include <poppack.h>
+
 typedef struct _IMAGE_BASE_RELOCATION {
        DWORD VirtualAddress;
        DWORD SizeOfBlock;
 } IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
-#pragma pack(pop)
-#pragma pack(push,2)
-typedef struct _IMAGE_LINENUMBER {
-       union {
-               DWORD SymbolTableIndex;
-               DWORD VirtualAddress;
-       } Type;
-       WORD Linenumber;
-} IMAGE_LINENUMBER,*PIMAGE_LINENUMBER;
-#pragma pack(pop)
-#pragma pack(push,4)
+
 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
        BYTE Name[16];
        BYTE Date[12];
@@ -3797,6 +3882,7 @@ typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
        BYTE Size[10];
        BYTE EndHeader[2];
 } IMAGE_ARCHIVE_MEMBER_HEADER,*PIMAGE_ARCHIVE_MEMBER_HEADER;
+
 typedef struct _IMAGE_EXPORT_DIRECTORY {
        DWORD Characteristics;
        DWORD TimeDateStamp;
@@ -3810,11 +3896,13 @@ typedef struct _IMAGE_EXPORT_DIRECTORY {
        DWORD AddressOfNames;
        DWORD AddressOfNameOrdinals;
 } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
+
 typedef struct _IMAGE_IMPORT_BY_NAME {
        WORD Hint;
        BYTE Name[1];
 } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
-#include "pshpack8.h"
+
+#include <pshpack8.h>
 typedef struct _IMAGE_THUNK_DATA64 {
     union {
         ULONGLONG ForwarderString;
@@ -3824,7 +3912,7 @@ typedef struct _IMAGE_THUNK_DATA64 {
     } u1;
 } IMAGE_THUNK_DATA64;
 typedef IMAGE_THUNK_DATA64 *PIMAGE_THUNK_DATA64;
-#include "poppack.h"
+#include <poppack.h>
 
 typedef struct _IMAGE_THUNK_DATA32 {
     union {
@@ -3893,16 +3981,19 @@ typedef struct _IMAGE_IMPORT_DESCRIPTOR {
        DWORD Name;
        ULONG FirstThunk;
 } IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
+
 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
        DWORD TimeDateStamp;
        WORD OffsetModuleName;
        WORD NumberOfModuleForwarderRefs;
 } IMAGE_BOUND_IMPORT_DESCRIPTOR,*PIMAGE_BOUND_IMPORT_DESCRIPTOR;
+
 typedef struct _IMAGE_BOUND_FORWARDER_REF {
        DWORD TimeDateStamp;
        WORD OffsetModuleName;
        WORD Reserved;
 } IMAGE_BOUND_FORWARDER_REF,*PIMAGE_BOUND_FORWARDER_REF;
+
 typedef struct _IMAGE_RESOURCE_DIRECTORY {
        DWORD Characteristics;
        DWORD TimeDateStamp;
@@ -3931,20 +4022,24 @@ _ANONYMOUS_STRUCT typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
                } DUMMYSTRUCTNAME3;
        } DUMMYUNIONNAME2;
 } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
+
 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
        WORD Length;
        CHAR NameString[1];
 } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
+
 typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
        WORD Length;
        WCHAR NameString[1];
 } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
+
 typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
        DWORD OffsetToData;
        DWORD Size;
        DWORD CodePage;
        DWORD Reserved;
 } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
+
 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
     DWORD Size;
     DWORD TimeDateStamp;
@@ -3967,6 +4062,7 @@ typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
     DWORD SEHandlerTable;
     DWORD SEHandlerCount;
 } IMAGE_LOAD_CONFIG_DIRECTORY,*PIMAGE_LOAD_CONFIG_DIRECTORY;
+
 typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
        DWORD BeginAddress;
        DWORD EndAddress;
@@ -3974,6 +4070,7 @@ typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
        PVOID HandlerData;
        DWORD PrologEndAddress;
 } IMAGE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_RUNTIME_FUNCTION_ENTRY;
+
 typedef struct _IMAGE_DEBUG_DIRECTORY {
        DWORD Characteristics;
        DWORD TimeDateStamp;
@@ -3984,6 +4081,7 @@ typedef struct _IMAGE_DEBUG_DIRECTORY {
        DWORD AddressOfRawData;
        DWORD PointerToRawData;
 } IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
+
 typedef struct _FPO_DATA {
        DWORD ulOffStart;
        DWORD cbProcSize;
@@ -3996,6 +4094,7 @@ typedef struct _FPO_DATA {
        WORD reserved:1;
        WORD cbFrame:2;
 } FPO_DATA,*PFPO_DATA;
+
 typedef struct _IMAGE_DEBUG_MISC {
        DWORD DataType;
        DWORD Length;
@@ -4003,11 +4102,13 @@ typedef struct _IMAGE_DEBUG_MISC {
        BYTE Reserved[3];
        BYTE Data[1];
 } IMAGE_DEBUG_MISC,*PIMAGE_DEBUG_MISC;
+
 typedef struct _IMAGE_FUNCTION_ENTRY {
        DWORD StartingAddress;
        DWORD EndingAddress;
        DWORD EndOfPrologue;
 } IMAGE_FUNCTION_ENTRY,*PIMAGE_FUNCTION_ENTRY;
+
 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
        WORD Signature;
        WORD Flags;
@@ -4023,7 +4124,7 @@ typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
        DWORD SectionAlignment;
        DWORD Reserved[2];
 } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
-#pragma pack(pop)
+
 typedef enum _CM_SERVICE_NODE_TYPE {
        DriverType=SERVICE_KERNEL_DRIVER,
        FileSystemType=SERVICE_FILE_SYSTEM_DRIVER,
@@ -4032,6 +4133,7 @@ typedef enum _CM_SERVICE_NODE_TYPE {
        AdapterType=SERVICE_ADAPTER,
        RecognizerType=SERVICE_RECOGNIZER_DRIVER
 } SERVICE_NODE_TYPE;
+
 typedef enum _CM_SERVICE_LOAD_TYPE {
        BootLoad=SERVICE_BOOT_START,
        SystemLoad=SERVICE_SYSTEM_START,
@@ -4039,12 +4141,14 @@ typedef enum _CM_SERVICE_LOAD_TYPE {
        DemandLoad=SERVICE_DEMAND_START,
        DisableLoad=SERVICE_DISABLED
 } SERVICE_LOAD_TYPE;
+
 typedef enum _CM_ERROR_CONTROL_TYPE {
        IgnoreError=SERVICE_ERROR_IGNORE,
        NormalError=SERVICE_ERROR_NORMAL,
        SevereError=SERVICE_ERROR_SEVERE,
        CriticalError=SERVICE_ERROR_CRITICAL
 } SERVICE_ERROR_TYPE;
+
 typedef struct _NT_TIB {
        struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
        PVOID StackBase;
@@ -4057,6 +4161,33 @@ typedef struct _NT_TIB {
        PVOID ArbitraryUserPointer;
        struct _NT_TIB *Self;
 } NT_TIB,*PNT_TIB;
+
+typedef struct _NT_TIB32 {
+       DWORD ExceptionList;
+       DWORD StackBase;
+       DWORD StackLimit;
+       DWORD SubSystemTib;
+       union {
+               DWORD FiberData;
+               DWORD Version;
+       };
+       DWORD ArbitraryUserPointer;
+       DWORD Self;
+} NT_TIB32,*PNT_TIB32;
+
+typedef struct _NT_TIB64 {
+       DWORD64 ExceptionList;
+       DWORD64 StackBase;
+       DWORD64 StackLimit;
+       DWORD64 SubSystemTib;
+       union {
+               DWORD64 FiberData;
+               DWORD Version;
+       };
+       DWORD64 ArbitraryUserPointer;
+       DWORD64 Self;
+} NT_TIB64,*PNT_TIB64;
+
 typedef struct _REPARSE_GUID_DATA_BUFFER {
        DWORD  ReparseTag;
        WORD   ReparseDataLength;
@@ -4066,6 +4197,7 @@ typedef struct _REPARSE_GUID_DATA_BUFFER {
                BYTE   DataBuffer[1];
        } GenericReparseBuffer;
 } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
+
 typedef struct _REPARSE_POINT_INFORMATION {
        WORD   ReparseDataLength;
        WORD   UnparsedNameLength;
@@ -4121,8 +4253,6 @@ typedef union _FILE_SEGMENT_ELEMENT {
 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT   9
 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT       10
 
-/* FIXME: Oh how I wish, I wish the w32api DDK wouldn't include winnt.h... */
-#ifndef _NTDDK_
 #define JOB_OBJECT_ASSIGN_PROCESS           1
 #define JOB_OBJECT_SET_ATTRIBUTES           2
 #define JOB_OBJECT_QUERY                    4
@@ -4150,7 +4280,6 @@ typedef struct _JOB_SET_ARRAY
     DWORD MemberLevel;
     DWORD Flags;
 } JOB_SET_ARRAY, *PJOB_SET_ARRAY;
-#endif
 
 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
        LARGE_INTEGER TotalUserTime;
@@ -4173,16 +4302,17 @@ typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
        DWORD PriorityClass;
        DWORD SchedulingClass;
 } JOBOBJECT_BASIC_LIMIT_INFORMATION,*PJOBOBJECT_BASIC_LIMIT_INFORMATION;
+
 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {
        DWORD NumberOfAssignedProcesses;
        DWORD NumberOfProcessIdsInList;
        ULONG_PTR ProcessIdList[1];
 } JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST;
+
 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
        DWORD UIRestrictionsClass;
 } JOBOBJECT_BASIC_UI_RESTRICTIONS,*PJOBOBJECT_BASIC_UI_RESTRICTIONS;
-/* Steven you are my hero when you fix the w32api ddk! */
-#ifndef _NTDDK_
+
 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
        DWORD SecurityLimitFlags;
        HANDLE JobToken;
@@ -4190,18 +4320,21 @@ typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
        PTOKEN_PRIVILEGES PrivilegesToDelete;
        PTOKEN_GROUPS RestrictedSids;
 } JOBOBJECT_SECURITY_LIMIT_INFORMATION,*PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
-#endif
+
 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
        DWORD EndOfJobTimeAction;
 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION,*PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
+
 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
        PVOID CompletionKey;
        HANDLE CompletionPort;
 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT,*PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
+
 typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
        JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
        IO_COUNTERS IoInfo;
 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
+
 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
        JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
        IO_COUNTERS IoInfo;
@@ -4210,6 +4343,7 @@ typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
        SIZE_T PeakProcessMemoryUsed;
        SIZE_T PeakJobMemoryUsed;
 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION,*PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
+
 typedef struct _JOBOBJECT_JOBSET_INFORMATION {
        DWORD MemberLevel;
 } JOBOBJECT_JOBSET_INFORMATION,*PJOBOBJECT_JOBSET_INFORMATION;
@@ -4381,7 +4515,6 @@ typedef struct _SYSTEM_BATTERY_STATE {
        ULONG  DefaultAlert2;
 } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
 
-#ifndef _NTDDK_ /* HACK!!! ntddk.h shouldn't include winnt.h! */
 typedef struct _PROCESSOR_POWER_INFORMATION {
        ULONG Number;
        ULONG MaxMhz;
@@ -4390,7 +4523,6 @@ typedef struct _PROCESSOR_POWER_INFORMATION {
        ULONG MaxIdleState;
        ULONG CurrentIdleState;
 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
-#endif
 
 typedef DWORD EXECUTION_STATE;
 typedef enum _POWER_INFORMATION_LEVEL {
@@ -4549,7 +4681,9 @@ typedef OSVERSIONINFOA OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
 typedef OSVERSIONINFOEXA OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
 #endif
 
-#if (WIN32_WINNT >= 0x0500)
+#define VER_SET_CONDITION(lc,t,c) ((lc) = VerSetConditionMask((lc),(t),(c)))
+
+#if (_WIN32_WINNT >= 0x0500)
 ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
 #endif
 
@@ -4658,19 +4792,24 @@ RtlCompareMemory (
 
 FORCEINLINE
 PVOID
-RtlSecureZeroMemory(IN PVOID ptr,
-                    IN SIZE_T cnt)
+RtlSecureZeroMemory(IN PVOID Buffer,
+                    IN SIZE_T Length)
 {
-    volatile char *vptr = (volatile char *)ptr;
+    volatile char *VolatilePointer;
 
-    while (cnt)
+    /* Get a volatile pointer to prevent any compiler optimizations */
+    VolatilePointer = (volatile char *)Buffer;
+
+    /* Loop the whole buffer */
+    while (Length)
     {
-        *vptr = 0;
-        vptr++;
-        cnt--;
+        /* Zero the current byte and move on */
+        *VolatilePointer++ = 0;
+        Length--;
     }
 
-    return ptr;
+    /* Return the pointer to ensure the compiler won't optimize this away */
+    return Buffer;
 }
 
 typedef struct _OBJECT_TYPE_LIST {
@@ -4724,9 +4863,7 @@ static __inline__ PVOID GetCurrentFiber(void)
 }
 #endif
 
-/* FIXME: Oh how I wish, I wish the w32api DDK wouldn't include winnt.h... */
-#ifndef _NTDDK_
-#ifdef _M_IX86
+#if defined(_M_IX86)
 static __inline__ struct _TEB * NtCurrentTeb(void)
 {
     struct _TEB *ret;
@@ -4739,26 +4876,24 @@ static __inline__ struct _TEB * NtCurrentTeb(void)
 
     return ret;
 }
-#elif _M_ARM
+#elif defined(_M_ARM)
 
 //
 // NT-ARM is not documented
 //
-#define KIRQL ULONG // Hack!
 #include <armddk.h>
 
-#elif defined (_M_AMD64)
+#elif defined(_M_AMD64)
 FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
 {
     return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self));
 }
-#else
+#elif defined(_M_PPC)
 static __inline__ struct _TEB * NtCurrentTeb(void)
 {
     return __readfsdword_winnt(0x18);
 }
-#endif
-#elif defined(_M_PPC)
+#else
 static __inline__ struct _TEB * NtCurrentTeb(void)
 {
     return __readfsdword_winnt(0x18);
@@ -4783,9 +4918,6 @@ extern struct _TEB * NtCurrentTeb(void);
 
 #if (_MSC_FULL_VER >= 13012035)
 
-DWORD __readfsdword(DWORD);
-#pragma intrinsic(__readfsdword)
-
 __inline PVOID GetCurrentFiber(void) { return (PVOID)(ULONG_PTR)__readfsdword(0x10); }
 __inline struct _TEB * NtCurrentTeb(void) { return (struct _TEB *)(ULONG_PTR)__readfsdword(0x18); }
 
@@ -4904,9 +5036,19 @@ MemoryBarrier(VOID)
 #endif
 
 #if defined(_M_IX86)
+#ifdef _MSC_VER
+#pragma intrinsic(_mm_pause)
+#define YieldProcessor _mm_pause
+#else
 #define YieldProcessor() __asm__ __volatile__("pause");
+#endif
 #elif defined (_M_AMD64)
+#ifdef _MSC_VER
+#pragma intrinsic(_mm_pause)
+#define YieldProcessor _mm_pause
+#else
 #define YieldProcessor() __asm__ __volatile__("pause");
+#endif
 #elif defined(_M_PPC)
 #define YieldProcessor() __asm__ __volatile__("nop");
 #elif defined(_M_MIPS)
@@ -4943,6 +5085,10 @@ MemoryBarrier(VOID)
 
 #endif
 
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
 #endif /* RC_INVOKED */
 
 #ifdef __cplusplus