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