Sync to trunk head (r42241)
[reactos.git] / reactos / include / psdk / winnt.h
index 96f067c..8cf8755 100644 (file)
@@ -1,27 +1,24 @@
 #ifndef _WINNT_H
 #define _WINNT_H
-#if __GNUC__ >= 3
-#pragma GCC system_header
+
+#ifndef _M_AMD64
+#if !defined(__ROS_LONG64__)
+#ifdef __WINESRC__
+#define __ROS_LONG64__
+#endif
+#endif
 #endif
 
-/* translate GCC target defines to MS equivalents. Keep this synchronized
-   with windows.h. */
-#if defined(__i686__) && !defined(_M_IX86)
-#define _M_IX86 600
-#elif defined(__i586__) && !defined(_M_IX86)
-#define _M_IX86 500
-#elif defined(__i486__) && !defined(_M_IX86)
-#define _M_IX86 400
-#elif defined(__i386__) && !defined(_M_IX86)
-#define _M_IX86 300
+#ifdef __GNUC__
+#include <msvctarget.h>
 #endif
+
 #if defined(_M_IX86) && !defined(_X86_)
 #define _X86_
 #elif defined(_M_ALPHA) && !defined(_ALPHA_)
 #define _ALPHA_
-
-#elif defined(_M_ARM) && !defined(ARM)
-#define ARM
+#elif defined(_M_ARM) && !defined(_ARM_)
+#define _ARM_
 #elif defined(_M_PPC) && !defined(_PPC_)
 #define _PPC_
 #elif defined(_M_MRX000) && !defined(_MIPS_)
 extern "C" {
 #endif
 
+#include <excpt.h>
 #include <basetsd.h>
 #include <guiddef.h>
 
-#ifndef __cplusplus
-    typedef unsigned short wchar_t;
-#endif
-
 #include <ctype.h>
 #undef __need_wchar_t
 
@@ -67,6 +61,7 @@ extern "C" {
 #ifdef _X86_
 #define UNALIGNED
 #else
+#undef UNALIGNED
 #define UNALIGNED
 #endif
 
@@ -78,6 +73,14 @@ 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)
 #define FORCEINLINE __forceinline
@@ -105,17 +108,13 @@ extern "C" {
 #endif
 typedef char CHAR;
 typedef short SHORT;
-#ifndef LONG_DEFINED
-#define LONG_DEFINED
-       typedef long LONG;
-       typedef unsigned long ULONG,*PULONG;
-#endif//LONG_DEFINED
+#ifndef __ROS_LONG64__
+typedef long LONG;
+#else
+typedef int LONG;
+#endif
 typedef char CCHAR, *PCCHAR;
-typedef unsigned char UCHAR,*PUCHAR;
-typedef unsigned short USHORT,*PUSHORT;
-typedef char *PSZ;
-
-typedef void *PVOID,*LPVOID;
+typedef void *PVOID;
 
 /* FIXME for __WIN64 */
 #ifndef  __ptr64
@@ -148,41 +147,39 @@ typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR;
 typedef CONST WCHAR *LPCWCH,*PCWCH,*LPCWSTR,*PCWSTR;
 typedef CHAR *PCHAR,*LPCH,*PCH,*NPSTR,*LPSTR,*PSTR;
 typedef CONST CHAR *LPCCH,*PCCH,*PCSTR,*LPCSTR;
+typedef PWSTR *PZPWSTR;
+typedef CONST PWSTR *PCZPWSTR;
+typedef WCHAR UNALIGNED *LPUWSTR,*PUWSTR;
+typedef PCWSTR *PZPCWSTR;
+typedef CONST WCHAR UNALIGNED *LPCUWSTR,*PCUWSTR;
+typedef PSTR *PZPSTR;
+typedef CONST PSTR *PCZPSTR;
+typedef PCSTR *PZPCSTR;
+
+#ifdef UNICODE
 #ifndef _TCHAR_DEFINED
 #define _TCHAR_DEFINED
-#ifdef UNICODE
-/*
- * NOTE: This tests UNICODE, which is different from the _UNICODE define
- *       used to differentiate standard C runtime calls.
- */
-typedef WCHAR TCHAR;
-typedef WCHAR _TCHAR;
-#else
-typedef CHAR TCHAR;
-typedef CHAR _TCHAR;
+  typedef WCHAR TCHAR,*PTCHAR;
+  typedef WCHAR TBYTE ,*PTBYTE;
 #endif
-#endif
-typedef TCHAR TBYTE,*PTCH,*PTBYTE;
-typedef TCHAR *LPTCH,*PTSTR,*LPTSTR,*LP,*PTCHAR;
-typedef const TCHAR *LPCTSTR;
-#ifdef UNICODE
-/*
- * __TEXT is a private macro whose specific use is to force the expansion of a
- * macro passed as an argument to the macro TEXT.  DO NOT use this
- * macro within your programs.  It's name and function could change without
- * notice.
- */
-#define __TEXT(q) L##q
+  typedef LPWSTR LPTCH,PTCH,PTSTR,LPTSTR,LP;
+  typedef LPCWSTR PCTSTR,LPCTSTR;
+  typedef LPUWSTR PUTSTR,LPUTSTR;
+  typedef LPCUWSTR PCUTSTR,LPCUTSTR;
+#define __TEXT(quote) L##quote
 #else
-#define __TEXT(q) q
+#ifndef _TCHAR_DEFINED
+#define _TCHAR_DEFINED
+  typedef char TCHAR,*PTCHAR;
+  typedef unsigned char TBYTE ,*PTBYTE;
 #endif
-/*
- * UNICODE a constant string when UNICODE is defined, else returns the string
- * unmodified.
- * The corresponding macros  _TEXT() and _T() for mapping _UNICODE strings
- * passed to C runtime functions are defined in mingw/tchar.h
- */
-#define TEXT(q) __TEXT(q)
+  typedef LPSTR LPTCH,PTCH,PTSTR,LPTSTR,PUTSTR,LPUTSTR;
+  typedef LPCSTR PCTSTR,LPCTSTR,PCUTSTR,LPCUTSTR;
+#define __TEXT(quote) quote
+#endif
+
+#define TEXT(quote) __TEXT(quote)
+
 typedef SHORT *PSHORT;
 typedef LONG *PLONG;
 #ifdef STRICT
@@ -192,13 +189,15 @@ typedef void *HANDLE;
 typedef PVOID HANDLE;
 #define DECLARE_HANDLE(n) typedef HANDLE n
 #endif
-typedef HANDLE *PHANDLE,*LPHANDLE;
+typedef HANDLE *PHANDLE;
 typedef DWORD LCID;
 typedef PDWORD PLCID;
 typedef WORD LANGID;
 #ifdef __GNUC__
 #define _HAVE_INT64
-#define _INTEGRAL_MAX_BITS 64
+#ifndef _INTEGRAL_MAX_BITS
+# define _INTEGRAL_MAX_BITS 64
+#endif
 #undef __int64
 #define __int64 long long
 #elif defined(__WATCOMC__) && (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64 )
@@ -242,6 +241,14 @@ typedef DWORD FLONG;
 
 #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
@@ -283,6 +290,10 @@ typedef DWORD FLONG;
 #define SPECIFIC_RIGHTS_ALL    0xFFFF
 #define ACCESS_SYSTEM_SECURITY 0x1000000
 
+#define REG_STANDARD_FORMAT 1
+#define REG_LATEST_FORMAT   2
+#define REG_NO_COMPRESSION  4
+
 #ifndef WIN32_NO_STATUS
 
 #define STATUS_WAIT_0                    ((DWORD)0x00000000)
@@ -467,7 +478,7 @@ typedef DWORD FLONG;
 #define FILE_NAMED_STREAMS              0x00040000
 
 /* FIXME: Oh how I wish, I wish the w32api DDK wouldn't include winnt.h... */
-#ifndef __NTDDK_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)
@@ -482,7 +493,7 @@ 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_H
+#ifndef _NTDDK_
 #define PROCESS_TERMINATE      1
 #define PROCESS_CREATE_THREAD  2
 #define PROCESS_SET_SESSIONID  4
@@ -494,6 +505,7 @@ typedef DWORD FLONG;
 #define PROCESS_SET_INFORMATION        512
 #define PROCESS_QUERY_INFORMATION      1024
 #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
@@ -503,7 +515,7 @@ typedef DWORD FLONG;
 #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_H
+#ifndef _NTDDK_
 #define THREAD_QUERY_INFORMATION       64
 #define THREAD_SET_THREAD_TOKEN        128
 #define THREAD_IMPERSONATE     256
@@ -511,7 +523,7 @@ typedef DWORD FLONG;
 #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_H
+#ifndef _NTDDK_
 #define MUTANT_QUERY_STATE     0x0001
 #define MUTANT_ALL_ACCESS      (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
 #define TIMER_QUERY_STATE      0x0001
@@ -576,6 +588,12 @@ typedef DWORD FLONG;
 #define SECURITY_NT_NON_UNIQUE                  0x00000015L
 #define SECURITY_BUILTIN_DOMAIN_RID             0x00000020L
 
+#define SECURITY_PACKAGE_BASE_RID               0x00000040L
+#define SECURITY_PACKAGE_NTLM_RID               0x0000000AL
+#define SECURITY_PACKAGE_SCHANNEL_RID           0x0000000EL
+#define SECURITY_PACKAGE_DIGEST_RID             0x00000015L
+#define SECURITY_OTHER_ORGANIZATION_RID         0x000003E8L
+
 #define SECURITY_LOGON_IDS_RID_COUNT 0x3
 #define SID_REVISION 1
 
@@ -595,6 +613,14 @@ typedef DWORD FLONG;
 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS      0x00000207L
 #define DOMAIN_GROUP_RID_POLICY_ADMINS          0x00000208L
 
+#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
+#define SECURITY_MANDATORY_UNTRUSTED_RID        0x00000000L
+#define SECURITY_MANDATORY_LOW_RID              0x00001000L
+#define SECURITY_MANDATORY_MEDIUM_RID           0x00002000L
+#define SECURITY_MANDATORY_HIGH_RID             0x00003000L
+#define SECURITY_MANDATORY_SYSTEM_RID           0x00004000L
+#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID 0x00005000L
+
 #define DOMAIN_ALIAS_RID_ADMINS                 0x00000220L
 #define DOMAIN_ALIAS_RID_USERS                  0x00000221L
 #define DOMAIN_ALIAS_RID_GUESTS                 0x00000222L
@@ -620,70 +646,84 @@ typedef DWORD FLONG;
 
 #define SECURITY_MANDATORY_LABEL_AUTHORITY  {0,0,0,0,0,16}
 
-typedef enum
-{
-    WinNullSid = 0,
-    WinWorldSid,
-    WinLocalSid,
-    WinCreatorOwnerSid,
-    WinCreatorGroupSid,
-    WinCreatorOwnerServerSid,
-    WinCreatorGroupServerSid,
-    WinNtAuthoritySid,
-    WinDialupSid,
-    WinNetworkSid,
-    WinBatchSid,
-    WinInteractiveSid,
-    WinServiceSid,
-    WinAnonymousSid,
-    WinProxySid,
-    WinEnterpriseControllersSid,
-    WinSelfSid,
-    WinAuthenticatedUserSid,
-    WinRestrictedCodeSid,
-    WinTerminalServerSid,
-    WinRemoteLogonIdSid,
-    WinLogonIdsSid,
-    WinLocalSystemSid,
-    WinLocalServiceSid,
-    WinNetworkServiceSid,
-    WinBuiltinDomainSid,
-    WinBuiltinAdministratorsSid,
-    WinBuiltinUsersSid,
-    WinBuiltinGuestsSid,
-    WinBuiltinPowerUsersSid,
-    WinBuiltinAccountOperatorsSid,
-    WinBuiltinSystemOperatorsSid,
-    WinBuiltinPrintOperatorsSid,
-    WinBuiltinBackupOperatorsSid,
-    WinBuiltinReplicatorSid,
-    WinBuiltinPreWindows2000CompatibleAccessSid,
-    WinBuiltinRemoteDesktopUsersSid,
-    WinBuiltinNetworkConfigurationOperatorsSid,
-    WinAccountAdministratorSid,
-    WinAccountGuestSid,
-    WinAccountKrbtgtSid,
-    WinAccountDomainAdminsSid,
-    WinAccountDomainUsersSid,
-    WinAccountDomainGuestsSid,
-    WinAccountComputersSid,
-    WinAccountControllersSid,
-    WinAccountCertAdminsSid,
-    WinAccountSchemaAdminsSid,
-    WinAccountEnterpriseAdminsSid,
-    WinAccountPolicyAdminsSid,
-    WinAccountRasAndIasServersSid,
-    WinNTLMAuthenticationSid,
-    WinDigestAuthenticationSid,
-    WinSChannelAuthenticationSid,
-    WinThisOrganizationSid,
-    WinOtherOrganizationSid,
-    WinBuiltinIncomingForestTrustBuildersSid,
-    WinBuiltinPerfMonitoringUsersSid,
-    WinBuiltinPerfLoggingUsersSid,
-    WinBuiltinAuthorizationAccessSid,
-    WinBuiltinTerminalServerLicenseServersSid,
-    WinBuiltinDCOMUsersSid
+typedef enum {
+    WinNullSid                                  = 0,
+    WinWorldSid                                 = 1,
+    WinLocalSid                                 = 2,
+    WinCreatorOwnerSid                          = 3,
+    WinCreatorGroupSid                          = 4,
+    WinCreatorOwnerServerSid                    = 5,
+    WinCreatorGroupServerSid                    = 6,
+    WinNtAuthoritySid                           = 7,
+    WinDialupSid                                = 8,
+    WinNetworkSid                               = 9,
+    WinBatchSid                                 = 10,
+    WinInteractiveSid                           = 11,
+    WinServiceSid                               = 12,
+    WinAnonymousSid                             = 13,
+    WinProxySid                                 = 14,
+    WinEnterpriseControllersSid                 = 15,
+    WinSelfSid                                  = 16,
+    WinAuthenticatedUserSid                     = 17,
+    WinRestrictedCodeSid                        = 18,
+    WinTerminalServerSid                        = 19,
+    WinRemoteLogonIdSid                         = 20,
+    WinLogonIdsSid                              = 21,
+    WinLocalSystemSid                           = 22,
+    WinLocalServiceSid                          = 23,
+    WinNetworkServiceSid                        = 24,
+    WinBuiltinDomainSid                         = 25,
+    WinBuiltinAdministratorsSid                 = 26,
+    WinBuiltinUsersSid                          = 27,
+    WinBuiltinGuestsSid                         = 28,
+    WinBuiltinPowerUsersSid                     = 29,
+    WinBuiltinAccountOperatorsSid               = 30,
+    WinBuiltinSystemOperatorsSid                = 31,
+    WinBuiltinPrintOperatorsSid                 = 32,
+    WinBuiltinBackupOperatorsSid                = 33,
+    WinBuiltinReplicatorSid                     = 34,
+    WinBuiltinPreWindows2000CompatibleAccessSid = 35,
+    WinBuiltinRemoteDesktopUsersSid             = 36,
+    WinBuiltinNetworkConfigurationOperatorsSid  = 37,
+    WinAccountAdministratorSid                  = 38,
+    WinAccountGuestSid                          = 39,
+    WinAccountKrbtgtSid                         = 40,
+    WinAccountDomainAdminsSid                   = 41,
+    WinAccountDomainUsersSid                    = 42,
+    WinAccountDomainGuestsSid                   = 43,
+    WinAccountComputersSid                      = 44,
+    WinAccountControllersSid                    = 45,
+    WinAccountCertAdminsSid                     = 46,
+    WinAccountSchemaAdminsSid                   = 47,
+    WinAccountEnterpriseAdminsSid               = 48,
+    WinAccountPolicyAdminsSid                   = 49,
+    WinAccountRasAndIasServersSid               = 50,
+    WinNTLMAuthenticationSid                    = 51,
+    WinDigestAuthenticationSid                  = 52,
+    WinSChannelAuthenticationSid                = 53,
+    WinThisOrganizationSid                      = 54,
+    WinOtherOrganizationSid                     = 55,
+    WinBuiltinIncomingForestTrustBuildersSid    = 56,
+    WinBuiltinPerfMonitoringUsersSid            = 57,
+    WinBuiltinPerfLoggingUsersSid               = 58,
+    WinBuiltinAuthorizationAccessSid            = 59,
+    WinBuiltinTerminalServerLicenseServersSid   = 60,
+    WinBuiltinDCOMUsersSid                      = 61,
+    WinBuiltinIUsersSid                         = 62,
+    WinIUserSid                                 = 63,
+    WinBuiltinCryptoOperatorsSid                = 64,
+    WinUntrustedLabelSid                        = 65,
+    WinLowLabelSid                              = 66,
+    WinMediumLabelSid                           = 67,
+    WinHighLabelSid                             = 68,
+    WinSystemLabelSid                           = 69,
+    WinWriteRestrictedCodeSid                   = 70,
+    WinCreatorOwnerRightsSid                    = 71,
+    WinCacheablePrincipalsGroupSid              = 72,
+    WinNonCacheablePrincipalsGroupSid           = 73,
+    WinEnterpriseReadonlyControllersSid         = 74,
+    WinAccountReadonlyControllersSid            = 75,
+    WinBuiltinEventLogReadersGroup              = 76
 } WELL_KNOWN_SID_TYPE;
 
 #define SE_CREATE_TOKEN_NAME   TEXT("SeCreateTokenPrivilege")
@@ -712,7 +752,7 @@ typedef enum
 #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_H
+#ifndef _NTDDK_
 #define SE_GROUP_MANDATORY 1
 #define SE_GROUP_ENABLED_BY_DEFAULT 2
 #define SE_GROUP_ENABLED 4
@@ -846,6 +886,27 @@ typedef enum
 #define LANG_YI   0x78
 #define LANG_YORUBA   0x6a
 #define LANG_ZULU   0x35
+
+#ifdef _WINE
+#define LANG_ESPERANTO      0x8f
+#define LANG_WALON          0x90
+#define LANG_CORNISH        0x91
+
+#define LANG_GAELIC         0x94
+#define LANG_MALTESE        0x3a
+#define LANG_ROMANSH        0x17
+#define LANG_SAAMI          0x3b
+#define LANG_LOWER_SORBIAN  0x2e
+#define LANG_UPPER_SORBIAN  0x2e
+#define LANG_SUTU           0x30
+#define LANG_TAJIK          0x28
+#define LANG_TSONGA         0x31
+#define LANG_TSWANA         0x32
+#define LANG_VENDA          0x33
+#define LANG_XHOSA          0x34
+#define LANG_ZULU           0x35
+#endif
+
 #define SUBLANG_CUSTOM_UNSPECIFIED   0x04
 #define SUBLANG_CUSTOM_DEFAULT   0x03
 #define SUBLANG_UI_CUSTOM_DEFAULT   0x05
@@ -1172,12 +1233,17 @@ typedef enum
 #define HEAP_PSEUDO_TAG_FLAG 0x8000
 #define HEAP_TAG_SHIFT 16
 #define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b)+(o)<<16)))
+
 #define KEY_QUERY_VALUE 1
 #define KEY_SET_VALUE 2
 #define KEY_CREATE_SUB_KEY 4
 #define KEY_ENUMERATE_SUB_KEYS 8
 #define KEY_NOTIFY 16
 #define KEY_CREATE_LINK 32
+#define KEY_WOW64_64KEY         0x00000100
+#define KEY_WOW64_32KEY         0x00000200
+#define KEY_WOW64_RES           0x00000300
+
 #define KEY_WRITE 0x20006
 #define KEY_EXECUTE 0x20019
 #define KEY_READ 0x20019
@@ -1225,7 +1291,7 @@ typedef enum
 #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_H
+#ifndef _NTDDK_
 #define MEM_IMAGE        SEC_IMAGE
 #define SEC_NO_CHANGE  0x00400000
 #define SEC_FILE       0x00800000
@@ -1241,13 +1307,18 @@ typedef enum
 #define SECTION_QUERY 1
 #define SECTION_MAP_EXECUTE 8
 #define SECTION_ALL_ACCESS 0xf001f
-#ifndef __NTDDK_H
+#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))))
@@ -1537,9 +1608,6 @@ typedef enum
 #define IMAGE_ARCHIVE_PAD "\n"
 #define IMAGE_ARCHIVE_LINKER_MEMBER "/               "
 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "//              "
-#define IMAGE_ORDINAL_FLAG 0x80000000
-#define IMAGE_SNAP_BY_ORDINAL(o) ((o&IMAGE_ORDINAL_FLAG)!=0)
-#define IMAGE_ORDINAL(o) (o&0xffff)
 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
@@ -1805,6 +1873,7 @@ typedef VOID (NTAPI *WORKERCALLBACKFUNC)(PVOID);
 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
 #define TLS_MINIMUM_AVAILABLE 64
+#define FLS_MAXIMUM_AVAILABLE 128
 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE 16384
 #define IO_REPARSE_TAG_RESERVED_ZERO 0
@@ -1872,7 +1941,7 @@ typedef struct _GENERIC_MAPPING {
        ACCESS_MASK GenericAll;
 } GENERIC_MAPPING, *PGENERIC_MAPPING;
 /* Sigh..when will they learn... */
-#ifndef __NTDDK_H
+#ifndef _NTDDK_
 typedef struct _ACE_HEADER {
        BYTE AceType;
        BYTE AceFlags;
@@ -2001,6 +2070,11 @@ typedef struct _ACL {
        WORD AceCount;
        WORD Sbz2;
 } ACL,*PACL;
+typedef enum _ACL_INFORMATION_CLASS
+{
+  AclRevisionInformation = 1,
+  AclSizeInformation
+} ACL_INFORMATION_CLASS;
 typedef struct _ACL_REVISION_INFORMATION {
        DWORD AclRevision;
 } ACL_REVISION_INFORMATION;
@@ -2010,8 +2084,40 @@ typedef struct _ACL_SIZE_INFORMATION {
        DWORD   AclBytesFree;
 } ACL_SIZE_INFORMATION;
 
+#ifndef _LDT_ENTRY_DEFINED
+#define _LDT_ENTRY_DEFINED
+typedef struct _LDT_ENTRY
+{
+    USHORT LimitLow;
+    USHORT BaseLow;
+    union
+    {
+        struct
+        {
+            UCHAR BaseMid;
+            UCHAR Flags1;
+            UCHAR Flags2;
+            UCHAR BaseHi;
+        } Bytes;
+        struct
+        {
+            ULONG BaseMid:8;
+            ULONG Type:5;
+            ULONG Dpl:2;
+            ULONG Pres:1;
+            ULONG LimitHi:4;
+            ULONG Sys:1;
+            ULONG Reserved_0:1;
+            ULONG Default_Big:1;
+            ULONG Granularity:1;
+            ULONG BaseHi:8;
+        } Bits;
+    } HighWord;
+} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
+#endif
+
 /* FIXME: add more machines */
-#if defined(__i386__) && !defined(__PowerPC__)
+#if defined(_X86_) && !defined(__PowerPC__)
 #define SIZE_OF_80387_REGISTERS        80
 #define CONTEXT_i386   0x10000
 #define CONTEXT_i486   0x10000
@@ -2202,7 +2308,7 @@ typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
     DWORD64 LastBranchFromRip;
     DWORD64 LastExceptionToRip;
     DWORD64 LastExceptionFromRip;
-} CONTEXT, *PCONTEXT;
+} CONTEXT;
 
 
 typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
@@ -2251,28 +2357,40 @@ typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
     };
 } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
 
-#define UNW_FLAG_NHANDLER 0x0 /* No handler. */
-#define UNW_FLAG_EHANDLER 0x1 /* Exception handler should be called */
-#define UNW_FLAG_UHANDLER 0x2 /* Termination handler that should be called when unwinding an exception */
-#define UNW_FLAG_CHAININFO 0x4 /* FunctionEntry member is the contents of a previous function table entry */
-
 #define RUNTIME_FUNCTION_INDIRECT 0x1
 
-  typedef struct _RUNTIME_FUNCTION {
+typedef struct _RUNTIME_FUNCTION {
     DWORD BeginAddress;
     DWORD EndAddress;
     DWORD UnwindData;
-  } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
+} RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
+
+#define UNWIND_HISTORY_TABLE_SIZE 12
+
+typedef struct _UNWIND_HISTORY_TABLE_ENTRY
+{
+    ULONG64 ImageBase;
+    PRUNTIME_FUNCTION FunctionEntry;
+} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
+
+typedef struct _UNWIND_HISTORY_TABLE
+{
+    ULONG Count;
+    UCHAR Search;
+    ULONG64 LowAddress;
+    ULONG64 HighAddress;
+    UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
+} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
 
-  typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
-  typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions);
+typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
+typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions);
 
-  #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
+#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
 
 NTSYSAPI
 VOID
 __cdecl
-RtlRestoreContext(PCONTEXT ContextRecord,
+RtlRestoreContext(struct _CONTEXT *ContextRecord,
                   struct _EXCEPTION_RECORD *ExceptionRecord);
 
 NTSYSAPI
@@ -2731,6 +2849,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
@@ -2795,7 +2917,7 @@ typedef CONTEXT *PCONTEXT,*LPCONTEXT;
       PVOID ExceptionAddress;
       DWORD NumberParameters;
       ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
-    } EXCEPTION_RECORD, *PEXCEPTION_RECORD, *LPEXCEPTION_RECORD;
+    } EXCEPTION_RECORD;
 
     typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
 
@@ -2854,12 +2976,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 {
@@ -2893,7 +3017,7 @@ typedef struct _SE_IMPERSONATION_STATE {
        SECURITY_IMPERSONATION_LEVEL Level;
 } SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
 /* Steven you are my hero when you fix the w32api ddk! */
-#if !defined(__NTDDK_H)
+#if !defined(_NTDDK_)
 typedef struct _SID_IDENTIFIER_AUTHORITY {
        BYTE Value[6];
 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
@@ -2958,6 +3082,8 @@ typedef enum tagTOKEN_TYPE {
        TokenPrimary = 1,
        TokenImpersonation
 } TOKEN_TYPE,*PTOKEN_TYPE;
+
+#include <pshpack4.h>
 typedef struct _TOKEN_STATISTICS {
        LUID TokenId;
        LUID AuthenticationId;
@@ -2970,6 +3096,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;
@@ -2986,7 +3114,8 @@ typedef struct _SECURITY_DESCRIPTOR {
        PSID Group;
        PACL Sacl;
        PACL Dacl;
-} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
+} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
+typedef PVOID PSECURITY_DESCRIPTOR;
 #endif
 typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
     BYTE Revision;
@@ -2997,13 +3126,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,
@@ -3092,7 +3247,7 @@ typedef struct _TAPE_CREATE_PARTITION {
        DWORD Size;
 } TAPE_CREATE_PARTITION,*PTAPE_CREATE_PARTITION;
 /* Sigh..when will they learn... */
-#ifndef __NTDDK_H
+#ifndef _NTDDK_
 typedef struct _MEMORY_BASIC_INFORMATION {
        PVOID BaseAddress;
        PVOID AllocationBase;
@@ -3125,23 +3280,99 @@ typedef struct _SINGLE_LIST_ENTRY {
        struct _SINGLE_LIST_ENTRY *Next;
 } SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
 
+//
+// Slist Header
+//
 #ifndef _SLIST_HEADER_
 #define _SLIST_HEADER_
+
 #define SLIST_ENTRY SINGLE_LIST_ENTRY
 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
+
+#if defined(_WIN64)
+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
 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
+NTAPI
+RtlInitializeSListHead (
+    IN PSLIST_HEADER ListHead
+    );
+
+NTSYSAPI
+PSLIST_ENTRY
+NTAPI
+RtlFirstEntrySList (
+    IN const SLIST_HEADER *ListHead
+    );
+
+NTSYSAPI
+PSLIST_ENTRY
+NTAPI
+RtlInterlockedPopEntrySList (
+    IN PSLIST_HEADER ListHead
+    );
+
+NTSYSAPI
+PSLIST_ENTRY
+NTAPI
+RtlInterlockedPushEntrySList (
+    IN PSLIST_HEADER ListHead,
+    IN PSLIST_ENTRY ListEntry
+    );
+
+NTSYSAPI
+PSLIST_ENTRY
+NTAPI
+RtlInterlockedFlushSList (
+    IN PSLIST_HEADER ListHead
+    );
+
+NTSYSAPI
+WORD
+NTAPI
+RtlQueryDepthSList (
+    IN PSLIST_HEADER ListHead
+    );
 
 /* FIXME: Please oh please stop including winnt.h from the DDK... */
-#ifndef __NTDDK_H
+#ifndef _NTDDK_
 typedef struct _RTL_CRITICAL_SECTION_DEBUG {
        WORD Type;
        WORD CreatorBackTraceIndex;
@@ -3234,6 +3465,7 @@ typedef struct _EVENTLOGRECORD {
        DWORD DataLength;
        DWORD DataOffset;
 } EVENTLOGRECORD,*PEVENTLOGRECORD;
+
 typedef struct _OSVERSIONINFOA {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
@@ -3242,6 +3474,7 @@ typedef struct _OSVERSIONINFOA {
        DWORD dwPlatformId;
        CHAR szCSDVersion[128];
 } OSVERSIONINFOA,*POSVERSIONINFOA,*LPOSVERSIONINFOA;
+
 typedef struct _OSVERSIONINFOW {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
@@ -3250,6 +3483,7 @@ typedef struct _OSVERSIONINFOW {
        DWORD dwPlatformId;
        WCHAR szCSDVersion[128];
 } OSVERSIONINFOW,*POSVERSIONINFOW,*LPOSVERSIONINFOW;
+
 typedef struct _OSVERSIONINFOEXA {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
@@ -3263,6 +3497,7 @@ typedef struct _OSVERSIONINFOEXA {
        BYTE wProductType;
        BYTE wReserved;
 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+
 typedef struct _OSVERSIONINFOEXW {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
@@ -3276,7 +3511,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;
@@ -3330,8 +3566,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;
@@ -3341,10 +3577,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;
@@ -3378,6 +3616,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;
@@ -3396,7 +3635,7 @@ typedef struct _IMAGE_OPTIONAL_HEADER64 {
        WORD MinorImageVersion;
        WORD MajorSubsystemVersion;
        WORD MinorSubsystemVersion;
-       DWORD Reserved1;
+       DWORD Win32VersionValue;
        DWORD SizeOfImage;
        DWORD SizeOfHeaders;
        DWORD CheckSum;
@@ -3410,6 +3649,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;
@@ -3425,8 +3665,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;
@@ -3448,6 +3688,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;
@@ -3480,18 +3721,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;
@@ -3503,10 +3746,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 {
@@ -3522,8 +3767,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];
@@ -3539,6 +3784,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;
@@ -3572,6 +3826,63 @@ typedef union _IMAGE_AUX_SYMBOL {
                BYTE Selection;
        } Section;
 } IMAGE_AUX_SYMBOL,*PIMAGE_AUX_SYMBOL;
+
+#ifndef __IMAGE_COR20_HEADER_DEFINED__
+#define __IMAGE_COR20_HEADER_DEFINED__
+
+typedef enum ReplacesCorHdrNumericDefines
+{
+    COMIMAGE_FLAGS_ILONLY           = 0x00000001,
+    COMIMAGE_FLAGS_32BITREQUIRED    = 0x00000002,
+    COMIMAGE_FLAGS_IL_LIBRARY       = 0x00000004,
+    COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,
+    COMIMAGE_FLAGS_TRACKDEBUGDATA   = 0x00010000,
+
+    COR_VERSION_MAJOR_V2       = 2,
+    COR_VERSION_MAJOR          = COR_VERSION_MAJOR_V2,
+    COR_VERSION_MINOR          = 0,
+    COR_DELETED_NAME_LENGTH    = 8,
+    COR_VTABLEGAP_NAME_LENGTH  = 8,
+
+    NATIVE_TYPE_MAX_CB = 1,
+    COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE = 0xff,
+
+    IMAGE_COR_MIH_METHODRVA  = 0x01,
+    IMAGE_COR_MIH_EHRVA      = 0x02,
+    IMAGE_COR_MIH_BASICBLOCK = 0x08,
+
+    COR_VTABLE_32BIT             = 0x01,
+    COR_VTABLE_64BIT             = 0x02,
+    COR_VTABLE_FROM_UNMANAGED    = 0x04,
+    COR_VTABLE_CALL_MOST_DERIVED = 0x10,
+
+    IMAGE_COR_EATJ_THUNK_SIZE = 32,
+
+    MAX_CLASS_NAME   = 1024,
+    MAX_PACKAGE_NAME = 1024,
+} ReplacesCorHdrNumericDefines;
+
+typedef struct IMAGE_COR20_HEADER
+{
+    DWORD cb;
+    WORD  MajorRuntimeVersion;
+    WORD  MinorRuntimeVersion;
+
+    IMAGE_DATA_DIRECTORY MetaData;
+    DWORD Flags;
+    DWORD EntryPointToken;
+
+    IMAGE_DATA_DIRECTORY Resources;
+    IMAGE_DATA_DIRECTORY StrongNameSignature;
+    IMAGE_DATA_DIRECTORY CodeManagerTable;
+    IMAGE_DATA_DIRECTORY VTableFixups;
+    IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
+    IMAGE_DATA_DIRECTORY ManagedNativeHeader;
+
+} IMAGE_COR20_HEADER, *PIMAGE_COR20_HEADER;
+
+#endif
+
 typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
        DWORD NumberOfSymbols;
        DWORD LvaToFirstSymbol;
@@ -3582,6 +3893,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;
@@ -3590,23 +3902,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];
@@ -3616,6 +3918,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;
@@ -3629,11 +3932,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;
@@ -3643,7 +3948,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 {
@@ -3655,7 +3960,7 @@ typedef struct _IMAGE_THUNK_DATA32 {
 } IMAGE_THUNK_DATA32;
 typedef IMAGE_THUNK_DATA32 *PIMAGE_THUNK_DATA32;
 
-#define IMAGE_ORDINAL_FLAG64 0x8000000000000000
+#define IMAGE_ORDINAL_FLAG64 0x8000000000000000ULL
 #define IMAGE_ORDINAL_FLAG32 0x80000000
 #define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffff)
 #define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff)
@@ -3712,17 +4017,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 void(NTAPI *PIMAGE_TLS_CALLBACK)(PVOID,DWORD,PVOID);
+
 typedef struct _IMAGE_RESOURCE_DIRECTORY {
        DWORD Characteristics;
        DWORD TimeDateStamp;
@@ -3751,20 +4058,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;
@@ -3787,6 +4098,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;
@@ -3794,6 +4106,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;
@@ -3804,6 +4117,7 @@ typedef struct _IMAGE_DEBUG_DIRECTORY {
        DWORD AddressOfRawData;
        DWORD PointerToRawData;
 } IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
+
 typedef struct _FPO_DATA {
        DWORD ulOffStart;
        DWORD cbProcSize;
@@ -3816,6 +4130,7 @@ typedef struct _FPO_DATA {
        WORD reserved:1;
        WORD cbFrame:2;
 } FPO_DATA,*PFPO_DATA;
+
 typedef struct _IMAGE_DEBUG_MISC {
        DWORD DataType;
        DWORD Length;
@@ -3823,11 +4138,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;
@@ -3843,7 +4160,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,
@@ -3852,6 +4169,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,
@@ -3859,12 +4177,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;
@@ -3877,6 +4197,7 @@ typedef struct _NT_TIB {
        PVOID ArbitraryUserPointer;
        struct _NT_TIB *Self;
 } NT_TIB,*PNT_TIB;
+
 typedef struct _REPARSE_GUID_DATA_BUFFER {
        DWORD  ReparseTag;
        WORD   ReparseDataLength;
@@ -3886,6 +4207,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;
@@ -3942,7 +4264,7 @@ typedef union _FILE_SEGMENT_ELEMENT {
 #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_H
+#ifndef _NTDDK_
 #define JOB_OBJECT_ASSIGN_PROCESS           1
 #define JOB_OBJECT_SET_ATTRIBUTES           2
 #define JOB_OBJECT_QUERY                    4
@@ -3993,16 +4315,19 @@ 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_H
+#ifndef _NTDDK_
 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
        DWORD SecurityLimitFlags;
        HANDLE JobToken;
@@ -4011,17 +4336,21 @@ typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
        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;
@@ -4030,6 +4359,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;
@@ -4201,7 +4531,7 @@ typedef struct _SYSTEM_BATTERY_STATE {
        ULONG  DefaultAlert2;
 } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
 
-#ifndef __NTDDK_H /* HACK!!! ntddk.h shouldn't include winnt.h! */
+#ifndef _NTDDK_ /* HACK!!! ntddk.h shouldn't include winnt.h! */
 typedef struct _PROCESSOR_POWER_INFORMATION {
        ULONG Number;
        ULONG MaxMhz;
@@ -4239,9 +4569,6 @@ typedef enum _POWER_INFORMATION_LEVEL {
        ProcessorPowerPolicyCurrent
 } POWER_INFORMATION_LEVEL;
 
-#if (_WIN32_WINNT >= 0x0500)
-typedef LONG (WINAPI *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS);
-#endif
 #if 1 /* (WIN32_WINNT >= 0x0500) */
 typedef struct _SYSTEM_POWER_INFORMATION {
        ULONG  MaxIdlenessAllowed;
@@ -4260,9 +4587,6 @@ typedef enum _AUDIT_EVENT_TYPE {
 #endif
 
 #if (_WIN32_WINNT >= 0x0501)
-typedef enum _HEAP_INFORMATION_CLASS {
-       HeapCompatibilityInformation
-} HEAP_INFORMATION_CLASS;
 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
        ActivationContextBasicInformation = 1,
        ActivationContextDetailedInformation,
@@ -4375,13 +4699,102 @@ typedef OSVERSIONINFOA OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
 typedef OSVERSIONINFOEXA OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
 #endif
 
-#if (WIN32_WINNT >= 0x0500)
+#if (_WIN32_WINNT >= 0x0500)
 ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
 #endif
 
+typedef enum _HEAP_INFORMATION_CLASS {
+
+    HeapCompatibilityInformation
+
+} HEAP_INFORMATION_CLASS;
+
+NTSYSAPI
+DWORD
+NTAPI
+RtlSetHeapInformation (
+    IN PVOID HeapHandle,
+    IN HEAP_INFORMATION_CLASS HeapInformationClass,
+    IN PVOID HeapInformation OPTIONAL,
+    IN SIZE_T HeapInformationLength OPTIONAL
+    );
+
+NTSYSAPI
+DWORD
+NTAPI
+RtlQueryHeapInformation (
+    IN PVOID HeapHandle,
+    IN HEAP_INFORMATION_CLASS HeapInformationClass,
+    OUT PVOID HeapInformation OPTIONAL,
+    IN SIZE_T HeapInformationLength OPTIONAL,
+    OUT PSIZE_T ReturnLength OPTIONAL
+    );
+
+//
+//  Multiple alloc-free APIS
+//
+
+DWORD
+NTAPI
+RtlMultipleAllocateHeap (
+    IN PVOID HeapHandle,
+    IN DWORD Flags,
+    IN SIZE_T Size,
+    IN DWORD Count,
+    OUT PVOID * Array
+    );
+
+DWORD
+NTAPI
+RtlMultipleFreeHeap (
+    IN PVOID HeapHandle,
+    IN DWORD Flags,
+    IN DWORD Count,
+    OUT PVOID * Array
+    );
+
+typedef enum _PROCESSOR_CACHE_TYPE {
+    CacheUnified,
+    CacheInstruction,
+    CacheData,
+    CacheTrace
+} PROCESSOR_CACHE_TYPE;
+
+typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
+    RelationProcessorCore,
+    RelationNumaNode,
+    RelationCache,
+    RelationProcessorPackage
+} LOGICAL_PROCESSOR_RELATIONSHIP;
+
+#define CACHE_FULLY_ASSOCIATIVE 0xFF
+
+typedef struct _CACHE_DESCRIPTOR {
+    BYTE Level;
+    BYTE Associativity;
+    WORD LineSize;
+    DWORD Size;
+    PROCESSOR_CACHE_TYPE Type;
+} CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;
+
+typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
+    ULONG_PTR ProcessorMask;
+    LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
+    union {
+        struct {
+            BYTE Flags;
+        } ProcessorCore;
+        struct {
+        DWORD NodeNumber;
+        } NumaNode;
+        CACHE_DESCRIPTOR Cache;
+        ULONGLONG Reserved[2];
+    };
+} SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
+
 NTSYSAPI
 SIZE_T
-STDCALL
+NTAPI
 RtlCompareMemory (
     const VOID *Source1,
     const VOID *Source2,
@@ -4393,6 +4806,28 @@ RtlCompareMemory (
 #define RtlFillMemory(d,l,f) memset((d), (f), (l))
 #define RtlZeroMemory(d,l) RtlFillMemory((d),(l),0)
 
+FORCEINLINE
+PVOID
+RtlSecureZeroMemory(IN PVOID Buffer,
+                    IN SIZE_T Length)
+{
+    volatile char *VolatilePointer;
+
+    /* Get a volatile pointer to prevent any compiler optimizations */
+    VolatilePointer = (volatile char *)Buffer;
+
+    /* Loop the whole buffer */
+    while (Length)
+    {
+        /* Zero the current byte and move on */
+        *VolatilePointer++ = 0;
+        Length--;
+    }
+
+    /* Return the pointer to ensure the compiler won't optimize this away */
+    return Buffer;
+}
+
 typedef struct _OBJECT_TYPE_LIST {
     WORD   Level;
     WORD   Sbz;
@@ -4414,7 +4849,11 @@ static __inline__ PVOID GetCurrentFiber(void)
 #elif defined (_M_AMD64)
 FORCEINLINE PVOID GetCurrentFiber(VOID)
 {
+  #ifdef NONAMELESSUNION
+    return (PVOID)__readgsqword(FIELD_OFFSET(NT_TIB, DUMMYUNIONNAME.FiberData));
+  #else
     return (PVOID)__readgsqword(FIELD_OFFSET(NT_TIB, FiberData));
+  #endif
 }
 #elif defined (_M_ARM)
     PVOID WINAPI GetCurrentFiber(VOID);
@@ -4441,7 +4880,7 @@ static __inline__ PVOID GetCurrentFiber(void)
 #endif
 
 /* FIXME: Oh how I wish, I wish the w32api DDK wouldn't include winnt.h... */
-#ifndef __NTDDK_H
+#ifndef _NTDDK_
 #ifdef _M_IX86
 static __inline__ struct _TEB * NtCurrentTeb(void)
 {
@@ -4460,7 +4899,6 @@ static __inline__ struct _TEB * NtCurrentTeb(void)
 //
 // NT-ARM is not documented
 //
-#define KIRQL ULONG // Hack!
 #include <armddk.h>
 
 #elif defined (_M_AMD64)
@@ -4499,7 +4937,7 @@ extern struct _TEB * NtCurrentTeb(void);
 
 #if (_MSC_FULL_VER >= 13012035)
 
-DWORD __readfsdword(DWORD);
+unsigned long __readfsdword(const unsigned long Offset);
 #pragma intrinsic(__readfsdword)
 
 __inline PVOID GetCurrentFiber(void) { return (PVOID)(ULONG_PTR)__readfsdword(0x10); }
@@ -4543,7 +4981,7 @@ InterlockedBitTestAndSet(IN LONG volatile *Base,
        __asm__ __volatile__("lock "
                             "btsl %2,%1\n\t"
                             "sbbl %0,%0\n\t"
-                            :"=r" (OldBit),"=m" (*Base)
+                            :"=r" (OldBit),"+m" (*Base)
                             :"Ir" (Bit)
                             : "memory");
        return OldBit;
@@ -4561,7 +4999,7 @@ InterlockedBitTestAndReset(IN LONG volatile *Base,
        __asm__ __volatile__("lock "
                             "btrl %2,%1\n\t"
                             "sbbl %0,%0\n\t"
-                            :"=r" (OldBit),"=m" (*Base)
+                            :"=r" (OldBit),"+m" (*Base)
                             :"Ir" (Bit)
                             : "memory");
        return OldBit;
@@ -4570,36 +5008,73 @@ InterlockedBitTestAndReset(IN LONG volatile *Base,
 #endif
 }
 
-static __inline__ BOOLEAN
-BitScanReverse(OUT ULONG *Index,
-               IN ULONG Mask)
-{
-       BOOLEAN BitPosition = 0;
+#define BitScanForward _BitScanForward
+#define BitScanReverse _BitScanReverse
+
+#endif
+
+/* TODO: Other architectures than X86 */
 #if defined(_M_IX86)
-       __asm__ __volatile__("bsrl %2,%0\n\t"
-                            "setnz %1\n\t"
-                            :"=&r" (*Index), "=r" (BitPosition)
-                            :"rm" (Mask)
-                            :"memory");
-       return BitPosition;
+#define PF_TEMPORAL_LEVEL_1
+#define PF_NON_TEMPORAL_LEVEL_ALL
+#define PreFetchCacheLine(l, a)
+#elif defined (_M_AMD64)
+#define PreFetchCacheLine(l, a)
+#elif defined(_M_PPC)
+#define PreFetchCacheLine(l, a)
+#elif defined(_M_ARM)
+#define PreFetchCacheLine(l, a)
 #else
-       /* Slow implementation for now */
-       for( *Index = 31; *Index; (*Index)-- ) {
-               if( (1<<*Index) & Mask ) {
-                       return TRUE;
-               }
-       }
-
-       return FALSE;
+#error Unknown architecture
 #endif
-}
 
+/* TODO: Other architectures than X86 */
+#if defined(_M_IX86)
+#if defined(_MSC_VER)
+FORCEINLINE
+VOID
+MemoryBarrier (VOID)
+{
+    LONG Barrier;
+    __asm { xchg Barrier, eax }
+}
+#else
+FORCEINLINE
+VOID
+MemoryBarrier(VOID)
+{
+    LONG Barrier;
+    __asm__ __volatile__("xchgl %%eax, %[Barrier]" : : [Barrier] "m" (Barrier) : "memory");
+}
 #endif
+#elif defined (_M_AMD64)
+#define MemoryBarrier __faststorefence
+#elif defined(_M_PPC)
+#define MemoryBarrier()
+#elif defined(_M_ARM)
+#define MemoryBarrier()
+#else
+#error Unknown architecture
+#endif
+
+VOID
+_mm_pause (
+    VOID
+    );
+
 
 #if defined(_M_IX86)
+#ifdef _MSC_VER
+#pragma intrinsic(_mm_pause)
+#else
 #define YieldProcessor() __asm__ __volatile__("pause");
+#endif
 #elif defined (_M_AMD64)
+#ifdef _MSC_VER
+#define YieldProcessor _mm_pause
+#else
 #define YieldProcessor() __asm__ __volatile__("pause");
+#endif
 #elif defined(_M_PPC)
 #define YieldProcessor() __asm__ __volatile__("nop");
 #elif defined(_M_MIPS)
@@ -4636,6 +5111,10 @@ BitScanReverse(OUT ULONG *Index,
 
 #endif
 
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
 #endif /* RC_INVOKED */
 
 #ifdef __cplusplus