2 * Win32 definitions for Windows NT
4 * Copyright 1996 Alexandre Julliard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26 #include <winapifamily.h>
27 #include <specstrings.h>
36 #if defined(_MSC_VER) && (defined(__arm__) || defined(__aarch64__))
45 #if defined(_NTSYSTEM_) || defined(WINE_UNIX_LIB)
48 #define NTSYSAPI DECLSPEC_IMPORT
51 #define NTAPI __stdcall
52 #define FASTCALL __fastcall
55 # if defined(_MSC_VER)
56 # define DECLSPEC_IMPORT __declspec(dllimport)
57 # elif defined(__MINGW32__) || defined(__CYGWIN__)
58 # define DECLSPEC_IMPORT __attribute__((dllimport))
60 # define DECLSPEC_IMPORT DECLSPEC_HIDDEN
63 # define DECLSPEC_IMPORT
66 #ifndef DECLSPEC_NORETURN
67 # if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS)
68 # define DECLSPEC_NORETURN __declspec(noreturn)
69 # elif defined(__GNUC__)
70 # define DECLSPEC_NORETURN __attribute__((noreturn))
72 # define DECLSPEC_NORETURN
76 #ifndef DECLSPEC_ALIGN
77 # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
78 # define DECLSPEC_ALIGN(x) __declspec(align(x))
79 # elif defined(__GNUC__)
80 # define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
82 # define DECLSPEC_ALIGN(x)
86 #ifndef DECLSPEC_NOTHROW
87 # if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS)
88 # define DECLSPEC_NOTHROW __declspec(nothrow)
89 # elif defined(__GNUC__)
90 # define DECLSPEC_NOTHROW __attribute__((nothrow))
92 # define DECLSPEC_NOTHROW
96 #ifndef DECLSPEC_CACHEALIGN
97 # define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(128)
100 #ifndef DECLSPEC_UUID
101 # if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined (__cplusplus)
102 # define DECLSPEC_UUID(x) __declspec(uuid(x))
104 # define DECLSPEC_UUID(x)
108 #ifndef DECLSPEC_NOVTABLE
109 # if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined(__cplusplus)
110 # define DECLSPEC_NOVTABLE __declspec(novtable)
112 # define DECLSPEC_NOVTABLE
116 #ifndef DECLSPEC_SELECTANY
117 #if defined(_MSC_VER) && (_MSC_VER >= 1100)
118 #define DECLSPEC_SELECTANY __declspec(selectany)
119 #elif defined(__MINGW32__)
120 #define DECLSPEC_SELECTANY __attribute__((selectany))
122 #define DECLSPEC_SELECTANY
127 # if defined(_MSC_VER)
128 # if (_MSC_VER >= 1210)
129 # define NOP_FUNCTION __noop
131 # define NOP_FUNCTION (void)0
134 # define NOP_FUNCTION(...)
138 #ifndef DECLSPEC_ADDRSAFE
139 # if defined(_MSC_VER) && (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
140 # define DECLSPEC_ADDRSAFE __declspec(address_safe)
142 # define DECLSPEC_ADDRSAFE
147 # if defined(_MSC_VER) && (_MSC_VER >= 1200)
148 # define FORCEINLINE __forceinline
149 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
150 # define FORCEINLINE inline __attribute__((always_inline))
152 # define FORCEINLINE inline
156 #ifndef DECLSPEC_DEPRECATED
157 # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
158 # define DECLSPEC_DEPRECATED __declspec(deprecated)
159 # define DEPRECATE_SUPPORTED
160 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
161 # define DECLSPEC_DEPRECATED __attribute__((deprecated))
162 # define DEPRECATE_SUPPORTED
164 # define DECLSPEC_DEPRECATED
165 # undef DEPRECATE_SUPPORTED
169 /* a couple of useful Wine extensions */
172 # define DECLSPEC_EXPORT __declspec(dllexport)
173 #elif defined(__MINGW32__)
174 # define DECLSPEC_EXPORT __attribute__((dllexport))
175 #elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) && !defined(__sun)
176 # define DECLSPEC_EXPORT __attribute__((visibility ("default")))
178 # define DECLSPEC_EXPORT
181 #ifndef DECLSPEC_HIDDEN
182 # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) || defined(__sun)
183 # define DECLSPEC_HIDDEN
184 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
185 # define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
187 # define DECLSPEC_HIDDEN
191 #ifndef __has_attribute
192 # define __has_attribute(x) 0
195 #if ((defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)))) || __has_attribute(ms_hook_prologue)) && (defined(__i386__) || defined(__x86_64__))
196 #define DECLSPEC_HOTPATCH __attribute__((__ms_hook_prologue__))
198 #define DECLSPEC_HOTPATCH
201 #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
202 #define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
204 #define __WINE_ALLOC_SIZE(x)
207 /* Anonymous union/struct handling */
209 #ifndef NONAMELESSSTRUCT
211 /* Anonymous struct support starts with gcc 2.96 or gcc/g++ 3.x */
212 # if (__GNUC__ < 2) || ((__GNUC__ == 2) && (defined(__cplusplus) || (__GNUC_MINOR__ < 96)))
213 # define NONAMELESSSTRUCT
215 # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
216 # define NONAMELESSSTRUCT
218 #endif /* NONAMELESSSTRUCT */
220 #ifndef NONAMELESSUNION
222 /* Anonymous unions support starts with gcc 2.96/g++ 2.95 */
223 # if (__GNUC__ < 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ < 95) || ((__GNUC_MINOR__ == 95) && !defined(__cplusplus))))
224 # define NONAMELESSUNION
226 # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
227 # define NONAMELESSUNION
229 #endif /* NONAMELESSUNION */
231 #undef DUMMYSTRUCTNAME
232 #undef DUMMYSTRUCTNAME1
233 #undef DUMMYSTRUCTNAME2
234 #undef DUMMYSTRUCTNAME3
235 #undef DUMMYSTRUCTNAME4
236 #undef DUMMYSTRUCTNAME5
237 #ifndef NONAMELESSSTRUCT
238 #define DUMMYSTRUCTNAME
239 #define DUMMYSTRUCTNAME1
240 #define DUMMYSTRUCTNAME2
241 #define DUMMYSTRUCTNAME3
242 #define DUMMYSTRUCTNAME4
243 #define DUMMYSTRUCTNAME5
244 #else /* !defined(NONAMELESSSTRUCT) */
245 #define DUMMYSTRUCTNAME s
246 #define DUMMYSTRUCTNAME1 s1
247 #define DUMMYSTRUCTNAME2 s2
248 #define DUMMYSTRUCTNAME3 s3
249 #define DUMMYSTRUCTNAME4 s4
250 #define DUMMYSTRUCTNAME5 s5
251 #endif /* !defined(NONAMELESSSTRUCT) */
253 #undef DUMMYUNIONNAME
254 #undef DUMMYUNIONNAME1
255 #undef DUMMYUNIONNAME2
256 #undef DUMMYUNIONNAME3
257 #undef DUMMYUNIONNAME4
258 #undef DUMMYUNIONNAME5
259 #undef DUMMYUNIONNAME6
260 #undef DUMMYUNIONNAME7
261 #undef DUMMYUNIONNAME8
262 #ifndef NONAMELESSUNION
263 #define DUMMYUNIONNAME
264 #define DUMMYUNIONNAME1
265 #define DUMMYUNIONNAME2
266 #define DUMMYUNIONNAME3
267 #define DUMMYUNIONNAME4
268 #define DUMMYUNIONNAME5
269 #define DUMMYUNIONNAME6
270 #define DUMMYUNIONNAME7
271 #define DUMMYUNIONNAME8
272 #else /* !defined(NONAMELESSUNION) */
273 #define DUMMYUNIONNAME u
274 #define DUMMYUNIONNAME1 u1
275 #define DUMMYUNIONNAME2 u2
276 #define DUMMYUNIONNAME3 u3
277 #define DUMMYUNIONNAME4 u4
278 #define DUMMYUNIONNAME5 u5
279 #define DUMMYUNIONNAME6 u6
280 #define DUMMYUNIONNAME7 u7
281 #define DUMMYUNIONNAME8 u8
282 #endif /* !defined(NONAMELESSUNION) */
284 #undef __C89_NAMELESS
285 #undef __C89_NAMELESSSTRUCTNAME
286 #undef __C89_NAMELESSSTRUCTNAME1
287 #undef __C89_NAMELESSSTRUCTNAME2
288 #undef __C89_NAMELESSSTRUCTNAME3
289 #undef __C89_NAMELESSSTRUCTNAME4
290 #undef __C89_NAMELESSSTRUCTNAME5
291 #undef __C89_NAMELESSUNIONNAME
292 #undef __C89_NAMELESSUNIONNAME1
293 #undef __C89_NAMELESSUNIONNAME2
294 #undef __C89_NAMELESSUNIONNAME3
295 #undef __C89_NAMELESSUNIONNAME4
296 #undef __C89_NAMELESSUNIONNAME5
297 #undef __C89_NAMELESSUNIONNAME6
298 #undef __C89_NAMELESSUNIONNAME7
299 #undef __C89_NAMELESSUNIONNAME8
301 #if !defined(WINE_NO_NAMELESS_EXTENSION)
303 /* Anonymous structs support starts with gcc 2.96/g++ 2.95 */
304 # if (__GNUC__ > 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ > 95) || ((__GNUC_MINOR__ == 95) && defined(__cplusplus))))
305 # define __C89_NAMELESS __extension__
307 # elif defined(_MSC_VER)
308 # define __C89_NAMELESS
312 #ifdef __C89_NAMELESS
313 # define __C89_NAMELESSSTRUCTNAME
314 # define __C89_NAMELESSSTRUCTNAME1
315 # define __C89_NAMELESSSTRUCTNAME2
316 # define __C89_NAMELESSSTRUCTNAME3
317 # define __C89_NAMELESSSTRUCTNAME4
318 # define __C89_NAMELESSSTRUCTNAME5
319 # define __C89_NAMELESSUNIONNAME
320 # define __C89_NAMELESSUNIONNAME1
321 # define __C89_NAMELESSUNIONNAME2
322 # define __C89_NAMELESSUNIONNAME3
323 # define __C89_NAMELESSUNIONNAME4
324 # define __C89_NAMELESSUNIONNAME5
325 # define __C89_NAMELESSUNIONNAME6
326 # define __C89_NAMELESSUNIONNAME7
327 # define __C89_NAMELESSUNIONNAME8
329 # define __C89_NAMELESS
330 # define __C89_NAMELESSSTRUCTNAME DUMMYSTRUCTNAME
331 # define __C89_NAMELESSSTRUCTNAME1 DUMMYSTRUCTNAME1
332 # define __C89_NAMELESSSTRUCTNAME2 DUMMYSTRUCTNAME2
333 # define __C89_NAMELESSSTRUCTNAME3 DUMMYSTRUCTNAME3
334 # define __C89_NAMELESSSTRUCTNAME4 DUMMYSTRUCTNAME4
335 # define __C89_NAMELESSSTRUCTNAME5 DUMMYSTRUCTNAME5
336 # define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME
337 # define __C89_NAMELESSUNIONNAME1 DUMMYUNIONNAME1
338 # define __C89_NAMELESSUNIONNAME2 DUMMYUNIONNAME2
339 # define __C89_NAMELESSUNIONNAME3 DUMMYUNIONNAME3
340 # define __C89_NAMELESSUNIONNAME4 DUMMYUNIONNAME4
341 # define __C89_NAMELESSUNIONNAME5 DUMMYUNIONNAME5
342 # define __C89_NAMELESSUNIONNAME6 DUMMYUNIONNAME6
343 # define __C89_NAMELESSUNIONNAME7 DUMMYUNIONNAME7
344 # define __C89_NAMELESSUNIONNAME8 DUMMYUNIONNAME8
347 /* C99 restrict support */
349 #if defined(ENABLE_RESTRICTED) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
350 # if defined(_MSC_VER) && defined(_M_MRX000)
351 # define RESTRICTED_POINTER __restrict
352 # elif defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95)))
353 # define RESTRICTED_POINTER __restrict
355 # define RESTRICTED_POINTER
358 # define RESTRICTED_POINTER
361 /* C99 unaligned support */
364 #if defined(_MSC_VER) && (defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64))
365 # define UNALIGNED __unaligned
367 # define UNALIGNED64 __unaligned
377 /* Alignment macros */
380 #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
381 #define MEMORY_ALLOCATION_ALIGNMENT 16
383 #define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
384 #define MEMORY_ALLOCATION_ALIGNMENT 8
387 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
388 # define TYPE_ALIGNMENT(t) __alignof(t)
389 #elif defined(__GNUC__)
390 # define TYPE_ALIGNMENT(t) __alignof__(t)
392 # define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
396 # define PROBE_ALIGNMENT(_s) \
397 (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? \
398 TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD))
399 # define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD)
401 # define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
404 /* Compile time assertion */
406 #define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
408 /* Eliminate Microsoft C/C++ compiler warning 4715 */
409 #if defined(_MSC_VER) && (_MSC_VER > 1200)
410 # define DEFAULT_UNREACHABLE default: __assume(0)
411 #elif defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5))))
412 # define DEFAULT_UNREACHABLE default: __builtin_unreachable()
414 # define DEFAULT_UNREACHABLE default:
418 #define APPLICATION_ERROR_MASK 0x20000000
419 #define ERROR_SEVERITY_SUCCESS 0x00000000
420 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
421 #define ERROR_SEVERITY_WARNING 0x80000000
422 #define ERROR_SEVERITY_ERROR 0xC0000000
425 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
427 inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)|((int)b)); } \
428 inline ENUMTYPE operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \
429 inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)&((int)b)); } \
430 inline ENUMTYPE operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \
431 inline ENUMTYPE operator ~ (ENUMTYPE a) { return (ENUMTYPE)(~((int)a)); } \
432 inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)^((int)b)); } \
433 inline ENUMTYPE operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \
436 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */
439 /* Microsoft's macros for declaring functions */
442 # define EXTERN_C extern "C"
444 # define EXTERN_C extern
447 #define STDMETHODCALLTYPE WINAPI
448 #define STDMETHODVCALLTYPE WINAPIV
449 #define STDAPICALLTYPE WINAPI
450 #define STDAPIVCALLTYPE WINAPIV
452 #define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
453 #define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
454 #define STDMETHODIMP HRESULT STDMETHODCALLTYPE
455 #define STDMETHODIMP_(type) type STDMETHODCALLTYPE
456 #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
457 #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
458 #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
459 #define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
461 /* Define the basic types */
466 typedef VOID
*PVOID64
;
467 typedef BYTE BOOLEAN
, *PBOOLEAN
;
468 typedef char CHAR
, *PCHAR
;
469 typedef short SHORT
, *PSHORT
;
470 #if !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES)
471 typedef long LONG
, *PLONG
;
473 typedef int LONG
, *PLONG
;
476 /* Some systems might have wchar_t, but we really need 16 bit characters */
477 #if defined(WINE_UNICODE_NATIVE)
478 typedef wchar_t WCHAR
;
479 #elif __cpp_unicode_literals >= 200710
480 typedef char16_t WCHAR
;
482 typedef unsigned short WCHAR
;
484 typedef WCHAR
*PWCHAR
;
486 typedef ULONG UCSCHAR
;
487 #define MIN_UCSCHAR (0)
488 #define MAX_UCSCHAR (0x0010ffff)
489 #define UCSCHAR_INVALID_CHARACTER (0xffffffff)
491 /* 'Extended/Wide' numerical types */
495 typedef signed __int64 LONGLONG
, *PLONGLONG
;
496 typedef unsigned __int64 ULONGLONG
, *PULONGLONG
;
498 typedef signed __int64
DECLSPEC_ALIGN(8) LONGLONG
, *PLONGLONG
;
499 typedef unsigned __int64
DECLSPEC_ALIGN(8) ULONGLONG
, *PULONGLONG
;
506 typedef ULONGLONG DWORDLONG
, *PDWORDLONG
;
508 typedef ULONGLONG
DECLSPEC_ALIGN(8) DWORDLONG
, *PDWORDLONG
;
512 /* ANSI string types */
513 typedef CHAR
*PCH
, *LPCH
, *PNZCH
;
514 typedef const CHAR
*PCCH
, *LPCCH
, *PCNZCH
;
515 typedef CHAR
*PSTR
, *LPSTR
, *NPSTR
;
516 typedef const CHAR
*PCSTR
, *LPCSTR
;
517 typedef CHAR
*PZZSTR
;
518 typedef const CHAR
*PCZZSTR
;
520 /* Unicode string types */
521 typedef const WCHAR
*PCWCHAR
, *LPCUWCHAR
, *PCUWCHAR
;
522 typedef WCHAR
*PWCH
, *LPWCH
;
523 typedef const WCHAR
*PCWCH
, *LPCWCH
;
524 typedef WCHAR
*PNZWCH
, *PUNZWCH
;
525 typedef const WCHAR
*PCNZWCH
, *PCUNZWCH
;
526 typedef WCHAR
*PWSTR
, *LPWSTR
, *NWPSTR
;
527 typedef const WCHAR
*PCWSTR
, *LPCWSTR
;
528 typedef WCHAR
*PZZWSTR
, *PUZZWSTR
;
529 typedef const WCHAR
*PCZZWSTR
, *PCUZZWSTR
;
530 typedef PWSTR
*PZPWSTR
;
531 typedef PCWSTR
*PZPCWSTR
;
533 /* Neutral character and string types */
534 /* These are only defined for Winelib, i.e. _not_ defined for
535 * the emulator. The reason is they depend on the UNICODE
536 * macro which only exists in the user's code.
538 #ifndef WINE_NO_UNICODE_MACROS
540 # ifndef _TCHAR_DEFINED
541 typedef WCHAR TCHAR
, *PTCHAR
;
542 # define _TCHAR_DEFINED
544 typedef LPWCH PTCH
, LPTCH
;
545 typedef LPCWCH PCTCH
, LPCTCH
;
546 typedef LPWSTR PTSTR
, LPTSTR
;
547 typedef LPCWSTR PCTSTR
, LPCTSTR
;
548 typedef LPWSTR PUTSTR
, LPUTSTR
;
549 typedef LPCWSTR PCUTSTR
, LPCUTSTR
;
550 typedef PNZWCH PNZTCH
;
551 typedef PUNZWCH PUNZTCH
;
552 typedef PCNZWCH PCNZTCH
;
553 typedef PCUNZWCH PCUNZTCH
;
554 typedef PZZWSTR PZZTSTR
;
555 typedef PCZZWSTR PCZZTSTR
;
556 typedef PUZZWSTR PUZZTSTR
;
557 typedef PCUZZWSTR PCUZZTSTR
;
559 # ifndef _TCHAR_DEFINED
560 typedef CHAR TCHAR
, *PTCHAR
;
561 # define _TCHAR_DEFINED
563 typedef LPCH PTCH
, LPTCH
;
564 typedef LPCCH PCTCH
, LPCTCH
;
565 typedef LPSTR PTSTR
, LPTSTR
;
566 typedef LPCSTR PCTSTR
, LPCTSTR
;
567 typedef PNZCH PNZTCH
, PUNZTCH
;
568 typedef PCNZCH PCNZTCH
, PCUNZTCH
;
569 typedef PZZSTR PZZTSTR
, PUZZTSTR
;
570 typedef PCZZSTR PCZZTSTR
, PCUZZTSTR
;
571 # endif /* UNICODE */
572 #endif /* WINE_NO_UNICODE_MACROS */
574 /* UCS string types */
575 typedef UCSCHAR
*PUCSCHAR
, *PUUCSCHAR
;
576 typedef const UCSCHAR
*PCUCSCHAR
, *PCUUCSCHAR
;
577 typedef UCSCHAR
*PUCSSTR
, *PUUCSSTR
;
578 typedef const UCSCHAR
*PCUCSSTR
, *PCUUCSSTR
;
580 /* Misc common WIN32 types */
582 typedef DWORD LCID
, *PLCID
;
584 typedef DWORD EXECUTION_STATE
;
585 #ifndef _HRESULT_DEFINED
586 #define _HRESULT_DEFINED
587 typedef LONG HRESULT
;
592 typedef void *HANDLE
;
593 typedef HANDLE
*PHANDLE
, *LPHANDLE
;
596 #define DECLARE_HANDLE(a) typedef struct a##__ { int unused; } *a
598 #define DECLARE_HANDLE(a) typedef HANDLE a
605 /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
607 #if !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES)
608 # define __MSABI_LONG(x) x ## l
610 # define __MSABI_LONG(x) x
616 #ifndef WIN32_NO_STATUS
618 #define STATUS_WAIT_0 ((DWORD) 0x00000000)
619 #define STATUS_ABANDONED_WAIT_0 ((DWORD) 0x00000080)
620 #define STATUS_USER_APC ((DWORD) 0x000000C0)
621 #define STATUS_TIMEOUT ((DWORD) 0x00000102)
622 #define STATUS_PENDING ((DWORD) 0x00000103)
623 #define STATUS_SEGMENT_NOTIFICATION ((DWORD) 0x40000005)
624 #define STATUS_FATAL_APP_EXIT ((DWORD) 0x40000015)
625 #define STATUS_GUARD_PAGE_VIOLATION ((DWORD) 0x80000001)
626 #define STATUS_DATATYPE_MISALIGNMENT ((DWORD) 0x80000002)
627 #define STATUS_BREAKPOINT ((DWORD) 0x80000003)
628 #define STATUS_SINGLE_STEP ((DWORD) 0x80000004)
629 #define STATUS_LONGJUMP ((DWORD) 0x80000026)
630 #define STATUS_UNWIND_CONSOLIDATE ((DWORD) 0x80000029)
631 #define STATUS_ACCESS_VIOLATION ((DWORD) 0xC0000005)
632 #define STATUS_IN_PAGE_ERROR ((DWORD) 0xC0000006)
633 #define STATUS_INVALID_HANDLE ((DWORD) 0xC0000008)
634 #define STATUS_NO_MEMORY ((DWORD) 0xC0000017)
635 #define STATUS_ILLEGAL_INSTRUCTION ((DWORD) 0xC000001D)
636 #define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD) 0xC0000025)
637 #define STATUS_INVALID_DISPOSITION ((DWORD) 0xC0000026)
638 #define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD) 0xC000008C)
639 #define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD) 0xC000008D)
640 #define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD) 0xC000008E)
641 #define STATUS_FLOAT_INEXACT_RESULT ((DWORD) 0xC000008F)
642 #define STATUS_FLOAT_INVALID_OPERATION ((DWORD) 0xC0000090)
643 #define STATUS_FLOAT_OVERFLOW ((DWORD) 0xC0000091)
644 #define STATUS_FLOAT_STACK_CHECK ((DWORD) 0xC0000092)
645 #define STATUS_FLOAT_UNDERFLOW ((DWORD) 0xC0000093)
646 #define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD) 0xC0000094)
647 #define STATUS_INTEGER_OVERFLOW ((DWORD) 0xC0000095)
648 #define STATUS_PRIVILEGED_INSTRUCTION ((DWORD) 0xC0000096)
649 #define STATUS_STACK_OVERFLOW ((DWORD) 0xC00000FD)
650 #define STATUS_DLL_NOT_FOUND ((DWORD) 0xC0000135)
651 #define STATUS_ORDINAL_NOT_FOUND ((DWORD) 0xC0000138)
652 #define STATUS_ENTRYPOINT_NOT_FOUND ((DWORD) 0xC0000139)
653 #define STATUS_CONTROL_C_EXIT ((DWORD) 0xC000013A)
654 #define STATUS_DLL_INIT_FAILED ((DWORD) 0xC0000142)
655 #define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD) 0xC00002B4)
656 #define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD) 0xC00002B5)
657 #define STATUS_REG_NAT_CONSUMPTION ((DWORD) 0xC00002C9)
658 #define STATUS_HEAP_CORRUPTION ((DWORD) 0xC0000374)
659 #define STATUS_STACK_BUFFER_OVERRUN ((DWORD) 0xC0000409)
660 #define STATUS_INVALID_CRUNTIME_PARAMETER ((DWORD) 0xC0000417)
661 #define STATUS_ASSERTION_FAILURE ((DWORD) 0xC0000420)
662 #define STATUS_SXS_EARLY_DEACTIVATION ((DWORD) 0xC015000F)
663 #define STATUS_SXS_INVALID_DEACTIVATION ((DWORD) 0xC0150010)
665 /* status values for ContinueDebugEvent */
666 #define DBG_EXCEPTION_HANDLED ((DWORD) 0x00010001)
667 #define DBG_CONTINUE ((DWORD) 0x00010002)
668 #define DBG_REPLY_LATER ((DWORD) 0x40010001)
669 #define DBG_TERMINATE_THREAD ((DWORD) 0x40010003)
670 #define DBG_TERMINATE_PROCESS ((DWORD) 0x40010004)
671 #define DBG_CONTROL_C ((DWORD) 0x40010005)
672 #define DBG_PRINTEXCEPTION_C ((DWORD) 0x40010006)
673 #define DBG_RIPEXCEPTION ((DWORD) 0x40010007)
674 #define DBG_CONTROL_BREAK ((DWORD) 0x40010008)
675 #define DBG_COMMAND_EXCEPTION ((DWORD) 0x40010009)
676 #define DBG_PRINTEXCEPTION_WIDE_C ((DWORD) 0x4001000A)
677 #define DBG_EXCEPTION_NOT_HANDLED ((DWORD) 0x80010001)
679 #endif /* WIN32_NO_STATUS */
681 /* Argument 1 passed to the DllEntryProc. */
682 #define DLL_PROCESS_DETACH 0 /* detach process (unload library) */
683 #define DLL_PROCESS_ATTACH 1 /* attach process (load library) */
684 #define DLL_THREAD_ATTACH 2 /* attach new thread */
685 #define DLL_THREAD_DETACH 3 /* detach thread */
687 /* u.x.wProcessorArchitecture (NT) */
688 #define PROCESSOR_ARCHITECTURE_INTEL 0
689 #define PROCESSOR_ARCHITECTURE_MIPS 1
690 #define PROCESSOR_ARCHITECTURE_ALPHA 2
691 #define PROCESSOR_ARCHITECTURE_PPC 3
692 #define PROCESSOR_ARCHITECTURE_SHX 4
693 #define PROCESSOR_ARCHITECTURE_ARM 5
694 #define PROCESSOR_ARCHITECTURE_IA64 6
695 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
696 #define PROCESSOR_ARCHITECTURE_MSIL 8
697 #define PROCESSOR_ARCHITECTURE_AMD64 9
698 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
699 #define PROCESSOR_ARCHITECTURE_NEUTRAL 11
700 #define PROCESSOR_ARCHITECTURE_ARM64 12
701 #define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 13
702 #define PROCESSOR_ARCHITECTURE_IA32_ON_ARM64 14
703 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
705 /* dwProcessorType */
706 #define PROCESSOR_INTEL_386 386
707 #define PROCESSOR_INTEL_486 486
708 #define PROCESSOR_INTEL_PENTIUM 586
709 #define PROCESSOR_INTEL_860 860
710 #define PROCESSOR_INTEL_IA64 2200
711 #define PROCESSOR_AMD_X8664 8664
712 #define PROCESSOR_MIPS_R2000 2000
713 #define PROCESSOR_MIPS_R3000 3000
714 #define PROCESSOR_MIPS_R4000 4000
715 #define PROCESSOR_ALPHA_21064 21064
716 #define PROCESSOR_PPC_601 601
717 #define PROCESSOR_PPC_603 603
718 #define PROCESSOR_PPC_604 604
719 #define PROCESSOR_PPC_620 620
720 #define PROCESSOR_HITACHI_SH3 10003
721 #define PROCESSOR_HITACHI_SH3E 10004
722 #define PROCESSOR_HITACHI_SH4 10005
723 #define PROCESSOR_MOTOROLA_821 821
724 #define PROCESSOR_SHx_SH3 103
725 #define PROCESSOR_SHx_SH4 104
726 #define PROCESSOR_STRONGARM 2577
727 #define PROCESSOR_ARM720 1824 /* 0x720 */
728 #define PROCESSOR_ARM820 2080 /* 0x820 */
729 #define PROCESSOR_ARM920 2336 /* 0x920 */
730 #define PROCESSOR_ARM_7TDMI 70001
731 #define PROCESSOR_OPTIL 18767
734 #define MAXIMUM_PROCESSORS 64
736 #define MAXIMUM_PROCESSORS 32
739 typedef struct _MEMORY_BASIC_INFORMATION
742 LPVOID AllocationBase
;
743 DWORD AllocationProtect
;
748 } MEMORY_BASIC_INFORMATION
, *PMEMORY_BASIC_INFORMATION
;
750 #define MEM_EXTENDED_PARAMETER_TYPE_BITS 8
752 typedef enum MEM_EXTENDED_PARAMETER_TYPE
{
753 MemExtendedParameterInvalidType
= 0,
754 MemExtendedParameterAddressRequirements
,
755 MemExtendedParameterNumaNode
,
756 MemExtendedParameterPartitionHandle
,
757 MemExtendedParameterUserPhysicalHandle
,
758 MemExtendedParameterAttributeFlags
,
759 MemExtendedParameterMax
760 } MEM_EXTENDED_PARAMETER_TYPE
, *PMEM_EXTENDED_PARAMETER_TYPE
;
762 typedef struct DECLSPEC_ALIGN(8) MEM_EXTENDED_PARAMETER
{
765 DWORD64 Type
: MEM_EXTENDED_PARAMETER_TYPE_BITS
;
766 DWORD64 Reserved
: 64 - MEM_EXTENDED_PARAMETER_TYPE_BITS
;
777 } MEM_EXTENDED_PARAMETER
, *PMEM_EXTENDED_PARAMETER
;
779 typedef struct _WIN32_MEMORY_RANGE_ENTRY
781 PVOID VirtualAddress
;
782 SIZE_T NumberOfBytes
;
783 } WIN32_MEMORY_RANGE_ENTRY
, *PWIN32_MEMORY_RANGE_ENTRY
;
785 #define PAGE_NOACCESS 0x01
786 #define PAGE_READONLY 0x02
787 #define PAGE_READWRITE 0x04
788 #define PAGE_WRITECOPY 0x08
789 #define PAGE_EXECUTE 0x10
790 #define PAGE_EXECUTE_READ 0x20
791 #define PAGE_EXECUTE_READWRITE 0x40
792 #define PAGE_EXECUTE_WRITECOPY 0x80
793 #define PAGE_GUARD 0x100
794 #define PAGE_NOCACHE 0x200
795 #define PAGE_WRITECOMBINE 0x400
797 #define MEM_COMMIT 0x00001000
798 #define MEM_RESERVE 0x00002000
799 #define MEM_DECOMMIT 0x00004000
800 #define MEM_RELEASE 0x00008000
801 #define MEM_FREE 0x00010000
802 #define MEM_PRIVATE 0x00020000
803 #define MEM_MAPPED 0x00040000
804 #define MEM_RESET 0x00080000
805 #define MEM_TOP_DOWN 0x00100000
806 #define MEM_WRITE_WATCH 0x00200000
807 #define MEM_PHYSICAL 0x00400000
808 #define MEM_LARGE_PAGES 0x20000000
809 #define MEM_4MB_PAGES 0x80000000
811 #define SEC_FILE 0x00800000
812 #define SEC_IMAGE 0x01000000
813 #define SEC_PROTECTED_IMAGE 0x02000000
814 #define SEC_RESERVE 0x04000000
815 #define SEC_COMMIT 0x08000000
816 #define SEC_NOCACHE 0x10000000
817 #define SEC_WRITECOMBINE 0x40000000
818 #define SEC_LARGE_PAGES 0x80000000
819 #define SEC_IMAGE_NO_EXECUTE (SEC_IMAGE | SEC_NOCACHE)
820 #define MEM_IMAGE SEC_IMAGE
822 #define WRITE_WATCH_FLAG_RESET 0x00000001
824 #define AT_ROUND_TO_PAGE 0x40000000
828 #define MINSHORT 0x8000
829 #define MAXSHORT 0x7fff
830 #define MINLONG 0x80000000
831 #define MAXLONG 0x7fffffff
833 #define MAXWORD 0xffff
834 #define MAXDWORD 0xffffffff
835 #define MAXLONGLONG (((LONGLONG)0x7fffffff << 32) | 0xffffffff)
837 #define UNICODE_STRING_MAX_CHARS 32767
839 #define FIELD_OFFSET(type, field) ((LONG)offsetof(type, field))
840 #define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
841 #define RTL_SIZEOF_THROUGH_FIELD(type, field) (FIELD_OFFSET(type, field) + RTL_FIELD_SIZE(type, field))
843 #define CONTAINING_RECORD(address, type, field) \
844 ((type *)((PCHAR)(address) - offsetof(type, field)))
846 #define ARRAYSIZE(x) (sizeof(x) / sizeof((x)[0]))
848 # define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
853 typedef struct _LIST_ENTRY
{
854 struct _LIST_ENTRY
*Flink
;
855 struct _LIST_ENTRY
*Blink
;
856 } LIST_ENTRY
, *PLIST_ENTRY
, * RESTRICTED_POINTER PRLIST_ENTRY
;
858 typedef struct _SINGLE_LIST_ENTRY
{
859 struct _SINGLE_LIST_ENTRY
*Next
;
860 } SINGLE_LIST_ENTRY
, *PSINGLE_LIST_ENTRY
;
864 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
{
865 struct _SLIST_ENTRY
*Next
;
866 } SLIST_ENTRY
, *PSLIST_ENTRY
;
868 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER
{
875 ULONGLONG Sequence
:9;
876 ULONGLONG NextEntry
:39;
877 ULONGLONG HeaderType
:1;
879 ULONGLONG Reserved
:59;
884 ULONGLONG Sequence
:48;
885 ULONGLONG HeaderType
:1;
887 ULONGLONG Reserved
:2;
888 ULONGLONG NextEntry
:60;
890 } SLIST_HEADER
, *PSLIST_HEADER
;
894 #undef SLIST_ENTRY /* for Mac OS */
895 #define SLIST_ENTRY SINGLE_LIST_ENTRY
896 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
897 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
899 typedef union _SLIST_HEADER
{
906 } SLIST_HEADER
, *PSLIST_HEADER
;
910 NTSYSAPI PSLIST_ENTRY WINAPI
RtlFirstEntrySList(const SLIST_HEADER
*);
911 NTSYSAPI VOID WINAPI
RtlInitializeSListHead(PSLIST_HEADER
);
912 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedFlushSList(PSLIST_HEADER
);
913 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedPopEntrySList(PSLIST_HEADER
);
914 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedPushEntrySList(PSLIST_HEADER
, PSLIST_ENTRY
);
915 NTSYSAPI WORD WINAPI
RtlQueryDepthSList(PSLIST_HEADER
);
920 #define HEAP_NO_SERIALIZE 0x00000001
921 #define HEAP_GROWABLE 0x00000002
922 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
923 #define HEAP_ZERO_MEMORY 0x00000008
924 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
925 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
926 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
927 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
928 #define HEAP_CREATE_ALIGN_16 0x00010000
929 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
930 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
932 /* This flag allows it to create heaps shared by all processes under win95,
933 FIXME: correct name */
934 #define HEAP_SHARED 0x04000000
936 typedef enum _HEAP_INFORMATION_CLASS
{
937 HeapCompatibilityInformation
,
938 } HEAP_INFORMATION_CLASS
;
940 /* Processor feature flags. */
941 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
942 #define PF_FLOATING_POINT_EMULATED 1
943 #define PF_COMPARE_EXCHANGE_DOUBLE 2
944 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
945 #define PF_PPC_MOVEMEM_64BIT_OK 4
946 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
947 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
948 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
949 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
950 #define PF_PAE_ENABLED 9
951 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
952 #define PF_SSE_DAZ_MODE_AVAILABLE 11
953 #define PF_NX_ENABLED 12
954 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
955 #define PF_COMPARE_EXCHANGE128 14
956 #define PF_COMPARE64_EXCHANGE128 15
957 #define PF_CHANNELS_ENABLED 16
958 #define PF_XSAVE_ENABLED 17
959 #define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
960 #define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
961 #define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
962 #define PF_VIRT_FIRMWARE_ENABLED 21
963 #define PF_RDWRFSGSBASE_AVAILABLE 22
964 #define PF_FASTFAIL_AVAILABLE 23
965 #define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
966 #define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
967 #define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
968 #define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
969 #define PF_RDRAND_INSTRUCTION_AVAILABLE 28
970 #define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
971 #define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
972 #define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
973 #define PF_RDTSCP_INSTRUCTION_AVAILABLE 32
974 #define PF_RDPID_INSTRUCTION_AVAILABLE 33
975 #define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34
976 #define PF_MONITORX_INSTRUCTION_AVAILABLE 35
977 #define PF_SSSE3_INSTRUCTIONS_AVAILABLE 36
978 #define PF_SSE4_1_INSTRUCTIONS_AVAILABLE 37
979 #define PF_SSE4_2_INSTRUCTIONS_AVAILABLE 38
980 #define PF_AVX_INSTRUCTIONS_AVAILABLE 39
981 #define PF_AVX2_INSTRUCTIONS_AVAILABLE 40
982 #define PF_AVX512F_INSTRUCTIONS_AVAILABLE 41
985 /* Execution state flags */
986 #define ES_SYSTEM_REQUIRED 0x00000001
987 #define ES_DISPLAY_REQUIRED 0x00000002
988 #define ES_USER_PRESENT 0x00000004
989 #define ES_CONTINUOUS 0x80000000
993 /* The Win32 register context */
995 /* i386 context definitions */
997 #define I386_SIZE_OF_80387_REGISTERS 80
999 typedef struct _I386_FLOATING_SAVE_AREA
1005 DWORD ErrorSelector
;
1008 BYTE RegisterArea
[I386_SIZE_OF_80387_REGISTERS
];
1010 } I386_FLOATING_SAVE_AREA
, WOW64_FLOATING_SAVE_AREA
, *PWOW64_FLOATING_SAVE_AREA
;
1012 #define I386_MAXIMUM_SUPPORTED_EXTENSION 512
1014 #include "pshpack4.h"
1015 typedef struct _I386_CONTEXT
1017 DWORD ContextFlags
; /* 000 */
1019 /* These are selected by CONTEXT_DEBUG_REGISTERS */
1020 DWORD Dr0
; /* 004 */
1021 DWORD Dr1
; /* 008 */
1022 DWORD Dr2
; /* 00c */
1023 DWORD Dr3
; /* 010 */
1024 DWORD Dr6
; /* 014 */
1025 DWORD Dr7
; /* 018 */
1027 /* These are selected by CONTEXT_FLOATING_POINT */
1028 I386_FLOATING_SAVE_AREA FloatSave
; /* 01c */
1030 /* These are selected by CONTEXT_SEGMENTS */
1031 DWORD SegGs
; /* 08c */
1032 DWORD SegFs
; /* 090 */
1033 DWORD SegEs
; /* 094 */
1034 DWORD SegDs
; /* 098 */
1036 /* These are selected by CONTEXT_INTEGER */
1037 DWORD Edi
; /* 09c */
1038 DWORD Esi
; /* 0a0 */
1039 DWORD Ebx
; /* 0a4 */
1040 DWORD Edx
; /* 0a8 */
1041 DWORD Ecx
; /* 0ac */
1042 DWORD Eax
; /* 0b0 */
1044 /* These are selected by CONTEXT_CONTROL */
1045 DWORD Ebp
; /* 0b4 */
1046 DWORD Eip
; /* 0b8 */
1047 DWORD SegCs
; /* 0bc */
1048 DWORD EFlags
; /* 0c0 */
1049 DWORD Esp
; /* 0c4 */
1050 DWORD SegSs
; /* 0c8 */
1052 BYTE ExtendedRegisters
[I386_MAXIMUM_SUPPORTED_EXTENSION
]; /* 0xcc */
1053 } I386_CONTEXT
, WOW64_CONTEXT
, *PWOW64_CONTEXT
;
1054 #include "poppack.h"
1056 #define CONTEXT_i386 0x00010000
1057 #define CONTEXT_i486 0x00010000
1059 #define CONTEXT_I386_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
1060 #define CONTEXT_I386_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
1061 #define CONTEXT_I386_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
1062 #define CONTEXT_I386_FLOATING_POINT (CONTEXT_i386 | 0x0008) /* 387 state */
1063 #define CONTEXT_I386_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010) /* DB 0-3,6,7 */
1064 #define CONTEXT_I386_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020)
1065 #define CONTEXT_I386_XSTATE (CONTEXT_i386 | 0x0040)
1066 #define CONTEXT_I386_FULL (CONTEXT_I386_CONTROL | CONTEXT_I386_INTEGER | CONTEXT_I386_SEGMENTS)
1067 #define CONTEXT_I386_ALL (CONTEXT_I386_FULL | CONTEXT_I386_FLOATING_POINT | CONTEXT_I386_DEBUG_REGISTERS | CONTEXT_I386_EXTENDED_REGISTERS)
1071 #define CONTEXT_CONTROL CONTEXT_I386_CONTROL
1072 #define CONTEXT_INTEGER CONTEXT_I386_INTEGER
1073 #define CONTEXT_SEGMENTS CONTEXT_I386_SEGMENTS
1074 #define CONTEXT_FLOATING_POINT CONTEXT_I386_FLOATING_POINT
1075 #define CONTEXT_DEBUG_REGISTERS CONTEXT_I386_DEBUG_REGISTERS
1076 #define CONTEXT_EXTENDED_REGISTERS CONTEXT_I386_EXTENDED_REGISTERS
1077 #define CONTEXT_XSTATE CONTEXT_I386_XSTATE
1078 #define CONTEXT_FULL CONTEXT_I386_FULL
1079 #define CONTEXT_ALL CONTEXT_I386_ALL
1080 #define SIZE_OF_80387_REGISTERS I386_SIZE_OF_80387_REGISTERS
1081 #define MAXIMUM_SUPPORTED_EXTENSION I386_MAXIMUM_SUPPORTED_EXTENSION
1083 typedef I386_FLOATING_SAVE_AREA FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1084 typedef I386_CONTEXT CONTEXT
, *PCONTEXT
;
1086 #endif /* __i386__ */
1088 typedef struct _LDT_ENTRY
{
1099 unsigned BaseMid
: 8;
1103 unsigned LimitHi
: 4;
1105 unsigned Reserved_0
: 1;
1106 unsigned Default_Big
: 1;
1107 unsigned Granularity
: 1;
1108 unsigned BaseHi
: 8;
1111 } LDT_ENTRY
, *PLDT_ENTRY
, WOW64_LDT_ENTRY
, *PWOW64_LDT_ENTRY
;
1113 typedef struct DECLSPEC_ALIGN(16) _M128A
{
1118 typedef struct _XSAVE_FORMAT
{
1119 WORD ControlWord
; /* 000 */
1120 WORD StatusWord
; /* 002 */
1121 BYTE TagWord
; /* 004 */
1122 BYTE Reserved1
; /* 005 */
1123 WORD ErrorOpcode
; /* 006 */
1124 DWORD ErrorOffset
; /* 008 */
1125 WORD ErrorSelector
; /* 00c */
1126 WORD Reserved2
; /* 00e */
1127 DWORD DataOffset
; /* 010 */
1128 WORD DataSelector
; /* 014 */
1129 WORD Reserved3
; /* 016 */
1130 DWORD MxCsr
; /* 018 */
1131 DWORD MxCsr_Mask
; /* 01c */
1132 M128A FloatRegisters
[8]; /* 020 */
1133 M128A XmmRegisters
[16]; /* 0a0 */
1134 BYTE Reserved4
[96]; /* 1a0 */
1135 } XSAVE_FORMAT
, *PXSAVE_FORMAT
;
1137 /* x86-64 context definitions */
1139 typedef struct _AMD64_RUNTIME_FUNCTION
1144 } AMD64_RUNTIME_FUNCTION
;
1146 #define CONTEXT_AMD64 0x00100000
1148 #define CONTEXT_AMD64_CONTROL (CONTEXT_AMD64 | 0x0001)
1149 #define CONTEXT_AMD64_INTEGER (CONTEXT_AMD64 | 0x0002)
1150 #define CONTEXT_AMD64_SEGMENTS (CONTEXT_AMD64 | 0x0004)
1151 #define CONTEXT_AMD64_FLOATING_POINT (CONTEXT_AMD64 | 0x0008)
1152 #define CONTEXT_AMD64_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010)
1153 #define CONTEXT_AMD64_XSTATE (CONTEXT_AMD64 | 0x0040)
1154 #define CONTEXT_AMD64_FULL (CONTEXT_AMD64_CONTROL | CONTEXT_AMD64_INTEGER | CONTEXT_AMD64_FLOATING_POINT)
1155 #define CONTEXT_AMD64_ALL (CONTEXT_AMD64_CONTROL | CONTEXT_AMD64_INTEGER | CONTEXT_AMD64_SEGMENTS | CONTEXT_AMD64_FLOATING_POINT | CONTEXT_AMD64_DEBUG_REGISTERS)
1157 typedef XSAVE_FORMAT XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
1159 typedef struct DECLSPEC_ALIGN(16) _AMD64_CONTEXT
{
1160 DWORD64 P1Home
; /* 000 */
1161 DWORD64 P2Home
; /* 008 */
1162 DWORD64 P3Home
; /* 010 */
1163 DWORD64 P4Home
; /* 018 */
1164 DWORD64 P5Home
; /* 020 */
1165 DWORD64 P6Home
; /* 028 */
1168 DWORD ContextFlags
; /* 030 */
1169 DWORD MxCsr
; /* 034 */
1172 WORD SegCs
; /* 038 */
1173 WORD SegDs
; /* 03a */
1174 WORD SegEs
; /* 03c */
1175 WORD SegFs
; /* 03e */
1176 WORD SegGs
; /* 040 */
1177 WORD SegSs
; /* 042 */
1178 DWORD EFlags
; /* 044 */
1181 DWORD64 Dr0
; /* 048 */
1182 DWORD64 Dr1
; /* 050 */
1183 DWORD64 Dr2
; /* 058 */
1184 DWORD64 Dr3
; /* 060 */
1185 DWORD64 Dr6
; /* 068 */
1186 DWORD64 Dr7
; /* 070 */
1189 DWORD64 Rax
; /* 078 */
1190 DWORD64 Rcx
; /* 080 */
1191 DWORD64 Rdx
; /* 088 */
1192 DWORD64 Rbx
; /* 090 */
1193 DWORD64 Rsp
; /* 098 */
1194 DWORD64 Rbp
; /* 0a0 */
1195 DWORD64 Rsi
; /* 0a8 */
1196 DWORD64 Rdi
; /* 0b0 */
1197 DWORD64 R8
; /* 0b8 */
1198 DWORD64 R9
; /* 0c0 */
1199 DWORD64 R10
; /* 0c8 */
1200 DWORD64 R11
; /* 0d0 */
1201 DWORD64 R12
; /* 0d8 */
1202 DWORD64 R13
; /* 0e0 */
1203 DWORD64 R14
; /* 0e8 */
1204 DWORD64 R15
; /* 0f0 */
1207 DWORD64 Rip
; /* 0f8 */
1209 /* Floating point */
1211 XMM_SAVE_AREA32 FltSave
; /* 100 */
1213 M128A Header
[2]; /* 100 */
1214 M128A Legacy
[8]; /* 120 */
1215 M128A Xmm0
; /* 1a0 */
1216 M128A Xmm1
; /* 1b0 */
1217 M128A Xmm2
; /* 1c0 */
1218 M128A Xmm3
; /* 1d0 */
1219 M128A Xmm4
; /* 1e0 */
1220 M128A Xmm5
; /* 1f0 */
1221 M128A Xmm6
; /* 200 */
1222 M128A Xmm7
; /* 210 */
1223 M128A Xmm8
; /* 220 */
1224 M128A Xmm9
; /* 230 */
1225 M128A Xmm10
; /* 240 */
1226 M128A Xmm11
; /* 250 */
1227 M128A Xmm12
; /* 260 */
1228 M128A Xmm13
; /* 270 */
1229 M128A Xmm14
; /* 280 */
1230 M128A Xmm15
; /* 290 */
1235 M128A VectorRegister
[26]; /* 300 */
1236 DWORD64 VectorControl
; /* 4a0 */
1239 DWORD64 DebugControl
; /* 4a8 */
1240 DWORD64 LastBranchToRip
; /* 4b0 */
1241 DWORD64 LastBranchFromRip
; /* 4b8 */
1242 DWORD64 LastExceptionToRip
; /* 4c0 */
1243 DWORD64 LastExceptionFromRip
; /* 4c8 */
1248 #define CONTEXT_CONTROL CONTEXT_AMD64_CONTROL
1249 #define CONTEXT_INTEGER CONTEXT_AMD64_INTEGER
1250 #define CONTEXT_SEGMENTS CONTEXT_AMD64_SEGMENTS
1251 #define CONTEXT_FLOATING_POINT CONTEXT_AMD64_FLOATING_POINT
1252 #define CONTEXT_DEBUG_REGISTERS CONTEXT_AMD64_DEBUG_REGISTERS
1253 #define CONTEXT_XSTATE CONTEXT_AMD64_XSTATE
1254 #define CONTEXT_FULL CONTEXT_AMD64_FULL
1255 #define CONTEXT_ALL CONTEXT_AMD64_ALL
1257 typedef AMD64_CONTEXT CONTEXT
, *PCONTEXT
;
1258 typedef AMD64_RUNTIME_FUNCTION RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1260 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
1264 PM128A FloatingContext
[16];
1288 PULONG64 IntegerContext
[16];
1309 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1311 #endif /* __x86_64__ */
1313 #define XSTATE_LEGACY_FLOATING_POINT 0
1314 #define XSTATE_LEGACY_SSE 1
1315 #define XSTATE_GSSE 2
1316 #define XSTATE_AVX XSTATE_GSSE
1317 #define XSTATE_MPX_BNDREGS 3
1318 #define XSTATE_MPX_BNDCSR 4
1319 #define XSTATE_AVX512_KMASK 5
1320 #define XSTATE_AVX512_ZMM_H 6
1321 #define XSTATE_AVX512_ZMM 7
1322 #define XSTATE_IPT 8
1323 #define XSTATE_CET_U 11
1324 #define XSTATE_LWP 62
1325 #define MAXIMUM_XSTATE_FEATURES 64
1327 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1 << XSTATE_LEGACY_FLOATING_POINT)
1328 #define XSTATE_MASK_LEGACY_SSE (1 << XSTATE_LEGACY_SSE)
1329 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1330 #define XSTATE_MASK_GSSE (1 << XSTATE_GSSE)
1332 typedef struct _XSTATE_FEATURE
1336 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1338 typedef struct _XSTATE_CONFIGURATION
1340 ULONG64 EnabledFeatures
;
1341 ULONG64 EnabledVolatileFeatures
;
1343 ULONG OptimizedSave
:1;
1344 ULONG CompactionEnabled
:1;
1345 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1347 ULONG64 EnabledSupervisorFeatures
;
1348 ULONG64 AlignedFeatures
;
1349 ULONG AllFeatureSize
;
1350 ULONG AllFeatures
[MAXIMUM_XSTATE_FEATURES
];
1351 ULONG64 EnabledUserVisibleSupervisorFeatures
;
1352 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1354 typedef struct _YMMCONTEXT
1373 YMMCONTEXT
, *PYMMCONTEXT
;
1375 typedef struct _XSTATE
1378 ULONG64 CompactionMask
;
1379 ULONG64 Reserved
[6];
1380 YMMCONTEXT YmmContext
;
1383 typedef struct _CONTEXT_CHUNK
1387 } CONTEXT_CHUNK
, *PCONTEXT_CHUNK
;
1389 typedef struct _CONTEXT_EX
1392 CONTEXT_CHUNK Legacy
;
1393 CONTEXT_CHUNK XState
;
1397 } CONTEXT_EX
, *PCONTEXT_EX
;
1399 #define CONTEXT_ARM 0x0200000
1400 #define CONTEXT_ARM_CONTROL (CONTEXT_ARM | 0x00000001)
1401 #define CONTEXT_ARM_INTEGER (CONTEXT_ARM | 0x00000002)
1402 #define CONTEXT_ARM_FLOATING_POINT (CONTEXT_ARM | 0x00000004)
1403 #define CONTEXT_ARM_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
1404 #define CONTEXT_ARM_FULL (CONTEXT_ARM_CONTROL | CONTEXT_ARM_INTEGER)
1405 #define CONTEXT_ARM_ALL (CONTEXT_ARM_FULL | CONTEXT_ARM_FLOATING_POINT | CONTEXT_ARM_DEBUG_REGISTERS)
1407 #define ARM_MAX_BREAKPOINTS 8
1408 #define ARM_MAX_WATCHPOINTS 1
1410 typedef struct _IMAGE_ARM_RUNTIME_FUNCTION
1417 DWORD FunctionLength
: 11;
1424 DWORD StackAdjust
: 10;
1427 } IMAGE_ARM_RUNTIME_FUNCTION_ENTRY
, *PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY
;
1429 typedef struct _ARM_NEON128
1435 typedef struct _ARM_CONTEXT
1437 ULONG ContextFlags
; /* 000 */
1438 /* CONTEXT_INTEGER */
1449 ULONG R10
; /* 02c */
1450 ULONG R11
; /* 030 */
1451 ULONG R12
; /* 034 */
1452 /* CONTEXT_CONTROL */
1456 ULONG Cpsr
; /* 044 */
1457 /* CONTEXT_FLOATING_POINT */
1458 ULONG Fpscr
; /* 048 */
1459 ULONG Padding
; /* 04c */
1465 } DUMMYUNIONNAME
; /* 050 */
1466 /* CONTEXT_DEBUG_REGISTERS */
1467 ULONG Bvr
[ARM_MAX_BREAKPOINTS
]; /* 150 */
1468 ULONG Bcr
[ARM_MAX_BREAKPOINTS
]; /* 170 */
1469 ULONG Wvr
[ARM_MAX_WATCHPOINTS
]; /* 190 */
1470 ULONG Wcr
[ARM_MAX_WATCHPOINTS
]; /* 194 */
1471 ULONG Padding2
[2]; /* 198 */
1476 #define CONTEXT_CONTROL CONTEXT_ARM_CONTROL
1477 #define CONTEXT_INTEGER CONTEXT_ARM_INTEGER
1478 #define CONTEXT_FLOATING_POINT CONTEXT_ARM_FLOATING_POINT
1479 #define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM_DEBUG_REGISTERS
1480 #define CONTEXT_FULL CONTEXT_ARM_FULL
1481 #define CONTEXT_ALL CONTEXT_ARM_ALL
1483 typedef IMAGE_ARM_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1484 typedef ARM_NEON128 NEON128
, *PNEON128
;
1485 typedef ARM_CONTEXT CONTEXT
, *PCONTEXT
;
1487 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
1506 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1508 #endif /* __arm__ */
1510 #define CONTEXT_ARM64 0x400000
1511 #define CONTEXT_ARM64_CONTROL (CONTEXT_ARM64 | 0x00000001)
1512 #define CONTEXT_ARM64_INTEGER (CONTEXT_ARM64 | 0x00000002)
1513 #define CONTEXT_ARM64_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004)
1514 #define CONTEXT_ARM64_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
1515 #define CONTEXT_ARM64_X18 (CONTEXT_ARM64 | 0x00000010)
1516 #define CONTEXT_ARM64_FULL (CONTEXT_ARM64_CONTROL | CONTEXT_ARM64_INTEGER | CONTEXT_ARM64_FLOATING_POINT)
1517 #define CONTEXT_ARM64_ALL (CONTEXT_ARM64_FULL | CONTEXT_ARM64_DEBUG_REGISTERS | CONTEXT_ARM64_X18)
1519 #define CONTEXT_UNWOUND_TO_CALL 0x20000000
1521 #define ARM64_MAX_BREAKPOINTS 8
1522 #define ARM64_MAX_WATCHPOINTS 2
1524 typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
1533 DWORD FunctionLength
: 11;
1538 DWORD FrameSize
: 9;
1541 } IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
, *PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
;
1543 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY ARM64_RUNTIME_FUNCTION
, *PARM64_RUNTIME_FUNCTION
;
1545 typedef union _ARM64_NT_NEON128
1556 } ARM64_NT_NEON128
, *PARM64_NT_NEON128
;
1558 typedef struct DECLSPEC_ALIGN(16) _ARM64_NT_CONTEXT
1560 ULONG ContextFlags
; /* 000 */
1561 /* CONTEXT_INTEGER */
1562 ULONG Cpsr
; /* 004 */
1567 DWORD64 X0
; /* 008 */
1568 DWORD64 X1
; /* 010 */
1569 DWORD64 X2
; /* 018 */
1570 DWORD64 X3
; /* 020 */
1571 DWORD64 X4
; /* 028 */
1572 DWORD64 X5
; /* 030 */
1573 DWORD64 X6
; /* 038 */
1574 DWORD64 X7
; /* 040 */
1575 DWORD64 X8
; /* 048 */
1576 DWORD64 X9
; /* 050 */
1577 DWORD64 X10
; /* 058 */
1578 DWORD64 X11
; /* 060 */
1579 DWORD64 X12
; /* 068 */
1580 DWORD64 X13
; /* 070 */
1581 DWORD64 X14
; /* 078 */
1582 DWORD64 X15
; /* 080 */
1583 DWORD64 X16
; /* 088 */
1584 DWORD64 X17
; /* 090 */
1585 DWORD64 X18
; /* 098 */
1586 DWORD64 X19
; /* 0a0 */
1587 DWORD64 X20
; /* 0a8 */
1588 DWORD64 X21
; /* 0b0 */
1589 DWORD64 X22
; /* 0b8 */
1590 DWORD64 X23
; /* 0c0 */
1591 DWORD64 X24
; /* 0c8 */
1592 DWORD64 X25
; /* 0d0 */
1593 DWORD64 X26
; /* 0d8 */
1594 DWORD64 X27
; /* 0e0 */
1595 DWORD64 X28
; /* 0e8 */
1596 DWORD64 Fp
; /* 0f0 */
1597 DWORD64 Lr
; /* 0f8 */
1599 DWORD64 X
[31]; /* 008 */
1601 /* CONTEXT_CONTROL */
1602 DWORD64 Sp
; /* 100 */
1603 DWORD64 Pc
; /* 108 */
1604 /* CONTEXT_FLOATING_POINT */
1605 ARM64_NT_NEON128 V
[32]; /* 110 */
1606 DWORD Fpcr
; /* 310 */
1607 DWORD Fpsr
; /* 314 */
1608 /* CONTEXT_DEBUG_REGISTERS */
1609 DWORD Bcr
[ARM64_MAX_BREAKPOINTS
]; /* 318 */
1610 DWORD64 Bvr
[ARM64_MAX_BREAKPOINTS
]; /* 338 */
1611 DWORD Wcr
[ARM64_MAX_WATCHPOINTS
]; /* 378 */
1612 DWORD64 Wvr
[ARM64_MAX_WATCHPOINTS
]; /* 380 */
1613 } ARM64_NT_CONTEXT
, *PARM64_NT_CONTEXT
;
1617 #define CONTEXT_CONTROL CONTEXT_ARM64_CONTROL
1618 #define CONTEXT_INTEGER CONTEXT_ARM64_INTEGER
1619 #define CONTEXT_FLOATING_POINT CONTEXT_ARM64_FLOATING_POINT
1620 #define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM64_DEBUG_REGISTERS
1621 #define CONTEXT_FULL CONTEXT_ARM64_FULL
1622 #define CONTEXT_ALL CONTEXT_ARM64_ALL
1624 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1625 typedef ARM64_NT_NEON128 NEON128
, *PNEON128
;
1626 typedef ARM64_NT_CONTEXT CONTEXT
, *PCONTEXT
;
1628 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
1650 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1652 #endif /* __aarch64__ */
1654 #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
1655 #error You need to define a CONTEXT for your CPU
1658 NTSYSAPI
void WINAPI
RtlCaptureContext(CONTEXT
*);
1660 #define WOW64_CONTEXT_i386 0x00010000
1661 #define WOW64_CONTEXT_i486 0x00010000
1662 #define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000001))
1663 #define WOW64_CONTEXT_INTEGER (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000002))
1664 #define WOW64_CONTEXT_SEGMENTS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000004))
1665 #define WOW64_CONTEXT_FLOATING_POINT (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000008))
1666 #define WOW64_CONTEXT_DEBUG_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000010))
1667 #define WOW64_CONTEXT_EXTENDED_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000020))
1668 #define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040))
1669 #define WOW64_CONTEXT_FULL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS)
1670 #define WOW64_CONTEXT_ALL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | \
1671 WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | \
1672 WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS)
1674 #define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x08000000
1675 #define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000
1676 #define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000
1677 #define WOW64_CONTEXT_EXCEPTION_REPORTING 0x80000000
1679 #define WOW64_SIZE_OF_80387_REGISTERS 80
1680 #define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512
1682 /* Exception definitions */
1684 #define EXCEPTION_READ_FAULT 0
1685 #define EXCEPTION_WRITE_FAULT 1
1686 #define EXCEPTION_EXECUTE_FAULT 8
1688 struct _EXCEPTION_POINTERS
;
1689 struct _EXCEPTION_RECORD
;
1691 typedef EXCEPTION_DISPOSITION WINAPI
EXCEPTION_ROUTINE(struct _EXCEPTION_RECORD
*,PVOID
,CONTEXT
*,PVOID
);
1692 typedef EXCEPTION_ROUTINE
*PEXCEPTION_ROUTINE
;
1696 #define UNWIND_HISTORY_TABLE_SIZE 12
1698 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
1701 PRUNTIME_FUNCTION FunctionEntry
;
1702 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
1704 #define UNWIND_HISTORY_TABLE_NONE 0
1705 #define UNWIND_HISTORY_TABLE_GLOBAL 1
1706 #define UNWIND_HISTORY_TABLE_LOCAL 2
1708 typedef struct _UNWIND_HISTORY_TABLE
1713 ULONG64 HighAddress
;
1714 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
1715 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
1717 typedef struct _DISPATCHER_CONTEXT
1721 PRUNTIME_FUNCTION FunctionEntry
;
1722 ULONG64 EstablisherFrame
;
1724 PCONTEXT ContextRecord
;
1725 PEXCEPTION_ROUTINE LanguageHandler
;
1727 PUNWIND_HISTORY_TABLE HistoryTable
;
1730 } DISPATCHER_CONTEXT
, *PDISPATCHER_CONTEXT
;
1732 typedef LONG (CALLBACK
*PEXCEPTION_FILTER
)(struct _EXCEPTION_POINTERS
*,PVOID
);
1733 typedef void (CALLBACK
*PTERMINATION_HANDLER
)(BOOLEAN
,PVOID
);
1735 #define UNW_FLAG_NHANDLER 0
1736 #define UNW_FLAG_EHANDLER 1
1737 #define UNW_FLAG_UHANDLER 2
1738 #define UNW_FLAG_CHAININFO 4
1740 #elif defined(__arm__)
1742 #define UNWIND_HISTORY_TABLE_SIZE 12
1744 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
1747 PRUNTIME_FUNCTION FunctionEntry
;
1748 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
1750 typedef struct _UNWIND_HISTORY_TABLE
1759 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
1760 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
1762 typedef struct _DISPATCHER_CONTEXT
1766 PRUNTIME_FUNCTION FunctionEntry
;
1767 DWORD EstablisherFrame
;
1769 PCONTEXT ContextRecord
;
1770 PEXCEPTION_ROUTINE LanguageHandler
;
1772 PUNWIND_HISTORY_TABLE HistoryTable
;
1774 BOOLEAN ControlPcIsUnwound
;
1775 PBYTE NonVolatileRegisters
;
1777 } DISPATCHER_CONTEXT
, *PDISPATCHER_CONTEXT
;
1779 typedef LONG (CALLBACK
*PEXCEPTION_FILTER
)(struct _EXCEPTION_POINTERS
*,DWORD
);
1780 typedef void (CALLBACK
*PTERMINATION_HANDLER
)(BOOLEAN
,DWORD
);
1782 #define UNW_FLAG_NHANDLER 0
1783 #define UNW_FLAG_EHANDLER 1
1784 #define UNW_FLAG_UHANDLER 2
1786 #elif defined(__aarch64__)
1788 #define UNWIND_HISTORY_TABLE_SIZE 12
1790 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
1793 PRUNTIME_FUNCTION FunctionEntry
;
1794 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
1796 typedef struct _UNWIND_HISTORY_TABLE
1804 DWORD64 HighAddress
;
1805 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
1806 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
1808 typedef struct _DISPATCHER_CONTEXT
1810 ULONG_PTR ControlPc
;
1811 ULONG_PTR ImageBase
;
1812 PRUNTIME_FUNCTION FunctionEntry
;
1813 ULONG_PTR EstablisherFrame
;
1815 PCONTEXT ContextRecord
;
1816 PEXCEPTION_ROUTINE LanguageHandler
;
1818 PUNWIND_HISTORY_TABLE HistoryTable
;
1820 BOOLEAN ControlPcIsUnwound
;
1821 PBYTE NonVolatileRegisters
;
1822 } DISPATCHER_CONTEXT
, *PDISPATCHER_CONTEXT
;
1824 typedef LONG (CALLBACK
*PEXCEPTION_FILTER
)(struct _EXCEPTION_POINTERS
*,DWORD64
);
1825 typedef void (CALLBACK
*PTERMINATION_HANDLER
)(BOOLEAN
,DWORD64
);
1827 #define UNW_FLAG_NHANDLER 0
1828 #define UNW_FLAG_EHANDLER 1
1829 #define UNW_FLAG_UHANDLER 2
1831 #endif /* __aarch64__ */
1833 #if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
1835 typedef PRUNTIME_FUNCTION (CALLBACK
*PGET_RUNTIME_FUNCTION_CALLBACK
)(DWORD_PTR
,PVOID
);
1837 NTSYSAPI BOOLEAN CDECL
RtlAddFunctionTable(RUNTIME_FUNCTION
*,DWORD
,DWORD_PTR
);
1838 NTSYSAPI DWORD WINAPI
RtlAddGrowableFunctionTable(void**,PRUNTIME_FUNCTION
,DWORD
,DWORD
,ULONG_PTR
,ULONG_PTR
);
1839 NTSYSAPI BOOLEAN CDECL
RtlDeleteFunctionTable(RUNTIME_FUNCTION
*);
1840 NTSYSAPI
void WINAPI
RtlDeleteGrowableFunctionTable(void*);
1841 NTSYSAPI
void WINAPI
RtlGrowFunctionTable(void*,DWORD
);
1842 NTSYSAPI BOOLEAN CDECL
RtlInstallFunctionTableCallback(DWORD_PTR
,DWORD_PTR
,DWORD
,PGET_RUNTIME_FUNCTION_CALLBACK
,PVOID
,PCWSTR
);
1843 NTSYSAPI PRUNTIME_FUNCTION WINAPI
RtlLookupFunctionEntry(DWORD_PTR
,DWORD_PTR
*,UNWIND_HISTORY_TABLE
*);
1844 NTSYSAPI
void WINAPI
RtlUnwindEx(PVOID
,PVOID
,struct _EXCEPTION_RECORD
*,PVOID
,CONTEXT
*,UNWIND_HISTORY_TABLE
*);
1845 NTSYSAPI PVOID WINAPI
RtlVirtualUnwind(DWORD
,ULONG_PTR
,ULONG_PTR
,RUNTIME_FUNCTION
*,CONTEXT
*,PVOID
*,ULONG_PTR
*,KNONVOLATILE_CONTEXT_POINTERS
*);
1852 #define PRODUCT_UNDEFINED 0x00000000
1853 #define PRODUCT_ULTIMATE 0x00000001
1854 #define PRODUCT_HOME_BASIC 0x00000002
1855 #define PRODUCT_HOME_PREMIUM 0x00000003
1856 #define PRODUCT_ENTERPRISE 0x00000004
1857 #define PRODUCT_HOME_BASIC_N 0x00000005
1858 #define PRODUCT_BUSINESS 0x00000006
1859 #define PRODUCT_STANDARD_SERVER 0x00000007
1860 #define PRODUCT_DATACENTER_SERVER 0x00000008
1861 #define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
1862 #define PRODUCT_ENTERPRISE_SERVER 0x0000000A
1863 #define PRODUCT_STARTER 0x0000000B
1864 #define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
1865 #define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
1866 #define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
1867 #define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
1868 #define PRODUCT_BUSINESS_N 0x00000010
1869 #define PRODUCT_WEB_SERVER 0x00000011
1870 #define PRODUCT_CLUSTER_SERVER 0x00000012
1871 #define PRODUCT_HOME_SERVER 0x00000013
1872 #define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
1873 #define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
1874 #define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
1875 #define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
1876 #define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
1877 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019
1878 #define PRODUCT_HOME_PREMIUM_N 0x0000001A
1879 #define PRODUCT_ENTERPRISE_N 0x0000001B
1880 #define PRODUCT_ULTIMATE_N 0x0000001C
1881 #define PRODUCT_WEB_SERVER_CORE 0x0000001D
1882 #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
1883 #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
1884 #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
1885 #define PRODUCT_SERVER_FOUNDATION 0x00000021
1886 #define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
1887 #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
1888 #define PRODUCT_STANDARD_SERVER_V 0x00000024
1889 #define PRODUCT_DATACENTER_SERVER_V 0x00000025
1890 #define PRODUCT_SERVER_V 0x00000025
1891 #define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
1892 #define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
1893 #define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
1894 #define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
1895 #define PRODUCT_HYPERV 0x0000002A
1896 #define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B
1897 #define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C
1898 #define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D
1899 #define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E
1900 #define PRODUCT_STARTER_N 0x0000002F
1901 #define PRODUCT_PROFESSIONAL 0x00000030
1902 #define PRODUCT_PROFESSIONAL_N 0x00000031
1903 #define PRODUCT_SB_SOLUTION_SERVER 0x00000032
1904 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
1905 #define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
1906 #define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
1907 #define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
1908 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
1909 #define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
1910 #define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x00000039
1911 #define PRODUCT_PROFESSIONAL_EMBEDDED 0x0000003A
1912 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B
1913 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C
1914 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D
1915 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E
1916 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F
1917 #define PRODUCT_CLUSTER_SERVER_V 0x00000040
1918 #define PRODUCT_EMBEDDED 0x00000041
1919 #define PRODUCT_STARTER_E 0x00000042
1920 #define PRODUCT_HOME_BASIC_E 0x00000043
1921 #define PRODUCT_HOME_PREMIUM_E 0x00000044
1922 #define PRODUCT_PROFESSIONAL_E 0x00000045
1923 #define PRODUCT_ENTERPRISE_E 0x00000046
1924 #define PRODUCT_ULTIMATE_E 0x00000047
1925 #define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
1926 #define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C
1927 #define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D
1928 #define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F
1929 #define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050
1930 #define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054
1931 #define PRODUCT_EMBEDDED_AUTOMOTIVE 0x00000055
1932 #define PRODUCT_EMBEDDED_INDUSTRY_A 0x00000056
1933 #define PRODUCT_THINPC 0x00000057
1934 #define PRODUCT_EMBEDDED_A 0x00000058
1935 #define PRODUCT_EMBEDDED_INDUSTRY 0x00000059
1936 #define PRODUCT_EMBEDDED_E 0x0000005A
1937 #define PRODUCT_EMBEDDED_INDUSTRY_E 0x0000005B
1938 #define PRODUCT_EMBEDDED_INDUSTRY_A_E 0x0000005C
1939 #define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F
1940 #define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060
1941 #define PRODUCT_CORE_ARM 0x00000061
1942 #define PRODUCT_CORE_N 0x00000062
1943 #define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063
1944 #define PRODUCT_CORE_SINGLELANGUAGE 0x00000064
1945 #define PRODUCT_CORE_LANGUAGESPECIFIC 0x00000064
1946 #define PRODUCT_CORE 0x00000065
1947 #define PRODUCT_PROFESSIONAL_WMC 0x00000067
1948 #define PRODUCT_MOBILE_CORE 0x00000068
1949 #define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x00000069
1950 #define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x0000006A
1951 #define PRODUCT_EMBEDDED_EVAL 0x0000006B
1952 #define PRODUCT_EMBEDDED_E_EVAL 0x0000006C
1953 #define PRODUCT_NANO_SERVER 0x0000006D
1954 #define PRODUCT_CLOUD_STORAGE_SERVER 0x0000006E
1955 #define PRODUCT_CORE_CONNECTED 0x0000006F
1956 #define PRODUCT_PROFESSIONAL_STUDENT 0x00000070
1957 #define PRODUCT_CORE_CONNECTED_N 0x00000071
1958 #define PRODUCT_PROFESSIONAL_STUDENT_N 0x00000072
1959 #define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x00000073
1960 #define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC 0x00000074
1961 #define PRODUCT_CONNECTED_CAR 0x00000075
1962 #define PRODUCT_INDUSTRY_HANDHELD 0x00000076
1963 #define PRODUCT_PPI_PRO 0x00000077
1964 #define PRODUCT_ARM64_SERVER 0x00000078
1965 #define PRODUCT_EDUCATION 0x00000079
1966 #define PRODUCT_EDUCATION_N 0x0000007A
1967 #define PRODUCT_IOTUAP 0x0000007B
1968 #define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER 0x0000007C
1969 #define PRODUCT_ENTERPRISE_S 0x0000007D
1970 #define PRODUCT_ENTERPRISE_S_N 0x0000007E
1971 #define PRODUCT_PROFESSIONAL_S 0x0000007F
1972 #define PRODUCT_PROFESSIONAL_S_N 0x00000080
1973 #define PRODUCT_ENTERPRISE_S_EVALUATION 0x00000081
1974 #define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x00000082
1975 #define PRODUCT_UNLICENSED 0xABCDABCD
1982 #define MAKELCID(l, s) (MAKELONG(l, s))
1984 #define MAKELANGID(p, s) ((((WORD)(s))<<10) | (WORD)(p))
1985 #define PRIMARYLANGID(l) ((WORD)(l) & 0x3ff)
1986 #define SUBLANGID(l) ((WORD)(l) >> 10)
1988 #define LANGIDFROMLCID(lcid) ((WORD)(lcid))
1989 #define SORTIDFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 16) & 0x0f))
1991 #define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))
1992 #define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))
1993 #define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
1994 #define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))
1995 #define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
1996 #define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
1997 #define LOCALE_CUSTOM_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_DEFAULT),SORT_DEFAULT))
1998 #define LOCALE_CUSTOM_UNSPECIFIED (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_UNSPECIFIED),SORT_DEFAULT))
1999 #define LOCALE_CUSTOM_UI_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_UI_CUSTOM_DEFAULT),SORT_DEFAULT))
2000 #define LOCALE_NAME_MAX_LENGTH 85
2003 #define UNREFERENCED_PARAMETER(u) (void)(u)
2004 #define DBG_UNREFERENCED_PARAMETER(u) (void)(u)
2005 #define DBG_UNREFERENCED_LOCAL_VARIABLE(u) (void)(u)
2011 * Definitions for IsTextUnicode()
2014 #define IS_TEXT_UNICODE_ASCII16 0x0001
2015 #define IS_TEXT_UNICODE_STATISTICS 0x0002
2016 #define IS_TEXT_UNICODE_CONTROLS 0x0004
2017 #define IS_TEXT_UNICODE_SIGNATURE 0x0008
2018 #define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
2019 #define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010
2020 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
2021 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040
2022 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080
2023 #define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0
2024 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100
2025 #define IS_TEXT_UNICODE_ODD_LENGTH 0x0200
2026 #define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400
2027 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00
2028 #define IS_TEXT_UNICODE_NULL_BYTES 0x1000
2029 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000
2031 #define MAXIMUM_WAIT_OBJECTS 64
2032 #define MAXIMUM_SUSPEND_COUNT 127
2034 #define WT_EXECUTEDEFAULT 0x00
2035 #define WT_EXECUTEINIOTHREAD 0x01
2036 #define WT_EXECUTEINUITHREAD 0x02
2037 #define WT_EXECUTEINWAITTHREAD 0x04
2038 #define WT_EXECUTEONLYONCE 0x08
2039 #define WT_EXECUTELONGFUNCTION 0x10
2040 #define WT_EXECUTEINTIMERTHREAD 0x20
2041 #define WT_EXECUTEINPERSISTENTIOTHREAD 0x40
2042 #define WT_EXECUTEINPERSISTENTTHREAD 0x80
2043 #define WT_EXECUTEINLONGTHREAD 0x10
2044 #define WT_EXECUTEDELETEWAIT 0x08
2045 #define WT_TRANSFER_IMPERSONATION 0x0100
2048 #define EXCEPTION_CONTINUABLE 0
2049 #define EXCEPTION_NONCONTINUABLE 0x01
2052 * The exception record used by Win32 to give additional information
2053 * about exception to exception handlers.
2056 #define EXCEPTION_MAXIMUM_PARAMETERS 15
2058 typedef struct _EXCEPTION_RECORD
2060 DWORD ExceptionCode
;
2061 DWORD ExceptionFlags
;
2062 struct _EXCEPTION_RECORD
*ExceptionRecord
;
2064 PVOID ExceptionAddress
;
2065 DWORD NumberParameters
;
2066 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
2067 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
2069 typedef struct _EXCEPTION_RECORD32
2071 DWORD ExceptionCode
;
2072 DWORD ExceptionFlags
;
2073 DWORD ExceptionRecord
;
2074 DWORD ExceptionAddress
;
2075 DWORD NumberParameters
;
2076 DWORD ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
2077 } EXCEPTION_RECORD32
, *PEXCEPTION_RECORD32
;
2079 typedef struct _EXCEPTION_RECORD64
2081 DWORD ExceptionCode
;
2082 DWORD ExceptionFlags
;
2083 DWORD64 ExceptionRecord
;
2084 DWORD64 ExceptionAddress
;
2085 DWORD NumberParameters
;
2086 DWORD __unusedAlignment
;
2087 DWORD64 ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
2088 } EXCEPTION_RECORD64
, *PEXCEPTION_RECORD64
;
2091 * The exception pointers structure passed to exception filters
2092 * in except() and the UnhandledExceptionFilter().
2095 typedef struct _EXCEPTION_POINTERS
2097 PEXCEPTION_RECORD ExceptionRecord
;
2098 PCONTEXT ContextRecord
;
2099 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
2103 * The exception frame, used for registering exception handlers
2104 * Win32 cares only about this, but compilers generally emit
2105 * larger exception frames for their own use.
2108 struct _EXCEPTION_REGISTRATION_RECORD
;
2110 typedef DWORD (CDECL
*PEXCEPTION_HANDLER
)(PEXCEPTION_RECORD
,struct _EXCEPTION_REGISTRATION_RECORD
*,
2111 PCONTEXT
,struct _EXCEPTION_REGISTRATION_RECORD
**);
2113 typedef struct _EXCEPTION_REGISTRATION_RECORD
2115 struct _EXCEPTION_REGISTRATION_RECORD
*Prev
;
2116 PEXCEPTION_HANDLER Handler
;
2117 } EXCEPTION_REGISTRATION_RECORD
;
2120 * function pointer to an exception filter
2123 typedef LONG (CALLBACK
*PVECTORED_EXCEPTION_HANDLER
)(PEXCEPTION_POINTERS ExceptionInfo
);
2125 typedef struct _NT_TIB
2127 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
2135 PVOID ArbitraryUserPointer
;
2136 struct _NT_TIB
*Self
;
2141 #if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
2142 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2145 __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb
));
2148 #elif defined(__i386__) && defined(_MSC_VER)
2149 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2152 __asm mov eax
, fs
:[0x18];
2156 #elif defined(__x86_64__) && defined(__GNUC__)
2157 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2160 __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb
));
2163 #elif defined(__x86_64__) && defined(_MSC_VER)
2164 unsigned __int64
__readgsqword(unsigned long);
2165 #pragma intrinsic(__readgsqword)
2166 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2168 return (struct _TEB
*)__readgsqword(FIELD_OFFSET(NT_TIB
, Self
));
2170 #elif defined(__arm__) && defined(__GNUC__)
2171 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2174 __asm__("mrc p15, 0, %0, c13, c0, 2" : "=r" (teb
));
2177 #elif defined(__arm__) && defined(_MSC_VER)
2178 #pragma intrinsic(_MoveFromCoprocessor)
2179 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2181 return (struct _TEB
*)(ULONG_PTR
)_MoveFromCoprocessor(15, 0, 13, 0, 2);
2184 extern struct _TEB
* WINAPI
NtCurrentTeb(void);
2187 #ifdef NONAMELESSUNION
2188 #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->u.FiberData)
2190 #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->FiberData)
2192 #define GetFiberData() (*(void **)GetCurrentFiber())
2194 #define TLS_MINIMUM_AVAILABLE 64
2196 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 * 1024)
2198 #define IO_REPARSE_TAG_RESERVED_ZERO 0
2199 #define IO_REPARSE_TAG_RESERVED_ONE 1
2200 #define IO_REPARSE_TAG_RESERVED_TWO 2
2202 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_TWO
2204 #define IO_REPARSE_TAG_MOUNT_POINT __MSABI_LONG(0xA0000003)
2205 #define IO_REPARSE_TAG_HSM __MSABI_LONG(0xC0000004)
2206 #define IO_REPARSE_TAG_DRIVE_EXTENDER __MSABI_LONG(0x80000005)
2207 #define IO_REPARSE_TAG_HSM2 __MSABI_LONG(0x80000006)
2208 #define IO_REPARSE_TAG_SIS __MSABI_LONG(0x80000007)
2209 #define IO_REPARSE_TAG_WIM __MSABI_LONG(0x80000008)
2210 #define IO_REPARSE_TAG_CSV __MSABI_LONG(0x80000009)
2211 #define IO_REPARSE_TAG_DFS __MSABI_LONG(0x8000000A)
2212 #define IO_REPARSE_TAG_FILTER_MANAGER __MSABI_LONG(0x8000000B)
2213 #define IO_REPARSE_TAG_SYMLINK __MSABI_LONG(0xA000000C)
2214 #define IO_REPARSE_TAG_IIS_CACHE __MSABI_LONG(0xA0000010)
2215 #define IO_REPARSE_TAG_DFSR __MSABI_LONG(0x80000012)
2216 #define IO_REPARSE_TAG_DEDUP __MSABI_LONG(0x80000013)
2217 #define IO_REPARSE_TAG_NFS __MSABI_LONG(0x80000014)
2218 #define IO_REPARSE_TAG_FILE_PLACEHOLDER __MSABI_LONG(0x80000015)
2219 #define IO_REPARSE_TAG_WOF __MSABI_LONG(0x80000017)
2220 #define IO_REPARSE_TAG_WCI __MSABI_LONG(0x80000018)
2221 #define IO_REPARSE_TAG_WCI_1 __MSABI_LONG(0x90001018)
2222 #define IO_REPARSE_TAG_GLOBAL_REPARSE __MSABI_LONG(0xA0000019)
2223 #define IO_REPARSE_TAG_CLOUD __MSABI_LONG(0x9000001A)
2224 #define IO_REPARSE_TAG_CLOUD_1 __MSABI_LONG(0x9000101A)
2225 #define IO_REPARSE_TAG_CLOUD_2 __MSABI_LONG(0x9000201A)
2226 #define IO_REPARSE_TAG_CLOUD_3 __MSABI_LONG(0x9000301A)
2227 #define IO_REPARSE_TAG_CLOUD_4 __MSABI_LONG(0x9000401A)
2228 #define IO_REPARSE_TAG_CLOUD_5 __MSABI_LONG(0x9000501A)
2229 #define IO_REPARSE_TAG_CLOUD_6 __MSABI_LONG(0x9000601A)
2230 #define IO_REPARSE_TAG_CLOUD_7 __MSABI_LONG(0x9000701A)
2231 #define IO_REPARSE_TAG_CLOUD_8 __MSABI_LONG(0x9000801A)
2232 #define IO_REPARSE_TAG_CLOUD_9 __MSABI_LONG(0x9000901A)
2233 #define IO_REPARSE_TAG_CLOUD_A __MSABI_LONG(0x9000A01A)
2234 #define IO_REPARSE_TAG_CLOUD_B __MSABI_LONG(0x9000B01A)
2235 #define IO_REPARSE_TAG_CLOUD_C __MSABI_LONG(0x9000C01A)
2236 #define IO_REPARSE_TAG_CLOUD_D __MSABI_LONG(0x9000D01A)
2237 #define IO_REPARSE_TAG_CLOUD_E __MSABI_LONG(0x9000E01A)
2238 #define IO_REPARSE_TAG_CLOUD_F __MSABI_LONG(0x9000F01A)
2239 #define IO_REPARSE_TAG_CLOUD_MASK __MSABI_LONG(0x0000F000)
2240 #define IO_REPARSE_TAG_APPEXECLINK __MSABI_LONG(0x8000001B)
2241 #define IO_REPARSE_TAG_GVFS __MSABI_LONG(0x9000001C)
2242 #define IO_REPARSE_TAG_STORAGE_SYNC __MSABI_LONG(0x8000001E)
2243 #define IO_REPARSE_TAG_WCI_TOMBSTONE __MSABI_LONG(0xA000001F)
2244 #define IO_REPARSE_TAG_UNHANDLED __MSABI_LONG(0x80000020)
2245 #define IO_REPARSE_TAG_ONEDRIVE __MSABI_LONG(0x80000021)
2246 #define IO_REPARSE_TAG_GVFS_TOMBSTONE __MSABI_LONG(0xA0000022)
2249 * File formats definitions
2252 #include <pshpack2.h>
2253 typedef struct _IMAGE_DOS_HEADER
{
2254 WORD e_magic
; /* 00: MZ Header signature */
2255 WORD e_cblp
; /* 02: Bytes on last page of file */
2256 WORD e_cp
; /* 04: Pages in file */
2257 WORD e_crlc
; /* 06: Relocations */
2258 WORD e_cparhdr
; /* 08: Size of header in paragraphs */
2259 WORD e_minalloc
; /* 0a: Minimum extra paragraphs needed */
2260 WORD e_maxalloc
; /* 0c: Maximum extra paragraphs needed */
2261 WORD e_ss
; /* 0e: Initial (relative) SS value */
2262 WORD e_sp
; /* 10: Initial SP value */
2263 WORD e_csum
; /* 12: Checksum */
2264 WORD e_ip
; /* 14: Initial IP value */
2265 WORD e_cs
; /* 16: Initial (relative) CS value */
2266 WORD e_lfarlc
; /* 18: File address of relocation table */
2267 WORD e_ovno
; /* 1a: Overlay number */
2268 WORD e_res
[4]; /* 1c: Reserved words */
2269 WORD e_oemid
; /* 24: OEM identifier (for e_oeminfo) */
2270 WORD e_oeminfo
; /* 26: OEM information; e_oemid specific */
2271 WORD e_res2
[10]; /* 28: Reserved words */
2272 DWORD e_lfanew
; /* 3c: Offset to extended header */
2273 } IMAGE_DOS_HEADER
, *PIMAGE_DOS_HEADER
;
2274 #include <poppack.h>
2276 #define IMAGE_DOS_SIGNATURE 0x5A4D /* MZ */
2277 #define IMAGE_OS2_SIGNATURE 0x454E /* NE */
2278 #define IMAGE_OS2_SIGNATURE_LE 0x454C /* LE */
2279 #define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */
2280 #define IMAGE_VXD_SIGNATURE 0x454C /* LE */
2281 #define IMAGE_NT_SIGNATURE 0x00004550 /* PE00 */
2284 * This is the Windows executable (NE) header.
2285 * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way.
2287 #include <pshpack2.h>
2290 WORD ne_magic
; /* 00 NE signature 'NE' */
2291 BYTE ne_ver
; /* 02 Linker version number */
2292 BYTE ne_rev
; /* 03 Linker revision number */
2293 WORD ne_enttab
; /* 04 Offset to entry table relative to NE */
2294 WORD ne_cbenttab
; /* 06 Length of entry table in bytes */
2295 LONG ne_crc
; /* 08 Checksum */
2296 WORD ne_flags
; /* 0c Flags about segments in this file */
2297 WORD ne_autodata
; /* 0e Automatic data segment number */
2298 WORD ne_heap
; /* 10 Initial size of local heap */
2299 WORD ne_stack
; /* 12 Initial size of stack */
2300 DWORD ne_csip
; /* 14 Initial CS:IP */
2301 DWORD ne_sssp
; /* 18 Initial SS:SP */
2302 WORD ne_cseg
; /* 1c # of entries in segment table */
2303 WORD ne_cmod
; /* 1e # of entries in module reference tab. */
2304 WORD ne_cbnrestab
; /* 20 Length of nonresident-name table */
2305 WORD ne_segtab
; /* 22 Offset to segment table */
2306 WORD ne_rsrctab
; /* 24 Offset to resource table */
2307 WORD ne_restab
; /* 26 Offset to resident-name table */
2308 WORD ne_modtab
; /* 28 Offset to module reference table */
2309 WORD ne_imptab
; /* 2a Offset to imported name table */
2310 DWORD ne_nrestab
; /* 2c Offset to nonresident-name table */
2311 WORD ne_cmovent
; /* 30 # of movable entry points */
2312 WORD ne_align
; /* 32 Logical sector alignment shift count */
2313 WORD ne_cres
; /* 34 # of resource segments */
2314 BYTE ne_exetyp
; /* 36 Flags indicating target OS */
2315 BYTE ne_flagsothers
; /* 37 Additional information flags */
2316 WORD ne_pretthunks
; /* 38 Offset to return thunks */
2317 WORD ne_psegrefbytes
; /* 3a Offset to segment ref. bytes */
2318 WORD ne_swaparea
; /* 3c Reserved by Microsoft */
2319 WORD ne_expver
; /* 3e Expected Windows version number */
2320 } IMAGE_OS2_HEADER
, *PIMAGE_OS2_HEADER
;
2321 #include <poppack.h>
2323 #include <pshpack2.h>
2324 typedef struct _IMAGE_VXD_HEADER
{
2339 DWORD e32_lastpagesize
;
2340 DWORD e32_fixupsize
;
2357 DWORD e32_impmodcnt
;
2363 DWORD e32_cbnrestab
;
2366 DWORD e32_debuginfo
;
2368 DWORD e32_instpreload
;
2369 DWORD e32_instdemand
;
2372 DWORD e32_winresoff
;
2373 DWORD e32_winreslen
;
2376 } IMAGE_VXD_HEADER
, *PIMAGE_VXD_HEADER
;
2377 #include <poppack.h>
2379 /* These defines describe the meanings of the bits in the Characteristics
2382 #define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* No relocation info */
2383 #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
2384 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
2385 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
2386 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
2387 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
2388 #define IMAGE_FILE_16BIT_MACHINE 0x0040
2389 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
2390 #define IMAGE_FILE_32BIT_MACHINE 0x0100
2391 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200
2392 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
2393 #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
2394 #define IMAGE_FILE_SYSTEM 0x1000
2395 #define IMAGE_FILE_DLL 0x2000
2396 #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
2397 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
2399 /* These are the settings of the Machine field. */
2400 #define IMAGE_FILE_MACHINE_UNKNOWN 0
2401 #define IMAGE_FILE_MACHINE_TARGET_HOST 0x0001
2402 #define IMAGE_FILE_MACHINE_I860 0x014d
2403 #define IMAGE_FILE_MACHINE_I386 0x014c
2404 #define IMAGE_FILE_MACHINE_R3000 0x0162
2405 #define IMAGE_FILE_MACHINE_R4000 0x0166
2406 #define IMAGE_FILE_MACHINE_R10000 0x0168
2407 #define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
2408 #define IMAGE_FILE_MACHINE_ALPHA 0x0184
2409 #define IMAGE_FILE_MACHINE_SH3 0x01a2
2410 #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
2411 #define IMAGE_FILE_MACHINE_SH3E 0x01a4
2412 #define IMAGE_FILE_MACHINE_SH4 0x01a6
2413 #define IMAGE_FILE_MACHINE_SH5 0x01a8
2414 #define IMAGE_FILE_MACHINE_ARM 0x01c0
2415 #define IMAGE_FILE_MACHINE_THUMB 0x01c2
2416 #define IMAGE_FILE_MACHINE_ARMNT 0x01c4
2417 #define IMAGE_FILE_MACHINE_ARM64 0xaa64
2418 #define IMAGE_FILE_MACHINE_AM33 0x01d3
2419 #define IMAGE_FILE_MACHINE_POWERPC 0x01f0
2420 #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
2421 #define IMAGE_FILE_MACHINE_IA64 0x0200
2422 #define IMAGE_FILE_MACHINE_MIPS16 0x0266
2423 #define IMAGE_FILE_MACHINE_ALPHA64 0x0284
2424 #define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
2425 #define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
2426 #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
2427 #define IMAGE_FILE_MACHINE_TRICORE 0x0520
2428 #define IMAGE_FILE_MACHINE_CEF 0x0cef
2429 #define IMAGE_FILE_MACHINE_EBC 0x0ebc
2430 #define IMAGE_FILE_MACHINE_AMD64 0x8664
2431 #define IMAGE_FILE_MACHINE_M32R 0x9041
2432 #define IMAGE_FILE_MACHINE_CEE 0xc0ee
2434 #define IMAGE_SIZEOF_FILE_HEADER 20
2435 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
2436 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
2437 #define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
2438 #define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
2439 #define IMAGE_SIZEOF_SHORT_NAME 8
2440 #define IMAGE_SIZEOF_SECTION_HEADER 40
2441 #define IMAGE_SIZEOF_SYMBOL 18
2442 #define IMAGE_SIZEOF_AUX_SYMBOL 18
2443 #define IMAGE_SIZEOF_RELOCATION 10
2444 #define IMAGE_SIZEOF_BASE_RELOCATION 8
2445 #define IMAGE_SIZEOF_LINENUMBER 6
2446 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
2448 /* Possible Magic values */
2449 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
2450 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
2451 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
2454 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
2455 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
2457 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
2458 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
2461 /* These are indexes into the DataDirectory array */
2462 #define IMAGE_FILE_EXPORT_DIRECTORY 0
2463 #define IMAGE_FILE_IMPORT_DIRECTORY 1
2464 #define IMAGE_FILE_RESOURCE_DIRECTORY 2
2465 #define IMAGE_FILE_EXCEPTION_DIRECTORY 3
2466 #define IMAGE_FILE_SECURITY_DIRECTORY 4
2467 #define IMAGE_FILE_BASE_RELOCATION_TABLE 5
2468 #define IMAGE_FILE_DEBUG_DIRECTORY 6
2469 #define IMAGE_FILE_DESCRIPTION_STRING 7
2470 #define IMAGE_FILE_MACHINE_VALUE 8 /* Mips */
2471 #define IMAGE_FILE_THREAD_LOCAL_STORAGE 9
2472 #define IMAGE_FILE_CALLBACK_DIRECTORY 10
2474 /* Directory Entries, indices into the DataDirectory array */
2476 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0
2477 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
2478 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
2479 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
2480 #define IMAGE_DIRECTORY_ENTRY_SECURITY 4
2481 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
2482 #define IMAGE_DIRECTORY_ENTRY_DEBUG 6
2483 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
2484 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 /* (MIPS GP) */
2485 #define IMAGE_DIRECTORY_ENTRY_TLS 9
2486 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
2487 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
2488 #define IMAGE_DIRECTORY_ENTRY_IAT 12 /* Import Address Table */
2489 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
2490 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
2492 /* Subsystem Values */
2494 #define IMAGE_SUBSYSTEM_UNKNOWN 0
2495 #define IMAGE_SUBSYSTEM_NATIVE 1
2496 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 /* Windows GUI subsystem */
2497 #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 /* Windows character subsystem */
2498 #define IMAGE_SUBSYSTEM_OS2_CUI 5
2499 #define IMAGE_SUBSYSTEM_POSIX_CUI 7
2500 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 /* native Win9x driver */
2501 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* Windows CE subsystem */
2502 #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
2503 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
2504 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
2505 #define IMAGE_SUBSYSTEM_EFI_ROM 13
2506 #define IMAGE_SUBSYSTEM_XBOX 14
2507 #define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
2509 /* DLL Characteristics */
2510 #define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020
2511 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040
2512 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080
2513 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100
2514 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
2515 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
2516 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
2517 #define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000
2518 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
2519 #define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000
2520 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
2522 typedef struct _IMAGE_FILE_HEADER
{
2524 WORD NumberOfSections
;
2525 DWORD TimeDateStamp
;
2526 DWORD PointerToSymbolTable
;
2527 DWORD NumberOfSymbols
;
2528 WORD SizeOfOptionalHeader
;
2529 WORD Characteristics
;
2530 } IMAGE_FILE_HEADER
, *PIMAGE_FILE_HEADER
;
2532 typedef struct _IMAGE_DATA_DIRECTORY
{
2533 DWORD VirtualAddress
;
2535 } IMAGE_DATA_DIRECTORY
, *PIMAGE_DATA_DIRECTORY
;
2537 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
2539 typedef struct _IMAGE_OPTIONAL_HEADER64
{
2540 WORD Magic
; /* 0x20b */
2541 BYTE MajorLinkerVersion
;
2542 BYTE MinorLinkerVersion
;
2544 DWORD SizeOfInitializedData
;
2545 DWORD SizeOfUninitializedData
;
2546 DWORD AddressOfEntryPoint
;
2548 ULONGLONG ImageBase
;
2549 DWORD SectionAlignment
;
2550 DWORD FileAlignment
;
2551 WORD MajorOperatingSystemVersion
;
2552 WORD MinorOperatingSystemVersion
;
2553 WORD MajorImageVersion
;
2554 WORD MinorImageVersion
;
2555 WORD MajorSubsystemVersion
;
2556 WORD MinorSubsystemVersion
;
2557 DWORD Win32VersionValue
;
2559 DWORD SizeOfHeaders
;
2562 WORD DllCharacteristics
;
2563 ULONGLONG SizeOfStackReserve
;
2564 ULONGLONG SizeOfStackCommit
;
2565 ULONGLONG SizeOfHeapReserve
;
2566 ULONGLONG SizeOfHeapCommit
;
2568 DWORD NumberOfRvaAndSizes
;
2569 IMAGE_DATA_DIRECTORY DataDirectory
[IMAGE_NUMBEROF_DIRECTORY_ENTRIES
];
2570 } IMAGE_OPTIONAL_HEADER64
, *PIMAGE_OPTIONAL_HEADER64
;
2572 typedef struct _IMAGE_NT_HEADERS64
{
2574 IMAGE_FILE_HEADER FileHeader
;
2575 IMAGE_OPTIONAL_HEADER64 OptionalHeader
;
2576 } IMAGE_NT_HEADERS64
, *PIMAGE_NT_HEADERS64
;
2578 typedef struct _IMAGE_OPTIONAL_HEADER
{
2580 /* Standard fields */
2582 WORD Magic
; /* 0x10b or 0x107 */ /* 0x00 */
2583 BYTE MajorLinkerVersion
;
2584 BYTE MinorLinkerVersion
;
2586 DWORD SizeOfInitializedData
;
2587 DWORD SizeOfUninitializedData
;
2588 DWORD AddressOfEntryPoint
; /* 0x10 */
2592 /* NT additional fields */
2595 DWORD SectionAlignment
; /* 0x20 */
2596 DWORD FileAlignment
;
2597 WORD MajorOperatingSystemVersion
;
2598 WORD MinorOperatingSystemVersion
;
2599 WORD MajorImageVersion
;
2600 WORD MinorImageVersion
;
2601 WORD MajorSubsystemVersion
; /* 0x30 */
2602 WORD MinorSubsystemVersion
;
2603 DWORD Win32VersionValue
;
2605 DWORD SizeOfHeaders
;
2606 DWORD CheckSum
; /* 0x40 */
2608 WORD DllCharacteristics
;
2609 DWORD SizeOfStackReserve
;
2610 DWORD SizeOfStackCommit
;
2611 DWORD SizeOfHeapReserve
; /* 0x50 */
2612 DWORD SizeOfHeapCommit
;
2614 DWORD NumberOfRvaAndSizes
;
2615 IMAGE_DATA_DIRECTORY DataDirectory
[IMAGE_NUMBEROF_DIRECTORY_ENTRIES
]; /* 0x60 */
2617 } IMAGE_OPTIONAL_HEADER32
, *PIMAGE_OPTIONAL_HEADER32
;
2619 typedef struct _IMAGE_NT_HEADERS
{
2620 DWORD Signature
; /* "PE"\0\0 */ /* 0x00 */
2621 IMAGE_FILE_HEADER FileHeader
; /* 0x04 */
2622 IMAGE_OPTIONAL_HEADER32 OptionalHeader
; /* 0x18 */
2623 } IMAGE_NT_HEADERS32
, *PIMAGE_NT_HEADERS32
;
2626 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS
;
2627 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
2628 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER
;
2629 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER
;
2631 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS
;
2632 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
2633 typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER
;
2634 typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER
;
2637 #define IMAGE_SIZEOF_SHORT_NAME 8
2639 typedef struct _IMAGE_SECTION_HEADER
{
2640 BYTE Name
[IMAGE_SIZEOF_SHORT_NAME
];
2642 DWORD PhysicalAddress
;
2645 DWORD VirtualAddress
;
2646 DWORD SizeOfRawData
;
2647 DWORD PointerToRawData
;
2648 DWORD PointerToRelocations
;
2649 DWORD PointerToLinenumbers
;
2650 WORD NumberOfRelocations
;
2651 WORD NumberOfLinenumbers
;
2652 DWORD Characteristics
;
2653 } IMAGE_SECTION_HEADER
, *PIMAGE_SECTION_HEADER
;
2655 #define IMAGE_SIZEOF_SECTION_HEADER 40
2657 #define IMAGE_FIRST_SECTION(ntheader) \
2658 ((PIMAGE_SECTION_HEADER)(ULONG_PTR)((const BYTE *)&((const IMAGE_NT_HEADERS *)(ntheader))->OptionalHeader + \
2659 ((const IMAGE_NT_HEADERS *)(ntheader))->FileHeader.SizeOfOptionalHeader))
2661 /* These defines are for the Characteristics bitfield. */
2662 /* #define IMAGE_SCN_TYPE_REG 0x00000000 - Reserved */
2663 /* #define IMAGE_SCN_TYPE_DSECT 0x00000001 - Reserved */
2664 /* #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 - Reserved */
2665 /* #define IMAGE_SCN_TYPE_GROUP 0x00000004 - Reserved */
2666 #define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved */
2667 /* #define IMAGE_SCN_TYPE_COPY 0x00000010 - Reserved */
2669 #define IMAGE_SCN_CNT_CODE 0x00000020
2670 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
2671 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
2673 #define IMAGE_SCN_LNK_OTHER 0x00000100
2674 #define IMAGE_SCN_LNK_INFO 0x00000200
2675 /* #define IMAGE_SCN_TYPE_OVER 0x00000400 - Reserved */
2676 #define IMAGE_SCN_LNK_REMOVE 0x00000800
2677 #define IMAGE_SCN_LNK_COMDAT 0x00001000
2679 /* 0x00002000 - Reserved */
2680 /* #define IMAGE_SCN_MEM_PROTECTED 0x00004000 - Obsolete */
2681 #define IMAGE_SCN_MEM_FARDATA 0x00008000
2683 /* #define IMAGE_SCN_MEM_SYSHEAP 0x00010000 - Obsolete */
2684 #define IMAGE_SCN_MEM_PURGEABLE 0x00020000
2685 #define IMAGE_SCN_MEM_16BIT 0x00020000
2686 #define IMAGE_SCN_MEM_LOCKED 0x00040000
2687 #define IMAGE_SCN_MEM_PRELOAD 0x00080000
2689 #define IMAGE_SCN_ALIGN_1BYTES 0x00100000
2690 #define IMAGE_SCN_ALIGN_2BYTES 0x00200000
2691 #define IMAGE_SCN_ALIGN_4BYTES 0x00300000
2692 #define IMAGE_SCN_ALIGN_8BYTES 0x00400000
2693 #define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default */
2694 #define IMAGE_SCN_ALIGN_32BYTES 0x00600000
2695 #define IMAGE_SCN_ALIGN_64BYTES 0x00700000
2696 #define IMAGE_SCN_ALIGN_128BYTES 0x00800000
2697 #define IMAGE_SCN_ALIGN_256BYTES 0x00900000
2698 #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000
2699 #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000
2700 #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000
2701 #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000
2702 #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000
2703 /* 0x00F00000 - Unused */
2704 #define IMAGE_SCN_ALIGN_MASK 0x00F00000
2706 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
2709 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
2710 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
2711 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
2712 #define IMAGE_SCN_MEM_SHARED 0x10000000
2713 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
2714 #define IMAGE_SCN_MEM_READ 0x40000000
2715 #define IMAGE_SCN_MEM_WRITE 0x80000000
2717 #include <pshpack2.h>
2719 typedef struct _IMAGE_SYMBOL
{
2729 SHORT SectionNumber
;
2732 BYTE NumberOfAuxSymbols
;
2734 typedef IMAGE_SYMBOL
*PIMAGE_SYMBOL
;
2736 #define IMAGE_SIZEOF_SYMBOL 18
2738 typedef struct _IMAGE_LINENUMBER
{
2740 DWORD SymbolTableIndex
;
2741 DWORD VirtualAddress
;
2745 typedef IMAGE_LINENUMBER
*PIMAGE_LINENUMBER
;
2747 #define IMAGE_SIZEOF_LINENUMBER 6
2749 typedef union _IMAGE_AUX_SYMBOL
{
2761 DWORD PointerToLinenumber
;
2762 DWORD PointerToNextFunction
;
2771 BYTE Name
[IMAGE_SIZEOF_SYMBOL
];
2775 WORD NumberOfRelocations
;
2776 WORD NumberOfLinenumbers
;
2782 typedef IMAGE_AUX_SYMBOL
*PIMAGE_AUX_SYMBOL
;
2784 #define IMAGE_SIZEOF_AUX_SYMBOL 18
2786 #include <poppack.h>
2788 #define IMAGE_SYM_UNDEFINED (SHORT)0
2789 #define IMAGE_SYM_ABSOLUTE (SHORT)-1
2790 #define IMAGE_SYM_DEBUG (SHORT)-2
2792 #define IMAGE_SYM_TYPE_NULL 0x0000
2793 #define IMAGE_SYM_TYPE_VOID 0x0001
2794 #define IMAGE_SYM_TYPE_CHAR 0x0002
2795 #define IMAGE_SYM_TYPE_SHORT 0x0003
2796 #define IMAGE_SYM_TYPE_INT 0x0004
2797 #define IMAGE_SYM_TYPE_LONG 0x0005
2798 #define IMAGE_SYM_TYPE_FLOAT 0x0006
2799 #define IMAGE_SYM_TYPE_DOUBLE 0x0007
2800 #define IMAGE_SYM_TYPE_STRUCT 0x0008
2801 #define IMAGE_SYM_TYPE_UNION 0x0009
2802 #define IMAGE_SYM_TYPE_ENUM 0x000A
2803 #define IMAGE_SYM_TYPE_MOE 0x000B
2804 #define IMAGE_SYM_TYPE_BYTE 0x000C
2805 #define IMAGE_SYM_TYPE_WORD 0x000D
2806 #define IMAGE_SYM_TYPE_UINT 0x000E
2807 #define IMAGE_SYM_TYPE_DWORD 0x000F
2808 #define IMAGE_SYM_TYPE_PCODE 0x8000
2810 #define IMAGE_SYM_DTYPE_NULL 0
2811 #define IMAGE_SYM_DTYPE_POINTER 1
2812 #define IMAGE_SYM_DTYPE_FUNCTION 2
2813 #define IMAGE_SYM_DTYPE_ARRAY 3
2815 #define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE )-1
2816 #define IMAGE_SYM_CLASS_NULL 0x0000
2817 #define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
2818 #define IMAGE_SYM_CLASS_EXTERNAL 0x0002
2819 #define IMAGE_SYM_CLASS_STATIC 0x0003
2820 #define IMAGE_SYM_CLASS_REGISTER 0x0004
2821 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
2822 #define IMAGE_SYM_CLASS_LABEL 0x0006
2823 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
2824 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
2825 #define IMAGE_SYM_CLASS_ARGUMENT 0x0009
2826 #define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
2827 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
2828 #define IMAGE_SYM_CLASS_UNION_TAG 0x000C
2829 #define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
2830 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
2831 #define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
2832 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
2833 #define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
2834 #define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
2836 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044
2837 #define IMAGE_SYM_CLASS_BLOCK 0x0064
2838 #define IMAGE_SYM_CLASS_FUNCTION 0x0065
2839 #define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
2840 #define IMAGE_SYM_CLASS_FILE 0x0067
2841 #define IMAGE_SYM_CLASS_SECTION 0x0068
2842 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
2844 #define N_BTMASK 0x000F
2845 #define N_TMASK 0x0030
2846 #define N_TMASK1 0x00C0
2847 #define N_TMASK2 0x00F0
2851 #define BTYPE(x) ((x) & N_BTMASK)
2854 #define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
2858 #define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
2862 #define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
2866 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
2870 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
2873 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
2876 #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
2877 #define IMAGE_COMDAT_SELECT_ANY 2
2878 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
2879 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
2880 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
2881 #define IMAGE_COMDAT_SELECT_LARGEST 6
2882 #define IMAGE_COMDAT_SELECT_NEWEST 7
2884 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
2885 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
2886 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
2888 /* Export module directory */
2890 typedef struct _IMAGE_EXPORT_DIRECTORY
{
2891 DWORD Characteristics
;
2892 DWORD TimeDateStamp
;
2897 DWORD NumberOfFunctions
;
2898 DWORD NumberOfNames
;
2899 DWORD AddressOfFunctions
;
2900 DWORD AddressOfNames
;
2901 DWORD AddressOfNameOrdinals
;
2902 } IMAGE_EXPORT_DIRECTORY
,*PIMAGE_EXPORT_DIRECTORY
;
2904 /* Import name entry */
2905 typedef struct _IMAGE_IMPORT_BY_NAME
{
2908 } IMAGE_IMPORT_BY_NAME
,*PIMAGE_IMPORT_BY_NAME
;
2910 #include <pshpack8.h>
2912 typedef struct _IMAGE_THUNK_DATA64
{
2914 ULONGLONG ForwarderString
;
2917 ULONGLONG AddressOfData
;
2919 } IMAGE_THUNK_DATA64
,*PIMAGE_THUNK_DATA64
;
2920 #include <poppack.h>
2922 typedef struct _IMAGE_THUNK_DATA32
{
2924 DWORD ForwarderString
;
2927 DWORD AddressOfData
;
2929 } IMAGE_THUNK_DATA32
,*PIMAGE_THUNK_DATA32
;
2931 /* Import module directory */
2933 typedef struct _IMAGE_IMPORT_DESCRIPTOR
{
2935 DWORD Characteristics
; /* 0 for terminating null import descriptor */
2936 DWORD OriginalFirstThunk
; /* RVA to original unbound IAT */
2938 DWORD TimeDateStamp
; /* 0 if not bound,
2939 * -1 if bound, and real date\time stamp
2940 * in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
2942 * otherwise date/time stamp of DLL bound to
2945 DWORD ForwarderChain
; /* -1 if no forwarders */
2947 /* RVA to IAT (if bound this IAT has actual addresses) */
2949 } IMAGE_IMPORT_DESCRIPTOR
,*PIMAGE_IMPORT_DESCRIPTOR
;
2951 #define IMAGE_ORDINAL_FLAG64 (((ULONGLONG)0x80000000 << 32) | 0x00000000)
2952 #define IMAGE_ORDINAL_FLAG32 0x80000000
2953 #define IMAGE_SNAP_BY_ORDINAL64(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG64) != 0)
2954 #define IMAGE_SNAP_BY_ORDINAL32(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG32) != 0)
2955 #define IMAGE_ORDINAL64(ordinal) ((ordinal) & 0xffff)
2956 #define IMAGE_ORDINAL32(ordinal) ((ordinal) & 0xffff)
2959 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
2960 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
2961 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
2962 typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA
;
2963 typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA
;
2965 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
2966 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
2967 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
2968 typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA
;
2969 typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA
;
2972 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR
2974 DWORD TimeDateStamp
;
2975 WORD OffsetModuleName
;
2976 WORD NumberOfModuleForwarderRefs
;
2977 /* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */
2978 } IMAGE_BOUND_IMPORT_DESCRIPTOR
, *PIMAGE_BOUND_IMPORT_DESCRIPTOR
;
2980 typedef struct _IMAGE_BOUND_FORWARDER_REF
2982 DWORD TimeDateStamp
;
2983 WORD OffsetModuleName
;
2985 } IMAGE_BOUND_FORWARDER_REF
, *PIMAGE_BOUND_FORWARDER_REF
;
2987 typedef struct _IMAGE_BASE_RELOCATION
2989 DWORD VirtualAddress
;
2991 /* WORD TypeOffset[1]; */
2992 } IMAGE_BASE_RELOCATION
,*PIMAGE_BASE_RELOCATION
;
2994 #include <pshpack2.h>
2996 typedef struct _IMAGE_RELOCATION
2999 DWORD VirtualAddress
;
3002 DWORD SymbolTableIndex
;
3004 } IMAGE_RELOCATION
, *PIMAGE_RELOCATION
;
3006 #include <poppack.h>
3008 #define IMAGE_SIZEOF_RELOCATION 10
3010 typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR
3014 DWORD AllAttributes
;
3018 DWORD ReservedAttributes
:31;
3023 DWORD ModuleHandleRVA
;
3024 DWORD ImportAddressTableRVA
;
3025 DWORD ImportNameTableRVA
;
3026 DWORD BoundImportAddressTableRVA
;
3027 DWORD UnloadInformationTableRVA
;
3028 DWORD TimeDateStamp
;
3029 } IMAGE_DELAYLOAD_DESCRIPTOR
, *PIMAGE_DELAYLOAD_DESCRIPTOR
;
3030 typedef const IMAGE_DELAYLOAD_DESCRIPTOR
*PCIMAGE_DELAYLOAD_DESCRIPTOR
;
3032 /* generic relocation types */
3033 #define IMAGE_REL_BASED_ABSOLUTE 0
3034 #define IMAGE_REL_BASED_HIGH 1
3035 #define IMAGE_REL_BASED_LOW 2
3036 #define IMAGE_REL_BASED_HIGHLOW 3
3037 #define IMAGE_REL_BASED_HIGHADJ 4
3038 #define IMAGE_REL_BASED_MIPS_JMPADDR 5
3039 #define IMAGE_REL_BASED_ARM_MOV32A 5 /* yes, 5 too */
3040 #define IMAGE_REL_BASED_ARM_MOV32 5 /* yes, 5 too */
3041 #define IMAGE_REL_BASED_SECTION 6
3042 #define IMAGE_REL_BASED_REL 7
3043 #define IMAGE_REL_BASED_ARM_MOV32T 7 /* yes, 7 too */
3044 #define IMAGE_REL_BASED_THUMB_MOV32 7 /* yes, 7 too */
3045 #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
3046 #define IMAGE_REL_BASED_IA64_IMM64 9 /* yes, 9 too */
3047 #define IMAGE_REL_BASED_DIR64 10
3048 #define IMAGE_REL_BASED_HIGH3ADJ 11
3050 /* I386 relocation types */
3051 #define IMAGE_REL_I386_ABSOLUTE 0
3052 #define IMAGE_REL_I386_DIR16 1
3053 #define IMAGE_REL_I386_REL16 2
3054 #define IMAGE_REL_I386_DIR32 6
3055 #define IMAGE_REL_I386_DIR32NB 7
3056 #define IMAGE_REL_I386_SEG12 9
3057 #define IMAGE_REL_I386_SECTION 10
3058 #define IMAGE_REL_I386_SECREL 11
3059 #define IMAGE_REL_I386_TOKEN 12
3060 #define IMAGE_REL_I386_SECREL7 13
3061 #define IMAGE_REL_I386_REL32 20
3063 /* MIPS relocation types */
3064 #define IMAGE_REL_MIPS_ABSOLUTE 0x0000
3065 #define IMAGE_REL_MIPS_REFHALF 0x0001
3066 #define IMAGE_REL_MIPS_REFWORD 0x0002
3067 #define IMAGE_REL_MIPS_JMPADDR 0x0003
3068 #define IMAGE_REL_MIPS_REFHI 0x0004
3069 #define IMAGE_REL_MIPS_REFLO 0x0005
3070 #define IMAGE_REL_MIPS_GPREL 0x0006
3071 #define IMAGE_REL_MIPS_LITERAL 0x0007
3072 #define IMAGE_REL_MIPS_SECTION 0x000A
3073 #define IMAGE_REL_MIPS_SECREL 0x000B
3074 #define IMAGE_REL_MIPS_SECRELLO 0x000C
3075 #define IMAGE_REL_MIPS_SECRELHI 0x000D
3076 #define IMAGE_REL_MIPS_TOKEN 0x000E
3077 #define IMAGE_REL_MIPS_JMPADDR16 0x0010
3078 #define IMAGE_REL_MIPS_REFWORDNB 0x0022
3079 #define IMAGE_REL_MIPS_PAIR 0x0025
3081 /* ALPHA relocation types */
3082 #define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
3083 #define IMAGE_REL_ALPHA_REFLONG 0x0001
3084 #define IMAGE_REL_ALPHA_REFQUAD 0x0002
3085 #define IMAGE_REL_ALPHA_GPREL 0x0003
3086 #define IMAGE_REL_ALPHA_LITERAL 0x0004
3087 #define IMAGE_REL_ALPHA_LITUSE 0x0005
3088 #define IMAGE_REL_ALPHA_GPDISP 0x0006
3089 #define IMAGE_REL_ALPHA_BRADDR 0x0007
3090 #define IMAGE_REL_ALPHA_HINT 0x0008
3091 #define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
3092 #define IMAGE_REL_ALPHA_REFHI 0x000A
3093 #define IMAGE_REL_ALPHA_REFLO 0x000B
3094 #define IMAGE_REL_ALPHA_PAIR 0x000C
3095 #define IMAGE_REL_ALPHA_MATCH 0x000D
3096 #define IMAGE_REL_ALPHA_SECTION 0x000E
3097 #define IMAGE_REL_ALPHA_SECREL 0x000F
3098 #define IMAGE_REL_ALPHA_REFLONGNB 0x0010
3099 #define IMAGE_REL_ALPHA_SECRELLO 0x0011
3100 #define IMAGE_REL_ALPHA_SECRELHI 0x0012
3101 #define IMAGE_REL_ALPHA_REFQ3 0x0013
3102 #define IMAGE_REL_ALPHA_REFQ2 0x0014
3103 #define IMAGE_REL_ALPHA_REFQ1 0x0015
3104 #define IMAGE_REL_ALPHA_GPRELLO 0x0016
3105 #define IMAGE_REL_ALPHA_GPRELHI 0x0017
3107 /* PowerPC relocation types */
3108 #define IMAGE_REL_PPC_ABSOLUTE 0x0000
3109 #define IMAGE_REL_PPC_ADDR64 0x0001
3110 #define IMAGE_REL_PPC_ADDR 0x0002
3111 #define IMAGE_REL_PPC_ADDR24 0x0003
3112 #define IMAGE_REL_PPC_ADDR16 0x0004
3113 #define IMAGE_REL_PPC_ADDR14 0x0005
3114 #define IMAGE_REL_PPC_REL24 0x0006
3115 #define IMAGE_REL_PPC_REL14 0x0007
3116 #define IMAGE_REL_PPC_TOCREL16 0x0008
3117 #define IMAGE_REL_PPC_TOCREL14 0x0009
3118 #define IMAGE_REL_PPC_ADDR32NB 0x000A
3119 #define IMAGE_REL_PPC_SECREL 0x000B
3120 #define IMAGE_REL_PPC_SECTION 0x000C
3121 #define IMAGE_REL_PPC_IFGLUE 0x000D
3122 #define IMAGE_REL_PPC_IMGLUE 0x000E
3123 #define IMAGE_REL_PPC_SECREL16 0x000F
3124 #define IMAGE_REL_PPC_REFHI 0x0010
3125 #define IMAGE_REL_PPC_REFLO 0x0011
3126 #define IMAGE_REL_PPC_PAIR 0x0012
3127 #define IMAGE_REL_PPC_SECRELLO 0x0013
3128 #define IMAGE_REL_PPC_SECRELHI 0x0014
3129 #define IMAGE_REL_PPC_GPREL 0x0015
3130 #define IMAGE_REL_PPC_TOKEN 0x0016
3131 #define IMAGE_REL_PPC_TYPEMASK 0x00FF
3133 #define IMAGE_REL_PPC_NEG 0x0100
3134 #define IMAGE_REL_PPC_BRTAKEN 0x0200
3135 #define IMAGE_REL_PPC_BRNTAKEN 0x0400
3136 #define IMAGE_REL_PPC_TOCDEFN 0x0800
3138 /* SH3 relocation types */
3139 #define IMAGE_REL_SH3_ABSOLUTE 0x0000
3140 #define IMAGE_REL_SH3_DIRECT16 0x0001
3141 #define IMAGE_REL_SH3_DIRECT 0x0002
3142 #define IMAGE_REL_SH3_DIRECT8 0x0003
3143 #define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
3144 #define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
3145 #define IMAGE_REL_SH3_DIRECT4 0x0006
3146 #define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
3147 #define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
3148 #define IMAGE_REL_SH3_PCREL8_WORD 0x0009
3149 #define IMAGE_REL_SH3_PCREL8_LONG 0x000A
3150 #define IMAGE_REL_SH3_PCREL12_WORD 0x000B
3151 #define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
3152 #define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
3153 #define IMAGE_REL_SH3_SECTION 0x000E
3154 #define IMAGE_REL_SH3_SECREL 0x000F
3155 #define IMAGE_REL_SH3_DIRECT32_NB 0x0010
3156 #define IMAGE_REL_SH3_GPREL4_LONG 0x0011
3157 #define IMAGE_REL_SH3_TOKEN 0x0012
3159 /* ARM relocation types */
3160 #define IMAGE_REL_ARM_ABSOLUTE 0x0000
3161 #define IMAGE_REL_ARM_ADDR 0x0001
3162 #define IMAGE_REL_ARM_ADDR32NB 0x0002
3163 #define IMAGE_REL_ARM_BRANCH24 0x0003
3164 #define IMAGE_REL_ARM_BRANCH11 0x0004
3165 #define IMAGE_REL_ARM_TOKEN 0x0005
3166 #define IMAGE_REL_ARM_GPREL12 0x0006
3167 #define IMAGE_REL_ARM_GPREL7 0x0007
3168 #define IMAGE_REL_ARM_BLX24 0x0008
3169 #define IMAGE_REL_ARM_BLX11 0x0009
3170 #define IMAGE_REL_ARM_SECTION 0x000E
3171 #define IMAGE_REL_ARM_SECREL 0x000F
3172 #define IMAGE_REL_ARM_MOV32A 0x0010
3173 #define IMAGE_REL_ARM_MOV32T 0x0011
3174 #define IMAGE_REL_ARM_BRANCH20T 0x0012
3175 #define IMAGE_REL_ARM_BRANCH24T 0x0014
3176 #define IMAGE_REL_ARM_BLX23T 0x0015
3178 /* ARM64 relocation types */
3179 #define IMAGE_REL_ARM64_ABSOLUTE 0x0000
3180 #define IMAGE_REL_ARM64_ADDR32 0x0001
3181 #define IMAGE_REL_ARM64_ADDR32NB 0x0002
3182 #define IMAGE_REL_ARM64_BRANCH26 0x0003
3183 #define IMAGE_REL_ARM64_PAGEBASE_REL21 0x0004
3184 #define IMAGE_REL_ARM64_REL21 0x0005
3185 #define IMAGE_REL_ARM64_PAGEOFFSET_12A 0x0006
3186 #define IMAGE_REL_ARM64_PAGEOFFSET_12L 0x0007
3187 #define IMAGE_REL_ARM64_SECREL 0x0008
3188 #define IMAGE_REL_ARM64_SECREL_LOW12A 0x0009
3189 #define IMAGE_REL_ARM64_SECREL_HIGH12A 0x000A
3190 #define IMAGE_REL_ARM64_SECREL_LOW12L 0x000B
3191 #define IMAGE_REL_ARM64_TOKEN 0x000C
3192 #define IMAGE_REL_ARM64_SECTION 0x000D
3193 #define IMAGE_REL_ARM64_ADDR64 0x000E
3194 #define IMAGE_REL_ARM64_BRANCH19 0x000F
3196 /* IA64 relocation types */
3197 #define IMAGE_REL_IA64_ABSOLUTE 0x0000
3198 #define IMAGE_REL_IA64_IMM14 0x0001
3199 #define IMAGE_REL_IA64_IMM22 0x0002
3200 #define IMAGE_REL_IA64_IMM64 0x0003
3201 #define IMAGE_REL_IA64_DIR 0x0004
3202 #define IMAGE_REL_IA64_DIR64 0x0005
3203 #define IMAGE_REL_IA64_PCREL21B 0x0006
3204 #define IMAGE_REL_IA64_PCREL21M 0x0007
3205 #define IMAGE_REL_IA64_PCREL21F 0x0008
3206 #define IMAGE_REL_IA64_GPREL22 0x0009
3207 #define IMAGE_REL_IA64_LTOFF22 0x000A
3208 #define IMAGE_REL_IA64_SECTION 0x000B
3209 #define IMAGE_REL_IA64_SECREL22 0x000C
3210 #define IMAGE_REL_IA64_SECREL64I 0x000D
3211 #define IMAGE_REL_IA64_SECREL 0x000E
3212 #define IMAGE_REL_IA64_LTOFF64 0x000F
3213 #define IMAGE_REL_IA64_DIR32NB 0x0010
3214 #define IMAGE_REL_IA64_SREL14 0x0011
3215 #define IMAGE_REL_IA64_SREL22 0x0012
3216 #define IMAGE_REL_IA64_SREL32 0x0013
3217 #define IMAGE_REL_IA64_UREL32 0x0014
3218 #define IMAGE_REL_IA64_PCREL60X 0x0015
3219 #define IMAGE_REL_IA64_PCREL60B 0x0016
3220 #define IMAGE_REL_IA64_PCREL60F 0x0017
3221 #define IMAGE_REL_IA64_PCREL60I 0x0018
3222 #define IMAGE_REL_IA64_PCREL60M 0x0019
3223 #define IMAGE_REL_IA64_IMMGPREL64 0x001A
3224 #define IMAGE_REL_IA64_TOKEN 0x001B
3225 #define IMAGE_REL_IA64_GPREL32 0x001C
3226 #define IMAGE_REL_IA64_ADDEND 0x001F
3228 /* AMD64 relocation types */
3229 #define IMAGE_REL_AMD64_ABSOLUTE 0x0000
3230 #define IMAGE_REL_AMD64_ADDR64 0x0001
3231 #define IMAGE_REL_AMD64_ADDR32 0x0002
3232 #define IMAGE_REL_AMD64_ADDR32NB 0x0003
3233 #define IMAGE_REL_AMD64_REL32 0x0004
3234 #define IMAGE_REL_AMD64_REL32_1 0x0005
3235 #define IMAGE_REL_AMD64_REL32_2 0x0006
3236 #define IMAGE_REL_AMD64_REL32_3 0x0007
3237 #define IMAGE_REL_AMD64_REL32_4 0x0008
3238 #define IMAGE_REL_AMD64_REL32_5 0x0009
3239 #define IMAGE_REL_AMD64_SECTION 0x000A
3240 #define IMAGE_REL_AMD64_SECREL 0x000B
3241 #define IMAGE_REL_AMD64_SECREL7 0x000C
3242 #define IMAGE_REL_AMD64_TOKEN 0x000D
3243 #define IMAGE_REL_AMD64_SREL32 0x000E
3244 #define IMAGE_REL_AMD64_PAIR 0x000F
3245 #define IMAGE_REL_AMD64_SSPAN32 0x0010
3247 /* archive format */
3249 #define IMAGE_ARCHIVE_START_SIZE 8
3250 #define IMAGE_ARCHIVE_START "!<arch>\n"
3251 #define IMAGE_ARCHIVE_END "`\n"
3252 #define IMAGE_ARCHIVE_PAD "\n"
3253 #define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
3254 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
3256 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
3265 } IMAGE_ARCHIVE_MEMBER_HEADER
, *PIMAGE_ARCHIVE_MEMBER_HEADER
;
3267 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
3269 typedef struct _IMPORT_OBJECT_HEADER
3275 DWORD TimeDateStamp
;
3285 } IMPORT_OBJECT_HEADER
;
3287 #define IMPORT_OBJECT_HDR_SIG2 0xffff
3289 typedef enum IMPORT_OBJECT_TYPE
3291 IMPORT_OBJECT_CODE
= 0,
3292 IMPORT_OBJECT_DATA
= 1,
3293 IMPORT_OBJECT_CONST
= 2
3294 } IMPORT_OBJECT_TYPE
;
3296 typedef enum IMPORT_OBJECT_NAME_TYPE
3298 IMPORT_OBJECT_ORDINAL
= 0,
3299 IMPORT_OBJECT_NAME
= 1,
3300 IMPORT_OBJECT_NAME_NO_PREFIX
= 2,
3301 IMPORT_OBJECT_NAME_UNDECORATE
= 3
3302 } IMPORT_OBJECT_NAME_TYPE
;
3304 typedef struct _ANON_OBJECT_HEADER
3310 DWORD TimeDateStamp
;
3313 } ANON_OBJECT_HEADER
;
3316 * Resource directory stuff
3318 typedef struct _IMAGE_RESOURCE_DIRECTORY
{
3319 DWORD Characteristics
;
3320 DWORD TimeDateStamp
;
3323 WORD NumberOfNamedEntries
;
3324 WORD NumberOfIdEntries
;
3325 /* IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */
3326 } IMAGE_RESOURCE_DIRECTORY
,*PIMAGE_RESOURCE_DIRECTORY
;
3328 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
3329 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
3331 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY
{
3334 unsigned NameOffset
:31;
3335 unsigned NameIsString
:1;
3343 unsigned OffsetToDirectory
:31;
3344 unsigned DataIsDirectory
:1;
3347 } IMAGE_RESOURCE_DIRECTORY_ENTRY
,*PIMAGE_RESOURCE_DIRECTORY_ENTRY
;
3350 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING
{
3352 CHAR NameString
[ 1 ];
3353 } IMAGE_RESOURCE_DIRECTORY_STRING
,*PIMAGE_RESOURCE_DIRECTORY_STRING
;
3355 typedef struct _IMAGE_RESOURCE_DIR_STRING_U
{
3357 WCHAR NameString
[ 1 ];
3358 } IMAGE_RESOURCE_DIR_STRING_U
,*PIMAGE_RESOURCE_DIR_STRING_U
;
3360 typedef struct _IMAGE_RESOURCE_DATA_ENTRY
{
3365 } IMAGE_RESOURCE_DATA_ENTRY
,*PIMAGE_RESOURCE_DATA_ENTRY
;
3368 typedef VOID (CALLBACK
*PIMAGE_TLS_CALLBACK
)(
3369 LPVOID DllHandle
,DWORD Reason
,LPVOID Reserved
3372 typedef struct _IMAGE_TLS_DIRECTORY64
{
3373 ULONGLONG StartAddressOfRawData
;
3374 ULONGLONG EndAddressOfRawData
;
3375 ULONGLONG AddressOfIndex
;
3376 ULONGLONG AddressOfCallBacks
;
3377 DWORD SizeOfZeroFill
;
3378 DWORD Characteristics
;
3379 } IMAGE_TLS_DIRECTORY64
, *PIMAGE_TLS_DIRECTORY64
;
3381 typedef struct _IMAGE_TLS_DIRECTORY32
{
3382 DWORD StartAddressOfRawData
;
3383 DWORD EndAddressOfRawData
;
3384 DWORD AddressOfIndex
;
3385 DWORD AddressOfCallBacks
;
3386 DWORD SizeOfZeroFill
;
3387 DWORD Characteristics
;
3388 } IMAGE_TLS_DIRECTORY32
, *PIMAGE_TLS_DIRECTORY32
;
3391 typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY
;
3392 typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY
;
3394 typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY
;
3395 typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY
;
3398 typedef struct _IMAGE_DEBUG_DIRECTORY
{
3399 DWORD Characteristics
;
3400 DWORD TimeDateStamp
;
3405 DWORD AddressOfRawData
;
3406 DWORD PointerToRawData
;
3407 } IMAGE_DEBUG_DIRECTORY
, *PIMAGE_DEBUG_DIRECTORY
;
3409 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
3410 #define IMAGE_DEBUG_TYPE_COFF 1
3411 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
3412 #define IMAGE_DEBUG_TYPE_FPO 3
3413 #define IMAGE_DEBUG_TYPE_MISC 4
3414 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
3415 #define IMAGE_DEBUG_TYPE_FIXUP 6
3416 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
3417 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
3418 #define IMAGE_DEBUG_TYPE_BORLAND 9
3419 #define IMAGE_DEBUG_TYPE_RESERVED10 10
3420 #define IMAGE_DEBUG_TYPE_CLSID 11
3421 #define IMAGE_DEBUG_TYPE_VC_FEATURE 12
3422 #define IMAGE_DEBUG_TYPE_POGO 13
3423 #define IMAGE_DEBUG_TYPE_ILTCG 14
3424 #define IMAGE_DEBUG_TYPE_MPX 15
3425 #define IMAGE_DEBUG_TYPE_REPRO 16
3427 typedef enum ReplacesCorHdrNumericDefines
3429 COMIMAGE_FLAGS_ILONLY
= 0x00000001,
3430 COMIMAGE_FLAGS_32BITREQUIRED
= 0x00000002,
3431 COMIMAGE_FLAGS_IL_LIBRARY
= 0x00000004,
3432 COMIMAGE_FLAGS_STRONGNAMESIGNED
= 0x00000008,
3433 COMIMAGE_FLAGS_NATIVE_ENTRYPOINT
= 0x00000010,
3434 COMIMAGE_FLAGS_TRACKDEBUGDATA
= 0x00010000,
3435 COMIMAGE_FLAGS_32BITPREFERRED
= 0x00020000,
3437 COR_VERSION_MAJOR_V2
= 2,
3438 COR_VERSION_MAJOR
= COR_VERSION_MAJOR_V2
,
3439 COR_VERSION_MINOR
= 5,
3440 COR_DELETED_NAME_LENGTH
= 8,
3441 COR_VTABLEGAP_NAME_LENGTH
= 8,
3443 NATIVE_TYPE_MAX_CB
= 1,
3444 COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE
= 0xff,
3446 IMAGE_COR_MIH_METHODRVA
= 0x01,
3447 IMAGE_COR_MIH_EHRVA
= 0x02,
3448 IMAGE_COR_MIH_BASICBLOCK
= 0x08,
3450 COR_VTABLE_32BIT
= 0x01,
3451 COR_VTABLE_64BIT
= 0x02,
3452 COR_VTABLE_FROM_UNMANAGED
= 0x04,
3453 COR_VTABLE_CALL_MOST_DERIVED
= 0x10,
3455 IMAGE_COR_EATJ_THUNK_SIZE
= 32,
3457 MAX_CLASS_NAME
= 1024,
3458 MAX_PACKAGE_NAME
= 1024,
3459 } ReplacesCorHdrNumericDefines
;
3461 typedef struct IMAGE_COR20_HEADER
3464 WORD MajorRuntimeVersion
;
3465 WORD MinorRuntimeVersion
;
3467 IMAGE_DATA_DIRECTORY MetaData
;
3470 DWORD EntryPointToken
;
3471 DWORD EntryPointRVA
;
3474 IMAGE_DATA_DIRECTORY Resources
;
3475 IMAGE_DATA_DIRECTORY StrongNameSignature
;
3476 IMAGE_DATA_DIRECTORY CodeManagerTable
;
3477 IMAGE_DATA_DIRECTORY VTableFixups
;
3478 IMAGE_DATA_DIRECTORY ExportAddressTableJumps
;
3479 IMAGE_DATA_DIRECTORY ManagedNativeHeader
;
3481 } IMAGE_COR20_HEADER
, *PIMAGE_COR20_HEADER
;
3483 typedef struct _IMAGE_COFF_SYMBOLS_HEADER
{
3484 DWORD NumberOfSymbols
;
3485 DWORD LvaToFirstSymbol
;
3486 DWORD NumberOfLinenumbers
;
3487 DWORD LvaToFirstLinenumber
;
3488 DWORD RvaToFirstByteOfCode
;
3489 DWORD RvaToLastByteOfCode
;
3490 DWORD RvaToFirstByteOfData
;
3491 DWORD RvaToLastByteOfData
;
3492 } IMAGE_COFF_SYMBOLS_HEADER
, *PIMAGE_COFF_SYMBOLS_HEADER
;
3495 #define FRAME_TRAP 1
3497 #define FRAME_NONFPO 3
3499 typedef struct _FPO_DATA
{
3510 } FPO_DATA
, *PFPO_DATA
;
3512 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64
{
3514 DWORD TimeDateStamp
;
3517 DWORD GlobalFlagsClear
;
3518 DWORD GlobalFlagsSet
;
3519 DWORD CriticalSectionDefaultTimeout
;
3520 ULONGLONG DeCommitFreeBlockThreshold
;
3521 ULONGLONG DeCommitTotalFreeThreshold
;
3522 ULONGLONG LockPrefixTable
;
3523 ULONGLONG MaximumAllocationSize
;
3524 ULONGLONG VirtualMemoryThreshold
;
3525 ULONGLONG ProcessAffinityMask
;
3526 DWORD ProcessHeapFlags
;
3530 ULONGLONG SecurityCookie
;
3531 ULONGLONG SEHandlerTable
;
3532 ULONGLONG SEHandlerCount
;
3533 } IMAGE_LOAD_CONFIG_DIRECTORY64
, *PIMAGE_LOAD_CONFIG_DIRECTORY64
;
3535 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32
{
3537 DWORD TimeDateStamp
;
3540 DWORD GlobalFlagsClear
;
3541 DWORD GlobalFlagsSet
;
3542 DWORD CriticalSectionDefaultTimeout
;
3543 DWORD DeCommitFreeBlockThreshold
;
3544 DWORD DeCommitTotalFreeThreshold
;
3545 PVOID LockPrefixTable
;
3546 DWORD MaximumAllocationSize
;
3547 DWORD VirtualMemoryThreshold
;
3548 DWORD ProcessHeapFlags
;
3549 DWORD ProcessAffinityMask
;
3553 DWORD SecurityCookie
;
3554 DWORD SEHandlerTable
;
3555 DWORD SEHandlerCount
;
3556 } IMAGE_LOAD_CONFIG_DIRECTORY32
, *PIMAGE_LOAD_CONFIG_DIRECTORY32
;
3559 typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY
;
3560 typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY
;
3562 typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY
;
3563 typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY
;
3566 typedef struct _IMAGE_FUNCTION_ENTRY
{
3567 DWORD StartingAddress
;
3568 DWORD EndingAddress
;
3569 DWORD EndOfPrologue
;
3570 } IMAGE_FUNCTION_ENTRY
, *PIMAGE_FUNCTION_ENTRY
;
3572 #define IMAGE_DEBUG_MISC_EXENAME 1
3574 typedef struct _IMAGE_DEBUG_MISC
{
3580 } IMAGE_DEBUG_MISC
, *PIMAGE_DEBUG_MISC
;
3582 /* This is the structure that appears at the very start of a .DBG file. */
3584 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER
{
3588 WORD Characteristics
;
3589 DWORD TimeDateStamp
;
3593 DWORD NumberOfSections
;
3594 DWORD ExportedNamesSize
;
3595 DWORD DebugDirectorySize
;
3596 DWORD SectionAlignment
;
3597 DWORD Reserved
[ 2 ];
3598 } IMAGE_SEPARATE_DEBUG_HEADER
,*PIMAGE_SEPARATE_DEBUG_HEADER
;
3600 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
3603 typedef struct tagMESSAGE_RESOURCE_ENTRY
{
3607 } MESSAGE_RESOURCE_ENTRY
,*PMESSAGE_RESOURCE_ENTRY
;
3608 #define MESSAGE_RESOURCE_UNICODE 0x0001
3610 typedef struct tagMESSAGE_RESOURCE_BLOCK
{
3613 DWORD OffsetToEntries
;
3614 } MESSAGE_RESOURCE_BLOCK
,*PMESSAGE_RESOURCE_BLOCK
;
3616 typedef struct tagMESSAGE_RESOURCE_DATA
{
3617 DWORD NumberOfBlocks
;
3618 MESSAGE_RESOURCE_BLOCK Blocks
[ 1 ];
3619 } MESSAGE_RESOURCE_DATA
,*PMESSAGE_RESOURCE_DATA
;
3622 * Here follows typedefs for security and tokens.
3626 * First a constant for the following typedefs.
3629 #define ANYSIZE_ARRAY 1
3631 /* FIXME: Orphan. What does it point to? */
3632 typedef PVOID PACCESS_TOKEN
;
3633 typedef PVOID PSECURITY_DESCRIPTOR
;
3636 typedef enum _TOKEN_ELEVATION_TYPE
{
3637 TokenElevationTypeDefault
= 1,
3638 TokenElevationTypeFull
,
3639 TokenElevationTypeLimited
3640 } TOKEN_ELEVATION_TYPE
, *PTOKEN_ELEVATION_TYPE
;
3643 * TOKEN_INFORMATION_CLASS
3646 typedef enum _TOKEN_INFORMATION_CLASS
{
3655 TokenImpersonationLevel
,
3657 TokenRestrictedSids
,
3659 TokenGroupsAndPrivileges
,
3660 TokenSessionReference
,
3667 TokenHasRestrictions
,
3668 TokenAccessInformation
,
3669 TokenVirtualizationAllowed
,
3670 TokenVirtualizationEnabled
,
3671 TokenIntegrityLevel
,
3673 TokenMandatoryPolicy
,
3675 TokenIsAppContainer
,
3677 TokenAppContainerSid
,
3678 TokenAppContainerNumber
,
3679 TokenUserClaimAttributes
,
3680 TokenDeviceClaimAttributes
,
3681 TokenRestrictedUserClaimAttributes
,
3682 TokenRestrictedDeviceClaimAttributes
,
3684 TokenRestrictedDeviceGroups
,
3685 TokenSecurityAttributes
,
3687 TokenProcessTrustLevel
,
3689 } TOKEN_INFORMATION_CLASS
;
3691 #define DISABLE_MAX_PRIVILEGE 0x1
3692 #define SANDBOX_INERT 0x2
3693 #define LUA_TOKEN 0x4
3694 #define WRITE_RESTRICTED 0x8
3696 #define TOKEN_ASSIGN_PRIMARY 0x0001
3697 #define TOKEN_DUPLICATE 0x0002
3698 #define TOKEN_IMPERSONATE 0x0004
3699 #define TOKEN_QUERY 0x0008
3700 #define TOKEN_QUERY_SOURCE 0x0010
3701 #define TOKEN_ADJUST_PRIVILEGES 0x0020
3702 #define TOKEN_ADJUST_GROUPS 0x0040
3703 #define TOKEN_ADJUST_DEFAULT 0x0080
3704 #define TOKEN_ADJUST_SESSIONID 0x0100
3705 #define TOKEN_EXECUTE STANDARD_RIGHTS_EXECUTE
3706 #define TOKEN_READ (STANDARD_RIGHTS_READ|TOKEN_QUERY)
3707 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE | \
3708 TOKEN_ADJUST_PRIVILEGES | \
3709 TOKEN_ADJUST_GROUPS | \
3710 TOKEN_ADJUST_DEFAULT )
3711 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
3712 TOKEN_ASSIGN_PRIMARY | \
3714 TOKEN_IMPERSONATE | \
3716 TOKEN_QUERY_SOURCE | \
3717 TOKEN_ADJUST_PRIVILEGES | \
3718 TOKEN_ADJUST_GROUPS | \
3719 TOKEN_ADJUST_SESSIONID | \
3720 TOKEN_ADJUST_DEFAULT )
3722 #ifndef _SECURITY_DEFINED
3723 #define _SECURITY_DEFINED
3725 typedef DWORD ACCESS_MASK
, *PACCESS_MASK
;
3727 typedef struct _GENERIC_MAPPING
{
3728 ACCESS_MASK GenericRead
;
3729 ACCESS_MASK GenericWrite
;
3730 ACCESS_MASK GenericExecute
;
3731 ACCESS_MASK GenericAll
;
3732 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
3734 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
3735 #define SID_IDENTIFIER_AUTHORITY_DEFINED
3738 } SID_IDENTIFIER_AUTHORITY
, *PSID_IDENTIFIER_AUTHORITY
;
3739 #endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */
3743 typedef struct _SID
{
3745 BYTE SubAuthorityCount
;
3746 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
3747 DWORD SubAuthority
[1];
3749 #endif /* !defined(SID_DEFINED) */
3751 #define CREATE_BOUNDARY_DESCRIPTOR_ADD_APPCONTAINER_SID 0x01
3753 #define SID_REVISION (1) /* Current revision */
3754 #define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */
3755 #define SID_RECOMMENDED_SUB_AUTHORITIES (1) /* recommended subauths */
3757 #define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))
3763 #define ACL_REVISION1 1
3764 #define ACL_REVISION2 2
3765 #define ACL_REVISION3 3
3766 #define ACL_REVISION4 4
3768 #define MIN_ACL_REVISION ACL_REVISION2
3769 #define MAX_ACL_REVISION ACL_REVISION4
3771 #define ACL_REVISION 2
3773 typedef struct _ACL
{
3781 typedef enum _ACL_INFORMATION_CLASS
3783 AclRevisionInformation
= 1,
3785 } ACL_INFORMATION_CLASS
;
3787 typedef struct _ACL_REVISION_INFORMATION
3790 } ACL_REVISION_INFORMATION
, *PACL_REVISION_INFORMATION
;
3792 typedef struct _ACL_SIZE_INFORMATION
3795 DWORD AclBytesInUse
;
3797 } ACL_SIZE_INFORMATION
, *PACL_SIZE_INFORMATION
;
3799 /* SECURITY_DESCRIPTOR */
3800 #define SECURITY_DESCRIPTOR_REVISION 1
3801 #define SECURITY_DESCRIPTOR_REVISION1 1
3808 #if defined(_MSC_VER) || defined(__MINGW32__)
3809 #define SE_CREATE_TOKEN_NAME L"SeCreateTokenPrivilege"
3810 #define SE_ASSIGNPRIMARYTOKEN_NAME L"SeAssignPrimaryTokenPrivilege"
3811 #define SE_LOCK_MEMORY_NAME L"SeLockMemoryPrivilege"
3812 #define SE_INCREASE_QUOTA_NAME L"SeIncreaseQuotaPrivilege"
3813 #define SE_UNSOLICITED_INPUT_NAME L"SeUnsolicitedInputPrivilege"
3814 #define SE_MACHINE_ACCOUNT_NAME L"SeMachineAccountPrivilege"
3815 #define SE_TCB_NAME L"SeTcbPrivilege"
3816 #define SE_SECURITY_NAME L"SeSecurityPrivilege"
3817 #define SE_TAKE_OWNERSHIP_NAME L"SeTakeOwnershipPrivilege"
3818 #define SE_LOAD_DRIVER_NAME L"SeLoadDriverPrivilege"
3819 #define SE_SYSTEM_PROFILE_NAME L"SeSystemProfilePrivilege"
3820 #define SE_SYSTEMTIME_NAME L"SeSystemtimePrivilege"
3821 #define SE_PROF_SINGLE_PROCESS_NAME L"SeProfileSingleProcessPrivilege"
3822 #define SE_INC_BASE_PRIORITY_NAME L"SeIncreaseBasePriorityPrivilege"
3823 #define SE_CREATE_PAGEFILE_NAME L"SeCreatePagefilePrivilege"
3824 #define SE_CREATE_PERMANENT_NAME L"SeCreatePermanentPrivilege"
3825 #define SE_BACKUP_NAME L"SeBackupPrivilege"
3826 #define SE_RESTORE_NAME L"SeRestorePrivilege"
3827 #define SE_SHUTDOWN_NAME L"SeShutdownPrivilege"
3828 #define SE_DEBUG_NAME L"SeDebugPrivilege"
3829 #define SE_AUDIT_NAME L"SeAuditPrivilege"
3830 #define SE_SYSTEM_ENVIRONMENT_NAME L"SeSystemEnvironmentPrivilege"
3831 #define SE_CHANGE_NOTIFY_NAME L"SeChangeNotifyPrivilege"
3832 #define SE_REMOTE_SHUTDOWN_NAME L"SeRemoteShutdownPrivilege"
3833 #define SE_UNDOCK_NAME L"SeUndockPrivilege"
3834 #define SE_ENABLE_DELEGATION_NAME L"SeEnableDelegationPrivilege"
3835 #define SE_MANAGE_VOLUME_NAME L"SeManageVolumePrivilege"
3836 #define SE_IMPERSONATE_NAME L"SeImpersonatePrivilege"
3837 #define SE_CREATE_GLOBAL_NAME L"SeCreateGlobalPrivilege"
3838 #define SE_TRUSTED_CREDMAN_ACCESS_NAME L"SeTrustedCredManAccessPrivilege"
3839 #define SE_RELABEL_NAME L"SeRelabelPrivilege"
3840 #define SE_INC_WORKING_SET_NAME L"SeIncreaseWorkingSetPrivilege"
3841 #define SE_TIME_ZONE_NAME L"SeTimeZonePrivilege"
3842 #define SE_CREATE_SYMBOLIC_LINK_NAME L"SeCreateSymbolicLinkPrivilege"
3843 #define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME L"SeDelegateSessionUserImpersonatePrivilege"
3844 #else /* _MSC_VER/__MINGW32__ */
3845 static const WCHAR SE_CREATE_TOKEN_NAME
[] = { 'S','e','C','r','e','a','t','e','T','o','k','e','n','P','r','i','v','i','l','e','g','e',0 };
3846 static const WCHAR SE_ASSIGNPRIMARYTOKEN_NAME
[] = { 'S','e','A','s','s','i','g','n','P','r','i','m','a','r','y','T','o','k','e','n','P','r','i','v','i','l','e','g','e',0 };
3847 static const WCHAR SE_LOCK_MEMORY_NAME
[] = { 'S','e','L','o','c','k','M','e','m','o','r','y','P','r','i','v','i','l','e','g','e',0 };
3848 static const WCHAR SE_INCREASE_QUOTA_NAME
[] = { 'S','e','I','n','c','r','e','a','s','e','Q','u','o','t','a','P','r','i','v','i','l','e','g','e',0 };
3849 static const WCHAR SE_UNSOLICITED_INPUT_NAME
[] = { 'S','e','U','n','s','o','l','i','c','i','t','e','d','I','n','p','u','t','P','r','i','v','i','l','e','g','e',0 };
3850 static const WCHAR SE_MACHINE_ACCOUNT_NAME
[] = { 'S','e','M','a','c','h','i','n','e','A','c','c','o','u','n','t','P','r','i','v','i','l','e','g','e',0 };
3851 static const WCHAR SE_TCB_NAME
[] = { 'S','e','T','c','b','P','r','i','v','i','l','e','g','e',0 };
3852 static const WCHAR SE_SECURITY_NAME
[] = { 'S','e','S','e','c','u','r','i','t','y','P','r','i','v','i','l','e','g','e',0 };
3853 static const WCHAR SE_TAKE_OWNERSHIP_NAME
[] = { 'S','e','T','a','k','e','O','w','n','e','r','s','h','i','p','P','r','i','v','i','l','e','g','e',0 };
3854 static const WCHAR SE_LOAD_DRIVER_NAME
[] = { 'S','e','L','o','a','d','D','r','i','v','e','r','P','r','i','v','i','l','e','g','e',0 };
3855 static const WCHAR SE_SYSTEM_PROFILE_NAME
[] = { 'S','e','S','y','s','t','e','m','P','r','o','f','i','l','e','P','r','i','v','i','l','e','g','e',0 };
3856 static const WCHAR SE_SYSTEMTIME_NAME
[] = { 'S','e','S','y','s','t','e','m','t','i','m','e','P','r','i','v','i','l','e','g','e',0 };
3857 static const WCHAR SE_PROF_SINGLE_PROCESS_NAME
[] = { 'S','e','P','r','o','f','i','l','e','S','i','n','g','l','e','P','r','o','c','e','s','s','P','r','i','v','i','l','e','g','e',0 };
3858 static const WCHAR SE_INC_BASE_PRIORITY_NAME
[] = { 'S','e','I','n','c','r','e','a','s','e','B','a','s','e','P','r','i','o','r','i','t','y','P','r','i','v','i','l','e','g','e',0 };
3859 static const WCHAR SE_CREATE_PAGEFILE_NAME
[] = { 'S','e','C','r','e','a','t','e','P','a','g','e','f','i','l','e','P','r','i','v','i','l','e','g','e',0 };
3860 static const WCHAR SE_CREATE_PERMANENT_NAME
[] = { 'S','e','C','r','e','a','t','e','P','e','r','m','a','n','e','n','t','P','r','i','v','i','l','e','g','e',0 };
3861 static const WCHAR SE_BACKUP_NAME
[] = { 'S','e','B','a','c','k','u','p','P','r','i','v','i','l','e','g','e',0 };
3862 static const WCHAR SE_RESTORE_NAME
[] = { 'S','e','R','e','s','t','o','r','e','P','r','i','v','i','l','e','g','e',0 };
3863 static const WCHAR SE_SHUTDOWN_NAME
[] = { 'S','e','S','h','u','t','d','o','w','n','P','r','i','v','i','l','e','g','e',0 };
3864 static const WCHAR SE_DEBUG_NAME
[] = { 'S','e','D','e','b','u','g','P','r','i','v','i','l','e','g','e',0 };
3865 static const WCHAR SE_AUDIT_NAME
[] = { 'S','e','A','u','d','i','t','P','r','i','v','i','l','e','g','e',0 };
3866 static const WCHAR SE_SYSTEM_ENVIRONMENT_NAME
[] = { 'S','e','S','y','s','t','e','m','E','n','v','i','r','o','n','m','e','n','t','P','r','i','v','i','l','e','g','e',0 };
3867 static const WCHAR SE_CHANGE_NOTIFY_NAME
[] = { 'S','e','C','h','a','n','g','e','N','o','t','i','f','y','P','r','i','v','i','l','e','g','e',0 };
3868 static const WCHAR SE_REMOTE_SHUTDOWN_NAME
[] = { 'S','e','R','e','m','o','t','e','S','h','u','t','d','o','w','n','P','r','i','v','i','l','e','g','e',0 };
3869 static const WCHAR SE_UNDOCK_NAME
[] = { 'S','e','U','n','d','o','c','k','P','r','i','v','i','l','e','g','e',0 };
3870 static const WCHAR SE_ENABLE_DELEGATION_NAME
[] = { 'S','e','E','n','a','b','l','e','D','e','l','e','g','a','t','i','o','n','P','r','i','v','i','l','e','g','e',0 };
3871 static const WCHAR SE_MANAGE_VOLUME_NAME
[] = { 'S','e','M','a','n','a','g','e','V','o','l','u','m','e','P','r','i','v','i','l','e','g','e',0 };
3872 static const WCHAR SE_IMPERSONATE_NAME
[] = { 'S','e','I','m','p','e','r','s','o','n','a','t','e','P','r','i','v','i','l','e','g','e',0 };
3873 static const WCHAR SE_CREATE_GLOBAL_NAME
[] = { 'S','e','C','r','e','a','t','e','G','l','o','b','a','l','P','r','i','v','i','l','e','g','e',0 };
3874 static const WCHAR SE_TRUSTED_CREDMAN_ACCESS_NAME
[] = { 'S','e','T','r','u','s','t','e','d','C','r','e','d','M','a','n','A','c','c','e','s','s','P','r','i','v','i','l','e','g','e',0 };
3875 static const WCHAR SE_RELABEL_NAME
[] = { 'S','e','R','e','l','a','b','e','l','P','r','i','v','i','l','e','g','e',0 };
3876 static const WCHAR SE_INC_WORKING_SET_NAME
[] = { 'S','e','I','n','c','r','e','a','s','e','W','o','r','k','i','n','g','S','e','t','P','r','i','v','i','l','e','g','e',0 };
3877 static const WCHAR SE_TIME_ZONE_NAME
[] = { 'S','e','T','i','m','e','Z','o','n','e','P','r','i','v','i','l','e','g','e',0 };
3878 static const WCHAR SE_CREATE_SYMBOLIC_LINK_NAME
[] = { 'S','e','C','r','e','a','t','e','S','y','m','b','o','l','i','c','L','i','n','k','P','r','i','v','i','l','e','g','e',0 };
3879 static const WCHAR SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME
[] = { 'S','e','D','e','l','e','g','a','t','e','S','e','s','s','i','o','n','U','s','e','r','I','m','p','e','r','s','o','n','a','t','e','P','r','i','v','i','l','e','g','e',0 };
3882 #define SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege"
3883 #define SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege"
3884 #define SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege"
3885 #define SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege"
3886 #define SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege"
3887 #define SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege"
3888 #define SE_TCB_NAME "SeTcbPrivilege"
3889 #define SE_SECURITY_NAME "SeSecurityPrivilege"
3890 #define SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege"
3891 #define SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege"
3892 #define SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege"
3893 #define SE_SYSTEMTIME_NAME "SeSystemtimePrivilege"
3894 #define SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege"
3895 #define SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege"
3896 #define SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege"
3897 #define SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege"
3898 #define SE_BACKUP_NAME "SeBackupPrivilege"
3899 #define SE_RESTORE_NAME "SeRestorePrivilege"
3900 #define SE_SHUTDOWN_NAME "SeShutdownPrivilege"
3901 #define SE_DEBUG_NAME "SeDebugPrivilege"
3902 #define SE_AUDIT_NAME "SeAuditPrivilege"
3903 #define SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege"
3904 #define SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege"
3905 #define SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege"
3906 #define SE_UNDOCK_NAME "SeUndockPrivilege"
3907 #define SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege"
3908 #define SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege"
3909 #define SE_IMPERSONATE_NAME "SeImpersonatePrivilege"
3910 #define SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege"
3911 #define SE_TRUSTED_CREDMAN_ACCESS_NAME "SeTrustedCredManAccessPrivilege"
3912 #define SE_RELABEL_NAME "SeRelabelPrivilege"
3913 #define SE_INC_WORKING_SET_NAME "SeIncreaseWorkingSetPrivilege"
3914 #define SE_TIME_ZONE_NAME "SeTimeZonePrivilege"
3915 #define SE_CREATE_SYMBOLIC_LINK_NAME "SeCreateSymbolicLinkPrivilege"
3916 #define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME "SeDelegateSessionUserImpersonatePrivilege"
3919 #define SE_GROUP_MANDATORY 0x00000001
3920 #define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002
3921 #define SE_GROUP_ENABLED 0x00000004
3922 #define SE_GROUP_OWNER 0x00000008
3923 #define SE_GROUP_USE_FOR_DENY_ONLY 0x00000010
3924 #define SE_GROUP_INTEGRITY 0x00000020
3925 #define SE_GROUP_INTEGRITY_ENABLED 0x00000040
3926 #define SE_GROUP_LOGON_ID 0xC0000000
3927 #define SE_GROUP_RESOURCE 0x20000000
3928 #define SE_GROUP_VALID_ATTRIBUTES 0xE000007F
3930 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001
3931 #define SE_PRIVILEGE_ENABLED 0x00000002
3932 #define SE_PRIVILEGE_REMOVED 0x00000004
3933 #define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
3934 #define SE_PRIVILEGE_VALID_ATTRIBUTES 0x80000007
3936 #define PRIVILEGE_SET_ALL_NECESSARY 1
3938 #define SE_OWNER_DEFAULTED 0x00000001
3939 #define SE_GROUP_DEFAULTED 0x00000002
3940 #define SE_DACL_PRESENT 0x00000004
3941 #define SE_DACL_DEFAULTED 0x00000008
3942 #define SE_SACL_PRESENT 0x00000010
3943 #define SE_SACL_DEFAULTED 0x00000020
3944 #define SE_DACL_AUTO_INHERIT_REQ 0x00000100
3945 #define SE_SACL_AUTO_INHERIT_REQ 0x00000200
3946 #define SE_DACL_AUTO_INHERITED 0x00000400
3947 #define SE_SACL_AUTO_INHERITED 0x00000800
3948 #define SE_DACL_PROTECTED 0x00001000
3949 #define SE_SACL_PROTECTED 0x00002000
3950 #define SE_RM_CONTROL_VALID 0x00004000
3951 #define SE_SELF_RELATIVE 0x00008000
3953 typedef DWORD SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
3954 typedef WORD SECURITY_DESCRIPTOR_CONTROL
, *PSECURITY_DESCRIPTOR_CONTROL
;
3956 /* The security descriptor structure */
3960 SECURITY_DESCRIPTOR_CONTROL Control
;
3965 } SECURITY_DESCRIPTOR_RELATIVE
, *PISECURITY_DESCRIPTOR_RELATIVE
;
3970 SECURITY_DESCRIPTOR_CONTROL Control
;
3975 } SECURITY_DESCRIPTOR
, *PISECURITY_DESCRIPTOR
;
3977 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
3979 #endif /* _SECURITY_DEFINED */
3982 * SID_AND_ATTRIBUTES
3985 typedef struct _SID_AND_ATTRIBUTES
{
3988 } SID_AND_ATTRIBUTES
, *PSID_AND_ATTRIBUTES
;
3990 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
3991 typedef SID_AND_ATTRIBUTES_ARRAY
*PSID_AND_ATTRIBUTES_ARRAY
;
3993 #define SID_HASH_SIZE 32
3995 typedef ULONG_PTR SID_HASH_ENTRY
, *PSID_HASH_ENTRY
;
3997 typedef struct _SID_AND_ATTRIBUTES_HASH
{
3999 PSID_AND_ATTRIBUTES SidAttr
;
4000 SID_HASH_ENTRY Hash
[SID_HASH_SIZE
];
4001 } SID_AND_ATTRIBUTES_HASH
, *PSID_AND_ATTRIBUTES_HASH
;
4003 /* security entities */
4004 #define SECURITY_NULL_RID __MSABI_LONG(0x00000000)
4005 #define SECURITY_WORLD_RID __MSABI_LONG(0x00000000)
4006 #define SECURITY_LOCAL_RID __MSABI_LONG(0X00000000)
4008 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
4011 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
4014 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
4015 #define SECURITY_LOCAL_LOGON_RID __MSABI_LONG(0X00000000)
4018 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
4019 #define SECURITY_CREATOR_OWNER_RID __MSABI_LONG(0x00000000)
4020 #define SECURITY_CREATOR_GROUP_RID __MSABI_LONG(0x00000001)
4021 #define SECURITY_CREATOR_OWNER_SERVER_RID __MSABI_LONG(0x00000002)
4022 #define SECURITY_CREATOR_GROUP_SERVER_RID __MSABI_LONG(0x00000003)
4023 #define SECURITY_CREATOR_OWNER_RIGHTS_RID __MSABI_LONG(0x00000004)
4026 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
4029 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
4030 #define SECURITY_DIALUP_RID __MSABI_LONG(0x00000001)
4031 #define SECURITY_NETWORK_RID __MSABI_LONG(0x00000002)
4032 #define SECURITY_BATCH_RID __MSABI_LONG(0x00000003)
4033 #define SECURITY_INTERACTIVE_RID __MSABI_LONG(0x00000004)
4034 #define SECURITY_LOGON_IDS_RID __MSABI_LONG(0x00000005)
4035 #define SECURITY_SERVICE_RID __MSABI_LONG(0x00000006)
4036 #define SECURITY_ANONYMOUS_LOGON_RID __MSABI_LONG(0x00000007)
4037 #define SECURITY_PROXY_RID __MSABI_LONG(0x00000008)
4038 #define SECURITY_ENTERPRISE_CONTROLLERS_RID __MSABI_LONG(0x00000009)
4039 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
4040 #define SECURITY_PRINCIPAL_SELF_RID __MSABI_LONG(0x0000000A)
4041 #define SECURITY_AUTHENTICATED_USER_RID __MSABI_LONG(0x0000000B)
4042 #define SECURITY_RESTRICTED_CODE_RID __MSABI_LONG(0x0000000C)
4043 #define SECURITY_TERMINAL_SERVER_RID __MSABI_LONG(0x0000000D)
4044 #define SECURITY_REMOTE_LOGON_RID __MSABI_LONG(0x0000000E)
4045 #define SECURITY_THIS_ORGANIZATION_RID __MSABI_LONG(0x0000000F)
4046 #define SECURITY_LOCAL_SYSTEM_RID __MSABI_LONG(0x00000012)
4047 #define SECURITY_LOCAL_SERVICE_RID __MSABI_LONG(0x00000013)
4048 #define SECURITY_NETWORK_SERVICE_RID __MSABI_LONG(0x00000014)
4049 #define SECURITY_NT_NON_UNIQUE __MSABI_LONG(0x00000015)
4050 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID __MSABI_LONG(0x00000016)
4051 #define SECURITY_BUILTIN_DOMAIN_RID __MSABI_LONG(0x00000020)
4052 #define SECURITY_WRITE_RESTRICTED_CODE_RID __MSABI_LONG(0x00000021)
4054 #define SECURITY_PACKAGE_BASE_RID __MSABI_LONG(0x00000040)
4055 #define SECURITY_PACKAGE_NTLM_RID __MSABI_LONG(0x0000000A)
4056 #define SECURITY_PACKAGE_SCHANNEL_RID __MSABI_LONG(0x0000000E)
4057 #define SECURITY_PACKAGE_DIGEST_RID __MSABI_LONG(0x00000015)
4058 #define SECURITY_CRED_TYPE_BASE_RID __MSABI_LONG(0x00000041)
4059 #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID __MSABI_LONG(0x00000001)
4060 #define SECURITY_MIN_BASE_RID __MSABI_LONG(0x00000050)
4061 #define SECURITY_SERVICE_ID_BASE_RID __MSABI_LONG(0x00000050)
4062 #define SECURITY_RESERVED_ID_BASE_RID __MSABI_LONG(0x00000051)
4063 #define SECURITY_APPPOOL_ID_BASE_RID __MSABI_LONG(0x00000052)
4064 #define SECURITY_VIRTUALSERVER_ID_BASE_RID __MSABI_LONG(0x00000053)
4065 #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID __MSABI_LONG(0x00000054)
4066 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID __MSABI_LONG(0x00000055)
4067 #define SECURITY_WMIHOST_ID_BASE_RID __MSABI_LONG(0x00000056)
4068 #define SECURITY_TASK_ID_BASE_RID __MSABI_LONG(0x00000057)
4069 #define SECURITY_NFS_ID_BASE_RID __MSABI_LONG(0x00000058)
4070 #define SECURITY_COM_ID_BASE_RID __MSABI_LONG(0x00000059)
4071 #define SECURITY_MAX_BASE_RID __MSABI_LONG(0x0000006F)
4072 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID __MSABI_LONG(0x00000070)
4073 #define SECURITY_MAX_ALWAYS_FILTERED __MSABI_LONG(0x000003E7)
4074 #define SECURITY_MIN_NEVER_FILTERED __MSABI_LONG(0x000003E8)
4075 #define SECURITY_OTHER_ORGANIZATION_RID __MSABI_LONG(0x000003E8)
4077 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS __MSABI_LONG(0x000001F2)
4079 #define FOREST_USER_RID_MAX __MSABI_LONG(0x000001F3)
4080 #define DOMAIN_USER_RID_ADMIN __MSABI_LONG(0x000001F4)
4081 #define DOMAIN_USER_RID_GUEST __MSABI_LONG(0x000001F5)
4082 #define DOMAIN_USER_RID_KRBTGT __MSABI_LONG(0x000001F6)
4083 #define DOMAIN_USER_RID_MAX __MSABI_LONG(0x000003E7)
4085 #define DOMAIN_GROUP_RID_ADMINS __MSABI_LONG(0x00000200)
4086 #define DOMAIN_GROUP_RID_USERS __MSABI_LONG(0x00000201)
4087 #define DOMAIN_GROUP_RID_GUESTS __MSABI_LONG(0x00000202)
4088 #define DOMAIN_GROUP_RID_COMPUTERS __MSABI_LONG(0x00000203)
4089 #define DOMAIN_GROUP_RID_CONTROLLERS __MSABI_LONG(0x00000204)
4090 #define DOMAIN_GROUP_RID_CERT_ADMINS __MSABI_LONG(0x00000205)
4091 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS __MSABI_LONG(0x00000206)
4092 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS __MSABI_LONG(0x00000207)
4093 #define DOMAIN_GROUP_RID_POLICY_ADMINS __MSABI_LONG(0x00000208)
4094 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS __MSABI_LONG(0x00000209)
4096 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
4098 #define SECURITY_APP_PACKAGE_AUTHORITY {0,0,0,0,0,15}
4099 #define SECURITY_APP_PACKAGE_BASE_RID __MSABI_LONG(0x000000002)
4100 #define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT __MSABI_LONG(0x000000002)
4101 #define SECURITY_APP_PACKAGE_RID_COUNT __MSABI_LONG(0x000000008)
4102 #define SECURITY_CAPABILITY_BASE_RID __MSABI_LONG(0x000000003)
4103 #define SECURITY_CAPABILITY_APP_RID __MSABI_LONG(0x000000400)
4104 #define SECURITY_BUILTIN_CAPABILITY_RID_COUNT __MSABI_LONG(0x000000002)
4105 #define SECURITY_CAPABILITY_RID_COUNT __MSABI_LONG(0x000000005)
4106 #define SECURITY_PARENT_PACKAGE_RID_COUNT SECURITY_APP_PACKAGE_RID_COUNT
4107 #define SECURITY_CHILD_PACKAGE_RID_COUNT __MSABI_LONG(0x00000000c)
4108 #define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE __MSABI_LONG(0x000000001)
4110 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
4111 #define SECURITY_MANDATORY_UNTRUSTED_RID __MSABI_LONG(0x00000000)
4112 #define SECURITY_MANDATORY_LOW_RID __MSABI_LONG(0x00001000)
4113 #define SECURITY_MANDATORY_MEDIUM_RID __MSABI_LONG(0x00002000)
4114 #define SECURITY_MANDATORY_MEDIUM_PLUS_RID __MSABI_LONG(0x00002100)
4115 #define SECURITY_MANDATORY_HIGH_RID __MSABI_LONG(0x00003000)
4116 #define SECURITY_MANDATORY_SYSTEM_RID __MSABI_LONG(0x00004000)
4117 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID __MSABI_LONG(0x00005000)
4118 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
4120 #define MANDATORY_LEVEL_TO_MANDATORY_RID(ML) (ML * 0x1000)
4122 #define DOMAIN_ALIAS_RID_ADMINS __MSABI_LONG(0x00000220)
4123 #define DOMAIN_ALIAS_RID_USERS __MSABI_LONG(0x00000221)
4124 #define DOMAIN_ALIAS_RID_GUESTS __MSABI_LONG(0x00000222)
4125 #define DOMAIN_ALIAS_RID_POWER_USERS __MSABI_LONG(0x00000223)
4127 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS __MSABI_LONG(0x00000224)
4128 #define DOMAIN_ALIAS_RID_SYSTEM_OPS __MSABI_LONG(0x00000225)
4129 #define DOMAIN_ALIAS_RID_PRINT_OPS __MSABI_LONG(0x00000226)
4130 #define DOMAIN_ALIAS_RID_BACKUP_OPS __MSABI_LONG(0x00000227)
4132 #define DOMAIN_ALIAS_RID_REPLICATOR __MSABI_LONG(0x00000228)
4133 #define DOMAIN_ALIAS_RID_RAS_SERVERS __MSABI_LONG(0x00000229)
4134 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS __MSABI_LONG(0x0000022A)
4135 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS __MSABI_LONG(0x0000022B)
4136 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS __MSABI_LONG(0x0000022C)
4137 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS __MSABI_LONG(0x0000022D)
4139 #define DOMAIN_ALIAS_RID_MONITORING_USERS __MSABI_LONG(0x0000022E)
4140 #define DOMAIN_ALIAS_RID_LOGGING_USERS __MSABI_LONG(0x0000022F)
4141 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS __MSABI_LONG(0x00000230)
4142 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS __MSABI_LONG(0x00000231)
4143 #define DOMAIN_ALIAS_RID_DCOM_USERS __MSABI_LONG(0x00000232)
4144 #define DOMAIN_ALIAS_RID_IUSERS __MSABI_LONG(0x00000238)
4145 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS __MSABI_LONG(0x00000239)
4146 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP __MSABI_LONG(0x0000023B)
4147 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP __MSABI_LONG(0x0000023C)
4148 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP __MSABI_LONG(0x0000023D)
4149 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP __MSABI_LONG(0x0000023E)
4151 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
4153 #define SECURITY_PACKAGE_RID_COUNT __MSABI_LONG(2)
4154 #define SECURITY_CRED_TYPE_RID_COUNT __MSABI_LONG(2)
4155 #define SECURITY_LOGON_IDS_RID_COUNT __MSABI_LONG(3)
4156 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT __MSABI_LONG(3)
4157 #define SECURITY_SERVICE_ID_RID_COUNT __MSABI_LONG(6)
4158 #define SECURITY_APPPOOL_ID_RID_COUNT __MSABI_LONG(6)
4159 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT __MSABI_LONG(6)
4160 #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT __MSABI_LONG(6)
4161 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT __MSABI_LONG(6)
4162 #define SECURITY_WMIHOST_ID_RID_COUNT __MSABI_LONG(6)
4163 #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT __MSABI_LONG(6)
4165 #define SYSTEM_LUID { 0x3e7, 0x0 }
4166 #define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
4167 #define LOCALSERVICE_LUID { 0x3e5, 0x0 }
4168 #define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
4169 #define IUSER_LUID { 0x3e3, 0x0 }
4175 WinCreatorOwnerSid
= 3,
4176 WinCreatorGroupSid
= 4,
4177 WinCreatorOwnerServerSid
= 5,
4178 WinCreatorGroupServerSid
= 6,
4179 WinNtAuthoritySid
= 7,
4183 WinInteractiveSid
= 11,
4185 WinAnonymousSid
= 13,
4187 WinEnterpriseControllersSid
= 15,
4189 WinAuthenticatedUserSid
= 17,
4190 WinRestrictedCodeSid
= 18,
4191 WinTerminalServerSid
= 19,
4192 WinRemoteLogonIdSid
= 20,
4193 WinLogonIdsSid
= 21,
4194 WinLocalSystemSid
= 22,
4195 WinLocalServiceSid
= 23,
4196 WinNetworkServiceSid
= 24,
4197 WinBuiltinDomainSid
= 25,
4198 WinBuiltinAdministratorsSid
= 26,
4199 WinBuiltinUsersSid
= 27,
4200 WinBuiltinGuestsSid
= 28,
4201 WinBuiltinPowerUsersSid
= 29,
4202 WinBuiltinAccountOperatorsSid
= 30,
4203 WinBuiltinSystemOperatorsSid
= 31,
4204 WinBuiltinPrintOperatorsSid
= 32,
4205 WinBuiltinBackupOperatorsSid
= 33,
4206 WinBuiltinReplicatorSid
= 34,
4207 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
4208 WinBuiltinRemoteDesktopUsersSid
= 36,
4209 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
4210 WinAccountAdministratorSid
= 38,
4211 WinAccountGuestSid
= 39,
4212 WinAccountKrbtgtSid
= 40,
4213 WinAccountDomainAdminsSid
= 41,
4214 WinAccountDomainUsersSid
= 42,
4215 WinAccountDomainGuestsSid
= 43,
4216 WinAccountComputersSid
= 44,
4217 WinAccountControllersSid
= 45,
4218 WinAccountCertAdminsSid
= 46,
4219 WinAccountSchemaAdminsSid
= 47,
4220 WinAccountEnterpriseAdminsSid
= 48,
4221 WinAccountPolicyAdminsSid
= 49,
4222 WinAccountRasAndIasServersSid
= 50,
4223 WinNTLMAuthenticationSid
= 51,
4224 WinDigestAuthenticationSid
= 52,
4225 WinSChannelAuthenticationSid
= 53,
4226 WinThisOrganizationSid
= 54,
4227 WinOtherOrganizationSid
= 55,
4228 WinBuiltinIncomingForestTrustBuildersSid
= 56,
4229 WinBuiltinPerfMonitoringUsersSid
= 57,
4230 WinBuiltinPerfLoggingUsersSid
= 58,
4231 WinBuiltinAuthorizationAccessSid
= 59,
4232 WinBuiltinTerminalServerLicenseServersSid
= 60,
4233 WinBuiltinDCOMUsersSid
= 61,
4234 WinBuiltinIUsersSid
= 62,
4236 WinBuiltinCryptoOperatorsSid
= 64,
4237 WinUntrustedLabelSid
= 65,
4238 WinLowLabelSid
= 66,
4239 WinMediumLabelSid
= 67,
4240 WinHighLabelSid
= 68,
4241 WinSystemLabelSid
= 69,
4242 WinWriteRestrictedCodeSid
= 70,
4243 WinCreatorOwnerRightsSid
= 71,
4244 WinCacheablePrincipalsGroupSid
= 72,
4245 WinNonCacheablePrincipalsGroupSid
= 73,
4246 WinEnterpriseReadonlyControllersSid
= 74,
4247 WinAccountReadonlyControllersSid
= 75,
4248 WinBuiltinEventLogReadersGroup
= 76,
4249 WinNewEnterpriseReadonlyControllersSid
= 77,
4250 WinBuiltinCertSvcDComAccessGroup
= 78,
4251 WinMediumPlusLabelSid
= 79,
4252 WinLocalLogonSid
= 80,
4253 WinConsoleLogonSid
= 81,
4254 WinThisOrganizationCertificateSid
= 82,
4255 WinApplicationPackageAuthoritySid
= 83,
4256 WinBuiltinAnyPackageSid
= 84,
4257 WinCapabilityInternetClientSid
= 85,
4258 WinCapabilityInternetClientServerSid
= 86,
4259 WinCapabilityPrivateNetworkClientServerSid
= 87,
4260 WinCapabilityPicturesLibrarySid
= 88,
4261 WinCapabilityVideosLibrarySid
= 89,
4262 WinCapabilityMusicLibrarySid
= 90,
4263 WinCapabilityDocumentsLibrarySid
= 91,
4264 WinCapabilitySharedUserCertificatesSid
= 92,
4265 WinCapabilityEnterpriseAuthenticationSid
= 93,
4266 WinCapabilityRemovableStorageSid
= 94,
4267 WinBuiltinRDSRemoteAccessServersSid
= 95,
4268 WinBuiltinRDSEndpointServersSid
= 96,
4269 WinBuiltinRDSManagementServersSid
= 97,
4270 WinUserModeDriversSid
= 98,
4271 WinBuiltinHyperVAdminsSid
= 99,
4272 WinAccountCloneableControllersSid
= 100,
4273 WinBuiltinAccessControlAssistanceOperatorsSid
= 101,
4274 WinBuiltinRemoteManagementUsersSid
= 102,
4275 WinAuthenticationAuthorityAssertedSid
= 103,
4276 WinAuthenticationServiceAssertedSid
= 104,
4277 WinLocalAccountSid
= 105,
4278 WinLocalAccountAndAdministratorSid
= 106,
4279 WinAccountProtectedUsersSid
= 107,
4280 } WELL_KNOWN_SID_TYPE
;
4286 typedef struct _TOKEN_USER
{
4287 SID_AND_ATTRIBUTES User
;
4288 } TOKEN_USER
, *PTOKEN_USER
;
4294 typedef struct _TOKEN_GROUPS
{
4296 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
4297 } TOKEN_GROUPS
, *PTOKEN_GROUPS
;
4300 * LUID_AND_ATTRIBUTES
4303 typedef union _LARGE_INTEGER
{
4305 #ifdef WORDS_BIGENDIAN
4313 #ifndef NONAMELESSSTRUCT
4315 #ifdef WORDS_BIGENDIAN
4325 } LARGE_INTEGER
, *PLARGE_INTEGER
;
4327 typedef union _ULARGE_INTEGER
{
4329 #ifdef WORDS_BIGENDIAN
4337 #ifndef NONAMELESSSTRUCT
4339 #ifdef WORDS_BIGENDIAN
4349 } ULARGE_INTEGER
, *PULARGE_INTEGER
;
4352 * Locally Unique Identifier
4355 typedef struct _LUID
{
4360 #include <pshpack4.h>
4361 typedef struct _LUID_AND_ATTRIBUTES
{
4364 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
4365 #include <poppack.h>
4371 typedef struct _PRIVILEGE_SET
{
4372 DWORD PrivilegeCount
;
4374 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
4375 } PRIVILEGE_SET
, *PPRIVILEGE_SET
;
4381 typedef struct _TOKEN_PRIVILEGES
{
4382 DWORD PrivilegeCount
;
4383 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
4384 } TOKEN_PRIVILEGES
, *PTOKEN_PRIVILEGES
;
4390 typedef struct _TOKEN_OWNER
{
4392 } TOKEN_OWNER
, *PTOKEN_OWNER
;
4395 * TOKEN_PRIMARY_GROUP
4398 typedef struct _TOKEN_PRIMARY_GROUP
{
4400 } TOKEN_PRIMARY_GROUP
, *PTOKEN_PRIMARY_GROUP
;
4404 * TOKEN_DEFAULT_DACL
4407 typedef struct _TOKEN_DEFAULT_DACL
{
4409 } TOKEN_DEFAULT_DACL
, *PTOKEN_DEFAULT_DACL
;
4415 #define TOKEN_SOURCE_LENGTH 8
4417 typedef struct _TOKEN_SOURCE
{
4418 char SourceName
[TOKEN_SOURCE_LENGTH
];
4419 LUID SourceIdentifier
;
4420 } TOKEN_SOURCE
, *PTOKEN_SOURCE
;
4426 typedef enum tagTOKEN_TYPE
{
4432 * SECURITY_IMPERSONATION_LEVEL
4435 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
4437 SecurityIdentification
,
4438 SecurityImpersonation
,
4440 } SECURITY_IMPERSONATION_LEVEL
, *PSECURITY_IMPERSONATION_LEVEL
;
4442 #define SECURITY_DYNAMIC_TRACKING (TRUE)
4443 #define SECURITY_STATIC_TRACKING (FALSE)
4445 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
,
4446 * PSECURITY_CONTEXT_TRACKING_MODE
;
4448 * Quality of Service
4451 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
4453 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
4454 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
4455 BOOLEAN EffectiveOnly
;
4456 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
4462 #include <pshpack4.h>
4463 typedef struct _TOKEN_STATISTICS
{
4465 LUID AuthenticationId
;
4466 LARGE_INTEGER ExpirationTime
;
4467 TOKEN_TYPE TokenType
;
4468 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
4469 DWORD DynamicCharged
;
4470 DWORD DynamicAvailable
;
4472 DWORD PrivilegeCount
;
4475 #include <poppack.h>
4477 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
{
4480 PSID_AND_ATTRIBUTES Sids
;
4481 DWORD RestrictedSidCount
;
4482 DWORD RestrictedSidLength
;
4483 PSID_AND_ATTRIBUTES RestrictedSids
;
4484 DWORD PrivilegeCount
;
4485 DWORD PrivilegeLength
;
4486 PLUID_AND_ATTRIBUTES Privileges
;
4487 LUID AuthenticationId
;
4488 } TOKEN_GROUPS_AND_PRIVILEGES
, * PTOKEN_GROUPS_AND_PRIVILEGES
;
4490 typedef struct _TOKEN_ORIGIN
{
4491 LUID OriginatingLogonSession
;
4492 } TOKEN_ORIGIN
, * PTOKEN_ORIGIN
;
4494 typedef struct _TOKEN_LINKED_TOKEN
{
4496 } TOKEN_LINKED_TOKEN
, * PTOKEN_LINKED_TOKEN
;
4498 typedef struct _TOKEN_ELEVATION
{
4499 DWORD TokenIsElevated
;
4500 } TOKEN_ELEVATION
, * PTOKEN_ELEVATION
;
4502 typedef struct _TOKEN_MANDATORY_LABEL
{
4503 SID_AND_ATTRIBUTES Label
;
4504 } TOKEN_MANDATORY_LABEL
, * PTOKEN_MANDATORY_LABEL
;
4506 #define TOKEN_MANDATORY_POLICY_OFF 0x0
4507 #define TOKEN_MANDATORY_POLICY_NO_WRITEUP 0x1
4508 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
4509 #define TOKEN_MANDATORY_POLICY_VALID_MASK 0x3
4511 typedef struct _TOKEN_MANDATORY_POLICY
{
4513 } TOKEN_MANDATORY_POLICY
, *PTOKEN_MANDATORY_POLICY
;
4515 typedef struct _TOKEN_APPCONTAINER_INFORMATION
{
4516 PSID TokenAppContainer
;
4517 } TOKEN_APPCONTAINER_INFORMATION
, * PTOKEN_APPCONTAINER_INFORMATION
;
4519 #define POLICY_AUDIT_SUBCATEGORY_COUNT 53
4521 typedef struct _TOKEN_AUDIT_POLICY
{
4522 BYTE PerUserPolicy
[((POLICY_AUDIT_SUBCATEGORY_COUNT
) >> 1) + 1];
4523 } TOKEN_AUDIT_POLICY
, *PTOKEN_AUDIT_POLICY
;
4525 typedef struct _TOKEN_ACCESS_INFORMATION
{
4526 PSID_AND_ATTRIBUTES_HASH SidHash
;
4527 PSID_AND_ATTRIBUTES_HASH RestrictedSidHash
;
4528 PTOKEN_PRIVILEGES Privileges
;
4529 LUID AuthenticationId
;
4530 TOKEN_TYPE TokenType
;
4531 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
4532 TOKEN_MANDATORY_POLICY MandatoryPolicy
;
4534 } TOKEN_ACCESS_INFORMATION
, *PTOKEN_ACCESS_INFORMATION
;
4536 typedef struct _TOKEN_CONTROL
{
4538 LUID AuthenticationId
;
4540 TOKEN_SOURCE TokenSource
;
4541 } TOKEN_CONTROL
, *PTOKEN_CONTROL
;
4547 /* ACEs, directly starting after an ACL */
4548 typedef struct _ACE_HEADER
{
4552 } ACE_HEADER
,*PACE_HEADER
;
4555 #define ACCESS_MIN_MS_ACE_TYPE 0x0
4556 #define ACCESS_ALLOWED_ACE_TYPE 0x0
4557 #define ACCESS_DENIED_ACE_TYPE 0x1
4558 #define SYSTEM_AUDIT_ACE_TYPE 0x2
4559 #define SYSTEM_ALARM_ACE_TYPE 0x3
4560 #define ACCESS_MAX_MS_V2_ACE_TYPE 0x3
4561 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE 0x4
4562 #define ACCESS_MAX_MS_V3_ACE_TYPE 0x4
4563 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE 0x5
4564 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE 0x5
4565 #define ACCESS_DENIED_OBJECT_ACE_TYPE 0x6
4566 #define ACCESS_AUDIT_OBJECT_ACE_TYPE 0x7
4567 #define ACCESS_ALARM_OBJECT_ACE_TYPE 0x8
4568 #define ACCESS_MAX_MS_V4_ACE_TYPE 0x8
4569 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE 0x9
4570 #define ACCESS_DENIED_CALLBACK_ACE_TYPE 0xa
4571 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE 0xb
4572 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE 0xc
4573 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE 0xd
4574 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE 0xe
4575 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE 0xf
4576 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE 0x10
4577 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11
4578 #define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE 0x12
4579 #define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE 0x13
4580 #define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE 0x14
4581 #define ACCESS_MAX_MS_V5_ACE_TYPE 0x14
4583 /* inherit AceFlags */
4584 #define OBJECT_INHERIT_ACE 0x01
4585 #define CONTAINER_INHERIT_ACE 0x02
4586 #define NO_PROPAGATE_INHERIT_ACE 0x04
4587 #define INHERIT_ONLY_ACE 0x08
4588 #define INHERITED_ACE 0x10
4589 #define VALID_INHERIT_FLAGS 0x1F
4591 /* AceFlags mask for what events we (should) audit */
4592 #define SUCCESSFUL_ACCESS_ACE_FLAG 0x40
4593 #define FAILED_ACCESS_ACE_FLAG 0x80
4595 /* different ACEs depending on AceType
4596 * SidStart marks the begin of a SID
4597 * so the thing finally looks like this:
4602 typedef struct _ACCESS_ALLOWED_ACE
{
4606 } ACCESS_ALLOWED_ACE
,*PACCESS_ALLOWED_ACE
;
4608 typedef struct _ACCESS_DENIED_ACE
{
4612 } ACCESS_DENIED_ACE
,*PACCESS_DENIED_ACE
;
4614 typedef struct _SYSTEM_AUDIT_ACE
{
4618 } SYSTEM_AUDIT_ACE
,*PSYSTEM_AUDIT_ACE
;
4620 typedef struct _SYSTEM_ALARM_ACE
{
4624 } SYSTEM_ALARM_ACE
,*PSYSTEM_ALARM_ACE
;
4626 typedef struct _SYSTEM_MANDATORY_LABEL_ACE
{
4630 } SYSTEM_MANDATORY_LABEL_ACE
,*PSYSTEM_MANDATORY_LABEL_ACE
;
4632 typedef struct _ACCESS_ALLOWED_OBJECT_ACE
{
4637 GUID InheritedObjectType
;
4639 } ACCESS_ALLOWED_OBJECT_ACE
, *PACCESS_ALLOWED_OBJECT_ACE
;
4641 typedef struct _ACCESS_DENIED_OBJECT_ACE
{
4646 GUID InheritedObjectType
;
4648 } ACCESS_DENIED_OBJECT_ACE
, *PACCESS_DENIED_OBJECT_ACE
;
4650 typedef struct _SYSTEM_AUDIT_OBJECT_ACE
{
4655 GUID InheritedObjectType
;
4657 } SYSTEM_AUDIT_OBJECT_ACE
, *PSYSTEM_AUDIT_OBJECT_ACE
;
4659 typedef struct _SYSTEM_ALARM_OBJECT_ACE
{
4664 GUID InheritedObjectType
;
4666 } SYSTEM_ALARM_OBJECT_ACE
, *PSYSTEM_ALARM_OBJECT_aCE
;
4668 typedef struct _ACCESS_ALLOWED_CALLBACK_ACE
{
4672 } ACCESS_ALLOWED_CALLBACK_ACE
,*PACCESS_ALLOWED_CALLBACK_ACE
;
4674 typedef struct _ACCESS_DENIED_CALLBACK_ACE
{
4678 } ACCESS_DENIED_CALLBACK_ACE
,*PACCESS_DENIED_CALLBACK_ACE
;
4680 typedef struct _SYSTEM_AUDIT_CALLBACK_ACE
{
4684 } SYSTEM_AUDIT_CALLBACK_ACE
,*PSYSTEM_AUDIT_CALLBACK_ACE
;
4686 typedef struct _SYSTEM_ALARM_CALLBACK_ACE
{
4690 } SYSTEM_ALARM_CALLBACK_ACE
,*PSYSTEM_ALARM_CALLBACK_ACE
;
4692 typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
{
4697 GUID InheritedObjectType
;
4699 } ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
, *PACCESS_ALLOWED_CALLBACK_OBJECT_ACE
;
4701 typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE
{
4706 GUID InheritedObjectType
;
4708 } ACCESS_DENIED_CALLBACK_OBJECT_ACE
, *PACCESS_DENIED_CALLBACK_OBJECT_ACE
;
4710 typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
{
4715 GUID InheritedObjectType
;
4717 } SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
, *PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE
;
4719 typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE
{
4724 GUID InheritedObjectType
;
4726 } SYSTEM_ALARM_CALLBACK_OBJECT_ACE
, *PSYSTEM_ALARM_CALLBACK_OBJECT_ACE
;
4728 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
4729 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
4730 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
4731 #define SYSTEM_MANDATORY_LABEL_VALID_MASK 0x7
4733 typedef enum tagSID_NAME_USE
{
4738 SidTypeWellKnownGroup
,
4739 SidTypeDeletedAccount
,
4742 } SID_NAME_USE
,*PSID_NAME_USE
;
4744 #define ACE_OBJECT_TYPE_PRESENT 0x1
4745 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
4749 /* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */
4751 #define DELETE 0x00010000
4752 #define READ_CONTROL 0x00020000
4753 #define WRITE_DAC 0x00040000
4754 #define WRITE_OWNER 0x00080000
4755 #define SYNCHRONIZE 0x00100000
4756 #define STANDARD_RIGHTS_REQUIRED 0x000f0000
4758 #define STANDARD_RIGHTS_READ READ_CONTROL
4759 #define STANDARD_RIGHTS_WRITE READ_CONTROL
4760 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
4762 #define STANDARD_RIGHTS_ALL 0x001f0000
4764 #define SPECIFIC_RIGHTS_ALL 0x0000ffff
4766 #define GENERIC_READ 0x80000000
4767 #define GENERIC_WRITE 0x40000000
4768 #define GENERIC_EXECUTE 0x20000000
4769 #define GENERIC_ALL 0x10000000
4771 #define MAXIMUM_ALLOWED 0x02000000
4772 #define ACCESS_SYSTEM_SECURITY 0x01000000
4774 #define EVENT_QUERY_STATE 0x0001
4775 #define EVENT_MODIFY_STATE 0x0002
4776 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
4778 #define SEMAPHORE_QUERY_STATE 0x0001
4779 #define SEMAPHORE_MODIFY_STATE 0x0002
4780 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
4782 #define MUTANT_QUERY_STATE 0x0001
4783 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
4785 #define JOB_OBJECT_ASSIGN_PROCESS 0x0001
4786 #define JOB_OBJECT_SET_ATTRIBUTES 0x0002
4787 #define JOB_OBJECT_QUERY 0x0004
4788 #define JOB_OBJECT_TERMINATE 0x0008
4789 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x0010
4790 #define JOB_OBJECT_IMPERSONATE 0x0020
4791 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3f)
4793 #define TIMER_QUERY_STATE 0x0001
4794 #define TIMER_MODIFY_STATE 0x0002
4795 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
4797 #define PROCESS_TERMINATE 0x0001
4798 #define PROCESS_CREATE_THREAD 0x0002
4799 #define PROCESS_VM_OPERATION 0x0008
4800 #define PROCESS_VM_READ 0x0010
4801 #define PROCESS_VM_WRITE 0x0020
4802 #define PROCESS_DUP_HANDLE 0x0040
4803 #define PROCESS_CREATE_PROCESS 0x0080
4804 #define PROCESS_SET_QUOTA 0x0100
4805 #define PROCESS_SET_INFORMATION 0x0200
4806 #define PROCESS_QUERY_INFORMATION 0x0400
4807 #define PROCESS_SUSPEND_RESUME 0x0800
4808 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
4809 #define PROCESS_SET_LIMITED_INFORMATION 0x2000
4810 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff)
4812 #define THREAD_TERMINATE 0x0001
4813 #define THREAD_SUSPEND_RESUME 0x0002
4814 #define THREAD_GET_CONTEXT 0x0008
4815 #define THREAD_SET_CONTEXT 0x0010
4816 #define THREAD_SET_INFORMATION 0x0020
4817 #define THREAD_QUERY_INFORMATION 0x0040
4818 #define THREAD_SET_THREAD_TOKEN 0x0080
4819 #define THREAD_IMPERSONATE 0x0100
4820 #define THREAD_DIRECT_IMPERSONATION 0x0200
4821 #define THREAD_SET_LIMITED_INFORMATION 0x0400
4822 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
4823 #define THREAD_RESUME 0x1000
4824 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff)
4826 #define THREAD_BASE_PRIORITY_LOWRT 15
4827 #define THREAD_BASE_PRIORITY_MAX 2
4828 #define THREAD_BASE_PRIORITY_MIN -2
4829 #define THREAD_BASE_PRIORITY_IDLE -15
4831 typedef struct _QUOTA_LIMITS
{
4832 SIZE_T PagedPoolLimit
;
4833 SIZE_T NonPagedPoolLimit
;
4834 SIZE_T MinimumWorkingSetSize
;
4835 SIZE_T MaximumWorkingSetSize
;
4836 SIZE_T PagefileLimit
;
4837 LARGE_INTEGER TimeLimit
;
4838 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
4840 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
4841 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
4842 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
4843 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
4844 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
4846 typedef union _RATE_QUOTA_LIMIT
{
4849 DWORD RatePercent
:7;
4852 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
4854 typedef struct _QUOTA_LIMITS_EX
{
4855 SIZE_T PagedPoolLimit
;
4856 SIZE_T NonPagedPoolLimit
;
4857 SIZE_T MinimumWorkingSetSize
;
4858 SIZE_T MaximumWorkingSetSize
;
4859 SIZE_T PagefileLimit
;
4860 LARGE_INTEGER TimeLimit
;
4861 SIZE_T WorkingSetLimit
;
4866 RATE_QUOTA_LIMIT CpuRateLimit
;
4867 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
4869 #define SECTION_QUERY 0x0001
4870 #define SECTION_MAP_WRITE 0x0002
4871 #define SECTION_MAP_READ 0x0004
4872 #define SECTION_MAP_EXECUTE 0x0008
4873 #define SECTION_EXTEND_SIZE 0x0010
4874 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
4875 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x01f)
4877 #define FILE_READ_DATA 0x0001 /* file & pipe */
4878 #define FILE_LIST_DIRECTORY 0x0001 /* directory */
4879 #define FILE_WRITE_DATA 0x0002 /* file & pipe */
4880 #define FILE_ADD_FILE 0x0002 /* directory */
4881 #define FILE_APPEND_DATA 0x0004 /* file */
4882 #define FILE_ADD_SUBDIRECTORY 0x0004 /* directory */
4883 #define FILE_CREATE_PIPE_INSTANCE 0x0004 /* named pipe */
4884 #define FILE_READ_EA 0x0008 /* file & directory */
4885 #define FILE_READ_PROPERTIES FILE_READ_EA
4886 #define FILE_WRITE_EA 0x0010 /* file & directory */
4887 #define FILE_WRITE_PROPERTIES FILE_WRITE_EA
4888 #define FILE_EXECUTE 0x0020 /* file */
4889 #define FILE_TRAVERSE 0x0020 /* directory */
4890 #define FILE_DELETE_CHILD 0x0040 /* directory */
4891 #define FILE_READ_ATTRIBUTES 0x0080 /* all */
4892 #define FILE_WRITE_ATTRIBUTES 0x0100 /* all */
4893 #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
4895 #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | \
4896 FILE_READ_ATTRIBUTES | FILE_READ_EA | \
4898 #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \
4899 FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \
4900 FILE_APPEND_DATA | SYNCHRONIZE)
4901 #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
4902 FILE_READ_ATTRIBUTES | SYNCHRONIZE)
4904 #define DUPLICATE_CLOSE_SOURCE 0x00000001
4905 #define DUPLICATE_SAME_ACCESS 0x00000002
4907 #define DUPLICATE_MAKE_GLOBAL 0x80000000 /* Not a Windows flag */
4910 /* File attribute flags */
4911 #define FILE_SHARE_READ 0x00000001
4912 #define FILE_SHARE_WRITE 0x00000002
4913 #define FILE_SHARE_DELETE 0x00000004
4915 #define FILE_ATTRIBUTE_READONLY 0x00000001
4916 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
4917 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
4918 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
4919 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
4920 #define FILE_ATTRIBUTE_DEVICE 0x00000040
4921 #define FILE_ATTRIBUTE_NORMAL 0x00000080
4922 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
4923 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
4924 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
4925 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
4926 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
4927 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
4928 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
4929 #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000
4930 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
4931 #define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000
4932 #define FILE_ATTRIBUTE_EA 0x00040000
4934 /* File notification flags */
4935 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
4936 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
4937 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
4938 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
4939 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
4940 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
4941 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
4942 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
4943 #define FILE_NOTIFY_CHANGE_EA 0x00000080
4944 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
4945 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
4946 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
4947 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
4949 #define FILE_ACTION_ADDED 0x00000001
4950 #define FILE_ACTION_REMOVED 0x00000002
4951 #define FILE_ACTION_MODIFIED 0x00000003
4952 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
4953 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
4954 #define FILE_ACTION_ADDED_STREAM 0x00000006
4955 #define FILE_ACTION_REMOVED_STREAM 0x00000007
4956 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
4957 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
4958 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000a
4959 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000b
4961 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
4962 #define FILE_CASE_PRESERVED_NAMES 0x00000002
4963 #define FILE_UNICODE_ON_DISK 0x00000004
4964 #define FILE_PERSISTENT_ACLS 0x00000008
4965 #define FILE_FILE_COMPRESSION 0x00000010
4966 #define FILE_VOLUME_QUOTAS 0x00000020
4967 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
4968 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
4969 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
4970 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
4971 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
4972 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
4973 #define FILE_NAMED_STREAMS 0x00040000
4974 #define FILE_READ_ONLY_VOLUME 0x00080000
4975 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
4976 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
4977 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
4978 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
4979 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
4980 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
4981 #define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000
4982 #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000
4983 #define FILE_SUPPORTS_SPARSE_VDL 0x10000000
4984 #define FILE_DAX_VOLUME 0x20000000
4985 #define FILE_SUPPORTS_GHOSTING 0x40000000
4987 /* File alignments (NT) */
4988 #define FILE_BYTE_ALIGNMENT 0x00000000
4989 #define FILE_WORD_ALIGNMENT 0x00000001
4990 #define FILE_LONG_ALIGNMENT 0x00000003
4991 #define FILE_QUAD_ALIGNMENT 0x00000007
4992 #define FILE_OCTA_ALIGNMENT 0x0000000f
4993 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
4994 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
4995 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
4996 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
4997 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
4999 #define COMPRESSION_FORMAT_NONE 0
5000 #define COMPRESSION_FORMAT_DEFAULT 1
5001 #define COMPRESSION_FORMAT_LZNT1 2
5002 #define COMPRESSION_ENGINE_STANDARD 0
5003 #define COMPRESSION_ENGINE_MAXIMUM 256
5005 #define MAILSLOT_NO_MESSAGE ((DWORD)-1)
5006 #define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
5008 #define REG_NONE 0 /* no type */
5009 #define REG_SZ 1 /* string type (ASCII) */
5010 #define REG_EXPAND_SZ 2 /* string, includes %ENVVAR% (expanded by caller) (ASCII) */
5011 #define REG_BINARY 3 /* binary format, callerspecific */
5012 /* YES, REG_DWORD == REG_DWORD_LITTLE_ENDIAN */
5013 #define REG_DWORD 4 /* DWORD in little endian format */
5014 #define REG_DWORD_LITTLE_ENDIAN 4 /* DWORD in little endian format */
5015 #define REG_DWORD_BIG_ENDIAN 5 /* DWORD in big endian format */
5016 #define REG_LINK 6 /* symbolic link (UNICODE) */
5017 #define REG_MULTI_SZ 7 /* multiple strings, delimited by \0, terminated by \0\0 (ASCII) */
5018 #define REG_RESOURCE_LIST 8 /* resource list? huh? */
5019 #define REG_FULL_RESOURCE_DESCRIPTOR 9 /* full resource descriptor? huh? */
5020 #define REG_RESOURCE_REQUIREMENTS_LIST 10
5021 #define REG_QWORD 11 /* QWORD in little endian format */
5022 #define REG_QWORD_LITTLE_ENDIAN 11 /* QWORD in little endian format */
5024 /* ----------------------------- begin power management --------------------- */
5026 typedef enum _LATENCY_TIME
{
5029 } LATENCY_TIME
, *PLATENCY_TIME
;
5031 #define DISCHARGE_POLICY_CRITICAL 0
5032 #define DISCHARGE_POLICY_LOW 1
5033 #define NUM_DISCHARGE_POLICIES 4
5035 #define PO_THROTTLE_NONE 0
5036 #define PO_THROTTLE_CONSTANT 1
5037 #define PO_THROTTLE_DEGRADE 2
5038 #define PO_THROTTLE_ADAPTIVE 3
5040 typedef enum _POWER_ACTION
{
5041 PowerActionNone
= 0,
5042 PowerActionReserved
,
5044 PowerActionHibernate
,
5045 PowerActionShutdown
,
5046 PowerActionShutdownReset
,
5047 PowerActionShutdownOff
,
5048 PowerActionWarmEject
5052 typedef enum _POWER_PLATFORM_ROLE
{
5053 PlatformRoleUnspecified
,
5054 PlatformRoleDesktop
,
5056 PlatformRoleWorkstation
,
5057 PlatformRoleEnterpriseServer
,
5058 PlatformRoleSOHOServer
,
5059 PlatformRoleAppliancePC
,
5060 PlatformRolePerformanceServer
,
5063 } POWER_PLATFORM_ROLE
, *PPOWER_PLATFORM_ROLE
;
5065 typedef enum _SYSTEM_POWER_STATE
{
5066 PowerSystemUnspecified
= 0,
5067 PowerSystemWorking
= 1,
5068 PowerSystemSleeping1
= 2,
5069 PowerSystemSleeping2
= 3,
5070 PowerSystemSleeping3
= 4,
5071 PowerSystemHibernate
= 5,
5072 PowerSystemShutdown
= 6,
5073 PowerSystemMaximum
= 7
5074 } SYSTEM_POWER_STATE
,
5075 *PSYSTEM_POWER_STATE
;
5077 typedef enum _DEVICE_POWER_STATE
{
5078 PowerDeviceUnspecified
,
5084 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
5086 typedef enum _POWER_INFORMATION_LEVEL
{
5087 SystemPowerPolicyAc
,
5088 SystemPowerPolicyDc
,
5089 VerifySystemPolicyAc
,
5090 VerifySystemPolicyDc
,
5091 SystemPowerCapabilities
,
5093 SystemPowerStateHandler
,
5094 ProcessorStateHandler
,
5095 SystemPowerPolicyCurrent
,
5096 AdministratorPowerPolicy
,
5097 SystemReserveHiberFile
,
5098 ProcessorInformation
,
5099 SystemPowerInformation
,
5100 ProcessorStateHandler2
,
5103 SystemExecutionState
,
5104 SystemPowerStateNotifyHandler
,
5105 ProcessorPowerPolicyAc
,
5106 ProcessorPowerPolicyDc
,
5107 VerifyProcessorPowerPolicyAc
,
5108 VerifyProcessorPowerPolicyDc
,
5109 ProcessorPowerPolicyCurrent
5110 } POWER_INFORMATION_LEVEL
;
5112 typedef struct _ADMINISTRATOR_POWER_POLICY
{
5113 SYSTEM_POWER_STATE MinSleep
;
5114 SYSTEM_POWER_STATE MaxSleep
;
5115 ULONG MinVideoTimeout
;
5116 ULONG MaxVideoTimeout
;
5117 ULONG MinSpindownTimeout
;
5118 ULONG MaxSpindownTimeout
;
5119 } ADMINISTRATOR_POWER_POLICY
, *PADMINISTRATOR_POWER_POLICY
;
5124 } BATTERY_REPORTING_SCALE
,
5125 *PBATTERY_REPORTING_SCALE
;
5128 POWER_ACTION Action
;
5131 } POWER_ACTION_POLICY
,
5132 *PPOWER_ACTION_POLICY
;
5134 typedef struct _PROCESSOR_POWER_INFORMATION
{
5140 ULONG CurrentIdleState
;
5141 } PROCESSOR_POWER_INFORMATION
,
5142 *PPROCESSOR_POWER_INFORMATION
;
5144 typedef struct _PROCESSOR_POWER_POLICY_INFO
{
5148 UCHAR DemotePercent
;
5149 UCHAR PromotePercent
;
5151 ULONG AllowDemotion
:1;
5152 ULONG AllowPromotion
:1;
5154 } PROCESSOR_POWER_POLICY_INFO
,
5155 *PPROCESSOR_POWER_POLICY_INFO
;
5157 typedef struct _PROCESSOR_POWER_POLICY
{
5159 BYTE DynamicThrottle
;
5161 DWORD DisableCStates
:1;
5164 PROCESSOR_POWER_POLICY_INFO Policy
[3];
5165 } PROCESSOR_POWER_POLICY
,
5166 *PPROCESSOR_POWER_POLICY
;
5170 BOOLEAN BatteryPresent
;
5172 BOOLEAN Discharging
;
5176 ULONG RemainingCapacity
;
5178 ULONG EstimatedTime
;
5179 ULONG DefaultAlert1
;
5180 ULONG DefaultAlert2
;
5181 } SYSTEM_BATTERY_STATE
,
5182 *PSYSTEM_BATTERY_STATE
;
5185 BOOLEAN PowerButtonPresent
;
5186 BOOLEAN SleepButtonPresent
;
5193 BOOLEAN HiberFilePresent
;
5195 BOOLEAN VideoDimPresent
;
5198 BOOLEAN ThermalControl
;
5199 BOOLEAN ProcessorThrottle
;
5200 UCHAR ProcessorMinThrottle
;
5201 UCHAR ProcessorMaxThrottle
;
5203 BOOLEAN DiskSpinDown
;
5205 BOOLEAN SystemBatteriesPresent
;
5206 BOOLEAN BatteriesAreShortTerm
;
5207 BATTERY_REPORTING_SCALE BatteryScale
[3];
5208 SYSTEM_POWER_STATE AcOnLineWake
;
5209 SYSTEM_POWER_STATE SoftLidWake
;
5210 SYSTEM_POWER_STATE RtcWake
;
5211 SYSTEM_POWER_STATE MinDeviceWakeState
;
5212 SYSTEM_POWER_STATE DefaultLowLatencyWake
;
5213 } SYSTEM_POWER_CAPABILITIES
,
5214 *PSYSTEM_POWER_CAPABILITIES
;
5216 typedef struct _SYSTEM_POWER_INFORMATION
{
5217 ULONG MaxIdlenessAllowed
;
5219 ULONG TimeRemaining
;
5221 } SYSTEM_POWER_INFORMATION
,
5222 *PSYSTEM_POWER_INFORMATION
;
5224 typedef struct _SYSTEM_POWER_LEVEL
{
5228 POWER_ACTION_POLICY PowerPolicy
;
5229 SYSTEM_POWER_STATE MinSystemState
;
5230 } SYSTEM_POWER_LEVEL
,
5231 *PSYSTEM_POWER_LEVEL
;
5233 typedef struct _SYSTEM_POWER_POLICY
{
5235 POWER_ACTION_POLICY PowerButton
;
5236 POWER_ACTION_POLICY SleepButton
;
5237 POWER_ACTION_POLICY LidClose
;
5238 SYSTEM_POWER_STATE LidOpenWake
;
5240 POWER_ACTION_POLICY Idle
;
5242 UCHAR IdleSensitivity
;
5243 UCHAR DynamicThrottle
;
5245 SYSTEM_POWER_STATE MinSleep
;
5246 SYSTEM_POWER_STATE MaxSleep
;
5247 SYSTEM_POWER_STATE ReducedLatencySleep
;
5248 ULONG WinLogonFlags
;
5250 ULONG DozeS4Timeout
;
5251 ULONG BroadcastCapacityResolution
;
5252 SYSTEM_POWER_LEVEL DischargePolicy
[NUM_DISCHARGE_POLICIES
];
5254 BOOLEAN VideoDimDisplay
;
5255 ULONG VideoReserved
[3];
5256 ULONG SpindownTimeout
;
5257 BOOLEAN OptimizeForPower
;
5258 UCHAR FanThrottleTolerance
;
5259 UCHAR ForcedThrottle
;
5261 POWER_ACTION_POLICY OverThrottled
;
5262 } SYSTEM_POWER_POLICY
,
5263 *PSYSTEM_POWER_POLICY
;
5265 typedef enum _POWER_REQUEST_TYPE
5267 PowerRequestDisplayRequired
,
5268 PowerRequestSystemRequired
,
5269 PowerRequestAwayModeRequired
5270 } POWER_REQUEST_TYPE
, *PPOWER_REQUEST_TYPE
;
5272 #define POWER_REQUEST_CONTEXT_VERSION 0
5274 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
5275 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
5277 typedef union _FILE_SEGMENT_ELEMENT
{
5279 ULONGLONG Alignment
;
5280 } FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
5282 typedef struct _FILE_NOTIFY_INFORMATION
{
5283 DWORD NextEntryOffset
;
5285 DWORD FileNameLength
;
5287 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
5289 /* ----------------------------- begin tape storage --------------------- */
5291 #define TAPE_FIXED_PARTITIONS 0
5292 #define TAPE_SELECT_PARTITIONS 1
5293 #define TAPE_INITIATOR_PARTITIONS 2
5294 #define TAPE_ERASE_SHORT 0
5295 #define TAPE_ERASE_LONG 1
5297 #define TAPE_UNLOAD 1
5298 #define TAPE_TENSION 2
5300 #define TAPE_UNLOCK 4
5301 #define TAPE_FORMAT 5
5302 #define TAPE_SETMARKS 0
5303 #define TAPE_FILEMARKS 1
5304 #define TAPE_SHORT_FILEMARKS 2
5305 #define TAPE_LONG_FILEMARKS 3
5306 #define TAPE_REWIND 0
5307 #define TAPE_ABSOLUTE_BLOCK 1
5308 #define TAPE_LOGICAL_BLOCK 2
5309 #define TAPE_PSEUDO_LOGICAL_BLOCK 3
5310 #define TAPE_SPACE_END_OF_DATA 4
5311 #define TAPE_SPACE_RELATIVE_BLOCKS 5
5312 #define TAPE_SPACE_FILEMARKS 6
5313 #define TAPE_SPACE_SEQUENTIAL_FMKS 7
5314 #define TAPE_SPACE_SETMARKS 8
5315 #define TAPE_SPACE_SEQUENTIAL_SMKS 9
5317 typedef struct _TAPE_CREATE_PARTITION
{
5321 } TAPE_CREATE_PARTITION
, *PTAPE_CREATE_PARTITION
;
5323 typedef struct _TAPE_ERASE
{
5326 } TAPE_ERASE
, *PTAPE_ERASE
;
5328 typedef struct _TAPE_PREPARE
{
5331 } TAPE_PREPARE
, *PTAPE_PREPARE
;
5333 typedef struct _TAPE_SET_DRIVE_PARAMETERS
{
5335 BOOLEAN Compression
;
5336 BOOLEAN DataPadding
;
5337 BOOLEAN ReportSetmarks
;
5338 ULONG EOTWarningZoneSize
;
5339 } TAPE_SET_DRIVE_PARAMETERS
, *PTAPE_SET_DRIVE_PARAMETERS
;
5341 typedef struct _TAPE_SET_MEDIA_PARAMETERS
{
5343 } TAPE_SET_MEDIA_PARAMETERS
, *PTAPE_SET_MEDIA_PARAMETERS
;
5345 typedef struct _TAPE_WRITE_MARKS
{
5349 } TAPE_WRITE_MARKS
, *PTAPE_WRITE_MARKS
;
5351 typedef struct _TAPE_GET_POSITION
{
5356 } TAPE_GET_POSITION
, *PTAPE_GET_POSITION
;
5358 typedef struct _TAPE_SET_POSITION
{
5361 LARGE_INTEGER Offset
;
5363 } TAPE_SET_POSITION
, *PTAPE_SET_POSITION
;
5365 typedef struct _TAPE_GET_DRIVE_PARAMETERS
{
5367 BOOLEAN Compression
;
5368 BOOLEAN DataPadding
;
5369 BOOLEAN ReportSetmarks
;
5370 DWORD DefaultBlockSize
;
5371 DWORD MaximumBlockSize
;
5372 DWORD MinimumBlockSize
;
5373 DWORD MaximumPartitionCount
;
5376 DWORD EOTWarningZoneSize
;
5377 } TAPE_GET_DRIVE_PARAMETERS
, *PTAPE_GET_DRIVE_PARAMETERS
;
5379 typedef struct _TAPE_GET_MEDIA_PARAMETERS
{
5380 LARGE_INTEGER Capacity
;
5381 LARGE_INTEGER Remaining
;
5383 DWORD PartitionCount
;
5384 BOOLEAN WriteProtected
;
5385 } TAPE_GET_MEDIA_PARAMETERS
, *PTAPE_GET_MEDIA_PARAMETERS
;
5387 /* ----------------------------- begin registry ----------------------------- */
5389 /* Registry security values */
5390 #define OWNER_SECURITY_INFORMATION 0x00000001
5391 #define GROUP_SECURITY_INFORMATION 0x00000002
5392 #define DACL_SECURITY_INFORMATION 0x00000004
5393 #define SACL_SECURITY_INFORMATION 0x00000008
5394 #define LABEL_SECURITY_INFORMATION 0x00000010
5396 #define REG_OPTION_RESERVED 0x00000000
5397 #define REG_OPTION_NON_VOLATILE 0x00000000
5398 #define REG_OPTION_VOLATILE 0x00000001
5399 #define REG_OPTION_CREATE_LINK 0x00000002
5400 #define REG_OPTION_BACKUP_RESTORE 0x00000004 /* FIXME */
5401 #define REG_OPTION_OPEN_LINK 0x00000008
5402 #define REG_LEGAL_OPTION (REG_OPTION_RESERVED | \
5403 REG_OPTION_NON_VOLATILE | \
5404 REG_OPTION_VOLATILE | \
5405 REG_OPTION_CREATE_LINK | \
5406 REG_OPTION_BACKUP_RESTORE | \
5407 REG_OPTION_OPEN_LINK)
5410 #define REG_CREATED_NEW_KEY 0x00000001
5411 #define REG_OPENED_EXISTING_KEY 0x00000002
5413 /* For RegNotifyChangeKeyValue */
5414 #define REG_NOTIFY_CHANGE_NAME 0x01
5415 #define REG_NOTIFY_CHANGE_ATTRIBUTES 0x02
5416 #define REG_NOTIFY_CHANGE_LAST_SET 0x04
5417 #define REG_NOTIFY_CHANGE_SECURITY 0x08
5418 #define REG_NOTIFY_THREAD_AGNOSTIC 0x10000000
5420 #define KEY_QUERY_VALUE 0x00000001
5421 #define KEY_SET_VALUE 0x00000002
5422 #define KEY_CREATE_SUB_KEY 0x00000004
5423 #define KEY_ENUMERATE_SUB_KEYS 0x00000008
5424 #define KEY_NOTIFY 0x00000010
5425 #define KEY_CREATE_LINK 0x00000020
5426 #define KEY_WOW64_64KEY 0x00000100
5427 #define KEY_WOW64_32KEY 0x00000200
5428 #define KEY_WOW64_RES 0x00000300
5430 /* for RegKeyRestore flags */
5431 #define REG_WHOLE_HIVE_VOLATILE 0x00000001
5432 #define REG_REFRESH_HIVE 0x00000002
5433 #define REG_NO_LAZY_FLUSH 0x00000004
5434 #define REG_FORCE_RESTORE 0x00000008
5436 #define KEY_READ ((STANDARD_RIGHTS_READ| \
5438 KEY_ENUMERATE_SUB_KEYS| \
5442 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE| \
5444 KEY_CREATE_SUB_KEY) \
5447 #define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE))
5448 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL| \
5451 KEY_CREATE_SUB_KEY| \
5452 KEY_ENUMERATE_SUB_KEYS| \
5457 /* ------------------------------ end registry ------------------------------ */
5460 #define EVENTLOG_SUCCESS 0x0000
5461 #define EVENTLOG_ERROR_TYPE 0x0001
5462 #define EVENTLOG_WARNING_TYPE 0x0002
5463 #define EVENTLOG_INFORMATION_TYPE 0x0004
5464 #define EVENTLOG_AUDIT_SUCCESS 0x0008
5465 #define EVENTLOG_AUDIT_FAILURE 0x0010
5467 #define EVENTLOG_SEQUENTIAL_READ 0x0001
5468 #define EVENTLOG_SEEK_READ 0x0002
5469 #define EVENTLOG_FORWARDS_READ 0x0004
5470 #define EVENTLOG_BACKWARDS_READ 0x0008
5472 typedef struct _EVENTLOGRECORD
{
5476 DWORD TimeGenerated
;
5483 DWORD ClosingRecordNumber
;
5485 DWORD UserSidLength
;
5486 DWORD UserSidOffset
;
5489 } EVENTLOGRECORD
, *PEVENTLOGRECORD
;
5491 #define SERVICE_BOOT_START 0x00000000
5492 #define SERVICE_SYSTEM_START 0x00000001
5493 #define SERVICE_AUTO_START 0x00000002
5494 #define SERVICE_DEMAND_START 0x00000003
5495 #define SERVICE_DISABLED 0x00000004
5497 #define SERVICE_ERROR_IGNORE 0x00000000
5498 #define SERVICE_ERROR_NORMAL 0x00000001
5499 #define SERVICE_ERROR_SEVERE 0x00000002
5500 #define SERVICE_ERROR_CRITICAL 0x00000003
5503 #define SERVICE_KERNEL_DRIVER 0x00000001
5504 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
5505 #define SERVICE_ADAPTER 0x00000004
5506 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
5508 #define SERVICE_DRIVER ( SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | \
5509 SERVICE_RECOGNIZER_DRIVER )
5511 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
5512 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
5513 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
5515 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
5517 #define SERVICE_TYPE_ALL ( SERVICE_WIN32 | SERVICE_ADAPTER | \
5518 SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS )
5521 typedef enum _CM_SERVICE_NODE_TYPE
5523 DriverType
= SERVICE_KERNEL_DRIVER
,
5524 FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,
5525 Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
5526 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,
5527 AdapterType
= SERVICE_ADAPTER
,
5528 RecognizerType
= SERVICE_RECOGNIZER_DRIVER
5529 } SERVICE_NODE_TYPE
;
5531 typedef enum _CM_SERVICE_LOAD_TYPE
5533 BootLoad
= SERVICE_BOOT_START
,
5534 SystemLoad
= SERVICE_SYSTEM_START
,
5535 AutoLoad
= SERVICE_AUTO_START
,
5536 DemandLoad
= SERVICE_DEMAND_START
,
5537 DisableLoad
= SERVICE_DISABLED
5538 } SERVICE_LOAD_TYPE
;
5540 typedef enum _CM_ERROR_CONTROL_TYPE
5542 IgnoreError
= SERVICE_ERROR_IGNORE
,
5543 NormalError
= SERVICE_ERROR_NORMAL
,
5544 SevereError
= SERVICE_ERROR_SEVERE
,
5545 CriticalError
= SERVICE_ERROR_CRITICAL
5546 } SERVICE_ERROR_TYPE
;
5548 NTSYSAPI SIZE_T WINAPI
RtlCompareMemory(const VOID
*, const VOID
*, SIZE_T
);
5549 NTSYSAPI SIZE_T WINAPI
RtlCompareMemoryUlong(VOID
*, SIZE_T
, ULONG
);
5551 #define RtlEqualMemory(Destination, Source, Length) (!memcmp((Destination),(Source),(Length)))
5552 #define RtlMoveMemory(Destination, Source, Length) memmove((Destination),(Source),(Length))
5553 #define RtlCopyMemory(Destination, Source, Length) memcpy((Destination),(Source),(Length))
5554 #define RtlFillMemory(Destination, Length, Fill) memset((Destination),(Fill),(Length))
5555 #define RtlZeroMemory(Destination, Length) memset((Destination),0,(Length))
5557 static FORCEINLINE
void *RtlSecureZeroMemory(void *buffer
, SIZE_T length
)
5559 volatile char *ptr
= (volatile char *)buffer
;
5561 while (length
--) *ptr
++ = 0;
5565 #include <guiddef.h>
5567 typedef struct _OBJECT_TYPE_LIST
{
5571 } OBJECT_TYPE_LIST
, *POBJECT_TYPE_LIST
;
5573 typedef struct _RTL_CRITICAL_SECTION_DEBUG
5576 WORD CreatorBackTraceIndex
;
5577 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
5578 LIST_ENTRY ProcessLocksList
;
5580 DWORD ContentionCount
;
5581 #ifdef __WINESRC__ /* in Wine we store the name here */
5582 DWORD_PTR Spare
[8/sizeof(DWORD_PTR
)];
5586 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
5588 typedef struct _RTL_CRITICAL_SECTION
{
5589 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
5591 LONG RecursionCount
;
5592 HANDLE OwningThread
;
5593 HANDLE LockSemaphore
;
5594 ULONG_PTR SpinCount
;
5595 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
5597 #define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x1000000
5598 #define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x2000000
5599 #define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x4000000
5600 #define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xFF000000
5601 #define RTL_CRITICAL_SECTION_FLAG_RESERVED (RTL_CRITICAL_SECTION_ALL_FLAG_BITS & ~0x7000000)
5603 typedef struct _RTL_SRWLOCK
{
5605 } RTL_SRWLOCK
, *PRTL_SRWLOCK
;
5607 #define RTL_SRWLOCK_INIT {0}
5609 typedef struct _RTL_CONDITION_VARIABLE
{
5611 } RTL_CONDITION_VARIABLE
, *PRTL_CONDITION_VARIABLE
;
5612 #define RTL_CONDITION_VARIABLE_INIT {0}
5613 #define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1
5615 typedef VOID (NTAPI
* WAITORTIMERCALLBACKFUNC
) (PVOID
, BOOLEAN
);
5616 typedef VOID (NTAPI
* PFLS_CALLBACK_FUNCTION
) ( PVOID
);
5618 #define RTL_RUN_ONCE_INIT {0}
5619 typedef union _RTL_RUN_ONCE
{
5621 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
5623 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001
5624 #define RTL_RUN_ONCE_ASYNC 0x00000002
5625 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004
5627 typedef DWORD WINAPI
RTL_RUN_ONCE_INIT_FN(PRTL_RUN_ONCE
, PVOID
, PVOID
*);
5628 typedef RTL_RUN_ONCE_INIT_FN
*PRTL_RUN_ONCE_INIT_FN
;
5629 NTSYSAPI VOID WINAPI
RtlRunOnceInitialize(PRTL_RUN_ONCE
);
5630 NTSYSAPI DWORD WINAPI
RtlRunOnceExecuteOnce(PRTL_RUN_ONCE
,PRTL_RUN_ONCE_INIT_FN
,PVOID
,PVOID
*);
5631 NTSYSAPI DWORD WINAPI
RtlRunOnceBeginInitialize(PRTL_RUN_ONCE
, DWORD
, PVOID
*);
5632 NTSYSAPI DWORD WINAPI
RtlRunOnceComplete(PRTL_RUN_ONCE
, DWORD
, PVOID
);
5634 #include <pshpack8.h>
5635 typedef struct _IO_COUNTERS
{
5636 ULONGLONG
DECLSPEC_ALIGN(8) ReadOperationCount
;
5637 ULONGLONG
DECLSPEC_ALIGN(8) WriteOperationCount
;
5638 ULONGLONG
DECLSPEC_ALIGN(8) OtherOperationCount
;
5639 ULONGLONG
DECLSPEC_ALIGN(8) ReadTransferCount
;
5640 ULONGLONG
DECLSPEC_ALIGN(8) WriteTransferCount
;
5641 ULONGLONG
DECLSPEC_ALIGN(8) OtherTransferCount
;
5642 } IO_COUNTERS
, *PIO_COUNTERS
;
5643 #include <poppack.h>
5646 DWORD dwOSVersionInfoSize
;
5647 DWORD dwMajorVersion
;
5648 DWORD dwMinorVersion
;
5649 DWORD dwBuildNumber
;
5651 CHAR szCSDVersion
[128];
5652 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
5655 DWORD dwOSVersionInfoSize
;
5656 DWORD dwMajorVersion
;
5657 DWORD dwMinorVersion
;
5658 DWORD dwBuildNumber
;
5660 WCHAR szCSDVersion
[128];
5661 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
5663 DECL_WINELIB_TYPE_AW(OSVERSIONINFO
)
5664 DECL_WINELIB_TYPE_AW(POSVERSIONINFO
)
5665 DECL_WINELIB_TYPE_AW(LPOSVERSIONINFO
)
5668 DWORD dwOSVersionInfoSize
;
5669 DWORD dwMajorVersion
;
5670 DWORD dwMinorVersion
;
5671 DWORD dwBuildNumber
;
5673 CHAR szCSDVersion
[128];
5674 WORD wServicePackMajor
;
5675 WORD wServicePackMinor
;
5679 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
5682 DWORD dwOSVersionInfoSize
;
5683 DWORD dwMajorVersion
;
5684 DWORD dwMinorVersion
;
5685 DWORD dwBuildNumber
;
5687 WCHAR szCSDVersion
[128];
5688 WORD wServicePackMajor
;
5689 WORD wServicePackMinor
;
5693 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
5695 DECL_WINELIB_TYPE_AW(OSVERSIONINFOEX
)
5696 DECL_WINELIB_TYPE_AW(POSVERSIONINFOEX
)
5697 DECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX
)
5699 NTSYSAPI ULONGLONG WINAPI
VerSetConditionMask(ULONGLONG
,DWORD
,BYTE
);
5701 #define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
5703 #define VER_PLATFORM_WIN32s 0
5704 #define VER_PLATFORM_WIN32_WINDOWS 1
5705 #define VER_PLATFORM_WIN32_NT 2
5707 #define VER_MINORVERSION 0x00000001
5708 #define VER_MAJORVERSION 0x00000002
5709 #define VER_BUILDNUMBER 0x00000004
5710 #define VER_PLATFORMID 0x00000008
5711 #define VER_SERVICEPACKMINOR 0x00000010
5712 #define VER_SERVICEPACKMAJOR 0x00000020
5713 #define VER_SUITENAME 0x00000040
5714 #define VER_PRODUCT_TYPE 0x00000080
5716 #define VER_NT_WORKSTATION 1
5717 #define VER_NT_DOMAIN_CONTROLLER 2
5718 #define VER_NT_SERVER 3
5720 #define VER_SUITE_SMALLBUSINESS 0x00000001
5721 #define VER_SUITE_ENTERPRISE 0x00000002
5722 #define VER_SUITE_BACKOFFICE 0x00000004
5723 #define VER_SUITE_COMMUNICATIONS 0x00000008
5724 #define VER_SUITE_TERMINAL 0x00000010
5725 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
5726 #define VER_SUITE_EMBEDDEDNT 0x00000040
5727 #define VER_SUITE_DATACENTER 0x00000080
5728 #define VER_SUITE_SINGLEUSERTS 0x00000100
5729 #define VER_SUITE_PERSONAL 0x00000200
5730 #define VER_SUITE_BLADE 0x00000400
5731 #define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
5732 #define VER_SUITE_SECURITY_APPLIANCE 0x00001000
5733 #define VER_SUITE_STORAGE_SERVER 0x00002000
5734 #define VER_SUITE_COMPUTE_SERVER 0x00004000
5735 #define VER_SUITE_WH_SERVER 0x00008000
5738 #define VER_GREATER 2
5739 #define VER_GREATER_EQUAL 3
5741 #define VER_LESS_EQUAL 5
5745 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION
{
5747 DWORD ulFormatVersion
;
5748 DWORD ulAssemblyCount
;
5749 DWORD ulRootManifestPathType
;
5750 DWORD ulRootManifestPathChars
;
5751 DWORD ulRootConfigurationPathType
;
5752 DWORD ulRootConfigurationPathChars
;
5753 DWORD ulAppDirPathType
;
5754 DWORD ulAppDirPathChars
;
5755 PCWSTR lpRootManifestPath
;
5756 PCWSTR lpRootConfigurationPath
;
5757 PCWSTR lpAppDirPath
;
5758 } ACTIVATION_CONTEXT_DETAILED_INFORMATION
, *PACTIVATION_CONTEXT_DETAILED_INFORMATION
;
5760 typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
{
5762 DWORD ulEncodedAssemblyIdentityLength
;
5763 DWORD ulManifestPathType
;
5764 DWORD ulManifestPathLength
;
5765 LARGE_INTEGER liManifestLastWriteTime
;
5766 DWORD ulPolicyPathType
;
5767 DWORD ulPolicyPathLength
;
5768 LARGE_INTEGER liPolicyLastWriteTime
;
5769 DWORD ulMetadataSatelliteRosterIndex
;
5770 DWORD ulManifestVersionMajor
;
5771 DWORD ulManifestVersionMinor
;
5772 DWORD ulPolicyVersionMajor
;
5773 DWORD ulPolicyVersionMinor
;
5774 DWORD ulAssemblyDirectoryNameLength
;
5775 PCWSTR lpAssemblyEncodedAssemblyIdentity
;
5776 PCWSTR lpAssemblyManifestPath
;
5777 PCWSTR lpAssemblyPolicyPath
;
5778 PCWSTR lpAssemblyDirectoryName
;
5780 } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
;
5782 typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX
{
5783 DWORD ulAssemblyIndex
;
5784 DWORD ulFileIndexInAssembly
;
5785 } ACTIVATION_CONTEXT_QUERY_INDEX
, *PACTIVATION_CONTEXT_QUERY_INDEX
;
5787 typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX
*PCACTIVATION_CONTEXT_QUERY_INDEX
;
5789 typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION
{
5791 DWORD ulFilenameLength
;
5795 } ASSEMBLY_FILE_DETAILED_INFORMATION
, *PASSEMBLY_FILE_DETAILED_INFORMATION
;
5797 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION
*PCASSEMBLY_FILE_DETAILED_INFORMATION
;
5800 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN
= 0,
5801 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS
,
5802 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION
,
5803 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MAXVERSIONTESTED
5804 } ACTCTX_COMPATIBILITY_ELEMENT_TYPE
;
5806 typedef struct _COMPATIBILITY_CONTEXT_ELEMENT
{
5808 ACTCTX_COMPATIBILITY_ELEMENT_TYPE Type
;
5809 ULONGLONG MaxVersionTested
;
5810 } COMPATIBILITY_CONTEXT_ELEMENT
, *PCOMPATIBILITY_CONTEXT_ELEMENT
;
5812 #if !defined(__WINESRC__) && (defined(_MSC_EXTENSIONS) || ((defined(__GNUC__) && __GNUC__ >= 3)))
5813 typedef struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
{
5815 COMPATIBILITY_CONTEXT_ELEMENT Elements
[];
5816 } ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
, *PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
;
5820 ACTCTX_RUN_LEVEL_UNSPECIFIED
= 0,
5821 ACTCTX_RUN_LEVEL_AS_INVOKER
,
5822 ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE
,
5823 ACTCTX_RUN_LEVEL_REQUIRE_ADMIN
,
5824 ACTCTX_RUN_LEVEL_NUMBERS
5825 } ACTCTX_REQUESTED_RUN_LEVEL
;
5827 typedef struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
{
5829 ACTCTX_REQUESTED_RUN_LEVEL RunLevel
;
5831 } ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
, *PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
;
5833 typedef const struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
*PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
;
5835 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS
{
5836 ActivationContextBasicInformation
= 1,
5837 ActivationContextDetailedInformation
= 2,
5838 AssemblyDetailedInformationInActivationContext
= 3,
5839 FileInformationInAssemblyOfAssemblyInActivationContext
= 4,
5840 RunlevelInformationInActivationContext
= 5,
5841 CompatibilityInformationInActivationContext
= 6,
5842 ActivationContextManifestResourceName
= 7,
5843 MaxActivationContextInfoClass
,
5844 AssemblyDetailedInformationInActivationContxt
= AssemblyDetailedInformationInActivationContext
,
5845 FileInformationInAssemblyOfAssemblyInActivationContxt
= FileInformationInAssemblyOfAssemblyInActivationContext
5846 } ACTIVATION_CONTEXT_INFO_CLASS
;
5848 #define ACTIVATION_CONTEXT_PATH_TYPE_NONE 1
5849 #define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE 2
5850 #define ACTIVATION_CONTEXT_PATH_TYPE_URL 3
5851 #define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF 4
5853 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
5854 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
5855 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
5856 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
5857 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
5858 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
5859 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
5860 #define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE 8
5861 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
5862 #define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS 10
5863 #define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO 11
5865 typedef enum _JOBOBJECTINFOCLASS
5867 JobObjectBasicAccountingInformation
= 1,
5868 JobObjectBasicLimitInformation
,
5869 JobObjectBasicProcessIdList
,
5870 JobObjectBasicUIRestrictions
,
5871 JobObjectSecurityLimitInformation
,
5872 JobObjectEndOfJobTimeInformation
,
5873 JobObjectAssociateCompletionPortInformation
,
5874 JobObjectBasicAndIoAccountingInformation
,
5875 JobObjectExtendedLimitInformation
,
5876 JobObjectJobSetInformation
,
5877 MaxJobObjectInfoClass
5878 } JOBOBJECTINFOCLASS
;
5880 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
{
5881 LARGE_INTEGER TotalUserTime
;
5882 LARGE_INTEGER TotalKernelTime
;
5883 LARGE_INTEGER ThisPeriodTotalUserTime
;
5884 LARGE_INTEGER ThisPeriodTotalKernelTime
;
5885 DWORD TotalPageFaultCount
;
5886 DWORD TotalProcesses
;
5887 DWORD ActiveProcesses
;
5888 DWORD TotalTerminatedProcesses
;
5889 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION
;
5891 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION
{
5892 LARGE_INTEGER PerProcessUserTimeLimit
;
5893 LARGE_INTEGER PerJobUserTimeLimit
;
5895 SIZE_T MinimumWorkingSetSize
;
5896 SIZE_T MaximumWorkingSetSize
;
5897 DWORD ActiveProcessLimit
;
5899 DWORD PriorityClass
;
5900 DWORD SchedulingClass
;
5901 } JOBOBJECT_BASIC_LIMIT_INFORMATION
, *PJOBOBJECT_BASIC_LIMIT_INFORMATION
;
5903 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST
{
5904 DWORD NumberOfAssignedProcesses
;
5905 DWORD NumberOfProcessIdsInList
;
5906 ULONG_PTR ProcessIdList
[1];
5907 } JOBOBJECT_BASIC_PROCESS_ID_LIST
, *PJOBOBJECT_BASIC_PROCESS_ID_LIST
;
5909 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS
{
5910 DWORD UIRestrictionsClass
;
5911 } JOBOBJECT_BASIC_UI_RESTRICTIONS
, *PJOBOBJECT_BASIC_UI_RESTRICTIONS
;
5913 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION
{
5914 DWORD SecurityLimitFlags
;
5916 PTOKEN_GROUPS SidsToDisable
;
5917 PTOKEN_PRIVILEGES PrivilegesToDelete
;
5918 PTOKEN_GROUPS RestrictedSids
;
5919 } JOBOBJECT_SECURITY_LIMIT_INFORMATION
, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION
;
5921 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION
{
5922 DWORD EndOfJobTimeAction
;
5923 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION
, PJOBOBJECT_END_OF_JOB_TIME_INFORMATION
;
5925 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT
{
5926 PVOID CompletionKey
;
5927 HANDLE CompletionPort
;
5928 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT
, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT
;
5930 #define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
5931 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
5932 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
5933 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
5934 #define JOB_OBJECT_MSG_NEW_PROCESS 6
5935 #define JOB_OBJECT_MSG_EXIT_PROCESS 7
5936 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
5937 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
5938 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
5940 typedef struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
{
5941 JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo
;
5943 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
, *PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
;
5945 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION
{
5946 JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation
;
5948 SIZE_T ProcessMemoryLimit
;
5949 SIZE_T JobMemoryLimit
;
5950 SIZE_T PeakProcessMemoryUsed
;
5951 SIZE_T PeakJobMemoryUsed
;
5952 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION
, *PJOBOBJECT_EXTENDED_LIMIT_INFORMATION
;
5954 #define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
5955 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
5956 #define JOB_OBJECT_LIMIT_JOB_TIME 0x00000004
5957 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008
5958 #define JOB_OBJECT_LIMIT_AFFINITY 0x00000010
5959 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
5960 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
5961 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
5962 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
5963 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200
5964 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
5965 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
5966 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
5967 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
5968 #define JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000
5970 #define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff
5971 #define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff
5972 #define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00007fff
5974 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
5976 RelationProcessorCore
= 0,
5977 RelationNumaNode
= 1,
5979 RelationProcessorPackage
= 3,
5981 RelationAll
= 0xffff
5982 } LOGICAL_PROCESSOR_RELATIONSHIP
;
5984 #define LTP_PC_SMT 0x1
5986 typedef enum _PROCESSOR_CACHE_TYPE
5992 } PROCESSOR_CACHE_TYPE
;
5994 typedef struct _PROCESSOR_GROUP_INFO
5996 BYTE MaximumProcessorCount
;
5997 BYTE ActiveProcessorCount
;
5999 KAFFINITY ActiveProcessorMask
;
6000 } PROCESSOR_GROUP_INFO
, *PPROCESSOR_GROUP_INFO
;
6002 typedef struct _CACHE_DESCRIPTOR
6008 PROCESSOR_CACHE_TYPE Type
;
6009 } CACHE_DESCRIPTOR
, *PCACHE_DESCRIPTOR
;
6011 typedef struct _GROUP_AFFINITY
6016 } GROUP_AFFINITY
, *PGROUP_AFFINITY
;
6018 #define ALL_PROCESSOR_GROUPS 0xffff
6020 typedef struct _PROCESSOR_NUMBER
6025 } PROCESSOR_NUMBER
, *PPROCESSOR_NUMBER
;
6027 typedef struct _PROCESSOR_RELATIONSHIP
6030 BYTE EfficiencyClass
;
6033 GROUP_AFFINITY GroupMask
[ANYSIZE_ARRAY
];
6034 } PROCESSOR_RELATIONSHIP
, *PPROCESSOR_RELATIONSHIP
;
6036 typedef struct _NUMA_NODE_RELATIONSHIP
6040 GROUP_AFFINITY GroupMask
;
6041 } NUMA_NODE_RELATIONSHIP
, *PNUMA_NODE_RELATIONSHIP
;
6043 typedef struct _CACHE_RELATIONSHIP
6049 PROCESSOR_CACHE_TYPE Type
;
6051 GROUP_AFFINITY GroupMask
;
6052 } CACHE_RELATIONSHIP
, *PCACHE_RELATIONSHIP
;
6054 typedef struct _GROUP_RELATIONSHIP
6056 WORD MaximumGroupCount
;
6057 WORD ActiveGroupCount
;
6059 PROCESSOR_GROUP_INFO GroupInfo
[ANYSIZE_ARRAY
];
6060 } GROUP_RELATIONSHIP
, *PGROUP_RELATIONSHIP
;
6062 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
6064 ULONG_PTR ProcessorMask
;
6065 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
6076 CACHE_DESCRIPTOR Cache
;
6077 ULONGLONG Reserved
[2];
6079 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
6081 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
6083 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
6087 PROCESSOR_RELATIONSHIP Processor
;
6088 NUMA_NODE_RELATIONSHIP NumaNode
;
6089 CACHE_RELATIONSHIP Cache
;
6090 GROUP_RELATIONSHIP Group
;
6092 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
;
6094 typedef enum _CPU_SET_INFORMATION_TYPE
6097 } CPU_SET_INFORMATION_TYPE
, *PCPU_SET_INFORMATION_TYPE
;
6099 typedef struct _SYSTEM_CPU_SET_INFORMATION
6102 CPU_SET_INFORMATION_TYPE Type
;
6109 BYTE LogicalProcessorIndex
;
6111 BYTE LastLevelCacheIndex
;
6113 BYTE EfficiencyClass
;
6121 BYTE AllocatedToTargetProcess
: 1;
6123 BYTE ReservedFlags
: 4;
6128 BYTE SchedulingClass
;
6130 DWORD64 AllocationTag
;
6133 } SYSTEM_CPU_SET_INFORMATION
, *PSYSTEM_CPU_SET_INFORMATION
;
6135 /* Threadpool things */
6136 typedef DWORD TP_VERSION
,*PTP_VERSION
;
6138 typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE
,*PTP_CALLBACK_INSTANCE
;
6140 typedef VOID (CALLBACK
*PTP_SIMPLE_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
);
6142 typedef struct _TP_POOL TP_POOL
,*PTP_POOL
;
6144 typedef enum _TP_CALLBACK_PRIORITY
6146 TP_CALLBACK_PRIORITY_HIGH
,
6147 TP_CALLBACK_PRIORITY_NORMAL
,
6148 TP_CALLBACK_PRIORITY_LOW
,
6149 TP_CALLBACK_PRIORITY_INVALID
,
6150 TP_CALLBACK_PRIORITY_COUNT
= TP_CALLBACK_PRIORITY_INVALID
6151 } TP_CALLBACK_PRIORITY
;
6153 typedef struct _TP_POOL_STACK_INFORMATION
6155 SIZE_T StackReserve
;
6157 } TP_POOL_STACK_INFORMATION
,*PTP_POOL_STACK_INFORMATION
;
6159 typedef struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP
,*PTP_CLEANUP_GROUP
;
6161 typedef VOID (CALLBACK
*PTP_CLEANUP_GROUP_CANCEL_CALLBACK
)(PVOID
,PVOID
);
6163 typedef struct _TP_CALLBACK_ENVIRON_V1
6167 PTP_CLEANUP_GROUP CleanupGroup
;
6168 PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback
;
6170 struct _ACTIVATION_CONTEXT
* ActivationContext
;
6171 PTP_SIMPLE_CALLBACK FinalizationCallback
;
6177 DWORD LongFunction
:1;
6182 } TP_CALLBACK_ENVIRON_V1
;
6184 typedef struct _TP_CALLBACK_ENVIRON_V3
6188 PTP_CLEANUP_GROUP CleanupGroup
;
6189 PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback
;
6191 struct _ACTIVATION_CONTEXT
*ActivationContext
;
6192 PTP_SIMPLE_CALLBACK FinalizationCallback
;
6198 DWORD LongFunction
:1;
6203 TP_CALLBACK_PRIORITY CallbackPriority
;
6205 } TP_CALLBACK_ENVIRON_V3
;
6207 typedef struct _TP_WORK TP_WORK
, *PTP_WORK
;
6208 typedef struct _TP_TIMER TP_TIMER
, *PTP_TIMER
;
6210 typedef DWORD TP_WAIT_RESULT
;
6211 typedef struct _TP_WAIT TP_WAIT
, *PTP_WAIT
;
6213 typedef struct _TP_IO TP_IO
, *PTP_IO
;
6215 typedef TP_CALLBACK_ENVIRON_V1 TP_CALLBACK_ENVIRON
, *PTP_CALLBACK_ENVIRON
;
6217 typedef VOID (CALLBACK
*PTP_WORK_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_WORK
);
6218 typedef VOID (CALLBACK
*PTP_TIMER_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_TIMER
);
6219 typedef VOID (CALLBACK
*PTP_WAIT_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_WAIT
,TP_WAIT_RESULT
);
6222 NTSYSAPI BOOLEAN NTAPI
RtlGetProductInfo(DWORD
,DWORD
,DWORD
,DWORD
,PDWORD
);
6224 typedef enum _RTL_UMS_THREAD_INFO_CLASS
6226 UmsThreadInvalidInfoClass
,
6227 UmsThreadUserContext
,
6231 UmsThreadIsSuspended
,
6232 UmsThreadIsTerminated
,
6233 UmsThreadMaxInfoClass
6234 } RTL_UMS_THREAD_INFO_CLASS
, *PRTL_UMS_THREAD_INFO_CLASS
;
6236 typedef enum _RTL_UMS_SCHEDULER_REASON
6238 UmsSchedulerStartup
,
6239 UmsSchedulerThreadBlocked
,
6240 UmsSchedulerThreadYield
,
6241 } RTL_UMS_SCHEDULER_REASON
, *PRTL_UMS_SCHEDULER_REASON
;
6243 typedef void (CALLBACK
*PRTL_UMS_SCHEDULER_ENTRY_POINT
)(RTL_UMS_SCHEDULER_REASON
,ULONG_PTR
,PVOID
);
6245 typedef enum _PROCESS_MITIGATION_POLICY
6249 ProcessDynamicCodePolicy
,
6250 ProcessStrictHandleCheckPolicy
,
6251 ProcessSystemCallDisablePolicy
,
6252 ProcessMitigationOptionsMask
,
6253 ProcessExtensionPointDisablePolicy
,
6254 ProcessControlFlowGuardPolicy
,
6255 ProcessSignaturePolicy
,
6256 ProcessFontDisablePolicy
,
6257 ProcessImageLoadPolicy
,
6258 ProcessSystemCallFilterPolicy
,
6259 ProcessPayloadRestrictionPolicy
,
6260 ProcessChildProcessPolicy
,
6261 ProcessSideChannelIsolationPolicy
,
6262 MaxProcessMitigationPolicy
6263 } PROCESS_MITIGATION_POLICY
, *PPROCESS_MITIGATION_POLICY
;
6266 /* Intrinsic functions */
6268 #define BitScanForward _BitScanForward
6269 #define BitScanReverse _BitScanReverse
6270 #define InterlockedAdd _InlineInterlockedAdd
6271 #define InterlockedAnd _InterlockedAnd
6272 #define InterlockedCompareExchange _InterlockedCompareExchange
6273 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
6274 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
6275 #define InterlockedDecrement _InterlockedDecrement
6276 #define InterlockedDecrement16 _InterlockedDecrement16
6277 #define InterlockedExchange _InterlockedExchange
6278 #define InterlockedExchangeAdd _InterlockedExchangeAdd
6279 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
6280 #define InterlockedExchangePointer _InterlockedExchangePointer
6281 #define InterlockedIncrement _InterlockedIncrement
6282 #define InterlockedIncrement16 _InterlockedIncrement16
6283 #define InterlockedOr _InterlockedOr
6284 #define InterlockedXor _InterlockedXor
6288 #pragma intrinsic(_BitScanForward)
6289 #pragma intrinsic(_BitScanReverse)
6290 #pragma intrinsic(_InterlockedAnd)
6291 #pragma intrinsic(_InterlockedCompareExchange)
6292 #pragma intrinsic(_InterlockedCompareExchange64)
6293 #pragma intrinsic(_InterlockedExchange)
6294 #pragma intrinsic(_InterlockedExchangeAdd)
6295 #pragma intrinsic(_InterlockedIncrement)
6296 #pragma intrinsic(_InterlockedIncrement16)
6297 #pragma intrinsic(_InterlockedDecrement)
6298 #pragma intrinsic(_InterlockedDecrement16)
6299 #pragma intrinsic(_InterlockedOr)
6300 #pragma intrinsic(_InterlockedXor)
6302 BOOLEAN
_BitScanForward(unsigned long*,unsigned long);
6303 BOOLEAN
_BitScanReverse(unsigned long*,unsigned long);
6304 long _InterlockedAnd(long volatile *,long);
6305 long _InterlockedCompareExchange(long volatile*,long,long);
6306 long long _InterlockedCompareExchange64(long long volatile*,long long,long long);
6307 long _InterlockedDecrement(long volatile*);
6308 short _InterlockedDecrement16(short volatile*);
6309 long _InterlockedExchange(long volatile*,long);
6310 long _InterlockedExchangeAdd(long volatile*,long);
6311 long _InterlockedIncrement(long volatile*);
6312 short _InterlockedIncrement16(short volatile*);
6313 long _InterlockedOr(long volatile *,long);
6314 long _InterlockedXor(long volatile *,long);
6316 static FORCEINLINE
long InterlockedAdd( long volatile *dest
, long val
)
6318 return InterlockedExchangeAdd( dest
, val
) + val
;
6321 #if !defined(__i386__) || _MSC_VER >= 1600
6323 #pragma intrinsic(_InterlockedCompareExchangePointer)
6324 #pragma intrinsic(_InterlockedExchangePointer)
6326 void *_InterlockedCompareExchangePointer(void *volatile*,void*,void*);
6327 void *_InterlockedExchangePointer(void *volatile*,void*);
6331 static FORCEINLINE
void * WINAPI
InterlockedCompareExchangePointer( void *volatile *dest
, void *xchg
, void *compare
)
6333 return (void *)_InterlockedCompareExchange( (long volatile*)dest
, (long)xchg
, (long)compare
);
6336 static FORCEINLINE
void * WINAPI
InterlockedExchangePointer( void *volatile *dest
, void *val
)
6338 return (void *)_InterlockedExchange( (long volatile*)dest
, (long)val
);
6341 #endif /* __i386__ */
6345 static FORCEINLINE
void MemoryBarrier(void)
6348 InterlockedOr(&dummy
, 0);
6351 #elif defined(__x86_64__)
6353 #pragma intrinsic(_InterlockedExchangeAdd64)
6354 #pragma intrinsic(__faststorefence)
6356 long long _InterlockedExchangeAdd64(long long volatile *, long long);
6357 void __faststorefence(void);
6359 static FORCEINLINE
void MemoryBarrier(void)
6364 #elif defined(__arm__)
6366 static FORCEINLINE
void MemoryBarrier(void)
6368 __dmb(_ARM_BARRIER_SY
);
6371 #elif defined(__aarch64__)
6373 static FORCEINLINE
void MemoryBarrier(void)
6375 __dmb(_ARM64_BARRIER_SY
);
6378 #endif /* __i386__ */
6380 #elif defined(__GNUC__)
6382 static FORCEINLINE BOOLEAN WINAPI
BitScanForward(DWORD
*index
, DWORD mask
)
6384 *index
= __builtin_ctz( mask
);
6388 static FORCEINLINE BOOLEAN WINAPI
BitScanReverse(DWORD
*index
, DWORD mask
)
6390 *index
= 31 - __builtin_clz( mask
);
6394 static FORCEINLINE LONG WINAPI
InterlockedAdd( LONG
volatile *dest
, LONG val
)
6396 return __sync_add_and_fetch( dest
, val
);
6399 static FORCEINLINE LONG WINAPI
InterlockedAnd( LONG
volatile *dest
, LONG val
)
6401 return __sync_fetch_and_and( dest
, val
);
6404 static FORCEINLINE LONG WINAPI
InterlockedCompareExchange( LONG
volatile *dest
, LONG xchg
, LONG compare
)
6406 return __sync_val_compare_and_swap( dest
, compare
, xchg
);
6409 static FORCEINLINE
void * WINAPI
InterlockedCompareExchangePointer( void *volatile *dest
, void *xchg
, void *compare
)
6411 return __sync_val_compare_and_swap( dest
, compare
, xchg
);
6414 static FORCEINLINE LONGLONG WINAPI
InterlockedCompareExchange64( LONGLONG
volatile *dest
, LONGLONG xchg
, LONGLONG compare
)
6416 return __sync_val_compare_and_swap( dest
, compare
, xchg
);
6419 static FORCEINLINE LONG WINAPI
InterlockedExchange( LONG
volatile *dest
, LONG val
)
6422 #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
6423 ret
= __atomic_exchange_n( dest
, val
, __ATOMIC_SEQ_CST
);
6424 #elif defined(__i386__) || defined(__x86_64__)
6425 __asm__
__volatile__( "lock; xchgl %0,(%1)"
6426 : "=r" (ret
) :"r" (dest
), "0" (val
) : "memory" );
6428 do ret
= *dest
; while (!__sync_bool_compare_and_swap( dest
, ret
, val
));
6433 static FORCEINLINE LONG WINAPI
InterlockedExchangeAdd( LONG
volatile *dest
, LONG incr
)
6435 return __sync_fetch_and_add( dest
, incr
);
6438 static FORCEINLINE LONGLONG WINAPI
InterlockedExchangeAdd64( LONGLONG
volatile *dest
, LONGLONG incr
)
6440 return __sync_fetch_and_add( dest
, incr
);
6443 static FORCEINLINE LONG WINAPI
InterlockedIncrement( LONG
volatile *dest
)
6445 return __sync_add_and_fetch( dest
, 1 );
6448 static FORCEINLINE
short WINAPI
InterlockedIncrement16( short volatile *dest
)
6450 return __sync_add_and_fetch( dest
, 1 );
6453 static FORCEINLINE LONG WINAPI
InterlockedDecrement( LONG
volatile *dest
)
6455 return __sync_add_and_fetch( dest
, -1 );
6458 static FORCEINLINE
short WINAPI
InterlockedDecrement16( short volatile *dest
)
6460 return __sync_add_and_fetch( dest
, -1 );
6463 static FORCEINLINE
void * WINAPI
InterlockedExchangePointer( void *volatile *dest
, void *val
)
6466 #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
6467 ret
= __atomic_exchange_n( dest
, val
, __ATOMIC_SEQ_CST
);
6468 #elif defined(__x86_64__)
6469 __asm__
__volatile__( "lock; xchgq %0,(%1)" : "=r" (ret
) :"r" (dest
), "0" (val
) : "memory" );
6470 #elif defined(__i386__)
6471 __asm__
__volatile__( "lock; xchgl %0,(%1)" : "=r" (ret
) :"r" (dest
), "0" (val
) : "memory" );
6473 do ret
= *dest
; while (!__sync_bool_compare_and_swap( dest
, ret
, val
));
6478 static FORCEINLINE LONG WINAPI
InterlockedOr( LONG
volatile *dest
, LONG val
)
6480 return __sync_fetch_and_or( dest
, val
);
6483 static FORCEINLINE LONG WINAPI
InterlockedXor( LONG
volatile *dest
, LONG val
)
6485 return __sync_fetch_and_xor( dest
, val
);
6488 static FORCEINLINE
void MemoryBarrier(void)
6490 __sync_synchronize();
6493 #endif /* __GNUC__ */
6497 #define InterlockedCompareExchange128 _InterlockedCompareExchange128
6499 #if defined(_MSC_VER) && !defined(__clang__)
6501 #pragma intrinsic(_InterlockedCompareExchange128)
6502 unsigned char _InterlockedCompareExchange128(volatile __int64
*, __int64
, __int64
, __int64
*);
6506 static FORCEINLINE
unsigned char InterlockedCompareExchange128( volatile __int64
*dest
, __int64 xchg_high
, __int64 xchg_low
, __int64
*compare
)
6510 __asm__
__volatile__( "lock cmpxchg16b %0; setz %b2"
6511 : "=m" (dest
[0]), "=m" (dest
[1]), "=r" (ret
),
6512 "=a" (compare
[0]), "=d" (compare
[1])
6513 : "m" (dest
[0]), "m" (dest
[1]), "3" (compare
[0]), "4" (compare
[1]),
6514 "c" (xchg_high
), "b" (xchg_low
) );
6517 return __sync_bool_compare_and_swap( (__int128
*)dest
, *(__int128
*)compare
, ((__int128
)xchg_high
<< 64) | xchg_low
);
6523 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)(a), (b))
6527 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)(a), (b))
6531 static FORCEINLINE
void YieldProcessor(void)
6534 #if defined(__i386__) || defined(__x86_64__)
6535 __asm__
__volatile__( "rep; nop" : : : "memory" );
6536 #elif defined(__arm__) || defined(__aarch64__)
6537 __asm__
__volatile__( "dmb ishst\n\tyield" : : : "memory" );
6539 __asm__
__volatile__( "" : : : "memory" );
6548 #endif /* _WINNT_ */