| 1 | /* $Id: winnt.h,v 1.2 1999-10-11 20:15:48 sandervl Exp $ */ | 
|---|
| 2 |  | 
|---|
| 3 | /* | 
|---|
| 4 | * Win32 definitions for Windows NT | 
|---|
| 5 | * | 
|---|
| 6 | * Copyright 1996 Alexandre Julliard | 
|---|
| 7 | */ | 
|---|
| 8 |  | 
|---|
| 9 | #ifndef __WINE_WINNT_H | 
|---|
| 10 | #define __WINE_WINNT_H | 
|---|
| 11 |  | 
|---|
| 12 | #include "windef.h" | 
|---|
| 13 |  | 
|---|
| 14 | #include "pshpack1.h" | 
|---|
| 15 | /* Defines */ | 
|---|
| 16 |  | 
|---|
| 17 | /* Argument 1 passed to the DllEntryProc. */ | 
|---|
| 18 | #define DLL_PROCESS_DETACH      0       /* detach process (unload library) */ | 
|---|
| 19 | #define DLL_PROCESS_ATTACH      1       /* attach process (load library) */ | 
|---|
| 20 | #define DLL_THREAD_ATTACH       2       /* attach new thread */ | 
|---|
| 21 | #define DLL_THREAD_DETACH       3       /* detach thread */ | 
|---|
| 22 |  | 
|---|
| 23 |  | 
|---|
| 24 | /* u.x.wProcessorArchitecture (NT) */ | 
|---|
| 25 | #define PROCESSOR_ARCHITECTURE_INTEL    0 | 
|---|
| 26 | #define PROCESSOR_ARCHITECTURE_MIPS     1 | 
|---|
| 27 | #define PROCESSOR_ARCHITECTURE_ALPHA    2 | 
|---|
| 28 | #define PROCESSOR_ARCHITECTURE_PPC      3 | 
|---|
| 29 | #define PROCESSOR_ARCHITECTURE_UNKNOWN  0xFFFF | 
|---|
| 30 |  | 
|---|
| 31 | /* dwProcessorType */ | 
|---|
| 32 | #define PROCESSOR_INTEL_386     386 | 
|---|
| 33 | #define PROCESSOR_INTEL_486     486 | 
|---|
| 34 | #define PROCESSOR_INTEL_PENTIUM 586 | 
|---|
| 35 | #define PROCESSOR_MIPS_R4000    4000 | 
|---|
| 36 | #define PROCESSOR_ALPHA_21064   21064 | 
|---|
| 37 |  | 
|---|
| 38 |  | 
|---|
| 39 | #define ANYSIZE_ARRAY 1 | 
|---|
| 40 |  | 
|---|
| 41 | #define MINCHAR       0x80 | 
|---|
| 42 | #define MAXCHAR       0x7f | 
|---|
| 43 | #define MINSHORT      0x8000 | 
|---|
| 44 | #define MAXSHORT      0x7fff | 
|---|
| 45 | #define MINLONG       0x80000000 | 
|---|
| 46 | #define MAXLONG       0x7fffffff | 
|---|
| 47 | #define MAXBYTE       0xff | 
|---|
| 48 | #define MAXWORD       0xffff | 
|---|
| 49 | #define MAXDWORD      0xffffffff | 
|---|
| 50 |  | 
|---|
| 51 | #define FIELD_OFFSET(type, field) \ | 
|---|
| 52 | ((LONG)(INT)&(((type *)0)->field)) | 
|---|
| 53 |  | 
|---|
| 54 | #define CONTAINING_RECORD(address, type, field) \ | 
|---|
| 55 | ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field))) | 
|---|
| 56 |  | 
|---|
| 57 | /* Types */ | 
|---|
| 58 |  | 
|---|
| 59 | typedef BYTE     BOOLEAN; | 
|---|
| 60 | typedef BOOLEAN *PBOOLEAN; | 
|---|
| 61 |  | 
|---|
| 62 | typedef struct _LIST_ENTRY { | 
|---|
| 63 | struct _LIST_ENTRY *Flink; | 
|---|
| 64 | struct _LIST_ENTRY *Blink; | 
|---|
| 65 | } LIST_ENTRY, *PLIST_ENTRY; | 
|---|
| 66 |  | 
|---|
| 67 | typedef struct _SINGLE_LIST_ENTRY { | 
|---|
| 68 | struct _SINGLE_LIST_ENTRY *Next; | 
|---|
| 69 | } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY; | 
|---|
| 70 |  | 
|---|
| 71 | /* Heap flags */ | 
|---|
| 72 |  | 
|---|
| 73 | #define HEAP_NO_SERIALIZE               0x00000001 | 
|---|
| 74 | #define HEAP_GROWABLE                   0x00000002 | 
|---|
| 75 | #define HEAP_GENERATE_EXCEPTIONS        0x00000004 | 
|---|
| 76 | #define HEAP_ZERO_MEMORY                0x00000008 | 
|---|
| 77 | #define HEAP_REALLOC_IN_PLACE_ONLY      0x00000010 | 
|---|
| 78 | #define HEAP_TAIL_CHECKING_ENABLED      0x00000020 | 
|---|
| 79 | #define HEAP_FREE_CHECKING_ENABLED      0x00000040 | 
|---|
| 80 | #define HEAP_DISABLE_COALESCE_ON_FREE   0x00000080 | 
|---|
| 81 | #define HEAP_CREATE_ALIGN_16            0x00010000 | 
|---|
| 82 | #define HEAP_CREATE_ENABLE_TRACING      0x00020000 | 
|---|
| 83 | #define HEAP_WINE_SEGPTR                0x01000000  /* Not a Win32 flag */ | 
|---|
| 84 | #define HEAP_WINE_CODESEG               0x02000000  /* Not a Win32 flag */ | 
|---|
| 85 | #define HEAP_WINE_CODE16SEG             0x04000000  /* Not a Win32 flag */ | 
|---|
| 86 |  | 
|---|
| 87 | /* Processor feature flags.  */ | 
|---|
| 88 | #define PF_FLOATING_POINT_PRECISION_ERRATA      0 | 
|---|
| 89 | #define PF_FLOATING_POINT_EMULATED              1 | 
|---|
| 90 | #define PF_COMPARE_EXCHANGE_DOUBLE              2 | 
|---|
| 91 | #define PF_MMX_INSTRUCTIONS_AVAILABLE           3 | 
|---|
| 92 | #define PF_PPC_MOVEMEM_64BIT_OK                 4 | 
|---|
| 93 | #define PF_ALPHA_BYTE_INSTRUCTIONS              5 | 
|---|
| 94 |  | 
|---|
| 95 |  | 
|---|
| 96 | /* The Win32 register context */ | 
|---|
| 97 |  | 
|---|
| 98 | #define CONTEXT_i386      0x00010000 | 
|---|
| 99 | #define CONTEXT_i486      CONTEXT_i386 | 
|---|
| 100 | #define CONTEXT_CONTROL   (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */ | 
|---|
| 101 | #define CONTEXT_INTEGER   (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */ | 
|---|
| 102 | #define CONTEXT_SEGMENTS  (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */ | 
|---|
| 103 | #define CONTEXT_FLOATING_POINT  (CONTEXT_i386 | 0x0008L) /* 387 state */ | 
|---|
| 104 | #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */ | 
|---|
| 105 | #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS) | 
|---|
| 106 |  | 
|---|
| 107 | #define SIZE_OF_80387_REGISTERS      80 | 
|---|
| 108 |  | 
|---|
| 109 | typedef struct | 
|---|
| 110 | { | 
|---|
| 111 | DWORD   ControlWord; | 
|---|
| 112 | DWORD   StatusWord; | 
|---|
| 113 | DWORD   TagWord; | 
|---|
| 114 | DWORD   ErrorOffset; | 
|---|
| 115 | DWORD   ErrorSelector; | 
|---|
| 116 | DWORD   DataOffset; | 
|---|
| 117 | DWORD   DataSelector; | 
|---|
| 118 | BYTE    RegisterArea[SIZE_OF_80387_REGISTERS]; | 
|---|
| 119 | DWORD   Cr0NpxState; | 
|---|
| 120 | } FLOATING_SAVE_AREA; | 
|---|
| 121 |  | 
|---|
| 122 | typedef struct | 
|---|
| 123 | { | 
|---|
| 124 | DWORD   ContextFlags; | 
|---|
| 125 |  | 
|---|
| 126 | /* These are selected by CONTEXT_DEBUG_REGISTERS */ | 
|---|
| 127 | DWORD   Dr0; | 
|---|
| 128 | DWORD   Dr1; | 
|---|
| 129 | DWORD   Dr2; | 
|---|
| 130 | DWORD   Dr3; | 
|---|
| 131 | DWORD   Dr6; | 
|---|
| 132 | DWORD   Dr7; | 
|---|
| 133 |  | 
|---|
| 134 | /* These are selected by CONTEXT_FLOATING_POINT */ | 
|---|
| 135 | FLOATING_SAVE_AREA FloatSave; | 
|---|
| 136 |  | 
|---|
| 137 | /* These are selected by CONTEXT_SEGMENTS */ | 
|---|
| 138 | DWORD   SegGs; | 
|---|
| 139 | DWORD   SegFs; | 
|---|
| 140 | DWORD   SegEs; | 
|---|
| 141 | DWORD   SegDs; | 
|---|
| 142 |  | 
|---|
| 143 | /* These are selected by CONTEXT_INTEGER */ | 
|---|
| 144 | DWORD   Edi; | 
|---|
| 145 | DWORD   Esi; | 
|---|
| 146 | DWORD   Ebx; | 
|---|
| 147 | DWORD   Edx; | 
|---|
| 148 | DWORD   Ecx; | 
|---|
| 149 | DWORD   Eax; | 
|---|
| 150 |  | 
|---|
| 151 | /* These are selected by CONTEXT_CONTROL */ | 
|---|
| 152 | DWORD   Ebp; | 
|---|
| 153 | DWORD   Eip; | 
|---|
| 154 | DWORD   SegCs; | 
|---|
| 155 | DWORD   EFlags; | 
|---|
| 156 | DWORD   Esp; | 
|---|
| 157 | DWORD   SegSs; | 
|---|
| 158 | } CONTEXT, *PCONTEXT; | 
|---|
| 159 |  | 
|---|
| 160 | typedef HANDLE *PHANDLE; | 
|---|
| 161 |  | 
|---|
| 162 | #ifdef __WINE__ | 
|---|
| 163 |  | 
|---|
| 164 | /* Macros for easier access to context registers */ | 
|---|
| 165 |  | 
|---|
| 166 | #define EAX_reg(context)     ((context)->Eax) | 
|---|
| 167 | #define EBX_reg(context)     ((context)->Ebx) | 
|---|
| 168 | #define ECX_reg(context)     ((context)->Ecx) | 
|---|
| 169 | #define EDX_reg(context)     ((context)->Edx) | 
|---|
| 170 | #define ESI_reg(context)     ((context)->Esi) | 
|---|
| 171 | #define EDI_reg(context)     ((context)->Edi) | 
|---|
| 172 | #define EBP_reg(context)     ((context)->Ebp) | 
|---|
| 173 |  | 
|---|
| 174 | #define CS_reg(context)      ((context)->SegCs) | 
|---|
| 175 | #define DS_reg(context)      ((context)->SegDs) | 
|---|
| 176 | #define ES_reg(context)      ((context)->SegEs) | 
|---|
| 177 | #define FS_reg(context)      ((context)->SegFs) | 
|---|
| 178 | #define GS_reg(context)      ((context)->SegGs) | 
|---|
| 179 | #define SS_reg(context)      ((context)->SegSs) | 
|---|
| 180 |  | 
|---|
| 181 | #define EFL_reg(context)     ((context)->EFlags) | 
|---|
| 182 | #define EIP_reg(context)     ((context)->Eip) | 
|---|
| 183 | #define ESP_reg(context)     ((context)->Esp) | 
|---|
| 184 |  | 
|---|
| 185 | #define AX_reg(context)      (*(WORD*)&EAX_reg(context)) | 
|---|
| 186 | #define BX_reg(context)      (*(WORD*)&EBX_reg(context)) | 
|---|
| 187 | #define CX_reg(context)      (*(WORD*)&ECX_reg(context)) | 
|---|
| 188 | #define DX_reg(context)      (*(WORD*)&EDX_reg(context)) | 
|---|
| 189 | #define SI_reg(context)      (*(WORD*)&ESI_reg(context)) | 
|---|
| 190 | #define DI_reg(context)      (*(WORD*)&EDI_reg(context)) | 
|---|
| 191 | #define BP_reg(context)      (*(WORD*)&EBP_reg(context)) | 
|---|
| 192 |  | 
|---|
| 193 | #define AL_reg(context)      (*(BYTE*)&EAX_reg(context)) | 
|---|
| 194 | #define AH_reg(context)      (*((BYTE*)&EAX_reg(context)+1)) | 
|---|
| 195 | #define BL_reg(context)      (*(BYTE*)&EBX_reg(context)) | 
|---|
| 196 | #define BH_reg(context)      (*((BYTE*)&EBX_reg(context)+1)) | 
|---|
| 197 | #define CL_reg(context)      (*(BYTE*)&ECX_reg(context)) | 
|---|
| 198 | #define CH_reg(context)      (*((BYTE*)&ECX_reg(context)+1)) | 
|---|
| 199 | #define DL_reg(context)      (*(BYTE*)&EDX_reg(context)) | 
|---|
| 200 | #define DH_reg(context)      (*((BYTE*)&EDX_reg(context)+1)) | 
|---|
| 201 |  | 
|---|
| 202 | #define IP_reg(context)      (*(WORD*)&EIP_reg(context)) | 
|---|
| 203 | #define SP_reg(context)      (*(WORD*)&ESP_reg(context)) | 
|---|
| 204 |  | 
|---|
| 205 | #define FL_reg(context)      (*(WORD*)&EFL_reg(context)) | 
|---|
| 206 |  | 
|---|
| 207 | #define SET_CFLAG(context)   (EFL_reg(context) |= 0x0001) | 
|---|
| 208 | #define RESET_CFLAG(context) (EFL_reg(context) &= ~0x0001) | 
|---|
| 209 | #define SET_ZFLAG(context)   (EFL_reg(context) |= 0x0040) | 
|---|
| 210 | #define RESET_ZFLAG(context) (EFL_reg(context) &= ~0x0040) | 
|---|
| 211 |  | 
|---|
| 212 | #define ISV86(context)       (EFL_reg(context) & 0x00020000) | 
|---|
| 213 | #define V86BASE(context)     ((context)->Dr7) /* ugly */ | 
|---|
| 214 |  | 
|---|
| 215 | #endif  /* __WINE__ */ | 
|---|
| 216 |  | 
|---|
| 217 | /* | 
|---|
| 218 | * Exception codes | 
|---|
| 219 | */ | 
|---|
| 220 |  | 
|---|
| 221 | #define STATUS_WAIT_0                    0x00000000 | 
|---|
| 222 | #define STATUS_ABANDONED_WAIT_0          0x00000080 | 
|---|
| 223 | #define STATUS_USER_APC                  0x000000C0 | 
|---|
| 224 | #define STATUS_TIMEOUT                   0x00000102 | 
|---|
| 225 | #define STATUS_PENDING                   0x00000103 | 
|---|
| 226 | #define STATUS_DATATYPE_MISALIGNMENT     0x80000002 | 
|---|
| 227 | #define STATUS_BREAKPOINT                0x80000003 | 
|---|
| 228 | #define STATUS_SINGLE_STEP               0x80000004 | 
|---|
| 229 | #define STATUS_ACCESS_VIOLATION          0xC0000005 | 
|---|
| 230 | #define STATUS_IN_PAGE_ERROR             0xC0000006 | 
|---|
| 231 | #define STATUS_NO_MEMORY                 0xC0000017 | 
|---|
| 232 | #define STATUS_ILLEGAL_INSTRUCTION       0xC000001D | 
|---|
| 233 | #define STATUS_NONCONTINUABLE_EXCEPTION  0xC0000025 | 
|---|
| 234 | #define STATUS_INVALID_DISPOSITION       0xC0000026 | 
|---|
| 235 | #define STATUS_ARRAY_BOUNDS_EXCEEDED     0xC000008C | 
|---|
| 236 | #define STATUS_FLOAT_DENORMAL_OPERAND    0xC000008D | 
|---|
| 237 | #define STATUS_FLOAT_DIVIDE_BY_ZERO      0xC000008E | 
|---|
| 238 | #define STATUS_FLOAT_INEXACT_RESULT      0xC000008F | 
|---|
| 239 | #define STATUS_FLOAT_INVALID_OPERATION   0xC0000090 | 
|---|
| 240 | #define STATUS_FLOAT_OVERFLOW            0xC0000091 | 
|---|
| 241 | #define STATUS_FLOAT_STACK_CHECK         0xC0000092 | 
|---|
| 242 | #define STATUS_FLOAT_UNDERFLOW           0xC0000093 | 
|---|
| 243 | #define STATUS_INTEGER_DIVIDE_BY_ZERO    0xC0000094 | 
|---|
| 244 | #define STATUS_INTEGER_OVERFLOW          0xC0000095 | 
|---|
| 245 | #define STATUS_PRIVILEGED_INSTRUCTION    0xC0000096 | 
|---|
| 246 | #define STATUS_STACK_OVERFLOW            0xC00000FD | 
|---|
| 247 | #define STATUS_CONTROL_C_EXIT            0xC000013A | 
|---|
| 248 |  | 
|---|
| 249 | #define EXCEPTION_ACCESS_VIOLATION          STATUS_ACCESS_VIOLATION | 
|---|
| 250 | #define EXCEPTION_DATATYPE_MISALIGNMENT     STATUS_DATATYPE_MISALIGNMENT | 
|---|
| 251 | #define EXCEPTION_BREAKPOINT                STATUS_BREAKPOINT | 
|---|
| 252 | #define EXCEPTION_SINGLE_STEP               STATUS_SINGLE_STEP | 
|---|
| 253 | #define EXCEPTION_ARRAY_BOUNDS_EXCEEDED     STATUS_ARRAY_BOUNDS_EXCEEDED | 
|---|
| 254 | #define EXCEPTION_FLT_DENORMAL_OPERAND      STATUS_FLOAT_DENORMAL_OPERAND | 
|---|
| 255 | #define EXCEPTION_FLT_DIVIDE_BY_ZERO        STATUS_FLOAT_DIVIDE_BY_ZERO | 
|---|
| 256 | #define EXCEPTION_FLT_INEXACT_RESULT        STATUS_FLOAT_INEXACT_RESULT | 
|---|
| 257 | #define EXCEPTION_FLT_INVALID_OPERATION     STATUS_FLOAT_INVALID_OPERATION | 
|---|
| 258 | #define EXCEPTION_FLT_OVERFLOW              STATUS_FLOAT_OVERFLOW | 
|---|
| 259 | #define EXCEPTION_FLT_STACK_CHECK           STATUS_FLOAT_STACK_CHECK | 
|---|
| 260 | #define EXCEPTION_FLT_UNDERFLOW             STATUS_FLOAT_UNDERFLOW | 
|---|
| 261 | #define EXCEPTION_INT_DIVIDE_BY_ZERO        STATUS_INTEGER_DIVIDE_BY_ZERO | 
|---|
| 262 | #define EXCEPTION_INT_OVERFLOW              STATUS_INTEGER_OVERFLOW | 
|---|
| 263 | #define EXCEPTION_PRIV_INSTRUCTION          STATUS_PRIVILEGED_INSTRUCTION | 
|---|
| 264 | #define EXCEPTION_IN_PAGE_ERROR             STATUS_IN_PAGE_ERROR | 
|---|
| 265 | #define EXCEPTION_ILLEGAL_INSTRUCTION       STATUS_ILLEGAL_INSTRUCTION | 
|---|
| 266 | #define EXCEPTION_NONCONTINUABLE_EXCEPTION  STATUS_NONCONTINUABLE_EXCEPTION | 
|---|
| 267 | #define EXCEPTION_STACK_OVERFLOW            STATUS_STACK_OVERFLOW | 
|---|
| 268 | #define EXCEPTION_INVALID_DISPOSITION       STATUS_INVALID_DISPOSITION | 
|---|
| 269 | #define EXCEPTION_GUARD_PAGE                STATUS_GUARD_PAGE_VIOLATION | 
|---|
| 270 | #define EXCEPTION_INVALID_HANDLE            STATUS_INVALID_HANDLE | 
|---|
| 271 | #define CONTROL_C_EXIT                      STATUS_CONTROL_C_EXIT | 
|---|
| 272 |  | 
|---|
| 273 | #define MAXIMUM_WAIT_OBJECTS 64 | 
|---|
| 274 | #define MAXIMUM_SUSPEND_COUNT 127 | 
|---|
| 275 |  | 
|---|
| 276 |  | 
|---|
| 277 | /* | 
|---|
| 278 | * Return values from the actual exception handlers | 
|---|
| 279 | */ | 
|---|
| 280 |  | 
|---|
| 281 | #define ExceptionContinueExecution 0 | 
|---|
| 282 | #define ExceptionContinueSearch    1 | 
|---|
| 283 | #define ExceptionNestedException   2 | 
|---|
| 284 | #define ExceptionCollidedUnwind    3 | 
|---|
| 285 |  | 
|---|
| 286 | /* | 
|---|
| 287 | * Return values from filters in except() and from UnhandledExceptionFilter | 
|---|
| 288 | */ | 
|---|
| 289 |  | 
|---|
| 290 | #define EXCEPTION_EXECUTE_HANDLER        1 | 
|---|
| 291 | #define EXCEPTION_CONTINUE_SEARCH        0 | 
|---|
| 292 | #define EXCEPTION_CONTINUE_EXECUTION    -1 | 
|---|
| 293 |  | 
|---|
| 294 | /* | 
|---|
| 295 | * From OS/2 2.0 exception handling | 
|---|
| 296 | * Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD | 
|---|
| 297 | */ | 
|---|
| 298 |  | 
|---|
| 299 | #define EH_NONCONTINUABLE   0x01 | 
|---|
| 300 | #define EH_UNWINDING        0x02 | 
|---|
| 301 | #define EH_EXIT_UNWIND      0x04 | 
|---|
| 302 | #define EH_STACK_INVALID    0x08 | 
|---|
| 303 | #define EH_NESTED_CALL      0x10 | 
|---|
| 304 |  | 
|---|
| 305 | #define EXCEPTION_CONTINUABLE        0 | 
|---|
| 306 | #define EXCEPTION_NONCONTINUABLE     EH_NONCONTINUABLE | 
|---|
| 307 |  | 
|---|
| 308 | /* | 
|---|
| 309 | * The exception record used by Win32 to give additional information | 
|---|
| 310 | * about exception to exception handlers. | 
|---|
| 311 | */ | 
|---|
| 312 |  | 
|---|
| 313 | #define EXCEPTION_MAXIMUM_PARAMETERS 15 | 
|---|
| 314 |  | 
|---|
| 315 | typedef struct __EXCEPTION_RECORD | 
|---|
| 316 | { | 
|---|
| 317 | DWORD    ExceptionCode; | 
|---|
| 318 | DWORD    ExceptionFlags; | 
|---|
| 319 | struct __EXCEPTION_RECORD *ExceptionRecord; | 
|---|
| 320 |  | 
|---|
| 321 | LPVOID   ExceptionAddress; | 
|---|
| 322 | DWORD    NumberParameters; | 
|---|
| 323 | DWORD    ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; | 
|---|
| 324 | } EXCEPTION_RECORD, *PEXCEPTION_RECORD; | 
|---|
| 325 |  | 
|---|
| 326 | /* | 
|---|
| 327 | * The exception pointers structure passed to exception filters | 
|---|
| 328 | * in except() and the UnhandledExceptionFilter(). | 
|---|
| 329 | */ | 
|---|
| 330 |  | 
|---|
| 331 | typedef struct _EXCEPTION_POINTERS | 
|---|
| 332 | { | 
|---|
| 333 | PEXCEPTION_RECORD  ExceptionRecord; | 
|---|
| 334 | PCONTEXT           ContextRecord; | 
|---|
| 335 | } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; | 
|---|
| 336 |  | 
|---|
| 337 | #include "poppack.h" | 
|---|
| 338 |  | 
|---|
| 339 | /* | 
|---|
| 340 | * function pointer to a exception filter | 
|---|
| 341 | */ | 
|---|
| 342 |  | 
|---|
| 343 | typedef LONG (* CALLBACK PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS ExceptionInfo); | 
|---|
| 344 | typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER; | 
|---|
| 345 |  | 
|---|
| 346 | DWORD WINAPI UnhandledExceptionFilter( PEXCEPTION_POINTERS epointers ); | 
|---|
| 347 | LPTOP_LEVEL_EXCEPTION_FILTER | 
|---|
| 348 | WINAPI SetUnhandledExceptionFilter( LPTOP_LEVEL_EXCEPTION_FILTER filter ); | 
|---|
| 349 |  | 
|---|
| 350 | /* | 
|---|
| 351 | * Here follows typedefs for security and tokens. | 
|---|
| 352 | */ | 
|---|
| 353 |  | 
|---|
| 354 | /* | 
|---|
| 355 | * First a constant for the following typdefs. | 
|---|
| 356 | */ | 
|---|
| 357 |  | 
|---|
| 358 | #define ANYSIZE_ARRAY   1 | 
|---|
| 359 |  | 
|---|
| 360 | /* FIXME:  Orphan.  What does it point to? */ | 
|---|
| 361 | typedef PVOID PACCESS_TOKEN; | 
|---|
| 362 |  | 
|---|
| 363 | /* | 
|---|
| 364 | * TOKEN_INFORMATION_CLASS | 
|---|
| 365 | */ | 
|---|
| 366 |  | 
|---|
| 367 | typedef enum _TOKEN_INFORMATION_CLASS { | 
|---|
| 368 | TokenUser = 1, | 
|---|
| 369 | TokenGroups, | 
|---|
| 370 | TokenPrivileges, | 
|---|
| 371 | TokenOwner, | 
|---|
| 372 | TokenPrimaryGroup, | 
|---|
| 373 | TokenDefaultDacl, | 
|---|
| 374 | TokenSource, | 
|---|
| 375 | TokenType, | 
|---|
| 376 | TokenImpersonationLevel, | 
|---|
| 377 | TokenStatistics | 
|---|
| 378 | } TOKEN_INFORMATION_CLASS; | 
|---|
| 379 |  | 
|---|
| 380 | #ifndef _SECURITY_DEFINED | 
|---|
| 381 | #define _SECURITY_DEFINED | 
|---|
| 382 |  | 
|---|
| 383 | #include "pshpack1.h" | 
|---|
| 384 |  | 
|---|
| 385 | typedef struct { | 
|---|
| 386 | BYTE Value[6]; | 
|---|
| 387 | } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY; | 
|---|
| 388 |  | 
|---|
| 389 | typedef struct _SID { | 
|---|
| 390 | BYTE Revision; | 
|---|
| 391 | BYTE SubAuthorityCount; | 
|---|
| 392 | SID_IDENTIFIER_AUTHORITY IdentifierAuthority; | 
|---|
| 393 | DWORD SubAuthority[1]; | 
|---|
| 394 | } SID,*PSID; | 
|---|
| 395 |  | 
|---|
| 396 | #define SID_REVISION                    (1)     /* Current revision */ | 
|---|
| 397 | #define SID_MAX_SUB_AUTHORITIES         (15)    /* current max subauths */ | 
|---|
| 398 | #define SID_RECOMMENDED_SUB_AUTHORITIES (1)     /* recommended subauths */ | 
|---|
| 399 |  | 
|---|
| 400 |  | 
|---|
| 401 | /* | 
|---|
| 402 | * ACL | 
|---|
| 403 | */ | 
|---|
| 404 |  | 
|---|
| 405 | typedef struct _ACL { | 
|---|
| 406 | BYTE AclRevision; | 
|---|
| 407 | BYTE Sbz1; | 
|---|
| 408 | WORD AclSize; | 
|---|
| 409 | WORD AceCount; | 
|---|
| 410 | WORD Sbz2; | 
|---|
| 411 | } ACL, *PACL; | 
|---|
| 412 |  | 
|---|
| 413 | /* SECURITY_DESCRIPTOR */ | 
|---|
| 414 | #define SECURITY_DESCRIPTOR_REVISION    1 | 
|---|
| 415 | #define SECURITY_DESCRIPTOR_REVISION1   1 | 
|---|
| 416 |  | 
|---|
| 417 |  | 
|---|
| 418 | #define SE_OWNER_DEFAULTED      0x0001 | 
|---|
| 419 | #define SE_GROUP_DEFAULTED      0x0002 | 
|---|
| 420 | #define SE_DACL_PRESENT         0x0004 | 
|---|
| 421 | #define SE_DACL_DEFAULTED       0x0008 | 
|---|
| 422 | #define SE_SACL_PRESENT         0x0010 | 
|---|
| 423 | #define SE_SACL_DEFAULTED       0x0020 | 
|---|
| 424 | #define SE_SELF_RELATIVE        0x8000 | 
|---|
| 425 |  | 
|---|
| 426 | typedef DWORD SECURITY_INFORMATION; | 
|---|
| 427 | typedef WORD SECURITY_DESCRIPTOR_CONTROL; | 
|---|
| 428 |  | 
|---|
| 429 | /* The security descriptor structure */ | 
|---|
| 430 | typedef struct { | 
|---|
| 431 | BYTE Revision; | 
|---|
| 432 | BYTE Sbz1; | 
|---|
| 433 | SECURITY_DESCRIPTOR_CONTROL Control; | 
|---|
| 434 | PSID Owner; | 
|---|
| 435 | PSID Group; | 
|---|
| 436 | PACL Sacl; | 
|---|
| 437 | PACL Dacl; | 
|---|
| 438 | } SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR, *LPSECURITY_DESCRIPTOR; | 
|---|
| 439 |  | 
|---|
| 440 | #define SECURITY_DESCRIPTOR_MIN_LENGTH   (sizeof(SECURITY_DESCRIPTOR)) | 
|---|
| 441 |  | 
|---|
| 442 | #include "poppack.h" | 
|---|
| 443 |  | 
|---|
| 444 | #endif /* _SECURITY_DEFINED */ | 
|---|
| 445 |  | 
|---|
| 446 | #include "pshpack1.h" | 
|---|
| 447 |  | 
|---|
| 448 | /* | 
|---|
| 449 | * SID_AND_ATTRIBUTES | 
|---|
| 450 | */ | 
|---|
| 451 |  | 
|---|
| 452 | typedef struct _SID_AND_ATTRIBUTES { | 
|---|
| 453 | PSID  Sid; | 
|---|
| 454 | DWORD Attributes; | 
|---|
| 455 | } SID_AND_ATTRIBUTES ; | 
|---|
| 456 |  | 
|---|
| 457 | /* | 
|---|
| 458 | * TOKEN_USER | 
|---|
| 459 | */ | 
|---|
| 460 |  | 
|---|
| 461 | typedef struct _TOKEN_USER { | 
|---|
| 462 | SID_AND_ATTRIBUTES User; | 
|---|
| 463 | } TOKEN_USER; | 
|---|
| 464 |  | 
|---|
| 465 | /* | 
|---|
| 466 | * TOKEN_GROUPS | 
|---|
| 467 | */ | 
|---|
| 468 |  | 
|---|
| 469 | typedef struct _TOKEN_GROUPS  { | 
|---|
| 470 | DWORD GroupCount; | 
|---|
| 471 | SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY]; | 
|---|
| 472 | } TOKEN_GROUPS; | 
|---|
| 473 |  | 
|---|
| 474 | /* | 
|---|
| 475 | * LUID_AND_ATTRIBUTES | 
|---|
| 476 | */ | 
|---|
| 477 |  | 
|---|
| 478 | typedef struct _LARGE_INTEGER | 
|---|
| 479 | { | 
|---|
| 480 | DWORD    LowPart; | 
|---|
| 481 | LONG     HighPart; | 
|---|
| 482 | } LARGE_INTEGER, *LPLARGE_INTEGER, *PLARGE_INTEGER; | 
|---|
| 483 |  | 
|---|
| 484 | typedef struct _ULARGE_INTEGER | 
|---|
| 485 | { | 
|---|
| 486 | DWORD    LowPart; | 
|---|
| 487 | DWORD    HighPart; | 
|---|
| 488 | } ULARGE_INTEGER, *LPULARGE_INTEGER, *PULARGE_INTEGER; | 
|---|
| 489 |  | 
|---|
| 490 | /* | 
|---|
| 491 | * Locally Unique Identifier | 
|---|
| 492 | */ | 
|---|
| 493 |  | 
|---|
| 494 | typedef LARGE_INTEGER LUID,*PLUID; | 
|---|
| 495 |  | 
|---|
| 496 | typedef struct _LUID_AND_ATTRIBUTES { | 
|---|
| 497 | LUID   Luid; | 
|---|
| 498 | DWORD  Attributes; | 
|---|
| 499 | } LUID_AND_ATTRIBUTES; | 
|---|
| 500 |  | 
|---|
| 501 | /* | 
|---|
| 502 | * TOKEN_PRIVILEGES | 
|---|
| 503 | */ | 
|---|
| 504 |  | 
|---|
| 505 | typedef struct _TOKEN_PRIVILEGES { | 
|---|
| 506 | DWORD PrivilegeCount; | 
|---|
| 507 | LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; | 
|---|
| 508 | } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES; | 
|---|
| 509 |  | 
|---|
| 510 | /* | 
|---|
| 511 | * TOKEN_OWNER | 
|---|
| 512 | */ | 
|---|
| 513 |  | 
|---|
| 514 | typedef struct _TOKEN_OWNER { | 
|---|
| 515 | PSID Owner; | 
|---|
| 516 | } TOKEN_OWNER; | 
|---|
| 517 |  | 
|---|
| 518 | /* | 
|---|
| 519 | * TOKEN_PRIMARY_GROUP | 
|---|
| 520 | */ | 
|---|
| 521 |  | 
|---|
| 522 | typedef struct _TOKEN_PRIMARY_GROUP { | 
|---|
| 523 | PSID PrimaryGroup; | 
|---|
| 524 | } TOKEN_PRIMARY_GROUP; | 
|---|
| 525 |  | 
|---|
| 526 |  | 
|---|
| 527 | /* | 
|---|
| 528 | * TOKEN_DEFAULT_DACL | 
|---|
| 529 | */ | 
|---|
| 530 |  | 
|---|
| 531 | typedef struct _TOKEN_DEFAULT_DACL { | 
|---|
| 532 | PACL DefaultDacl; | 
|---|
| 533 | } TOKEN_DEFAULT_DACL; | 
|---|
| 534 |  | 
|---|
| 535 | /* | 
|---|
| 536 | * TOKEN_SOURCEL | 
|---|
| 537 | */ | 
|---|
| 538 |  | 
|---|
| 539 | typedef struct _TOKEN_SOURCE { | 
|---|
| 540 | char Sourcename[8]; | 
|---|
| 541 | LUID SourceIdentifier; | 
|---|
| 542 | } TOKEN_SOURCE; | 
|---|
| 543 |  | 
|---|
| 544 | /* | 
|---|
| 545 | * TOKEN_TYPE | 
|---|
| 546 | */ | 
|---|
| 547 |  | 
|---|
| 548 | typedef enum tagTOKEN_TYPE { | 
|---|
| 549 | TokenPrimary = 1, | 
|---|
| 550 | TokenImpersonation | 
|---|
| 551 | } TOKEN_TYPE; | 
|---|
| 552 |  | 
|---|
| 553 | /* | 
|---|
| 554 | * SECURITY_IMPERSONATION_LEVEL | 
|---|
| 555 | */ | 
|---|
| 556 |  | 
|---|
| 557 | typedef enum _SECURITY_IMPERSONATION_LEVEL { | 
|---|
| 558 | SecurityAnonymous, | 
|---|
| 559 | SecurityIdentification, | 
|---|
| 560 | SecurityImpersonation, | 
|---|
| 561 | SecurityDelegation | 
|---|
| 562 | } SECURITY_IMPERSONATION_LEVEL; | 
|---|
| 563 |  | 
|---|
| 564 |  | 
|---|
| 565 | typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, | 
|---|
| 566 | * PSECURITY_CONTEXT_TRACKING_MODE; | 
|---|
| 567 | /* | 
|---|
| 568 | *      Quality of Service | 
|---|
| 569 | */ | 
|---|
| 570 |  | 
|---|
| 571 | typedef struct _SECURITY_QUALITY_OF_SERVICE { | 
|---|
| 572 | DWORD                         Length; | 
|---|
| 573 | SECURITY_IMPERSONATION_LEVEL  ImpersonationLevel; | 
|---|
| 574 | SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; | 
|---|
| 575 | BOOL                          EffectiveOnly; | 
|---|
| 576 | } SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE; | 
|---|
| 577 |  | 
|---|
| 578 | /* | 
|---|
| 579 | * TOKEN_STATISTICS | 
|---|
| 580 | */ | 
|---|
| 581 |  | 
|---|
| 582 | typedef struct _TOKEN_STATISTICS { | 
|---|
| 583 | LUID  TokenId; | 
|---|
| 584 | LUID  AuthenticationId; | 
|---|
| 585 | LARGE_INTEGER ExpirationTime; | 
|---|
| 586 | TOKEN_TYPE    TokenType; | 
|---|
| 587 | SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; | 
|---|
| 588 | DWORD DynamicCharged; | 
|---|
| 589 | DWORD DynamicAvailable; | 
|---|
| 590 | DWORD GroupCount; | 
|---|
| 591 | DWORD PrivilegeCount; | 
|---|
| 592 | LUID  ModifiedId; | 
|---|
| 593 | } TOKEN_STATISTICS; | 
|---|
| 594 |  | 
|---|
| 595 | /* | 
|---|
| 596 | *      ACLs of NT | 
|---|
| 597 | */ | 
|---|
| 598 |  | 
|---|
| 599 | #define ACL_REVISION    2 | 
|---|
| 600 |  | 
|---|
| 601 | #define ACL_REVISION1   1 | 
|---|
| 602 | #define ACL_REVISION2   2 | 
|---|
| 603 |  | 
|---|
| 604 | /* ACEs, directly starting after an ACL */ | 
|---|
| 605 | typedef struct _ACE_HEADER { | 
|---|
| 606 | BYTE    AceType; | 
|---|
| 607 | BYTE    AceFlags; | 
|---|
| 608 | WORD    AceSize; | 
|---|
| 609 | } ACE_HEADER,*PACE_HEADER; | 
|---|
| 610 |  | 
|---|
| 611 | /* AceType */ | 
|---|
| 612 | #define ACCESS_ALLOWED_ACE_TYPE         0 | 
|---|
| 613 | #define ACCESS_DENIED_ACE_TYPE          1 | 
|---|
| 614 | #define SYSTEM_AUDIT_ACE_TYPE           2 | 
|---|
| 615 | #define SYSTEM_ALARM_ACE_TYPE           3 | 
|---|
| 616 |  | 
|---|
| 617 | /* inherit AceFlags */ | 
|---|
| 618 | #define OBJECT_INHERIT_ACE              0x01 | 
|---|
| 619 | #define CONTAINER_INHERIT_ACE           0x02 | 
|---|
| 620 | #define NO_PROPAGATE_INHERIT_ACE        0x04 | 
|---|
| 621 | #define INHERIT_ONLY_ACE                0x08 | 
|---|
| 622 | #define VALID_INHERIT_FLAGS             0x0F | 
|---|
| 623 |  | 
|---|
| 624 | /* AceFlags mask for what events we (should) audit */ | 
|---|
| 625 | #define SUCCESSFUL_ACCESS_ACE_FLAG      0x40 | 
|---|
| 626 | #define FAILED_ACCESS_ACE_FLAG          0x80 | 
|---|
| 627 |  | 
|---|
| 628 | /* different ACEs depending on AceType | 
|---|
| 629 | * SidStart marks the begin of a SID | 
|---|
| 630 | * so the thing finally looks like this: | 
|---|
| 631 | * 0: ACE_HEADER | 
|---|
| 632 | * 4: ACCESS_MASK | 
|---|
| 633 | * 8... : SID | 
|---|
| 634 | */ | 
|---|
| 635 | typedef struct _ACCESS_ALLOWED_ACE { | 
|---|
| 636 | ACE_HEADER      Header; | 
|---|
| 637 | DWORD           Mask; | 
|---|
| 638 | DWORD           SidStart; | 
|---|
| 639 | } ACCESS_ALLOWED_ACE,*PACCESS_ALLOWED_ACE; | 
|---|
| 640 |  | 
|---|
| 641 | typedef struct _ACCESS_DENIED_ACE { | 
|---|
| 642 | ACE_HEADER      Header; | 
|---|
| 643 | DWORD           Mask; | 
|---|
| 644 | DWORD           SidStart; | 
|---|
| 645 | } ACCESS_DENIED_ACE,*PACCESS_DENIED_ACE; | 
|---|
| 646 |  | 
|---|
| 647 | typedef struct _SYSTEM_AUDIT_ACE { | 
|---|
| 648 | ACE_HEADER      Header; | 
|---|
| 649 | DWORD           Mask; | 
|---|
| 650 | DWORD           SidStart; | 
|---|
| 651 | } SYSTEM_AUDIT_ACE,*PSYSTEM_AUDIT_ACE; | 
|---|
| 652 |  | 
|---|
| 653 | typedef struct _SYSTEM_ALARM_ACE { | 
|---|
| 654 | ACE_HEADER      Header; | 
|---|
| 655 | DWORD           Mask; | 
|---|
| 656 | DWORD           SidStart; | 
|---|
| 657 | } SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE; | 
|---|
| 658 |  | 
|---|
| 659 | typedef enum tagSID_NAME_USE { | 
|---|
| 660 | SidTypeUser = 1, | 
|---|
| 661 | SidTypeGroup, | 
|---|
| 662 | SidTypeDomain, | 
|---|
| 663 | SidTypeAlias, | 
|---|
| 664 | SidTypeWellKnownGroup, | 
|---|
| 665 | SidTypeDeletedAccount, | 
|---|
| 666 | SidTypeInvalid, | 
|---|
| 667 | SidTypeUnknown | 
|---|
| 668 | } SID_NAME_USE,*PSID_NAME_USE; | 
|---|
| 669 |  | 
|---|
| 670 | /* Access rights */ | 
|---|
| 671 |  | 
|---|
| 672 | #define DELETE                     0x00010000 | 
|---|
| 673 | #define READ_CONTROL               0x00020000 | 
|---|
| 674 | #define WRITE_DAC                  0x00040000 | 
|---|
| 675 | #define WRITE_OWNER                0x00080000 | 
|---|
| 676 | #define SYNCHRONIZE                0x00100000 | 
|---|
| 677 | #define STANDARD_RIGHTS_REQUIRED   0x000f0000 | 
|---|
| 678 |  | 
|---|
| 679 | #define STANDARD_RIGHTS_READ       READ_CONTROL | 
|---|
| 680 | #define STANDARD_RIGHTS_WRITE      READ_CONTROL | 
|---|
| 681 | #define STANDARD_RIGHTS_EXECUTE    READ_CONTROL | 
|---|
| 682 |  | 
|---|
| 683 | #define STANDARD_RIGHTS_ALL        0x001f0000 | 
|---|
| 684 |  | 
|---|
| 685 | #define SPECIFIC_RIGHTS_ALL        0x0000ffff | 
|---|
| 686 |  | 
|---|
| 687 | #define GENERIC_READ               0x80000000 | 
|---|
| 688 | #define GENERIC_WRITE              0x40000000 | 
|---|
| 689 | #define GENERIC_EXECUTE            0x20000000 | 
|---|
| 690 | #define GENERIC_ALL                0x10000000 | 
|---|
| 691 |  | 
|---|
| 692 | #define EVENT_MODIFY_STATE         0x0002 | 
|---|
| 693 | #define EVENT_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) | 
|---|
| 694 |  | 
|---|
| 695 | #define SEMAPHORE_MODIFY_STATE     0x0002 | 
|---|
| 696 | #define SEMAPHORE_ALL_ACCESS       (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) | 
|---|
| 697 |  | 
|---|
| 698 | #define MUTEX_MODIFY_STATE         0x0001 | 
|---|
| 699 | #define MUTEX_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1) | 
|---|
| 700 |  | 
|---|
| 701 | #define PROCESS_TERMINATE          0x0001 | 
|---|
| 702 | #define PROCESS_CREATE_THREAD      0x0002 | 
|---|
| 703 | #define PROCESS_VM_OPERATION       0x0008 | 
|---|
| 704 | #define PROCESS_VM_READ            0x0010 | 
|---|
| 705 | #define PROCESS_VM_WRITE           0x0020 | 
|---|
| 706 | #define PROCESS_DUP_HANDLE         0x0040 | 
|---|
| 707 | #define PROCESS_CREATE_PROCESS     0x0080 | 
|---|
| 708 | #define PROCESS_SET_QUOTA          0x0100 | 
|---|
| 709 | #define PROCESS_SET_INFORMATION    0x0200 | 
|---|
| 710 | #define PROCESS_QUERY_INFORMATION  0x0400 | 
|---|
| 711 | #define PROCESS_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xfff) | 
|---|
| 712 |  | 
|---|
| 713 | #define THREAD_TERMINATE           0x0001 | 
|---|
| 714 | #define THREAD_SUSPEND_RESUME      0x0002 | 
|---|
| 715 | #define THREAD_GET_CONTEXT         0x0008 | 
|---|
| 716 | #define THREAD_SET_CONTEXT         0x0010 | 
|---|
| 717 | #define THREAD_SET_INFORMATION     0x0020 | 
|---|
| 718 | #define THREAD_QUERY_INFORMATION   0x0040 | 
|---|
| 719 | #define THREAD_SET_THREAD_TOKEN    0x0080 | 
|---|
| 720 | #define THREAD_IMPERSONATE         0x0100 | 
|---|
| 721 | #define THREAD_DIRECT_IMPERSONATION 0x0200 | 
|---|
| 722 | #define THREAD_ALL_ACCESS          (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3ff) | 
|---|
| 723 |  | 
|---|
| 724 | #define THREAD_BASE_PRIORITY_LOWRT  15 | 
|---|
| 725 | #define THREAD_BASE_PRIORITY_MAX    2 | 
|---|
| 726 | #define THREAD_BASE_PRIORITY_MIN   -2 | 
|---|
| 727 | #define THREAD_BASE_PRIORITY_IDLE  -15 | 
|---|
| 728 |  | 
|---|
| 729 | #define FILE_READ_DATA            0x0001    /* file & pipe */ | 
|---|
| 730 | #define FILE_LIST_DIRECTORY       0x0001    /* directory */ | 
|---|
| 731 | #define FILE_WRITE_DATA           0x0002    /* file & pipe */ | 
|---|
| 732 | #define FILE_ADD_FILE             0x0002    /* directory */ | 
|---|
| 733 | #define FILE_APPEND_DATA          0x0004    /* file */ | 
|---|
| 734 | #define FILE_ADD_SUBDIRECTORY     0x0004    /* directory */ | 
|---|
| 735 | #define FILE_CREATE_PIPE_INSTANCE 0x0004    /* named pipe */ | 
|---|
| 736 | #define FILE_READ_EA              0x0008    /* file & directory */ | 
|---|
| 737 | #define FILE_READ_PROPERTIES      FILE_READ_EA | 
|---|
| 738 | #define FILE_WRITE_EA             0x0010    /* file & directory */ | 
|---|
| 739 | #define FILE_WRITE_PROPERTIES     FILE_WRITE_EA | 
|---|
| 740 | #define FILE_EXECUTE              0x0020    /* file */ | 
|---|
| 741 | #define FILE_TRAVERSE             0x0020    /* directory */ | 
|---|
| 742 | #define FILE_DELETE_CHILD         0x0040    /* directory */ | 
|---|
| 743 | #define FILE_READ_ATTRIBUTES      0x0080    /* all */ | 
|---|
| 744 | #define FILE_WRITE_ATTRIBUTES     0x0100    /* all */ | 
|---|
| 745 | #define FILE_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff) | 
|---|
| 746 |  | 
|---|
| 747 | #define FILE_GENERIC_READ         (STANDARD_RIGHTS_READ | FILE_READ_DATA | \ | 
|---|
| 748 | FILE_READ_ATTRIBUTES | FILE_READ_EA | \ | 
|---|
| 749 | SYNCHRONIZE) | 
|---|
| 750 | #define FILE_GENERIC_WRITE        (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \ | 
|---|
| 751 | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \ | 
|---|
| 752 | FILE_APPEND_DATA | SYNCHRONIZE) | 
|---|
| 753 | #define FILE_GENERIC_EXECUTE      (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \ | 
|---|
| 754 | FILE_READ_ATTRIBUTES | SYNCHRONIZE) | 
|---|
| 755 |  | 
|---|
| 756 |  | 
|---|
| 757 | /* File attribute flags | 
|---|
| 758 | */ | 
|---|
| 759 | #define FILE_SHARE_READ                 0x00000001L | 
|---|
| 760 | #define FILE_SHARE_WRITE                0x00000002L | 
|---|
| 761 | #define FILE_SHARE_DELETE               0x00000004L | 
|---|
| 762 | #define FILE_ATTRIBUTE_READONLY         0x00000001L | 
|---|
| 763 | #define FILE_ATTRIBUTE_HIDDEN           0x00000002L | 
|---|
| 764 | #define FILE_ATTRIBUTE_SYSTEM           0x00000004L | 
|---|
| 765 | #define FILE_ATTRIBUTE_LABEL            0x00000008L  /* Not in Windows API */ | 
|---|
| 766 | #define FILE_ATTRIBUTE_DIRECTORY        0x00000010L | 
|---|
| 767 | #define FILE_ATTRIBUTE_ARCHIVE          0x00000020L | 
|---|
| 768 | #define FILE_ATTRIBUTE_NORMAL           0x00000080L | 
|---|
| 769 | #define FILE_ATTRIBUTE_TEMPORARY        0x00000100L | 
|---|
| 770 | #define FILE_ATTRIBUTE_ATOMIC_WRITE     0x00000200L | 
|---|
| 771 | #define FILE_ATTRIBUTE_XACTION_WRITE    0x00000400L | 
|---|
| 772 | #define FILE_ATTRIBUTE_COMPRESSED       0x00000800L | 
|---|
| 773 | #define FILE_ATTRIBUTE_OFFLINE          0x00001000L | 
|---|
| 774 |  | 
|---|
| 775 | /* File alignments (NT) */ | 
|---|
| 776 | #define FILE_BYTE_ALIGNMENT             0x00000000 | 
|---|
| 777 | #define FILE_WORD_ALIGNMENT             0x00000001 | 
|---|
| 778 | #define FILE_LONG_ALIGNMENT             0x00000003 | 
|---|
| 779 | #define FILE_QUAD_ALIGNMENT             0x00000007 | 
|---|
| 780 | #define FILE_OCTA_ALIGNMENT             0x0000000f | 
|---|
| 781 | #define FILE_32_BYTE_ALIGNMENT          0x0000001f | 
|---|
| 782 | #define FILE_64_BYTE_ALIGNMENT          0x0000003f | 
|---|
| 783 | #define FILE_128_BYTE_ALIGNMENT         0x0000007f | 
|---|
| 784 | #define FILE_256_BYTE_ALIGNMENT         0x000000ff | 
|---|
| 785 | #define FILE_512_BYTE_ALIGNMENT         0x000001ff | 
|---|
| 786 |  | 
|---|
| 787 | /* Registry security values */ | 
|---|
| 788 | #define OWNER_SECURITY_INFORMATION  0x00000001 | 
|---|
| 789 | #define GROUP_SECURITY_INFORMATION  0x00000002 | 
|---|
| 790 | #define DACL_SECURITY_INFORMATION   0x00000004 | 
|---|
| 791 | #define SACL_SECURITY_INFORMATION   0x00000008 | 
|---|
| 792 |  | 
|---|
| 793 | #define UNREFERENCED_PARAMETER(P)          (P) | 
|---|
| 794 |  | 
|---|
| 795 | #include "poppack.h" | 
|---|
| 796 |  | 
|---|
| 797 | #endif  /* __WINE_WINNT_H */ | 
|---|