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