[PSDK]
[reactos.git] / include / psdk / ntdef.h
1 #ifndef _NTDEF_
2 #define _NTDEF_
3
4 /* Dependencies */
5 #include <ctype.h>
6 #include <basetsd.h>
7 #include <excpt.h>
8 #include <sdkddkver.h>
9
10 // FIXME: Shouldn't be included!
11 #include <stdarg.h>
12 #include <string.h>
13
14 /* Helper macro to enable gcc's extension. */
15 #ifndef __GNU_EXTENSION
16 #ifdef __GNUC__
17 #define __GNU_EXTENSION __extension__
18 #else
19 #define __GNU_EXTENSION
20 #endif
21 #endif
22
23 /* Pseudo Modifiers for Input Parameters */
24
25 #ifndef IN
26 #define IN
27 #endif
28
29 #ifndef OUT
30 #define OUT
31 #endif
32
33 #ifndef OPTIONAL
34 #define OPTIONAL
35 #endif
36
37 #ifndef NOTHING
38 #define NOTHING
39 #endif
40
41 #ifndef CRITICAL
42 #define CRITICAL
43 #endif
44
45 #ifndef FAR
46 #define FAR
47 #endif
48
49
50 /* Defines the "size" of an any-size array */
51 #ifndef ANYSIZE_ARRAY
52 #define ANYSIZE_ARRAY 1
53 #endif
54
55 /* Constant modifier */
56 #ifndef CONST
57 #define CONST const
58 #endif
59
60 /* TRUE/FALSE */
61 #define FALSE 0
62 #define TRUE 1
63
64 /* NULL/NULL64 */
65 #ifndef NULL
66 #ifdef __cplusplus
67 #define NULL 0
68 #define NULL64 0
69 #else
70 #define NULL ((void *)0)
71 #define NULL64 ((void * POINTER_64)0)
72 #endif
73 #endif /* NULL */
74
75
76 //
77 // FIXME
78 // We should use the -fms-extensions compiler flag for gcc,
79 // and clean up the mess.
80 //
81 #ifndef __ANONYMOUS_DEFINED
82 #define __ANONYMOUS_DEFINED
83
84 #ifndef NONAMELESSUNION
85 #ifdef __GNUC__
86 #define _ANONYMOUS_UNION __GNU_EXTENSION
87 #define _ANONYMOUS_STRUCT __GNU_EXTENSION
88 #elif defined(__WATCOMC__) || defined(_MSC_VER)
89 #define _ANONYMOUS_UNION
90 #define _ANONYMOUS_STRUCT
91 #endif /* __GNUC__/__WATCOMC__ */
92 #endif /* NONAMELESSUNION */
93
94 #ifndef _ANONYMOUS_UNION
95 #define _ANONYMOUS_UNION
96 #define _UNION_NAME(x) x
97 #define DUMMYUNIONNAME u
98 #define DUMMYUNIONNAME2 u2
99 #define DUMMYUNIONNAME3 u3
100 #define DUMMYUNIONNAME4 u4
101 #define DUMMYUNIONNAME5 u5
102 #define DUMMYUNIONNAME6 u6
103 #define DUMMYUNIONNAME7 u7
104 #define DUMMYUNIONNAME8 u8
105 #else
106 #define _UNION_NAME(x)
107 #define DUMMYUNIONNAME
108 #define DUMMYUNIONNAME2
109 #define DUMMYUNIONNAME3
110 #define DUMMYUNIONNAME4
111 #define DUMMYUNIONNAME5
112 #define DUMMYUNIONNAME6
113 #define DUMMYUNIONNAME7
114 #define DUMMYUNIONNAME8
115 #endif
116
117 #ifndef _ANONYMOUS_STRUCT
118 #define _ANONYMOUS_STRUCT
119 #define _STRUCT_NAME(x) x
120 #define DUMMYSTRUCTNAME s
121 #define DUMMYSTRUCTNAME2 s2
122 #define DUMMYSTRUCTNAME3 s3
123 #define DUMMYSTRUCTNAME4 s4
124 #define DUMMYSTRUCTNAME5 s5
125 #else
126 #define _STRUCT_NAME(x)
127 #define DUMMYSTRUCTNAME
128 #define DUMMYSTRUCTNAME2
129 #define DUMMYSTRUCTNAME3
130 #define DUMMYSTRUCTNAME4
131 #define DUMMYSTRUCTNAME5
132 #endif
133
134 #endif /* __ANONYMOUS_DEFINED */
135
136 // FIXME
137 #undef UNALIGNED
138 #define UNALIGNED
139 #define RESTRICTED_POINTER
140
141
142 #define ARGUMENT_PRESENT(ArgumentPointer) \
143 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
144
145 /* Returns the base address of a structure from a structure member */
146 #ifndef CONTAINING_RECORD
147 #define CONTAINING_RECORD(address, type, field) \
148 ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
149 #endif
150
151 /* Returns the byte offset of the specified structure's member */
152 #ifndef __GNUC__
153 #define FIELD_OFFSET(Type, Field) ((LONG)(LONG_PTR)&(((Type*) 0)->Field))
154 #else
155 #define FIELD_OFFSET(Type, Field) __builtin_offsetof(Type, Field)
156 #endif
157
158 /* Returns the type's alignment */
159 #if defined(_MSC_VER) && (_MSC_VER >= 1300)
160 #define TYPE_ALIGNMENT(t) __alignof(t)
161 #else
162 #define TYPE_ALIGNMENT(t) FIELD_OFFSET( struct { char x; t test; }, test )
163 #endif
164
165 /* Calling Conventions */
166 #if defined(_M_IX86)
167 #define FASTCALL __fastcall
168 #else
169 #define FASTCALL
170 #endif
171
172 #define NTAPI __stdcall
173
174
175 /* Import and Export Specifiers */
176
177 /* Done the same way as in windef.h for now */
178 #define DECLSPEC_IMPORT __declspec(dllimport)
179 #define DECLSPEC_NORETURN __declspec(noreturn)
180
181 #ifndef DECLSPEC_ADDRSAFE
182 #if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
183 #define DECLSPEC_ADDRSAFE __declspec(address_safe)
184 #else
185 #define DECLSPEC_ADDRSAFE
186 #endif
187 #endif
188
189 #if !defined(_NTSYSTEM_)
190 #define NTSYSAPI DECLSPEC_IMPORT
191 #define NTSYSCALLAPI DECLSPEC_IMPORT
192 #else
193 #define NTSYSAPI
194 #if defined(_NTDLLBUILD_)
195 #define NTSYSCALLAPI
196 #else
197 #define NTSYSCALLAPI DECLSPEC_ADDRSAFE
198 #endif
199 #endif
200
201 /* Inlines */
202 #ifndef FORCEINLINE
203 #if (_MSC_VER >= 1200)
204 #define FORCEINLINE __forceinline
205 #elif (_MSC_VER)
206 #define FORCEINLINE __inline
207 #else
208 #define FORCEINLINE static __inline__ __attribute__((always_inline))
209 #endif
210 #endif
211
212 #ifndef DECLSPEC_NOINLINE
213 #if (_MSC_VER >= 1300)
214 #define DECLSPEC_NOINLINE __declspec(noinline)
215 #elif defined(__GNUC__)
216 #define DECLSPEC_NOINLINE __attribute__((noinline))
217 #else
218 #define DECLSPEC_NOINLINE
219 #endif
220 #endif
221
222 #if !defined(_M_CEE_PURE)
223 #define NTAPI_INLINE NTAPI
224 #else
225 #define NTAPI_INLINE
226 #endif
227
228 /* Use to specify structure alignment */
229 #ifndef DECLSPEC_ALIGN
230 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
231 #define DECLSPEC_ALIGN(x) __declspec(align(x))
232 #elif defined(__GNUC__)
233 #define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
234 #else
235 #define DECLSPEC_ALIGN(x)
236 #endif
237 #endif
238
239 /* Use to silence unused variable warnings when it is intentional */
240 #define UNREFERENCED_PARAMETER(P) {(P)=(P);}
241 #define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}
242 #define DBG_UNREFERENCED_PARAMETER(P)
243 #define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
244
245 /* min/max helper macros */
246 #ifndef NOMINMAX
247
248 #ifndef min
249 #define min(a,b) (((a) < (b)) ? (a) : (b))
250 #endif
251
252 #ifndef max
253 #define max(a,b) (((a) > (b)) ? (a) : (b))
254 #endif
255
256 #endif /* NOMINMAX */
257
258 /* Tell windef.h that we have defined some basic types */
259 #define BASETYPES
260
261 /* Void Pointers */
262 typedef void *PVOID;
263 //typedef void * POINTER_64 PVOID64;
264 typedef PVOID PVOID64; // FIXME!
265
266 /* Handle Type */
267 #ifdef STRICT
268 typedef void *HANDLE;
269 #define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n
270 #else
271 typedef PVOID HANDLE;
272 #define DECLARE_HANDLE(n) typedef HANDLE n
273 #endif
274 typedef HANDLE *PHANDLE;
275
276 /* Upper-Case Versions of Some Standard C Types */
277 #ifndef VOID
278 #define VOID void
279 typedef char CHAR;
280 typedef short SHORT;
281 typedef long LONG;
282 #if !defined(MIDL_PASS)
283 typedef int INT;
284 #endif
285 #endif
286 typedef double DOUBLE;
287
288 /* Unsigned Types */
289 typedef unsigned char UCHAR, *PUCHAR;
290 typedef unsigned short USHORT, *PUSHORT;
291 typedef unsigned long ULONG, *PULONG;
292 typedef CONST UCHAR *PCUCHAR;
293 typedef CONST USHORT *PCUSHORT;
294 typedef CONST ULONG *PCULONG;
295 typedef UCHAR FCHAR;
296 typedef USHORT FSHORT;
297 typedef ULONG FLONG;
298 typedef UCHAR BOOLEAN, *PBOOLEAN;
299 typedef ULONG LOGICAL;
300 typedef ULONG *PLOGICAL;
301
302 /* Signed Types */
303 typedef SHORT *PSHORT;
304 typedef LONG *PLONG;
305 typedef LONG NTSTATUS;
306 typedef NTSTATUS *PNTSTATUS;
307 typedef signed char SCHAR;
308 typedef SCHAR *PSCHAR;
309
310 #ifndef _HRESULT_DEFINED
311 #define _HRESULT_DEFINED
312 typedef LONG HRESULT;
313 #endif
314
315 /* 64-bit types */
316 __GNU_EXTENSION typedef __int64 LONGLONG, *PLONGLONG;
317 __GNU_EXTENSION typedef unsigned __int64 ULONGLONG, *PULONGLONG;
318 typedef ULONGLONG DWORDLONG, *PDWORDLONG;
319
320 /* Update Sequence Number */
321 typedef LONGLONG USN;
322
323 /* ANSI (Multi-byte Character) types */
324 typedef CHAR *PCHAR, *LPCH, *PCH;
325 typedef CONST CHAR *LPCCH, *PCCH;
326 typedef CHAR *NPSTR, *LPSTR, *PSTR;
327 typedef PSTR *PZPSTR;
328 typedef CONST PSTR *PCZPSTR;
329 typedef CONST CHAR *LPCSTR, *PCSTR;
330 typedef PCSTR *PZPCSTR;
331
332 /* Pointer to an Asciiz string */
333 typedef CHAR *PSZ;
334 typedef CONST char *PCSZ;
335
336 /* UNICODE (Wide Character) types */
337 typedef wchar_t WCHAR;
338 typedef WCHAR *PWCHAR, *LPWCH, *PWCH;
339 typedef CONST WCHAR *LPCWCH, *PCWCH;
340 typedef WCHAR *NWPSTR, *LPWSTR, *PWSTR;
341 typedef PWSTR *PZPWSTR;
342 typedef CONST PWSTR *PCZPWSTR;
343 typedef WCHAR UNALIGNED *LPUWSTR, *PUWSTR;
344 typedef CONST WCHAR *LPCWSTR, *PCWSTR;
345 typedef PCWSTR *PZPCWSTR;
346 typedef CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR;
347
348 /* Cardinal Data Types */
349 typedef char CCHAR, *PCCHAR;
350 typedef short CSHORT, *PCSHORT;
351 typedef ULONG CLONG, *PCLONG;
352
353 /* NLS basics (Locale and Language Ids) */
354 typedef ULONG LCID;
355 typedef PULONG PLCID;
356 typedef USHORT LANGID;
357
358 /* Used to store a non-float 8 byte aligned structure */
359 typedef struct _QUAD
360 {
361 _ANONYMOUS_UNION union
362 {
363 __GNU_EXTENSION __int64 UseThisFieldToCopy;
364 double DoNotUseThisField;
365 } DUMMYUNIONNAME;
366 } QUAD, *PQUAD, UQUAD, *PUQUAD;
367
368 /* Large Integer Unions */
369 #if defined(MIDL_PASS)
370 typedef struct _LARGE_INTEGER {
371 #else
372 typedef union _LARGE_INTEGER {
373 _ANONYMOUS_STRUCT struct
374 {
375 ULONG LowPart;
376 LONG HighPart;
377 } DUMMYSTRUCTNAME;
378 struct
379 {
380 ULONG LowPart;
381 LONG HighPart;
382 } u;
383 #endif /* MIDL_PASS */
384 LONGLONG QuadPart;
385 } LARGE_INTEGER, *PLARGE_INTEGER;
386
387 #if defined(MIDL_PASS)
388 typedef struct _ULARGE_INTEGER {
389 #else
390 typedef union _ULARGE_INTEGER {
391 _ANONYMOUS_STRUCT struct
392 {
393 ULONG LowPart;
394 ULONG HighPart;
395 } DUMMYSTRUCTNAME;
396 struct
397 {
398 ULONG LowPart;
399 ULONG HighPart;
400 } u;
401 #endif /* MIDL_PASS */
402 ULONGLONG QuadPart;
403 } ULARGE_INTEGER, *PULARGE_INTEGER;
404
405 /* Physical Addresses are always treated as 64-bit wide */
406 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
407
408 /* Locally Unique Identifier */
409 typedef struct _LUID {
410 ULONG LowPart;
411 LONG HighPart;
412 } LUID, *PLUID;
413
414 /* Native API Return Value Macros */
415 #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
416 #define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1)
417 #define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2)
418 #define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3)
419
420 /* String Types */
421 typedef struct _UNICODE_STRING {
422 USHORT Length;
423 USHORT MaximumLength;
424 PWSTR Buffer;
425 } UNICODE_STRING, *PUNICODE_STRING;
426 typedef const UNICODE_STRING* PCUNICODE_STRING;
427 #define UNICODE_NULL ((WCHAR)0)
428
429 typedef struct _CSTRING {
430 USHORT Length;
431 USHORT MaximumLength;
432 CONST CHAR *Buffer;
433 } CSTRING, *PCSTRING;
434 #define ANSI_NULL ((CHAR)0)
435
436 typedef struct _STRING {
437 USHORT Length;
438 USHORT MaximumLength;
439 PCHAR Buffer;
440 } STRING, *PSTRING;
441
442 typedef STRING ANSI_STRING;
443 typedef PSTRING PANSI_STRING;
444 typedef STRING OEM_STRING;
445 typedef PSTRING POEM_STRING;
446 typedef CONST STRING* PCOEM_STRING;
447 typedef STRING CANSI_STRING;
448 typedef PSTRING PCANSI_STRING;
449
450 typedef struct _STRING32 {
451 USHORT Length;
452 USHORT MaximumLength;
453 ULONG Buffer;
454 } STRING32, *PSTRING32,
455 UNICODE_STRING32, *PUNICODE_STRING32,
456 ANSI_STRING32, *PANSI_STRING32;
457
458 typedef struct _STRING64 {
459 USHORT Length;
460 USHORT MaximumLength;
461 ULONGLONG Buffer;
462 } STRING64, *PSTRING64,
463 UNICODE_STRING64, *PUNICODE_STRING64,
464 ANSI_STRING64, *PANSI_STRING64;
465
466 /* LangID and NLS */
467 #define MAKELANGID(p, s) ((((USHORT)(s)) << 10) | (USHORT)(p))
468 #define PRIMARYLANGID(lgid) ((USHORT)(lgid) & 0x3ff)
469 #define SUBLANGID(lgid) ((USHORT)(lgid) >> 10)
470
471 #define NLS_VALID_LOCALE_MASK 0x000fffff
472
473 #define MAKELCID(lgid, srtid) ((ULONG)((((ULONG)((USHORT)(srtid))) << 16) | \
474 ((ULONG)((USHORT)(lgid)))))
475 #define MAKESORTLCID(lgid, srtid, ver) \
476 ((ULONG)((MAKELCID(lgid, srtid)) | \
477 (((ULONG)((USHORT)(ver))) << 20)))
478 #define LANGIDFROMLCID(lcid) ((USHORT)(lcid))
479 #define SORTIDFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 16) & 0xf))
480 #define SORTVERSIONFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 20) & 0xf))
481
482
483 /* Object Attributes */
484 typedef struct _OBJECT_ATTRIBUTES {
485 ULONG Length;
486 HANDLE RootDirectory;
487 PUNICODE_STRING ObjectName;
488 ULONG Attributes;
489 PVOID SecurityDescriptor;
490 PVOID SecurityQualityOfService;
491 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
492 typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES;
493
494 /* Values for the Attributes member */
495 #define OBJ_INHERIT 0x00000002
496 #define OBJ_PERMANENT 0x00000010
497 #define OBJ_EXCLUSIVE 0x00000020
498 #define OBJ_CASE_INSENSITIVE 0x00000040
499 #define OBJ_OPENIF 0x00000080
500 #define OBJ_OPENLINK 0x00000100
501 #define OBJ_KERNEL_HANDLE 0x00000200
502 #define OBJ_FORCE_ACCESS_CHECK 0x00000400
503 #define OBJ_VALID_ATTRIBUTES 0x000007F2
504
505 /* Helper Macro */
506 #define InitializeObjectAttributes(p,n,a,r,s) { \
507 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
508 (p)->RootDirectory = (r); \
509 (p)->Attributes = (a); \
510 (p)->ObjectName = (n); \
511 (p)->SecurityDescriptor = (s); \
512 (p)->SecurityQualityOfService = NULL; \
513 }
514
515 /* Product Types */
516 typedef enum _NT_PRODUCT_TYPE {
517 NtProductWinNt = 1,
518 NtProductLanManNt,
519 NtProductServer
520 } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
521
522 typedef enum _EVENT_TYPE {
523 NotificationEvent,
524 SynchronizationEvent
525 } EVENT_TYPE;
526
527 typedef enum _TIMER_TYPE {
528 NotificationTimer,
529 SynchronizationTimer
530 } TIMER_TYPE;
531
532 typedef enum _WAIT_TYPE {
533 WaitAll,
534 WaitAny
535 } WAIT_TYPE;
536
537 /* Doubly Linked Lists */
538 typedef struct _LIST_ENTRY {
539 struct _LIST_ENTRY *Flink;
540 struct _LIST_ENTRY *Blink;
541 } LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;
542
543 typedef struct LIST_ENTRY32
544 {
545 ULONG Flink;
546 ULONG Blink;
547 } LIST_ENTRY32, *PLIST_ENTRY32;
548
549 typedef struct LIST_ENTRY64
550 {
551 ULONGLONG Flink;
552 ULONGLONG Blink;
553 } LIST_ENTRY64, *PLIST_ENTRY64;
554
555 /* Singly Linked Lists */
556 typedef struct _SINGLE_LIST_ENTRY {
557 struct _SINGLE_LIST_ENTRY *Next;
558 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
559
560 typedef struct _PROCESSOR_NUMBER {
561 USHORT Group;
562 UCHAR Number;
563 UCHAR Reserved;
564 } PROCESSOR_NUMBER, *PPROCESSOR_NUMBER;
565
566 struct _CONTEXT;
567 struct _EXCEPTION_RECORD;
568
569 typedef EXCEPTION_DISPOSITION
570 (NTAPI *PEXCEPTION_ROUTINE)(
571 IN struct _EXCEPTION_RECORD *ExceptionRecord,
572 IN PVOID EstablisherFrame,
573 IN OUT struct _CONTEXT *ContextRecord,
574 IN OUT PVOID DispatcherContext);
575
576 typedef struct _GROUP_AFFINITY {
577 KAFFINITY Mask;
578 USHORT Group;
579 USHORT Reserved[3];
580 } GROUP_AFFINITY, *PGROUP_AFFINITY;
581
582 /* Helper Macros */
583 #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
584
585 #define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
586
587 #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
588 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
589 #ifdef ENABLE_RTL_NUMBER_OF_V2
590 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
591 #else
592 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
593 #endif
594 #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
595
596 /* Type Limits */
597 #define MINCHAR 0x80
598 #define MAXCHAR 0x7f
599 #define MINSHORT 0x8000
600 #define MAXSHORT 0x7fff
601 #define MINLONG 0x80000000
602 #define MAXLONG 0x7fffffff
603 #define MAXUCHAR 0xff
604 #define MAXUSHORT 0xffff
605 #define MAXULONG 0xffffffff
606 #define MAXLONGLONG (0x7fffffffffffffffLL)
607
608 /* Multiplication and Shift Operations */
609 #define Int32x32To64(a,b) ((LONGLONG)(a)*(LONGLONG)(b))
610 #define UInt32x32To64(a,b) ((DWORDLONG)(a)*(DWORDLONG)(b))
611 #define Int64ShllMod32(a,b) ((DWORDLONG)(a)<<(b))
612 #define Int64ShraMod32(a,b) ((LONGLONG)(a)>>(b))
613 #define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b))
614
615 /* C_ASSERT Definition */
616 #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
617
618 /* Primary language IDs. */
619 #define LANG_NEUTRAL 0x00
620 #define LANG_INVARIANT 0x7f
621
622 #define LANG_AFRIKAANS 0x36
623 #define LANG_ALBANIAN 0x1c
624 #define LANG_ALSATIAN 0x84
625 #define LANG_AMHARIC 0x5e
626 #define LANG_ARABIC 0x01
627 #define LANG_ARMENIAN 0x2b
628 #define LANG_ASSAMESE 0x4d
629 #define LANG_AZERI 0x2c
630 #define LANG_BASHKIR 0x6d
631 #define LANG_BASQUE 0x2d
632 #define LANG_BELARUSIAN 0x23
633 #define LANG_BENGALI 0x45
634 #define LANG_BRETON 0x7e
635 #define LANG_BOSNIAN 0x1a
636 #define LANG_BOSNIAN_NEUTRAL 0x781a
637 #define LANG_BULGARIAN 0x02
638 #define LANG_CATALAN 0x03
639 #define LANG_CHINESE 0x04
640 #define LANG_CHINESE_SIMPLIFIED 0x04
641 #define LANG_CHINESE_TRADITIONAL 0x7c04
642 #define LANG_CORSICAN 0x83
643 #define LANG_CROATIAN 0x1a
644 #define LANG_CZECH 0x05
645 #define LANG_DANISH 0x06
646 #define LANG_DARI 0x8c
647 #define LANG_DIVEHI 0x65
648 #define LANG_DUTCH 0x13
649 #define LANG_ENGLISH 0x09
650 #define LANG_ESTONIAN 0x25
651 #define LANG_FAEROESE 0x38
652 #define LANG_FARSI 0x29
653 #define LANG_FILIPINO 0x64
654 #define LANG_FINNISH 0x0b
655 #define LANG_FRENCH 0x0c
656 #define LANG_FRISIAN 0x62
657 #define LANG_GALICIAN 0x56
658 #define LANG_GEORGIAN 0x37
659 #define LANG_GERMAN 0x07
660 #define LANG_GREEK 0x08
661 #define LANG_GREENLANDIC 0x6f
662 #define LANG_GUJARATI 0x47
663 #define LANG_HAUSA 0x68
664 #define LANG_HEBREW 0x0d
665 #define LANG_HINDI 0x39
666 #define LANG_HUNGARIAN 0x0e
667 #define LANG_ICELANDIC 0x0f
668 #define LANG_IGBO 0x70
669 #define LANG_INDONESIAN 0x21
670 #define LANG_INUKTITUT 0x5d
671 #define LANG_IRISH 0x3c
672 #define LANG_ITALIAN 0x10
673 #define LANG_JAPANESE 0x11
674 #define LANG_KANNADA 0x4b
675 #define LANG_KASHMIRI 0x60
676 #define LANG_KAZAK 0x3f
677 #define LANG_KHMER 0x53
678 #define LANG_KICHE 0x86
679 #define LANG_KINYARWANDA 0x87
680 #define LANG_KONKANI 0x57
681 #define LANG_KOREAN 0x12
682 #define LANG_KYRGYZ 0x40
683 #define LANG_LAO 0x54
684 #define LANG_LATVIAN 0x26
685 #define LANG_LITHUANIAN 0x27
686 #define LANG_LOWER_SORBIAN 0x2e
687 #define LANG_LUXEMBOURGISH 0x6e
688 #define LANG_MACEDONIAN 0x2f
689 #define LANG_MALAY 0x3e
690 #define LANG_MALAYALAM 0x4c
691 #define LANG_MALTESE 0x3a
692 #define LANG_MANIPURI 0x58
693 #define LANG_MAORI 0x81
694 #define LANG_MAPUDUNGUN 0x7a
695 #define LANG_MARATHI 0x4e
696 #define LANG_MOHAWK 0x7c
697 #define LANG_MONGOLIAN 0x50
698 #define LANG_NEPALI 0x61
699 #define LANG_NORWEGIAN 0x14
700 #define LANG_OCCITAN 0x82
701 #define LANG_ORIYA 0x48
702 #define LANG_PASHTO 0x63
703 #define LANG_PERSIAN 0x29
704 #define LANG_POLISH 0x15
705 #define LANG_PORTUGUESE 0x16
706 #define LANG_PUNJABI 0x46
707 #define LANG_QUECHUA 0x6b
708 #define LANG_ROMANIAN 0x18
709 #define LANG_ROMANSH 0x17
710 #define LANG_RUSSIAN 0x19
711 #define LANG_SAMI 0x3b
712 #define LANG_SANSKRIT 0x4f
713 #define LANG_SERBIAN 0x1a
714 #define LANG_SERBIAN_NEUTRAL 0x7c1a
715 #define LANG_SINDHI 0x59
716 #define LANG_SINHALESE 0x5b
717 #define LANG_SLOVAK 0x1b
718 #define LANG_SLOVENIAN 0x24
719 #define LANG_SOTHO 0x6c
720 #define LANG_SPANISH 0x0a
721 #define LANG_SWAHILI 0x41
722 #define LANG_SWEDISH 0x1d
723 #define LANG_SYRIAC 0x5a
724 #define LANG_TAJIK 0x28
725 #define LANG_TAMAZIGHT 0x5f
726 #define LANG_TAMIL 0x49
727 #define LANG_TATAR 0x44
728 #define LANG_TELUGU 0x4a
729 #define LANG_THAI 0x1e
730 #define LANG_TIBETAN 0x51
731 #define LANG_TIGRIGNA 0x73
732 #define LANG_TSWANA 0x32
733 #define LANG_TURKISH 0x1f
734 #define LANG_TURKMEN 0x42
735 #define LANG_UIGHUR 0x80
736 #define LANG_UKRAINIAN 0x22
737 #define LANG_UPPER_SORBIAN 0x2e
738 #define LANG_URDU 0x20
739 #define LANG_UZBEK 0x43
740 #define LANG_VIETNAMESE 0x2a
741 #define LANG_WELSH 0x52
742 #define LANG_WOLOF 0x88
743 #define LANG_XHOSA 0x34
744 #define LANG_YAKUT 0x85
745 #define LANG_YI 0x78
746 #define LANG_YORUBA 0x6a
747 #define LANG_ZULU 0x35
748
749 #endif /* _NTDEF_ */