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