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