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