Synchronize with trunk revision 59636 (just before Alex's CreateProcess revamp).
[reactos.git] / include / psdk / ntdef.h
index 18107cd..e8eb3dd 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * ntdef.h
+ *
+ * This file is part of the ReactOS PSDK package.
+ *
+ * Contributors:
+ *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
 #ifndef _NTDEF_
 #define _NTDEF_
 
@@ -6,6 +26,7 @@
 #include <basetsd.h>
 #include <excpt.h>
 #include <sdkddkver.h>
+#include <specstrings.h>
 
 // FIXME: Shouldn't be included!
 #include <stdarg.h>
@@ -20,8 +41,6 @@
 #endif
 #endif
 
-typedef unsigned long POINTER_64; // FIXME! HACK!!!
-
 /* Pseudo Modifiers for Input Parameters */
 
 #ifndef IN
@@ -135,11 +154,33 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!!
 
 #endif /* __ANONYMOUS_DEFINED */
 
-// FIXME
-#undef UNALIGNED
+#if defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64)
+#define ALIGNMENT_MACHINE
+#define UNALIGNED __unaligned
+#if defined(_WIN64)
+#define UNALIGNED64 __unaligned
+#else
+#define UNALIGNED64
+#endif
+#else
+#undef ALIGNMENT_MACHINE
 #define UNALIGNED
-#define RESTRICTED_POINTER
+#define UNALIGNED64
+#endif
 
+#if defined(_WIN64) || defined(_M_ALPHA)
+#define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
+#define MEMORY_ALLOCATION_ALIGNMENT 16
+#else
+#define MAX_NATURAL_ALIGNMENT sizeof(ULONG)
+#define MEMORY_ALLOCATION_ALIGNMENT 8
+#endif
+
+#if defined(_M_MRX000) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) && defined(ENABLE_RESTRICTED)
+#define RESTRICTED_POINTER __restrict
+#else
+#define RESTRICTED_POINTER
+#endif
 
 #define ARGUMENT_PRESENT(ArgumentPointer) \
   ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
@@ -161,7 +202,15 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!!
 #if defined(_MSC_VER) && (_MSC_VER >= 1300)
 #define TYPE_ALIGNMENT(t) __alignof(t)
 #else
-#define TYPE_ALIGNMENT(t) FIELD_OFFSET( struct { char x; t test; }, test )
+#define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
+#endif
+
+#if defined(_AMD64_) || defined(_X86_)
+#define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(ULONG)
+#elif defined(_IA64_) || defined(_ARM_)
+#define PROBE_ALIGNMENT(_s) max((TYPE_ALIGNMENT(_s), TYPE_ALIGNMENT(ULONG))
+#else
+#error "unknown architecture"
 #endif
 
 /* Calling Conventions */
@@ -186,6 +235,14 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!!
 #else
 #define DECLSPEC_ADDRSAFE
 #endif
+#endif /* DECLSPEC_ADDRSAFE */
+
+#ifndef NOP_FUNCTION
+#if (_MSC_VER >= 1210)
+#define NOP_FUNCTION __noop
+#else
+#define NOP_FUNCTION (void)0
+#endif
 #endif
 
 #if !defined(_NTSYSTEM_)
@@ -202,14 +259,18 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!!
 
 /* Inlines */
 #ifndef FORCEINLINE
-#if (_MSC_VER >= 1200)
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
 #define FORCEINLINE __forceinline
-#elif (_MSC_VER)
+#elif defined(_MSC_VER)
 #define FORCEINLINE __inline
-#else
-#define FORCEINLINE static __inline__ __attribute__((always_inline))
-#endif
+#else /* __GNUC__ */
+# if ( __MINGW_GNUC_PREREQ(4, 3)  &&  __STDC_VERSION__ >= 199901L)
+#  define FORCEINLINE extern inline __attribute__((__always_inline__,__gnu_inline__))
+# else
+#  define FORCEINLINE extern __inline__ __attribute__((__always_inline__))
+# endif
 #endif
+#endif /* FORCEINLINE */
 
 #ifndef DECLSPEC_NOINLINE
 #if (_MSC_VER >= 1300)
@@ -219,7 +280,7 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!!
 #else
 #define DECLSPEC_NOINLINE
 #endif
-#endif
+#endif /* DECLSPEC_NOINLINE */
 
 #if !defined(_M_CEE_PURE)
 #define NTAPI_INLINE    NTAPI
@@ -232,17 +293,37 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!!
 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
 #define DECLSPEC_ALIGN(x) __declspec(align(x))
 #elif defined(__GNUC__)
-#define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+#define DECLSPEC_ALIGN(x) __attribute__ ((__aligned__ (x)))
 #else
 #define DECLSPEC_ALIGN(x)
 #endif
+#endif /* DECLSPEC_ALIGN */
+
+#ifndef SYSTEM_CACHE_ALIGNMENT_SIZE
+#if defined(_AMD64_) || defined(_X86_)
+#define SYSTEM_CACHE_ALIGNMENT_SIZE 64
+#else
+#define SYSTEM_CACHE_ALIGNMENT_SIZE 128
+#endif
+#endif
+
+#ifndef DECLSPEC_CACHEALIGN
+#define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(SYSTEM_CACHE_ALIGNMENT_SIZE)
+#endif
+
+#ifndef DECLSPEC_SELECTANY
+#if (_MSC_VER >= 1100) || defined(__GNUC__)
+#define DECLSPEC_SELECTANY  __declspec(selectany)
+#else
+#define DECLSPEC_SELECTANY
+#endif
 #endif
 
 /* Use to silence unused variable warnings when it is intentional */
 #define UNREFERENCED_PARAMETER(P) {(P)=(P);}
-#define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}
-#define DBG_UNREFERENCED_PARAMETER(P)
-#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
+#define UNREFERENCED_LOCAL_VARIABLE(L) ((void)(L))
+#define DBG_UNREFERENCED_PARAMETER(P) {(P)=(P);}
+#define DBG_UNREFERENCED_LOCAL_VARIABLE(L) ((void)(L))
 
 /* min/max helper macros */
 #ifndef NOMINMAX
@@ -304,7 +385,7 @@ typedef ULONG *PLOGICAL;
 /* Signed Types */
 typedef SHORT *PSHORT;
 typedef LONG *PLONG;
-typedef LONG NTSTATUS;
+typedef _Return_type_success_(return >= 0) LONG NTSTATUS;
 typedef NTSTATUS *PNTSTATUS;
 typedef signed char SCHAR;
 typedef SCHAR *PSCHAR;
@@ -325,27 +406,28 @@ typedef LONGLONG USN;
 /* ANSI (Multi-byte Character) types */
 typedef CHAR *PCHAR, *LPCH, *PCH;
 typedef CONST CHAR *LPCCH, *PCCH;
-typedef CHAR *NPSTR, *LPSTR, *PSTR;
-typedef PSTR *PZPSTR;
-typedef CONST PSTR *PCZPSTR;
-typedef CONST CHAR *LPCSTR, *PCSTR;
-typedef PCSTR *PZPCSTR;
+typedef _Null_terminated_ CHAR *NPSTR, *LPSTR, *PSTR;
+typedef _Null_terminated_ PSTR *PZPSTR;
+typedef _Null_terminated_ CONST PSTR *PCZPSTR;
+typedef _Null_terminated_ CONST CHAR *LPCSTR, *PCSTR;
+typedef _Null_terminated_ PCSTR *PZPCSTR;
 
 /* Pointer to an Asciiz string */
-typedef CHAR *PSZ;
-typedef CONST char *PCSZ;
+typedef _Null_terminated_ CHAR *PSZ;
+typedef _Null_terminated_ CONST char *PCSZ;
 
 /* UNICODE (Wide Character) types */
 typedef wchar_t WCHAR;
 typedef WCHAR *PWCHAR, *LPWCH, *PWCH;
 typedef CONST WCHAR *LPCWCH, *PCWCH;
-typedef WCHAR *NWPSTR, *LPWSTR, *PWSTR;
-typedef PWSTR *PZPWSTR;
-typedef CONST PWSTR *PCZPWSTR;
-typedef WCHAR UNALIGNED *LPUWSTR, *PUWSTR;
-typedef CONST WCHAR *LPCWSTR, *PCWSTR;
-typedef PCWSTR *PZPCWSTR;
-typedef CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR;
+typedef _Null_terminated_ WCHAR *NWPSTR, *LPWSTR, *PWSTR;
+typedef _Null_terminated_ PWSTR *PZPWSTR;
+typedef _Null_terminated_ CONST PWSTR *PCZPWSTR;
+typedef _Null_terminated_ WCHAR UNALIGNED *LPUWSTR, *PUWSTR;
+typedef _Null_terminated_ CONST WCHAR *LPCWSTR, *PCWSTR;
+typedef _Null_terminated_ PCWSTR *PZPCWSTR;
+typedef _Null_terminated_ CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR;
+typedef _NullNull_terminated_ WCHAR *PZZWSTR;
 
 /* Cardinal Data Types */
 typedef char CCHAR, *PCCHAR;
@@ -357,6 +439,15 @@ typedef ULONG LCID;
 typedef PULONG PLCID;
 typedef USHORT LANGID;
 
+typedef enum {
+  UNSPECIFIED_COMPARTMENT_ID = 0,
+  DEFAULT_COMPARTMENT_ID
+} COMPARTMENT_ID, *PCOMPARTMENT_ID;
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4201)
+#endif
 /* Used to store a non-float 8 byte aligned structure */
 typedef struct _QUAD
 {
@@ -404,6 +495,10 @@ typedef union _ULARGE_INTEGER {
     ULONGLONG QuadPart;
 } ULARGE_INTEGER, *PULARGE_INTEGER;
 
+#ifdef _MSC_VER
+#pragma warning(pop) /* disable:4201 */
+#endif
+
 /* Physical Addresses are always treated as 64-bit wide */
 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
 
@@ -427,6 +522,8 @@ typedef struct _UNICODE_STRING {
 } UNICODE_STRING, *PUNICODE_STRING;
 typedef const UNICODE_STRING* PCUNICODE_STRING;
 #define UNICODE_NULL ((WCHAR)0)
+#define UNICODE_STRING_MAX_BYTES ((USHORT) 65534)
+#define UNICODE_STRING_MAX_CHARS (32767)
 
 typedef struct _CSTRING {
   USHORT Length;
@@ -438,7 +535,10 @@ typedef struct _CSTRING {
 typedef struct _STRING {
   USHORT Length;
   USHORT MaximumLength;
-  PCHAR  Buffer;
+#ifdef MIDL_PASS
+  [size_is(MaximumLength), length_is(Length) ]
+#endif
+  _Field_size_bytes_part_opt_(MaximumLength, Length) PCHAR Buffer;
 } STRING, *PSTRING;
 
 typedef STRING ANSI_STRING;
@@ -453,8 +553,8 @@ typedef struct _STRING32 {
     USHORT   Length;
     USHORT   MaximumLength;
     ULONG  Buffer;
-} STRING32, *PSTRING32, 
-  UNICODE_STRING32, *PUNICODE_STRING32, 
+} STRING32, *PSTRING32,
+  UNICODE_STRING32, *PUNICODE_STRING32,
   ANSI_STRING32, *PANSI_STRING32;
 
 typedef struct _STRING64 {
@@ -462,7 +562,7 @@ typedef struct _STRING64 {
     USHORT   MaximumLength;
     ULONGLONG  Buffer;
 } STRING64, *PSTRING64,
-  UNICODE_STRING64, *PUNICODE_STRING64, 
+  UNICODE_STRING64, *PUNICODE_STRING64,
   ANSI_STRING64, *PANSI_STRING64;
 
 /* LangID and NLS */
@@ -474,7 +574,7 @@ typedef struct _STRING64 {
 
 #define MAKELCID(lgid, srtid)  ((ULONG)((((ULONG)((USHORT)(srtid))) << 16) |  \
                                          ((ULONG)((USHORT)(lgid)))))
-#define MAKESORTLCID(lgid, srtid, ver)                                            \
+#define MAKESORTLCID(lgid, srtid, ver)                                        \
                                ((ULONG)((MAKELCID(lgid, srtid)) |             \
                                     (((ULONG)((USHORT)(ver))) << 20)))
 #define LANGIDFROMLCID(lcid)   ((USHORT)(lcid))
@@ -516,9 +616,9 @@ typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES;
 
 /* Product Types */
 typedef enum _NT_PRODUCT_TYPE {
-       NtProductWinNt = 1,
-       NtProductLanManNt,
-       NtProductServer
+  NtProductWinNt = 1,
+  NtProductLanManNt,
+  NtProductServer
 } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
 
 typedef enum _EVENT_TYPE {
@@ -527,8 +627,8 @@ typedef enum _EVENT_TYPE {
 } EVENT_TYPE;
 
 typedef enum _TIMER_TYPE {
-    NotificationTimer,
-    SynchronizationTimer
+  NotificationTimer,
+  SynchronizationTimer
 } TIMER_TYPE;
 
 typedef enum _WAIT_TYPE {
@@ -538,25 +638,23 @@ typedef enum _WAIT_TYPE {
 
 /* Doubly Linked Lists */
 typedef struct _LIST_ENTRY {
-   struct _LIST_ENTRY *Flink;
-   struct _LIST_ENTRY *Blink;
+  struct _LIST_ENTRY *Flink;
+  struct _LIST_ENTRY *Blink;
 } LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;
 
-typedef struct LIST_ENTRY32
-{
-    ULONG Flink;
-    ULONG Blink;
+typedef struct LIST_ENTRY32 {
+  ULONG Flink;
+  ULONG Blink;
 } LIST_ENTRY32, *PLIST_ENTRY32;
 
-typedef struct LIST_ENTRY64
-{
-    ULONGLONG Flink;
-    ULONGLONG Blink;
+typedef struct LIST_ENTRY64 {
+  ULONGLONG Flink;
+  ULONGLONG Blink;
 } LIST_ENTRY64, *PLIST_ENTRY64;
 
 /* Singly Linked Lists */
 typedef struct _SINGLE_LIST_ENTRY {
-    struct _SINGLE_LIST_ENTRY *Next;
+  struct _SINGLE_LIST_ENTRY *Next;
 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
 
 typedef struct _PROCESSOR_NUMBER {
@@ -568,12 +666,14 @@ typedef struct _PROCESSOR_NUMBER {
 struct _CONTEXT;
 struct _EXCEPTION_RECORD;
 
+_IRQL_requires_same_
+_Function_class_(EXCEPTION_ROUTINE)
 typedef EXCEPTION_DISPOSITION
 (NTAPI *PEXCEPTION_ROUTINE)(
-  IN struct _EXCEPTION_RECORD *ExceptionRecord,
-  IN PVOID EstablisherFrame,
-  IN OUT struct _CONTEXT *ContextRecord,
-  IN OUT PVOID DispatcherContext);
+    _Inout_ struct _EXCEPTION_RECORD *ExceptionRecord,
+    _In_ PVOID EstablisherFrame,
+    _Inout_ struct _CONTEXT *ContextRecord,
+    _In_ PVOID DispatcherContext);
 
 typedef struct _GROUP_AFFINITY {
   KAFFINITY Mask;
@@ -582,10 +682,21 @@ typedef struct _GROUP_AFFINITY {
 } GROUP_AFFINITY, *PGROUP_AFFINITY;
 
 /* Helper Macros */
+
+#define RTL_FIELD_TYPE(type, field)    (((type*)0)->field)
+#define RTL_BITS_OF(sizeOfArg)         (sizeof(sizeOfArg) * 8)
+#define RTL_BITS_OF_FIELD(type, field) (RTL_BITS_OF(RTL_FIELD_TYPE(type, field)))
+
 #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
 
 #define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
 
+#define RTL_SIZEOF_THROUGH_FIELD(type, field) \
+    (FIELD_OFFSET(type, field) + RTL_FIELD_SIZE(type, field))
+
+#define RTL_CONTAINS_FIELD(Struct, Size, Field) \
+    ( (((PCHAR)(&(Struct)->Field)) + sizeof((Struct)->Field)) <= (((PCHAR)(Struct))+(Size)) )
+
 #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
 #ifdef ENABLE_RTL_NUMBER_OF_V2
@@ -617,135 +728,163 @@ typedef struct _GROUP_AFFINITY {
 /* C_ASSERT Definition */
 #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
 
+/* Eliminate Microsoft C/C++ compiler warning 4715 */
+#if defined(_MSC_VER) && (_MSC_VER > 1200)
+# define DEFAULT_UNREACHABLE default: __assume(0)
+#elif defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5))))
+# define DEFAULT_UNREACHABLE default: __builtin_unreachable()
+#else
+# define DEFAULT_UNREACHABLE default: break
+#endif
+
+#define VER_WORKSTATION_NT                  0x40000000
+#define VER_SERVER_NT                       0x80000000
+#define VER_SUITE_SMALLBUSINESS             0x00000001
+#define VER_SUITE_ENTERPRISE                0x00000002
+#define VER_SUITE_BACKOFFICE                0x00000004
+#define VER_SUITE_COMMUNICATIONS            0x00000008
+#define VER_SUITE_TERMINAL                  0x00000010
+#define VER_SUITE_SMALLBUSINESS_RESTRICTED  0x00000020
+#define VER_SUITE_EMBEDDEDNT                0x00000040
+#define VER_SUITE_DATACENTER                0x00000080
+#define VER_SUITE_SINGLEUSERTS              0x00000100
+#define VER_SUITE_PERSONAL                  0x00000200
+#define VER_SUITE_BLADE                     0x00000400
+#define VER_SUITE_EMBEDDED_RESTRICTED       0x00000800
+#define VER_SUITE_SECURITY_APPLIANCE        0x00001000
+#define VER_SUITE_STORAGE_SERVER            0x00002000
+#define VER_SUITE_COMPUTE_SERVER            0x00004000
+#define VER_SUITE_WH_SERVER                 0x00008000
+
 /*  Primary language IDs. */
-#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_BRETON                      0x7e
-#define LANG_BOSNIAN                     0x1a
-#define LANG_BOSNIAN_NEUTRAL           0x781a
-#define LANG_BULGARIAN                   0x02
-#define LANG_CATALAN                     0x03
-#define LANG_CHINESE                     0x04
-#define LANG_CHINESE_SIMPLIFIED          0x04
-#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_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
+#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_BRETON                               0x7e
+#define LANG_BOSNIAN                              0x1a
+#define LANG_BOSNIAN_NEUTRAL                    0x781a
+#define LANG_BULGARIAN                            0x02
+#define LANG_CATALAN                              0x03
+#define LANG_CHINESE                              0x04
+#define LANG_CHINESE_SIMPLIFIED                   0x04
+#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_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
 
 #endif /* _NTDEF_ */