ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/MSYS2/mingw32/i686-w64-mingw32/include/ntdef.h
Revision: 1166
Committed: Tue Oct 26 14:22:36 2021 UTC (4 years ago) by rossy
Content type: text/x-chdr
File size: 31498 byte(s)
Log Message:
Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File Contents

# Content
1 /*
2 * ntdef.h
3 *
4 * This file is part of the ReactOS PSDK package.
5 *
6 * Contributors:
7 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
8 *
9 * THIS SOFTWARE IS NOT COPYRIGHTED
10 *
11 * This source code is offered for use in the public domain. You may
12 * use, modify or distribute it freely.
13 *
14 * This code is distributed in the hope that it will be useful but
15 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
16 * DISCLAIMED. This includes but is not limited to warranties of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 *
19 */
20
21 #ifndef _NTDEF_
22 #define _NTDEF_
23
24 #ifdef _WINNT_
25 /* FIXME: In version two, warn about including both ntdef.h and winnt.h
26 * #warning Including winnt.h and ntdef.h is deprecated and will be removed in a future release. Please use winternl.h
27 */
28 #endif
29
30 #include <_mingw.h>
31
32 #if defined(__x86_64) && \
33 !(defined(_X86_) || defined(__i386__) || defined(_IA64_))
34 #if !defined(_AMD64_)
35 #define _AMD64_
36 #endif
37 #endif /* _AMD64_ */
38
39 #if defined(__ia64__) && \
40 !(defined(_X86_) || defined(__x86_64) || defined(_AMD64_))
41 #if !defined(_IA64_)
42 #define _IA64_
43 #endif
44 #endif /* _IA64_ */
45
46 /* Dependencies */
47 #include <ctype.h>
48 #include <basetsd.h>
49 #include <excpt.h>
50 #include <sdkddkver.h>
51 #include <specstrings.h>
52
53 /* FIXME: Shouldn't be included! */
54 #include <stdarg.h>
55 #include <string.h>
56
57 /* Pseudo Modifiers for Input Parameters */
58
59 #ifndef IN
60 #define IN
61 #endif
62
63 #ifndef OUT
64 #define OUT
65 #endif
66
67 #ifndef OPTIONAL
68 #define OPTIONAL
69 #endif
70
71 #ifndef NOTHING
72 #define NOTHING
73 #endif
74
75 #ifndef CRITICAL
76 #define CRITICAL
77 #endif
78
79 #ifndef FAR
80 #define FAR
81 #endif
82
83
84 /* Defines the "size" of an any-size array */
85 #ifndef ANYSIZE_ARRAY
86 #define ANYSIZE_ARRAY 1
87 #endif
88
89 /* Constant modifier */
90 #ifndef CONST
91 #define CONST const
92 #endif
93
94 /* TRUE/FALSE */
95 #define FALSE 0
96 #define TRUE 1
97
98 /* NULL/NULL64 */
99 #ifndef NULL
100 #ifdef __cplusplus
101 #ifndef _WIN64
102 #define NULL 0
103 #else
104 #define NULL 0LL
105 #endif /* W64 */
106 #else
107 #define NULL ((void *)0)
108 #endif
109 #endif /* NULL */
110 #ifndef NULL64
111 #ifdef __cplusplus
112 #define NULL64 0LL
113 #else
114 #define NULL64 ((void * POINTER_64)0)
115 #endif
116 #endif /* NULL64 */
117
118
119 #undef UNALIGNED /* avoid redefinition warnings vs _mingw.h */
120 #undef UNALIGNED64
121 #if defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64) || defined (_M_ARM)
122 #define ALIGNMENT_MACHINE
123 #define UNALIGNED __unaligned
124 #if defined(_WIN64)
125 #define UNALIGNED64 __unaligned
126 #else
127 #define UNALIGNED64
128 #endif
129 #else
130 #undef ALIGNMENT_MACHINE
131 #define UNALIGNED
132 #define UNALIGNED64
133 #endif
134
135 #if defined(_WIN64) || defined(_M_ALPHA)
136 #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
137 #define MEMORY_ALLOCATION_ALIGNMENT 16
138 #else
139 #define MAX_NATURAL_ALIGNMENT sizeof(ULONG)
140 #define MEMORY_ALLOCATION_ALIGNMENT 8
141 #endif
142
143 #if defined(_M_MRX000) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) && defined(ENABLE_RESTRICTED)
144 #define RESTRICTED_POINTER __restrict
145 #else
146 #define RESTRICTED_POINTER
147 #endif
148
149
150 #define ARGUMENT_PRESENT(ArgumentPointer) \
151 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
152
153 /* Returns the base address of a structure from a structure member */
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 /* Returns the byte offset of the specified structure's member */
160 #ifndef __GNUC__
161 #define FIELD_OFFSET(Type, Field) ((LONG)(LONG_PTR)&(((Type*) 0)->Field))
162 #else
163 #define FIELD_OFFSET(Type, Field) __builtin_offsetof(Type, Field)
164 #endif
165
166 /* Returns the type's alignment */
167 #if defined(_MSC_VER) && (_MSC_VER >= 1300)
168 #define TYPE_ALIGNMENT(t) __alignof(t)
169 #else
170 #define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
171 #endif
172
173 #if defined (_X86_) || defined (_AMD64_)
174 #define PROBE_ALIGNMENT(v) TYPE_ALIGNMENT(ULONG)
175 #elif defined (_IA64_) || defined (_ARM_)
176 #define PROBE_ALIGNMENT(v) (TYPE_ALIGNMENT(v) > TYPE_ALIGNMENT(ULONG) ? TYPE_ALIGNMENT(v) : TYPE_ALIGNMENT(ULONG))
177 #endif
178
179 /* Calling Conventions */
180 #if defined(_M_IX86)
181 #define FASTCALL __fastcall
182 #else
183 #define FASTCALL
184 #endif
185
186 #if defined(_ARM_)
187 #define NTAPI
188 #else
189 #define NTAPI __stdcall
190 #endif
191
192
193 #ifndef NOP_FUNCTION
194 #if (_MSC_VER >= 1210)
195 #define NOP_FUNCTION __noop
196 #else
197 #define NOP_FUNCTION (void)0
198 #endif
199 #endif
200
201 /* Import and Export Specifiers */
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 #ifndef DECLSPEC_ADDRSAFE
208 #if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
209 #define DECLSPEC_ADDRSAFE __declspec(address_safe)
210 #else
211 #define DECLSPEC_ADDRSAFE
212 #endif
213 #endif /* DECLSPEC_ADDRSAFE */
214
215 #if !defined(_NTSYSTEM_)
216 #define NTSYSAPI DECLSPEC_IMPORT
217 #define NTSYSCALLAPI DECLSPEC_IMPORT
218 #else
219 #define NTSYSAPI
220 #if defined(_NTDLLBUILD_)
221 #define NTSYSCALLAPI
222 #else
223 #define NTSYSCALLAPI DECLSPEC_ADDRSAFE
224 #endif
225 #endif
226
227 /* Inlines */
228 #ifndef FORCEINLINE
229 #if !defined(_MSC_VER) || (_MSC_VER >=1200)
230 #define FORCEINLINE __forceinline
231 #else
232 #define FORCEINLINE __inline
233 #endif
234 #endif /* FORCEINLINE */
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 /* DECLSPEC_NOINLINE */
245
246 #if !defined(_M_CEE_PURE)
247 #define NTAPI_INLINE NTAPI
248 #else
249 #define NTAPI_INLINE
250 #endif
251
252 /* Use to specify structure alignment */
253 #ifndef DECLSPEC_ALIGN
254 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
255 #define DECLSPEC_ALIGN(x) __declspec(align(x))
256 #elif defined(__GNUC__)
257 #define DECLSPEC_ALIGN(x) __attribute__ ((__aligned__ (x)))
258 #else
259 #define DECLSPEC_ALIGN(x)
260 #endif
261 #endif /* DECLSPEC_ALIGN */
262
263 #ifndef SYSTEM_CACHE_ALIGNMENT_SIZE
264 #if defined(_AMD64_) || defined(_X86_)
265 #define SYSTEM_CACHE_ALIGNMENT_SIZE 64
266 #else
267 #define SYSTEM_CACHE_ALIGNMENT_SIZE 128
268 #endif
269 #endif
270
271 #ifndef DECLSPEC_CACHEALIGN
272 #define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(SYSTEM_CACHE_ALIGNMENT_SIZE)
273 #endif
274
275 #ifndef DECLSPEC_SELECTANY
276 #if (_MSC_VER >= 1100) || defined(__GNUC__)
277 #define DECLSPEC_SELECTANY __declspec(selectany)
278 #else
279 #define DECLSPEC_SELECTANY
280 #endif
281 #endif
282
283 /* Use to silence unused variable warnings when it is intentional */
284 #define UNREFERENCED_PARAMETER(P) {(P) = (P);}
285 #define UNREFERENCED_LOCAL_VARIABLE(L) {(L) = (L);}
286 #define DBG_UNREFERENCED_PARAMETER(P) (P)
287 #define DBG_UNREFERENCED_LOCAL_VARIABLE(L) (L)
288
289 /* min/max helper macros */
290 #ifndef NOMINMAX
291
292 #ifndef min
293 #define min(a,b) (((a) < (b)) ? (a) : (b))
294 #endif
295
296 #ifndef max
297 #define max(a,b) (((a) > (b)) ? (a) : (b))
298 #endif
299
300 #endif /* NOMINMAX */
301
302 /* Tell windef.h that we have defined some basic types */
303 #define BASETYPES
304
305 /* Void Pointers */
306 typedef void *PVOID;
307 typedef void * POINTER_64 PVOID64;
308
309 /* Handle Type */
310 #ifdef STRICT
311 typedef void *HANDLE;
312 #define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n
313 #else
314 typedef PVOID HANDLE;
315 #define DECLARE_HANDLE(n) typedef HANDLE n
316 #endif
317 typedef HANDLE *PHANDLE;
318
319 /* Upper-Case Versions of Some Standard C Types */
320 #ifndef VOID
321 #define VOID void
322 typedef char CHAR;
323 typedef short SHORT;
324 typedef __LONG32 LONG;
325 #if !defined(MIDL_PASS) && !defined (__WIDL__)
326 typedef int INT;
327 #endif
328 #endif
329 typedef double DOUBLE;
330
331 /* Unsigned Types */
332 typedef unsigned char UCHAR, *PUCHAR;
333 typedef unsigned short USHORT, *PUSHORT;
334 typedef unsigned __LONG32 ULONG, *PULONG;
335 typedef CONST UCHAR *PCUCHAR;
336 typedef CONST USHORT *PCUSHORT;
337 typedef CONST ULONG *PCULONG;
338 typedef UCHAR FCHAR;
339 typedef USHORT FSHORT;
340 typedef ULONG FLONG;
341 typedef UCHAR BOOLEAN, *PBOOLEAN;
342 typedef ULONG LOGICAL;
343 typedef ULONG *PLOGICAL;
344
345 /* Signed Types */
346 typedef SHORT *PSHORT;
347 typedef LONG *PLONG;
348 typedef LONG NTSTATUS;
349 typedef NTSTATUS *PNTSTATUS;
350 typedef signed char SCHAR;
351 typedef SCHAR *PSCHAR;
352
353 #ifndef _DEF_WINBOOL_
354 #define _DEF_WINBOOL_
355 typedef int WINBOOL;
356 #pragma push_macro("BOOL")
357 #undef BOOL
358 #if !defined(__OBJC__) && !defined(__OBJC_BOOL) && !defined(__objc_INCLUDE_GNU)
359 typedef int BOOL;
360 #endif
361 #define BOOL WINBOOL
362 typedef BOOL *PBOOL;
363 typedef BOOL *LPBOOL;
364 #pragma pop_macro("BOOL")
365 #endif /* _DEF_WINBOOL_ */
366
367 #ifndef _HRESULT_DEFINED
368 #define _HRESULT_DEFINED
369 typedef LONG HRESULT;
370 #endif
371
372 /* 64-bit types */
373 #define _ULONGLONG_
374 __MINGW_EXTENSION typedef __int64 LONGLONG, *PLONGLONG;
375 __MINGW_EXTENSION typedef unsigned __int64 ULONGLONG, *PULONGLONG;
376 #define _DWORDLONG_
377 typedef ULONGLONG DWORDLONG, *PDWORDLONG;
378
379 /* Update Sequence Number */
380 typedef LONGLONG USN;
381
382 /* ANSI (Multi-byte Character) types */
383 typedef CHAR *PCHAR, *LPCH, *PCH;
384 typedef CONST CHAR *LPCCH, *PCCH;
385 typedef CHAR *NPSTR, *LPSTR, *PSTR;
386 typedef PSTR *PZPSTR;
387 typedef CONST PSTR *PCZPSTR;
388 typedef CONST CHAR *LPCSTR, *PCSTR;
389 typedef PCSTR *PZPCSTR;
390
391 /* Pointer to an Asciiz string */
392 typedef CHAR *PSZ;
393 typedef CONST char *PCSZ;
394
395 /* UNICODE (Wide Character) types */
396 #ifndef __WCHAR_DEFINED
397 #define __WCHAR_DEFINED
398 typedef wchar_t WCHAR;
399 #endif
400 typedef WCHAR *PWCHAR, *LPWCH, *PWCH;
401 typedef CONST WCHAR *LPCWCH, *PCWCH;
402 typedef WCHAR *NWPSTR, *LPWSTR, *PWSTR;
403 typedef PWSTR *PZPWSTR;
404 typedef CONST PWSTR *PCZPWSTR;
405 typedef WCHAR UNALIGNED *LPUWSTR, *PUWSTR;
406 typedef CONST WCHAR *LPCWSTR, *PCWSTR;
407 typedef PCWSTR *PZPCWSTR;
408 typedef CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR;
409
410 /* Cardinal Data Types */
411 typedef char CCHAR, *PCCHAR;
412 typedef short CSHORT, *PCSHORT;
413 typedef ULONG CLONG, *PCLONG;
414
415 /* NLS basics (Locale and Language Ids) */
416 typedef ULONG LCID;
417 typedef PULONG PLCID;
418 typedef USHORT LANGID;
419
420 /* Used to store a non-float 8 byte aligned structure */
421 typedef struct _QUAD {
422 __C89_NAMELESS union {
423 __MINGW_EXTENSION __int64 UseThisFieldToCopy;
424 double DoNotUseThisField;
425 } DUMMYUNIONNAME;
426 } QUAD, *PQUAD, UQUAD, *PUQUAD;
427
428 #ifndef _LARGE_INTEGER_DEFINED
429 #define _LARGE_INTEGER_DEFINED
430 /* Large Integer Unions */
431 #if defined(MIDL_PASS) || defined (__WIDL__)
432 typedef struct _LARGE_INTEGER {
433 #else
434 typedef union _LARGE_INTEGER {
435 __C89_NAMELESS struct {
436 ULONG LowPart;
437 LONG HighPart;
438 } DUMMYSTRUCTNAME;
439 struct {
440 ULONG LowPart;
441 LONG HighPart;
442 } u;
443 #endif /* MIDL_PASS */
444 LONGLONG QuadPart;
445 } LARGE_INTEGER, *PLARGE_INTEGER;
446
447 #if defined(MIDL_PASS) || defined (__WIDL__)
448 typedef struct _ULARGE_INTEGER {
449 #else
450 typedef union _ULARGE_INTEGER {
451 __C89_NAMELESS struct {
452 ULONG LowPart;
453 ULONG HighPart;
454 } DUMMYSTRUCTNAME;
455 struct {
456 ULONG LowPart;
457 ULONG HighPart;
458 } u;
459 #endif /* MIDL_PASS */
460 ULONGLONG QuadPart;
461 } ULARGE_INTEGER, *PULARGE_INTEGER;
462
463 /* Locally Unique Identifier */
464 typedef struct _LUID {
465 ULONG LowPart;
466 LONG HighPart;
467 } LUID, *PLUID;
468
469 #endif /* _LARGE_INTEGER_DEFINED */
470
471 /* Physical Addresses are always treated as 64-bit wide */
472 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
473
474 /* Native API Return Value Macros */
475 #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
476 #define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1)
477 #define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2)
478 #define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3)
479
480 /* String Types */
481 #ifndef __UNICODE_STRING_DEFINED
482 #define __UNICODE_STRING_DEFINED
483 typedef struct _UNICODE_STRING {
484 USHORT Length;
485 USHORT MaximumLength;
486 PWSTR Buffer;
487 } UNICODE_STRING, *PUNICODE_STRING;
488 #endif
489 typedef const UNICODE_STRING* PCUNICODE_STRING;
490
491 #define UNICODE_NULL ((WCHAR)0)
492
493 #define UNICODE_STRING_MAX_BYTES ((USHORT) 65534)
494 #define UNICODE_STRING_MAX_CHARS (32767)
495
496 #ifdef _MSC_VER
497 #define DECLARE_UNICODE_STRING_SIZE(_var, _size) \
498 WCHAR _var ## _buffer[_size]; \
499 __pragma(warning(push)) __pragma(warning(disable:4221)) __pragma(warning(disable:4204)) \
500 UNICODE_STRING _var = { 0, (_size) * sizeof(WCHAR) , _var ## _buffer } \
501 __pragma(warning(pop))
502
503 #define DECLARE_CONST_UNICODE_STRING(_var, _string) \
504 const WCHAR _var##_buffer[] = _string; \
505 __pragma(warning(push)) __pragma(warning(disable:4221)) __pragma(warning(disable:4204)) \
506 const UNICODE_STRING _var = { sizeof(_string) - sizeof(WCHAR), sizeof(_string), (PWCH)_var##_buffer } \
507 __pragma(warning(pop))
508 #else
509 #define DECLARE_UNICODE_STRING_SIZE(_var, _size) \
510 WCHAR _var ## _buffer[_size]; \
511 UNICODE_STRING _var = { 0, (_size) * sizeof(WCHAR) , _var ## _buffer }
512
513 #define DECLARE_CONST_UNICODE_STRING(_var, _string) \
514 const WCHAR _var##_buffer[] = _string; \
515 const UNICODE_STRING _var = { sizeof(_string) - sizeof(WCHAR), sizeof(_string), (PWCH)_var##_buffer }
516 #endif
517
518 typedef struct _CSTRING {
519 USHORT Length;
520 USHORT MaximumLength;
521 CONST CHAR *Buffer;
522 } CSTRING, *PCSTRING;
523 #define ANSI_NULL ((CHAR)0)
524
525 #ifndef __STRING_DEFINED
526 #define __STRING_DEFINED
527 typedef struct _STRING {
528 USHORT Length;
529 USHORT MaximumLength;
530 PCHAR Buffer;
531 } STRING, *PSTRING;
532 #endif
533
534 typedef STRING ANSI_STRING;
535 typedef PSTRING PANSI_STRING;
536 typedef STRING OEM_STRING;
537 typedef PSTRING POEM_STRING;
538 typedef CONST STRING* PCOEM_STRING;
539 typedef STRING CANSI_STRING;
540 typedef PSTRING PCANSI_STRING;
541 typedef STRING UTF8_STRING;
542 typedef PSTRING PUTF8_STRING;
543
544 typedef struct _STRING32 {
545 USHORT Length;
546 USHORT MaximumLength;
547 ULONG Buffer;
548 } STRING32, *PSTRING32,
549 UNICODE_STRING32, *PUNICODE_STRING32,
550 ANSI_STRING32, *PANSI_STRING32;
551
552 typedef struct _STRING64 {
553 USHORT Length;
554 USHORT MaximumLength;
555 ULONGLONG Buffer;
556 } STRING64, *PSTRING64,
557 UNICODE_STRING64, *PUNICODE_STRING64,
558 ANSI_STRING64, *PANSI_STRING64;
559
560 /* LangID and NLS */
561 #define MAKELANGID(p, s) ((((USHORT)(s)) << 10) | (USHORT)(p))
562 #define PRIMARYLANGID(lgid) ((USHORT)(lgid) & 0x3ff)
563 #define SUBLANGID(lgid) ((USHORT)(lgid) >> 10)
564
565 #define NLS_VALID_LOCALE_MASK 0x000fffff
566
567 #define MAKELCID(lgid, srtid) ((ULONG)((((ULONG)((USHORT)(srtid))) << 16) | \
568 ((ULONG)((USHORT)(lgid)))))
569 #define MAKESORTLCID(lgid, srtid, ver) \
570 ((ULONG)((MAKELCID(lgid, srtid)) | \
571 (((ULONG)((USHORT)(ver))) << 20)))
572 #define LANGIDFROMLCID(lcid) ((USHORT)(lcid))
573 #define SORTIDFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 16) & 0xf))
574 #define SORTVERSIONFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 20) & 0xf))
575
576
577 /* Object Attributes */
578 #ifndef __OBJECT_ATTRIBUTES_DEFINED
579 #define __OBJECT_ATTRIBUTES_DEFINED
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 #endif
589 typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES;
590
591 typedef struct _OBJECT_ATTRIBUTES64 {
592 ULONG Length;
593 ULONG64 RootDirectory;
594 ULONG64 ObjectName;
595 ULONG Attributes;
596 ULONG64 SecurityDescriptor;
597 ULONG64 SecurityQualityOfService;
598 } OBJECT_ATTRIBUTES64, *POBJECT_ATTRIBUTES64;
599 typedef CONST OBJECT_ATTRIBUTES64 *PCOBJECT_ATTRIBUTES64;
600
601 typedef struct _OBJECT_ATTRIBUTES32 {
602 ULONG Length;
603 ULONG RootDirectory;
604 ULONG ObjectName;
605 ULONG Attributes;
606 ULONG SecurityDescriptor;
607 ULONG SecurityQualityOfService;
608 } OBJECT_ATTRIBUTES32, *POBJECT_ATTRIBUTES32;
609 typedef CONST OBJECT_ATTRIBUTES32 *PCOBJECT_ATTRIBUTES32;
610
611 /* Values for the Attributes member */
612 #define OBJ_INHERIT 0x00000002
613 #define OBJ_PERMANENT 0x00000010
614 #define OBJ_EXCLUSIVE 0x00000020
615 #define OBJ_CASE_INSENSITIVE 0x00000040
616 #define OBJ_OPENIF 0x00000080
617 #define OBJ_OPENLINK 0x00000100
618 #define OBJ_KERNEL_HANDLE 0x00000200
619 #define OBJ_FORCE_ACCESS_CHECK 0x00000400
620 #define OBJ_IGNORE_IMPERSONATED_DEVICEMAP 0x00000800
621 #define OBJ_DONT_REPARSE 0x00001000
622 #define OBJ_VALID_ATTRIBUTES 0x00001FF2
623
624 /* Helper Macro */
625 #define InitializeObjectAttributes(p,n,a,r,s) { \
626 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
627 (p)->RootDirectory = (r); \
628 (p)->Attributes = (a); \
629 (p)->ObjectName = (n); \
630 (p)->SecurityDescriptor = (s); \
631 (p)->SecurityQualityOfService = NULL; \
632 }
633
634 #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) { sizeof(OBJECT_ATTRIBUTES), NULL, RTL_CONST_CAST(PUNICODE_STRING)(n), a, NULL, NULL }
635 #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
636
637 /* Product Types */
638 typedef enum _NT_PRODUCT_TYPE {
639 NtProductWinNt = 1,
640 NtProductLanManNt,
641 NtProductServer
642 } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
643
644 typedef enum _EVENT_TYPE {
645 NotificationEvent,
646 SynchronizationEvent
647 } EVENT_TYPE;
648
649 typedef enum _TIMER_TYPE {
650 NotificationTimer,
651 SynchronizationTimer
652 } TIMER_TYPE;
653
654 typedef enum _WAIT_TYPE {
655 WaitAll,
656 WaitAny
657 } WAIT_TYPE;
658
659 #ifndef _LIST_ENTRY_DEFINED
660 #define _LIST_ENTRY_DEFINED
661
662 /* Doubly Linked Lists */
663 typedef struct _LIST_ENTRY {
664 struct _LIST_ENTRY *Flink;
665 struct _LIST_ENTRY *Blink;
666 } LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;
667
668 typedef struct LIST_ENTRY32 {
669 ULONG Flink;
670 ULONG Blink;
671 } LIST_ENTRY32, *PLIST_ENTRY32;
672
673 typedef struct LIST_ENTRY64 {
674 ULONGLONG Flink;
675 ULONGLONG Blink;
676 } LIST_ENTRY64, *PLIST_ENTRY64;
677
678 /* Singly Linked Lists */
679 typedef struct _SINGLE_LIST_ENTRY32 {
680 ULONG Next;
681 } SINGLE_LIST_ENTRY32, *PSINGLE_LIST_ENTRY32;
682
683 typedef struct _SINGLE_LIST_ENTRY {
684 struct _SINGLE_LIST_ENTRY *Next;
685 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
686
687 #endif /* _LIST_ENTRY_DEFINED */
688
689 typedef struct _RTL_BALANCED_NODE {
690 __C89_NAMELESS union {
691 struct _RTL_BALANCED_NODE *Children[2];
692 __C89_NAMELESS struct {
693 struct _RTL_BALANCED_NODE *Left;
694 struct _RTL_BALANCED_NODE *Right;
695 };
696 };
697
698 #define RTL_BALANCED_NODE_RESERVED_PARENT_MASK 3
699
700 __C89_NAMELESS union {
701 UCHAR Red : 1;
702 UCHAR Balance : 2;
703 ULONG_PTR ParentValue;
704 };
705 } RTL_BALANCED_NODE, *PRTL_BALANCED_NODE;
706
707 #define RTL_BALANCED_NODE_GET_PARENT_POINTER(Node) ((PRTL_BALANCED_NODE)((Node)->ParentValue & ~RTL_BALANCED_NODE_RESERVED_PARENT_MASK))
708
709 #define ALL_PROCESSOR_GROUPS 0xffff
710
711 #ifndef ___PROCESSOR_NUMBER_DEFINED
712 #define ___PROCESSOR_NUMBER_DEFINED
713 typedef struct _PROCESSOR_NUMBER {
714 USHORT Group;
715 UCHAR Number;
716 UCHAR Reserved;
717 } PROCESSOR_NUMBER, *PPROCESSOR_NUMBER;
718 #endif /* !___PROCESSOR_NUMBER_DEFINED */
719
720 struct _CONTEXT;
721 struct _EXCEPTION_RECORD;
722
723 #ifndef __PEXCEPTION_ROUTINE_DEFINED
724 #define __PEXCEPTION_ROUTINE_DEFINED
725 typedef EXCEPTION_DISPOSITION
726 (NTAPI *PEXCEPTION_ROUTINE)(
727 struct _EXCEPTION_RECORD *ExceptionRecord,
728 PVOID EstablisherFrame,
729 struct _CONTEXT *ContextRecord,
730 PVOID DispatcherContext);
731 #endif /* __PEXCEPTION_ROUTINE_DEFINED */
732
733 #ifndef ___GROUP_AFFINITY_DEFINED
734 #define ___GROUP_AFFINITY_DEFINED
735 typedef struct _GROUP_AFFINITY {
736 KAFFINITY Mask;
737 USHORT Group;
738 USHORT Reserved[3];
739 } GROUP_AFFINITY, *PGROUP_AFFINITY;
740 #endif /* !___GROUP_AFFINITY_DEFINED */
741
742 #ifndef _DEFINED__WNF_STATE_NAME
743 #define _DEFINED__WNF_STATE_NAME
744 typedef struct _WNF_STATE_NAME {
745 ULONG Data[2];
746 } WNF_STATE_NAME, *PWNF_STATE_NAME;
747 typedef const WNF_STATE_NAME *PCWNF_STATE_NAME;
748 #endif
749
750 /* Helper Macros */
751 #define RTL_FIELD_TYPE(type, field) (((type*)0)->field)
752 #define RTL_BITS_OF(sizeOfArg) (sizeof(sizeOfArg) * 8)
753 #define RTL_BITS_OF_FIELD(type, field) (RTL_BITS_OF(RTL_FIELD_TYPE(type, field)))
754
755 #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
756
757 #define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
758
759 #define RTL_SIZEOF_THROUGH_FIELD(type, field) \
760 (FIELD_OFFSET(type, field) + RTL_FIELD_SIZE(type, field))
761
762 #define RTL_CONTAINS_FIELD(Struct, Size, Field) \
763 ( (((PCHAR)(&(Struct)->Field)) + sizeof((Struct)->Field)) <= (((PCHAR)(Struct))+(Size)) )
764
765 #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
766 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
767 #ifdef ENABLE_RTL_NUMBER_OF_V2
768 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
769 #else
770 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
771 #endif
772 #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
773 #define _ARRAYSIZE(A) RTL_NUMBER_OF_V1(A)
774
775 #define RTL_NUMBER_OF_FIELD(type, field) (RTL_NUMBER_OF(RTL_FIELD_TYPE(type, field)))
776
777 /* Type Limits */
778 #define MINCHAR 0x80
779 #define MAXCHAR 0x7f
780 #define MINSHORT 0x8000
781 #define MAXSHORT 0x7fff
782 #define MINLONG 0x80000000
783 #define MAXLONG 0x7fffffff
784 #define MAXUCHAR 0xff
785 #define MAXUSHORT 0xffff
786 #define MAXULONG 0xffffffff
787 #define MAXLONGLONG (0x7fffffffffffffffll)
788
789 /* Multiplication and Shift Operations */
790 #define Int32x32To64(a, b) (((LONGLONG) ((LONG) (a))) * ((LONGLONG) ((LONG) (b))))
791 #define UInt32x32To64(a, b) (((ULONGLONG) ((unsigned int) (a))) *((ULONGLONG) ((unsigned int) (b))))
792 #define Int64ShllMod32(a, b) (((ULONGLONG) (a)) << (b))
793 #define Int64ShraMod32(a, b) (((LONGLONG) (a)) >> (b))
794 #define Int64ShrlMod32(a, b) (((ULONGLONG) (a)) >> (b))
795
796 /* C_ASSERT Definition */
797 #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
798
799 #define VER_WORKSTATION_NT 0x40000000
800 #define VER_SERVER_NT 0x80000000
801 #define VER_SUITE_SMALLBUSINESS 0x00000001
802 #define VER_SUITE_ENTERPRISE 0x00000002
803 #define VER_SUITE_BACKOFFICE 0x00000004
804 #define VER_SUITE_COMMUNICATIONS 0x00000008
805 #define VER_SUITE_TERMINAL 0x00000010
806 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
807 #define VER_SUITE_EMBEDDEDNT 0x00000040
808 #define VER_SUITE_DATACENTER 0x00000080
809 #define VER_SUITE_SINGLEUSERTS 0x00000100
810 #define VER_SUITE_PERSONAL 0x00000200
811 #define VER_SUITE_BLADE 0x00000400
812 #define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
813 #define VER_SUITE_SECURITY_APPLIANCE 0x00001000
814 #define VER_SUITE_STORAGE_SERVER 0x00002000
815 #define VER_SUITE_COMPUTE_SERVER 0x00004000
816 #define VER_SUITE_WH_SERVER 0x00008000
817 #define VER_SUITE_MULTIUSERTS 0x00020000
818
819 /* Primary language IDs. */
820 #define LANG_NEUTRAL 0x00
821 #define LANG_INVARIANT 0x7f
822
823 #define LANG_AFRIKAANS 0x36
824 #define LANG_ALBANIAN 0x1c
825 #define LANG_ALSATIAN 0x84
826 #define LANG_AMHARIC 0x5e
827 #define LANG_ARABIC 0x01
828 #define LANG_ARMENIAN 0x2b
829 #define LANG_ASSAMESE 0x4d
830 #define LANG_AZERI 0x2c
831 #define LANG_BASHKIR 0x6d
832 #define LANG_BASQUE 0x2d
833 #define LANG_BELARUSIAN 0x23
834 #define LANG_BENGALI 0x45
835 #define LANG_BRETON 0x7e
836 #define LANG_BOSNIAN 0x1a
837 #define LANG_BOSNIAN_NEUTRAL 0x781a
838 #define LANG_BULGARIAN 0x02
839 #define LANG_CATALAN 0x03
840 #define LANG_CHINESE 0x04
841 #define LANG_CHINESE_SIMPLIFIED 0x04
842 #define LANG_CHINESE_TRADITIONAL 0x7c04
843 #define LANG_CORSICAN 0x83
844 #define LANG_CROATIAN 0x1a
845 #define LANG_CZECH 0x05
846 #define LANG_DANISH 0x06
847 #define LANG_DARI 0x8c
848 #define LANG_DIVEHI 0x65
849 #define LANG_DUTCH 0x13
850 #define LANG_ENGLISH 0x09
851 #define LANG_ESTONIAN 0x25
852 #define LANG_FAEROESE 0x38
853 #define LANG_FARSI 0x29
854 #define LANG_FILIPINO 0x64
855 #define LANG_FINNISH 0x0b
856 #define LANG_FRENCH 0x0c
857 #define LANG_FRISIAN 0x62
858 #define LANG_GALICIAN 0x56
859 #define LANG_GEORGIAN 0x37
860 #define LANG_GERMAN 0x07
861 #define LANG_GREEK 0x08
862 #define LANG_GREENLANDIC 0x6f
863 #define LANG_GUJARATI 0x47
864 #define LANG_HAUSA 0x68
865 #define LANG_HEBREW 0x0d
866 #define LANG_HINDI 0x39
867 #define LANG_HUNGARIAN 0x0e
868 #define LANG_ICELANDIC 0x0f
869 #define LANG_IGBO 0x70
870 #define LANG_INDONESIAN 0x21
871 #define LANG_INUKTITUT 0x5d
872 #define LANG_IRISH 0x3c
873 #define LANG_ITALIAN 0x10
874 #define LANG_JAPANESE 0x11
875 #define LANG_KANNADA 0x4b
876 #define LANG_KASHMIRI 0x60
877 #define LANG_KAZAK 0x3f
878 #define LANG_KHMER 0x53
879 #define LANG_KICHE 0x86
880 #define LANG_KINYARWANDA 0x87
881 #define LANG_KONKANI 0x57
882 #define LANG_KOREAN 0x12
883 #define LANG_KYRGYZ 0x40
884 #define LANG_LAO 0x54
885 #define LANG_LATVIAN 0x26
886 #define LANG_LITHUANIAN 0x27
887 #define LANG_LOWER_SORBIAN 0x2e
888 #define LANG_LUXEMBOURGISH 0x6e
889 #define LANG_MACEDONIAN 0x2f
890 #define LANG_MALAY 0x3e
891 #define LANG_MALAYALAM 0x4c
892 #define LANG_MALTESE 0x3a
893 #define LANG_MANIPURI 0x58
894 #define LANG_MAORI 0x81
895 #define LANG_MAPUDUNGUN 0x7a
896 #define LANG_MARATHI 0x4e
897 #define LANG_MOHAWK 0x7c
898 #define LANG_MONGOLIAN 0x50
899 #define LANG_NEPALI 0x61
900 #define LANG_NORWEGIAN 0x14
901 #define LANG_OCCITAN 0x82
902 #define LANG_ORIYA 0x48
903 #define LANG_PASHTO 0x63
904 #define LANG_PERSIAN 0x29
905 #define LANG_POLISH 0x15
906 #define LANG_PORTUGUESE 0x16
907 #define LANG_PUNJABI 0x46
908 #define LANG_QUECHUA 0x6b
909 #define LANG_ROMANIAN 0x18
910 #define LANG_ROMANSH 0x17
911 #define LANG_RUSSIAN 0x19
912 #define LANG_SAMI 0x3b
913 #define LANG_SANSKRIT 0x4f
914 #define LANG_SERBIAN 0x1a
915 #define LANG_SERBIAN_NEUTRAL 0x7c1a
916 #define LANG_SINDHI 0x59
917 #define LANG_SINHALESE 0x5b
918 #define LANG_SLOVAK 0x1b
919 #define LANG_SLOVENIAN 0x24
920 #define LANG_SOTHO 0x6c
921 #define LANG_SPANISH 0x0a
922 #define LANG_SWAHILI 0x41
923 #define LANG_SWEDISH 0x1d
924 #define LANG_SYRIAC 0x5a
925 #define LANG_TAJIK 0x28
926 #define LANG_TAMAZIGHT 0x5f
927 #define LANG_TAMIL 0x49
928 #define LANG_TATAR 0x44
929 #define LANG_TELUGU 0x4a
930 #define LANG_THAI 0x1e
931 #define LANG_TIBETAN 0x51
932 #define LANG_TIGRIGNA 0x73
933 #define LANG_TSWANA 0x32
934 #define LANG_TURKISH 0x1f
935 #define LANG_TURKMEN 0x42
936 #define LANG_UIGHUR 0x80
937 #define LANG_UKRAINIAN 0x22
938 #define LANG_UPPER_SORBIAN 0x2e
939 #define LANG_URDU 0x20
940 #define LANG_UZBEK 0x43
941 #define LANG_VIETNAMESE 0x2a
942 #define LANG_WELSH 0x52
943 #define LANG_WOLOF 0x88
944 #define LANG_XHOSA 0x34
945 #define LANG_YAKUT 0x85
946 #define LANG_YI 0x78
947 #define LANG_YORUBA 0x6a
948 #define LANG_ZULU 0x35
949
950 #ifndef NT_INCLUDED
951
952 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
953 #define FILE_SHARE_VALID_FLAGS (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE)
954
955 #define FILE_SUPERSEDE 0x00000000
956 #define FILE_OPEN 0x00000001
957 #define FILE_CREATE 0x00000002
958 #define FILE_OPEN_IF 0x00000003
959 #define FILE_OVERWRITE 0x00000004
960 #define FILE_OVERWRITE_IF 0x00000005
961 #define FILE_MAXIMUM_DISPOSITION 0x00000005
962
963 #define FILE_DIRECTORY_FILE 0x00000001
964 #define FILE_WRITE_THROUGH 0x00000002
965 #define FILE_SEQUENTIAL_ONLY 0x00000004
966 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
967 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
968 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
969 #define FILE_NON_DIRECTORY_FILE 0x00000040
970 #define FILE_CREATE_TREE_CONNECTION 0x00000080
971 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
972 #define FILE_NO_EA_KNOWLEDGE 0x00000200
973 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
974 #define FILE_RANDOM_ACCESS 0x00000800
975 #define FILE_DELETE_ON_CLOSE 0x00001000
976 #define FILE_OPEN_BY_FILE_ID 0x00002000
977 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
978 #define FILE_NO_COMPRESSION 0x00008000
979 #if (NTDDI_VERSION >= NTDDI_WIN7)
980 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
981 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
982 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
983 #define FILE_RESERVE_OPFILTER 0x00100000
984 #define FILE_OPEN_REPARSE_POINT 0x00200000
985 #define FILE_OPEN_NO_RECALL 0x00400000
986 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
987
988 typedef struct _REPARSE_DATA_BUFFER
989 {
990 ULONG ReparseTag;
991 USHORT ReparseDataLength;
992 USHORT Reserved;
993 union
994 {
995 struct
996 {
997 USHORT SubstituteNameOffset;
998 USHORT SubstituteNameLength;
999 USHORT PrintNameOffset;
1000 USHORT PrintNameLength;
1001 ULONG Flags;
1002 WCHAR PathBuffer[1];
1003 } SymbolicLinkReparseBuffer;
1004 struct
1005 {
1006 USHORT SubstituteNameOffset;
1007 USHORT SubstituteNameLength;
1008 USHORT PrintNameOffset;
1009 USHORT PrintNameLength;
1010 WCHAR PathBuffer[1];
1011 } MountPointReparseBuffer;
1012 struct
1013 {
1014 UCHAR DataBuffer[1];
1015 } GenericReparseBuffer;
1016 };
1017 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
1018
1019 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
1020
1021 #endif /* !NT_DEFINED */
1022
1023 #endif /* _NTDEF_ */
1024