|
|
1.1 ! root 1: /*++ BUILD Version: 0047 // Increment this if a change has global effects ! 2: ! 3: Copyright (c) 1990 Microsoft Corporation ! 4: ! 5: Module Name: ! 6: ! 7: winnt.h ! 8: ! 9: Abstract: ! 10: ! 11: This module defines the 32-Bit Windows types and constants that are ! 12: defined by NT, but exposed through the Win32 API. ! 13: ! 14: Created: ! 15: ! 16: 18-Sep-1990 ! 17: ! 18: Revision History: ! 19: ! 20: --*/ ! 21: ! 22: #ifndef _WINNT_ ! 23: #define _WINNT_ ! 24: ! 25: #ifdef MIPS ! 26: #define UNALIGNED __unaligned ! 27: #else ! 28: #define UNALIGNED ! 29: #endif ! 30: typedef void *PVOID; ! 31: ! 32: // ! 33: // Basics ! 34: // ! 35: ! 36: #ifndef VOID ! 37: #define VOID void ! 38: typedef char CHAR; ! 39: typedef short SHORT; ! 40: typedef long LONG; ! 41: #endif ! 42: ! 43: // ! 44: // UNICODE ! 45: // ! 46: ! 47: typedef unsigned short WCHAR; // wc, 16-bit UNICODE character ! 48: typedef WCHAR *LPWCH, *PWCH; // pwc ! 49: typedef WCHAR *LPWSTR, *PWSTR; // pwsz, 0x0000 terminated UNICODE strings only ! 50: ! 51: ! 52: // ! 53: // Portable UNICODE types and macros ! 54: // ! 55: ! 56: #ifdef UNICODE ! 57: typedef WCHAR TCHAR; ! 58: #define TEXT(quote) L##quote ! 59: #else ! 60: typedef char TCHAR; ! 61: #define TEXT(quote) quote ! 62: #endif ! 63: ! 64: typedef TCHAR *LPTSTR; ! 65: ! 66: typedef SHORT *PSHORT; ! 67: typedef LONG *PLONG; ! 68: typedef PVOID HANDLE; ! 69: typedef HANDLE *PHANDLE; ! 70: #define UNICODE_NULL ((WCHAR)0) ! 71: #define MINCHAR 0x80 ! 72: #define MAXCHAR 0x7f ! 73: #define MINSHORT 0x8000 ! 74: #define MAXSHORT 0x7fff ! 75: #define MINLONG 0x80000000 ! 76: #define MAXLONG 0x7fffffff ! 77: #define MAXBYTE 0xff ! 78: #define MAXWORD 0xffff ! 79: #define MAXDWORD 0xffffffff ! 80: ! 81: // ! 82: // Macros used to eliminate compiler warning generated when formal ! 83: // parameters or local variables are not declared. ! 84: // ! 85: // Use DBG_UNREFERENCED_PARAMETER() when a parameter is not yet ! 86: // referenced but will be once the module is completely developed. ! 87: // ! 88: // Use DBG_UNREFERENCED_LOCAL_VARIABLE() when a local variable is not yet ! 89: // referenced but will be once the module is completely developed. ! 90: // ! 91: // Use UNREFERENCED_PARAMETER() if a parameter will never be referenced. ! 92: // ! 93: // DBG_UNREFERENCED_PARAMETER and DBG_UNREFERENCED_LOCAL_VARIABLE will ! 94: // eventually be made into a null macro to help determine whether there ! 95: // is unfinished work. ! 96: // ! 97: ! 98: #if ! (defined(lint) || defined(_lint)) ! 99: #define UNREFERENCED_PARAMETER(P) (P) ! 100: #define DBG_UNREFERENCED_PARAMETER(P) (P) ! 101: #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V) ! 102: ! 103: #else // lint or _lint ! 104: ! 105: // Note: lint -e530 says don't complain about uninitialized variables for ! 106: // this. line +e530 turns that checking back on. Error 527 has to do with ! 107: // unreachable code. ! 108: ! 109: #define UNREFERENCED_PARAMETER(P) \ ! 110: /*lint -e527 -e530 */ \ ! 111: { \ ! 112: (P) = (P); \ ! 113: } \ ! 114: /*lint +e527 +e530 */ ! 115: #define DBG_UNREFERENCED_PARAMETER(P) \ ! 116: /*lint -e527 -e530 */ \ ! 117: { \ ! 118: (P) = (P); \ ! 119: } \ ! 120: /*lint +e527 +e530 */ ! 121: #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) \ ! 122: /*lint -e527 -e530 */ \ ! 123: { \ ! 124: (V) = (V); \ ! 125: } \ ! 126: /*lint +e527 +e530 */ ! 127: ! 128: #endif // lint or _lint ! 129: ! 130: ! 131: /*lint -e767 */ // Don't complain about different definitions ! 132: #define STATUS_WAIT_0 ((DWORD )0x00000000L) ! 133: #define STATUS_ABANDONED_WAIT_0 ((DWORD )0x00000080L) ! 134: #define STATUS_TIMEOUT ((DWORD )0x00000102L) ! 135: #define STATUS_PENDING ((DWORD )0x00000103L) ! 136: #define STATUS_DATATYPE_MISALIGNMENT ((DWORD )0x80000002L) ! 137: #define STATUS_BREAKPOINT ((DWORD )0x80000003L) ! 138: #define STATUS_SINGLE_STEP ((DWORD )0x80000004L) ! 139: #define STATUS_ACCESS_VIOLATION ((DWORD )0xC0000005L) ! 140: #define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD )0xC0000025L) ! 141: #define STATUS_CONTROL_C_EXIT ((DWORD )0xC000013AL) ! 142: /*lint +e767 */ // Resume checking for different macro definitions ! 143: #define MAXIMUM_WAIT_OBJECTS 64 // Maximum number of wait objects ! 144: ! 145: #define MAXIMUM_SUSPEND_COUNT MAXCHAR // Maximum times thread can be suspended ! 146: typedef DWORD KSPIN_LOCK; ! 147: ! 148: #ifdef i386 ! 149: ! 150: // ! 151: // Define the size of the 80387 save area, which is in the context frame. ! 152: // ! 153: ! 154: #define SIZE_OF_80387_ENVIRONMENT 108 ! 155: #define SIZE_OF_80387_REGISTERS 80 ! 156: ! 157: // ! 158: // The following flags control the contents of the CONTEXT structure. ! 159: // ! 160: ! 161: #define CONTEXT_i386 0x00010000 // this assumes that i386 and ! 162: #define CONTEXT_i486 0x00010000 // i486 have identical context records ! 163: ! 164: #define CONTEXT_CONTROL (CONTEXT_i386 | 0x00000001L) // SS:SP, CS:IP, FLAGS, BP ! 165: #define CONTEXT_INTEGER (CONTEXT_i386 | 0x00000002L) // AX, BX, CX, DX, SI, DI ! 166: #define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x00000004L) // DS, ES, FS, GS ! 167: #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x00000008L) // 387 state ! 168: #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x00000010L) // DB 0-3,6,7 ! 169: ! 170: #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER |\ ! 171: CONTEXT_SEGMENTS) ! 172: ! 173: typedef struct _FLOATING_SAVE_AREA { ! 174: DWORD ControlWord; ! 175: DWORD StatusWord; ! 176: DWORD TagWord; ! 177: DWORD ErrorOffset; ! 178: DWORD ErrorSelector; ! 179: DWORD DataOffset; ! 180: DWORD DataSelector; ! 181: BYTE RegisterArea[SIZE_OF_80387_REGISTERS]; ! 182: } FLOATING_SAVE_AREA; ! 183: ! 184: typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA; ! 185: ! 186: // ! 187: // Context Frame ! 188: // ! 189: // This frame has a several purposes: 1) it is used as an argument to ! 190: // NtContinue, 2) is is used to constuct a call frame for APC delivery, ! 191: // and 3) it is used in the user level thread creation routines. ! 192: // ! 193: // The layout of the record conforms to a standard call frame. ! 194: // ! 195: ! 196: typedef struct _CONTEXT { ! 197: ! 198: // ! 199: // The flags values within this flag control the contents of ! 200: // a CONTEXT record. ! 201: // ! 202: // If the context record is used as an input parameter, then ! 203: // for each portion of the context record controlled by a flag ! 204: // whose value is set, it is assumed that that portion of the ! 205: // context record contains valid context. If the context record ! 206: // is being used to modify a threads context, then only that ! 207: // portion of the threads context will be modified. ! 208: // ! 209: // If the context record is used as an IN OUT parameter to capture ! 210: // the context of a thread, then only those portions of the thread's ! 211: // context corresponding to set flags will be returned. ! 212: // ! 213: // The context record is never used as an OUT only parameter. ! 214: // ! 215: ! 216: DWORD ContextFlags; ! 217: ! 218: // ! 219: // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is ! 220: // set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT ! 221: // included in CONTEXT_FULL. ! 222: // ! 223: ! 224: DWORD Dr0; ! 225: DWORD Dr1; ! 226: DWORD Dr2; ! 227: DWORD Dr3; ! 228: DWORD Dr6; ! 229: DWORD Dr7; ! 230: ! 231: // ! 232: // This section is specified/returned if the ! 233: // ContextFlags word contians the flag CONTEXT_FLOATING_POINT. ! 234: // ! 235: ! 236: FLOATING_SAVE_AREA FloatSave; ! 237: ! 238: // ! 239: // This section is specified/returned if the ! 240: // ContextFlags word contians the flag CONTEXT_SEGMENTS. ! 241: // ! 242: ! 243: DWORD SegGs; ! 244: DWORD SegFs; ! 245: DWORD SegEs; ! 246: DWORD SegDs; ! 247: ! 248: // ! 249: // This section is specified/returned if the ! 250: // ContextFlags word contians the flag CONTEXT_INTEGER. ! 251: // ! 252: ! 253: DWORD Edi; ! 254: DWORD Esi; ! 255: DWORD Ebx; ! 256: DWORD Edx; ! 257: DWORD Ecx; ! 258: DWORD Eax; ! 259: ! 260: // ! 261: // This section is specified/returned if the ! 262: // ContextFlags word contians the flag CONTEXT_CONTROL. ! 263: // ! 264: ! 265: DWORD Ebp; ! 266: DWORD Eip; ! 267: DWORD SegCs; // MUST BE SANITIZED ! 268: DWORD EFlags; // MUST BE SANITIZED ! 269: DWORD Esp; ! 270: DWORD SegSs; ! 271: ! 272: } CONTEXT; ! 273: ! 274: ! 275: ! 276: typedef CONTEXT *PCONTEXT; ! 277: ! 278: #endif // i386 ! 279: ! 280: typedef struct _LDT_ENTRY { ! 281: WORD LimitLow; ! 282: WORD BaseLow; ! 283: union { ! 284: struct { ! 285: BYTE BaseMid; ! 286: BYTE Flags1; // Declare as bytes to avoid alignment ! 287: BYTE Flags2; // Problems. ! 288: BYTE BaseHi; ! 289: } Bytes; ! 290: struct { ! 291: DWORD BaseMid : 8; ! 292: DWORD Type : 5; ! 293: DWORD Dpl : 2; ! 294: DWORD Pres : 1; ! 295: DWORD LimitHi : 4; ! 296: DWORD Sys : 1; ! 297: DWORD Reserved_0 : 1; ! 298: DWORD Default_Big : 1; ! 299: DWORD Granularity : 1; ! 300: DWORD BaseHi : 8; ! 301: } Bits; ! 302: } HighWord; ! 303: } LDT_ENTRY, *PLDT_ENTRY; ! 304: ! 305: ! 306: #ifdef MIPS ! 307: ! 308: // ! 309: // The following flags control the contents of the CONTEXT structure. ! 310: // ! 311: ! 312: #define CONTEXT_R3000 0x00010000 // this assumes that r3000 and ! 313: #define CONTEXT_R4000 0x00010000 // r4000 have identical context records ! 314: ! 315: #define CONTEXT_CONTROL (CONTEXT_R3000 | 0x00000001L) ! 316: #define CONTEXT_FLOATING_POINT (CONTEXT_R3000 | 0x00000002L) ! 317: #define CONTEXT_INTEGER (CONTEXT_R3000 | 0x00000004L) ! 318: ! 319: #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER) ! 320: ! 321: // ! 322: // Context Frame ! 323: // ! 324: // N.B. This frame must be exactly a multiple of 16 bytes in length. ! 325: // ! 326: // This frame has a several purposes: 1) it is used as an argument to ! 327: // NtContinue, 2) it is used to constuct a call frame for APC delivery, ! 328: // 3) it is used to construct a call frame for exception dispatching ! 329: // in user mode, and 4) it is used in the user level thread creation ! 330: // routines. ! 331: // ! 332: // The layout of the record conforms to a standard call frame. ! 333: // ! 334: ! 335: typedef struct _CONTEXT { ! 336: ! 337: // ! 338: // This section is always present and is used as an argument build ! 339: // area. ! 340: // ! 341: ! 342: DWORD Argument[4]; ! 343: ! 344: // ! 345: // This section is specified/returned if the ContextFlags word contains ! 346: // the flag CONTEXT_FLOATING_POINT. ! 347: // ! 348: ! 349: DWORD FltF0; ! 350: DWORD FltF1; ! 351: DWORD FltF2; ! 352: DWORD FltF3; ! 353: DWORD FltF4; ! 354: DWORD FltF5; ! 355: DWORD FltF6; ! 356: DWORD FltF7; ! 357: DWORD FltF8; ! 358: DWORD FltF9; ! 359: DWORD FltF10; ! 360: DWORD FltF11; ! 361: DWORD FltF12; ! 362: DWORD FltF13; ! 363: DWORD FltF14; ! 364: DWORD FltF15; ! 365: DWORD FltF16; ! 366: DWORD FltF17; ! 367: DWORD FltF18; ! 368: DWORD FltF19; ! 369: DWORD FltF20; ! 370: DWORD FltF21; ! 371: DWORD FltF22; ! 372: DWORD FltF23; ! 373: DWORD FltF24; ! 374: DWORD FltF25; ! 375: DWORD FltF26; ! 376: DWORD FltF27; ! 377: DWORD FltF28; ! 378: DWORD FltF29; ! 379: DWORD FltF30; ! 380: DWORD FltF31; ! 381: ! 382: // ! 383: // This section is specified/returned if the ContextFlags word contains ! 384: // the flag CONTEXT_INTEGER. ! 385: // ! 386: // N.B. The registers gp, sp, and ra are defined in this section, but are ! 387: // considered part of the control context rather than part of the integer ! 388: // context. ! 389: // ! 390: // N.B. Register zero is not stored in the frame. ! 391: // ! 392: ! 393: DWORD IntZero; ! 394: DWORD IntAt; ! 395: DWORD IntV0; ! 396: DWORD IntV1; ! 397: DWORD IntA0; ! 398: DWORD IntA1; ! 399: DWORD IntA2; ! 400: DWORD IntA3; ! 401: DWORD IntT0; ! 402: DWORD IntT1; ! 403: DWORD IntT2; ! 404: DWORD IntT3; ! 405: DWORD IntT4; ! 406: DWORD IntT5; ! 407: DWORD IntT6; ! 408: DWORD IntT7; ! 409: DWORD IntS0; ! 410: DWORD IntS1; ! 411: DWORD IntS2; ! 412: DWORD IntS3; ! 413: DWORD IntS4; ! 414: DWORD IntS5; ! 415: DWORD IntS6; ! 416: DWORD IntS7; ! 417: DWORD IntT8; ! 418: DWORD IntT9; ! 419: DWORD IntK0; ! 420: DWORD IntK1; ! 421: DWORD IntGp; ! 422: DWORD IntSp; ! 423: DWORD IntS8; ! 424: DWORD IntRa; ! 425: DWORD IntLo; ! 426: DWORD IntHi; ! 427: ! 428: // ! 429: // This section is specified/returned if the ContextFlags word contains ! 430: // the flag CONTEXT_FLOATING_POINT. ! 431: // ! 432: ! 433: DWORD Fsr; ! 434: ! 435: // ! 436: // This section is specified/returned if the ContextFlags word contains ! 437: // the flag CONTEXT_CONTROL. ! 438: // ! 439: // N.B. The registers gp, sp, and ra are defined in the integer section, ! 440: // but are considered part of the control context rather than part of ! 441: // the integer context. ! 442: // ! 443: ! 444: DWORD Fir; ! 445: DWORD Psr; ! 446: ! 447: // ! 448: // The flags values within this flag control the contents of ! 449: // a CONTEXT record. ! 450: // ! 451: // If the context record is used as an input parameter, then ! 452: // for each portion of the context record controlled by a flag ! 453: // whose value is set, it is assumed that that portion of the ! 454: // context record contains valid context. If the context record ! 455: // is being used to modify a thread's context, then only that ! 456: // portion of the threads context will be modified. ! 457: // ! 458: // If the context record is used as an IN OUT parameter to capture ! 459: // the context of a thread, then only those portions of the thread's ! 460: // context corresponding to set flags will be returned. ! 461: // ! 462: // The context record is never used as an OUT only parameter. ! 463: // ! 464: ! 465: DWORD ContextFlags; ! 466: ! 467: DWORD Fill[2]; ! 468: } CONTEXT, *PCONTEXT; ! 469: ! 470: #endif // MIPS ! 471: ! 472: ! 473: #ifdef MIPS ! 474: ! 475: VOID ! 476: __jump_unwind ( ! 477: PVOID Fp, ! 478: PVOID TargetPc ! 479: ); ! 480: ! 481: #endif // MIPS ! 482: ! 483: #define EXCEPTION_NONCONTINUABLE 0x1 // Noncontinuable exception ! 484: #define EXCEPTION_MAXIMUM_PARAMETERS 4 // maximum number of exception parameters ! 485: ! 486: // ! 487: // Exception record definition. ! 488: // ! 489: ! 490: typedef struct _EXCEPTION_RECORD { ! 491: DWORD ExceptionCode; ! 492: DWORD ExceptionFlags; ! 493: struct _EXCEPTION_RECORD *ExceptionRecord; ! 494: PVOID ExceptionAddress; ! 495: DWORD NumberParameters; ! 496: DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; ! 497: } EXCEPTION_RECORD; ! 498: ! 499: typedef EXCEPTION_RECORD *PEXCEPTION_RECORD; ! 500: ! 501: // ! 502: // Typedef for pointer returned by exception_info() ! 503: // ! 504: ! 505: typedef struct _EXCEPTION_POINTERS { ! 506: PEXCEPTION_RECORD ExceptionRecord; ! 507: PCONTEXT ContextRecord; ! 508: } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; ! 509: #define PROCESS_TERMINATE (0x0001) ! 510: #define PROCESS_VM_READ (0x0010) ! 511: #define PROCESS_VM_WRITE (0x0020) ! 512: #define PROCESS_DUP_HANDLE (0x0040) ! 513: #define PROCESS_CREATE_PROCESS (0x0080) ! 514: #define PROCESS_SET_INFORMATION (0x0200) ! 515: #define PROCESS_QUERY_INFORMATION (0x0400) ! 516: #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \ ! 517: 0xFFF) ! 518: #define THREAD_TERMINATE (0x0001) ! 519: #define THREAD_SUSPEND_RESUME (0x0002) ! 520: #define THREAD_GET_CONTEXT (0x0008) ! 521: #define THREAD_SET_CONTEXT (0x0010) ! 522: #define THREAD_SET_INFORMATION (0x0020) ! 523: #define THREAD_QUERY_INFORMATION (0x0040) ! 524: #define THREAD_SET_THREAD_TOKEN (0x0080) ! 525: #define THREAD_IMPERSONATE (0x0100) ! 526: #define THREAD_DIRECT_IMPERSONATION (0x0200) ! 527: #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \ ! 528: 0x3FF) ! 529: #define TLS_MINIMUM_AVAILABLE 64 ! 530: #define THREAD_BASE_PRIORITY_MAX 2 // maximum thread base priority boost ! 531: #define THREAD_BASE_PRIORITY_MIN -2 // minimum thread base priority boost ! 532: #define EVENT_MODIFY_STATE 0x0002 ! 533: #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) ! 534: #define MUTANT_QUERY_STATE 0x0001 ! 535: ! 536: #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|\ ! 537: MUTANT_QUERY_STATE) ! 538: #define SEMAPHORE_MODIFY_STATE 0x0002 ! 539: #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) ! 540: ! 541: #define PROCESSOR_INTEL_386 386 ! 542: #define PROCESSOR_INTEL_486 486 ! 543: #define PROCESSOR_INTEL_860 860 ! 544: #define PROCESSOR_MIPS_R2000 2000 ! 545: #define PROCESSOR_MIPS_R3000 3000 ! 546: #define PROCESSOR_MIPS_R4000 4000 ! 547: ! 548: #define PROCESSOR_STEP_A0 0x00000000 ! 549: #define PROCESSOR_STEP_B0 0x00010000 ! 550: #define PROCESSOR_STEP_C0 0x00020000 ! 551: #define PROCESSOR_STEP_D0 0x00030000 ! 552: #define PROCESSOR_STEP_E0 0x00040000 ! 553: #define PROCESSOR_STEP_F0 0x00050000 ! 554: #define PROCESSOR_STEP_G0 0x00060000 ! 555: #define PROCESSOR_STEP_H0 0x00070000 ! 556: #define PROCESSOR_STEP_I0 0x00080000 ! 557: ! 558: #define PROCESSOR_OPTION_387 0x00000001 ! 559: #define PROCESSOR_OPTION_WEITEK 0x00000002 ! 560: ! 561: typedef struct _MEMORY_BASIC_INFORMATION { ! 562: PVOID BaseAddress; ! 563: PVOID AllocationBase; ! 564: DWORD AllocationProtect; ! 565: DWORD RegionSize; ! 566: DWORD State; ! 567: DWORD Protect; ! 568: DWORD Type; ! 569: } MEMORY_BASIC_INFORMATION; ! 570: typedef MEMORY_BASIC_INFORMATION *PMEMORY_BASIC_INFORMATION; ! 571: #define SECTION_QUERY 0x0001 ! 572: #define SECTION_MAP_WRITE 0x0002 ! 573: #define SECTION_MAP_READ 0x0004 ! 574: #define SECTION_MAP_EXECUTE 0x0008 ! 575: #define SECTION_EXTEND_SIZE 0x0010 ! 576: ! 577: #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\ ! 578: SECTION_MAP_WRITE | \ ! 579: SECTION_MAP_READ | \ ! 580: SECTION_MAP_EXECUTE | \ ! 581: SECTION_EXTEND_SIZE) ! 582: #define PAGE_NOACCESS 0x01 ! 583: #define PAGE_READONLY 0x02 ! 584: #define PAGE_READWRITE 0x04 ! 585: #define MEM_COMMIT 0x1000 ! 586: #define MEM_RESERVE 0x2000 ! 587: #define MEM_DECOMMIT 0x4000 ! 588: #define MEM_RELEASE 0x8000 ! 589: #define MEM_FREE 0x10000 ! 590: #define MEM_PRIVATE 0x20000 ! 591: #define FILE_SHARE_READ 0x00000001 ! 592: #define FILE_SHARE_WRITE 0x00000002 ! 593: #define FILE_ATTRIBUTE_READONLY 0x00000001 ! 594: #define FILE_ATTRIBUTE_HIDDEN 0x00000002 ! 595: #define FILE_ATTRIBUTE_SYSTEM 0x00000004 ! 596: #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 ! 597: #define FILE_ATTRIBUTE_NORMAL 0x00000080 ! 598: #define FILE_CASE_SENSITIVE_SEARCH 0x00000001 ! 599: #define FILE_CASE_PRESERVED_NAMES 0x00000002 ! 600: #define FILE_UNICODE_ON_DISK 0x00000004 ! 601: #define DUPLICATE_CLOSE_SOURCE 0x00000001 ! 602: #define DUPLICATE_SAME_ACCESS 0x00000002 ! 603: typedef PVOID PSECURITY_DESCRIPTOR; ! 604: typedef PVOID PSID; ! 605: typedef DWORD ACCESS_MASK; ! 606: #define DELETE (0x00010000L) ! 607: #define READ_CONTROL (0x00020000L) ! 608: #define WRITE_DAC (0x00040000L) ! 609: #define WRITE_OWNER (0x00080000L) ! 610: #define SYNCHRONIZE (0x00100000L) ! 611: ! 612: #define STANDARD_RIGHTS_REQUIRED (0x000F0000L) ! 613: ! 614: #define STANDARD_RIGHTS_READ (READ_CONTROL) ! 615: #define STANDARD_RIGHTS_WRITE (READ_CONTROL) ! 616: #define STANDARD_RIGHTS_EXECUTE (READ_CONTROL) ! 617: ! 618: #define STANDARD_RIGHTS_ALL (0x001F0000L) ! 619: ! 620: #define SPECIFIC_RIGHTS_ALL (0x0000FFFFL) ! 621: ! 622: // ! 623: // AccessSystemAcl access type ! 624: // ! 625: ! 626: #define ACCESS_SYSTEM_SECURITY (0x01000000L) ! 627: ! 628: // ! 629: // MaximumAllowed access type ! 630: // ! 631: ! 632: #define MAXIMUM_ALLOWED (0x02000000L) ! 633: ! 634: // ! 635: // These are the generic rights. ! 636: // ! 637: ! 638: #define GENERIC_READ (0x80000000L) ! 639: #define GENERIC_WRITE (0x40000000L) ! 640: #define GENERIC_EXECUTE (0x20000000L) ! 641: #define GENERIC_ALL (0x10000000L) ! 642: // Obsolete definition - not portable. ! 643: // replaced by DWORD definition below ! 644: //typedef struct _SECURITY_INFORMATION { ! 645: // DWORD Owner :1; ! 646: // DWORD Group :1; ! 647: // DWORD Dacl :1; ! 648: // DWORD Sacl :1; ! 649: // DWORD Reserved :28; ! 650: // } SECURITY_INFORMATION, *PSECURITY_INFORMATION; ! 651: ! 652: ! 653: typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION; ! 654: ! 655: #define OWNER_SECURITY_INFORMATION (0X00000001L) ! 656: #define GROUP_SECURITY_INFORMATION (0X00000002L) ! 657: #define DACL_SECURITY_INFORMATION (0X00000004L) ! 658: #define SACL_SECURITY_INFORMATION (0X00000008L) ! 659: #define HEAP_SERIALIZE 0x00000001 ! 660: typedef struct _RTL_CRITICAL_SECTION { ! 661: ! 662: ! 663: PVOID CallingAddress; ! 664: PVOID CallersCaller; ! 665: PVOID Spare[5]; ! 666: ! 667: ! 668: // ! 669: // The following three fields control entering and exiting the critical ! 670: // section for the resource ! 671: // ! 672: ! 673: LONG LockCount; ! 674: LONG RecursionCount; ! 675: HANDLE OwningThread; // from the thread's ClientId->UniqueThread ! 676: HANDLE LockSemaphore; ! 677: KSPIN_LOCK SpinLock; ! 678: ! 679: } RTL_CRITICAL_SECTION; ! 680: typedef RTL_CRITICAL_SECTION *PRTL_CRITICAL_SECTION; ! 681: #define DLL_PROCESS_ATTACH 1 ! 682: #define DLL_THREAD_ATTACH 2 ! 683: #define DLL_THREAD_DETACH 3 ! 684: #define DLL_PROCESS_DETACH 0 ! 685: ! 686: // ! 687: // Defines for the READ flags for Eventlogging ! 688: // ! 689: #define EVENTLOG_SEQUENTIAL_READ 0X0001 ! 690: #define EVENTLOG_SEEK_READ 0X0002 ! 691: #define EVENTLOG_FORWARDS_READ 0X0004 ! 692: #define EVENTLOG_BACKWARDS_READ 0X0008 ! 693: ! 694: // ! 695: // The types of events that can be logged. ! 696: // ! 697: #define EVENTLOG_ERROR_TYPE 0x0001 ! 698: #define EVENTLOG_WARNING_TYPE 0x0002 ! 699: #define EVENTLOG_INFORMATION_TYPE 0x0003 ! 700: ! 701: #define DBG_CONTINUE ((DWORD )0x00010002L) ! 702: #define DBG_TERMINATE_THREAD ((DWORD )0x40010003L) ! 703: #define DBG_TERMINATE_PROCESS ((DWORD )0x40010004L) ! 704: #define DBG_CONTROL_C ((DWORD )0x40010005L) ! 705: #define DBG_EXCEPTION_NOT_HANDLED ((DWORD )0x80010001L) ! 706: ! 707: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.