ws2_32: Make function declarations match definitions.
[wine] / include / winnt.h
index 245b199..96ed387 100644 (file)
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
 #ifndef _WINNT_
 #define _WINNT_
 
 #include <basetsd.h>
+#include <guiddef.h>
 
 #ifndef RC_INVOKED
 #include <ctype.h>
 #include <string.h>
 #endif
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _NTSYSTEM_
+#define NTSYSAPI
+#else
+#define NTSYSAPI DECLSPEC_IMPORT
+#endif
+
 #define NTAPI __stdcall
 
-#if (defined(_M_IX86) || defined(_M_IA64) || defined(_M_AMD64) || defined(__MINGW32__)) && !defined(MIDL_PASS)
+#ifndef MIDL_PASS
 # if defined(_MSC_VER)
 #  define DECLSPEC_IMPORT __declspec(dllimport)
-# elif defined(__MINGW32__)
+# elif defined(__MINGW32__) || defined(__CYGWIN__)
 #  define DECLSPEC_IMPORT __attribute__((dllimport))
 # else
-#  define DECLSPEC_IMPORT
+#  define DECLSPEC_IMPORT DECLSPEC_HIDDEN
 # endif
 #else
 # define DECLSPEC_IMPORT
 # endif
 #endif
 
+/* a couple of useful Wine extensions */
+
+#ifdef _MSC_VER
+# define DECLSPEC_EXPORT __declspec(dllexport)
+#elif defined(__MINGW32__)
+# define DECLSPEC_EXPORT __attribute__((dllexport))
+#elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
+# define DECLSPEC_EXPORT __attribute__((visibility ("default")))
+#else
+# define DECLSPEC_EXPORT
+#endif
+
+#if defined(__MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+# define DECLSPEC_HIDDEN
+#elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
+# define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
+#else
+# define DECLSPEC_HIDDEN
+#endif
+
 /* Anonymous union/struct handling */
 
 #ifndef NONAMELESSSTRUCT
 #if defined(_MSC_VER)
 # define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
 #elif defined(__GNUC__) 
-# define C_ASSERT(e) extern char __C_ASSERT__[(e)?1:-1]
+# define C_ASSERT(e) extern char __C_ASSERT__[(e)?1:-1] __attribute__((unused))
+#else
+# define C_ASSERT(e)
 #endif
 
 /* Eliminate Microsoft C/C++ compiler warning 4715 */
 #define VOID void
 #endif
 typedef VOID           *PVOID;
+typedef VOID           *PVOID64;
 typedef BYTE            BOOLEAN,    *PBOOLEAN;
 typedef char            CHAR,       *PCHAR;
 typedef short           SHORT,      *PSHORT;
+#ifdef _MSC_VER
 typedef long            LONG,       *PLONG;
+#else
+typedef int             LONG,       *PLONG;
+#endif
 
 /* Some systems might have wchar_t, but we really need 16 bit characters */
 #ifdef WINE_UNICODE_NATIVE
@@ -369,10 +408,13 @@ typedef LPCSTR          PCTSTR,      LPCTSTR;
 
 /* Misc common WIN32 types */
 typedef char            CCHAR;
-typedef LONG            HRESULT;
 typedef DWORD           LCID,       *PLCID;
 typedef WORD            LANGID;
 typedef DWORD          EXECUTION_STATE;
+#ifndef _HRESULT_DEFINED
+#define _HRESULT_DEFINED
+typedef LONG            HRESULT;
+#endif
 
 /* Handle type */
 
@@ -385,55 +427,59 @@ typedef HANDLE *PHANDLE, *LPHANDLE;
 #define DECLARE_HANDLE(a) typedef HANDLE a
 #endif /*STRICT*/
 
+typedef BYTE  FCHAR;
+typedef WORD  FSHORT;
+typedef DWORD FLONG;
+
 /* Defines */
 
 #ifndef WIN32_NO_STATUS
 
-#define STATUS_WAIT_0                    0x00000000
-#define STATUS_ABANDONED_WAIT_0          0x00000080
-#define STATUS_USER_APC                  0x000000C0
-#define STATUS_TIMEOUT                   0x00000102
-#define STATUS_PENDING                   0x00000103
-#define STATUS_SEGMENT_NOTIFICATION      0x40000005
-#define STATUS_GUARD_PAGE_VIOLATION      0x80000001
-#define STATUS_DATATYPE_MISALIGNMENT     0x80000002
-#define STATUS_BREAKPOINT                0x80000003
-#define STATUS_SINGLE_STEP               0x80000004
-#define STATUS_ACCESS_VIOLATION          0xC0000005
-#define STATUS_IN_PAGE_ERROR             0xC0000006
-#define STATUS_INVALID_HANDLE            0xC0000008
-#define STATUS_NO_MEMORY                 0xC0000017
-#define STATUS_ILLEGAL_INSTRUCTION       0xC000001D
-#define STATUS_NONCONTINUABLE_EXCEPTION  0xC0000025
-#define STATUS_INVALID_DISPOSITION       0xC0000026
-#define STATUS_ARRAY_BOUNDS_EXCEEDED     0xC000008C
-#define STATUS_FLOAT_DENORMAL_OPERAND    0xC000008D
-#define STATUS_FLOAT_DIVIDE_BY_ZERO      0xC000008E
-#define STATUS_FLOAT_INEXACT_RESULT      0xC000008F
-#define STATUS_FLOAT_INVALID_OPERATION   0xC0000090
-#define STATUS_FLOAT_OVERFLOW            0xC0000091
-#define STATUS_FLOAT_STACK_CHECK         0xC0000092
-#define STATUS_FLOAT_UNDERFLOW           0xC0000093
-#define STATUS_INTEGER_DIVIDE_BY_ZERO    0xC0000094
-#define STATUS_INTEGER_OVERFLOW          0xC0000095
-#define STATUS_PRIVILEGED_INSTRUCTION    0xC0000096
-#define STATUS_STACK_OVERFLOW            0xC00000FD
-#define STATUS_CONTROL_C_EXIT            0xC000013A
-#define STATUS_FLOAT_MULTIPLE_FAULTS     0xC00002B4
-#define STATUS_FLOAT_MULTIPLE_TRAPS      0xC00002B5
-#define STATUS_REG_NAT_CONSUMPTION       0xC00002C9
-#define STATUS_SXS_EARLY_DEACTIVATION    0xC015000F
-#define STATUS_SXS_INVALID_DEACTIVATION  0xC0150010
+#define STATUS_WAIT_0                    ((DWORD) 0x00000000)
+#define STATUS_ABANDONED_WAIT_0          ((DWORD) 0x00000080)
+#define STATUS_USER_APC                  ((DWORD) 0x000000C0)
+#define STATUS_TIMEOUT                   ((DWORD) 0x00000102)
+#define STATUS_PENDING                   ((DWORD) 0x00000103)
+#define STATUS_SEGMENT_NOTIFICATION      ((DWORD) 0x40000005)
+#define STATUS_GUARD_PAGE_VIOLATION      ((DWORD) 0x80000001)
+#define STATUS_DATATYPE_MISALIGNMENT     ((DWORD) 0x80000002)
+#define STATUS_BREAKPOINT                ((DWORD) 0x80000003)
+#define STATUS_SINGLE_STEP               ((DWORD) 0x80000004)
+#define STATUS_ACCESS_VIOLATION          ((DWORD) 0xC0000005)
+#define STATUS_IN_PAGE_ERROR             ((DWORD) 0xC0000006)
+#define STATUS_INVALID_HANDLE            ((DWORD) 0xC0000008)
+#define STATUS_NO_MEMORY                 ((DWORD) 0xC0000017)
+#define STATUS_ILLEGAL_INSTRUCTION       ((DWORD) 0xC000001D)
+#define STATUS_NONCONTINUABLE_EXCEPTION  ((DWORD) 0xC0000025)
+#define STATUS_INVALID_DISPOSITION       ((DWORD) 0xC0000026)
+#define STATUS_ARRAY_BOUNDS_EXCEEDED     ((DWORD) 0xC000008C)
+#define STATUS_FLOAT_DENORMAL_OPERAND    ((DWORD) 0xC000008D)
+#define STATUS_FLOAT_DIVIDE_BY_ZERO      ((DWORD) 0xC000008E)
+#define STATUS_FLOAT_INEXACT_RESULT      ((DWORD) 0xC000008F)
+#define STATUS_FLOAT_INVALID_OPERATION   ((DWORD) 0xC0000090)
+#define STATUS_FLOAT_OVERFLOW            ((DWORD) 0xC0000091)
+#define STATUS_FLOAT_STACK_CHECK         ((DWORD) 0xC0000092)
+#define STATUS_FLOAT_UNDERFLOW           ((DWORD) 0xC0000093)
+#define STATUS_INTEGER_DIVIDE_BY_ZERO    ((DWORD) 0xC0000094)
+#define STATUS_INTEGER_OVERFLOW          ((DWORD) 0xC0000095)
+#define STATUS_PRIVILEGED_INSTRUCTION    ((DWORD) 0xC0000096)
+#define STATUS_STACK_OVERFLOW            ((DWORD) 0xC00000FD)
+#define STATUS_CONTROL_C_EXIT            ((DWORD) 0xC000013A)
+#define STATUS_FLOAT_MULTIPLE_FAULTS     ((DWORD) 0xC00002B4)
+#define STATUS_FLOAT_MULTIPLE_TRAPS      ((DWORD) 0xC00002B5)
+#define STATUS_REG_NAT_CONSUMPTION       ((DWORD) 0xC00002C9)
+#define STATUS_SXS_EARLY_DEACTIVATION    ((DWORD) 0xC015000F)
+#define STATUS_SXS_INVALID_DEACTIVATION  ((DWORD) 0xC0150010)
 
 /* status values for ContinueDebugEvent */
-#define DBG_EXCEPTION_HANDLED       0x00010001
-#define DBG_CONTINUE                0x00010002
-#define DBG_TERMINATE_THREAD        0x40010003
-#define DBG_TERMINATE_PROCESS       0x40010004
-#define DBG_CONTROL_C               0x40010005
-#define DBG_CONTROL_BREAK           0x40010008
-#define DBG_COMMAND_EXCEPTION       0x40010009
-#define DBG_EXCEPTION_NOT_HANDLED   0x80010001
+#define DBG_EXCEPTION_HANDLED       ((DWORD) 0x00010001)
+#define DBG_CONTINUE                ((DWORD) 0x00010002)
+#define DBG_TERMINATE_THREAD        ((DWORD) 0x40010003)
+#define DBG_TERMINATE_PROCESS       ((DWORD) 0x40010004)
+#define DBG_CONTROL_C               ((DWORD) 0x40010005)
+#define DBG_CONTROL_BREAK           ((DWORD) 0x40010008)
+#define DBG_COMMAND_EXCEPTION       ((DWORD) 0x40010009)
+#define DBG_EXCEPTION_NOT_HANDLED   ((DWORD) 0x80010001)
 
 #endif /* WIN32_NO_STATUS */
 
@@ -442,7 +488,9 @@ typedef HANDLE *PHANDLE, *LPHANDLE;
 #define        DLL_PROCESS_ATTACH      1       /* attach process (load library) */
 #define        DLL_THREAD_ATTACH       2       /* attach new thread */
 #define        DLL_THREAD_DETACH       3       /* detach thread */
-
+#ifdef __WINESRC__
+#define DLL_WINE_PREATTACH      8       /* called before process attach for Wine builtins */
+#endif
 
 /* u.x.wProcessorArchitecture (NT) */
 #define PROCESSOR_ARCHITECTURE_INTEL   0
@@ -451,6 +499,10 @@ typedef HANDLE *PHANDLE, *LPHANDLE;
 #define PROCESSOR_ARCHITECTURE_PPC     3
 #define PROCESSOR_ARCHITECTURE_SHX     4
 #define PROCESSOR_ARCHITECTURE_ARM     5
+#define PROCESSOR_ARCHITECTURE_IA64     6
+#define PROCESSOR_ARCHITECTURE_ALPHA64  7
+#define PROCESSOR_ARCHITECTURE_MSIL     8
+#define PROCESSOR_ARCHITECTURE_AMD64    9
 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
 
 /* dwProcessorType */
@@ -458,6 +510,8 @@ typedef HANDLE *PHANDLE, *LPHANDLE;
 #define PROCESSOR_INTEL_486      486
 #define PROCESSOR_INTEL_PENTIUM  586
 #define PROCESSOR_INTEL_860      860
+#define PROCESSOR_INTEL_IA64     2200
+#define PROCESSOR_AMD_X8664      8664
 #define PROCESSOR_MIPS_R2000     2000
 #define PROCESSOR_MIPS_R3000     3000
 #define PROCESSOR_MIPS_R4000     4000
@@ -484,7 +538,7 @@ typedef struct _MEMORY_BASIC_INFORMATION
     LPVOID   BaseAddress;
     LPVOID   AllocationBase;
     DWORD    AllocationProtect;
-    DWORD    RegionSize;
+    SIZE_T   RegionSize;
     DWORD    State;
     DWORD    Protect;
     DWORD    Type;
@@ -500,6 +554,7 @@ typedef struct _MEMORY_BASIC_INFORMATION
 #define        PAGE_EXECUTE_WRITECOPY  0x80
 #define        PAGE_GUARD              0x100
 #define        PAGE_NOCACHE            0x200
+#define        PAGE_WRITECOMBINE       0x400
 
 #define MEM_COMMIT              0x00001000
 #define MEM_RESERVE             0x00002000
@@ -510,7 +565,10 @@ typedef struct _MEMORY_BASIC_INFORMATION
 #define MEM_MAPPED              0x00040000
 #define MEM_RESET               0x00080000
 #define MEM_TOP_DOWN            0x00100000
+#define MEM_WRITE_WATCH         0x00200000
 #define MEM_PHYSICAL            0x00400000
+#define MEM_LARGE_PAGES         0x20000000
+#define MEM_4MB_PAGES           0x80000000
 #ifdef __WINESRC__
 #define MEM_SYSTEM              0x80000000
 #endif
@@ -520,8 +578,11 @@ typedef struct _MEMORY_BASIC_INFORMATION
 #define SEC_RESERVE             0x04000000
 #define SEC_COMMIT              0x08000000
 #define SEC_NOCACHE             0x10000000
+#define SEC_LARGE_PAGES         0x80000000
 #define MEM_IMAGE               SEC_IMAGE
 
+#define WRITE_WATCH_FLAG_RESET  0x00000001
+
 
 #define MINCHAR       0x80
 #define MAXCHAR       0x7f
@@ -534,7 +595,7 @@ typedef struct _MEMORY_BASIC_INFORMATION
 #define MAXDWORD      0xffffffff
 
 #define FIELD_OFFSET(type, field) \
-  ((LONG)(INT)&(((type *)0)->field))
+  ((LONG)(INT_PTR)&(((type *)0)->field))
 
 #define CONTAINING_RECORD(address, type, field) \
   ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
@@ -550,6 +611,63 @@ typedef struct _SINGLE_LIST_ENTRY {
   struct _SINGLE_LIST_ENTRY *Next;
 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
 
+#ifdef _WIN64
+
+typedef struct DECLSPEC_ALIGN(16) _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
+
+#undef SLIST_ENTRY /* for Mac OS */
+#define SLIST_ENTRY SINGLE_LIST_ENTRY
+#define _SLIST_ENTRY _SINGLE_LIST_ENTRY
+#define PSLIST_ENTRY PSINGLE_LIST_ENTRY
+
+typedef union _SLIST_HEADER {
+    ULONGLONG Alignment;
+    struct {
+        SLIST_ENTRY Next;
+        WORD Depth;
+        WORD Sequence;
+    } DUMMYSTRUCTNAME;
+} SLIST_HEADER, *PSLIST_HEADER;
+
+#endif
+
+NTSYSAPI PSLIST_ENTRY WINAPI RtlFirstEntrySList(const SLIST_HEADER*);
+NTSYSAPI VOID         WINAPI RtlInitializeSListHead(PSLIST_HEADER);
+NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedFlushSList(PSLIST_HEADER);
+NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedPopEntrySList(PSLIST_HEADER);
+NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY);
+NTSYSAPI WORD         WINAPI RtlQueryDepthSList(PSLIST_HEADER);
+
+
 /* Heap flags */
 
 #define HEAP_NO_SERIALIZE               0x00000001
@@ -562,11 +680,16 @@ typedef struct _SINGLE_LIST_ENTRY {
 #define HEAP_DISABLE_COALESCE_ON_FREE   0x00000080
 #define HEAP_CREATE_ALIGN_16            0x00010000
 #define HEAP_CREATE_ENABLE_TRACING      0x00020000
+#define HEAP_CREATE_ENABLE_EXECUTE      0x00040000
 
 /* This flag allows it to create heaps shared by all processes under win95,
    FIXME: correct name */
 #define HEAP_SHARED                     0x04000000
 
+typedef enum _HEAP_INFORMATION_CLASS {
+    HeapCompatibilityInformation,
+} HEAP_INFORMATION_CLASS;
+
 /* Processor feature flags.  */
 #define PF_FLOATING_POINT_PRECISION_ERRATA     0
 #define PF_FLOATING_POINT_EMULATED             1
@@ -579,6 +702,12 @@ typedef struct _SINGLE_LIST_ENTRY {
 #define PF_RDTSC_INSTRUCTION_AVAILABLE         8
 #define PF_PAE_ENABLED                         9
 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE       10
+#define PF_SSE_DAZ_MODE_AVAILABLE              11
+#define PF_NX_ENABLED                          12
+#define PF_SSE3_INSTRUCTIONS_AVAILABLE         13
+#define PF_COMPARE_EXCHANGE128                 14
+#define PF_COMPARE64_EXCHANGE128               15
+#define PF_CHANNELS_ENABLED                    16
 
 
 /* Execution state flags */
@@ -664,7 +793,10 @@ typedef struct _CONTEXT86
 #define CONTEXT86_SEGMENTS  (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
 #define CONTEXT86_FLOATING_POINT  (CONTEXT_i386 | 0x0008L) /* 387 state */
 #define CONTEXT86_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */
+#define CONTEXT86_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020L)
 #define CONTEXT86_FULL (CONTEXT86_CONTROL | CONTEXT86_INTEGER | CONTEXT86_SEGMENTS)
+#define CONTEXT86_ALL (CONTEXT86_CONTROL | CONTEXT86_INTEGER | CONTEXT86_SEGMENTS | \
+        CONTEXT86_FLOATING_POINT | CONTEXT86_DEBUG_REGISTERS | CONTEXT86_EXTENDED_REGISTERS)
 
 /* i386 context definitions */
 #ifdef __i386__
@@ -674,39 +806,175 @@ typedef struct _CONTEXT86
 #define CONTEXT_SEGMENTS        CONTEXT86_SEGMENTS
 #define CONTEXT_FLOATING_POINT  CONTEXT86_FLOATING_POINT
 #define CONTEXT_DEBUG_REGISTERS CONTEXT86_DEBUG_REGISTERS
+#define CONTEXT_EXTENDED_REGISTERS CONTEXT86_EXTENDED_REGISTERS
 #define CONTEXT_FULL            CONTEXT86_FULL
+#define CONTEXT_ALL             CONTEXT86_ALL
 
 typedef CONTEXT86 CONTEXT;
 
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
 #endif  /* __i386__ */
 
 typedef struct _LDT_ENTRY {
     WORD       LimitLow;
     WORD       BaseLow;
     union {
-       struct {
-           BYTE        BaseMid;
-           BYTE        Flags1;/*Declare as bytes to avoid alignment problems */
-           BYTE        Flags2;
-           BYTE        BaseHi;
-       } Bytes;
-       struct {
-           unsigned    BaseMid         : 8;
-           unsigned    Type            : 5;
-           unsigned    Dpl             : 2;
-           unsigned    Pres            : 1;
-           unsigned    LimitHi         : 4;
-           unsigned    Sys             : 1;
-           unsigned    Reserved_0      : 1;
-           unsigned    Default_Big     : 1;
-           unsigned    Granularity     : 1;
-           unsigned    BaseHi          : 8;
-       } Bits;
+        struct {
+            BYTE    BaseMid;
+            BYTE    Flags1;
+            BYTE    Flags2;
+            BYTE    BaseHi;
+        } Bytes;
+        struct {
+            unsigned    BaseMid: 8;
+            unsigned    Type : 5;
+            unsigned    Dpl : 2;
+            unsigned    Pres : 1;
+            unsigned    LimitHi : 4;
+            unsigned    Sys : 1;
+            unsigned    Reserved_0 : 1;
+            unsigned    Default_Big : 1;
+            unsigned    Granularity : 1;
+            unsigned    BaseHi : 8;
+        } Bits;
     } HighWord;
 } LDT_ENTRY, *PLDT_ENTRY;
 
+/* x86-64 context definitions */
+#if defined(__x86_64__)
+
+#define CONTEXT_AMD64   0x00100000
+
+#define CONTEXT_CONTROL   (CONTEXT_AMD64 | 0x0001)
+#define CONTEXT_INTEGER   (CONTEXT_AMD64 | 0x0002)
+#define CONTEXT_SEGMENTS  (CONTEXT_AMD64 | 0x0004)
+#define CONTEXT_FLOATING_POINT  (CONTEXT_AMD64 | 0x0008L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010L)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
+
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct DECLSPEC_ALIGN(16) _M128A {
+    ULONGLONG Low;
+    LONGLONG High;
+} M128A, *PM128A;
+
+typedef struct _XMM_SAVE_AREA32 {
+    WORD ControlWord;
+    WORD StatusWord;
+    BYTE TagWord;
+    BYTE Reserved1;
+    WORD ErrorOpcode;
+    DWORD ErrorOffset;
+    WORD ErrorSelector;
+    WORD Reserved2;
+    DWORD DataOffset;
+    WORD DataSelector;
+    WORD Reserved3;
+    DWORD MxCsr;
+    DWORD MxCsr_Mask;
+    M128A FloatRegisters[8];
+    M128A XmmRegisters[16];
+    BYTE Reserved4[96];
+} XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
+
+typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
+    DWORD64 P1Home;
+    DWORD64 P2Home;
+    DWORD64 P3Home;
+    DWORD64 P4Home;
+    DWORD64 P5Home;
+    DWORD64 P6Home;
+
+    /* Control flags */
+    DWORD ContextFlags;
+    DWORD MxCsr;
+
+    /* Segment */
+    WORD SegCs;
+    WORD SegDs;
+    WORD SegEs;
+    WORD SegFs;
+    WORD SegGs;
+    WORD SegSs;
+    DWORD EFlags;
+
+    /* Debug */
+    DWORD64 Dr0;
+    DWORD64 Dr1;
+    DWORD64 Dr2;
+    DWORD64 Dr3;
+    DWORD64 Dr6;
+    DWORD64 Dr7;
+
+    /* Integer */
+    DWORD64 Rax;
+    DWORD64 Rcx;
+    DWORD64 Rdx;
+    DWORD64 Rbx;
+    DWORD64 Rsp;
+    DWORD64 Rbp;
+    DWORD64 Rsi;
+    DWORD64 Rdi;
+    DWORD64 R8;
+    DWORD64 R9;
+    DWORD64 R10;
+    DWORD64 R11;
+    DWORD64 R12;
+    DWORD64 R13;
+    DWORD64 R14;
+    DWORD64 R15;
+
+    /* Counter */
+    DWORD64 Rip;
+
+    /* Floating point */
+    union {
+        XMM_SAVE_AREA32 FltSave;
+        struct {
+            M128A Header[2];
+            M128A Legacy[8];
+            M128A Xmm0;
+            M128A Xmm1;
+            M128A Xmm2;
+            M128A Xmm3;
+            M128A Xmm4;
+            M128A Xmm5;
+            M128A Xmm6;
+            M128A Xmm7;
+            M128A Xmm8;
+            M128A Xmm9;
+            M128A Xmm10;
+            M128A Xmm11;
+            M128A Xmm12;
+            M128A Xmm13;
+            M128A Xmm14;
+            M128A Xmm15;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+
+    /* Vector */
+    M128A VectorRegister[26];
+    DWORD64 VectorControl;
+
+    /* Debug control */
+    DWORD64 DebugControl;
+    DWORD64 LastBranchToRip;
+    DWORD64 LastBranchFromRip;
+    DWORD64 LastExceptionToRip;
+    DWORD64 LastExceptionFromRip;
+} CONTEXT;
+
+#endif /* __x86_64__ */
+
 /* Alpha context definitions */
-#ifdef _ALPHA_
+#if defined(_ALPHA_) || defined(__ALPHA__) || defined(__alpha__)
 
 #define CONTEXT_ALPHA   0x00020000
 
@@ -715,6 +983,10 @@ typedef struct _LDT_ENTRY {
 #define CONTEXT_INTEGER                (CONTEXT_ALPHA | 0x00000004L)
 #define CONTEXT_FULL  (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
 
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
 typedef struct _CONTEXT
 {
     /* selected by CONTEXT_FLOATING_POINT */
@@ -801,6 +1073,64 @@ typedef struct _CONTEXT
 
 #endif  /* _ALPHA_ */
 
+#ifdef __arm__
+
+/* The following flags control the contents of the CONTEXT structure. */
+
+#define CONTEXT_ARM    0x0000040
+#define CONTEXT_CONTROL         (CONTEXT_ARM | 0x00000001L)
+#define CONTEXT_INTEGER         (CONTEXT_ARM | 0x00000002L)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct _CONTEXT {
+       /* The flags values within this flag control the contents of
+          a CONTEXT record.
+
+          If the context record is used as an input parameter, then
+          for each portion of the context record controlled by a flag
+          whose value is set, it is assumed that that portion of the
+          context record contains valid context. If the context record
+          is being used to modify a thread's context, then only that
+          portion of the threads context will be modified.
+
+          If the context record is used as an IN OUT parameter to capture
+          the context of a thread, then only those portions of the thread's
+          context corresponding to set flags will be returned.
+
+          The context record is never used as an OUT only parameter. */
+
+       ULONG ContextFlags;
+
+       /* This section is specified/returned if the ContextFlags word contains
+          the flag CONTEXT_INTEGER. */
+       ULONG R0;
+       ULONG R1;
+       ULONG R2;
+       ULONG R3;
+       ULONG R4;
+       ULONG R5;
+       ULONG R6;
+       ULONG R7;
+       ULONG R8;
+       ULONG R9;
+       ULONG R10;
+       ULONG R11;
+       ULONG R12;
+
+       ULONG Sp;
+       ULONG Lr;
+       ULONG Pc;
+       ULONG Psr;
+} CONTEXT;
+
+#endif /* __arm__ */
+
+
 /* Mips context definitions */
 #ifdef _MIPS_
 
@@ -812,6 +1142,10 @@ typedef struct _CONTEXT
 
 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
 
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
 typedef struct _CONTEXT
 {
     DWORD Argument[4];
@@ -907,6 +1241,10 @@ typedef struct _CONTEXT
 #define CONTEXT_DEBUG_REGISTERS 0x0008
 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
 
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
 typedef struct
 {
     /* These are selected by CONTEXT_FLOATING_POINT */
@@ -1025,96 +1363,6 @@ typedef struct _STACK_FRAME_HEADER
 
 #endif  /* __powerpc__ */
 
-#ifdef __ALPHA__
-
-/*
- * FIXME:
- *
- * I have no idea if any of this is right as I just ripped 
- * it from mingw-win32api.
- *
- */
-
-#define CONTEXT_ALPHA 0x20000
-#define CONTEXT_CONTROL (CONTEXT_ALPHA|1L)
-#define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA|2L)
-#define CONTEXT_INTEGER (CONTEXT_ALPHA|4L)
-#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
-typedef struct _CONTEXT {
-       ULONGLONG FltF0;
-       ULONGLONG FltF1;
-       ULONGLONG FltF2;
-       ULONGLONG FltF3;
-       ULONGLONG FltF4;
-       ULONGLONG FltF5;
-       ULONGLONG FltF6;
-       ULONGLONG FltF7;
-       ULONGLONG FltF8;
-       ULONGLONG FltF9;
-       ULONGLONG FltF10;
-       ULONGLONG FltF11;
-       ULONGLONG FltF12;
-       ULONGLONG FltF13;
-       ULONGLONG FltF14;
-       ULONGLONG FltF15;
-       ULONGLONG FltF16;
-       ULONGLONG FltF17;
-       ULONGLONG FltF18;
-       ULONGLONG FltF19;
-       ULONGLONG FltF20;
-       ULONGLONG FltF21;
-       ULONGLONG FltF22;
-       ULONGLONG FltF23;
-       ULONGLONG FltF24;
-       ULONGLONG FltF25;
-       ULONGLONG FltF26;
-       ULONGLONG FltF27;
-       ULONGLONG FltF28;
-       ULONGLONG FltF29;
-       ULONGLONG FltF30;
-       ULONGLONG FltF31;
-       ULONGLONG IntV0;
-       ULONGLONG IntT0;
-       ULONGLONG IntT1;
-       ULONGLONG IntT2;
-       ULONGLONG IntT3;
-       ULONGLONG IntT4;
-       ULONGLONG IntT5;
-       ULONGLONG IntT6;
-       ULONGLONG IntT7;
-       ULONGLONG IntS0;
-       ULONGLONG IntS1;
-       ULONGLONG IntS2;
-       ULONGLONG IntS3;
-       ULONGLONG IntS4;
-       ULONGLONG IntS5;
-       ULONGLONG IntFp;
-       ULONGLONG IntA0;
-       ULONGLONG IntA1;
-       ULONGLONG IntA2;
-       ULONGLONG IntA3;
-       ULONGLONG IntA4;
-       ULONGLONG IntA5;
-       ULONGLONG IntT8;
-       ULONGLONG IntT9;
-       ULONGLONG IntT10;
-       ULONGLONG IntT11;
-       ULONGLONG IntRa;
-       ULONGLONG IntT12;
-       ULONGLONG IntAt;
-       ULONGLONG IntGp;
-       ULONGLONG IntSp;
-       ULONGLONG IntZero;
-       ULONGLONG Fpcr;
-       ULONGLONG SoftFpcr;
-       ULONGLONG Fir;
-       DWORD Psr;
-       DWORD ContextFlags;
-       DWORD Fill[4];
-} CONTEXT;
-
-#endif  /* __ALPHA__ */
-
 #ifdef __sparc__
 
 /*
@@ -1141,6 +1389,10 @@ typedef struct _CONTEXT {
 
 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
 
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
 typedef struct _CONTEXT
 {
     DWORD ContextFlags;
@@ -1222,114 +1474,162 @@ typedef CONTEXT *PCONTEXT;
 #define DBG_UNREFERENCED_PARAMETER(u)  (u)
 #define DBG_UNREFERENCED_LOCAL_VARIABLE(u) (u)
 
-/* FIXME: are the symbolic names correct for LIDs:  0x17, 0x28,
- *       0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x3a, 0x3b, 0x3c
- */
 #define LANG_NEUTRAL        0x00
 #define LANG_INVARIANT      0x7f
 
 #define LANG_AFRIKAANS      0x36
 #define LANG_ALBANIAN       0x1c
+#define LANG_ALSATIAN       0x84
+#define LANG_AMHARIC        0x5e
 #define LANG_ARABIC         0x01
 #define LANG_ARMENIAN       0x2b
 #define LANG_ASSAMESE       0x4d
 #define LANG_AZERI          0x2c
+#define LANG_BASHKIR        0x6d
 #define LANG_BASQUE         0x2d
 #define LANG_BELARUSIAN     0x23
 #define LANG_BENGALI        0x45
+#define LANG_BOSNIAN        0x1a
+#define LANG_BOSNIAN_NEUTRAL      0x781a
+#define LANG_BRETON         0x7e
 #define LANG_BULGARIAN      0x02
 #define LANG_CATALAN        0x03
 #define LANG_CHINESE        0x04
+#define LANG_CHINESE_SIMPLIFIED   0x0004
+#define LANG_CHINESE_TRADITIONAL  0x7c04
+#define LANG_CORSICAN       0x83
 #define LANG_CROATIAN       0x1a
 #define LANG_CZECH          0x05
 #define LANG_DANISH         0x06
+#define LANG_DARI           0x8c
 #define LANG_DIVEHI         0x65
 #define LANG_DUTCH          0x13
 #define LANG_ENGLISH        0x09
 #define LANG_ESTONIAN       0x25
 #define LANG_FAEROESE       0x38
-#define LANG_FARSI          0x29
+#define LANG_FARSI          LANG_PERSIAN
+#define LANG_FILIPINO       0x64
 #define LANG_FINNISH        0x0b
 #define LANG_FRENCH         0x0c
+#define LANG_FRISIAN        0x62
 #define LANG_GALICIAN       0x56
 #define LANG_GEORGIAN       0x37
 #define LANG_GERMAN         0x07
 #define LANG_GREEK          0x08
+#define LANG_GREENLANDIC    0x6f
 #define LANG_GUJARATI       0x47
+#define LANG_HAUSA          0x68
 #define LANG_HEBREW         0x0d
 #define LANG_HINDI          0x39
 #define LANG_HUNGARIAN      0x0e
 #define LANG_ICELANDIC      0x0f
+#define LANG_IGBO           0x70
 #define LANG_INDONESIAN     0x21
+#define LANG_INUKTITUT      0x5d
+#define LANG_IRISH          0x3c
 #define LANG_ITALIAN        0x10
 #define LANG_JAPANESE       0x11
 #define LANG_KANNADA        0x4b
 #define LANG_KASHMIRI       0x60
 #define LANG_KAZAK          0x3f
+#define LANG_KHMER          0x53
+#define LANG_KICHE          0x86
+#define LANG_KINYARWANDA    0x87
 #define LANG_KONKANI        0x57
 #define LANG_KOREAN         0x12
 #define LANG_KYRGYZ         0x40
+#define LANG_LAO            0x54
 #define LANG_LATVIAN        0x26
 #define LANG_LITHUANIAN     0x27
+#define LANG_LOWER_SORBIAN  0x2e
+#define LANG_LUXEMBOURGISH  0x6e
 #define LANG_MACEDONIAN     0x2f
 #define LANG_MALAY          0x3e
 #define LANG_MALAYALAM      0x4c
+#define LANG_MALTESE        0x3a
 #define LANG_MANIPURI       0x58
+#define LANG_MAORI          0x81
+#define LANG_MAPUDUNGUN     0x7a
 #define LANG_MARATHI        0x4e
+#define LANG_MOHAWK         0x7c
 #define LANG_MONGOLIAN      0x50
 #define LANG_NEPALI         0x61
 #define LANG_NORWEGIAN      0x14
+#define LANG_OCCITAN        0x82
 #define LANG_ORIYA          0x48
+#define LANG_PASHTO         0x63
+#define LANG_PERSIAN        0x29
 #define LANG_POLISH         0x15
 #define LANG_PORTUGUESE     0x16
 #define LANG_PUNJABI        0x46
+#define LANG_QUECHUA        0x6b
 #define LANG_ROMANIAN       0x18
+#define LANG_ROMANSH        0x17
 #define LANG_RUSSIAN        0x19
+#define LANG_SAMI           0x3b
 #define LANG_SANSKRIT       0x4f
 #define LANG_SERBIAN        0x1a
+#define LANG_SERBIAN_NEUTRAL      0x7c1a
 #define LANG_SINDHI         0x59
+#define LANG_SINHALESE      0x5b
 #define LANG_SLOVAK         0x1b
 #define LANG_SLOVENIAN      0x24
+#define LANG_SOTHO          0x6c
 #define LANG_SPANISH        0x0a
 #define LANG_SWAHILI        0x41
 #define LANG_SWEDISH        0x1d
 #define LANG_SYRIAC         0x5a
+#define LANG_TAJIK          0x28
+#define LANG_TAMAZIGHT      0x5f
 #define LANG_TAMIL          0x49
 #define LANG_TATAR          0x44
 #define LANG_TELUGU         0x4a
 #define LANG_THAI           0x1e
+#define LANG_TIBETAN        0x51
+#define LANG_TIGRIGNA       0x73
+#define LANG_TSWANA         0x32
 #define LANG_TURKISH        0x1f
+#define LANG_TURKMEN        0x42
+#define LANG_UIGHUR         0x80
 #define LANG_UKRAINIAN      0x22
+#define LANG_UPPER_SORBIAN  0x2e
 #define LANG_URDU           0x20
 #define LANG_UZBEK          0x43
 #define LANG_VIETNAMESE     0x2a
+#define LANG_WELSH          0x52
+#define LANG_WOLOF          0x88
+#define LANG_XHOSA          0x34
+#define LANG_YAKUT          0x85
+#define LANG_YI             0x78
+#define LANG_YORUBA         0x6a
+#define LANG_ZULU           0x35
 
-/* FIXME: these are not in the Windows header */
-#define LANG_GAELIC         0x3c
-#define LANG_MALTESE        0x3a
-#define LANG_MAORI          0x28
-#define LANG_RHAETO_ROMANCE 0x17
-#define LANG_SAAMI          0x3b
-#define LANG_SORBIAN        0x2e
+/* These are documented by the MSDN but are missing from the Windows header */
+#define LANG_MALAGASY       0x8d
+
+/* FIXME: these are not defined anywhere */
 #define LANG_SUTU           0x30
 #define LANG_TSONGA         0x31
-#define LANG_TSWANA         0x32
 #define LANG_VENDA          0x33
-#define LANG_XHOSA          0x34
-#define LANG_ZULU           0x35
 
 /* non standard; keep the number high enough (but < 0xff) */
 #define LANG_ESPERANTO                  0x8f
 #define LANG_WALON                      0x90
 #define LANG_CORNISH                     0x91
-#define LANG_WELSH                       0x92
-#define LANG_BRETON                      0x93
+#define LANG_GAELIC                      0x94
 
 /* Sublanguage definitions */
 #define SUBLANG_NEUTRAL                  0x00    /* language neutral */
 #define SUBLANG_DEFAULT                  0x01    /* user default */
 #define SUBLANG_SYS_DEFAULT              0x02    /* system default */
-
+#define SUBLANG_CUSTOM_DEFAULT           0x03
+#define SUBLANG_CUSTOM_UNSPECIFIED       0x04
+#define SUBLANG_UI_CUSTOM_DEFAULT        0x05
+
+#define SUBLANG_AFRIKAANS_SOUTH_AFRICA     0x01
+#define SUBLANG_ALBANIAN_ALBANIA           0x01
+#define SUBLANG_ALSATIAN_FRANCE            0x01
+#define SUBLANG_AMHARIC_ETHIOPIA           0x01
 #define SUBLANG_ARABIC_SAUDI_ARABIA        0x01
 #define SUBLANG_ARABIC_IRAQ                0x02
 #define SUBLANG_ARABIC_EGYPT               0x03
@@ -1346,13 +1646,32 @@ typedef CONTEXT *PCONTEXT;
 #define SUBLANG_ARABIC_UAE                 0x0e
 #define SUBLANG_ARABIC_BAHRAIN             0x0f
 #define SUBLANG_ARABIC_QATAR               0x10
+#define SUBLANG_ARMENIAN_ARMENIA           0x01
+#define SUBLANG_ASSAMESE_INDIA             0x01
 #define SUBLANG_AZERI_LATIN                0x01
 #define SUBLANG_AZERI_CYRILLIC             0x02
+#define SUBLANG_BASHKIR_RUSSIA             0x01
+#define SUBLANG_BASQUE_BASQUE              0x01
+#define SUBLANG_BELARUSIAN_BELARUS         0x01
+#define SUBLANG_BENGALI_INDIA              0x01
+#define SUBLANG_BENGALI_BANGLADESH         0x02
+#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05
+#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08
+#define SUBLANG_BRETON_FRANCE              0x01
+#define SUBLANG_BULGARIAN_BULGARIA         0x01
+#define SUBLANG_CATALAN_CATALAN            0x01
 #define SUBLANG_CHINESE_TRADITIONAL        0x01
 #define SUBLANG_CHINESE_SIMPLIFIED         0x02
 #define SUBLANG_CHINESE_HONGKONG           0x03
 #define SUBLANG_CHINESE_SINGAPORE          0x04
 #define SUBLANG_CHINESE_MACAU              0x05
+#define SUBLANG_CORSICAN_FRANCE            0x01
+#define SUBLANG_CROATIAN_CROATIA           0x01
+#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04
+#define SUBLANG_CZECH_CZECH_REPUBLIC       0x01
+#define SUBLANG_DANISH_DENMARK             0x01
+#define SUBLANG_DARI_AFGHANISTAN           0x01
+#define SUBLANG_DIVEHI_MALDIVES            0x01
 #define SUBLANG_DUTCH                      0x01
 #define SUBLANG_DUTCH_BELGIAN              0x02
 #define SUBLANG_ENGLISH_US                 0x01
@@ -1368,32 +1687,107 @@ typedef CONTEXT *PCONTEXT;
 #define SUBLANG_ENGLISH_TRINIDAD           0x0b
 #define SUBLANG_ENGLISH_ZIMBABWE           0x0c
 #define SUBLANG_ENGLISH_PHILIPPINES        0x0d
+#define SUBLANG_ENGLISH_INDIA              0x10
+#define SUBLANG_ENGLISH_MALAYSIA           0x11
+#define SUBLANG_ENGLISH_SINGAPORE          0x12
+#define SUBLANG_ESTONIAN_ESTONIA           0x01
+#define SUBLANG_FAEROESE_FAROE_ISLANDS     0x01
+#define SUBLANG_FILIPINO_PHILIPPINES       0x01
+#define SUBLANG_FINNISH_FINLAND            0x01
 #define SUBLANG_FRENCH                     0x01
 #define SUBLANG_FRENCH_BELGIAN             0x02
 #define SUBLANG_FRENCH_CANADIAN            0x03
 #define SUBLANG_FRENCH_SWISS               0x04
 #define SUBLANG_FRENCH_LUXEMBOURG          0x05
 #define SUBLANG_FRENCH_MONACO              0x06
+#define SUBLANG_FRISIAN_NETHERLANDS        0x01
+#define SUBLANG_GALICIAN_GALICIAN          0x01
+#define SUBLANG_GEORGIAN_GEORGIA           0x01
 #define SUBLANG_GERMAN                     0x01
 #define SUBLANG_GERMAN_SWISS               0x02
 #define SUBLANG_GERMAN_AUSTRIAN            0x03
 #define SUBLANG_GERMAN_LUXEMBOURG          0x04
 #define SUBLANG_GERMAN_LIECHTENSTEIN       0x05
+#define SUBLANG_GREEK_GREECE               0x01
+#define SUBLANG_GREENLANDIC_GREENLAND      0x01
+#define SUBLANG_GUJARATI_INDIA             0x01
+#define SUBLANG_HAUSA_NIGERIA_LATIN        0x01
+#define SUBLANG_HEBREW_ISRAEL              0x01
+#define SUBLANG_HINDI_INDIA                0x01
+#define SUBLANG_HUNGARIAN_HUNGARY          0x01
+#define SUBLANG_ICELANDIC_ICELAND          0x01
+#define SUBLANG_IGBO_NIGERIA               0x01
+#define SUBLANG_INDONESIAN_INDONESIA       0x01
+#define SUBLANG_INUKTITUT_CANADA           0x01
+#define SUBLANG_INUKTITUT_CANADA_LATIN     0x02
+#define SUBLANG_IRISH_IRELAND              0x02
 #define SUBLANG_ITALIAN                    0x01
 #define SUBLANG_ITALIAN_SWISS              0x02
+#define SUBLANG_JAPANESE_JAPAN             0x01
+#define SUBLANG_KANNADA_INDIA              0x01
 #define SUBLANG_KASHMIRI_SASIA             0x02
 #define SUBLANG_KASHMIRI_INDIA             0x02
+#define SUBLANG_KAZAK_KAZAKHSTAN           0x01
+#define SUBLANG_KHMER_CAMBODIA             0x01
+#define SUBLANG_KICHE_GUATEMALA            0x01
+#define SUBLANG_KINYARWANDA_RWANDA         0X01
+#define SUBLANG_KONKANI_INDIA              0x01
 #define SUBLANG_KOREAN                     0x01
-#define SUBLANG_LITHUANIAN                 0x01
+#define SUBLANG_KYRGYZ_KYRGYZSTAN          0x01
+#define SUBLANG_LAO_LAO                    0x01
+#define SUBLANG_LATVIAN_LATVIA             0x01
+#define SUBLANG_LITHUANIAN_LITHUANIA       0x01
+#define SUBLANG_LOWER_SORBIAN_GERMANY      0x02
+#define SUBLANG_LUXEMBOURGISH_LUXEMBOURG   0x01
+#define SUBLANG_MACEDONIAN_MACEDONIA       0x01
 #define SUBLANG_MALAY_MALAYSIA             0x01
 #define SUBLANG_MALAY_BRUNEI_DARUSSALAM    0x02
+#define SUBLANG_MALAYALAM_INDIA            0x01
+#define SUBLANG_MALTESE_MALTA              0x01
+#define SUBLANG_MAORI_NEW_ZEALAND          0x01
+#define SUBLANG_MAPUDUNGUN_CHILE           0x01
+#define SUBLANG_MARATHI_INDIA              0x01
+#define SUBLANG_MOHAWK_MOHAWK              0x01
+#define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01
+#define SUBLANG_MONGOLIAN_PRC              0x02
 #define SUBLANG_NEPALI_INDIA               0x02
+#define SUBLANG_NEPALI_NEPAL               0x01
 #define SUBLANG_NORWEGIAN_BOKMAL           0x01
 #define SUBLANG_NORWEGIAN_NYNORSK          0x02
+#define SUBLANG_OCCITAN_FRANCE             0x01
+#define SUBLANG_ORIYA_INDIA                0x01
+#define SUBLANG_PASHTO_AFGHANISTAN         0x01
+#define SUBLANG_PERSIAN_IRAN               0x01
+#define SUBLANG_POLISH_POLAND              0x01
 #define SUBLANG_PORTUGUESE                 0x02
 #define SUBLANG_PORTUGUESE_BRAZILIAN       0x01
+#define SUBLANG_PUNJABI_INDIA              0x01
+#define SUBLANG_QUECHUA_BOLIVIA            0x01
+#define SUBLANG_QUECHUA_ECUADOR            0x02
+#define SUBLANG_QUECHUA_PERU               0x03
+#define SUBLANG_ROMANIAN_ROMANIA           0x01
+#define SUBLANG_ROMANSH_SWITZERLAND        0x01
+#define SUBLANG_RUSSIAN_RUSSIA             0x01
+#define SUBLANG_SAMI_NORTHERN_NORWAY       0x01
+#define SUBLANG_SAMI_NORTHERN_SWEDEN       0x02
+#define SUBLANG_SAMI_NORTHERN_FINLAND      0x03
+#define SUBLANG_SAMI_LULE_NORWAY           0x04
+#define SUBLANG_SAMI_LULE_SWEDEN           0x05
+#define SUBLANG_SAMI_SOUTHERN_NORWAY       0x06
+#define SUBLANG_SAMI_SOUTHERN_SWEDEN       0x07
+#define SUBLANG_SAMI_SKOLT_FINLAND         0x08
+#define SUBLANG_SAMI_INARI_FINLAND         0x09
+#define SUBLANG_SANSKRIT_INDIA             0x01
+#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x06
+#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07
+#define SUBLANG_SERBIAN_CROATIA            0x01
 #define SUBLANG_SERBIAN_LATIN              0x02
 #define SUBLANG_SERBIAN_CYRILLIC           0x03
+#define SUBLANG_SINDHI_AFGHANISTAN         0x02
+#define SUBLANG_SINHALESE_SRI_LANKA        0x01
+#define SUBLANG_SLOVAK_SLOVAKIA            0x01
+#define SUBLANG_SLOVENIAN_SLOVENIA         0x01
+#define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x01
 #define SUBLANG_SPANISH                    0x01
 #define SUBLANG_SPANISH_MEXICAN            0x02
 #define SUBLANG_SPANISH_MODERN             0x03
@@ -1414,20 +1808,56 @@ typedef CONTEXT *PCONTEXT;
 #define SUBLANG_SPANISH_HONDURAS           0x12
 #define SUBLANG_SPANISH_NICARAGUA          0x13
 #define SUBLANG_SPANISH_PUERTO_RICO        0x14
+#define SUBLANG_SPANISH_US                 0x15
+#define SUBLANG_SWAHILI_KENYA              0x01
 #define SUBLANG_SWEDISH                    0x01
 #define SUBLANG_SWEDISH_FINLAND            0x02
+#define SUBLANG_SYRIAC_SYRIA               0x01
+#define SUBLANG_TAJIK_TAJIKISTAN           0x01
+#define SUBLANG_TAMAZIGHT_ALGERIA_LATIN    0x02
+#define SUBLANG_TAMIL_INDIA                0x01
+#define SUBLANG_TATAR_RUSSIA               0x01
+#define SUBLANG_TELUGU_INDIA               0x01
+#define SUBLANG_THAI_THAILAND              0x01
+#define SUBLANG_TIBETAN_PRC                0x01
+#define SUBLANG_TIBETAN_BHUTAN             0x02
+#define SUBLANG_TIGRIGNA_ERITREA           0x02
+#define SUBLANG_TSWANA_SOUTH_AFRICA        0x01
+#define SUBLANG_TURKISH_TURKEY             0x01
+#define SUBLANG_TURKMEN_TURKMENISTAN       0x01
+#define SUBLANG_UIGHUR_PRC                 0x01
+#define SUBLANG_UKRAINIAN_UKRAINE          0x01
+#define SUBLANG_UPPER_SORBIAN_GERMANY      0x01
 #define SUBLANG_URDU_PAKISTAN              0x01
 #define SUBLANG_URDU_INDIA                 0x02
 #define SUBLANG_UZBEK_LATIN                0x01
 #define SUBLANG_UZBEK_CYRILLIC             0x02
-
-/* FIXME: these are not in the Windows header */
+#define SUBLANG_VIETNAMESE_VIETNAM         0x01
+#define SUBLANG_WELSH_UNITED_KINGDOM       0x01
+#define SUBLANG_WOLOF_SENEGAL              0x01
+#define SUBLANG_XHOSA_SOUTH_AFRICA         0x01
+#define SUBLANG_YAKUT_RUSSIA               0x01
+#define SUBLANG_YI_PRC                     0x01
+#define SUBLANG_YORUBA_NIGERIA             0x01
+#define SUBLANG_ZULU_SOUTH_AFRICA          0x01
+
+/* These are documented by the MSDN but are missing from the Windows header */
+#define SUBLANG_ENGLISH_IRELAND            SUBLANG_ENGLISH_EIRE
+#define SUBLANG_HAUSA_NIGERIA              SUBLANG_HAUSA_NIGERIA_LATIN
+#define SUBLANG_LAO_LAO_PDR                SUBLANG_LAO_LAO
+#define SUBLANG_LITHUANIAN                 SUBLANG_LITHUANIAN_LITHUANIA
+#define SUBLANG_PORTUGUESE_PORTUGAL        SUBLANG_PORTUGUESE
+#define SUBLANG_SWAHILI                    SUBLANG_SWAHILI_KENYA
+#define SUBLANG_SWEDISH_SWEDEN             SUBLANG_SWEDISH
+#define SUBLANG_SYRIAC                     SUBLANG_SYRIAC_SYRIA
+
+/* FIXME: these are not defined anywhere */
 #define SUBLANG_DUTCH_SURINAM              0x03
-#define SUBLANG_ROMANIAN                   0x01
+#define SUBLANG_ROMANIAN                   SUBLANG_ROMANIAN_ROMANIA
 #define SUBLANG_ROMANIAN_MOLDAVIA          0x02
-#define SUBLANG_RUSSIAN                    0x01
+#define SUBLANG_RUSSIAN                    SUBLANG_RUSSIAN_RUSSIA
 #define SUBLANG_RUSSIAN_MOLDAVIA           0x02
-#define SUBLANG_CROATIAN                   0x01
+#define SUBLANG_CROATIAN                   SUBLANG_CROATIAN_CROATIA
 #define SUBLANG_LITHUANIAN_CLASSIC         0x02
 #define SUBLANG_GAELIC                     0x01
 #define SUBLANG_GAELIC_SCOTTISH            0x02
@@ -1472,20 +1902,21 @@ typedef CONTEXT *PCONTEXT;
 #define MAXIMUM_WAIT_OBJECTS 64
 #define MAXIMUM_SUSPEND_COUNT 127
 
+#define WT_EXECUTEDEFAULT              0x00
+#define WT_EXECUTEINIOTHREAD           0x01
+#define WT_EXECUTEINUITHREAD           0x02
+#define WT_EXECUTEINWAITTHREAD         0x04
+#define WT_EXECUTEONLYONCE             0x08
+#define WT_EXECUTELONGFUNCTION         0x10
+#define WT_EXECUTEINTIMERTHREAD        0x20
+#define WT_EXECUTEINPERSISTENTIOTHREAD 0x40
+#define WT_EXECUTEINPERSISTENTTHREAD   0x80
+#define WT_EXECUTEINLONGTHREAD         0x10
+#define WT_EXECUTEDELETEWAIT           0x08
 
-/*
- * From OS/2 2.0 exception handling
- * Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD
- */
-
-#define EH_NONCONTINUABLE   0x01
-#define EH_UNWINDING        0x02
-#define EH_EXIT_UNWIND      0x04
-#define EH_STACK_INVALID    0x08
-#define EH_NESTED_CALL      0x10
 
 #define EXCEPTION_CONTINUABLE        0
-#define EXCEPTION_NONCONTINUABLE     EH_NONCONTINUABLE
+#define EXCEPTION_NONCONTINUABLE     0x01
 
 /*
  * The exception record used by Win32 to give additional information
@@ -1535,16 +1966,10 @@ typedef struct _EXCEPTION_REGISTRATION_RECORD
 } EXCEPTION_REGISTRATION_RECORD;
 
 /*
- * function pointer to a exception filter
+ * function pointer to an exception filter
  */
 
 typedef LONG (CALLBACK *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS ExceptionInfo);
-typedef LONG (CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS ExceptionInfo);
-typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
-
-DWORD WINAPI UnhandledExceptionFilter( PEXCEPTION_POINTERS epointers );
-LPTOP_LEVEL_EXCEPTION_FILTER
-WINAPI SetUnhandledExceptionFilter( LPTOP_LEVEL_EXCEPTION_FILTER filter );
 
 typedef struct _NT_TIB
 {
@@ -1589,6 +2014,8 @@ extern struct _TEB * WINAPI NtCurrentTeb(void);
 #endif
 #define GetFiberData()     (*(void **)GetCurrentFiber())
 
+#define TLS_MINIMUM_AVAILABLE 64
+
 /*
  * File formats definitions
  */
@@ -1775,7 +2202,8 @@ typedef struct _IMAGE_VXD_HEADER {
 #define        IMAGE_SIZEOF_FILE_HEADER                20
 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER       56
 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER       28
-#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER        224
+#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER      224
+#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER      240
 #define IMAGE_SIZEOF_SHORT_NAME                8
 #define IMAGE_SIZEOF_SECTION_HEADER            40
 #define IMAGE_SIZEOF_SYMBOL                    18
@@ -1786,9 +2214,18 @@ typedef struct _IMAGE_VXD_HEADER {
 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR        60
 
 /* Possible Magic values */
-#define IMAGE_NT_OPTIONAL_HDR_MAGIC        0x10b
+#define IMAGE_NT_OPTIONAL_HDR32_MAGIC      0x10b
+#define IMAGE_NT_OPTIONAL_HDR64_MAGIC      0x20b
 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC       0x107
 
+#ifdef _WIN64
+#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
+#define IMAGE_NT_OPTIONAL_HDR_MAGIC     IMAGE_NT_OPTIONAL_HDR64_MAGIC
+#else
+#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
+#define IMAGE_NT_OPTIONAL_HDR_MAGIC     IMAGE_NT_OPTIONAL_HDR32_MAGIC
+#endif
+
 /* These are indexes into the DataDirectory array */
 #define IMAGE_FILE_EXPORT_DIRECTORY            0
 #define IMAGE_FILE_IMPORT_DIRECTORY            1
@@ -1836,6 +2273,16 @@ typedef struct _IMAGE_VXD_HEADER {
 #define        IMAGE_SUBSYSTEM_EFI_ROM                 13
 #define        IMAGE_SUBSYSTEM_XBOX                    14
 
+/* DLL Characteristics */
+#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE          0x0040
+#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY       0x0080
+#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT             0x0100
+#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION          0x0200
+#define IMAGE_DLLCHARACTERISTICS_NO_SEH                0x0400
+#define IMAGE_DLLCHARACTERISTICS_NO_BIND               0x0800
+#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER            0x2000
+#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
+
 typedef struct _IMAGE_FILE_HEADER {
   WORD  Machine;
   WORD  NumberOfSections;
@@ -1853,6 +2300,45 @@ typedef struct _IMAGE_DATA_DIRECTORY {
 
 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
 
+typedef struct _IMAGE_OPTIONAL_HEADER64 {
+  WORD  Magic; /* 0x20b */
+  BYTE MajorLinkerVersion;
+  BYTE MinorLinkerVersion;
+  DWORD SizeOfCode;
+  DWORD SizeOfInitializedData;
+  DWORD SizeOfUninitializedData;
+  DWORD AddressOfEntryPoint;
+  DWORD BaseOfCode;
+  ULONGLONG ImageBase;
+  DWORD SectionAlignment;
+  DWORD FileAlignment;
+  WORD MajorOperatingSystemVersion;
+  WORD MinorOperatingSystemVersion;
+  WORD MajorImageVersion;
+  WORD MinorImageVersion;
+  WORD MajorSubsystemVersion;
+  WORD MinorSubsystemVersion;
+  DWORD Win32VersionValue;
+  DWORD SizeOfImage;
+  DWORD SizeOfHeaders;
+  DWORD CheckSum;
+  WORD Subsystem;
+  WORD DllCharacteristics;
+  ULONGLONG SizeOfStackReserve;
+  ULONGLONG SizeOfStackCommit;
+  ULONGLONG SizeOfHeapReserve;
+  ULONGLONG SizeOfHeapCommit;
+  DWORD LoaderFlags;
+  DWORD NumberOfRvaAndSizes;
+  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
+
+typedef struct _IMAGE_NT_HEADERS64 {
+  DWORD Signature;
+  IMAGE_FILE_HEADER FileHeader;
+  IMAGE_OPTIONAL_HEADER64 OptionalHeader;
+} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
+
 typedef struct _IMAGE_OPTIONAL_HEADER {
 
   /* Standard fields */
@@ -1892,13 +2378,25 @@ typedef struct _IMAGE_OPTIONAL_HEADER {
   DWORD NumberOfRvaAndSizes;
   IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; /* 0x60 */
   /* 0xE0 */
-} IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;
+} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
 
 typedef struct _IMAGE_NT_HEADERS {
   DWORD Signature; /* "PE"\0\0 */      /* 0x00 */
   IMAGE_FILE_HEADER FileHeader;                /* 0x04 */
-  IMAGE_OPTIONAL_HEADER OptionalHeader;        /* 0x18 */
-} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;
+  IMAGE_OPTIONAL_HEADER32 OptionalHeader;      /* 0x18 */
+} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
+
+#ifdef _WIN64
+typedef IMAGE_NT_HEADERS64  IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
+typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
+#else
+typedef IMAGE_NT_HEADERS32  IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
+typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
+#endif
 
 #define IMAGE_SIZEOF_SHORT_NAME 8
 
@@ -1921,8 +2419,8 @@ typedef struct _IMAGE_SECTION_HEADER {
 #define        IMAGE_SIZEOF_SECTION_HEADER 40
 
 #define IMAGE_FIRST_SECTION(ntheader) \
-  ((PIMAGE_SECTION_HEADER)((LPBYTE)&((PIMAGE_NT_HEADERS)(ntheader))->OptionalHeader + \
-                           ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader))
+  ((PIMAGE_SECTION_HEADER)(ULONG_PTR)((const BYTE *)&((const IMAGE_NT_HEADERS *)(ntheader))->OptionalHeader + \
+                           ((const IMAGE_NT_HEADERS *)(ntheader))->FileHeader.SizeOfOptionalHeader))
 
 /* These defines are for the Characteristics bitfield. */
 /* #define IMAGE_SCN_TYPE_REG                  0x00000000 - Reserved */
@@ -2173,22 +2671,33 @@ typedef struct _IMAGE_IMPORT_BY_NAME {
        BYTE    Name[1];
 } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
 
+#include <pshpack8.h>
 /* Import thunk */
-typedef struct _IMAGE_THUNK_DATA {
+typedef struct _IMAGE_THUNK_DATA64 {
        union {
-               LPBYTE    ForwarderString;
-               PDWORD    Function;
-               DWORD     Ordinal;
-               PIMAGE_IMPORT_BY_NAME   AddressOfData;
+               ULONGLONG ForwarderString;
+               ULONGLONG Function;
+               ULONGLONG Ordinal;
+               ULONGLONG AddressOfData;
        } u1;
-} IMAGE_THUNK_DATA,*PIMAGE_THUNK_DATA;
+} IMAGE_THUNK_DATA64,*PIMAGE_THUNK_DATA64;
+#include <poppack.h>
+
+typedef struct _IMAGE_THUNK_DATA32 {
+       union {
+               DWORD ForwarderString;
+               DWORD Function;
+               DWORD Ordinal;
+               DWORD AddressOfData;
+       } u1;
+} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;
 
 /* Import module directory */
 
 typedef struct _IMAGE_IMPORT_DESCRIPTOR {
        union {
                DWORD   Characteristics; /* 0 for terminating null import descriptor  */
-               PIMAGE_THUNK_DATA OriginalFirstThunk;   /* RVA to original unbound IAT */
+               DWORD   OriginalFirstThunk;     /* RVA to original unbound IAT */
        } DUMMYUNIONNAME;
        DWORD   TimeDateStamp;  /* 0 if not bound,
                                 * -1 if bound, and real date\time stamp
@@ -2200,12 +2709,29 @@ typedef struct _IMAGE_IMPORT_DESCRIPTOR {
        DWORD   ForwarderChain; /* -1 if no forwarders */
        DWORD   Name;
        /* RVA to IAT (if bound this IAT has actual addresses) */
-       PIMAGE_THUNK_DATA FirstThunk;
+       DWORD   FirstThunk;
 } IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
 
-#define        IMAGE_ORDINAL_FLAG              0x80000000
-#define        IMAGE_SNAP_BY_ORDINAL(Ordinal)  ((Ordinal & IMAGE_ORDINAL_FLAG) != 0)
-#define        IMAGE_ORDINAL(Ordinal)          (Ordinal & 0xffff)
+#define IMAGE_ORDINAL_FLAG64             (((ULONGLONG)0x80000000 << 32) | 0x00000000)
+#define IMAGE_ORDINAL_FLAG32             0x80000000
+#define IMAGE_SNAP_BY_ORDINAL64(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG64) != 0)
+#define IMAGE_SNAP_BY_ORDINAL32(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG32) != 0)
+#define IMAGE_ORDINAL64(ordinal)         ((ordinal) & 0xffff)
+#define IMAGE_ORDINAL32(ordinal)         ((ordinal) & 0xffff)
+
+#ifdef _WIN64
+#define IMAGE_ORDINAL_FLAG              IMAGE_ORDINAL_FLAG64
+#define IMAGE_SNAP_BY_ORDINAL(Ordinal)  IMAGE_SNAP_BY_ORDINAL64(Ordinal)
+#define IMAGE_ORDINAL(Ordinal)          IMAGE_ORDINAL64(Ordinal)
+typedef IMAGE_THUNK_DATA64              IMAGE_THUNK_DATA;
+typedef PIMAGE_THUNK_DATA64             PIMAGE_THUNK_DATA;
+#else
+#define IMAGE_ORDINAL_FLAG              IMAGE_ORDINAL_FLAG32
+#define IMAGE_SNAP_BY_ORDINAL(Ordinal)  IMAGE_SNAP_BY_ORDINAL32(Ordinal)
+#define IMAGE_ORDINAL(Ordinal)          IMAGE_ORDINAL32(Ordinal)
+typedef IMAGE_THUNK_DATA32              IMAGE_THUNK_DATA;
+typedef PIMAGE_THUNK_DATA32             PIMAGE_THUNK_DATA;
+#endif
 
 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR
 {
@@ -2397,6 +2923,25 @@ typedef struct _IMAGE_RELOCATION
 #define IMAGE_REL_IA64_RESERVED_16     0x0016
 #define IMAGE_REL_IA64_ADDEND          0x001F
 
+/* AMD64 relocation types */
+#define IMAGE_REL_AMD64_ABSOLUTE        0x0000
+#define IMAGE_REL_AMD64_ADDR64          0x0001
+#define IMAGE_REL_AMD64_ADDR32          0x0002
+#define IMAGE_REL_AMD64_ADDR32NB        0x0003
+#define IMAGE_REL_AMD64_REL32           0x0004
+#define IMAGE_REL_AMD64_REL32_1         0x0005
+#define IMAGE_REL_AMD64_REL32_2         0x0006
+#define IMAGE_REL_AMD64_REL32_3         0x0007
+#define IMAGE_REL_AMD64_REL32_4         0x0008
+#define IMAGE_REL_AMD64_REL32_5         0x0009
+#define IMAGE_REL_AMD64_SECTION         0x000A
+#define IMAGE_REL_AMD64_SECREL          0x000B
+#define IMAGE_REL_AMD64_SECREL7         0x000C
+#define IMAGE_REL_AMD64_TOKEN           0x000D
+#define IMAGE_REL_AMD64_SREL32          0x000E
+#define IMAGE_REL_AMD64_PAIR            0x000F
+#define IMAGE_REL_AMD64_SSPAN32         0x0010
+
 /* archive format */
 
 #define IMAGE_ARCHIVE_START_SIZE             8
@@ -2419,6 +2964,52 @@ typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
 
 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
 
+typedef struct _IMPORT_OBJECT_HEADER
+{
+    WORD     Sig1;
+    WORD     Sig2;
+    WORD     Version;
+    WORD     Machine;
+    DWORD    TimeDateStamp;
+    DWORD    SizeOfData;
+    union
+    {
+        WORD Ordinal;
+        WORD Hint;
+    } DUMMYUNIONNAME;
+    WORD     Type : 2;
+    WORD     NameType : 3;
+    WORD     Reserved : 11;
+} IMPORT_OBJECT_HEADER;
+
+#define IMPORT_OBJECT_HDR_SIG2  0xffff
+
+typedef enum IMPORT_OBJECT_TYPE
+{
+    IMPORT_OBJECT_CODE = 0,
+    IMPORT_OBJECT_DATA = 1,
+    IMPORT_OBJECT_CONST = 2
+} IMPORT_OBJECT_TYPE;
+
+typedef enum IMPORT_OBJECT_NAME_TYPE
+{
+    IMPORT_OBJECT_ORDINAL = 0,
+    IMPORT_OBJECT_NAME = 1,
+    IMPORT_OBJECT_NAME_NO_PREFIX = 2,
+    IMPORT_OBJECT_NAME_UNDECORATE = 3
+} IMPORT_OBJECT_NAME_TYPE;
+
+typedef struct _ANON_OBJECT_HEADER
+{
+    WORD     Sig1;
+    WORD     Sig2;
+    WORD     Version;
+    WORD     Machine;
+    DWORD    TimeDateStamp;
+    CLSID    ClassID;
+    DWORD    SizeOfData;
+} ANON_OBJECT_HEADER;
+
 /*
  * Resource directory stuff
  */
@@ -2494,14 +3085,31 @@ typedef VOID (CALLBACK *PIMAGE_TLS_CALLBACK)(
        LPVOID DllHandle,DWORD Reason,LPVOID Reserved
 );
 
-typedef struct _IMAGE_TLS_DIRECTORY {
-       DWORD   StartAddressOfRawData;
-       DWORD   EndAddressOfRawData;
-       LPDWORD AddressOfIndex;
-       PIMAGE_TLS_CALLBACK *AddressOfCallBacks;
-       DWORD   SizeOfZeroFill;
-       DWORD   Characteristics;
-} IMAGE_TLS_DIRECTORY,*PIMAGE_TLS_DIRECTORY;
+typedef struct _IMAGE_TLS_DIRECTORY64 {
+    ULONGLONG   StartAddressOfRawData;
+    ULONGLONG   EndAddressOfRawData;
+    ULONGLONG   AddressOfIndex;
+    ULONGLONG   AddressOfCallBacks;
+    DWORD       SizeOfZeroFill;
+    DWORD       Characteristics;
+} IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64;
+
+typedef struct _IMAGE_TLS_DIRECTORY32 {
+    DWORD   StartAddressOfRawData;
+    DWORD   EndAddressOfRawData;
+    DWORD   AddressOfIndex;
+    DWORD   AddressOfCallBacks;
+    DWORD   SizeOfZeroFill;
+    DWORD   Characteristics;
+} IMAGE_TLS_DIRECTORY32, *PIMAGE_TLS_DIRECTORY32;
+
+#ifdef _WIN64
+typedef IMAGE_TLS_DIRECTORY64           IMAGE_TLS_DIRECTORY;
+typedef PIMAGE_TLS_DIRECTORY64          PIMAGE_TLS_DIRECTORY;
+#else
+typedef IMAGE_TLS_DIRECTORY32           IMAGE_TLS_DIRECTORY;
+typedef PIMAGE_TLS_DIRECTORY32          PIMAGE_TLS_DIRECTORY;
+#endif
 
 typedef struct _IMAGE_DEBUG_DIRECTORY {
   DWORD Characteristics;
@@ -2526,6 +3134,57 @@ typedef struct _IMAGE_DEBUG_DIRECTORY {
 #define IMAGE_DEBUG_TYPE_BORLAND        9
 #define IMAGE_DEBUG_TYPE_RESERVED10    10
 
+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;
+
 typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
   DWORD NumberOfSymbols;
   DWORD LvaToFirstSymbol;
@@ -2731,6 +3390,7 @@ typedef struct _SID {
 #define        SID_MAX_SUB_AUTHORITIES         (15)    /* current max subauths */
 #define        SID_RECOMMENDED_SUB_AUTHORITIES (1)     /* recommended subauths */
 
+#define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))
 
 /*
  * ACL
@@ -2744,6 +3404,8 @@ typedef struct _SID {
 #define MIN_ACL_REVISION ACL_REVISION2
 #define MAX_ACL_REVISION ACL_REVISION4
 
+#define ACL_REVISION 2
+
 typedef struct _ACL {
     BYTE AclRevision;
     BYTE Sbz1;
@@ -2821,6 +3483,8 @@ typedef struct _ACL_SIZE_INFORMATION
 #define SE_PRIVILEGE_REMOVE            0x00000004
 #define SE_PRIVILEGE_USED_FOR_ACCESS   0x80000000
 
+#define PRIVILEGE_SET_ALL_NECESSARY     1
+
 #define SE_OWNER_DEFAULTED             0x00000001
 #define SE_GROUP_DEFAULTED             0x00000002
 #define SE_DACL_PRESENT                        0x00000004
@@ -2833,6 +3497,7 @@ typedef struct _ACL_SIZE_INFORMATION
 #define SE_SACL_AUTO_INHERITED         0x00000800
 #define SE_DACL_PROTECTED              0x00001000
 #define SE_SACL_PROTECTED              0x00002000
+#define SE_RM_CONTROL_VALID            0x00004000
 #define SE_SELF_RELATIVE               0x00008000
 
 typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
@@ -2870,7 +3535,7 @@ typedef struct {
 typedef struct _SID_AND_ATTRIBUTES {
   PSID  Sid;
   DWORD Attributes;
-} SID_AND_ATTRIBUTES;
+} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
 
 /* security entities */
 #define SECURITY_NULL_RID                      (0x00000000L)
@@ -2906,25 +3571,135 @@ typedef struct _SID_AND_ATTRIBUTES {
 #define SECURITY_ANONYMOUS_LOGON_RID            0x00000007L
 #define SECURITY_PROXY_RID                      0x00000008L
 #define SECURITY_ENTERPRISE_CONTROLLERS_RID     0x00000009L
+#define SECURITY_SERVER_LOGON_RID               SECURITY_ENTERPRISE_CONTROLLERS_RID
 #define SECURITY_PRINCIPAL_SELF_RID             0x0000000AL
 #define SECURITY_AUTHENTICATED_USER_RID         0x0000000BL
 #define SECURITY_RESTRICTED_CODE_RID            0x0000000CL
 #define SECURITY_TERMINAL_SERVER_RID            0x0000000DL
+#define SECURITY_REMOTE_LOGON_RID               0x0000000EL
+#define SECURITY_THIS_ORGANIZATION_RID          0x0000000FL
 #define SECURITY_LOCAL_SYSTEM_RID               0x00000012L
+#define SECURITY_LOCAL_SERVICE_RID              0x00000013L
+#define SECURITY_NETWORK_SERVICE_RID            0x00000014L
 #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_MAX_ALWAYS_FILTERED            0x000003E7L
+#define SECURITY_MIN_NEVER_FILTERED             0x000003E8L
+#define SECURITY_OTHER_ORGANIZATION_RID         0x000003E8L
+
+#define FOREST_USER_RID_MAX                     0x000001F3L
+#define DOMAIN_USER_RID_ADMIN                   0x000001F4L
+#define DOMAIN_USER_RID_GUEST                   0x000001F5L
+#define DOMAIN_USER_RID_KRBTGT                  0x000001F6L
+#define DOMAIN_USER_RID_MAX                     0x000003E7L
+
 #define DOMAIN_GROUP_RID_ADMINS                 0x00000200L
 #define DOMAIN_GROUP_RID_USERS                  0x00000201L
 #define DOMAIN_GROUP_RID_GUESTS                 0x00000202L
+#define DOMAIN_GROUP_RID_COMPUTERS              0x00000203L
+#define DOMAIN_GROUP_RID_CONTROLLERS            0x00000204L
+#define DOMAIN_GROUP_RID_CERT_ADMINS            0x00000205L
+#define DOMAIN_GROUP_RID_SCHEMA_ADMINS          0x00000206L
+#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS      0x00000207L
+#define DOMAIN_GROUP_RID_POLICY_ADMINS          0x00000208L
 
 #define DOMAIN_ALIAS_RID_ADMINS                 0x00000220L
 #define DOMAIN_ALIAS_RID_USERS                  0x00000221L
 #define DOMAIN_ALIAS_RID_GUESTS                 0x00000222L
+#define DOMAIN_ALIAS_RID_POWER_USERS            0x00000223L
+
+#define DOMAIN_ALIAS_RID_ACCOUNT_OPS            0x00000224L
+#define DOMAIN_ALIAS_RID_SYSTEM_OPS             0x00000225L
+#define DOMAIN_ALIAS_RID_PRINT_OPS              0x00000226L
+#define DOMAIN_ALIAS_RID_BACKUP_OPS             0x00000227L
+
+#define DOMAIN_ALIAS_RID_REPLICATOR             0x00000228L
+#define DOMAIN_ALIAS_RID_RAS_SERVERS            0x00000229L
+#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS       0x0000022AL
+#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS   0x0000022BL
+#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS 0x0000022CL
+#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS 0x0000022DL
+
+#define DOMAIN_ALIAS_RID_MONITORING_USERS       0x0000022EL
+#define DOMAIN_ALIAS_RID_LOGGING_USERS          0x0000022FL
+#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS    0x00000230L
+#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS     0x00000231L
+#define DOMAIN_ALIAS_RID_DCOM_USERS             0x00000232L
 
 #define SECURITY_SERVER_LOGON_RID              SECURITY_ENTERPRISE_CONTROLLERS_RID
 
-#define SECURITY_LOGON_IDS_RID_COUNT           (3L)
+#define SECURITY_PACKAGE_RID_COUNT              2L
+#define SECURITY_LOGON_IDS_RID_COUNT           3L
+
+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
+} WELL_KNOWN_SID_TYPE;
 
 /*
  * TOKEN_USER
@@ -3036,7 +3811,7 @@ typedef struct _TOKEN_PRIVILEGES {
 
 typedef struct _TOKEN_OWNER {
   PSID Owner;
-} TOKEN_OWNER;
+} TOKEN_OWNER, *PTOKEN_OWNER;
 
 /*
  * TOKEN_PRIMARY_GROUP
@@ -3044,7 +3819,7 @@ typedef struct _TOKEN_OWNER {
 
 typedef struct _TOKEN_PRIMARY_GROUP {
   PSID PrimaryGroup;
-} TOKEN_PRIMARY_GROUP;
+} TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP;
 
 
 /*
@@ -3053,7 +3828,7 @@ typedef struct _TOKEN_PRIMARY_GROUP {
 
 typedef struct _TOKEN_DEFAULT_DACL {
   PACL DefaultDacl;
-} TOKEN_DEFAULT_DACL;
+} TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL;
 
 /*
  * TOKEN_SOURCEL
@@ -3064,7 +3839,7 @@ typedef struct _TOKEN_DEFAULT_DACL {
 typedef struct _TOKEN_SOURCE {
   char SourceName[TOKEN_SOURCE_LENGTH];
   LUID SourceIdentifier;
-} TOKEN_SOURCE;
+} TOKEN_SOURCE, *PTOKEN_SOURCE;
 
 /*
  * TOKEN_TYPE
@@ -3086,6 +3861,8 @@ typedef enum _SECURITY_IMPERSONATION_LEVEL {
   SecurityDelegation
 } SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
 
+#define SECURITY_DYNAMIC_TRACKING   (TRUE)
+#define SECURITY_STATIC_TRACKING    (FALSE)
 
 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,
        * PSECURITY_CONTEXT_TRACKING_MODE;
@@ -3123,11 +3900,6 @@ typedef struct _TOKEN_STATISTICS {
  *     ACLs of NT
  */
 
-#define        ACL_REVISION    2
-
-#define        ACL_REVISION1   1
-#define        ACL_REVISION2   2
-
 /* ACEs, directly starting after an ACL */
 typedef struct _ACE_HEADER {
        BYTE    AceType;
@@ -3147,7 +3919,7 @@ typedef struct _ACE_HEADER {
 #define        NO_PROPAGATE_INHERIT_ACE        0x04
 #define        INHERIT_ONLY_ACE                0x08
 #define        INHERITED_ACE                   0x10
-#define        VALID_INHERIT_FLAGS             0x0F
+#define        VALID_INHERIT_FLAGS             0x1F
 
 /* AceFlags mask for what events we (should) audit */
 #define        SUCCESSFUL_ACCESS_ACE_FLAG      0x40
@@ -3195,6 +3967,9 @@ typedef enum tagSID_NAME_USE {
        SidTypeUnknown
 } SID_NAME_USE,*PSID_NAME_USE;
 
+#define ACE_OBJECT_TYPE_PRESENT 0x1
+#define ACE_INHERITED_OBJECT_TYPE_PRESENT   0x2
+
 /* Access rights */
 
 /* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */
@@ -3246,6 +4021,7 @@ typedef enum tagSID_NAME_USE {
 #define PROCESS_SET_QUOTA          0x0100
 #define PROCESS_SET_INFORMATION    0x0200
 #define PROCESS_QUERY_INFORMATION  0x0400
+#define PROCESS_SUSPEND_RESUME     0x0800
 #define PROCESS_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xfff)
 
 #define THREAD_TERMINATE           0x0001
@@ -3264,6 +4040,35 @@ typedef enum tagSID_NAME_USE {
 #define THREAD_BASE_PRIORITY_MIN   -2
 #define THREAD_BASE_PRIORITY_IDLE  -15
 
+typedef struct _QUOTA_LIMITS {
+    SIZE_T PagedPoolLimit;
+    SIZE_T NonPagedPoolLimit;
+    SIZE_T MinimumWorkingSetSize;
+    SIZE_T MaximumWorkingSetSize;
+    SIZE_T PagefileLimit;
+    LARGE_INTEGER TimeLimit;
+} QUOTA_LIMITS, *PQUOTA_LIMITS;
+
+#define QUOTA_LIMITS_HARDWS_MIN_ENABLE  0x00000001
+#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
+#define QUOTA_LIMITS_HARDWS_MAX_ENABLE  0x00000004
+#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
+
+typedef struct _QUOTA_LIMITS_EX {
+    SIZE_T PagedPoolLimit;
+    SIZE_T NonPagedPoolLimit;
+    SIZE_T MinimumWorkingSetSize;
+    SIZE_T MaximumWorkingSetSize;
+    SIZE_T PagefileLimit;
+    LARGE_INTEGER TimeLimit;
+    SIZE_T Reserved1;
+    SIZE_T Reserved2;
+    SIZE_T Reserved3;
+    SIZE_T Reserved4;
+    DWORD Flags;
+    DWORD Reserved5;
+} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
+
 #define SECTION_QUERY              0x0001
 #define SECTION_MAP_WRITE          0x0002
 #define SECTION_MAP_READ           0x0004
@@ -3299,6 +4104,8 @@ typedef enum tagSID_NAME_USE {
 #define FILE_GENERIC_EXECUTE      (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
                                    FILE_READ_ATTRIBUTES | SYNCHRONIZE)
 
+#define DUPLICATE_CLOSE_SOURCE     0x00000001
+#define DUPLICATE_SAME_ACCESS      0x00000002
 
 /* File attribute flags */
 #define FILE_SHARE_READ                        0x00000001L
@@ -3327,14 +4134,20 @@ typedef enum tagSID_NAME_USE {
 #define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010
 #define FILE_NOTIFY_CHANGE_LAST_ACCESS  0x00000020
 #define FILE_NOTIFY_CHANGE_CREATION     0x00000040
+#define FILE_NOTIFY_CHANGE_EA           0x00000080
 #define FILE_NOTIFY_CHANGE_SECURITY     0x00000100
+#define FILE_NOTIFY_CHANGE_STREAM_NAME  0x00000200
+#define FILE_NOTIFY_CHANGE_STREAM_SIZE  0x00000400
+#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
 
 #define FILE_ACTION_ADDED               0x00000001
 #define FILE_ACTION_REMOVED             0x00000002
 #define FILE_ACTION_MODIFIED            0x00000003
 #define FILE_ACTION_RENAMED_OLD_NAME    0x00000004
 #define FILE_ACTION_RENAMED_NEW_NAME    0x00000005
-
+#define FILE_ACTION_ADDED_STREAM        0x00000006
+#define FILE_ACTION_REMOVED_STREAM      0x00000007
+#define FILE_ACTION_MODIFIED_STREAM     0x00000008
 
 #define FILE_CASE_SENSITIVE_SEARCH      0x00000001
 #define FILE_CASE_PRESERVED_NAMES       0x00000002
@@ -3385,6 +4198,336 @@ typedef enum _LATENCY_TIME {
        LT_LOWEST_LATENCY
 } LATENCY_TIME, *PLATENCY_TIME;
 
+#define DISCHARGE_POLICY_CRITICAL      0
+#define DISCHARGE_POLICY_LOW           1
+#define NUM_DISCHARGE_POLICIES         4
+
+#define PO_THROTTLE_NONE               0
+#define PO_THROTTLE_CONSTANT           1
+#define PO_THROTTLE_DEGRADE            2
+#define PO_THROTTLE_ADAPTIVE           3
+
+typedef enum _POWER_ACTION {
+       PowerActionNone = 0,
+       PowerActionReserved,
+       PowerActionSleep,
+       PowerActionHibernate,
+       PowerActionShutdown,
+       PowerActionShutdownReset,
+       PowerActionShutdownOff,
+       PowerActionWarmEject
+} POWER_ACTION,
+*PPOWER_ACTION;
+
+typedef enum _SYSTEM_POWER_STATE {
+       PowerSystemUnspecified = 0,
+       PowerSystemWorking = 1,
+       PowerSystemSleeping1 = 2,
+       PowerSystemSleeping2 = 3,
+       PowerSystemSleeping3 = 4,
+       PowerSystemHibernate = 5,
+       PowerSystemShutdown = 6,
+       PowerSystemMaximum = 7
+} SYSTEM_POWER_STATE,
+*PSYSTEM_POWER_STATE;
+
+typedef enum _DEVICE_POWER_STATE {
+    PowerDeviceUnspecified,
+    PowerDeviceD0,
+    PowerDeviceD1,
+    PowerDeviceD2,
+    PowerDeviceD3,
+    PowerDeviceMaximum
+} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
+
+typedef enum _POWER_INFORMATION_LEVEL {
+        SystemPowerPolicyAc,
+        SystemPowerPolicyDc,
+        VerifySystemPolicyAc,
+        VerifySystemPolicyDc,
+        SystemPowerCapabilities,
+        SystemBatteryState,
+        SystemPowerStateHandler,
+        ProcessorStateHandler,
+        SystemPowerPolicyCurrent,
+        AdministratorPowerPolicy,
+        SystemReserveHiberFile,
+        ProcessorInformation,
+        SystemPowerInformation,
+        ProcessorStateHandler2,
+        LastWakeTime,
+        LastSleepTime,
+        SystemExecutionState,
+        SystemPowerStateNotifyHandler,
+        ProcessorPowerPolicyAc,
+        ProcessorPowerPolicyDc,
+        VerifyProcessorPowerPolicyAc,
+        VerifyProcessorPowerPolicyDc,
+        ProcessorPowerPolicyCurrent
+} POWER_INFORMATION_LEVEL;
+
+typedef struct _ADMINISTRATOR_POWER_POLICY {
+       SYSTEM_POWER_STATE MinSleep;
+       SYSTEM_POWER_STATE MaxSleep;
+       ULONG MinVideoTimeout;
+       ULONG MaxVideoTimeout;
+       ULONG MinSpindownTimeout;
+       ULONG MaxSpindownTimeout;
+} ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
+
+typedef struct {
+       ULONG Granularity;
+       ULONG Capacity;
+} BATTERY_REPORTING_SCALE,
+*PBATTERY_REPORTING_SCALE;
+
+typedef struct {
+       POWER_ACTION Action;
+       ULONG Flags;
+       ULONG EventCode;
+} POWER_ACTION_POLICY,
+*PPOWER_ACTION_POLICY;
+
+typedef struct _PROCESSOR_POWER_INFORMATION {
+       ULONG Number;
+       ULONG MaxMhz;
+       ULONG CurrentMhz;
+       ULONG MhzLimit;
+       ULONG MaxIdleState;
+       ULONG CurrentIdleState;
+} PROCESSOR_POWER_INFORMATION,
+*PPROCESSOR_POWER_INFORMATION;
+
+typedef struct _PROCESSOR_POWER_POLICY_INFO {
+       ULONG TimeCheck;
+       ULONG DemoteLimit;
+       ULONG PromoteLimit;
+       UCHAR DemotePercent;
+       UCHAR PromotePercent;
+       UCHAR Spare[2];
+       ULONG AllowDemotion:1;
+       ULONG AllowPromotion:1;
+       ULONG Reserved:30;
+} PROCESSOR_POWER_POLICY_INFO,
+*PPROCESSOR_POWER_POLICY_INFO;
+
+typedef struct _PROCESSOR_POWER_POLICY {
+       DWORD Revision;
+       BYTE DynamicThrottle;
+       BYTE Spare[3];
+       DWORD DisableCStates:1;
+       DWORD Reserved:31;
+       DWORD PolicyCount;
+       PROCESSOR_POWER_POLICY_INFO Policy[3];
+} PROCESSOR_POWER_POLICY,
+*PPROCESSOR_POWER_POLICY;
+
+typedef struct {
+       BOOLEAN AcOnLine;
+       BOOLEAN BatteryPresent;
+       BOOLEAN Charging;
+       BOOLEAN Discharging;
+       BOOLEAN Spare1[4];
+       ULONG MaxCapacity;
+       ULONG RemainingCapacity;
+       ULONG Rate;
+       ULONG EstimatedTime;
+       ULONG DefaultAlert1;
+       ULONG DefaultAlert2;
+} SYSTEM_BATTERY_STATE,
+*PSYSTEM_BATTERY_STATE;
+
+typedef struct {
+       BOOLEAN PowerButtonPresent;
+       BOOLEAN SleepButtonPresent;
+       BOOLEAN LidPresent;
+       BOOLEAN SystemS1;
+       BOOLEAN SystemS2;
+       BOOLEAN SystemS3;
+       BOOLEAN SystemS4;
+       BOOLEAN SystemS5;
+       BOOLEAN HiberFilePresent;
+       BOOLEAN FullWake;
+       BOOLEAN VideoDimPresent;
+       BOOLEAN ApmPresent;
+       BOOLEAN UpsPresent;
+       BOOLEAN ThermalControl;
+       BOOLEAN ProcessorThrottle;
+       UCHAR ProcessorMinThrottle;
+       UCHAR ProcessorMaxThrottle;
+       UCHAR spare2[4];
+       BOOLEAN DiskSpinDown;
+       UCHAR spare3[8];
+       BOOLEAN SystemBatteriesPresent;
+       BOOLEAN BatteriesAreShortTerm;
+       BATTERY_REPORTING_SCALE BatteryScale[3];
+       SYSTEM_POWER_STATE AcOnLineWake;
+       SYSTEM_POWER_STATE SoftLidWake;
+       SYSTEM_POWER_STATE RtcWake;
+       SYSTEM_POWER_STATE MinDeviceWakeState;
+       SYSTEM_POWER_STATE DefaultLowLatencyWake;
+} SYSTEM_POWER_CAPABILITIES,
+*PSYSTEM_POWER_CAPABILITIES;
+
+typedef struct _SYSTEM_POWER_INFORMATION {
+       ULONG MaxIdlenessAllowed;
+       ULONG Idleness;
+       ULONG TimeRemaining;
+       UCHAR CoolingMode;
+} SYSTEM_POWER_INFORMATION,
+*PSYSTEM_POWER_INFORMATION;
+
+typedef struct _SYSTEM_POWER_LEVEL {
+       BOOLEAN Enable;
+       UCHAR Spare[3];
+       ULONG BatteryLevel;
+       POWER_ACTION_POLICY PowerPolicy;
+       SYSTEM_POWER_STATE MinSystemState;
+} SYSTEM_POWER_LEVEL,
+*PSYSTEM_POWER_LEVEL;
+
+typedef struct _SYSTEM_POWER_POLICY {
+       ULONG Revision;
+       POWER_ACTION_POLICY PowerButton;
+       POWER_ACTION_POLICY SleepButton;
+       POWER_ACTION_POLICY LidClose;
+       SYSTEM_POWER_STATE LidOpenWake;
+       ULONG Reserved;
+       POWER_ACTION_POLICY Idle;
+       ULONG IdleTimeout;
+       UCHAR IdleSensitivity;
+       UCHAR DynamicThrottle;
+       UCHAR Spare2[2];
+       SYSTEM_POWER_STATE MinSleep;
+       SYSTEM_POWER_STATE MaxSleep;
+       SYSTEM_POWER_STATE ReducedLatencySleep;
+       ULONG WinLogonFlags;
+       ULONG Spare3;
+       ULONG DozeS4Timeout;
+       ULONG BroadcastCapacityResolution;
+       SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
+       ULONG VideoTimeout;
+       BOOLEAN VideoDimDisplay;
+       ULONG VideoReserved[3];
+       ULONG SpindownTimeout;
+       BOOLEAN OptimizeForPower;
+       UCHAR FanThrottleTolerance;
+       UCHAR ForcedThrottle;
+       UCHAR MinThrottle;
+       POWER_ACTION_POLICY OverThrottled;
+} SYSTEM_POWER_POLICY,
+*PSYSTEM_POWER_POLICY;
+
+typedef union _FILE_SEGMENT_ELEMENT {
+       PVOID64 Buffer;
+       ULONGLONG Alignment;
+} FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
+
+typedef struct _FILE_NOTIFY_INFORMATION {
+       DWORD NextEntryOffset;
+       DWORD Action;
+       DWORD FileNameLength;
+       WCHAR FileName[1];
+} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
+
+/* ----------------------------- begin tape storage --------------------- */
+
+#define TAPE_FIXED_PARTITIONS     0
+#define TAPE_SELECT_PARTITIONS    1
+#define TAPE_INITIATOR_PARTITIONS 2
+#define TAPE_ERASE_SHORT 0
+#define TAPE_ERASE_LONG  1
+#define TAPE_LOAD    0
+#define TAPE_UNLOAD  1
+#define TAPE_TENSION 2
+#define TAPE_LOCK    3
+#define TAPE_UNLOCK  4
+#define TAPE_FORMAT  5
+#define TAPE_SETMARKS  0
+#define TAPE_FILEMARKS 1
+#define TAPE_SHORT_FILEMARKS 2
+#define TAPE_LONG_FILEMARKS  3
+#define TAPE_REWIND                0
+#define TAPE_ABSOLUTE_BLOCK        1
+#define TAPE_LOGICAL_BLOCK         2
+#define TAPE_PSEUDO_LOGICAL_BLOCK  3
+#define TAPE_SPACE_END_OF_DATA     4
+#define TAPE_SPACE_RELATIVE_BLOCKS 5
+#define TAPE_SPACE_FILEMARKS       6
+#define TAPE_SPACE_SEQUENTIAL_FMKS 7
+#define TAPE_SPACE_SETMARKS        8
+#define TAPE_SPACE_SEQUENTIAL_SMKS 9
+
+typedef struct _TAPE_CREATE_PARTITION {
+    DWORD Method;
+    DWORD Count;
+    DWORD Size;
+} TAPE_CREATE_PARTITION, *PTAPE_CREATE_PARTITION;
+
+typedef struct _TAPE_ERASE {
+    DWORD Type;
+    BOOLEAN Immediate;
+} TAPE_ERASE, *PTAPE_ERASE;
+
+typedef struct _TAPE_PREPARE {
+    DWORD Operation;
+    BOOLEAN Immediate;
+} TAPE_PREPARE, *PTAPE_PREPARE;
+
+typedef struct _TAPE_SET_DRIVE_PARAMETERS {
+    BOOLEAN ECC;
+    BOOLEAN Compression;
+    BOOLEAN DataPadding;
+    BOOLEAN ReportSetmarks;
+    ULONG EOTWarningZoneSize;
+} TAPE_SET_DRIVE_PARAMETERS, *PTAPE_SET_DRIVE_PARAMETERS;
+
+typedef struct _TAPE_SET_MEDIA_PARAMETERS {
+    ULONG BlockSize;
+} TAPE_SET_MEDIA_PARAMETERS, *PTAPE_SET_MEDIA_PARAMETERS;
+
+typedef struct _TAPE_WRITE_MARKS {
+    DWORD Type;
+    DWORD Count;
+    BOOLEAN Immediate;
+} TAPE_WRITE_MARKS, *PTAPE_WRITE_MARKS;
+
+typedef struct _TAPE_GET_POSITION {
+    ULONG Type;
+    ULONG Partition;
+    ULONG OffsetLow;
+    ULONG OffsetHigh;
+} TAPE_GET_POSITION, *PTAPE_GET_POSITION;
+
+typedef struct _TAPE_SET_POSITION {
+    ULONG Method;
+    ULONG Partition;
+    LARGE_INTEGER Offset;
+    BOOLEAN Immediate;
+} TAPE_SET_POSITION, *PTAPE_SET_POSITION;
+
+typedef struct _TAPE_GET_DRIVE_PARAMETERS {
+    BOOLEAN ECC;
+    BOOLEAN Compression;
+    BOOLEAN DataPadding;
+    BOOLEAN ReportSetmarks;
+    DWORD DefaultBlockSize;
+    DWORD MaximumBlockSize;
+    DWORD MinimumBlockSize;
+    DWORD MaximumPartitionCount;
+    DWORD FeaturesLow;
+    DWORD FeaturesHigh;
+    DWORD EOTWarningZoneSize;
+} TAPE_GET_DRIVE_PARAMETERS, *PTAPE_GET_DRIVE_PARAMETERS;
+
+typedef struct _TAPE_GET_MEDIA_PARAMETERS {
+    LARGE_INTEGER Capacity;
+    LARGE_INTEGER Remaining;
+    DWORD BlockSize;
+    DWORD PartitionCount;
+    BOOLEAN WriteProtected;
+} TAPE_GET_MEDIA_PARAMETERS, *PTAPE_GET_MEDIA_PARAMETERS;
+
 /* ----------------------------- begin registry ----------------------------- */
 
 /* Registry security values */
@@ -3541,7 +4684,11 @@ typedef struct _RTL_CRITICAL_SECTION_DEBUG
   LIST_ENTRY ProcessLocksList;
   DWORD EntryCount;
   DWORD ContentionCount;
+#ifdef __WINESRC__  /* in Wine we store the name here */
+  DWORD_PTR Spare[8/sizeof(DWORD_PTR)];
+#else
   DWORD Spare[ 2 ];
+#endif
 } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
 
 typedef struct _RTL_CRITICAL_SECTION {
@@ -3554,6 +4701,7 @@ typedef struct _RTL_CRITICAL_SECTION {
 }  RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
 
 typedef VOID (NTAPI * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
+typedef VOID (NTAPI * PFLS_CALLBACK_FUNCTION) ( PVOID );
 
 #include <pshpack8.h>
 typedef struct _IO_COUNTERS {
@@ -3620,7 +4768,7 @@ DECL_WINELIB_TYPE_AW(OSVERSIONINFOEX)
 DECL_WINELIB_TYPE_AW(POSVERSIONINFOEX)
 DECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX)
 
-ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
+NTSYSAPI ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
 
 #define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
 
@@ -3661,4 +4809,88 @@ ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
 #define        VER_AND                                 6
 #define        VER_OR                                  7
 
+typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
+    DWORD dwFlags;
+    DWORD ulFormatVersion;
+    DWORD ulAssemblyCount;
+    DWORD ulRootManifestPathType;
+    DWORD ulRootManifestPathChars;
+    DWORD ulRootConfigurationPathType;
+    DWORD ulRootConfigurationPathChars;
+    DWORD ulAppDirPathType;
+    DWORD ulAppDirPathChars;
+    PCWSTR lpRootManifestPath;
+    PCWSTR lpRootConfigurationPath;
+    PCWSTR lpAppDirPath;
+} ACTIVATION_CONTEXT_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_DETAILED_INFORMATION;
+
+typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
+    DWORD ulFlags;
+    DWORD ulEncodedAssemblyIdentityLength;
+    DWORD ulManifestPathType;
+    DWORD ulManifestPathLength;
+    LARGE_INTEGER liManifestLastWriteTime;
+    DWORD ulPolicyPathType;
+    DWORD ulPolicyPathLength;
+    LARGE_INTEGER liPolicyLastWriteTime;
+    DWORD ulMetadataSatelliteRosterIndex;
+    DWORD ulManifestVersionMajor;
+    DWORD ulManifestVersionMinor;
+    DWORD ulPolicyVersionMajor;
+    DWORD ulPolicyVersionMinor;
+    DWORD ulAssemblyDirectoryNameLength;
+    PCWSTR lpAssemblyEncodedAssemblyIdentity;
+    PCWSTR lpAssemblyManifestPath;
+    PCWSTR lpAssemblyPolicyPath;
+    PCWSTR lpAssemblyDirectoryName;
+    DWORD  ulFileCount;
+} ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
+
+typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
+    DWORD ulAssemblyIndex;
+    DWORD ulFileIndexInAssembly;
+} ACTIVATION_CONTEXT_QUERY_INDEX, *PACTIVATION_CONTEXT_QUERY_INDEX;
+
+typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
+
+typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
+    DWORD ulFlags;
+    DWORD ulFilenameLength;
+    DWORD ulPathLength;
+    PCWSTR lpFileName;
+    PCWSTR lpFilePath;
+} ASSEMBLY_FILE_DETAILED_INFORMATION, *PASSEMBLY_FILE_DETAILED_INFORMATION;
+
+typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
+
+typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
+    ActivationContextBasicInformation                       = 1,
+    ActivationContextDetailedInformation                    = 2,
+    AssemblyDetailedInformationInActivationContext          = 3,
+    FileInformationInAssemblyOfAssemblyInActivationContext  = 4,
+    MaxActivationContextInfoClass,
+
+    AssemblyDetailedInformationInActivationContxt          = 3,
+    FileInformationInAssemblyOfAssemblyInActivationContxt  = 4
+} ACTIVATION_CONTEXT_INFO_CLASS;
+
+#define ACTIVATION_CONTEXT_PATH_TYPE_NONE         1
+#define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE   2
+#define ACTIVATION_CONTEXT_PATH_TYPE_URL          3
+#define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF  4
+
+#define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION          1
+#define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION               2
+#define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION      3
+#define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION        4
+#define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION     5
+#define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION  6
+#define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION        7
+#define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE    8
+#define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES                9
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* _WINNT_ */