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__) || defined(__arm64ec__))
45 #if defined(_NTSYSTEM_) || defined(WINE_UNIX_LIB)
46 #define NTSYSAPI DECLSPEC_EXPORT
48 #define NTSYSAPI DECLSPEC_IMPORT
51 #define NTAPI __stdcall
52 #define FASTCALL __fastcall
54 #ifndef DECLSPEC_IMPORT
55 # if defined(_MSC_VER)
56 # define DECLSPEC_IMPORT __declspec(dllimport)
57 # elif defined(__MINGW32__) || defined(__CYGWIN__)
58 # define DECLSPEC_IMPORT __attribute__((dllimport))
59 # elif defined(__GNUC__)
60 # define DECLSPEC_IMPORT __attribute__((visibility ("hidden")))
62 # 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))
121 #elif defined(__GNUC__)
122 #define DECLSPEC_SELECTANY __attribute__((weak))
124 #define DECLSPEC_SELECTANY
129 # if defined(_MSC_VER)
130 # if (_MSC_VER >= 1210)
131 # define NOP_FUNCTION __noop
133 # define NOP_FUNCTION (void)0
136 # define NOP_FUNCTION(...)
140 #ifndef DECLSPEC_ADDRSAFE
141 # if defined(_MSC_VER) && (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
142 # define DECLSPEC_ADDRSAFE __declspec(address_safe)
144 # define DECLSPEC_ADDRSAFE
149 # if defined(_MSC_VER) && (_MSC_VER >= 1200)
150 # define FORCEINLINE __forceinline
151 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
152 # define FORCEINLINE inline __attribute__((always_inline))
154 # define FORCEINLINE inline
158 #ifndef DECLSPEC_NOINLINE
159 # if defined(_MSC_VER) && (_MSC_VER >= 1300)
160 # define DECLSPEC_NOINLINE __declspec(noinline)
161 # elif defined(__GNUC__)
162 # define DECLSPEC_NOINLINE __attribute__((noinline))
164 # define DECLSPEC_NOINLINE
168 #ifndef DECLSPEC_DEPRECATED
169 # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
170 # define DECLSPEC_DEPRECATED __declspec(deprecated)
171 # define DEPRECATE_SUPPORTED
172 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
173 # define DECLSPEC_DEPRECATED __attribute__((deprecated))
174 # define DEPRECATE_SUPPORTED
176 # define DECLSPEC_DEPRECATED
177 # undef DEPRECATE_SUPPORTED
181 /* a couple of useful Wine extensions */
183 #if defined(__WINESRC__) && !defined(WINE_UNIX_LIB)
184 /* Wine uses .spec file for PE exports */
185 # define DECLSPEC_EXPORT
186 #elif defined(_MSC_VER)
187 # define DECLSPEC_EXPORT __declspec(dllexport)
188 #elif defined(__MINGW32__)
189 # define DECLSPEC_EXPORT __attribute__((dllexport))
190 #elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) && !defined(__sun)
191 # define DECLSPEC_EXPORT __attribute__((visibility ("default")))
193 # define DECLSPEC_EXPORT
196 #ifndef __has_attribute
197 # define __has_attribute(x) 0
200 #if ((defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)))) || __has_attribute(ms_hook_prologue)) && (defined(__i386__) || defined(__x86_64__))
201 #define DECLSPEC_HOTPATCH __attribute__((__ms_hook_prologue__))
203 #define DECLSPEC_HOTPATCH
206 #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
207 #define __WINE_ALLOC_SIZE(...) __attribute__((__alloc_size__(__VA_ARGS__)))
209 #define __WINE_ALLOC_SIZE(...)
212 #if defined(__GNUC__) && (__GNUC__ > 10)
213 #define __WINE_DEALLOC(...) __attribute__((malloc (__VA_ARGS__)))
215 #define __WINE_DEALLOC(...)
218 #if defined(__GNUC__) && (__GNUC__ > 2)
219 #define __WINE_MALLOC __attribute__((malloc))
221 #define __WINE_MALLOC
224 /* Anonymous union/struct handling */
226 #ifndef NONAMELESSSTRUCT
228 /* Anonymous struct support starts with gcc 2.96 or gcc/g++ 3.x */
229 # if (__GNUC__ < 2) || ((__GNUC__ == 2) && (defined(__cplusplus) || (__GNUC_MINOR__ < 96)))
230 # define NONAMELESSSTRUCT
232 # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
233 # define NONAMELESSSTRUCT
235 #endif /* NONAMELESSSTRUCT */
237 #ifndef NONAMELESSUNION
239 /* Anonymous unions support starts with gcc 2.96/g++ 2.95 */
240 # if (__GNUC__ < 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ < 95) || ((__GNUC_MINOR__ == 95) && !defined(__cplusplus))))
241 # define NONAMELESSUNION
243 # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
244 # define NONAMELESSUNION
246 #endif /* NONAMELESSUNION */
248 #undef DUMMYSTRUCTNAME
249 #undef DUMMYSTRUCTNAME1
250 #undef DUMMYSTRUCTNAME2
251 #undef DUMMYSTRUCTNAME3
252 #undef DUMMYSTRUCTNAME4
253 #undef DUMMYSTRUCTNAME5
254 #ifndef NONAMELESSSTRUCT
255 #define DUMMYSTRUCTNAME
256 #define DUMMYSTRUCTNAME1
257 #define DUMMYSTRUCTNAME2
258 #define DUMMYSTRUCTNAME3
259 #define DUMMYSTRUCTNAME4
260 #define DUMMYSTRUCTNAME5
261 #else /* !defined(NONAMELESSSTRUCT) */
262 #define DUMMYSTRUCTNAME s
263 #define DUMMYSTRUCTNAME1 s1
264 #define DUMMYSTRUCTNAME2 s2
265 #define DUMMYSTRUCTNAME3 s3
266 #define DUMMYSTRUCTNAME4 s4
267 #define DUMMYSTRUCTNAME5 s5
268 #endif /* !defined(NONAMELESSSTRUCT) */
270 #undef DUMMYUNIONNAME
271 #undef DUMMYUNIONNAME1
272 #undef DUMMYUNIONNAME2
273 #undef DUMMYUNIONNAME3
274 #undef DUMMYUNIONNAME4
275 #undef DUMMYUNIONNAME5
276 #undef DUMMYUNIONNAME6
277 #undef DUMMYUNIONNAME7
278 #undef DUMMYUNIONNAME8
279 #ifndef NONAMELESSUNION
280 #define DUMMYUNIONNAME
281 #define DUMMYUNIONNAME1
282 #define DUMMYUNIONNAME2
283 #define DUMMYUNIONNAME3
284 #define DUMMYUNIONNAME4
285 #define DUMMYUNIONNAME5
286 #define DUMMYUNIONNAME6
287 #define DUMMYUNIONNAME7
288 #define DUMMYUNIONNAME8
289 #else /* !defined(NONAMELESSUNION) */
290 #define DUMMYUNIONNAME u
291 #define DUMMYUNIONNAME1 u1
292 #define DUMMYUNIONNAME2 u2
293 #define DUMMYUNIONNAME3 u3
294 #define DUMMYUNIONNAME4 u4
295 #define DUMMYUNIONNAME5 u5
296 #define DUMMYUNIONNAME6 u6
297 #define DUMMYUNIONNAME7 u7
298 #define DUMMYUNIONNAME8 u8
299 #endif /* !defined(NONAMELESSUNION) */
301 #undef __C89_NAMELESS
302 #undef __C89_NAMELESSSTRUCTNAME
303 #undef __C89_NAMELESSSTRUCTNAME1
304 #undef __C89_NAMELESSSTRUCTNAME2
305 #undef __C89_NAMELESSSTRUCTNAME3
306 #undef __C89_NAMELESSSTRUCTNAME4
307 #undef __C89_NAMELESSSTRUCTNAME5
308 #undef __C89_NAMELESSUNIONNAME
309 #undef __C89_NAMELESSUNIONNAME1
310 #undef __C89_NAMELESSUNIONNAME2
311 #undef __C89_NAMELESSUNIONNAME3
312 #undef __C89_NAMELESSUNIONNAME4
313 #undef __C89_NAMELESSUNIONNAME5
314 #undef __C89_NAMELESSUNIONNAME6
315 #undef __C89_NAMELESSUNIONNAME7
316 #undef __C89_NAMELESSUNIONNAME8
318 #if !defined(WINE_NO_NAMELESS_EXTENSION)
320 /* Anonymous structs support starts with gcc 2.96/g++ 2.95 */
321 # if (__GNUC__ > 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ > 95) || ((__GNUC_MINOR__ == 95) && defined(__cplusplus))))
322 # define __C89_NAMELESS __extension__
324 # elif defined(_MSC_VER)
325 # define __C89_NAMELESS
329 #ifdef __C89_NAMELESS
330 # define __C89_NAMELESSSTRUCTNAME
331 # define __C89_NAMELESSSTRUCTNAME1
332 # define __C89_NAMELESSSTRUCTNAME2
333 # define __C89_NAMELESSSTRUCTNAME3
334 # define __C89_NAMELESSSTRUCTNAME4
335 # define __C89_NAMELESSSTRUCTNAME5
336 # define __C89_NAMELESSUNIONNAME
337 # define __C89_NAMELESSUNIONNAME1
338 # define __C89_NAMELESSUNIONNAME2
339 # define __C89_NAMELESSUNIONNAME3
340 # define __C89_NAMELESSUNIONNAME4
341 # define __C89_NAMELESSUNIONNAME5
342 # define __C89_NAMELESSUNIONNAME6
343 # define __C89_NAMELESSUNIONNAME7
344 # define __C89_NAMELESSUNIONNAME8
346 # define __C89_NAMELESS
347 # define __C89_NAMELESSSTRUCTNAME DUMMYSTRUCTNAME
348 # define __C89_NAMELESSSTRUCTNAME1 DUMMYSTRUCTNAME1
349 # define __C89_NAMELESSSTRUCTNAME2 DUMMYSTRUCTNAME2
350 # define __C89_NAMELESSSTRUCTNAME3 DUMMYSTRUCTNAME3
351 # define __C89_NAMELESSSTRUCTNAME4 DUMMYSTRUCTNAME4
352 # define __C89_NAMELESSSTRUCTNAME5 DUMMYSTRUCTNAME5
353 # define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME
354 # define __C89_NAMELESSUNIONNAME1 DUMMYUNIONNAME1
355 # define __C89_NAMELESSUNIONNAME2 DUMMYUNIONNAME2
356 # define __C89_NAMELESSUNIONNAME3 DUMMYUNIONNAME3
357 # define __C89_NAMELESSUNIONNAME4 DUMMYUNIONNAME4
358 # define __C89_NAMELESSUNIONNAME5 DUMMYUNIONNAME5
359 # define __C89_NAMELESSUNIONNAME6 DUMMYUNIONNAME6
360 # define __C89_NAMELESSUNIONNAME7 DUMMYUNIONNAME7
361 # define __C89_NAMELESSUNIONNAME8 DUMMYUNIONNAME8
364 /* C99 restrict support */
366 #if defined(ENABLE_RESTRICTED) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
367 # if defined(_MSC_VER) && defined(_M_MRX000)
368 # define RESTRICTED_POINTER __restrict
369 # elif defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95)))
370 # define RESTRICTED_POINTER __restrict
372 # define RESTRICTED_POINTER
375 # define RESTRICTED_POINTER
378 /* C99 unaligned support */
381 #if defined(_MSC_VER) && (defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64))
382 # define UNALIGNED __unaligned
384 # define UNALIGNED64 __unaligned
394 /* Alignment macros */
397 #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
398 #define MEMORY_ALLOCATION_ALIGNMENT 16
400 #define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
401 #define MEMORY_ALLOCATION_ALIGNMENT 8
404 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
405 # define TYPE_ALIGNMENT(t) __alignof(t)
406 #elif defined(__GNUC__)
407 # define TYPE_ALIGNMENT(t) __alignof__(t)
409 # define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
413 # define PROBE_ALIGNMENT(_s) \
414 (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? \
415 TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD))
416 # define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD)
418 # define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
421 /* Compile time assertion */
423 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
424 #define C_ASSERT(e) _Static_assert(e, #e)
426 #define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
429 /* Eliminate Microsoft C/C++ compiler warning 4715 */
430 #if defined(_MSC_VER) && (_MSC_VER > 1200)
431 # define DEFAULT_UNREACHABLE default: __assume(0)
432 #elif defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5))))
433 # define DEFAULT_UNREACHABLE default: __builtin_unreachable()
435 # define DEFAULT_UNREACHABLE default:
439 #define APPLICATION_ERROR_MASK 0x20000000
440 #define ERROR_SEVERITY_SUCCESS 0x00000000
441 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
442 #define ERROR_SEVERITY_WARNING 0x80000000
443 #define ERROR_SEVERITY_ERROR 0xC0000000
446 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
448 inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)|((int)b)); } \
449 inline ENUMTYPE operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \
450 inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)&((int)b)); } \
451 inline ENUMTYPE operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \
452 inline ENUMTYPE operator ~ (ENUMTYPE a) { return (ENUMTYPE)(~((int)a)); } \
453 inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)^((int)b)); } \
454 inline ENUMTYPE operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \
457 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */
460 /* Microsoft's macros for declaring functions */
463 # define EXTERN_C extern "C"
465 # define EXTERN_C extern
468 #define STDMETHODCALLTYPE WINAPI
469 #define STDMETHODVCALLTYPE WINAPIV
470 #define STDAPICALLTYPE WINAPI
471 #define STDAPIVCALLTYPE WINAPIV
473 #define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
474 #define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
475 #define STDMETHODIMP HRESULT STDMETHODCALLTYPE
476 #define STDMETHODIMP_(type) type STDMETHODCALLTYPE
477 #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
478 #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
479 #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
480 #define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
482 /* Define the basic types */
487 typedef VOID
*PVOID64
;
488 typedef BYTE BOOLEAN
, *PBOOLEAN
;
489 typedef char CHAR
, *PCHAR
;
490 typedef short SHORT
, *PSHORT
;
491 #if !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES)
492 typedef long LONG
, *PLONG
;
494 typedef int LONG
, *PLONG
;
497 /* Some systems might have wchar_t, but we really need 16 bit characters */
498 #if defined(WINE_UNICODE_NATIVE)
499 typedef wchar_t WCHAR
;
500 #elif __cpp_unicode_literals >= 200710
501 typedef char16_t WCHAR
;
503 typedef unsigned short WCHAR
;
505 typedef WCHAR
*PWCHAR
;
507 typedef ULONG UCSCHAR
;
508 #define MIN_UCSCHAR (0)
509 #define MAX_UCSCHAR (0x0010ffff)
510 #define UCSCHAR_INVALID_CHARACTER (0xffffffff)
512 /* 'Extended/Wide' numerical types */
516 typedef signed __int64 LONGLONG
, *PLONGLONG
;
517 typedef unsigned __int64 ULONGLONG
, *PULONGLONG
;
519 typedef signed __int64
DECLSPEC_ALIGN(8) LONGLONG
, *PLONGLONG
;
520 typedef unsigned __int64
DECLSPEC_ALIGN(8) ULONGLONG
, *PULONGLONG
;
527 typedef ULONGLONG DWORDLONG
, *PDWORDLONG
;
529 typedef ULONGLONG
DECLSPEC_ALIGN(8) DWORDLONG
, *PDWORDLONG
;
533 /* ANSI string types */
534 typedef CHAR
*PCH
, *LPCH
, *PNZCH
;
535 typedef const CHAR
*PCCH
, *LPCCH
, *PCNZCH
;
536 typedef CHAR
*PSTR
, *LPSTR
, *NPSTR
;
537 typedef const CHAR
*PCSTR
, *LPCSTR
;
538 typedef CHAR
*PZZSTR
;
539 typedef const CHAR
*PCZZSTR
;
541 /* Unicode string types */
542 typedef const WCHAR
*PCWCHAR
, *LPCWCHAR
;
543 typedef const WCHAR
*PCUWCHAR
, *LPCUWCHAR
;
544 typedef WCHAR
*PWCH
, *LPWCH
;
545 typedef const WCHAR
*PCWCH
, *LPCWCH
;
546 typedef WCHAR
*PNZWCH
, *PUNZWCH
;
547 typedef const WCHAR
*PCNZWCH
, *PCUNZWCH
;
548 typedef WCHAR
*PWSTR
, *LPWSTR
, *NWPSTR
;
549 typedef const WCHAR
*PCWSTR
, *LPCWSTR
;
550 typedef WCHAR
*PZZWSTR
, *PUZZWSTR
;
551 typedef const WCHAR
*PCZZWSTR
, *PCUZZWSTR
;
552 typedef PWSTR
*PZPWSTR
;
553 typedef PCWSTR
*PZPCWSTR
;
555 /* Neutral character and string types */
556 /* These are only defined for Winelib, i.e. _not_ defined for
557 * the emulator. The reason is they depend on the UNICODE
558 * macro which only exists in the user's code.
560 #ifndef WINE_NO_UNICODE_MACROS
562 # ifndef _TCHAR_DEFINED
563 typedef WCHAR TCHAR
, *PTCHAR
;
564 # define _TCHAR_DEFINED
566 typedef LPWCH PTCH
, LPTCH
;
567 typedef LPCWCH PCTCH
, LPCTCH
;
568 typedef LPWSTR PTSTR
, LPTSTR
;
569 typedef LPCWSTR PCTSTR
, LPCTSTR
;
570 typedef LPWSTR PUTSTR
, LPUTSTR
;
571 typedef LPCWSTR PCUTSTR
, LPCUTSTR
;
572 typedef PNZWCH PNZTCH
;
573 typedef PUNZWCH PUNZTCH
;
574 typedef PCNZWCH PCNZTCH
;
575 typedef PCUNZWCH PCUNZTCH
;
576 typedef PZZWSTR PZZTSTR
;
577 typedef PCZZWSTR PCZZTSTR
;
578 typedef PUZZWSTR PUZZTSTR
;
579 typedef PCUZZWSTR PCUZZTSTR
;
581 # ifndef _TCHAR_DEFINED
582 typedef CHAR TCHAR
, *PTCHAR
;
583 # define _TCHAR_DEFINED
585 typedef LPCH PTCH
, LPTCH
;
586 typedef LPCCH PCTCH
, LPCTCH
;
587 typedef LPSTR PTSTR
, LPTSTR
;
588 typedef LPCSTR PCTSTR
, LPCTSTR
;
589 typedef PNZCH PNZTCH
, PUNZTCH
;
590 typedef PCNZCH PCNZTCH
, PCUNZTCH
;
591 typedef PZZSTR PZZTSTR
, PUZZTSTR
;
592 typedef PCZZSTR PCZZTSTR
, PCUZZTSTR
;
593 # endif /* UNICODE */
594 #endif /* WINE_NO_UNICODE_MACROS */
596 /* UCS string types */
597 typedef UCSCHAR
*PUCSCHAR
, *PUUCSCHAR
;
598 typedef const UCSCHAR
*PCUCSCHAR
, *PCUUCSCHAR
;
599 typedef UCSCHAR
*PUCSSTR
, *PUUCSSTR
;
600 typedef const UCSCHAR
*PCUCSSTR
, *PCUUCSSTR
;
602 /* Misc common WIN32 types */
604 typedef DWORD LCID
, *PLCID
;
606 typedef DWORD EXECUTION_STATE
;
607 #ifndef _HRESULT_DEFINED
608 #define _HRESULT_DEFINED
609 typedef LONG HRESULT
;
614 typedef void *HANDLE
;
615 typedef HANDLE
*PHANDLE
, *LPHANDLE
;
618 #define DECLARE_HANDLE(a) typedef struct a##__ { int unused; } *a
620 #define DECLARE_HANDLE(a) typedef HANDLE a
627 /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
629 #if !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES)
630 # define __MSABI_LONG(x) x ## l
632 # define __MSABI_LONG(x) x
638 #ifndef WIN32_NO_STATUS
640 #define STATUS_WAIT_0 ((DWORD) 0x00000000)
641 #define STATUS_ABANDONED_WAIT_0 ((DWORD) 0x00000080)
642 #define STATUS_USER_APC ((DWORD) 0x000000C0)
643 #define STATUS_TIMEOUT ((DWORD) 0x00000102)
644 #define STATUS_PENDING ((DWORD) 0x00000103)
645 #define STATUS_SEGMENT_NOTIFICATION ((DWORD) 0x40000005)
646 #define STATUS_FATAL_APP_EXIT ((DWORD) 0x40000015)
647 #define STATUS_GUARD_PAGE_VIOLATION ((DWORD) 0x80000001)
648 #define STATUS_DATATYPE_MISALIGNMENT ((DWORD) 0x80000002)
649 #define STATUS_BREAKPOINT ((DWORD) 0x80000003)
650 #define STATUS_SINGLE_STEP ((DWORD) 0x80000004)
651 #define STATUS_LONGJUMP ((DWORD) 0x80000026)
652 #define STATUS_UNWIND_CONSOLIDATE ((DWORD) 0x80000029)
653 #define STATUS_ACCESS_VIOLATION ((DWORD) 0xC0000005)
654 #define STATUS_IN_PAGE_ERROR ((DWORD) 0xC0000006)
655 #define STATUS_INVALID_HANDLE ((DWORD) 0xC0000008)
656 #define STATUS_NO_MEMORY ((DWORD) 0xC0000017)
657 #define STATUS_ILLEGAL_INSTRUCTION ((DWORD) 0xC000001D)
658 #define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD) 0xC0000025)
659 #define STATUS_INVALID_DISPOSITION ((DWORD) 0xC0000026)
660 #define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD) 0xC000008C)
661 #define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD) 0xC000008D)
662 #define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD) 0xC000008E)
663 #define STATUS_FLOAT_INEXACT_RESULT ((DWORD) 0xC000008F)
664 #define STATUS_FLOAT_INVALID_OPERATION ((DWORD) 0xC0000090)
665 #define STATUS_FLOAT_OVERFLOW ((DWORD) 0xC0000091)
666 #define STATUS_FLOAT_STACK_CHECK ((DWORD) 0xC0000092)
667 #define STATUS_FLOAT_UNDERFLOW ((DWORD) 0xC0000093)
668 #define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD) 0xC0000094)
669 #define STATUS_INTEGER_OVERFLOW ((DWORD) 0xC0000095)
670 #define STATUS_PRIVILEGED_INSTRUCTION ((DWORD) 0xC0000096)
671 #define STATUS_STACK_OVERFLOW ((DWORD) 0xC00000FD)
672 #define STATUS_DLL_NOT_FOUND ((DWORD) 0xC0000135)
673 #define STATUS_ORDINAL_NOT_FOUND ((DWORD) 0xC0000138)
674 #define STATUS_ENTRYPOINT_NOT_FOUND ((DWORD) 0xC0000139)
675 #define STATUS_CONTROL_C_EXIT ((DWORD) 0xC000013A)
676 #define STATUS_DLL_INIT_FAILED ((DWORD) 0xC0000142)
677 #define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD) 0xC00002B4)
678 #define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD) 0xC00002B5)
679 #define STATUS_REG_NAT_CONSUMPTION ((DWORD) 0xC00002C9)
680 #define STATUS_HEAP_CORRUPTION ((DWORD) 0xC0000374)
681 #define STATUS_STACK_BUFFER_OVERRUN ((DWORD) 0xC0000409)
682 #define STATUS_INVALID_CRUNTIME_PARAMETER ((DWORD) 0xC0000417)
683 #define STATUS_ASSERTION_FAILURE ((DWORD) 0xC0000420)
684 #define STATUS_SXS_EARLY_DEACTIVATION ((DWORD) 0xC015000F)
685 #define STATUS_SXS_INVALID_DEACTIVATION ((DWORD) 0xC0150010)
687 /* status values for ContinueDebugEvent */
688 #define DBG_EXCEPTION_HANDLED ((DWORD) 0x00010001)
689 #define DBG_CONTINUE ((DWORD) 0x00010002)
690 #define DBG_REPLY_LATER ((DWORD) 0x40010001)
691 #define DBG_TERMINATE_THREAD ((DWORD) 0x40010003)
692 #define DBG_TERMINATE_PROCESS ((DWORD) 0x40010004)
693 #define DBG_CONTROL_C ((DWORD) 0x40010005)
694 #define DBG_PRINTEXCEPTION_C ((DWORD) 0x40010006)
695 #define DBG_RIPEXCEPTION ((DWORD) 0x40010007)
696 #define DBG_CONTROL_BREAK ((DWORD) 0x40010008)
697 #define DBG_COMMAND_EXCEPTION ((DWORD) 0x40010009)
698 #define DBG_PRINTEXCEPTION_WIDE_C ((DWORD) 0x4001000A)
699 #define DBG_EXCEPTION_NOT_HANDLED ((DWORD) 0x80010001)
701 #endif /* WIN32_NO_STATUS */
703 /* Argument 1 passed to the DllEntryProc. */
704 #define DLL_PROCESS_DETACH 0 /* detach process (unload library) */
705 #define DLL_PROCESS_ATTACH 1 /* attach process (load library) */
706 #define DLL_THREAD_ATTACH 2 /* attach new thread */
707 #define DLL_THREAD_DETACH 3 /* detach thread */
709 /* u.x.wProcessorArchitecture (NT) */
710 #define PROCESSOR_ARCHITECTURE_INTEL 0
711 #define PROCESSOR_ARCHITECTURE_MIPS 1
712 #define PROCESSOR_ARCHITECTURE_ALPHA 2
713 #define PROCESSOR_ARCHITECTURE_PPC 3
714 #define PROCESSOR_ARCHITECTURE_SHX 4
715 #define PROCESSOR_ARCHITECTURE_ARM 5
716 #define PROCESSOR_ARCHITECTURE_IA64 6
717 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
718 #define PROCESSOR_ARCHITECTURE_MSIL 8
719 #define PROCESSOR_ARCHITECTURE_AMD64 9
720 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
721 #define PROCESSOR_ARCHITECTURE_NEUTRAL 11
722 #define PROCESSOR_ARCHITECTURE_ARM64 12
723 #define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 13
724 #define PROCESSOR_ARCHITECTURE_IA32_ON_ARM64 14
725 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
727 /* dwProcessorType */
728 #define PROCESSOR_INTEL_386 386
729 #define PROCESSOR_INTEL_486 486
730 #define PROCESSOR_INTEL_PENTIUM 586
731 #define PROCESSOR_INTEL_860 860
732 #define PROCESSOR_INTEL_IA64 2200
733 #define PROCESSOR_AMD_X8664 8664
734 #define PROCESSOR_MIPS_R2000 2000
735 #define PROCESSOR_MIPS_R3000 3000
736 #define PROCESSOR_MIPS_R4000 4000
737 #define PROCESSOR_ALPHA_21064 21064
738 #define PROCESSOR_PPC_601 601
739 #define PROCESSOR_PPC_603 603
740 #define PROCESSOR_PPC_604 604
741 #define PROCESSOR_PPC_620 620
742 #define PROCESSOR_HITACHI_SH3 10003
743 #define PROCESSOR_HITACHI_SH3E 10004
744 #define PROCESSOR_HITACHI_SH4 10005
745 #define PROCESSOR_MOTOROLA_821 821
746 #define PROCESSOR_SHx_SH3 103
747 #define PROCESSOR_SHx_SH4 104
748 #define PROCESSOR_STRONGARM 2577
749 #define PROCESSOR_ARM720 1824 /* 0x720 */
750 #define PROCESSOR_ARM820 2080 /* 0x820 */
751 #define PROCESSOR_ARM920 2336 /* 0x920 */
752 #define PROCESSOR_ARM_7TDMI 70001
753 #define PROCESSOR_OPTIL 18767
756 #define MAXIMUM_PROCESSORS 64
758 #define MAXIMUM_PROCESSORS 32
761 typedef struct _MEMORY_BASIC_INFORMATION
764 LPVOID AllocationBase
;
765 DWORD AllocationProtect
;
770 } MEMORY_BASIC_INFORMATION
, *PMEMORY_BASIC_INFORMATION
;
772 typedef struct _MEM_ADDRESS_REQUIREMENTS
774 void *LowestStartingAddress
;
775 void *HighestEndingAddress
;
777 } MEM_ADDRESS_REQUIREMENTS
, *PMEM_ADDRESS_REQUIREMENTS
;
779 #define MEM_EXTENDED_PARAMETER_TYPE_BITS 8
781 typedef enum MEM_EXTENDED_PARAMETER_TYPE
{
782 MemExtendedParameterInvalidType
= 0,
783 MemExtendedParameterAddressRequirements
,
784 MemExtendedParameterNumaNode
,
785 MemExtendedParameterPartitionHandle
,
786 MemExtendedParameterUserPhysicalHandle
,
787 MemExtendedParameterAttributeFlags
,
788 MemExtendedParameterImageMachine
,
789 MemExtendedParameterMax
790 } MEM_EXTENDED_PARAMETER_TYPE
, *PMEM_EXTENDED_PARAMETER_TYPE
;
792 typedef struct DECLSPEC_ALIGN(8) MEM_EXTENDED_PARAMETER
{
795 DWORD64 Type
: MEM_EXTENDED_PARAMETER_TYPE_BITS
;
796 DWORD64 Reserved
: 64 - MEM_EXTENDED_PARAMETER_TYPE_BITS
;
807 } MEM_EXTENDED_PARAMETER
, *PMEM_EXTENDED_PARAMETER
;
809 #define MEM_EXTENDED_PARAMETER_GRAPHICS 0x00000001
810 #define MEM_EXTENDED_PARAMETER_NONPAGED 0x00000002
811 #define MEM_EXTENDED_PARAMETER_ZERO_PAGES_OPTIONAL 0x00000004
812 #define MEM_EXTENDED_PARAMETER_NONPAGED_LARGE 0x00000008
813 #define MEM_EXTENDED_PARAMETER_NONPAGED_HUGE 0x00000010
814 #define MEM_EXTENDED_PARAMETER_SOFT_FAULT_PAGES 0x00000020
815 #define MEM_EXTENDED_PARAMETER_EC_CODE 0x00000040
816 #define MEM_EXTENDED_PARAMETER_IMAGE_NO_HPAT 0x00000080
818 #define PAGE_NOACCESS 0x01
819 #define PAGE_READONLY 0x02
820 #define PAGE_READWRITE 0x04
821 #define PAGE_WRITECOPY 0x08
822 #define PAGE_EXECUTE 0x10
823 #define PAGE_EXECUTE_READ 0x20
824 #define PAGE_EXECUTE_READWRITE 0x40
825 #define PAGE_EXECUTE_WRITECOPY 0x80
826 #define PAGE_GUARD 0x100
827 #define PAGE_NOCACHE 0x200
828 #define PAGE_WRITECOMBINE 0x400
830 #define MEM_COMMIT 0x00001000
831 #define MEM_RESERVE 0x00002000
832 #define MEM_REPLACE_PLACEHOLDER 0x00004000
833 #define MEM_RESERVE_PLACEHOLDER 0x00040000
834 #define MEM_RESET 0x00080000
835 #define MEM_TOP_DOWN 0x00100000
836 #define MEM_PHYSICAL 0x00400000
837 #define MEM_RESET_UNDO 0x10000000
838 #define MEM_LARGE_PAGES 0x20000000
840 #define MEM_COALESCE_PLACEHOLDERS 0x00000001
841 #define MEM_PRESERVE_PLACEHOLDER 0x00000002
842 #define MEM_DECOMMIT 0x00004000
843 #define MEM_RELEASE 0x00008000
844 #define MEM_UNMAP_WITH_TRANSIENT_BOOST 0x00000001
846 #define MEM_FREE 0x00010000
847 #define MEM_PRIVATE 0x00020000
848 #define MEM_MAPPED 0x00040000
849 #define MEM_WRITE_WATCH 0x00200000
850 #define MEM_4MB_PAGES 0x80000000
852 #define SEC_FILE 0x00800000
853 #define SEC_IMAGE 0x01000000
854 #define SEC_PROTECTED_IMAGE 0x02000000
855 #define SEC_RESERVE 0x04000000
856 #define SEC_COMMIT 0x08000000
857 #define SEC_NOCACHE 0x10000000
858 #define SEC_WRITECOMBINE 0x40000000
859 #define SEC_LARGE_PAGES 0x80000000
860 #define SEC_IMAGE_NO_EXECUTE (SEC_IMAGE | SEC_NOCACHE)
861 #define MEM_IMAGE SEC_IMAGE
863 #define WRITE_WATCH_FLAG_RESET 0x00000001
865 #define AT_ROUND_TO_PAGE 0x40000000
869 #define MINSHORT 0x8000
870 #define MAXSHORT 0x7fff
871 #define MINLONG 0x80000000
872 #define MAXLONG 0x7fffffff
874 #define MAXWORD 0xffff
875 #define MAXDWORD 0xffffffff
876 #define MAXLONGLONG (((LONGLONG)0x7fffffff << 32) | 0xffffffff)
878 #define UNICODE_NULL ((WCHAR)0)
880 #define UNICODE_STRING_MAX_CHARS 32767
882 #define FIELD_OFFSET(type, field) ((LONG)offsetof(type, field))
883 #define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
884 #define RTL_SIZEOF_THROUGH_FIELD(type, field) (FIELD_OFFSET(type, field) + RTL_FIELD_SIZE(type, field))
886 #define CONTAINING_RECORD(address, type, field) \
887 ((type *)((PCHAR)(address) - offsetof(type, field)))
889 #define ARRAYSIZE(x) (sizeof(x) / sizeof((x)[0]))
891 # define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
896 typedef struct _LIST_ENTRY
{
897 struct _LIST_ENTRY
*Flink
;
898 struct _LIST_ENTRY
*Blink
;
899 } LIST_ENTRY
, *PLIST_ENTRY
, * RESTRICTED_POINTER PRLIST_ENTRY
;
901 typedef struct _SINGLE_LIST_ENTRY
{
902 struct _SINGLE_LIST_ENTRY
*Next
;
903 } SINGLE_LIST_ENTRY
, *PSINGLE_LIST_ENTRY
;
907 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
{
908 struct _SLIST_ENTRY
*Next
;
909 } SLIST_ENTRY
, *PSLIST_ENTRY
;
911 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER
{
918 ULONGLONG Sequence
:9;
919 ULONGLONG NextEntry
:39;
920 ULONGLONG HeaderType
:1;
922 ULONGLONG Reserved
:59;
927 ULONGLONG Sequence
:48;
928 ULONGLONG HeaderType
:1;
930 ULONGLONG Reserved
:2;
931 ULONGLONG NextEntry
:60;
933 } SLIST_HEADER
, *PSLIST_HEADER
;
937 #undef SLIST_ENTRY /* for Mac OS */
938 #define SLIST_ENTRY SINGLE_LIST_ENTRY
939 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
940 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
942 typedef union _SLIST_HEADER
{
949 } SLIST_HEADER
, *PSLIST_HEADER
;
953 NTSYSAPI PSLIST_ENTRY WINAPI
RtlFirstEntrySList(const SLIST_HEADER
*);
954 NTSYSAPI VOID WINAPI
RtlInitializeSListHead(PSLIST_HEADER
);
955 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedFlushSList(PSLIST_HEADER
);
956 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedPopEntrySList(PSLIST_HEADER
);
957 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedPushEntrySList(PSLIST_HEADER
, PSLIST_ENTRY
);
958 NTSYSAPI WORD WINAPI
RtlQueryDepthSList(PSLIST_HEADER
);
961 /* Fast fail (__fastfail) codes */
963 #define FAST_FAIL_LEGACY_GS_VIOLATION 0
964 #define FAST_FAIL_VTGUARD_CHECK_FAILURE 1
965 #define FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
966 #define FAST_FAIL_CORRUPT_LIST_ENTRY 3
967 #define FAST_FAIL_INCORRECT_STACK 4
968 #define FAST_FAIL_INVALID_ARG 5
969 #define FAST_FAIL_GS_COOKIE_INIT 6
970 #define FAST_FAIL_FATAL_APP_EXIT 7
971 #define FAST_FAIL_RANGE_CHECK_FAILURE 8
972 #define FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
973 #define FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10
974 #define FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11
975 #define FAST_FAIL_INVALID_FIBER_SWITCH 12
976 #define FAST_FAIL_INVALID_SET_OF_CONTEXT 13
977 #define FAST_FAIL_INVALID_REFERENCE_COUNT 14
978 #define FAST_FAIL_INVALID_JUMP_BUFFER 18
979 #define FAST_FAIL_MRDATA_MODIFIED 19
980 #define FAST_FAIL_CERTIFICATION_FAILURE 20
981 #define FAST_FAIL_INVALID_EXCEPTION_CHAIN 21
982 #define FAST_FAIL_CRYPTO_LIBRARY 22
983 #define FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 23
984 #define FAST_FAIL_INVALID_IMAGE_BASE 24
985 #define FAST_FAIL_DLOAD_PROTECTION_FAILURE 25
986 #define FAST_FAIL_UNSAFE_EXTENSION_CALL 26
987 #define FAST_FAIL_DEPRECATED_SERVICE_INVOKED 27
988 #define FAST_FAIL_INVALID_BUFFER_ACCESS 28
989 #define FAST_FAIL_INVALID_BALANCED_TREE 29
990 #define FAST_FAIL_INVALID_NEXT_THREAD 30
991 #define FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED 31
992 #define FAST_FAIL_APCS_DISABLED 32
993 #define FAST_FAIL_INVALID_IDLE_STATE 33
994 #define FAST_FAIL_MRDATA_PROTECTION_FAILURE 34
995 #define FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION 35
996 #define FAST_FAIL_INVALID_LOCK_STATE 36
997 #define FAST_FAIL_GUARD_JUMPTABLE 37
998 #define FAST_FAIL_INVALID_LONGJUMP_TARGET 38
999 #define FAST_FAIL_INVALID_DISPATCH_CONTEXT 39
1000 #define FAST_FAIL_INVALID_THREAD 40
1001 #define FAST_FAIL_INVALID_SYSCALL_NUMBER 41
1002 #define FAST_FAIL_INVALID_FILE_OPERATION 42
1003 #define FAST_FAIL_LPAC_ACCESS_DENIED 43
1004 #define FAST_FAIL_GUARD_SS_FAILURE 44
1005 #define FAST_FAIL_LOADER_CONTINUITY_FAILURE 45
1006 #define FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE 46
1007 #define FAST_FAIL_INVALID_CONTROL_STACK 47
1008 #define FAST_FAIL_SET_CONTEXT_DENIED 48
1009 #define FAST_FAIL_INVALID_IAT 49
1010 #define FAST_FAIL_HEAP_METADATA_CORRUPTION 50
1011 #define FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION 51
1012 #define FAST_FAIL_LOW_LABEL_ACCESS_DENIED 52
1013 #define FAST_FAIL_ENCLAVE_CALL_FAILURE 53
1014 #define FAST_FAIL_UNHANDLED_LSS_EXCEPTON 54
1015 #define FAST_FAIL_ADMINLESS_ACCESS_DENIED 55
1016 #define FAST_FAIL_UNEXPECTED_CALL 56
1017 #define FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS 57
1018 #define FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR 58
1019 #define FAST_FAIL_FLAGS_CORRUPTION 59
1020 #define FAST_FAIL_VEH_CORRUPTION 60
1021 #define FAST_FAIL_ETW_CORRUPTION 61
1022 #define FAST_FAIL_RIO_ABORT 62
1023 #define FAST_FAIL_INVALID_PFN 63
1024 #define FAST_FAIL_GUARD_ICALL_CHECK_FAILURE_XFG 64
1025 #define FAST_FAIL_CAST_GUARD 65
1026 #define FAST_FAIL_HOST_VISIBILITY_CHANGE 66
1027 #define FAST_FAIL_KERNEL_CET_SHADOW_STACK_ASSIST 67
1028 #define FAST_FAIL_PATCH_CALLBACK_FAILED 68
1029 #define FAST_FAIL_NTDLL_PATCH_FAILED 69
1030 #define FAST_FAIL_INVALID_FLS_DATA 70
1031 #define FAST_FAIL_INVALID_FAST_FAIL_CODE 0xFFFFFFFF
1035 #define HEAP_NO_SERIALIZE 0x00000001
1036 #define HEAP_GROWABLE 0x00000002
1037 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
1038 #define HEAP_ZERO_MEMORY 0x00000008
1039 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
1040 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
1041 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
1042 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
1043 #define HEAP_CREATE_ALIGN_16 0x00010000
1044 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
1045 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
1047 /* This flag allows it to create heaps shared by all processes under win95,
1048 FIXME: correct name */
1049 #define HEAP_SHARED 0x04000000
1051 typedef enum _HEAP_INFORMATION_CLASS
{
1052 HeapCompatibilityInformation
,
1053 } HEAP_INFORMATION_CLASS
;
1055 /* Processor feature flags. */
1056 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
1057 #define PF_FLOATING_POINT_EMULATED 1
1058 #define PF_COMPARE_EXCHANGE_DOUBLE 2
1059 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
1060 #define PF_PPC_MOVEMEM_64BIT_OK 4
1061 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
1062 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
1063 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
1064 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
1065 #define PF_PAE_ENABLED 9
1066 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
1067 #define PF_SSE_DAZ_MODE_AVAILABLE 11
1068 #define PF_NX_ENABLED 12
1069 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
1070 #define PF_COMPARE_EXCHANGE128 14
1071 #define PF_COMPARE64_EXCHANGE128 15
1072 #define PF_CHANNELS_ENABLED 16
1073 #define PF_XSAVE_ENABLED 17
1074 #define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
1075 #define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
1076 #define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
1077 #define PF_VIRT_FIRMWARE_ENABLED 21
1078 #define PF_RDWRFSGSBASE_AVAILABLE 22
1079 #define PF_FASTFAIL_AVAILABLE 23
1080 #define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
1081 #define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
1082 #define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
1083 #define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
1084 #define PF_RDRAND_INSTRUCTION_AVAILABLE 28
1085 #define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
1086 #define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
1087 #define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
1088 #define PF_RDTSCP_INSTRUCTION_AVAILABLE 32
1089 #define PF_RDPID_INSTRUCTION_AVAILABLE 33
1090 #define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34
1091 #define PF_MONITORX_INSTRUCTION_AVAILABLE 35
1092 #define PF_SSSE3_INSTRUCTIONS_AVAILABLE 36
1093 #define PF_SSE4_1_INSTRUCTIONS_AVAILABLE 37
1094 #define PF_SSE4_2_INSTRUCTIONS_AVAILABLE 38
1095 #define PF_AVX_INSTRUCTIONS_AVAILABLE 39
1096 #define PF_AVX2_INSTRUCTIONS_AVAILABLE 40
1097 #define PF_AVX512F_INSTRUCTIONS_AVAILABLE 41
1098 #define PF_ERMS_AVAILABLE 42
1099 #define PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE 43
1100 #define PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE 44
1101 #define PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE 45
1104 /* Execution state flags */
1105 #define ES_SYSTEM_REQUIRED 0x00000001
1106 #define ES_DISPLAY_REQUIRED 0x00000002
1107 #define ES_USER_PRESENT 0x00000004
1108 #define ES_CONTINUOUS 0x80000000
1112 /* The Win32 register context */
1114 /* i386 context definitions */
1116 #define I386_SIZE_OF_80387_REGISTERS 80
1118 typedef struct _I386_FLOATING_SAVE_AREA
1124 DWORD ErrorSelector
;
1127 BYTE RegisterArea
[I386_SIZE_OF_80387_REGISTERS
];
1129 } I386_FLOATING_SAVE_AREA
, WOW64_FLOATING_SAVE_AREA
, *PWOW64_FLOATING_SAVE_AREA
;
1131 #define I386_MAXIMUM_SUPPORTED_EXTENSION 512
1133 #include "pshpack4.h"
1134 typedef struct _I386_CONTEXT
1136 DWORD ContextFlags
; /* 000 */
1138 /* These are selected by CONTEXT_DEBUG_REGISTERS */
1139 DWORD Dr0
; /* 004 */
1140 DWORD Dr1
; /* 008 */
1141 DWORD Dr2
; /* 00c */
1142 DWORD Dr3
; /* 010 */
1143 DWORD Dr6
; /* 014 */
1144 DWORD Dr7
; /* 018 */
1146 /* These are selected by CONTEXT_FLOATING_POINT */
1147 I386_FLOATING_SAVE_AREA FloatSave
; /* 01c */
1149 /* These are selected by CONTEXT_SEGMENTS */
1150 DWORD SegGs
; /* 08c */
1151 DWORD SegFs
; /* 090 */
1152 DWORD SegEs
; /* 094 */
1153 DWORD SegDs
; /* 098 */
1155 /* These are selected by CONTEXT_INTEGER */
1156 DWORD Edi
; /* 09c */
1157 DWORD Esi
; /* 0a0 */
1158 DWORD Ebx
; /* 0a4 */
1159 DWORD Edx
; /* 0a8 */
1160 DWORD Ecx
; /* 0ac */
1161 DWORD Eax
; /* 0b0 */
1163 /* These are selected by CONTEXT_CONTROL */
1164 DWORD Ebp
; /* 0b4 */
1165 DWORD Eip
; /* 0b8 */
1166 DWORD SegCs
; /* 0bc */
1167 DWORD EFlags
; /* 0c0 */
1168 DWORD Esp
; /* 0c4 */
1169 DWORD SegSs
; /* 0c8 */
1171 BYTE ExtendedRegisters
[I386_MAXIMUM_SUPPORTED_EXTENSION
]; /* 0xcc */
1172 } I386_CONTEXT
, WOW64_CONTEXT
, *PWOW64_CONTEXT
;
1173 #include "poppack.h"
1175 #define CONTEXT_i386 0x00010000
1176 #define CONTEXT_i486 0x00010000
1178 #define CONTEXT_I386_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
1179 #define CONTEXT_I386_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
1180 #define CONTEXT_I386_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
1181 #define CONTEXT_I386_FLOATING_POINT (CONTEXT_i386 | 0x0008) /* 387 state */
1182 #define CONTEXT_I386_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010) /* DB 0-3,6,7 */
1183 #define CONTEXT_I386_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020)
1184 #define CONTEXT_I386_XSTATE (CONTEXT_i386 | 0x0040)
1185 #define CONTEXT_I386_FULL (CONTEXT_I386_CONTROL | CONTEXT_I386_INTEGER | CONTEXT_I386_SEGMENTS)
1186 #define CONTEXT_I386_ALL (CONTEXT_I386_FULL | CONTEXT_I386_FLOATING_POINT | CONTEXT_I386_DEBUG_REGISTERS | CONTEXT_I386_EXTENDED_REGISTERS)
1190 #define CONTEXT_CONTROL CONTEXT_I386_CONTROL
1191 #define CONTEXT_INTEGER CONTEXT_I386_INTEGER
1192 #define CONTEXT_SEGMENTS CONTEXT_I386_SEGMENTS
1193 #define CONTEXT_FLOATING_POINT CONTEXT_I386_FLOATING_POINT
1194 #define CONTEXT_DEBUG_REGISTERS CONTEXT_I386_DEBUG_REGISTERS
1195 #define CONTEXT_EXTENDED_REGISTERS CONTEXT_I386_EXTENDED_REGISTERS
1196 #define CONTEXT_XSTATE CONTEXT_I386_XSTATE
1197 #define CONTEXT_FULL CONTEXT_I386_FULL
1198 #define CONTEXT_ALL CONTEXT_I386_ALL
1199 #define SIZE_OF_80387_REGISTERS I386_SIZE_OF_80387_REGISTERS
1200 #define MAXIMUM_SUPPORTED_EXTENSION I386_MAXIMUM_SUPPORTED_EXTENSION
1202 typedef I386_FLOATING_SAVE_AREA FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1203 typedef I386_CONTEXT CONTEXT
, *PCONTEXT
;
1205 #endif /* __i386__ */
1207 typedef struct _LDT_ENTRY
{
1218 unsigned BaseMid
: 8;
1222 unsigned LimitHi
: 4;
1224 unsigned Reserved_0
: 1;
1225 unsigned Default_Big
: 1;
1226 unsigned Granularity
: 1;
1227 unsigned BaseHi
: 8;
1230 } LDT_ENTRY
, *PLDT_ENTRY
, WOW64_LDT_ENTRY
, *PWOW64_LDT_ENTRY
;
1232 typedef struct DECLSPEC_ALIGN(16) _M128A
{
1237 typedef struct _XSAVE_FORMAT
{
1238 WORD ControlWord
; /* 000 */
1239 WORD StatusWord
; /* 002 */
1240 BYTE TagWord
; /* 004 */
1241 BYTE Reserved1
; /* 005 */
1242 WORD ErrorOpcode
; /* 006 */
1243 DWORD ErrorOffset
; /* 008 */
1244 WORD ErrorSelector
; /* 00c */
1245 WORD Reserved2
; /* 00e */
1246 DWORD DataOffset
; /* 010 */
1247 WORD DataSelector
; /* 014 */
1248 WORD Reserved3
; /* 016 */
1249 DWORD MxCsr
; /* 018 */
1250 DWORD MxCsr_Mask
; /* 01c */
1251 M128A FloatRegisters
[8]; /* 020 */
1252 M128A XmmRegisters
[16]; /* 0a0 */
1253 BYTE Reserved4
[96]; /* 1a0 */
1254 } XSAVE_FORMAT
, *PXSAVE_FORMAT
;
1256 /* x86-64 context definitions */
1258 typedef struct IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY
1263 } IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY
;
1265 typedef struct _SCOPE_TABLE_AMD64
1272 DWORD HandlerAddress
;
1275 } SCOPE_TABLE_AMD64
, *PSCOPE_TABLE_AMD64
;
1277 #define CONTEXT_AMD64 0x00100000
1279 #define CONTEXT_AMD64_CONTROL (CONTEXT_AMD64 | 0x0001)
1280 #define CONTEXT_AMD64_INTEGER (CONTEXT_AMD64 | 0x0002)
1281 #define CONTEXT_AMD64_SEGMENTS (CONTEXT_AMD64 | 0x0004)
1282 #define CONTEXT_AMD64_FLOATING_POINT (CONTEXT_AMD64 | 0x0008)
1283 #define CONTEXT_AMD64_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010)
1284 #define CONTEXT_AMD64_XSTATE (CONTEXT_AMD64 | 0x0040)
1285 #define CONTEXT_AMD64_FULL (CONTEXT_AMD64_CONTROL | CONTEXT_AMD64_INTEGER | CONTEXT_AMD64_FLOATING_POINT)
1286 #define CONTEXT_AMD64_ALL (CONTEXT_AMD64_CONTROL | CONTEXT_AMD64_INTEGER | CONTEXT_AMD64_SEGMENTS | CONTEXT_AMD64_FLOATING_POINT | CONTEXT_AMD64_DEBUG_REGISTERS)
1288 typedef XSAVE_FORMAT XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
1290 typedef struct DECLSPEC_ALIGN(16) _AMD64_CONTEXT
{
1291 DWORD64 P1Home
; /* 000 */
1292 DWORD64 P2Home
; /* 008 */
1293 DWORD64 P3Home
; /* 010 */
1294 DWORD64 P4Home
; /* 018 */
1295 DWORD64 P5Home
; /* 020 */
1296 DWORD64 P6Home
; /* 028 */
1299 DWORD ContextFlags
; /* 030 */
1300 DWORD MxCsr
; /* 034 */
1303 WORD SegCs
; /* 038 */
1304 WORD SegDs
; /* 03a */
1305 WORD SegEs
; /* 03c */
1306 WORD SegFs
; /* 03e */
1307 WORD SegGs
; /* 040 */
1308 WORD SegSs
; /* 042 */
1309 DWORD EFlags
; /* 044 */
1312 DWORD64 Dr0
; /* 048 */
1313 DWORD64 Dr1
; /* 050 */
1314 DWORD64 Dr2
; /* 058 */
1315 DWORD64 Dr3
; /* 060 */
1316 DWORD64 Dr6
; /* 068 */
1317 DWORD64 Dr7
; /* 070 */
1320 DWORD64 Rax
; /* 078 */
1321 DWORD64 Rcx
; /* 080 */
1322 DWORD64 Rdx
; /* 088 */
1323 DWORD64 Rbx
; /* 090 */
1324 DWORD64 Rsp
; /* 098 */
1325 DWORD64 Rbp
; /* 0a0 */
1326 DWORD64 Rsi
; /* 0a8 */
1327 DWORD64 Rdi
; /* 0b0 */
1328 DWORD64 R8
; /* 0b8 */
1329 DWORD64 R9
; /* 0c0 */
1330 DWORD64 R10
; /* 0c8 */
1331 DWORD64 R11
; /* 0d0 */
1332 DWORD64 R12
; /* 0d8 */
1333 DWORD64 R13
; /* 0e0 */
1334 DWORD64 R14
; /* 0e8 */
1335 DWORD64 R15
; /* 0f0 */
1338 DWORD64 Rip
; /* 0f8 */
1340 /* Floating point */
1342 XMM_SAVE_AREA32 FltSave
; /* 100 */
1344 M128A Header
[2]; /* 100 */
1345 M128A Legacy
[8]; /* 120 */
1346 M128A Xmm0
; /* 1a0 */
1347 M128A Xmm1
; /* 1b0 */
1348 M128A Xmm2
; /* 1c0 */
1349 M128A Xmm3
; /* 1d0 */
1350 M128A Xmm4
; /* 1e0 */
1351 M128A Xmm5
; /* 1f0 */
1352 M128A Xmm6
; /* 200 */
1353 M128A Xmm7
; /* 210 */
1354 M128A Xmm8
; /* 220 */
1355 M128A Xmm9
; /* 230 */
1356 M128A Xmm10
; /* 240 */
1357 M128A Xmm11
; /* 250 */
1358 M128A Xmm12
; /* 260 */
1359 M128A Xmm13
; /* 270 */
1360 M128A Xmm14
; /* 280 */
1361 M128A Xmm15
; /* 290 */
1366 M128A VectorRegister
[26]; /* 300 */
1367 DWORD64 VectorControl
; /* 4a0 */
1370 DWORD64 DebugControl
; /* 4a8 */
1371 DWORD64 LastBranchToRip
; /* 4b0 */
1372 DWORD64 LastBranchFromRip
; /* 4b8 */
1373 DWORD64 LastExceptionToRip
; /* 4c0 */
1374 DWORD64 LastExceptionFromRip
; /* 4c8 */
1379 #define CONTEXT_CONTROL CONTEXT_AMD64_CONTROL
1380 #define CONTEXT_INTEGER CONTEXT_AMD64_INTEGER
1381 #define CONTEXT_SEGMENTS CONTEXT_AMD64_SEGMENTS
1382 #define CONTEXT_FLOATING_POINT CONTEXT_AMD64_FLOATING_POINT
1383 #define CONTEXT_DEBUG_REGISTERS CONTEXT_AMD64_DEBUG_REGISTERS
1384 #define CONTEXT_XSTATE CONTEXT_AMD64_XSTATE
1385 #define CONTEXT_FULL CONTEXT_AMD64_FULL
1386 #define CONTEXT_ALL CONTEXT_AMD64_ALL
1388 typedef AMD64_CONTEXT CONTEXT
, *PCONTEXT
;
1389 typedef IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1390 typedef SCOPE_TABLE_AMD64 SCOPE_TABLE
, *PSCOPE_TABLE
;
1392 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
1396 PM128A FloatingContext
[16];
1420 PULONG64 IntegerContext
[16];
1441 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1443 #endif /* __x86_64__ */
1445 #define XSTATE_LEGACY_FLOATING_POINT 0
1446 #define XSTATE_LEGACY_SSE 1
1447 #define XSTATE_GSSE 2
1448 #define XSTATE_AVX XSTATE_GSSE
1449 #define XSTATE_MPX_BNDREGS 3
1450 #define XSTATE_MPX_BNDCSR 4
1451 #define XSTATE_AVX512_KMASK 5
1452 #define XSTATE_AVX512_ZMM_H 6
1453 #define XSTATE_AVX512_ZMM 7
1454 #define XSTATE_IPT 8
1455 #define XSTATE_CET_U 11
1456 #define XSTATE_LWP 62
1457 #define MAXIMUM_XSTATE_FEATURES 64
1459 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1 << XSTATE_LEGACY_FLOATING_POINT)
1460 #define XSTATE_MASK_LEGACY_SSE (1 << XSTATE_LEGACY_SSE)
1461 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1462 #define XSTATE_MASK_GSSE (1 << XSTATE_GSSE)
1464 typedef struct _XSTATE_FEATURE
1468 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1470 typedef struct _XSTATE_CONFIGURATION
1472 ULONG64 EnabledFeatures
;
1473 ULONG64 EnabledVolatileFeatures
;
1475 ULONG OptimizedSave
:1;
1476 ULONG CompactionEnabled
:1;
1477 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1479 ULONG64 EnabledSupervisorFeatures
;
1480 ULONG64 AlignedFeatures
;
1481 ULONG AllFeatureSize
;
1482 ULONG AllFeatures
[MAXIMUM_XSTATE_FEATURES
];
1483 ULONG64 EnabledUserVisibleSupervisorFeatures
;
1484 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1486 typedef struct _XSAVE_AREA_HEADER
1489 DWORD64 CompactionMask
;
1490 DWORD64 Reserved2
[6];
1492 XSAVE_AREA_HEADER
, *PXSAVE_AREA_HEADER
;
1494 typedef struct _YMMCONTEXT
1513 YMMCONTEXT
, *PYMMCONTEXT
;
1515 typedef struct _XSTATE
1518 ULONG64 CompactionMask
;
1519 ULONG64 Reserved
[6];
1520 YMMCONTEXT YmmContext
;
1523 typedef struct _CONTEXT_CHUNK
1527 } CONTEXT_CHUNK
, *PCONTEXT_CHUNK
;
1529 typedef struct _CONTEXT_EX
1532 CONTEXT_CHUNK Legacy
;
1533 CONTEXT_CHUNK XState
;
1537 } CONTEXT_EX
, *PCONTEXT_EX
;
1539 #define CONTEXT_EXCEPTION_ACTIVE 0x08000000
1540 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1541 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1542 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1544 #define CONTEXT_ARM 0x0200000
1545 #define CONTEXT_ARM_CONTROL (CONTEXT_ARM | 0x00000001)
1546 #define CONTEXT_ARM_INTEGER (CONTEXT_ARM | 0x00000002)
1547 #define CONTEXT_ARM_FLOATING_POINT (CONTEXT_ARM | 0x00000004)
1548 #define CONTEXT_ARM_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
1549 #define CONTEXT_ARM_FULL (CONTEXT_ARM_CONTROL | CONTEXT_ARM_INTEGER)
1550 #define CONTEXT_ARM_ALL (CONTEXT_ARM_FULL | CONTEXT_ARM_FLOATING_POINT | CONTEXT_ARM_DEBUG_REGISTERS)
1552 #define ARM_MAX_BREAKPOINTS 8
1553 #define ARM_MAX_WATCHPOINTS 1
1555 typedef struct _IMAGE_ARM_RUNTIME_FUNCTION
1562 DWORD FunctionLength
: 11;
1569 DWORD StackAdjust
: 10;
1572 } IMAGE_ARM_RUNTIME_FUNCTION_ENTRY
, *PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY
;
1574 typedef struct _SCOPE_TABLE_ARM
1581 DWORD HandlerAddress
;
1584 } SCOPE_TABLE_ARM
, *PSCOPE_TABLE_ARM
;
1586 typedef struct _ARM_NEON128
1592 typedef struct _ARM_CONTEXT
1594 ULONG ContextFlags
; /* 000 */
1595 /* CONTEXT_INTEGER */
1606 ULONG R10
; /* 02c */
1607 ULONG R11
; /* 030 */
1608 ULONG R12
; /* 034 */
1609 /* CONTEXT_CONTROL */
1613 ULONG Cpsr
; /* 044 */
1614 /* CONTEXT_FLOATING_POINT */
1615 ULONG Fpscr
; /* 048 */
1616 ULONG Padding
; /* 04c */
1622 } DUMMYUNIONNAME
; /* 050 */
1623 /* CONTEXT_DEBUG_REGISTERS */
1624 ULONG Bvr
[ARM_MAX_BREAKPOINTS
]; /* 150 */
1625 ULONG Bcr
[ARM_MAX_BREAKPOINTS
]; /* 170 */
1626 ULONG Wvr
[ARM_MAX_WATCHPOINTS
]; /* 190 */
1627 ULONG Wcr
[ARM_MAX_WATCHPOINTS
]; /* 194 */
1628 ULONG Padding2
[2]; /* 198 */
1633 #define CONTEXT_CONTROL CONTEXT_ARM_CONTROL
1634 #define CONTEXT_INTEGER CONTEXT_ARM_INTEGER
1635 #define CONTEXT_FLOATING_POINT CONTEXT_ARM_FLOATING_POINT
1636 #define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM_DEBUG_REGISTERS
1637 #define CONTEXT_FULL CONTEXT_ARM_FULL
1638 #define CONTEXT_ALL CONTEXT_ARM_ALL
1640 typedef IMAGE_ARM_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1641 typedef SCOPE_TABLE_ARM SCOPE_TABLE
, *PSCOPE_TABLE
;
1642 typedef ARM_NEON128 NEON128
, *PNEON128
;
1643 typedef ARM_CONTEXT CONTEXT
, *PCONTEXT
;
1645 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
1664 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1666 #endif /* __arm__ */
1668 #define CONTEXT_ARM64 0x400000
1669 #define CONTEXT_ARM64_CONTROL (CONTEXT_ARM64 | 0x00000001)
1670 #define CONTEXT_ARM64_INTEGER (CONTEXT_ARM64 | 0x00000002)
1671 #define CONTEXT_ARM64_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004)
1672 #define CONTEXT_ARM64_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
1673 #define CONTEXT_ARM64_X18 (CONTEXT_ARM64 | 0x00000010)
1674 #define CONTEXT_ARM64_FULL (CONTEXT_ARM64_CONTROL | CONTEXT_ARM64_INTEGER | CONTEXT_ARM64_FLOATING_POINT)
1675 #define CONTEXT_ARM64_ALL (CONTEXT_ARM64_FULL | CONTEXT_ARM64_DEBUG_REGISTERS | CONTEXT_ARM64_X18)
1677 #define CONTEXT_ARM64_UNWOUND_TO_CALL 0x20000000
1678 #define CONTEXT_ARM64_RET_TO_GUEST 0x04000000
1680 #define CONTEXT_UNWOUND_TO_CALL 0x20000000
1682 #define ARM64_MAX_BREAKPOINTS 8
1683 #define ARM64_MAX_WATCHPOINTS 2
1685 typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
1694 DWORD FunctionLength
: 11;
1699 DWORD FrameSize
: 9;
1702 } IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
, *PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
;
1704 typedef union IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA
1709 DWORD FunctionLength
: 18;
1711 DWORD ExceptionDataPresent
: 1;
1712 DWORD EpilogInHeader
: 1;
1713 DWORD EpilogCount
: 5;
1714 DWORD CodeWords
: 5;
1716 } IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA
;
1718 typedef enum ARM64_FNPDATA_FLAGS
1720 PdataRefToFullXdata
= 0,
1721 PdataPackedUnwindFunction
= 1,
1722 PdataPackedUnwindFragment
= 2,
1723 } ARM64_FNPDATA_FLAGS
;
1725 typedef enum ARM64_FNPDATA_CR
1727 PdataCrUnchained
= 0,
1728 PdataCrUnchainedSavedLr
= 1,
1729 PdataCrChainedWithPac
= 2,
1733 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY ARM64_RUNTIME_FUNCTION
, *PARM64_RUNTIME_FUNCTION
;
1735 typedef struct _SCOPE_TABLE_ARM64
1742 DWORD HandlerAddress
;
1745 } SCOPE_TABLE_ARM64
, *PSCOPE_TABLE_ARM64
;
1747 typedef struct _KNONVOLATILE_CONTEXT_POINTERS_ARM64
1769 } KNONVOLATILE_CONTEXT_POINTERS_ARM64
, *PKNONVOLATILE_CONTEXT_POINTERS_ARM64
;
1771 typedef union _ARM64_NT_NEON128
1782 } ARM64_NT_NEON128
, *PARM64_NT_NEON128
;
1784 typedef struct DECLSPEC_ALIGN(16) _ARM64_NT_CONTEXT
1786 ULONG ContextFlags
; /* 000 */
1787 /* CONTEXT_INTEGER */
1788 ULONG Cpsr
; /* 004 */
1793 DWORD64 X0
; /* 008 */
1794 DWORD64 X1
; /* 010 */
1795 DWORD64 X2
; /* 018 */
1796 DWORD64 X3
; /* 020 */
1797 DWORD64 X4
; /* 028 */
1798 DWORD64 X5
; /* 030 */
1799 DWORD64 X6
; /* 038 */
1800 DWORD64 X7
; /* 040 */
1801 DWORD64 X8
; /* 048 */
1802 DWORD64 X9
; /* 050 */
1803 DWORD64 X10
; /* 058 */
1804 DWORD64 X11
; /* 060 */
1805 DWORD64 X12
; /* 068 */
1806 DWORD64 X13
; /* 070 */
1807 DWORD64 X14
; /* 078 */
1808 DWORD64 X15
; /* 080 */
1809 DWORD64 X16
; /* 088 */
1810 DWORD64 X17
; /* 090 */
1811 DWORD64 X18
; /* 098 */
1812 DWORD64 X19
; /* 0a0 */
1813 DWORD64 X20
; /* 0a8 */
1814 DWORD64 X21
; /* 0b0 */
1815 DWORD64 X22
; /* 0b8 */
1816 DWORD64 X23
; /* 0c0 */
1817 DWORD64 X24
; /* 0c8 */
1818 DWORD64 X25
; /* 0d0 */
1819 DWORD64 X26
; /* 0d8 */
1820 DWORD64 X27
; /* 0e0 */
1821 DWORD64 X28
; /* 0e8 */
1822 DWORD64 Fp
; /* 0f0 */
1823 DWORD64 Lr
; /* 0f8 */
1825 DWORD64 X
[31]; /* 008 */
1827 /* CONTEXT_CONTROL */
1828 DWORD64 Sp
; /* 100 */
1829 DWORD64 Pc
; /* 108 */
1830 /* CONTEXT_FLOATING_POINT */
1831 ARM64_NT_NEON128 V
[32]; /* 110 */
1832 DWORD Fpcr
; /* 310 */
1833 DWORD Fpsr
; /* 314 */
1834 /* CONTEXT_DEBUG_REGISTERS */
1835 DWORD Bcr
[ARM64_MAX_BREAKPOINTS
]; /* 318 */
1836 DWORD64 Bvr
[ARM64_MAX_BREAKPOINTS
]; /* 338 */
1837 DWORD Wcr
[ARM64_MAX_WATCHPOINTS
]; /* 378 */
1838 DWORD64 Wvr
[ARM64_MAX_WATCHPOINTS
]; /* 380 */
1839 } ARM64_NT_CONTEXT
, *PARM64_NT_CONTEXT
;
1841 typedef struct DECLSPEC_ALIGN(16) _ARM64EC_NT_CONTEXT
1847 DWORD64 AMD64_P1Home
; /* 000 */
1848 DWORD64 AMD64_P2Home
; /* 008 */
1849 DWORD64 AMD64_P3Home
; /* 010 */
1850 DWORD64 AMD64_P4Home
; /* 018 */
1851 DWORD64 AMD64_P5Home
; /* 020 */
1852 DWORD64 AMD64_P6Home
; /* 028 */
1853 DWORD ContextFlags
; /* 030 */
1854 DWORD AMD64_MxCsr_copy
; /* 034 */
1855 WORD AMD64_SegCs
; /* 038 */
1856 WORD AMD64_SegDs
; /* 03a */
1857 WORD AMD64_SegEs
; /* 03c */
1858 WORD AMD64_SegFs
; /* 03e */
1859 WORD AMD64_SegGs
; /* 040 */
1860 WORD AMD64_SegSs
; /* 042 */
1861 DWORD AMD64_EFlags
; /* 044 */
1862 DWORD64 AMD64_Dr0
; /* 048 */
1863 DWORD64 AMD64_Dr1
; /* 050 */
1864 DWORD64 AMD64_Dr2
; /* 058 */
1865 DWORD64 AMD64_Dr3
; /* 060 */
1866 DWORD64 AMD64_Dr6
; /* 068 */
1867 DWORD64 AMD64_Dr7
; /* 070 */
1868 DWORD64 X8
; /* 078 (Rax) */
1869 DWORD64 X0
; /* 080 (Rcx) */
1870 DWORD64 X1
; /* 088 (Rdx) */
1871 DWORD64 X27
; /* 090 (Rbx) */
1872 DWORD64 Sp
; /* 098 (Rsp) */
1873 DWORD64 Fp
; /* 0a0 (Rbp) */
1874 DWORD64 X25
; /* 0a8 (Rsi) */
1875 DWORD64 X26
; /* 0b0 (Rdi) */
1876 DWORD64 X2
; /* 0b8 (R8) */
1877 DWORD64 X3
; /* 0c0 (R9) */
1878 DWORD64 X4
; /* 0c8 (R10) */
1879 DWORD64 X5
; /* 0d0 (R11) */
1880 DWORD64 X19
; /* 0d8 (R12) */
1881 DWORD64 X20
; /* 0e0 (R13) */
1882 DWORD64 X21
; /* 0e8 (R14) */
1883 DWORD64 X22
; /* 0f0 (R15) */
1884 DWORD64 Pc
; /* 0f8 (Rip) */
1887 WORD AMD64_ControlWord
; /* 100 */
1888 WORD AMD64_StatusWord
; /* 102 */
1889 BYTE AMD64_TagWord
; /* 104 */
1890 BYTE AMD64_Reserved1
; /* 105 */
1891 WORD AMD64_ErrorOpcode
; /* 106 */
1892 DWORD AMD64_ErrorOffset
; /* 108 */
1893 WORD AMD64_ErrorSelector
; /* 10c */
1894 WORD AMD64_Reserved2
; /* 10e */
1895 DWORD AMD64_DataOffset
; /* 110 */
1896 WORD AMD64_DataSelector
; /* 114 */
1897 WORD AMD64_Reserved3
; /* 116 */
1898 DWORD AMD64_MxCsr
; /* 118 */
1899 DWORD AMD64_MxCsr_Mask
; /* 11c */
1900 DWORD64 Lr
; /* 120 (FloatRegisters[0]) */
1901 WORD X16_0
; /* 128 */
1902 WORD AMD64_St0_Reserved1
; /* 12a */
1903 DWORD AMD64_St0_Reserved2
; /* 12c */
1904 DWORD64 X6
; /* 130 (FloatRegisters[1]) */
1905 WORD X16_1
; /* 138 */
1906 WORD AMD64_St1_Reserved1
; /* 13a */
1907 DWORD AMD64_St1_Reserved2
; /* 13c */
1908 DWORD64 X7
; /* 140 (FloatRegisters[2]) */
1909 WORD X16_2
; /* 148 */
1910 WORD AMD64_St2_Reserved1
; /* 14a */
1911 DWORD AMD64_St2_Reserved2
; /* 14c */
1912 DWORD64 X9
; /* 150 (FloatRegisters[3]) */
1913 WORD X16_3
; /* 158 */
1914 WORD AMD64_St3_Reserved1
; /* 15a */
1915 DWORD AMD64_St3_Reserved2
; /* 15c */
1916 DWORD64 X10
; /* 160 (FloatRegisters[4]) */
1917 WORD X17_0
; /* 168 */
1918 WORD AMD64_St4_Reserved1
; /* 16a */
1919 DWORD AMD64_St4_Reserved2
; /* 16c */
1920 DWORD64 X11
; /* 170 (FloatRegisters[5]) */
1921 WORD X17_1
; /* 178 */
1922 WORD AMD64_St5_Reserved1
; /* 17a */
1923 DWORD AMD64_St5_Reserved2
; /* 17c */
1924 DWORD64 X12
; /* 180 (FloatRegisters[6]) */
1925 WORD X17_2
; /* 188 */
1926 WORD AMD64_St6_Reserved1
; /* 18a */
1927 DWORD AMD64_St6_Reserved2
; /* 18c */
1928 DWORD64 X15
; /* 190 (FloatRegisters[7]) */
1929 WORD X17_3
; /* 198 */
1930 WORD AMD64_St7_Reserved1
; /* 19a */
1931 DWORD AMD64_St7_Reserved2
; /* 19c */
1932 ARM64_NT_NEON128 V
[16]; /* 1a0 (XmmRegisters) */
1933 BYTE AMD64_XSAVE_FORMAT_Reserved4
[96]; /* 2a0 */
1935 M128A AMD64_VectorRegister
[26]; /* 300 */
1936 DWORD64 AMD64_VectorControl
; /* 4a0 */
1937 DWORD64 AMD64_DebugControl
; /* 4a8 */
1938 DWORD64 AMD64_LastBranchToRip
; /* 4b0 */
1939 DWORD64 AMD64_LastBranchFromRip
; /* 4b8 */
1940 DWORD64 AMD64_LastExceptionToRip
; /* 4c0 */
1941 DWORD64 AMD64_LastExceptionFromRip
; /* 4c8 */
1943 AMD64_CONTEXT AMD64_Context
;
1945 } ARM64EC_NT_CONTEXT
, *PARM64EC_NT_CONTEXT
;
1949 #define CONTEXT_CONTROL CONTEXT_ARM64_CONTROL
1950 #define CONTEXT_INTEGER CONTEXT_ARM64_INTEGER
1951 #define CONTEXT_FLOATING_POINT CONTEXT_ARM64_FLOATING_POINT
1952 #define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM64_DEBUG_REGISTERS
1953 #define CONTEXT_FULL CONTEXT_ARM64_FULL
1954 #define CONTEXT_ALL CONTEXT_ARM64_ALL
1955 #define CONTEXT_RET_TO_GUEST CONTEXT_ARM64_RET_TO_GUEST
1957 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1958 typedef SCOPE_TABLE_ARM64 SCOPE_TABLE
, *PSCOPE_TABLE
;
1959 typedef KNONVOLATILE_CONTEXT_POINTERS_ARM64 KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1960 typedef ARM64_NT_NEON128 NEON128
, *PNEON128
;
1961 typedef ARM64_NT_CONTEXT CONTEXT
, *PCONTEXT
;
1963 #define _DISPATCHER_CONTEXT_ARM64 _DISPATCHER_CONTEXT
1965 #endif /* __aarch64__ */
1967 #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
1968 #error You need to define a CONTEXT for your CPU
1971 #define WOW64_CONTEXT_i386 0x00010000
1972 #define WOW64_CONTEXT_i486 0x00010000
1973 #define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000001))
1974 #define WOW64_CONTEXT_INTEGER (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000002))
1975 #define WOW64_CONTEXT_SEGMENTS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000004))
1976 #define WOW64_CONTEXT_FLOATING_POINT (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000008))
1977 #define WOW64_CONTEXT_DEBUG_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000010))
1978 #define WOW64_CONTEXT_EXTENDED_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000020))
1979 #define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040))
1980 #define WOW64_CONTEXT_FULL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS)
1981 #define WOW64_CONTEXT_ALL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | \
1982 WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | \
1983 WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS)
1985 #define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x08000000
1986 #define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000
1987 #define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000
1988 #define WOW64_CONTEXT_EXCEPTION_REPORTING 0x80000000
1990 #define WOW64_SIZE_OF_80387_REGISTERS 80
1991 #define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512
1993 /* Exception definitions */
1995 #define EXCEPTION_READ_FAULT 0
1996 #define EXCEPTION_WRITE_FAULT 1
1997 #define EXCEPTION_EXECUTE_FAULT 8
1999 struct _EXCEPTION_POINTERS
;
2000 struct _EXCEPTION_RECORD
;
2002 typedef EXCEPTION_DISPOSITION WINAPI
EXCEPTION_ROUTINE(struct _EXCEPTION_RECORD
*,PVOID
,CONTEXT
*,PVOID
);
2003 typedef EXCEPTION_ROUTINE
*PEXCEPTION_ROUTINE
;
2005 typedef struct _DISPATCHER_CONTEXT_ARM64
2007 ULONG_PTR ControlPc
;
2008 ULONG_PTR ImageBase
;
2009 PARM64_RUNTIME_FUNCTION FunctionEntry
;
2010 ULONG_PTR EstablisherFrame
;
2012 PARM64_NT_CONTEXT ContextRecord
;
2013 PEXCEPTION_ROUTINE LanguageHandler
;
2015 struct _UNWIND_HISTORY_TABLE
*HistoryTable
;
2017 BOOLEAN ControlPcIsUnwound
;
2018 PBYTE NonVolatileRegisters
;
2019 } DISPATCHER_CONTEXT_ARM64
, *PDISPATCHER_CONTEXT_ARM64
;
2021 #define NONVOL_INT_NUMREG_ARM64 11
2022 #define NONVOL_FP_NUMREG_ARM64 8
2024 #define NONVOL_INT_SIZE_ARM64 (NONVOL_INT_NUMREG_ARM64 * sizeof(DWORD64))
2025 #define NONVOL_FP_SIZE_ARM64 (NONVOL_FP_NUMREG_ARM64 * sizeof(double))
2027 typedef union _DISPATCHER_CONTEXT_NONVOLREG_ARM64
2029 BYTE Buffer
[NONVOL_INT_SIZE_ARM64
+ NONVOL_FP_SIZE_ARM64
];
2032 DWORD64 GpNvRegs
[NONVOL_INT_NUMREG_ARM64
];
2033 double FpNvRegs
[NONVOL_FP_NUMREG_ARM64
];
2035 } DISPATCHER_CONTEXT_NONVOLREG_ARM64
;
2039 typedef struct _DISPATCHER_CONTEXT
2043 PRUNTIME_FUNCTION FunctionEntry
;
2044 ULONG64 EstablisherFrame
;
2046 PCONTEXT ContextRecord
;
2047 PEXCEPTION_ROUTINE LanguageHandler
;
2049 struct _UNWIND_HISTORY_TABLE
*HistoryTable
;
2052 } DISPATCHER_CONTEXT
, *PDISPATCHER_CONTEXT
;
2056 typedef struct _DISPATCHER_CONTEXT_ARM64EC
2060 PRUNTIME_FUNCTION FunctionEntry
;
2061 ULONG64 EstablisherFrame
;
2067 PCONTEXT ContextRecord
;
2068 PEXCEPTION_ROUTINE LanguageHandler
;
2070 struct _UNWIND_HISTORY_TABLE
*HistoryTable
;
2072 BOOLEAN ControlPcIsUnwound
;
2073 PBYTE NonVolatileRegisters
;
2074 } DISPATCHER_CONTEXT_ARM64EC
, *PDISPATCHER_CONTEXT_ARM64EC
;
2078 typedef LONG (CALLBACK
*PEXCEPTION_FILTER
)(struct _EXCEPTION_POINTERS
*,PVOID
);
2079 typedef void (CALLBACK
*PTERMINATION_HANDLER
)(BOOLEAN
,PVOID
);
2081 #define UNW_FLAG_NHANDLER 0
2082 #define UNW_FLAG_EHANDLER 1
2083 #define UNW_FLAG_UHANDLER 2
2084 #define UNW_FLAG_CHAININFO 4
2086 #elif defined(__arm__)
2088 typedef struct _DISPATCHER_CONTEXT
2092 PRUNTIME_FUNCTION FunctionEntry
;
2093 DWORD EstablisherFrame
;
2095 PCONTEXT ContextRecord
;
2096 PEXCEPTION_ROUTINE LanguageHandler
;
2098 struct _UNWIND_HISTORY_TABLE
*HistoryTable
;
2100 BOOLEAN ControlPcIsUnwound
;
2101 PBYTE NonVolatileRegisters
;
2103 } DISPATCHER_CONTEXT
, *PDISPATCHER_CONTEXT
;
2105 typedef LONG (CALLBACK
*PEXCEPTION_FILTER
)(struct _EXCEPTION_POINTERS
*,DWORD
);
2106 typedef void (CALLBACK
*PTERMINATION_HANDLER
)(BOOLEAN
,DWORD
);
2108 #define UNW_FLAG_NHANDLER 0
2109 #define UNW_FLAG_EHANDLER 1
2110 #define UNW_FLAG_UHANDLER 2
2112 #elif defined(__aarch64__)
2114 #undef _DISPATCHER_CONTEXT_ARM64
2115 typedef DISPATCHER_CONTEXT_ARM64 DISPATCHER_CONTEXT
, *PDISPATCHER_CONTEXT
;
2117 typedef LONG (CALLBACK
*PEXCEPTION_FILTER
)(struct _EXCEPTION_POINTERS
*,DWORD64
);
2118 typedef void (CALLBACK
*PTERMINATION_HANDLER
)(BOOLEAN
,DWORD64
);
2120 #define UNW_FLAG_NHANDLER 0
2121 #define UNW_FLAG_EHANDLER 1
2122 #define UNW_FLAG_UHANDLER 2
2124 #endif /* __aarch64__ */
2129 #define PRODUCT_UNDEFINED 0x00000000
2130 #define PRODUCT_ULTIMATE 0x00000001
2131 #define PRODUCT_HOME_BASIC 0x00000002
2132 #define PRODUCT_HOME_PREMIUM 0x00000003
2133 #define PRODUCT_ENTERPRISE 0x00000004
2134 #define PRODUCT_HOME_BASIC_N 0x00000005
2135 #define PRODUCT_BUSINESS 0x00000006
2136 #define PRODUCT_STANDARD_SERVER 0x00000007
2137 #define PRODUCT_DATACENTER_SERVER 0x00000008
2138 #define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
2139 #define PRODUCT_ENTERPRISE_SERVER 0x0000000A
2140 #define PRODUCT_STARTER 0x0000000B
2141 #define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
2142 #define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
2143 #define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
2144 #define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
2145 #define PRODUCT_BUSINESS_N 0x00000010
2146 #define PRODUCT_WEB_SERVER 0x00000011
2147 #define PRODUCT_CLUSTER_SERVER 0x00000012
2148 #define PRODUCT_HOME_SERVER 0x00000013
2149 #define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
2150 #define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
2151 #define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
2152 #define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
2153 #define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
2154 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019
2155 #define PRODUCT_HOME_PREMIUM_N 0x0000001A
2156 #define PRODUCT_ENTERPRISE_N 0x0000001B
2157 #define PRODUCT_ULTIMATE_N 0x0000001C
2158 #define PRODUCT_WEB_SERVER_CORE 0x0000001D
2159 #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
2160 #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
2161 #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
2162 #define PRODUCT_SERVER_FOUNDATION 0x00000021
2163 #define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
2164 #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
2165 #define PRODUCT_STANDARD_SERVER_V 0x00000024
2166 #define PRODUCT_DATACENTER_SERVER_V 0x00000025
2167 #define PRODUCT_SERVER_V 0x00000025
2168 #define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
2169 #define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
2170 #define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
2171 #define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
2172 #define PRODUCT_HYPERV 0x0000002A
2173 #define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B
2174 #define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C
2175 #define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D
2176 #define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E
2177 #define PRODUCT_STARTER_N 0x0000002F
2178 #define PRODUCT_PROFESSIONAL 0x00000030
2179 #define PRODUCT_PROFESSIONAL_N 0x00000031
2180 #define PRODUCT_SB_SOLUTION_SERVER 0x00000032
2181 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
2182 #define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
2183 #define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
2184 #define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
2185 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
2186 #define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
2187 #define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x00000039
2188 #define PRODUCT_PROFESSIONAL_EMBEDDED 0x0000003A
2189 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B
2190 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C
2191 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D
2192 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E
2193 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F
2194 #define PRODUCT_CLUSTER_SERVER_V 0x00000040
2195 #define PRODUCT_EMBEDDED 0x00000041
2196 #define PRODUCT_STARTER_E 0x00000042
2197 #define PRODUCT_HOME_BASIC_E 0x00000043
2198 #define PRODUCT_HOME_PREMIUM_E 0x00000044
2199 #define PRODUCT_PROFESSIONAL_E 0x00000045
2200 #define PRODUCT_ENTERPRISE_E 0x00000046
2201 #define PRODUCT_ULTIMATE_E 0x00000047
2202 #define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
2203 #define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C
2204 #define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D
2205 #define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F
2206 #define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050
2207 #define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054
2208 #define PRODUCT_EMBEDDED_AUTOMOTIVE 0x00000055
2209 #define PRODUCT_EMBEDDED_INDUSTRY_A 0x00000056
2210 #define PRODUCT_THINPC 0x00000057
2211 #define PRODUCT_EMBEDDED_A 0x00000058
2212 #define PRODUCT_EMBEDDED_INDUSTRY 0x00000059
2213 #define PRODUCT_EMBEDDED_E 0x0000005A
2214 #define PRODUCT_EMBEDDED_INDUSTRY_E 0x0000005B
2215 #define PRODUCT_EMBEDDED_INDUSTRY_A_E 0x0000005C
2216 #define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F
2217 #define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060
2218 #define PRODUCT_CORE_ARM 0x00000061
2219 #define PRODUCT_CORE_N 0x00000062
2220 #define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063
2221 #define PRODUCT_CORE_SINGLELANGUAGE 0x00000064
2222 #define PRODUCT_CORE_LANGUAGESPECIFIC 0x00000064
2223 #define PRODUCT_CORE 0x00000065
2224 #define PRODUCT_PROFESSIONAL_WMC 0x00000067
2225 #define PRODUCT_MOBILE_CORE 0x00000068
2226 #define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x00000069
2227 #define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x0000006A
2228 #define PRODUCT_EMBEDDED_EVAL 0x0000006B
2229 #define PRODUCT_EMBEDDED_E_EVAL 0x0000006C
2230 #define PRODUCT_NANO_SERVER 0x0000006D
2231 #define PRODUCT_CLOUD_STORAGE_SERVER 0x0000006E
2232 #define PRODUCT_CORE_CONNECTED 0x0000006F
2233 #define PRODUCT_PROFESSIONAL_STUDENT 0x00000070
2234 #define PRODUCT_CORE_CONNECTED_N 0x00000071
2235 #define PRODUCT_PROFESSIONAL_STUDENT_N 0x00000072
2236 #define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x00000073
2237 #define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC 0x00000074
2238 #define PRODUCT_CONNECTED_CAR 0x00000075
2239 #define PRODUCT_INDUSTRY_HANDHELD 0x00000076
2240 #define PRODUCT_PPI_PRO 0x00000077
2241 #define PRODUCT_ARM64_SERVER 0x00000078
2242 #define PRODUCT_EDUCATION 0x00000079
2243 #define PRODUCT_EDUCATION_N 0x0000007A
2244 #define PRODUCT_IOTUAP 0x0000007B
2245 #define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER 0x0000007C
2246 #define PRODUCT_ENTERPRISE_S 0x0000007D
2247 #define PRODUCT_ENTERPRISE_S_N 0x0000007E
2248 #define PRODUCT_PROFESSIONAL_S 0x0000007F
2249 #define PRODUCT_PROFESSIONAL_S_N 0x00000080
2250 #define PRODUCT_ENTERPRISE_S_EVALUATION 0x00000081
2251 #define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x00000082
2252 #define PRODUCT_UNLICENSED 0xABCDABCD
2259 #define MAKELCID(l, s) (MAKELONG(l, s))
2261 #define MAKELANGID(p, s) ((((WORD)(s))<<10) | (WORD)(p))
2262 #define PRIMARYLANGID(l) ((WORD)(l) & 0x3ff)
2263 #define SUBLANGID(l) ((WORD)(l) >> 10)
2265 #define LANGIDFROMLCID(lcid) ((WORD)(lcid))
2266 #define SORTIDFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 16) & 0x0f))
2268 #define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))
2269 #define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))
2270 #define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
2271 #define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))
2272 #define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
2273 #define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
2274 #define LOCALE_CUSTOM_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_DEFAULT),SORT_DEFAULT))
2275 #define LOCALE_CUSTOM_UNSPECIFIED (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_UNSPECIFIED),SORT_DEFAULT))
2276 #define LOCALE_CUSTOM_UI_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_UI_CUSTOM_DEFAULT),SORT_DEFAULT))
2277 #define LOCALE_NAME_MAX_LENGTH 85
2280 #define UNREFERENCED_PARAMETER(u) (void)(u)
2281 #define DBG_UNREFERENCED_PARAMETER(u) (void)(u)
2282 #define DBG_UNREFERENCED_LOCAL_VARIABLE(u) (void)(u)
2288 * Definitions for IsTextUnicode()
2291 #define IS_TEXT_UNICODE_ASCII16 0x0001
2292 #define IS_TEXT_UNICODE_STATISTICS 0x0002
2293 #define IS_TEXT_UNICODE_CONTROLS 0x0004
2294 #define IS_TEXT_UNICODE_SIGNATURE 0x0008
2295 #define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
2296 #define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010
2297 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
2298 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040
2299 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080
2300 #define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0
2301 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100
2302 #define IS_TEXT_UNICODE_ODD_LENGTH 0x0200
2303 #define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400
2304 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00
2305 #define IS_TEXT_UNICODE_NULL_BYTES 0x1000
2306 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000
2308 #define MAXIMUM_WAIT_OBJECTS 64
2309 #define MAXIMUM_SUSPEND_COUNT 127
2311 #define WT_EXECUTEDEFAULT 0x00
2312 #define WT_EXECUTEINIOTHREAD 0x01
2313 #define WT_EXECUTEINUITHREAD 0x02
2314 #define WT_EXECUTEINWAITTHREAD 0x04
2315 #define WT_EXECUTEONLYONCE 0x08
2316 #define WT_EXECUTELONGFUNCTION 0x10
2317 #define WT_EXECUTEINTIMERTHREAD 0x20
2318 #define WT_EXECUTEINPERSISTENTIOTHREAD 0x40
2319 #define WT_EXECUTEINPERSISTENTTHREAD 0x80
2320 #define WT_EXECUTEINLONGTHREAD 0x10
2321 #define WT_EXECUTEDELETEWAIT 0x08
2322 #define WT_TRANSFER_IMPERSONATION 0x0100
2325 #define EXCEPTION_CONTINUABLE 0x00
2326 #define EXCEPTION_NONCONTINUABLE 0x01
2327 #define EXCEPTION_UNWINDING 0x02
2328 #define EXCEPTION_EXIT_UNWIND 0x04
2329 #define EXCEPTION_STACK_INVALID 0x08
2330 #define EXCEPTION_NESTED_CALL 0x10
2331 #define EXCEPTION_TARGET_UNWIND 0x20
2332 #define EXCEPTION_COLLIDED_UNWIND 0x40
2333 #define EXCEPTION_SOFTWARE_ORIGINATE 0x80
2336 * The exception record used by Win32 to give additional information
2337 * about exception to exception handlers.
2340 #define EXCEPTION_MAXIMUM_PARAMETERS 15
2342 typedef struct _EXCEPTION_RECORD
2344 DWORD ExceptionCode
;
2345 DWORD ExceptionFlags
;
2346 struct _EXCEPTION_RECORD
*ExceptionRecord
;
2348 PVOID ExceptionAddress
;
2349 DWORD NumberParameters
;
2350 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
2351 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
2353 typedef struct _EXCEPTION_RECORD32
2355 DWORD ExceptionCode
;
2356 DWORD ExceptionFlags
;
2357 DWORD ExceptionRecord
;
2358 DWORD ExceptionAddress
;
2359 DWORD NumberParameters
;
2360 DWORD ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
2361 } EXCEPTION_RECORD32
, *PEXCEPTION_RECORD32
;
2363 typedef struct _EXCEPTION_RECORD64
2365 DWORD ExceptionCode
;
2366 DWORD ExceptionFlags
;
2367 DWORD64 ExceptionRecord
;
2368 DWORD64 ExceptionAddress
;
2369 DWORD NumberParameters
;
2370 DWORD __unusedAlignment
;
2371 DWORD64 ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
2372 } EXCEPTION_RECORD64
, *PEXCEPTION_RECORD64
;
2375 * The exception pointers structure passed to exception filters
2376 * in except() and the UnhandledExceptionFilter().
2379 typedef struct _EXCEPTION_POINTERS
2381 PEXCEPTION_RECORD ExceptionRecord
;
2382 PCONTEXT ContextRecord
;
2383 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
2387 * The exception frame, used for registering exception handlers
2388 * Win32 cares only about this, but compilers generally emit
2389 * larger exception frames for their own use.
2392 struct _EXCEPTION_REGISTRATION_RECORD
;
2394 typedef DWORD (CDECL
*PEXCEPTION_HANDLER
)(PEXCEPTION_RECORD
,struct _EXCEPTION_REGISTRATION_RECORD
*,
2395 PCONTEXT
,struct _EXCEPTION_REGISTRATION_RECORD
**);
2397 typedef struct _EXCEPTION_REGISTRATION_RECORD
2399 struct _EXCEPTION_REGISTRATION_RECORD
*Prev
;
2400 PEXCEPTION_HANDLER Handler
;
2401 } EXCEPTION_REGISTRATION_RECORD
;
2404 * function pointer to an exception filter
2407 typedef LONG (CALLBACK
*PVECTORED_EXCEPTION_HANDLER
)(PEXCEPTION_POINTERS ExceptionInfo
);
2409 typedef struct _NT_TIB
2411 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
2419 PVOID ArbitraryUserPointer
;
2420 struct _NT_TIB
*Self
;
2425 #ifdef WINE_UNIX_LIB
2427 NTSYSAPI
struct _TEB
* WINAPI
NtCurrentTeb(void) __attribute__((pure
));
2429 NTSYSAPI
struct _TEB
* WINAPI
NtCurrentTeb(void);
2431 #elif defined(__i386__) && defined(__GNUC__)
2432 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2435 __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb
));
2438 #elif defined(__i386__) && defined(_MSC_VER)
2439 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2442 __asm mov eax
, fs
:[0x18];
2446 #elif (defined(__aarch64__) || defined(__arm64ec__)) && defined(__GNUC__)
2447 register struct _TEB
*__wine_current_teb
__asm__("x18");
2448 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2450 return __wine_current_teb
;
2452 #elif (defined(__aarch64__) || defined(__arm64ec__)) && defined(_MSC_VER)
2453 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2455 return (struct _TEB
*)__getReg(18);
2457 #elif defined(__x86_64__) && defined(__GNUC__)
2458 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2461 __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb
));
2464 #elif defined(__x86_64__) && defined(_MSC_VER)
2465 unsigned __int64
__readgsqword(unsigned long);
2466 #pragma intrinsic(__readgsqword)
2467 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2469 return (struct _TEB
*)__readgsqword(FIELD_OFFSET(NT_TIB
, Self
));
2471 #elif defined(__arm__) && defined(__GNUC__)
2472 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2475 __asm__("mrc p15, 0, %0, c13, c0, 2" : "=r" (teb
));
2478 #elif defined(__arm__) && defined(_MSC_VER)
2479 #pragma intrinsic(_MoveFromCoprocessor)
2480 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2482 return (struct _TEB
*)(ULONG_PTR
)_MoveFromCoprocessor(15, 0, 13, 0, 2);
2484 #elif !defined(RC_INVOKED)
2485 # error You must define NtCurrentTeb() for your architecture
2488 #ifdef NONAMELESSUNION
2489 #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->u.FiberData)
2491 #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->FiberData)
2493 #define GetFiberData() (*(void **)GetCurrentFiber())
2495 #define TLS_MINIMUM_AVAILABLE 64
2497 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 * 1024)
2499 #define IO_REPARSE_TAG_RESERVED_ZERO 0
2500 #define IO_REPARSE_TAG_RESERVED_ONE 1
2501 #define IO_REPARSE_TAG_RESERVED_TWO 2
2503 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_TWO
2505 #define IO_REPARSE_TAG_MOUNT_POINT __MSABI_LONG(0xA0000003)
2506 #define IO_REPARSE_TAG_HSM __MSABI_LONG(0xC0000004)
2507 #define IO_REPARSE_TAG_DRIVE_EXTENDER __MSABI_LONG(0x80000005)
2508 #define IO_REPARSE_TAG_HSM2 __MSABI_LONG(0x80000006)
2509 #define IO_REPARSE_TAG_SIS __MSABI_LONG(0x80000007)
2510 #define IO_REPARSE_TAG_WIM __MSABI_LONG(0x80000008)
2511 #define IO_REPARSE_TAG_CSV __MSABI_LONG(0x80000009)
2512 #define IO_REPARSE_TAG_DFS __MSABI_LONG(0x8000000A)
2513 #define IO_REPARSE_TAG_FILTER_MANAGER __MSABI_LONG(0x8000000B)
2514 #define IO_REPARSE_TAG_SYMLINK __MSABI_LONG(0xA000000C)
2515 #define IO_REPARSE_TAG_IIS_CACHE __MSABI_LONG(0xA0000010)
2516 #define IO_REPARSE_TAG_DFSR __MSABI_LONG(0x80000012)
2517 #define IO_REPARSE_TAG_DEDUP __MSABI_LONG(0x80000013)
2518 #define IO_REPARSE_TAG_NFS __MSABI_LONG(0x80000014)
2519 #define IO_REPARSE_TAG_FILE_PLACEHOLDER __MSABI_LONG(0x80000015)
2520 #define IO_REPARSE_TAG_WOF __MSABI_LONG(0x80000017)
2521 #define IO_REPARSE_TAG_WCI __MSABI_LONG(0x80000018)
2522 #define IO_REPARSE_TAG_WCI_1 __MSABI_LONG(0x90001018)
2523 #define IO_REPARSE_TAG_GLOBAL_REPARSE __MSABI_LONG(0xA0000019)
2524 #define IO_REPARSE_TAG_CLOUD __MSABI_LONG(0x9000001A)
2525 #define IO_REPARSE_TAG_CLOUD_1 __MSABI_LONG(0x9000101A)
2526 #define IO_REPARSE_TAG_CLOUD_2 __MSABI_LONG(0x9000201A)
2527 #define IO_REPARSE_TAG_CLOUD_3 __MSABI_LONG(0x9000301A)
2528 #define IO_REPARSE_TAG_CLOUD_4 __MSABI_LONG(0x9000401A)
2529 #define IO_REPARSE_TAG_CLOUD_5 __MSABI_LONG(0x9000501A)
2530 #define IO_REPARSE_TAG_CLOUD_6 __MSABI_LONG(0x9000601A)
2531 #define IO_REPARSE_TAG_CLOUD_7 __MSABI_LONG(0x9000701A)
2532 #define IO_REPARSE_TAG_CLOUD_8 __MSABI_LONG(0x9000801A)
2533 #define IO_REPARSE_TAG_CLOUD_9 __MSABI_LONG(0x9000901A)
2534 #define IO_REPARSE_TAG_CLOUD_A __MSABI_LONG(0x9000A01A)
2535 #define IO_REPARSE_TAG_CLOUD_B __MSABI_LONG(0x9000B01A)
2536 #define IO_REPARSE_TAG_CLOUD_C __MSABI_LONG(0x9000C01A)
2537 #define IO_REPARSE_TAG_CLOUD_D __MSABI_LONG(0x9000D01A)
2538 #define IO_REPARSE_TAG_CLOUD_E __MSABI_LONG(0x9000E01A)
2539 #define IO_REPARSE_TAG_CLOUD_F __MSABI_LONG(0x9000F01A)
2540 #define IO_REPARSE_TAG_CLOUD_MASK __MSABI_LONG(0x0000F000)
2541 #define IO_REPARSE_TAG_APPEXECLINK __MSABI_LONG(0x8000001B)
2542 #define IO_REPARSE_TAG_GVFS __MSABI_LONG(0x9000001C)
2543 #define IO_REPARSE_TAG_STORAGE_SYNC __MSABI_LONG(0x8000001E)
2544 #define IO_REPARSE_TAG_WCI_TOMBSTONE __MSABI_LONG(0xA000001F)
2545 #define IO_REPARSE_TAG_UNHANDLED __MSABI_LONG(0x80000020)
2546 #define IO_REPARSE_TAG_ONEDRIVE __MSABI_LONG(0x80000021)
2547 #define IO_REPARSE_TAG_GVFS_TOMBSTONE __MSABI_LONG(0xA0000022)
2549 #define IsReparseTagNameSurrogate(x) ((x) & 0x20000000)
2552 * File formats definitions
2555 #include <pshpack2.h>
2556 typedef struct _IMAGE_DOS_HEADER
{
2557 WORD e_magic
; /* 00: MZ Header signature */
2558 WORD e_cblp
; /* 02: Bytes on last page of file */
2559 WORD e_cp
; /* 04: Pages in file */
2560 WORD e_crlc
; /* 06: Relocations */
2561 WORD e_cparhdr
; /* 08: Size of header in paragraphs */
2562 WORD e_minalloc
; /* 0a: Minimum extra paragraphs needed */
2563 WORD e_maxalloc
; /* 0c: Maximum extra paragraphs needed */
2564 WORD e_ss
; /* 0e: Initial (relative) SS value */
2565 WORD e_sp
; /* 10: Initial SP value */
2566 WORD e_csum
; /* 12: Checksum */
2567 WORD e_ip
; /* 14: Initial IP value */
2568 WORD e_cs
; /* 16: Initial (relative) CS value */
2569 WORD e_lfarlc
; /* 18: File address of relocation table */
2570 WORD e_ovno
; /* 1a: Overlay number */
2571 WORD e_res
[4]; /* 1c: Reserved words */
2572 WORD e_oemid
; /* 24: OEM identifier (for e_oeminfo) */
2573 WORD e_oeminfo
; /* 26: OEM information; e_oemid specific */
2574 WORD e_res2
[10]; /* 28: Reserved words */
2575 DWORD e_lfanew
; /* 3c: Offset to extended header */
2576 } IMAGE_DOS_HEADER
, *PIMAGE_DOS_HEADER
;
2577 #include <poppack.h>
2579 #define IMAGE_DOS_SIGNATURE 0x5A4D /* MZ */
2580 #define IMAGE_OS2_SIGNATURE 0x454E /* NE */
2581 #define IMAGE_OS2_SIGNATURE_LE 0x454C /* LE */
2582 #define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */
2583 #define IMAGE_VXD_SIGNATURE 0x454C /* LE */
2584 #define IMAGE_NT_SIGNATURE 0x00004550 /* PE00 */
2587 * This is the Windows executable (NE) header.
2588 * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way.
2590 #include <pshpack2.h>
2593 WORD ne_magic
; /* 00 NE signature 'NE' */
2594 BYTE ne_ver
; /* 02 Linker version number */
2595 BYTE ne_rev
; /* 03 Linker revision number */
2596 WORD ne_enttab
; /* 04 Offset to entry table relative to NE */
2597 WORD ne_cbenttab
; /* 06 Length of entry table in bytes */
2598 LONG ne_crc
; /* 08 Checksum */
2599 WORD ne_flags
; /* 0c Flags about segments in this file */
2600 WORD ne_autodata
; /* 0e Automatic data segment number */
2601 WORD ne_heap
; /* 10 Initial size of local heap */
2602 WORD ne_stack
; /* 12 Initial size of stack */
2603 DWORD ne_csip
; /* 14 Initial CS:IP */
2604 DWORD ne_sssp
; /* 18 Initial SS:SP */
2605 WORD ne_cseg
; /* 1c # of entries in segment table */
2606 WORD ne_cmod
; /* 1e # of entries in module reference tab. */
2607 WORD ne_cbnrestab
; /* 20 Length of nonresident-name table */
2608 WORD ne_segtab
; /* 22 Offset to segment table */
2609 WORD ne_rsrctab
; /* 24 Offset to resource table */
2610 WORD ne_restab
; /* 26 Offset to resident-name table */
2611 WORD ne_modtab
; /* 28 Offset to module reference table */
2612 WORD ne_imptab
; /* 2a Offset to imported name table */
2613 DWORD ne_nrestab
; /* 2c Offset to nonresident-name table */
2614 WORD ne_cmovent
; /* 30 # of movable entry points */
2615 WORD ne_align
; /* 32 Logical sector alignment shift count */
2616 WORD ne_cres
; /* 34 # of resource segments */
2617 BYTE ne_exetyp
; /* 36 Flags indicating target OS */
2618 BYTE ne_flagsothers
; /* 37 Additional information flags */
2619 WORD ne_pretthunks
; /* 38 Offset to return thunks */
2620 WORD ne_psegrefbytes
; /* 3a Offset to segment ref. bytes */
2621 WORD ne_swaparea
; /* 3c Reserved by Microsoft */
2622 WORD ne_expver
; /* 3e Expected Windows version number */
2623 } IMAGE_OS2_HEADER
, *PIMAGE_OS2_HEADER
;
2624 #include <poppack.h>
2626 #include <pshpack2.h>
2627 typedef struct _IMAGE_VXD_HEADER
{
2642 DWORD e32_lastpagesize
;
2643 DWORD e32_fixupsize
;
2660 DWORD e32_impmodcnt
;
2666 DWORD e32_cbnrestab
;
2669 DWORD e32_debuginfo
;
2671 DWORD e32_instpreload
;
2672 DWORD e32_instdemand
;
2675 DWORD e32_winresoff
;
2676 DWORD e32_winreslen
;
2679 } IMAGE_VXD_HEADER
, *PIMAGE_VXD_HEADER
;
2680 #include <poppack.h>
2682 /* These defines describe the meanings of the bits in the Characteristics
2685 #define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* No relocation info */
2686 #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
2687 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
2688 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
2689 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
2690 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
2691 #define IMAGE_FILE_16BIT_MACHINE 0x0040
2692 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
2693 #define IMAGE_FILE_32BIT_MACHINE 0x0100
2694 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200
2695 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
2696 #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
2697 #define IMAGE_FILE_SYSTEM 0x1000
2698 #define IMAGE_FILE_DLL 0x2000
2699 #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
2700 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
2702 /* These are the settings of the Machine field. */
2703 #define IMAGE_FILE_MACHINE_UNKNOWN 0
2704 #define IMAGE_FILE_MACHINE_TARGET_HOST 0x0001
2705 #define IMAGE_FILE_MACHINE_I386 0x014c
2706 #define IMAGE_FILE_MACHINE_R3000 0x0162
2707 #define IMAGE_FILE_MACHINE_R4000 0x0166
2708 #define IMAGE_FILE_MACHINE_R10000 0x0168
2709 #define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
2710 #define IMAGE_FILE_MACHINE_ALPHA 0x0184
2711 #define IMAGE_FILE_MACHINE_SH3 0x01a2
2712 #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
2713 #define IMAGE_FILE_MACHINE_SH3E 0x01a4
2714 #define IMAGE_FILE_MACHINE_SH4 0x01a6
2715 #define IMAGE_FILE_MACHINE_SH5 0x01a8
2716 #define IMAGE_FILE_MACHINE_ARM 0x01c0
2717 #define IMAGE_FILE_MACHINE_THUMB 0x01c2
2718 #define IMAGE_FILE_MACHINE_ARMNT 0x01c4
2719 #define IMAGE_FILE_MACHINE_AM33 0x01d3
2720 #define IMAGE_FILE_MACHINE_POWERPC 0x01f0
2721 #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
2722 #define IMAGE_FILE_MACHINE_IA64 0x0200
2723 #define IMAGE_FILE_MACHINE_MIPS16 0x0266
2724 #define IMAGE_FILE_MACHINE_ALPHA64 0x0284
2725 #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
2726 #define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
2727 #define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
2728 #define IMAGE_FILE_MACHINE_TRICORE 0x0520
2729 #define IMAGE_FILE_MACHINE_CEF 0x0cef
2730 #define IMAGE_FILE_MACHINE_EBC 0x0ebc
2731 #define IMAGE_FILE_MACHINE_CHPE_X86 0x3a64
2732 #define IMAGE_FILE_MACHINE_AMD64 0x8664
2733 #define IMAGE_FILE_MACHINE_M32R 0x9041
2734 #define IMAGE_FILE_MACHINE_ARM64EC 0xa641
2735 #define IMAGE_FILE_MACHINE_ARM64X 0xa64e
2736 #define IMAGE_FILE_MACHINE_ARM64 0xaa64
2737 #define IMAGE_FILE_MACHINE_RISCV32 0x5032
2738 #define IMAGE_FILE_MACHINE_RISCV64 0x5064
2739 #define IMAGE_FILE_MACHINE_RISCV128 0x5128
2740 #define IMAGE_FILE_MACHINE_CEE 0xc0ee
2742 #define IMAGE_SIZEOF_FILE_HEADER 20
2743 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
2744 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
2745 #define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
2746 #define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
2747 #define IMAGE_SIZEOF_SHORT_NAME 8
2748 #define IMAGE_SIZEOF_SECTION_HEADER 40
2749 #define IMAGE_SIZEOF_SYMBOL 18
2750 #define IMAGE_SIZEOF_AUX_SYMBOL 18
2751 #define IMAGE_SIZEOF_RELOCATION 10
2752 #define IMAGE_SIZEOF_BASE_RELOCATION 8
2753 #define IMAGE_SIZEOF_LINENUMBER 6
2754 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
2756 /* Possible Magic values */
2757 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
2758 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
2759 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
2762 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
2763 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
2765 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
2766 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
2769 /* These are indexes into the DataDirectory array */
2770 #define IMAGE_FILE_EXPORT_DIRECTORY 0
2771 #define IMAGE_FILE_IMPORT_DIRECTORY 1
2772 #define IMAGE_FILE_RESOURCE_DIRECTORY 2
2773 #define IMAGE_FILE_EXCEPTION_DIRECTORY 3
2774 #define IMAGE_FILE_SECURITY_DIRECTORY 4
2775 #define IMAGE_FILE_BASE_RELOCATION_TABLE 5
2776 #define IMAGE_FILE_DEBUG_DIRECTORY 6
2777 #define IMAGE_FILE_DESCRIPTION_STRING 7
2778 #define IMAGE_FILE_MACHINE_VALUE 8 /* Mips */
2779 #define IMAGE_FILE_THREAD_LOCAL_STORAGE 9
2780 #define IMAGE_FILE_CALLBACK_DIRECTORY 10
2782 /* Directory Entries, indices into the DataDirectory array */
2784 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0
2785 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
2786 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
2787 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
2788 #define IMAGE_DIRECTORY_ENTRY_SECURITY 4
2789 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
2790 #define IMAGE_DIRECTORY_ENTRY_DEBUG 6
2791 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
2792 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 /* (MIPS GP) */
2793 #define IMAGE_DIRECTORY_ENTRY_TLS 9
2794 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
2795 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
2796 #define IMAGE_DIRECTORY_ENTRY_IAT 12 /* Import Address Table */
2797 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
2798 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
2800 /* Subsystem Values */
2802 #define IMAGE_SUBSYSTEM_UNKNOWN 0
2803 #define IMAGE_SUBSYSTEM_NATIVE 1
2804 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 /* Windows GUI subsystem */
2805 #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 /* Windows character subsystem */
2806 #define IMAGE_SUBSYSTEM_OS2_CUI 5
2807 #define IMAGE_SUBSYSTEM_POSIX_CUI 7
2808 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 /* native Win9x driver */
2809 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* Windows CE subsystem */
2810 #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
2811 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
2812 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
2813 #define IMAGE_SUBSYSTEM_EFI_ROM 13
2814 #define IMAGE_SUBSYSTEM_XBOX 14
2815 #define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
2817 /* DLL Characteristics */
2818 #define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020
2819 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040
2820 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080
2821 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100
2822 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
2823 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
2824 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
2825 #define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000
2826 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
2827 #define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000
2828 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
2830 typedef struct _IMAGE_FILE_HEADER
{
2832 WORD NumberOfSections
;
2833 DWORD TimeDateStamp
;
2834 DWORD PointerToSymbolTable
;
2835 DWORD NumberOfSymbols
;
2836 WORD SizeOfOptionalHeader
;
2837 WORD Characteristics
;
2838 } IMAGE_FILE_HEADER
, *PIMAGE_FILE_HEADER
;
2840 typedef struct _IMAGE_DATA_DIRECTORY
{
2841 DWORD VirtualAddress
;
2843 } IMAGE_DATA_DIRECTORY
, *PIMAGE_DATA_DIRECTORY
;
2845 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
2847 typedef struct _IMAGE_OPTIONAL_HEADER64
{
2848 WORD Magic
; /* 0x20b */
2849 BYTE MajorLinkerVersion
;
2850 BYTE MinorLinkerVersion
;
2852 DWORD SizeOfInitializedData
;
2853 DWORD SizeOfUninitializedData
;
2854 DWORD AddressOfEntryPoint
;
2856 ULONGLONG ImageBase
;
2857 DWORD SectionAlignment
;
2858 DWORD FileAlignment
;
2859 WORD MajorOperatingSystemVersion
;
2860 WORD MinorOperatingSystemVersion
;
2861 WORD MajorImageVersion
;
2862 WORD MinorImageVersion
;
2863 WORD MajorSubsystemVersion
;
2864 WORD MinorSubsystemVersion
;
2865 DWORD Win32VersionValue
;
2867 DWORD SizeOfHeaders
;
2870 WORD DllCharacteristics
;
2871 ULONGLONG SizeOfStackReserve
;
2872 ULONGLONG SizeOfStackCommit
;
2873 ULONGLONG SizeOfHeapReserve
;
2874 ULONGLONG SizeOfHeapCommit
;
2876 DWORD NumberOfRvaAndSizes
;
2877 IMAGE_DATA_DIRECTORY DataDirectory
[IMAGE_NUMBEROF_DIRECTORY_ENTRIES
];
2878 } IMAGE_OPTIONAL_HEADER64
, *PIMAGE_OPTIONAL_HEADER64
;
2880 typedef struct _IMAGE_NT_HEADERS64
{
2882 IMAGE_FILE_HEADER FileHeader
;
2883 IMAGE_OPTIONAL_HEADER64 OptionalHeader
;
2884 } IMAGE_NT_HEADERS64
, *PIMAGE_NT_HEADERS64
;
2886 typedef struct _IMAGE_OPTIONAL_HEADER
{
2888 /* Standard fields */
2890 WORD Magic
; /* 0x10b or 0x107 */ /* 0x00 */
2891 BYTE MajorLinkerVersion
;
2892 BYTE MinorLinkerVersion
;
2894 DWORD SizeOfInitializedData
;
2895 DWORD SizeOfUninitializedData
;
2896 DWORD AddressOfEntryPoint
; /* 0x10 */
2900 /* NT additional fields */
2903 DWORD SectionAlignment
; /* 0x20 */
2904 DWORD FileAlignment
;
2905 WORD MajorOperatingSystemVersion
;
2906 WORD MinorOperatingSystemVersion
;
2907 WORD MajorImageVersion
;
2908 WORD MinorImageVersion
;
2909 WORD MajorSubsystemVersion
; /* 0x30 */
2910 WORD MinorSubsystemVersion
;
2911 DWORD Win32VersionValue
;
2913 DWORD SizeOfHeaders
;
2914 DWORD CheckSum
; /* 0x40 */
2916 WORD DllCharacteristics
;
2917 DWORD SizeOfStackReserve
;
2918 DWORD SizeOfStackCommit
;
2919 DWORD SizeOfHeapReserve
; /* 0x50 */
2920 DWORD SizeOfHeapCommit
;
2922 DWORD NumberOfRvaAndSizes
;
2923 IMAGE_DATA_DIRECTORY DataDirectory
[IMAGE_NUMBEROF_DIRECTORY_ENTRIES
]; /* 0x60 */
2925 } IMAGE_OPTIONAL_HEADER32
, *PIMAGE_OPTIONAL_HEADER32
;
2927 typedef struct _IMAGE_NT_HEADERS
{
2928 DWORD Signature
; /* "PE"\0\0 */ /* 0x00 */
2929 IMAGE_FILE_HEADER FileHeader
; /* 0x04 */
2930 IMAGE_OPTIONAL_HEADER32 OptionalHeader
; /* 0x18 */
2931 } IMAGE_NT_HEADERS32
, *PIMAGE_NT_HEADERS32
;
2934 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS
;
2935 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
2936 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER
;
2937 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER
;
2939 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS
;
2940 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
2941 typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER
;
2942 typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER
;
2945 #define IMAGE_SIZEOF_SHORT_NAME 8
2947 typedef struct _IMAGE_SECTION_HEADER
{
2948 BYTE Name
[IMAGE_SIZEOF_SHORT_NAME
];
2950 DWORD PhysicalAddress
;
2953 DWORD VirtualAddress
;
2954 DWORD SizeOfRawData
;
2955 DWORD PointerToRawData
;
2956 DWORD PointerToRelocations
;
2957 DWORD PointerToLinenumbers
;
2958 WORD NumberOfRelocations
;
2959 WORD NumberOfLinenumbers
;
2960 DWORD Characteristics
;
2961 } IMAGE_SECTION_HEADER
, *PIMAGE_SECTION_HEADER
;
2963 #define IMAGE_SIZEOF_SECTION_HEADER 40
2965 #define IMAGE_FIRST_SECTION(ntheader) \
2966 ((PIMAGE_SECTION_HEADER)((ULONG_PTR)&(ntheader)->OptionalHeader + (ntheader)->FileHeader.SizeOfOptionalHeader))
2968 /* These defines are for the Characteristics bitfield. */
2969 /* #define IMAGE_SCN_TYPE_REG 0x00000000 - Reserved */
2970 /* #define IMAGE_SCN_TYPE_DSECT 0x00000001 - Reserved */
2971 /* #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 - Reserved */
2972 /* #define IMAGE_SCN_TYPE_GROUP 0x00000004 - Reserved */
2973 #define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved */
2974 /* #define IMAGE_SCN_TYPE_COPY 0x00000010 - Reserved */
2976 #define IMAGE_SCN_CNT_CODE 0x00000020
2977 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
2978 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
2980 #define IMAGE_SCN_LNK_OTHER 0x00000100
2981 #define IMAGE_SCN_LNK_INFO 0x00000200
2982 /* #define IMAGE_SCN_TYPE_OVER 0x00000400 - Reserved */
2983 #define IMAGE_SCN_LNK_REMOVE 0x00000800
2984 #define IMAGE_SCN_LNK_COMDAT 0x00001000
2986 /* 0x00002000 - Reserved */
2987 /* #define IMAGE_SCN_MEM_PROTECTED 0x00004000 - Obsolete */
2988 #define IMAGE_SCN_MEM_FARDATA 0x00008000
2990 /* #define IMAGE_SCN_MEM_SYSHEAP 0x00010000 - Obsolete */
2991 #define IMAGE_SCN_MEM_PURGEABLE 0x00020000
2992 #define IMAGE_SCN_MEM_16BIT 0x00020000
2993 #define IMAGE_SCN_MEM_LOCKED 0x00040000
2994 #define IMAGE_SCN_MEM_PRELOAD 0x00080000
2996 #define IMAGE_SCN_ALIGN_1BYTES 0x00100000
2997 #define IMAGE_SCN_ALIGN_2BYTES 0x00200000
2998 #define IMAGE_SCN_ALIGN_4BYTES 0x00300000
2999 #define IMAGE_SCN_ALIGN_8BYTES 0x00400000
3000 #define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default */
3001 #define IMAGE_SCN_ALIGN_32BYTES 0x00600000
3002 #define IMAGE_SCN_ALIGN_64BYTES 0x00700000
3003 #define IMAGE_SCN_ALIGN_128BYTES 0x00800000
3004 #define IMAGE_SCN_ALIGN_256BYTES 0x00900000
3005 #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000
3006 #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000
3007 #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000
3008 #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000
3009 #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000
3010 /* 0x00F00000 - Unused */
3011 #define IMAGE_SCN_ALIGN_MASK 0x00F00000
3013 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
3016 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
3017 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
3018 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
3019 #define IMAGE_SCN_MEM_SHARED 0x10000000
3020 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
3021 #define IMAGE_SCN_MEM_READ 0x40000000
3022 #define IMAGE_SCN_MEM_WRITE 0x80000000
3024 #include <pshpack2.h>
3026 typedef struct _IMAGE_SYMBOL
{
3036 SHORT SectionNumber
;
3039 BYTE NumberOfAuxSymbols
;
3041 typedef IMAGE_SYMBOL
*PIMAGE_SYMBOL
;
3043 #define IMAGE_SIZEOF_SYMBOL 18
3045 typedef struct _IMAGE_LINENUMBER
{
3047 DWORD SymbolTableIndex
;
3048 DWORD VirtualAddress
;
3052 typedef IMAGE_LINENUMBER
*PIMAGE_LINENUMBER
;
3054 #define IMAGE_SIZEOF_LINENUMBER 6
3056 typedef union _IMAGE_AUX_SYMBOL
{
3068 DWORD PointerToLinenumber
;
3069 DWORD PointerToNextFunction
;
3078 BYTE Name
[IMAGE_SIZEOF_SYMBOL
];
3082 WORD NumberOfRelocations
;
3083 WORD NumberOfLinenumbers
;
3089 typedef IMAGE_AUX_SYMBOL
*PIMAGE_AUX_SYMBOL
;
3091 #define IMAGE_SIZEOF_AUX_SYMBOL 18
3093 #include <poppack.h>
3095 #define IMAGE_SYM_UNDEFINED (SHORT)0
3096 #define IMAGE_SYM_ABSOLUTE (SHORT)-1
3097 #define IMAGE_SYM_DEBUG (SHORT)-2
3099 #define IMAGE_SYM_TYPE_NULL 0x0000
3100 #define IMAGE_SYM_TYPE_VOID 0x0001
3101 #define IMAGE_SYM_TYPE_CHAR 0x0002
3102 #define IMAGE_SYM_TYPE_SHORT 0x0003
3103 #define IMAGE_SYM_TYPE_INT 0x0004
3104 #define IMAGE_SYM_TYPE_LONG 0x0005
3105 #define IMAGE_SYM_TYPE_FLOAT 0x0006
3106 #define IMAGE_SYM_TYPE_DOUBLE 0x0007
3107 #define IMAGE_SYM_TYPE_STRUCT 0x0008
3108 #define IMAGE_SYM_TYPE_UNION 0x0009
3109 #define IMAGE_SYM_TYPE_ENUM 0x000A
3110 #define IMAGE_SYM_TYPE_MOE 0x000B
3111 #define IMAGE_SYM_TYPE_BYTE 0x000C
3112 #define IMAGE_SYM_TYPE_WORD 0x000D
3113 #define IMAGE_SYM_TYPE_UINT 0x000E
3114 #define IMAGE_SYM_TYPE_DWORD 0x000F
3115 #define IMAGE_SYM_TYPE_PCODE 0x8000
3117 #define IMAGE_SYM_DTYPE_NULL 0
3118 #define IMAGE_SYM_DTYPE_POINTER 1
3119 #define IMAGE_SYM_DTYPE_FUNCTION 2
3120 #define IMAGE_SYM_DTYPE_ARRAY 3
3122 #define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE )-1
3123 #define IMAGE_SYM_CLASS_NULL 0x0000
3124 #define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
3125 #define IMAGE_SYM_CLASS_EXTERNAL 0x0002
3126 #define IMAGE_SYM_CLASS_STATIC 0x0003
3127 #define IMAGE_SYM_CLASS_REGISTER 0x0004
3128 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
3129 #define IMAGE_SYM_CLASS_LABEL 0x0006
3130 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
3131 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
3132 #define IMAGE_SYM_CLASS_ARGUMENT 0x0009
3133 #define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
3134 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
3135 #define IMAGE_SYM_CLASS_UNION_TAG 0x000C
3136 #define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
3137 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
3138 #define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
3139 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
3140 #define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
3141 #define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
3143 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044
3144 #define IMAGE_SYM_CLASS_BLOCK 0x0064
3145 #define IMAGE_SYM_CLASS_FUNCTION 0x0065
3146 #define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
3147 #define IMAGE_SYM_CLASS_FILE 0x0067
3148 #define IMAGE_SYM_CLASS_SECTION 0x0068
3149 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
3151 #define N_BTMASK 0x000F
3152 #define N_TMASK 0x0030
3153 #define N_TMASK1 0x00C0
3154 #define N_TMASK2 0x00F0
3158 #define BTYPE(x) ((x) & N_BTMASK)
3161 #define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
3165 #define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
3169 #define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
3173 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
3177 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
3180 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
3183 #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
3184 #define IMAGE_COMDAT_SELECT_ANY 2
3185 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
3186 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
3187 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
3188 #define IMAGE_COMDAT_SELECT_LARGEST 6
3189 #define IMAGE_COMDAT_SELECT_NEWEST 7
3191 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
3192 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
3193 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
3195 /* Export module directory */
3197 typedef struct _IMAGE_EXPORT_DIRECTORY
{
3198 DWORD Characteristics
;
3199 DWORD TimeDateStamp
;
3204 DWORD NumberOfFunctions
;
3205 DWORD NumberOfNames
;
3206 DWORD AddressOfFunctions
;
3207 DWORD AddressOfNames
;
3208 DWORD AddressOfNameOrdinals
;
3209 } IMAGE_EXPORT_DIRECTORY
,*PIMAGE_EXPORT_DIRECTORY
;
3211 /* Import name entry */
3212 typedef struct _IMAGE_IMPORT_BY_NAME
{
3215 } IMAGE_IMPORT_BY_NAME
,*PIMAGE_IMPORT_BY_NAME
;
3217 #include <pshpack8.h>
3219 typedef struct _IMAGE_THUNK_DATA64
{
3221 ULONGLONG ForwarderString
;
3224 ULONGLONG AddressOfData
;
3226 } IMAGE_THUNK_DATA64
,*PIMAGE_THUNK_DATA64
;
3227 #include <poppack.h>
3229 typedef struct _IMAGE_THUNK_DATA32
{
3231 DWORD ForwarderString
;
3234 DWORD AddressOfData
;
3236 } IMAGE_THUNK_DATA32
,*PIMAGE_THUNK_DATA32
;
3238 /* Import module directory */
3240 typedef struct _IMAGE_IMPORT_DESCRIPTOR
{
3242 DWORD Characteristics
; /* 0 for terminating null import descriptor */
3243 DWORD OriginalFirstThunk
; /* RVA to original unbound IAT */
3245 DWORD TimeDateStamp
; /* 0 if not bound,
3246 * -1 if bound, and real date\time stamp
3247 * in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
3249 * otherwise date/time stamp of DLL bound to
3252 DWORD ForwarderChain
; /* -1 if no forwarders */
3254 /* RVA to IAT (if bound this IAT has actual addresses) */
3256 } IMAGE_IMPORT_DESCRIPTOR
,*PIMAGE_IMPORT_DESCRIPTOR
;
3258 #define IMAGE_ORDINAL_FLAG64 (((ULONGLONG)0x80000000 << 32) | 0x00000000)
3259 #define IMAGE_ORDINAL_FLAG32 0x80000000
3260 #define IMAGE_SNAP_BY_ORDINAL64(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG64) != 0)
3261 #define IMAGE_SNAP_BY_ORDINAL32(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG32) != 0)
3262 #define IMAGE_ORDINAL64(ordinal) ((ordinal) & 0xffff)
3263 #define IMAGE_ORDINAL32(ordinal) ((ordinal) & 0xffff)
3266 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
3267 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
3268 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
3269 typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA
;
3270 typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA
;
3272 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
3273 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
3274 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
3275 typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA
;
3276 typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA
;
3279 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR
3281 DWORD TimeDateStamp
;
3282 WORD OffsetModuleName
;
3283 WORD NumberOfModuleForwarderRefs
;
3284 /* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */
3285 } IMAGE_BOUND_IMPORT_DESCRIPTOR
, *PIMAGE_BOUND_IMPORT_DESCRIPTOR
;
3287 typedef struct _IMAGE_BOUND_FORWARDER_REF
3289 DWORD TimeDateStamp
;
3290 WORD OffsetModuleName
;
3292 } IMAGE_BOUND_FORWARDER_REF
, *PIMAGE_BOUND_FORWARDER_REF
;
3294 typedef struct _IMAGE_BASE_RELOCATION
3296 DWORD VirtualAddress
;
3298 /* WORD TypeOffset[1]; */
3299 } IMAGE_BASE_RELOCATION
,*PIMAGE_BASE_RELOCATION
;
3301 #include <pshpack2.h>
3303 typedef struct _IMAGE_RELOCATION
3306 DWORD VirtualAddress
;
3309 DWORD SymbolTableIndex
;
3311 } IMAGE_RELOCATION
, *PIMAGE_RELOCATION
;
3313 #include <poppack.h>
3315 #define IMAGE_SIZEOF_RELOCATION 10
3317 typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR
3321 DWORD AllAttributes
;
3325 DWORD ReservedAttributes
:31;
3330 DWORD ModuleHandleRVA
;
3331 DWORD ImportAddressTableRVA
;
3332 DWORD ImportNameTableRVA
;
3333 DWORD BoundImportAddressTableRVA
;
3334 DWORD UnloadInformationTableRVA
;
3335 DWORD TimeDateStamp
;
3336 } IMAGE_DELAYLOAD_DESCRIPTOR
, *PIMAGE_DELAYLOAD_DESCRIPTOR
;
3337 typedef const IMAGE_DELAYLOAD_DESCRIPTOR
*PCIMAGE_DELAYLOAD_DESCRIPTOR
;
3339 /* generic relocation types */
3340 #define IMAGE_REL_BASED_ABSOLUTE 0
3341 #define IMAGE_REL_BASED_HIGH 1
3342 #define IMAGE_REL_BASED_LOW 2
3343 #define IMAGE_REL_BASED_HIGHLOW 3
3344 #define IMAGE_REL_BASED_HIGHADJ 4
3345 #define IMAGE_REL_BASED_MIPS_JMPADDR 5
3346 #define IMAGE_REL_BASED_ARM_MOV32A 5 /* yes, 5 too */
3347 #define IMAGE_REL_BASED_ARM_MOV32 5 /* yes, 5 too */
3348 #define IMAGE_REL_BASED_SECTION 6
3349 #define IMAGE_REL_BASED_REL 7
3350 #define IMAGE_REL_BASED_ARM_MOV32T 7 /* yes, 7 too */
3351 #define IMAGE_REL_BASED_THUMB_MOV32 7 /* yes, 7 too */
3352 #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
3353 #define IMAGE_REL_BASED_IA64_IMM64 9 /* yes, 9 too */
3354 #define IMAGE_REL_BASED_DIR64 10
3355 #define IMAGE_REL_BASED_HIGH3ADJ 11
3357 /* I386 relocation types */
3358 #define IMAGE_REL_I386_ABSOLUTE 0
3359 #define IMAGE_REL_I386_DIR16 1
3360 #define IMAGE_REL_I386_REL16 2
3361 #define IMAGE_REL_I386_DIR32 6
3362 #define IMAGE_REL_I386_DIR32NB 7
3363 #define IMAGE_REL_I386_SEG12 9
3364 #define IMAGE_REL_I386_SECTION 10
3365 #define IMAGE_REL_I386_SECREL 11
3366 #define IMAGE_REL_I386_TOKEN 12
3367 #define IMAGE_REL_I386_SECREL7 13
3368 #define IMAGE_REL_I386_REL32 20
3370 /* MIPS relocation types */
3371 #define IMAGE_REL_MIPS_ABSOLUTE 0x0000
3372 #define IMAGE_REL_MIPS_REFHALF 0x0001
3373 #define IMAGE_REL_MIPS_REFWORD 0x0002
3374 #define IMAGE_REL_MIPS_JMPADDR 0x0003
3375 #define IMAGE_REL_MIPS_REFHI 0x0004
3376 #define IMAGE_REL_MIPS_REFLO 0x0005
3377 #define IMAGE_REL_MIPS_GPREL 0x0006
3378 #define IMAGE_REL_MIPS_LITERAL 0x0007
3379 #define IMAGE_REL_MIPS_SECTION 0x000A
3380 #define IMAGE_REL_MIPS_SECREL 0x000B
3381 #define IMAGE_REL_MIPS_SECRELLO 0x000C
3382 #define IMAGE_REL_MIPS_SECRELHI 0x000D
3383 #define IMAGE_REL_MIPS_TOKEN 0x000E
3384 #define IMAGE_REL_MIPS_JMPADDR16 0x0010
3385 #define IMAGE_REL_MIPS_REFWORDNB 0x0022
3386 #define IMAGE_REL_MIPS_PAIR 0x0025
3388 /* ALPHA relocation types */
3389 #define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
3390 #define IMAGE_REL_ALPHA_REFLONG 0x0001
3391 #define IMAGE_REL_ALPHA_REFQUAD 0x0002
3392 #define IMAGE_REL_ALPHA_GPREL 0x0003
3393 #define IMAGE_REL_ALPHA_LITERAL 0x0004
3394 #define IMAGE_REL_ALPHA_LITUSE 0x0005
3395 #define IMAGE_REL_ALPHA_GPDISP 0x0006
3396 #define IMAGE_REL_ALPHA_BRADDR 0x0007
3397 #define IMAGE_REL_ALPHA_HINT 0x0008
3398 #define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
3399 #define IMAGE_REL_ALPHA_REFHI 0x000A
3400 #define IMAGE_REL_ALPHA_REFLO 0x000B
3401 #define IMAGE_REL_ALPHA_PAIR 0x000C
3402 #define IMAGE_REL_ALPHA_MATCH 0x000D
3403 #define IMAGE_REL_ALPHA_SECTION 0x000E
3404 #define IMAGE_REL_ALPHA_SECREL 0x000F
3405 #define IMAGE_REL_ALPHA_REFLONGNB 0x0010
3406 #define IMAGE_REL_ALPHA_SECRELLO 0x0011
3407 #define IMAGE_REL_ALPHA_SECRELHI 0x0012
3408 #define IMAGE_REL_ALPHA_REFQ3 0x0013
3409 #define IMAGE_REL_ALPHA_REFQ2 0x0014
3410 #define IMAGE_REL_ALPHA_REFQ1 0x0015
3411 #define IMAGE_REL_ALPHA_GPRELLO 0x0016
3412 #define IMAGE_REL_ALPHA_GPRELHI 0x0017
3414 /* PowerPC relocation types */
3415 #define IMAGE_REL_PPC_ABSOLUTE 0x0000
3416 #define IMAGE_REL_PPC_ADDR64 0x0001
3417 #define IMAGE_REL_PPC_ADDR 0x0002
3418 #define IMAGE_REL_PPC_ADDR24 0x0003
3419 #define IMAGE_REL_PPC_ADDR16 0x0004
3420 #define IMAGE_REL_PPC_ADDR14 0x0005
3421 #define IMAGE_REL_PPC_REL24 0x0006
3422 #define IMAGE_REL_PPC_REL14 0x0007
3423 #define IMAGE_REL_PPC_TOCREL16 0x0008
3424 #define IMAGE_REL_PPC_TOCREL14 0x0009
3425 #define IMAGE_REL_PPC_ADDR32NB 0x000A
3426 #define IMAGE_REL_PPC_SECREL 0x000B
3427 #define IMAGE_REL_PPC_SECTION 0x000C
3428 #define IMAGE_REL_PPC_IFGLUE 0x000D
3429 #define IMAGE_REL_PPC_IMGLUE 0x000E
3430 #define IMAGE_REL_PPC_SECREL16 0x000F
3431 #define IMAGE_REL_PPC_REFHI 0x0010
3432 #define IMAGE_REL_PPC_REFLO 0x0011
3433 #define IMAGE_REL_PPC_PAIR 0x0012
3434 #define IMAGE_REL_PPC_SECRELLO 0x0013
3435 #define IMAGE_REL_PPC_SECRELHI 0x0014
3436 #define IMAGE_REL_PPC_GPREL 0x0015
3437 #define IMAGE_REL_PPC_TOKEN 0x0016
3438 #define IMAGE_REL_PPC_TYPEMASK 0x00FF
3440 #define IMAGE_REL_PPC_NEG 0x0100
3441 #define IMAGE_REL_PPC_BRTAKEN 0x0200
3442 #define IMAGE_REL_PPC_BRNTAKEN 0x0400
3443 #define IMAGE_REL_PPC_TOCDEFN 0x0800
3445 /* SH3 relocation types */
3446 #define IMAGE_REL_SH3_ABSOLUTE 0x0000
3447 #define IMAGE_REL_SH3_DIRECT16 0x0001
3448 #define IMAGE_REL_SH3_DIRECT 0x0002
3449 #define IMAGE_REL_SH3_DIRECT8 0x0003
3450 #define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
3451 #define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
3452 #define IMAGE_REL_SH3_DIRECT4 0x0006
3453 #define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
3454 #define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
3455 #define IMAGE_REL_SH3_PCREL8_WORD 0x0009
3456 #define IMAGE_REL_SH3_PCREL8_LONG 0x000A
3457 #define IMAGE_REL_SH3_PCREL12_WORD 0x000B
3458 #define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
3459 #define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
3460 #define IMAGE_REL_SH3_SECTION 0x000E
3461 #define IMAGE_REL_SH3_SECREL 0x000F
3462 #define IMAGE_REL_SH3_DIRECT32_NB 0x0010
3463 #define IMAGE_REL_SH3_GPREL4_LONG 0x0011
3464 #define IMAGE_REL_SH3_TOKEN 0x0012
3466 /* ARM relocation types */
3467 #define IMAGE_REL_ARM_ABSOLUTE 0x0000
3468 #define IMAGE_REL_ARM_ADDR 0x0001
3469 #define IMAGE_REL_ARM_ADDR32NB 0x0002
3470 #define IMAGE_REL_ARM_BRANCH24 0x0003
3471 #define IMAGE_REL_ARM_BRANCH11 0x0004
3472 #define IMAGE_REL_ARM_TOKEN 0x0005
3473 #define IMAGE_REL_ARM_GPREL12 0x0006
3474 #define IMAGE_REL_ARM_GPREL7 0x0007
3475 #define IMAGE_REL_ARM_BLX24 0x0008
3476 #define IMAGE_REL_ARM_BLX11 0x0009
3477 #define IMAGE_REL_ARM_SECTION 0x000E
3478 #define IMAGE_REL_ARM_SECREL 0x000F
3479 #define IMAGE_REL_ARM_MOV32A 0x0010
3480 #define IMAGE_REL_ARM_MOV32T 0x0011
3481 #define IMAGE_REL_ARM_BRANCH20T 0x0012
3482 #define IMAGE_REL_ARM_BRANCH24T 0x0014
3483 #define IMAGE_REL_ARM_BLX23T 0x0015
3485 /* ARM64 relocation types */
3486 #define IMAGE_REL_ARM64_ABSOLUTE 0x0000
3487 #define IMAGE_REL_ARM64_ADDR32 0x0001
3488 #define IMAGE_REL_ARM64_ADDR32NB 0x0002
3489 #define IMAGE_REL_ARM64_BRANCH26 0x0003
3490 #define IMAGE_REL_ARM64_PAGEBASE_REL21 0x0004
3491 #define IMAGE_REL_ARM64_REL21 0x0005
3492 #define IMAGE_REL_ARM64_PAGEOFFSET_12A 0x0006
3493 #define IMAGE_REL_ARM64_PAGEOFFSET_12L 0x0007
3494 #define IMAGE_REL_ARM64_SECREL 0x0008
3495 #define IMAGE_REL_ARM64_SECREL_LOW12A 0x0009
3496 #define IMAGE_REL_ARM64_SECREL_HIGH12A 0x000A
3497 #define IMAGE_REL_ARM64_SECREL_LOW12L 0x000B
3498 #define IMAGE_REL_ARM64_TOKEN 0x000C
3499 #define IMAGE_REL_ARM64_SECTION 0x000D
3500 #define IMAGE_REL_ARM64_ADDR64 0x000E
3501 #define IMAGE_REL_ARM64_BRANCH19 0x000F
3503 /* IA64 relocation types */
3504 #define IMAGE_REL_IA64_ABSOLUTE 0x0000
3505 #define IMAGE_REL_IA64_IMM14 0x0001
3506 #define IMAGE_REL_IA64_IMM22 0x0002
3507 #define IMAGE_REL_IA64_IMM64 0x0003
3508 #define IMAGE_REL_IA64_DIR 0x0004
3509 #define IMAGE_REL_IA64_DIR64 0x0005
3510 #define IMAGE_REL_IA64_PCREL21B 0x0006
3511 #define IMAGE_REL_IA64_PCREL21M 0x0007
3512 #define IMAGE_REL_IA64_PCREL21F 0x0008
3513 #define IMAGE_REL_IA64_GPREL22 0x0009
3514 #define IMAGE_REL_IA64_LTOFF22 0x000A
3515 #define IMAGE_REL_IA64_SECTION 0x000B
3516 #define IMAGE_REL_IA64_SECREL22 0x000C
3517 #define IMAGE_REL_IA64_SECREL64I 0x000D
3518 #define IMAGE_REL_IA64_SECREL 0x000E
3519 #define IMAGE_REL_IA64_LTOFF64 0x000F
3520 #define IMAGE_REL_IA64_DIR32NB 0x0010
3521 #define IMAGE_REL_IA64_SREL14 0x0011
3522 #define IMAGE_REL_IA64_SREL22 0x0012
3523 #define IMAGE_REL_IA64_SREL32 0x0013
3524 #define IMAGE_REL_IA64_UREL32 0x0014
3525 #define IMAGE_REL_IA64_PCREL60X 0x0015
3526 #define IMAGE_REL_IA64_PCREL60B 0x0016
3527 #define IMAGE_REL_IA64_PCREL60F 0x0017
3528 #define IMAGE_REL_IA64_PCREL60I 0x0018
3529 #define IMAGE_REL_IA64_PCREL60M 0x0019
3530 #define IMAGE_REL_IA64_IMMGPREL64 0x001A
3531 #define IMAGE_REL_IA64_TOKEN 0x001B
3532 #define IMAGE_REL_IA64_GPREL32 0x001C
3533 #define IMAGE_REL_IA64_ADDEND 0x001F
3535 /* AMD64 relocation types */
3536 #define IMAGE_REL_AMD64_ABSOLUTE 0x0000
3537 #define IMAGE_REL_AMD64_ADDR64 0x0001
3538 #define IMAGE_REL_AMD64_ADDR32 0x0002
3539 #define IMAGE_REL_AMD64_ADDR32NB 0x0003
3540 #define IMAGE_REL_AMD64_REL32 0x0004
3541 #define IMAGE_REL_AMD64_REL32_1 0x0005
3542 #define IMAGE_REL_AMD64_REL32_2 0x0006
3543 #define IMAGE_REL_AMD64_REL32_3 0x0007
3544 #define IMAGE_REL_AMD64_REL32_4 0x0008
3545 #define IMAGE_REL_AMD64_REL32_5 0x0009
3546 #define IMAGE_REL_AMD64_SECTION 0x000A
3547 #define IMAGE_REL_AMD64_SECREL 0x000B
3548 #define IMAGE_REL_AMD64_SECREL7 0x000C
3549 #define IMAGE_REL_AMD64_TOKEN 0x000D
3550 #define IMAGE_REL_AMD64_SREL32 0x000E
3551 #define IMAGE_REL_AMD64_PAIR 0x000F
3552 #define IMAGE_REL_AMD64_SSPAN32 0x0010
3554 /* archive format */
3556 #define IMAGE_ARCHIVE_START_SIZE 8
3557 #define IMAGE_ARCHIVE_START "!<arch>\n"
3558 #define IMAGE_ARCHIVE_END "`\n"
3559 #define IMAGE_ARCHIVE_PAD "\n"
3560 #define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
3561 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
3563 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
3572 } IMAGE_ARCHIVE_MEMBER_HEADER
, *PIMAGE_ARCHIVE_MEMBER_HEADER
;
3574 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
3576 typedef struct _IMPORT_OBJECT_HEADER
3582 DWORD TimeDateStamp
;
3592 } IMPORT_OBJECT_HEADER
;
3594 #define IMPORT_OBJECT_HDR_SIG2 0xffff
3596 typedef enum IMPORT_OBJECT_TYPE
3598 IMPORT_OBJECT_CODE
= 0,
3599 IMPORT_OBJECT_DATA
= 1,
3600 IMPORT_OBJECT_CONST
= 2
3601 } IMPORT_OBJECT_TYPE
;
3603 typedef enum IMPORT_OBJECT_NAME_TYPE
3605 IMPORT_OBJECT_ORDINAL
= 0,
3606 IMPORT_OBJECT_NAME
= 1,
3607 IMPORT_OBJECT_NAME_NO_PREFIX
= 2,
3608 IMPORT_OBJECT_NAME_UNDECORATE
= 3,
3609 IMPORT_OBJECT_NAME_EXPORTAS
= 4
3610 } IMPORT_OBJECT_NAME_TYPE
;
3612 typedef struct _ANON_OBJECT_HEADER
3618 DWORD TimeDateStamp
;
3621 } ANON_OBJECT_HEADER
;
3624 * Resource directory stuff
3626 typedef struct _IMAGE_RESOURCE_DIRECTORY
{
3627 DWORD Characteristics
;
3628 DWORD TimeDateStamp
;
3631 WORD NumberOfNamedEntries
;
3632 WORD NumberOfIdEntries
;
3633 /* IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */
3634 } IMAGE_RESOURCE_DIRECTORY
,*PIMAGE_RESOURCE_DIRECTORY
;
3636 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
3637 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
3639 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY
{
3642 unsigned NameOffset
:31;
3643 unsigned NameIsString
:1;
3651 unsigned OffsetToDirectory
:31;
3652 unsigned DataIsDirectory
:1;
3655 } IMAGE_RESOURCE_DIRECTORY_ENTRY
,*PIMAGE_RESOURCE_DIRECTORY_ENTRY
;
3658 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING
{
3660 CHAR NameString
[ 1 ];
3661 } IMAGE_RESOURCE_DIRECTORY_STRING
,*PIMAGE_RESOURCE_DIRECTORY_STRING
;
3663 typedef struct _IMAGE_RESOURCE_DIR_STRING_U
{
3665 WCHAR NameString
[ 1 ];
3666 } IMAGE_RESOURCE_DIR_STRING_U
,*PIMAGE_RESOURCE_DIR_STRING_U
;
3668 typedef struct _IMAGE_RESOURCE_DATA_ENTRY
{
3673 } IMAGE_RESOURCE_DATA_ENTRY
,*PIMAGE_RESOURCE_DATA_ENTRY
;
3676 typedef VOID (CALLBACK
*PIMAGE_TLS_CALLBACK
)(
3677 LPVOID DllHandle
,DWORD Reason
,LPVOID Reserved
3680 typedef struct _IMAGE_TLS_DIRECTORY64
{
3681 ULONGLONG StartAddressOfRawData
;
3682 ULONGLONG EndAddressOfRawData
;
3683 ULONGLONG AddressOfIndex
;
3684 ULONGLONG AddressOfCallBacks
;
3685 DWORD SizeOfZeroFill
;
3686 DWORD Characteristics
;
3687 } IMAGE_TLS_DIRECTORY64
, *PIMAGE_TLS_DIRECTORY64
;
3689 typedef struct _IMAGE_TLS_DIRECTORY32
{
3690 DWORD StartAddressOfRawData
;
3691 DWORD EndAddressOfRawData
;
3692 DWORD AddressOfIndex
;
3693 DWORD AddressOfCallBacks
;
3694 DWORD SizeOfZeroFill
;
3695 DWORD Characteristics
;
3696 } IMAGE_TLS_DIRECTORY32
, *PIMAGE_TLS_DIRECTORY32
;
3699 typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY
;
3700 typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY
;
3702 typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY
;
3703 typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY
;
3706 typedef struct _IMAGE_DEBUG_DIRECTORY
{
3707 DWORD Characteristics
;
3708 DWORD TimeDateStamp
;
3713 DWORD AddressOfRawData
;
3714 DWORD PointerToRawData
;
3715 } IMAGE_DEBUG_DIRECTORY
, *PIMAGE_DEBUG_DIRECTORY
;
3717 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
3718 #define IMAGE_DEBUG_TYPE_COFF 1
3719 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
3720 #define IMAGE_DEBUG_TYPE_FPO 3
3721 #define IMAGE_DEBUG_TYPE_MISC 4
3722 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
3723 #define IMAGE_DEBUG_TYPE_FIXUP 6
3724 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
3725 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
3726 #define IMAGE_DEBUG_TYPE_BORLAND 9
3727 #define IMAGE_DEBUG_TYPE_RESERVED10 10
3728 #define IMAGE_DEBUG_TYPE_CLSID 11
3729 #define IMAGE_DEBUG_TYPE_VC_FEATURE 12
3730 #define IMAGE_DEBUG_TYPE_POGO 13
3731 #define IMAGE_DEBUG_TYPE_ILTCG 14
3732 #define IMAGE_DEBUG_TYPE_MPX 15
3733 #define IMAGE_DEBUG_TYPE_REPRO 16
3735 typedef enum ReplacesCorHdrNumericDefines
3737 COMIMAGE_FLAGS_ILONLY
= 0x00000001,
3738 COMIMAGE_FLAGS_32BITREQUIRED
= 0x00000002,
3739 COMIMAGE_FLAGS_IL_LIBRARY
= 0x00000004,
3740 COMIMAGE_FLAGS_STRONGNAMESIGNED
= 0x00000008,
3741 COMIMAGE_FLAGS_NATIVE_ENTRYPOINT
= 0x00000010,
3742 COMIMAGE_FLAGS_TRACKDEBUGDATA
= 0x00010000,
3743 COMIMAGE_FLAGS_32BITPREFERRED
= 0x00020000,
3745 COR_VERSION_MAJOR_V2
= 2,
3746 COR_VERSION_MAJOR
= COR_VERSION_MAJOR_V2
,
3747 COR_VERSION_MINOR
= 5,
3748 COR_DELETED_NAME_LENGTH
= 8,
3749 COR_VTABLEGAP_NAME_LENGTH
= 8,
3751 NATIVE_TYPE_MAX_CB
= 1,
3752 COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE
= 0xff,
3754 IMAGE_COR_MIH_METHODRVA
= 0x01,
3755 IMAGE_COR_MIH_EHRVA
= 0x02,
3756 IMAGE_COR_MIH_BASICBLOCK
= 0x08,
3758 COR_VTABLE_32BIT
= 0x01,
3759 COR_VTABLE_64BIT
= 0x02,
3760 COR_VTABLE_FROM_UNMANAGED
= 0x04,
3761 COR_VTABLE_CALL_MOST_DERIVED
= 0x10,
3763 IMAGE_COR_EATJ_THUNK_SIZE
= 32,
3765 MAX_CLASS_NAME
= 1024,
3766 MAX_PACKAGE_NAME
= 1024,
3767 } ReplacesCorHdrNumericDefines
;
3769 typedef struct IMAGE_COR20_HEADER
3772 WORD MajorRuntimeVersion
;
3773 WORD MinorRuntimeVersion
;
3775 IMAGE_DATA_DIRECTORY MetaData
;
3778 DWORD EntryPointToken
;
3779 DWORD EntryPointRVA
;
3782 IMAGE_DATA_DIRECTORY Resources
;
3783 IMAGE_DATA_DIRECTORY StrongNameSignature
;
3784 IMAGE_DATA_DIRECTORY CodeManagerTable
;
3785 IMAGE_DATA_DIRECTORY VTableFixups
;
3786 IMAGE_DATA_DIRECTORY ExportAddressTableJumps
;
3787 IMAGE_DATA_DIRECTORY ManagedNativeHeader
;
3789 } IMAGE_COR20_HEADER
, *PIMAGE_COR20_HEADER
;
3791 typedef struct _IMAGE_COFF_SYMBOLS_HEADER
{
3792 DWORD NumberOfSymbols
;
3793 DWORD LvaToFirstSymbol
;
3794 DWORD NumberOfLinenumbers
;
3795 DWORD LvaToFirstLinenumber
;
3796 DWORD RvaToFirstByteOfCode
;
3797 DWORD RvaToLastByteOfCode
;
3798 DWORD RvaToFirstByteOfData
;
3799 DWORD RvaToLastByteOfData
;
3800 } IMAGE_COFF_SYMBOLS_HEADER
, *PIMAGE_COFF_SYMBOLS_HEADER
;
3803 #define FRAME_TRAP 1
3805 #define FRAME_NONFPO 3
3807 typedef struct _FPO_DATA
{
3818 } FPO_DATA
, *PFPO_DATA
;
3820 typedef struct _IMAGE_LOAD_CONFIG_CODE_INTEGRITY
3824 DWORD CatalogOffset
;
3826 } IMAGE_LOAD_CONFIG_CODE_INTEGRITY
, *PIMAGE_LOAD_CONFIG_CODE_INTEGRITY
;
3828 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64
{
3829 DWORD Size
; /* 000 */
3830 DWORD TimeDateStamp
;
3833 DWORD GlobalFlagsClear
;
3834 DWORD GlobalFlagsSet
; /* 010 */
3835 DWORD CriticalSectionDefaultTimeout
;
3836 ULONGLONG DeCommitFreeBlockThreshold
;
3837 ULONGLONG DeCommitTotalFreeThreshold
; /* 020 */
3838 ULONGLONG LockPrefixTable
;
3839 ULONGLONG MaximumAllocationSize
; /* 030 */
3840 ULONGLONG VirtualMemoryThreshold
;
3841 ULONGLONG ProcessAffinityMask
; /* 040 */
3842 DWORD ProcessHeapFlags
;
3844 WORD DependentLoadFlags
;
3845 ULONGLONG EditList
; /* 050 */
3846 ULONGLONG SecurityCookie
;
3847 ULONGLONG SEHandlerTable
; /* 060 */
3848 ULONGLONG SEHandlerCount
;
3849 ULONGLONG GuardCFCheckFunctionPointer
; /* 070 */
3850 ULONGLONG GuardCFDispatchFunctionPointer
;
3851 ULONGLONG GuardCFFunctionTable
; /* 080 */
3852 ULONGLONG GuardCFFunctionCount
;
3853 DWORD GuardFlags
; /* 090 */
3854 IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity
;
3855 ULONGLONG GuardAddressTakenIatEntryTable
; /* 0a0 */
3856 ULONGLONG GuardAddressTakenIatEntryCount
;
3857 ULONGLONG GuardLongJumpTargetTable
; /* 0b0 */
3858 ULONGLONG GuardLongJumpTargetCount
;
3859 ULONGLONG DynamicValueRelocTable
; /* 0c0 */
3860 ULONGLONG CHPEMetadataPointer
;
3861 ULONGLONG GuardRFFailureRoutine
; /* 0d0 */
3862 ULONGLONG GuardRFFailureRoutineFunctionPointer
;
3863 DWORD DynamicValueRelocTableOffset
; /* 0e0 */
3864 WORD DynamicValueRelocTableSection
;
3866 ULONGLONG GuardRFVerifyStackPointerFunctionPointer
;
3867 DWORD HotPatchTableOffset
; /* 0f0 */
3869 ULONGLONG EnclaveConfigurationPointer
;
3870 ULONGLONG VolatileMetadataPointer
; /* 100 */
3871 ULONGLONG GuardEHContinuationTable
;
3872 ULONGLONG GuardEHContinuationCount
; /* 110 */
3873 ULONGLONG GuardXFGCheckFunctionPointer
;
3874 ULONGLONG GuardXFGDispatchFunctionPointer
; /* 120 */
3875 ULONGLONG GuardXFGTableDispatchFunctionPointer
;
3876 ULONGLONG CastGuardOsDeterminedFailureMode
; /* 130 */
3877 ULONGLONG GuardMemcpyFunctionPointer
;
3878 } IMAGE_LOAD_CONFIG_DIRECTORY64
, *PIMAGE_LOAD_CONFIG_DIRECTORY64
;
3880 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32
{
3881 DWORD Size
; /* 000 */
3882 DWORD TimeDateStamp
;
3885 DWORD GlobalFlagsClear
;
3886 DWORD GlobalFlagsSet
; /* 010 */
3887 DWORD CriticalSectionDefaultTimeout
;
3888 DWORD DeCommitFreeBlockThreshold
;
3889 DWORD DeCommitTotalFreeThreshold
;
3890 DWORD LockPrefixTable
; /* 020 */
3891 DWORD MaximumAllocationSize
;
3892 DWORD VirtualMemoryThreshold
;
3893 DWORD ProcessHeapFlags
;
3894 DWORD ProcessAffinityMask
; /* 030 */
3896 WORD DependentLoadFlags
;
3898 DWORD SecurityCookie
;
3899 DWORD SEHandlerTable
; /* 040 */
3900 DWORD SEHandlerCount
;
3901 DWORD GuardCFCheckFunctionPointer
;
3902 DWORD GuardCFDispatchFunctionPointer
;
3903 DWORD GuardCFFunctionTable
; /* 050 */
3904 DWORD GuardCFFunctionCount
;
3906 IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity
;
3907 DWORD GuardAddressTakenIatEntryTable
;
3908 DWORD GuardAddressTakenIatEntryCount
;
3909 DWORD GuardLongJumpTargetTable
; /* 070 */
3910 DWORD GuardLongJumpTargetCount
;
3911 DWORD DynamicValueRelocTable
;
3912 DWORD CHPEMetadataPointer
;
3913 DWORD GuardRFFailureRoutine
; /* 080 */
3914 DWORD GuardRFFailureRoutineFunctionPointer
;
3915 DWORD DynamicValueRelocTableOffset
;
3916 WORD DynamicValueRelocTableSection
;
3918 DWORD GuardRFVerifyStackPointerFunctionPointer
; /* 090 */
3919 DWORD HotPatchTableOffset
;
3921 DWORD EnclaveConfigurationPointer
;
3922 DWORD VolatileMetadataPointer
; /* 0a0 */
3923 DWORD GuardEHContinuationTable
;
3924 DWORD GuardEHContinuationCount
;
3925 DWORD GuardXFGCheckFunctionPointer
;
3926 DWORD GuardXFGDispatchFunctionPointer
; /* 0b0 */
3927 DWORD GuardXFGTableDispatchFunctionPointer
;
3928 DWORD CastGuardOsDeterminedFailureMode
;
3929 DWORD GuardMemcpyFunctionPointer
;
3930 } IMAGE_LOAD_CONFIG_DIRECTORY32
, *PIMAGE_LOAD_CONFIG_DIRECTORY32
;
3933 typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY
;
3934 typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY
;
3936 typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY
;
3937 typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY
;
3940 typedef struct _IMAGE_DYNAMIC_RELOCATION_TABLE
3944 } IMAGE_DYNAMIC_RELOCATION_TABLE
, *PIMAGE_DYNAMIC_RELOCATION_TABLE
;
3946 #include <pshpack1.h>
3948 typedef struct _IMAGE_DYNAMIC_RELOCATION32
3951 DWORD BaseRelocSize
;
3952 } IMAGE_DYNAMIC_RELOCATION32
, *PIMAGE_DYNAMIC_RELOCATION32
;
3954 typedef struct _IMAGE_DYNAMIC_RELOCATION64
3957 DWORD BaseRelocSize
;
3958 } IMAGE_DYNAMIC_RELOCATION64
, *PIMAGE_DYNAMIC_RELOCATION64
;
3960 typedef struct _IMAGE_DYNAMIC_RELOCATION32_V2
3963 DWORD FixupInfoSize
;
3967 } IMAGE_DYNAMIC_RELOCATION32_V2
, *PIMAGE_DYNAMIC_RELOCATION32_V2
;
3969 typedef struct _IMAGE_DYNAMIC_RELOCATION64_V2
3972 DWORD FixupInfoSize
;
3976 } IMAGE_DYNAMIC_RELOCATION64_V2
, *PIMAGE_DYNAMIC_RELOCATION64_V2
;
3978 #include <poppack.h>
3981 typedef IMAGE_DYNAMIC_RELOCATION64 IMAGE_DYNAMIC_RELOCATION
;
3982 typedef PIMAGE_DYNAMIC_RELOCATION64 PIMAGE_DYNAMIC_RELOCATION
;
3983 typedef IMAGE_DYNAMIC_RELOCATION64_V2 IMAGE_DYNAMIC_RELOCATION_V2
;
3984 typedef PIMAGE_DYNAMIC_RELOCATION64_V2 PIMAGE_DYNAMIC_RELOCATION_V2
;
3986 typedef IMAGE_DYNAMIC_RELOCATION32 IMAGE_DYNAMIC_RELOCATION
;
3987 typedef PIMAGE_DYNAMIC_RELOCATION32 PIMAGE_DYNAMIC_RELOCATION
;
3988 typedef IMAGE_DYNAMIC_RELOCATION32_V2 IMAGE_DYNAMIC_RELOCATION_V2
;
3989 typedef PIMAGE_DYNAMIC_RELOCATION32_V2 PIMAGE_DYNAMIC_RELOCATION_V2
;
3992 #define IMAGE_DYNAMIC_RELOCATION_GUARD_RF_PROLOGUE 1
3993 #define IMAGE_DYNAMIC_RELOCATION_GUARD_RF_EPILOGUE 2
3994 #define IMAGE_DYNAMIC_RELOCATION_GUARD_IMPORT_CONTROL_TRANSFER 3
3995 #define IMAGE_DYNAMIC_RELOCATION_GUARD_INDIR_CONTROL_TRANSFER 4
3996 #define IMAGE_DYNAMIC_RELOCATION_GUARD_SWITCHTABLE_BRANCH 5
3997 #define IMAGE_DYNAMIC_RELOCATION_ARM64X 6
3999 typedef struct _IMAGE_CHPE_METADATA_X86
4002 ULONG CHPECodeAddressRangeOffset
;
4003 ULONG CHPECodeAddressRangeCount
;
4004 ULONG WowA64ExceptionHandlerFunctionPointer
;
4005 ULONG WowA64DispatchCallFunctionPointer
;
4006 ULONG WowA64DispatchIndirectCallFunctionPointer
;
4007 ULONG WowA64DispatchIndirectCallCfgFunctionPointer
;
4008 ULONG WowA64DispatchRetFunctionPointer
;
4009 ULONG WowA64DispatchRetLeafFunctionPointer
;
4010 ULONG WowA64DispatchJumpFunctionPointer
;
4011 ULONG CompilerIATPointer
;
4012 ULONG WowA64RdtscFunctionPointer
;
4014 } IMAGE_CHPE_METADATA_X86
, *PIMAGE_CHPE_METADATA_X86
;
4016 typedef struct _IMAGE_CHPE_RANGE_ENTRY
4023 ULONG NativeCode
: 1;
4024 ULONG AddressBits
: 31;
4028 } IMAGE_CHPE_RANGE_ENTRY
, *PIMAGE_CHPE_RANGE_ENTRY
;
4030 typedef struct _IMAGE_ARM64EC_METADATA
4035 ULONG CodeRangesToEntryPoints
;
4036 ULONG RedirectionMetadata
;
4037 ULONG __os_arm64x_dispatch_call_no_redirect
;
4038 ULONG __os_arm64x_dispatch_ret
;
4039 ULONG __os_arm64x_dispatch_call
;
4040 ULONG __os_arm64x_dispatch_icall
;
4041 ULONG __os_arm64x_dispatch_icall_cfg
;
4042 ULONG AlternateEntryPoint
;
4044 ULONG CodeRangesToEntryPointsCount
;
4045 ULONG RedirectionMetadataCount
;
4046 ULONG GetX64InformationFunctionPointer
;
4047 ULONG SetX64InformationFunctionPointer
;
4048 ULONG ExtraRFETable
;
4049 ULONG ExtraRFETableSize
;
4050 ULONG __os_arm64x_dispatch_fptr
;
4051 ULONG AuxiliaryIATCopy
;
4052 ULONG __os_arm64x_helper0
;
4053 ULONG __os_arm64x_helper1
;
4054 ULONG __os_arm64x_helper2
;
4055 ULONG __os_arm64x_helper3
;
4056 ULONG __os_arm64x_helper4
;
4057 ULONG __os_arm64x_helper5
;
4058 ULONG __os_arm64x_helper6
;
4059 ULONG __os_arm64x_helper7
;
4060 ULONG __os_arm64x_helper8
;
4061 } IMAGE_ARM64EC_METADATA
;
4063 typedef struct _IMAGE_ARM64EC_REDIRECTION_ENTRY
4067 } IMAGE_ARM64EC_REDIRECTION_ENTRY
;
4069 typedef struct _IMAGE_ARM64EC_CODE_RANGE_ENTRY_POINT
4074 } IMAGE_ARM64EC_CODE_RANGE_ENTRY_POINT
;
4076 #define IMAGE_DVRT_ARM64X_FIXUP_TYPE_ZEROFILL 0
4077 #define IMAGE_DVRT_ARM64X_FIXUP_TYPE_VALUE 1
4078 #define IMAGE_DVRT_ARM64X_FIXUP_TYPE_DELTA 2
4080 #define IMAGE_DVRT_ARM64X_FIXUP_SIZE_2BYTES 1
4081 #define IMAGE_DVRT_ARM64X_FIXUP_SIZE_4BYTES 2
4082 #define IMAGE_DVRT_ARM64X_FIXUP_SIZE_8BYTES 3
4084 typedef struct _IMAGE_DVRT_ARM64X_FIXUP_RECORD
4089 } IMAGE_DVRT_ARM64X_FIXUP_RECORD
, *PIMAGE_DVRT_ARM64X_FIXUP_RECORD
;
4091 typedef struct _IMAGE_DVRT_ARM64X_DELTA_FIXUP_RECORD
4097 } IMAGE_DVRT_ARM64X_DELTA_FIXUP_RECORD
, *PIMAGE_DVRT_ARM64X_DELTA_FIXUP_RECORD
;
4099 typedef struct _IMAGE_FUNCTION_ENTRY
{
4100 DWORD StartingAddress
;
4101 DWORD EndingAddress
;
4102 DWORD EndOfPrologue
;
4103 } IMAGE_FUNCTION_ENTRY
, *PIMAGE_FUNCTION_ENTRY
;
4105 #define IMAGE_DEBUG_MISC_EXENAME 1
4107 typedef struct _IMAGE_DEBUG_MISC
{
4113 } IMAGE_DEBUG_MISC
, *PIMAGE_DEBUG_MISC
;
4115 /* This is the structure that appears at the very start of a .DBG file. */
4117 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER
{
4121 WORD Characteristics
;
4122 DWORD TimeDateStamp
;
4126 DWORD NumberOfSections
;
4127 DWORD ExportedNamesSize
;
4128 DWORD DebugDirectorySize
;
4129 DWORD SectionAlignment
;
4130 DWORD Reserved
[ 2 ];
4131 } IMAGE_SEPARATE_DEBUG_HEADER
,*PIMAGE_SEPARATE_DEBUG_HEADER
;
4133 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
4136 typedef struct tagMESSAGE_RESOURCE_ENTRY
{
4140 } MESSAGE_RESOURCE_ENTRY
,*PMESSAGE_RESOURCE_ENTRY
;
4141 #define MESSAGE_RESOURCE_UNICODE 0x0001
4143 typedef struct tagMESSAGE_RESOURCE_BLOCK
{
4146 DWORD OffsetToEntries
;
4147 } MESSAGE_RESOURCE_BLOCK
,*PMESSAGE_RESOURCE_BLOCK
;
4149 typedef struct tagMESSAGE_RESOURCE_DATA
{
4150 DWORD NumberOfBlocks
;
4151 MESSAGE_RESOURCE_BLOCK Blocks
[ 1 ];
4152 } MESSAGE_RESOURCE_DATA
,*PMESSAGE_RESOURCE_DATA
;
4155 * Here follows typedefs for security and tokens.
4159 * First a constant for the following typedefs.
4162 #define ANYSIZE_ARRAY 1
4164 /* FIXME: Orphan. What does it point to? */
4165 typedef PVOID PACCESS_TOKEN
;
4166 typedef PVOID PSECURITY_DESCRIPTOR
;
4169 typedef enum _TOKEN_ELEVATION_TYPE
{
4170 TokenElevationTypeDefault
= 1,
4171 TokenElevationTypeFull
,
4172 TokenElevationTypeLimited
4173 } TOKEN_ELEVATION_TYPE
, *PTOKEN_ELEVATION_TYPE
;
4176 * TOKEN_INFORMATION_CLASS
4179 typedef enum _TOKEN_INFORMATION_CLASS
{
4188 TokenImpersonationLevel
,
4190 TokenRestrictedSids
,
4192 TokenGroupsAndPrivileges
,
4193 TokenSessionReference
,
4200 TokenHasRestrictions
,
4201 TokenAccessInformation
,
4202 TokenVirtualizationAllowed
,
4203 TokenVirtualizationEnabled
,
4204 TokenIntegrityLevel
,
4206 TokenMandatoryPolicy
,
4208 TokenIsAppContainer
,
4210 TokenAppContainerSid
,
4211 TokenAppContainerNumber
,
4212 TokenUserClaimAttributes
,
4213 TokenDeviceClaimAttributes
,
4214 TokenRestrictedUserClaimAttributes
,
4215 TokenRestrictedDeviceClaimAttributes
,
4217 TokenRestrictedDeviceGroups
,
4218 TokenSecurityAttributes
,
4220 TokenProcessTrustLevel
,
4222 } TOKEN_INFORMATION_CLASS
;
4224 #define DISABLE_MAX_PRIVILEGE 0x1
4225 #define SANDBOX_INERT 0x2
4226 #define LUA_TOKEN 0x4
4227 #define WRITE_RESTRICTED 0x8
4229 #define TOKEN_ASSIGN_PRIMARY 0x0001
4230 #define TOKEN_DUPLICATE 0x0002
4231 #define TOKEN_IMPERSONATE 0x0004
4232 #define TOKEN_QUERY 0x0008
4233 #define TOKEN_QUERY_SOURCE 0x0010
4234 #define TOKEN_ADJUST_PRIVILEGES 0x0020
4235 #define TOKEN_ADJUST_GROUPS 0x0040
4236 #define TOKEN_ADJUST_DEFAULT 0x0080
4237 #define TOKEN_ADJUST_SESSIONID 0x0100
4238 #define TOKEN_EXECUTE STANDARD_RIGHTS_EXECUTE
4239 #define TOKEN_READ (STANDARD_RIGHTS_READ|TOKEN_QUERY)
4240 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE | \
4241 TOKEN_ADJUST_PRIVILEGES | \
4242 TOKEN_ADJUST_GROUPS | \
4243 TOKEN_ADJUST_DEFAULT )
4244 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
4245 TOKEN_ASSIGN_PRIMARY | \
4247 TOKEN_IMPERSONATE | \
4249 TOKEN_QUERY_SOURCE | \
4250 TOKEN_ADJUST_PRIVILEGES | \
4251 TOKEN_ADJUST_GROUPS | \
4252 TOKEN_ADJUST_SESSIONID | \
4253 TOKEN_ADJUST_DEFAULT )
4255 #ifndef _SECURITY_DEFINED
4256 #define _SECURITY_DEFINED
4258 typedef DWORD ACCESS_MASK
, *PACCESS_MASK
;
4260 typedef struct _GENERIC_MAPPING
{
4261 ACCESS_MASK GenericRead
;
4262 ACCESS_MASK GenericWrite
;
4263 ACCESS_MASK GenericExecute
;
4264 ACCESS_MASK GenericAll
;
4265 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
4267 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
4268 #define SID_IDENTIFIER_AUTHORITY_DEFINED
4271 } SID_IDENTIFIER_AUTHORITY
, *PSID_IDENTIFIER_AUTHORITY
;
4272 #endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */
4276 typedef struct _SID
{
4278 BYTE SubAuthorityCount
;
4279 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
4280 DWORD SubAuthority
[1];
4282 #endif /* !defined(SID_DEFINED) */
4284 #define CREATE_BOUNDARY_DESCRIPTOR_ADD_APPCONTAINER_SID 0x01
4286 #define SID_REVISION (1) /* Current revision */
4287 #define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */
4288 #define SID_RECOMMENDED_SUB_AUTHORITIES (1) /* recommended subauths */
4290 #define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))
4296 #define ACL_REVISION1 1
4297 #define ACL_REVISION2 2
4298 #define ACL_REVISION3 3
4299 #define ACL_REVISION4 4
4301 #define MIN_ACL_REVISION ACL_REVISION2
4302 #define MAX_ACL_REVISION ACL_REVISION4
4304 #define ACL_REVISION 2
4306 typedef struct _ACL
{
4314 typedef enum _ACL_INFORMATION_CLASS
4316 AclRevisionInformation
= 1,
4318 } ACL_INFORMATION_CLASS
;
4320 typedef struct _ACL_REVISION_INFORMATION
4323 } ACL_REVISION_INFORMATION
, *PACL_REVISION_INFORMATION
;
4325 typedef struct _ACL_SIZE_INFORMATION
4328 DWORD AclBytesInUse
;
4330 } ACL_SIZE_INFORMATION
, *PACL_SIZE_INFORMATION
;
4332 /* SECURITY_DESCRIPTOR */
4333 #define SECURITY_DESCRIPTOR_REVISION 1
4334 #define SECURITY_DESCRIPTOR_REVISION1 1
4341 #if defined(_MSC_VER) || defined(__MINGW32__)
4342 #define SE_CREATE_TOKEN_NAME L"SeCreateTokenPrivilege"
4343 #define SE_ASSIGNPRIMARYTOKEN_NAME L"SeAssignPrimaryTokenPrivilege"
4344 #define SE_LOCK_MEMORY_NAME L"SeLockMemoryPrivilege"
4345 #define SE_INCREASE_QUOTA_NAME L"SeIncreaseQuotaPrivilege"
4346 #define SE_UNSOLICITED_INPUT_NAME L"SeUnsolicitedInputPrivilege"
4347 #define SE_MACHINE_ACCOUNT_NAME L"SeMachineAccountPrivilege"
4348 #define SE_TCB_NAME L"SeTcbPrivilege"
4349 #define SE_SECURITY_NAME L"SeSecurityPrivilege"
4350 #define SE_TAKE_OWNERSHIP_NAME L"SeTakeOwnershipPrivilege"
4351 #define SE_LOAD_DRIVER_NAME L"SeLoadDriverPrivilege"
4352 #define SE_SYSTEM_PROFILE_NAME L"SeSystemProfilePrivilege"
4353 #define SE_SYSTEMTIME_NAME L"SeSystemtimePrivilege"
4354 #define SE_PROF_SINGLE_PROCESS_NAME L"SeProfileSingleProcessPrivilege"
4355 #define SE_INC_BASE_PRIORITY_NAME L"SeIncreaseBasePriorityPrivilege"
4356 #define SE_CREATE_PAGEFILE_NAME L"SeCreatePagefilePrivilege"
4357 #define SE_CREATE_PERMANENT_NAME L"SeCreatePermanentPrivilege"
4358 #define SE_BACKUP_NAME L"SeBackupPrivilege"
4359 #define SE_RESTORE_NAME L"SeRestorePrivilege"
4360 #define SE_SHUTDOWN_NAME L"SeShutdownPrivilege"
4361 #define SE_DEBUG_NAME L"SeDebugPrivilege"
4362 #define SE_AUDIT_NAME L"SeAuditPrivilege"
4363 #define SE_SYSTEM_ENVIRONMENT_NAME L"SeSystemEnvironmentPrivilege"
4364 #define SE_CHANGE_NOTIFY_NAME L"SeChangeNotifyPrivilege"
4365 #define SE_REMOTE_SHUTDOWN_NAME L"SeRemoteShutdownPrivilege"
4366 #define SE_UNDOCK_NAME L"SeUndockPrivilege"
4367 #define SE_ENABLE_DELEGATION_NAME L"SeEnableDelegationPrivilege"
4368 #define SE_MANAGE_VOLUME_NAME L"SeManageVolumePrivilege"
4369 #define SE_IMPERSONATE_NAME L"SeImpersonatePrivilege"
4370 #define SE_CREATE_GLOBAL_NAME L"SeCreateGlobalPrivilege"
4371 #define SE_TRUSTED_CREDMAN_ACCESS_NAME L"SeTrustedCredManAccessPrivilege"
4372 #define SE_RELABEL_NAME L"SeRelabelPrivilege"
4373 #define SE_INC_WORKING_SET_NAME L"SeIncreaseWorkingSetPrivilege"
4374 #define SE_TIME_ZONE_NAME L"SeTimeZonePrivilege"
4375 #define SE_CREATE_SYMBOLIC_LINK_NAME L"SeCreateSymbolicLinkPrivilege"
4376 #define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME L"SeDelegateSessionUserImpersonatePrivilege"
4377 #else /* _MSC_VER/__MINGW32__ */
4378 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 };
4379 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 };
4380 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 };
4381 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 };
4382 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 };
4383 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 };
4384 static const WCHAR SE_TCB_NAME
[] = { 'S','e','T','c','b','P','r','i','v','i','l','e','g','e',0 };
4385 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 };
4386 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 };
4387 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 };
4388 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 };
4389 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 };
4390 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 };
4391 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 };
4392 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 };
4393 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 };
4394 static const WCHAR SE_BACKUP_NAME
[] = { 'S','e','B','a','c','k','u','p','P','r','i','v','i','l','e','g','e',0 };
4395 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 };
4396 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 };
4397 static const WCHAR SE_DEBUG_NAME
[] = { 'S','e','D','e','b','u','g','P','r','i','v','i','l','e','g','e',0 };
4398 static const WCHAR SE_AUDIT_NAME
[] = { 'S','e','A','u','d','i','t','P','r','i','v','i','l','e','g','e',0 };
4399 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 };
4400 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 };
4401 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 };
4402 static const WCHAR SE_UNDOCK_NAME
[] = { 'S','e','U','n','d','o','c','k','P','r','i','v','i','l','e','g','e',0 };
4403 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 };
4404 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 };
4405 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 };
4406 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 };
4407 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 };
4408 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 };
4409 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 };
4410 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 };
4411 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 };
4412 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 };
4415 #define SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege"
4416 #define SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege"
4417 #define SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege"
4418 #define SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege"
4419 #define SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege"
4420 #define SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege"
4421 #define SE_TCB_NAME "SeTcbPrivilege"
4422 #define SE_SECURITY_NAME "SeSecurityPrivilege"
4423 #define SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege"
4424 #define SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege"
4425 #define SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege"
4426 #define SE_SYSTEMTIME_NAME "SeSystemtimePrivilege"
4427 #define SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege"
4428 #define SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege"
4429 #define SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege"
4430 #define SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege"
4431 #define SE_BACKUP_NAME "SeBackupPrivilege"
4432 #define SE_RESTORE_NAME "SeRestorePrivilege"
4433 #define SE_SHUTDOWN_NAME "SeShutdownPrivilege"
4434 #define SE_DEBUG_NAME "SeDebugPrivilege"
4435 #define SE_AUDIT_NAME "SeAuditPrivilege"
4436 #define SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege"
4437 #define SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege"
4438 #define SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege"
4439 #define SE_UNDOCK_NAME "SeUndockPrivilege"
4440 #define SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege"
4441 #define SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege"
4442 #define SE_IMPERSONATE_NAME "SeImpersonatePrivilege"
4443 #define SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege"
4444 #define SE_TRUSTED_CREDMAN_ACCESS_NAME "SeTrustedCredManAccessPrivilege"
4445 #define SE_RELABEL_NAME "SeRelabelPrivilege"
4446 #define SE_INC_WORKING_SET_NAME "SeIncreaseWorkingSetPrivilege"
4447 #define SE_TIME_ZONE_NAME "SeTimeZonePrivilege"
4448 #define SE_CREATE_SYMBOLIC_LINK_NAME "SeCreateSymbolicLinkPrivilege"
4449 #define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME "SeDelegateSessionUserImpersonatePrivilege"
4452 #define SE_GROUP_MANDATORY 0x00000001
4453 #define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002
4454 #define SE_GROUP_ENABLED 0x00000004
4455 #define SE_GROUP_OWNER 0x00000008
4456 #define SE_GROUP_USE_FOR_DENY_ONLY 0x00000010
4457 #define SE_GROUP_INTEGRITY 0x00000020
4458 #define SE_GROUP_INTEGRITY_ENABLED 0x00000040
4459 #define SE_GROUP_LOGON_ID 0xC0000000
4460 #define SE_GROUP_RESOURCE 0x20000000
4461 #define SE_GROUP_VALID_ATTRIBUTES 0xE000007F
4463 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001
4464 #define SE_PRIVILEGE_ENABLED 0x00000002
4465 #define SE_PRIVILEGE_REMOVED 0x00000004
4466 #define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
4467 #define SE_PRIVILEGE_VALID_ATTRIBUTES 0x80000007
4469 #define PRIVILEGE_SET_ALL_NECESSARY 1
4471 #define SE_OWNER_DEFAULTED 0x00000001
4472 #define SE_GROUP_DEFAULTED 0x00000002
4473 #define SE_DACL_PRESENT 0x00000004
4474 #define SE_DACL_DEFAULTED 0x00000008
4475 #define SE_SACL_PRESENT 0x00000010
4476 #define SE_SACL_DEFAULTED 0x00000020
4477 #define SE_DACL_AUTO_INHERIT_REQ 0x00000100
4478 #define SE_SACL_AUTO_INHERIT_REQ 0x00000200
4479 #define SE_DACL_AUTO_INHERITED 0x00000400
4480 #define SE_SACL_AUTO_INHERITED 0x00000800
4481 #define SE_DACL_PROTECTED 0x00001000
4482 #define SE_SACL_PROTECTED 0x00002000
4483 #define SE_RM_CONTROL_VALID 0x00004000
4484 #define SE_SELF_RELATIVE 0x00008000
4486 typedef DWORD SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
4487 typedef WORD SECURITY_DESCRIPTOR_CONTROL
, *PSECURITY_DESCRIPTOR_CONTROL
;
4489 /* The security descriptor structure */
4493 SECURITY_DESCRIPTOR_CONTROL Control
;
4498 } SECURITY_DESCRIPTOR_RELATIVE
, *PISECURITY_DESCRIPTOR_RELATIVE
;
4503 SECURITY_DESCRIPTOR_CONTROL Control
;
4508 } SECURITY_DESCRIPTOR
, *PISECURITY_DESCRIPTOR
;
4510 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
4512 #endif /* _SECURITY_DEFINED */
4515 * SID_AND_ATTRIBUTES
4518 typedef struct _SID_AND_ATTRIBUTES
{
4521 } SID_AND_ATTRIBUTES
, *PSID_AND_ATTRIBUTES
;
4523 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
4524 typedef SID_AND_ATTRIBUTES_ARRAY
*PSID_AND_ATTRIBUTES_ARRAY
;
4526 #define SID_HASH_SIZE 32
4528 typedef ULONG_PTR SID_HASH_ENTRY
, *PSID_HASH_ENTRY
;
4530 typedef struct _SID_AND_ATTRIBUTES_HASH
{
4532 PSID_AND_ATTRIBUTES SidAttr
;
4533 SID_HASH_ENTRY Hash
[SID_HASH_SIZE
];
4534 } SID_AND_ATTRIBUTES_HASH
, *PSID_AND_ATTRIBUTES_HASH
;
4536 /* security entities */
4537 #define SECURITY_NULL_RID __MSABI_LONG(0x00000000)
4538 #define SECURITY_WORLD_RID __MSABI_LONG(0x00000000)
4539 #define SECURITY_LOCAL_RID __MSABI_LONG(0X00000000)
4541 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
4544 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
4547 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
4548 #define SECURITY_LOCAL_LOGON_RID __MSABI_LONG(0X00000000)
4551 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
4552 #define SECURITY_CREATOR_OWNER_RID __MSABI_LONG(0x00000000)
4553 #define SECURITY_CREATOR_GROUP_RID __MSABI_LONG(0x00000001)
4554 #define SECURITY_CREATOR_OWNER_SERVER_RID __MSABI_LONG(0x00000002)
4555 #define SECURITY_CREATOR_GROUP_SERVER_RID __MSABI_LONG(0x00000003)
4556 #define SECURITY_CREATOR_OWNER_RIGHTS_RID __MSABI_LONG(0x00000004)
4559 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
4562 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
4563 #define SECURITY_DIALUP_RID __MSABI_LONG(0x00000001)
4564 #define SECURITY_NETWORK_RID __MSABI_LONG(0x00000002)
4565 #define SECURITY_BATCH_RID __MSABI_LONG(0x00000003)
4566 #define SECURITY_INTERACTIVE_RID __MSABI_LONG(0x00000004)
4567 #define SECURITY_LOGON_IDS_RID __MSABI_LONG(0x00000005)
4568 #define SECURITY_SERVICE_RID __MSABI_LONG(0x00000006)
4569 #define SECURITY_ANONYMOUS_LOGON_RID __MSABI_LONG(0x00000007)
4570 #define SECURITY_PROXY_RID __MSABI_LONG(0x00000008)
4571 #define SECURITY_ENTERPRISE_CONTROLLERS_RID __MSABI_LONG(0x00000009)
4572 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
4573 #define SECURITY_PRINCIPAL_SELF_RID __MSABI_LONG(0x0000000A)
4574 #define SECURITY_AUTHENTICATED_USER_RID __MSABI_LONG(0x0000000B)
4575 #define SECURITY_RESTRICTED_CODE_RID __MSABI_LONG(0x0000000C)
4576 #define SECURITY_TERMINAL_SERVER_RID __MSABI_LONG(0x0000000D)
4577 #define SECURITY_REMOTE_LOGON_RID __MSABI_LONG(0x0000000E)
4578 #define SECURITY_THIS_ORGANIZATION_RID __MSABI_LONG(0x0000000F)
4579 #define SECURITY_LOCAL_SYSTEM_RID __MSABI_LONG(0x00000012)
4580 #define SECURITY_LOCAL_SERVICE_RID __MSABI_LONG(0x00000013)
4581 #define SECURITY_NETWORK_SERVICE_RID __MSABI_LONG(0x00000014)
4582 #define SECURITY_NT_NON_UNIQUE __MSABI_LONG(0x00000015)
4583 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID __MSABI_LONG(0x00000016)
4584 #define SECURITY_BUILTIN_DOMAIN_RID __MSABI_LONG(0x00000020)
4585 #define SECURITY_WRITE_RESTRICTED_CODE_RID __MSABI_LONG(0x00000021)
4587 #define SECURITY_PACKAGE_BASE_RID __MSABI_LONG(0x00000040)
4588 #define SECURITY_PACKAGE_NTLM_RID __MSABI_LONG(0x0000000A)
4589 #define SECURITY_PACKAGE_SCHANNEL_RID __MSABI_LONG(0x0000000E)
4590 #define SECURITY_PACKAGE_DIGEST_RID __MSABI_LONG(0x00000015)
4591 #define SECURITY_CRED_TYPE_BASE_RID __MSABI_LONG(0x00000041)
4592 #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID __MSABI_LONG(0x00000001)
4593 #define SECURITY_MIN_BASE_RID __MSABI_LONG(0x00000050)
4594 #define SECURITY_SERVICE_ID_BASE_RID __MSABI_LONG(0x00000050)
4595 #define SECURITY_RESERVED_ID_BASE_RID __MSABI_LONG(0x00000051)
4596 #define SECURITY_APPPOOL_ID_BASE_RID __MSABI_LONG(0x00000052)
4597 #define SECURITY_VIRTUALSERVER_ID_BASE_RID __MSABI_LONG(0x00000053)
4598 #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID __MSABI_LONG(0x00000054)
4599 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID __MSABI_LONG(0x00000055)
4600 #define SECURITY_WMIHOST_ID_BASE_RID __MSABI_LONG(0x00000056)
4601 #define SECURITY_TASK_ID_BASE_RID __MSABI_LONG(0x00000057)
4602 #define SECURITY_NFS_ID_BASE_RID __MSABI_LONG(0x00000058)
4603 #define SECURITY_COM_ID_BASE_RID __MSABI_LONG(0x00000059)
4604 #define SECURITY_MAX_BASE_RID __MSABI_LONG(0x0000006F)
4605 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID __MSABI_LONG(0x00000070)
4606 #define SECURITY_MAX_ALWAYS_FILTERED __MSABI_LONG(0x000003E7)
4607 #define SECURITY_MIN_NEVER_FILTERED __MSABI_LONG(0x000003E8)
4608 #define SECURITY_OTHER_ORGANIZATION_RID __MSABI_LONG(0x000003E8)
4610 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS __MSABI_LONG(0x000001F2)
4612 #define FOREST_USER_RID_MAX __MSABI_LONG(0x000001F3)
4613 #define DOMAIN_USER_RID_ADMIN __MSABI_LONG(0x000001F4)
4614 #define DOMAIN_USER_RID_GUEST __MSABI_LONG(0x000001F5)
4615 #define DOMAIN_USER_RID_KRBTGT __MSABI_LONG(0x000001F6)
4616 #define DOMAIN_USER_RID_MAX __MSABI_LONG(0x000003E7)
4618 #define DOMAIN_GROUP_RID_ADMINS __MSABI_LONG(0x00000200)
4619 #define DOMAIN_GROUP_RID_USERS __MSABI_LONG(0x00000201)
4620 #define DOMAIN_GROUP_RID_GUESTS __MSABI_LONG(0x00000202)
4621 #define DOMAIN_GROUP_RID_COMPUTERS __MSABI_LONG(0x00000203)
4622 #define DOMAIN_GROUP_RID_CONTROLLERS __MSABI_LONG(0x00000204)
4623 #define DOMAIN_GROUP_RID_CERT_ADMINS __MSABI_LONG(0x00000205)
4624 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS __MSABI_LONG(0x00000206)
4625 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS __MSABI_LONG(0x00000207)
4626 #define DOMAIN_GROUP_RID_POLICY_ADMINS __MSABI_LONG(0x00000208)
4627 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS __MSABI_LONG(0x00000209)
4629 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
4631 #define SECURITY_APP_PACKAGE_AUTHORITY {0,0,0,0,0,15}
4632 #define SECURITY_APP_PACKAGE_BASE_RID __MSABI_LONG(0x000000002)
4633 #define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT __MSABI_LONG(0x000000002)
4634 #define SECURITY_APP_PACKAGE_RID_COUNT __MSABI_LONG(0x000000008)
4635 #define SECURITY_CAPABILITY_BASE_RID __MSABI_LONG(0x000000003)
4636 #define SECURITY_CAPABILITY_APP_RID __MSABI_LONG(0x000000400)
4637 #define SECURITY_BUILTIN_CAPABILITY_RID_COUNT __MSABI_LONG(0x000000002)
4638 #define SECURITY_CAPABILITY_RID_COUNT __MSABI_LONG(0x000000005)
4639 #define SECURITY_PARENT_PACKAGE_RID_COUNT SECURITY_APP_PACKAGE_RID_COUNT
4640 #define SECURITY_CHILD_PACKAGE_RID_COUNT __MSABI_LONG(0x00000000c)
4641 #define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE __MSABI_LONG(0x000000001)
4643 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
4644 #define SECURITY_MANDATORY_UNTRUSTED_RID __MSABI_LONG(0x00000000)
4645 #define SECURITY_MANDATORY_LOW_RID __MSABI_LONG(0x00001000)
4646 #define SECURITY_MANDATORY_MEDIUM_RID __MSABI_LONG(0x00002000)
4647 #define SECURITY_MANDATORY_MEDIUM_PLUS_RID __MSABI_LONG(0x00002100)
4648 #define SECURITY_MANDATORY_HIGH_RID __MSABI_LONG(0x00003000)
4649 #define SECURITY_MANDATORY_SYSTEM_RID __MSABI_LONG(0x00004000)
4650 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID __MSABI_LONG(0x00005000)
4651 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
4653 #define MANDATORY_LEVEL_TO_MANDATORY_RID(ML) (ML * 0x1000)
4655 #define DOMAIN_ALIAS_RID_ADMINS __MSABI_LONG(0x00000220)
4656 #define DOMAIN_ALIAS_RID_USERS __MSABI_LONG(0x00000221)
4657 #define DOMAIN_ALIAS_RID_GUESTS __MSABI_LONG(0x00000222)
4658 #define DOMAIN_ALIAS_RID_POWER_USERS __MSABI_LONG(0x00000223)
4660 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS __MSABI_LONG(0x00000224)
4661 #define DOMAIN_ALIAS_RID_SYSTEM_OPS __MSABI_LONG(0x00000225)
4662 #define DOMAIN_ALIAS_RID_PRINT_OPS __MSABI_LONG(0x00000226)
4663 #define DOMAIN_ALIAS_RID_BACKUP_OPS __MSABI_LONG(0x00000227)
4665 #define DOMAIN_ALIAS_RID_REPLICATOR __MSABI_LONG(0x00000228)
4666 #define DOMAIN_ALIAS_RID_RAS_SERVERS __MSABI_LONG(0x00000229)
4667 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS __MSABI_LONG(0x0000022A)
4668 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS __MSABI_LONG(0x0000022B)
4669 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS __MSABI_LONG(0x0000022C)
4670 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS __MSABI_LONG(0x0000022D)
4672 #define DOMAIN_ALIAS_RID_MONITORING_USERS __MSABI_LONG(0x0000022E)
4673 #define DOMAIN_ALIAS_RID_LOGGING_USERS __MSABI_LONG(0x0000022F)
4674 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS __MSABI_LONG(0x00000230)
4675 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS __MSABI_LONG(0x00000231)
4676 #define DOMAIN_ALIAS_RID_DCOM_USERS __MSABI_LONG(0x00000232)
4677 #define DOMAIN_ALIAS_RID_IUSERS __MSABI_LONG(0x00000238)
4678 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS __MSABI_LONG(0x00000239)
4679 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP __MSABI_LONG(0x0000023B)
4680 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP __MSABI_LONG(0x0000023C)
4681 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP __MSABI_LONG(0x0000023D)
4682 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP __MSABI_LONG(0x0000023E)
4684 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
4686 #define SECURITY_PACKAGE_RID_COUNT __MSABI_LONG(2)
4687 #define SECURITY_CRED_TYPE_RID_COUNT __MSABI_LONG(2)
4688 #define SECURITY_LOGON_IDS_RID_COUNT __MSABI_LONG(3)
4689 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT __MSABI_LONG(3)
4690 #define SECURITY_SERVICE_ID_RID_COUNT __MSABI_LONG(6)
4691 #define SECURITY_APPPOOL_ID_RID_COUNT __MSABI_LONG(6)
4692 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT __MSABI_LONG(6)
4693 #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT __MSABI_LONG(6)
4694 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT __MSABI_LONG(6)
4695 #define SECURITY_WMIHOST_ID_RID_COUNT __MSABI_LONG(6)
4696 #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT __MSABI_LONG(6)
4698 #define SYSTEM_LUID { 0x3e7, 0x0 }
4699 #define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
4700 #define LOCALSERVICE_LUID { 0x3e5, 0x0 }
4701 #define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
4702 #define IUSER_LUID { 0x3e3, 0x0 }
4708 WinCreatorOwnerSid
= 3,
4709 WinCreatorGroupSid
= 4,
4710 WinCreatorOwnerServerSid
= 5,
4711 WinCreatorGroupServerSid
= 6,
4712 WinNtAuthoritySid
= 7,
4716 WinInteractiveSid
= 11,
4718 WinAnonymousSid
= 13,
4720 WinEnterpriseControllersSid
= 15,
4722 WinAuthenticatedUserSid
= 17,
4723 WinRestrictedCodeSid
= 18,
4724 WinTerminalServerSid
= 19,
4725 WinRemoteLogonIdSid
= 20,
4726 WinLogonIdsSid
= 21,
4727 WinLocalSystemSid
= 22,
4728 WinLocalServiceSid
= 23,
4729 WinNetworkServiceSid
= 24,
4730 WinBuiltinDomainSid
= 25,
4731 WinBuiltinAdministratorsSid
= 26,
4732 WinBuiltinUsersSid
= 27,
4733 WinBuiltinGuestsSid
= 28,
4734 WinBuiltinPowerUsersSid
= 29,
4735 WinBuiltinAccountOperatorsSid
= 30,
4736 WinBuiltinSystemOperatorsSid
= 31,
4737 WinBuiltinPrintOperatorsSid
= 32,
4738 WinBuiltinBackupOperatorsSid
= 33,
4739 WinBuiltinReplicatorSid
= 34,
4740 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
4741 WinBuiltinRemoteDesktopUsersSid
= 36,
4742 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
4743 WinAccountAdministratorSid
= 38,
4744 WinAccountGuestSid
= 39,
4745 WinAccountKrbtgtSid
= 40,
4746 WinAccountDomainAdminsSid
= 41,
4747 WinAccountDomainUsersSid
= 42,
4748 WinAccountDomainGuestsSid
= 43,
4749 WinAccountComputersSid
= 44,
4750 WinAccountControllersSid
= 45,
4751 WinAccountCertAdminsSid
= 46,
4752 WinAccountSchemaAdminsSid
= 47,
4753 WinAccountEnterpriseAdminsSid
= 48,
4754 WinAccountPolicyAdminsSid
= 49,
4755 WinAccountRasAndIasServersSid
= 50,
4756 WinNTLMAuthenticationSid
= 51,
4757 WinDigestAuthenticationSid
= 52,
4758 WinSChannelAuthenticationSid
= 53,
4759 WinThisOrganizationSid
= 54,
4760 WinOtherOrganizationSid
= 55,
4761 WinBuiltinIncomingForestTrustBuildersSid
= 56,
4762 WinBuiltinPerfMonitoringUsersSid
= 57,
4763 WinBuiltinPerfLoggingUsersSid
= 58,
4764 WinBuiltinAuthorizationAccessSid
= 59,
4765 WinBuiltinTerminalServerLicenseServersSid
= 60,
4766 WinBuiltinDCOMUsersSid
= 61,
4767 WinBuiltinIUsersSid
= 62,
4769 WinBuiltinCryptoOperatorsSid
= 64,
4770 WinUntrustedLabelSid
= 65,
4771 WinLowLabelSid
= 66,
4772 WinMediumLabelSid
= 67,
4773 WinHighLabelSid
= 68,
4774 WinSystemLabelSid
= 69,
4775 WinWriteRestrictedCodeSid
= 70,
4776 WinCreatorOwnerRightsSid
= 71,
4777 WinCacheablePrincipalsGroupSid
= 72,
4778 WinNonCacheablePrincipalsGroupSid
= 73,
4779 WinEnterpriseReadonlyControllersSid
= 74,
4780 WinAccountReadonlyControllersSid
= 75,
4781 WinBuiltinEventLogReadersGroup
= 76,
4782 WinNewEnterpriseReadonlyControllersSid
= 77,
4783 WinBuiltinCertSvcDComAccessGroup
= 78,
4784 WinMediumPlusLabelSid
= 79,
4785 WinLocalLogonSid
= 80,
4786 WinConsoleLogonSid
= 81,
4787 WinThisOrganizationCertificateSid
= 82,
4788 WinApplicationPackageAuthoritySid
= 83,
4789 WinBuiltinAnyPackageSid
= 84,
4790 WinCapabilityInternetClientSid
= 85,
4791 WinCapabilityInternetClientServerSid
= 86,
4792 WinCapabilityPrivateNetworkClientServerSid
= 87,
4793 WinCapabilityPicturesLibrarySid
= 88,
4794 WinCapabilityVideosLibrarySid
= 89,
4795 WinCapabilityMusicLibrarySid
= 90,
4796 WinCapabilityDocumentsLibrarySid
= 91,
4797 WinCapabilitySharedUserCertificatesSid
= 92,
4798 WinCapabilityEnterpriseAuthenticationSid
= 93,
4799 WinCapabilityRemovableStorageSid
= 94,
4800 WinBuiltinRDSRemoteAccessServersSid
= 95,
4801 WinBuiltinRDSEndpointServersSid
= 96,
4802 WinBuiltinRDSManagementServersSid
= 97,
4803 WinUserModeDriversSid
= 98,
4804 WinBuiltinHyperVAdminsSid
= 99,
4805 WinAccountCloneableControllersSid
= 100,
4806 WinBuiltinAccessControlAssistanceOperatorsSid
= 101,
4807 WinBuiltinRemoteManagementUsersSid
= 102,
4808 WinAuthenticationAuthorityAssertedSid
= 103,
4809 WinAuthenticationServiceAssertedSid
= 104,
4810 WinLocalAccountSid
= 105,
4811 WinLocalAccountAndAdministratorSid
= 106,
4812 WinAccountProtectedUsersSid
= 107,
4813 } WELL_KNOWN_SID_TYPE
;
4819 typedef struct _TOKEN_USER
{
4820 SID_AND_ATTRIBUTES User
;
4821 } TOKEN_USER
, *PTOKEN_USER
;
4827 typedef struct _TOKEN_GROUPS
{
4829 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
4830 } TOKEN_GROUPS
, *PTOKEN_GROUPS
;
4833 * LUID_AND_ATTRIBUTES
4836 typedef union _LARGE_INTEGER
{
4846 } LARGE_INTEGER
, *PLARGE_INTEGER
;
4848 typedef union _ULARGE_INTEGER
{
4858 } ULARGE_INTEGER
, *PULARGE_INTEGER
;
4861 * Locally Unique Identifier
4864 typedef struct _LUID
{
4869 #include <pshpack4.h>
4870 typedef struct _LUID_AND_ATTRIBUTES
{
4873 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
4874 #include <poppack.h>
4880 typedef struct _PRIVILEGE_SET
{
4881 DWORD PrivilegeCount
;
4883 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
4884 } PRIVILEGE_SET
, *PPRIVILEGE_SET
;
4890 typedef struct _TOKEN_PRIVILEGES
{
4891 DWORD PrivilegeCount
;
4892 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
4893 } TOKEN_PRIVILEGES
, *PTOKEN_PRIVILEGES
;
4899 typedef struct _TOKEN_OWNER
{
4901 } TOKEN_OWNER
, *PTOKEN_OWNER
;
4904 * TOKEN_PRIMARY_GROUP
4907 typedef struct _TOKEN_PRIMARY_GROUP
{
4909 } TOKEN_PRIMARY_GROUP
, *PTOKEN_PRIMARY_GROUP
;
4913 * TOKEN_DEFAULT_DACL
4916 typedef struct _TOKEN_DEFAULT_DACL
{
4918 } TOKEN_DEFAULT_DACL
, *PTOKEN_DEFAULT_DACL
;
4924 #define TOKEN_SOURCE_LENGTH 8
4926 typedef struct _TOKEN_SOURCE
{
4927 char SourceName
[TOKEN_SOURCE_LENGTH
];
4928 LUID SourceIdentifier
;
4929 } TOKEN_SOURCE
, *PTOKEN_SOURCE
;
4935 typedef enum tagTOKEN_TYPE
{
4941 * SECURITY_IMPERSONATION_LEVEL
4944 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
4946 SecurityIdentification
,
4947 SecurityImpersonation
,
4949 } SECURITY_IMPERSONATION_LEVEL
, *PSECURITY_IMPERSONATION_LEVEL
;
4951 #define SECURITY_DYNAMIC_TRACKING (TRUE)
4952 #define SECURITY_STATIC_TRACKING (FALSE)
4954 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
,
4955 * PSECURITY_CONTEXT_TRACKING_MODE
;
4957 * Quality of Service
4960 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
4962 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
4963 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
4964 BOOLEAN EffectiveOnly
;
4965 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
4971 #include <pshpack4.h>
4972 typedef struct _TOKEN_STATISTICS
{
4974 LUID AuthenticationId
;
4975 LARGE_INTEGER ExpirationTime
;
4976 TOKEN_TYPE TokenType
;
4977 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
4978 DWORD DynamicCharged
;
4979 DWORD DynamicAvailable
;
4981 DWORD PrivilegeCount
;
4984 #include <poppack.h>
4986 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
{
4989 PSID_AND_ATTRIBUTES Sids
;
4990 DWORD RestrictedSidCount
;
4991 DWORD RestrictedSidLength
;
4992 PSID_AND_ATTRIBUTES RestrictedSids
;
4993 DWORD PrivilegeCount
;
4994 DWORD PrivilegeLength
;
4995 PLUID_AND_ATTRIBUTES Privileges
;
4996 LUID AuthenticationId
;
4997 } TOKEN_GROUPS_AND_PRIVILEGES
, * PTOKEN_GROUPS_AND_PRIVILEGES
;
4999 typedef struct _TOKEN_ORIGIN
{
5000 LUID OriginatingLogonSession
;
5001 } TOKEN_ORIGIN
, * PTOKEN_ORIGIN
;
5003 typedef struct _TOKEN_LINKED_TOKEN
{
5005 } TOKEN_LINKED_TOKEN
, * PTOKEN_LINKED_TOKEN
;
5007 typedef struct _TOKEN_ELEVATION
{
5008 DWORD TokenIsElevated
;
5009 } TOKEN_ELEVATION
, * PTOKEN_ELEVATION
;
5011 typedef struct _TOKEN_MANDATORY_LABEL
{
5012 SID_AND_ATTRIBUTES Label
;
5013 } TOKEN_MANDATORY_LABEL
, * PTOKEN_MANDATORY_LABEL
;
5015 #define TOKEN_MANDATORY_POLICY_OFF 0x0
5016 #define TOKEN_MANDATORY_POLICY_NO_WRITEUP 0x1
5017 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
5018 #define TOKEN_MANDATORY_POLICY_VALID_MASK 0x3
5020 typedef struct _TOKEN_MANDATORY_POLICY
{
5022 } TOKEN_MANDATORY_POLICY
, *PTOKEN_MANDATORY_POLICY
;
5024 typedef struct _TOKEN_APPCONTAINER_INFORMATION
{
5025 PSID TokenAppContainer
;
5026 } TOKEN_APPCONTAINER_INFORMATION
, * PTOKEN_APPCONTAINER_INFORMATION
;
5028 #define POLICY_AUDIT_SUBCATEGORY_COUNT 53
5030 typedef struct _TOKEN_AUDIT_POLICY
{
5031 BYTE PerUserPolicy
[((POLICY_AUDIT_SUBCATEGORY_COUNT
) >> 1) + 1];
5032 } TOKEN_AUDIT_POLICY
, *PTOKEN_AUDIT_POLICY
;
5034 typedef struct _TOKEN_ACCESS_INFORMATION
{
5035 PSID_AND_ATTRIBUTES_HASH SidHash
;
5036 PSID_AND_ATTRIBUTES_HASH RestrictedSidHash
;
5037 PTOKEN_PRIVILEGES Privileges
;
5038 LUID AuthenticationId
;
5039 TOKEN_TYPE TokenType
;
5040 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
5041 TOKEN_MANDATORY_POLICY MandatoryPolicy
;
5043 } TOKEN_ACCESS_INFORMATION
, *PTOKEN_ACCESS_INFORMATION
;
5045 typedef struct _TOKEN_CONTROL
{
5047 LUID AuthenticationId
;
5049 TOKEN_SOURCE TokenSource
;
5050 } TOKEN_CONTROL
, *PTOKEN_CONTROL
;
5056 /* ACEs, directly starting after an ACL */
5057 typedef struct _ACE_HEADER
{
5061 } ACE_HEADER
,*PACE_HEADER
;
5064 #define ACCESS_MIN_MS_ACE_TYPE 0x0
5065 #define ACCESS_ALLOWED_ACE_TYPE 0x0
5066 #define ACCESS_DENIED_ACE_TYPE 0x1
5067 #define SYSTEM_AUDIT_ACE_TYPE 0x2
5068 #define SYSTEM_ALARM_ACE_TYPE 0x3
5069 #define ACCESS_MAX_MS_V2_ACE_TYPE 0x3
5070 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE 0x4
5071 #define ACCESS_MAX_MS_V3_ACE_TYPE 0x4
5072 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE 0x5
5073 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE 0x5
5074 #define ACCESS_DENIED_OBJECT_ACE_TYPE 0x6
5075 #define ACCESS_AUDIT_OBJECT_ACE_TYPE 0x7
5076 #define ACCESS_ALARM_OBJECT_ACE_TYPE 0x8
5077 #define ACCESS_MAX_MS_V4_ACE_TYPE 0x8
5078 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE 0x9
5079 #define ACCESS_DENIED_CALLBACK_ACE_TYPE 0xa
5080 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE 0xb
5081 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE 0xc
5082 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE 0xd
5083 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE 0xe
5084 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE 0xf
5085 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE 0x10
5086 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11
5087 #define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE 0x12
5088 #define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE 0x13
5089 #define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE 0x14
5090 #define ACCESS_MAX_MS_V5_ACE_TYPE 0x14
5092 /* inherit AceFlags */
5093 #define OBJECT_INHERIT_ACE 0x01
5094 #define CONTAINER_INHERIT_ACE 0x02
5095 #define NO_PROPAGATE_INHERIT_ACE 0x04
5096 #define INHERIT_ONLY_ACE 0x08
5097 #define INHERITED_ACE 0x10
5098 #define VALID_INHERIT_FLAGS 0x1F
5100 /* AceFlags mask for what events we (should) audit */
5101 #define SUCCESSFUL_ACCESS_ACE_FLAG 0x40
5102 #define FAILED_ACCESS_ACE_FLAG 0x80
5104 /* different ACEs depending on AceType
5105 * SidStart marks the begin of a SID
5106 * so the thing finally looks like this:
5111 typedef struct _ACCESS_ALLOWED_ACE
{
5115 } ACCESS_ALLOWED_ACE
,*PACCESS_ALLOWED_ACE
;
5117 typedef struct _ACCESS_DENIED_ACE
{
5121 } ACCESS_DENIED_ACE
,*PACCESS_DENIED_ACE
;
5123 typedef struct _SYSTEM_AUDIT_ACE
{
5127 } SYSTEM_AUDIT_ACE
,*PSYSTEM_AUDIT_ACE
;
5129 typedef struct _SYSTEM_ALARM_ACE
{
5133 } SYSTEM_ALARM_ACE
,*PSYSTEM_ALARM_ACE
;
5135 typedef struct _SYSTEM_MANDATORY_LABEL_ACE
{
5139 } SYSTEM_MANDATORY_LABEL_ACE
,*PSYSTEM_MANDATORY_LABEL_ACE
;
5141 typedef struct _SYSTEM_PROCESS_TRUST_LABEL_ACE
{
5145 } SYSTEM_PROCESS_TRUST_LABEL_ACE
, *PSYSTEM_PROCESS_TRUST_LABEL_ACE
;
5147 typedef struct _ACCESS_ALLOWED_OBJECT_ACE
{
5152 GUID InheritedObjectType
;
5154 } ACCESS_ALLOWED_OBJECT_ACE
, *PACCESS_ALLOWED_OBJECT_ACE
;
5156 typedef struct _ACCESS_DENIED_OBJECT_ACE
{
5161 GUID InheritedObjectType
;
5163 } ACCESS_DENIED_OBJECT_ACE
, *PACCESS_DENIED_OBJECT_ACE
;
5165 typedef struct _SYSTEM_AUDIT_OBJECT_ACE
{
5170 GUID InheritedObjectType
;
5172 } SYSTEM_AUDIT_OBJECT_ACE
, *PSYSTEM_AUDIT_OBJECT_ACE
;
5174 typedef struct _SYSTEM_ALARM_OBJECT_ACE
{
5179 GUID InheritedObjectType
;
5181 } SYSTEM_ALARM_OBJECT_ACE
, *PSYSTEM_ALARM_OBJECT_aCE
;
5183 typedef struct _ACCESS_ALLOWED_CALLBACK_ACE
{
5187 } ACCESS_ALLOWED_CALLBACK_ACE
,*PACCESS_ALLOWED_CALLBACK_ACE
;
5189 typedef struct _ACCESS_DENIED_CALLBACK_ACE
{
5193 } ACCESS_DENIED_CALLBACK_ACE
,*PACCESS_DENIED_CALLBACK_ACE
;
5195 typedef struct _SYSTEM_AUDIT_CALLBACK_ACE
{
5199 } SYSTEM_AUDIT_CALLBACK_ACE
,*PSYSTEM_AUDIT_CALLBACK_ACE
;
5201 typedef struct _SYSTEM_ALARM_CALLBACK_ACE
{
5205 } SYSTEM_ALARM_CALLBACK_ACE
,*PSYSTEM_ALARM_CALLBACK_ACE
;
5207 typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
{
5212 GUID InheritedObjectType
;
5214 } ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
, *PACCESS_ALLOWED_CALLBACK_OBJECT_ACE
;
5216 typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE
{
5221 GUID InheritedObjectType
;
5223 } ACCESS_DENIED_CALLBACK_OBJECT_ACE
, *PACCESS_DENIED_CALLBACK_OBJECT_ACE
;
5225 typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
{
5230 GUID InheritedObjectType
;
5232 } SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
, *PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE
;
5234 typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE
{
5239 GUID InheritedObjectType
;
5241 } SYSTEM_ALARM_CALLBACK_OBJECT_ACE
, *PSYSTEM_ALARM_CALLBACK_OBJECT_ACE
;
5243 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
5244 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
5245 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
5246 #define SYSTEM_MANDATORY_LABEL_VALID_MASK 0x7
5247 #define SYSTEM_PROCESS_TRUST_LABEL_VALID_MASK 0x00ffffff
5248 #define SYSTEM_PROCESS_TRUST_NOCONSTRAINT_MASK 0xffffffff
5250 typedef enum tagSID_NAME_USE
{
5255 SidTypeWellKnownGroup
,
5256 SidTypeDeletedAccount
,
5259 } SID_NAME_USE
,*PSID_NAME_USE
;
5261 #define ACE_OBJECT_TYPE_PRESENT 0x1
5262 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
5266 /* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */
5268 #define DELETE 0x00010000
5269 #define READ_CONTROL 0x00020000
5270 #define WRITE_DAC 0x00040000
5271 #define WRITE_OWNER 0x00080000
5272 #define SYNCHRONIZE 0x00100000
5273 #define STANDARD_RIGHTS_REQUIRED 0x000f0000
5275 #define STANDARD_RIGHTS_READ READ_CONTROL
5276 #define STANDARD_RIGHTS_WRITE READ_CONTROL
5277 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
5279 #define STANDARD_RIGHTS_ALL 0x001f0000
5281 #define SPECIFIC_RIGHTS_ALL 0x0000ffff
5283 #define GENERIC_READ 0x80000000
5284 #define GENERIC_WRITE 0x40000000
5285 #define GENERIC_EXECUTE 0x20000000
5286 #define GENERIC_ALL 0x10000000
5288 #define MAXIMUM_ALLOWED 0x02000000
5289 #define ACCESS_SYSTEM_SECURITY 0x01000000
5291 #define EVENT_QUERY_STATE 0x0001
5292 #define EVENT_MODIFY_STATE 0x0002
5293 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
5295 #define SEMAPHORE_QUERY_STATE 0x0001
5296 #define SEMAPHORE_MODIFY_STATE 0x0002
5297 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
5299 #define MUTANT_QUERY_STATE 0x0001
5300 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
5302 #define JOB_OBJECT_ASSIGN_PROCESS 0x0001
5303 #define JOB_OBJECT_SET_ATTRIBUTES 0x0002
5304 #define JOB_OBJECT_QUERY 0x0004
5305 #define JOB_OBJECT_TERMINATE 0x0008
5306 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x0010
5307 #define JOB_OBJECT_IMPERSONATE 0x0020
5308 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3f)
5310 #define TIMER_QUERY_STATE 0x0001
5311 #define TIMER_MODIFY_STATE 0x0002
5312 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
5314 #define PROCESS_TERMINATE 0x0001
5315 #define PROCESS_CREATE_THREAD 0x0002
5316 #define PROCESS_VM_OPERATION 0x0008
5317 #define PROCESS_VM_READ 0x0010
5318 #define PROCESS_VM_WRITE 0x0020
5319 #define PROCESS_DUP_HANDLE 0x0040
5320 #define PROCESS_CREATE_PROCESS 0x0080
5321 #define PROCESS_SET_QUOTA 0x0100
5322 #define PROCESS_SET_INFORMATION 0x0200
5323 #define PROCESS_QUERY_INFORMATION 0x0400
5324 #define PROCESS_SUSPEND_RESUME 0x0800
5325 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
5326 #define PROCESS_SET_LIMITED_INFORMATION 0x2000
5327 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff)
5329 #define THREAD_TERMINATE 0x0001
5330 #define THREAD_SUSPEND_RESUME 0x0002
5331 #define THREAD_GET_CONTEXT 0x0008
5332 #define THREAD_SET_CONTEXT 0x0010
5333 #define THREAD_SET_INFORMATION 0x0020
5334 #define THREAD_QUERY_INFORMATION 0x0040
5335 #define THREAD_SET_THREAD_TOKEN 0x0080
5336 #define THREAD_IMPERSONATE 0x0100
5337 #define THREAD_DIRECT_IMPERSONATION 0x0200
5338 #define THREAD_SET_LIMITED_INFORMATION 0x0400
5339 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
5340 #define THREAD_RESUME 0x1000
5341 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff)
5343 #define THREAD_BASE_PRIORITY_LOWRT 15
5344 #define THREAD_BASE_PRIORITY_MAX 2
5345 #define THREAD_BASE_PRIORITY_MIN -2
5346 #define THREAD_BASE_PRIORITY_IDLE -15
5348 typedef struct _QUOTA_LIMITS
{
5349 SIZE_T PagedPoolLimit
;
5350 SIZE_T NonPagedPoolLimit
;
5351 SIZE_T MinimumWorkingSetSize
;
5352 SIZE_T MaximumWorkingSetSize
;
5353 SIZE_T PagefileLimit
;
5354 LARGE_INTEGER TimeLimit
;
5355 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
5357 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
5358 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
5359 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
5360 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
5361 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
5363 typedef union _RATE_QUOTA_LIMIT
{
5366 DWORD RatePercent
:7;
5369 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
5371 typedef struct _QUOTA_LIMITS_EX
{
5372 SIZE_T PagedPoolLimit
;
5373 SIZE_T NonPagedPoolLimit
;
5374 SIZE_T MinimumWorkingSetSize
;
5375 SIZE_T MaximumWorkingSetSize
;
5376 SIZE_T PagefileLimit
;
5377 LARGE_INTEGER TimeLimit
;
5378 SIZE_T WorkingSetLimit
;
5383 RATE_QUOTA_LIMIT CpuRateLimit
;
5384 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
5386 #define SECTION_QUERY 0x0001
5387 #define SECTION_MAP_WRITE 0x0002
5388 #define SECTION_MAP_READ 0x0004
5389 #define SECTION_MAP_EXECUTE 0x0008
5390 #define SECTION_EXTEND_SIZE 0x0010
5391 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
5392 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x01f)
5394 #define FILE_READ_DATA 0x0001 /* file & pipe */
5395 #define FILE_LIST_DIRECTORY 0x0001 /* directory */
5396 #define FILE_WRITE_DATA 0x0002 /* file & pipe */
5397 #define FILE_ADD_FILE 0x0002 /* directory */
5398 #define FILE_APPEND_DATA 0x0004 /* file */
5399 #define FILE_ADD_SUBDIRECTORY 0x0004 /* directory */
5400 #define FILE_CREATE_PIPE_INSTANCE 0x0004 /* named pipe */
5401 #define FILE_READ_EA 0x0008 /* file & directory */
5402 #define FILE_READ_PROPERTIES FILE_READ_EA
5403 #define FILE_WRITE_EA 0x0010 /* file & directory */
5404 #define FILE_WRITE_PROPERTIES FILE_WRITE_EA
5405 #define FILE_EXECUTE 0x0020 /* file */
5406 #define FILE_TRAVERSE 0x0020 /* directory */
5407 #define FILE_DELETE_CHILD 0x0040 /* directory */
5408 #define FILE_READ_ATTRIBUTES 0x0080 /* all */
5409 #define FILE_WRITE_ATTRIBUTES 0x0100 /* all */
5410 #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
5412 #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | \
5413 FILE_READ_ATTRIBUTES | FILE_READ_EA | \
5415 #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \
5416 FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \
5417 FILE_APPEND_DATA | SYNCHRONIZE)
5418 #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
5419 FILE_READ_ATTRIBUTES | SYNCHRONIZE)
5421 #define DUPLICATE_CLOSE_SOURCE 0x00000001
5422 #define DUPLICATE_SAME_ACCESS 0x00000002
5423 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
5425 #define DUPLICATE_MAKE_GLOBAL 0x80000000 /* Not a Windows flag */
5428 /* File attribute flags */
5429 #define FILE_SHARE_READ 0x00000001
5430 #define FILE_SHARE_WRITE 0x00000002
5431 #define FILE_SHARE_DELETE 0x00000004
5433 #define FILE_ATTRIBUTE_READONLY 0x00000001
5434 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
5435 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
5436 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
5437 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
5438 #define FILE_ATTRIBUTE_DEVICE 0x00000040
5439 #define FILE_ATTRIBUTE_NORMAL 0x00000080
5440 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
5441 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
5442 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
5443 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
5444 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
5445 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
5446 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
5447 #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000
5448 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
5449 #define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000
5450 #define FILE_ATTRIBUTE_EA 0x00040000
5452 /* File notification flags */
5453 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
5454 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
5455 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
5456 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
5457 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
5458 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
5459 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
5460 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
5461 #define FILE_NOTIFY_CHANGE_EA 0x00000080
5462 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
5463 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
5464 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
5465 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
5467 #define FILE_ACTION_ADDED 0x00000001
5468 #define FILE_ACTION_REMOVED 0x00000002
5469 #define FILE_ACTION_MODIFIED 0x00000003
5470 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
5471 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
5472 #define FILE_ACTION_ADDED_STREAM 0x00000006
5473 #define FILE_ACTION_REMOVED_STREAM 0x00000007
5474 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
5475 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
5476 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000a
5477 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000b
5479 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
5480 #define FILE_CASE_PRESERVED_NAMES 0x00000002
5481 #define FILE_UNICODE_ON_DISK 0x00000004
5482 #define FILE_PERSISTENT_ACLS 0x00000008
5483 #define FILE_FILE_COMPRESSION 0x00000010
5484 #define FILE_VOLUME_QUOTAS 0x00000020
5485 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
5486 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
5487 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
5488 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
5489 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
5490 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
5491 #define FILE_NAMED_STREAMS 0x00040000
5492 #define FILE_READ_ONLY_VOLUME 0x00080000
5493 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
5494 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
5495 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
5496 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
5497 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
5498 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
5499 #define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000
5500 #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000
5501 #define FILE_SUPPORTS_SPARSE_VDL 0x10000000
5502 #define FILE_DAX_VOLUME 0x20000000
5503 #define FILE_SUPPORTS_GHOSTING 0x40000000
5505 /* File alignments (NT) */
5506 #define FILE_BYTE_ALIGNMENT 0x00000000
5507 #define FILE_WORD_ALIGNMENT 0x00000001
5508 #define FILE_LONG_ALIGNMENT 0x00000003
5509 #define FILE_QUAD_ALIGNMENT 0x00000007
5510 #define FILE_OCTA_ALIGNMENT 0x0000000f
5511 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
5512 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
5513 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
5514 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
5515 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
5517 #define MAILSLOT_NO_MESSAGE ((DWORD)-1)
5518 #define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
5520 #define REG_NONE 0 /* no type */
5521 #define REG_SZ 1 /* string type (ASCII) */
5522 #define REG_EXPAND_SZ 2 /* string, includes %ENVVAR% (expanded by caller) (ASCII) */
5523 #define REG_BINARY 3 /* binary format, callerspecific */
5524 /* YES, REG_DWORD == REG_DWORD_LITTLE_ENDIAN */
5525 #define REG_DWORD 4 /* DWORD in little endian format */
5526 #define REG_DWORD_LITTLE_ENDIAN 4 /* DWORD in little endian format */
5527 #define REG_DWORD_BIG_ENDIAN 5 /* DWORD in big endian format */
5528 #define REG_LINK 6 /* symbolic link (UNICODE) */
5529 #define REG_MULTI_SZ 7 /* multiple strings, delimited by \0, terminated by \0\0 (ASCII) */
5530 #define REG_RESOURCE_LIST 8 /* resource list? huh? */
5531 #define REG_FULL_RESOURCE_DESCRIPTOR 9 /* full resource descriptor? huh? */
5532 #define REG_RESOURCE_REQUIREMENTS_LIST 10
5533 #define REG_QWORD 11 /* QWORD in little endian format */
5534 #define REG_QWORD_LITTLE_ENDIAN 11 /* QWORD in little endian format */
5536 /* ----------------------------- begin power management --------------------- */
5538 typedef enum _LATENCY_TIME
{
5541 } LATENCY_TIME
, *PLATENCY_TIME
;
5543 #define DISCHARGE_POLICY_CRITICAL 0
5544 #define DISCHARGE_POLICY_LOW 1
5545 #define NUM_DISCHARGE_POLICIES 4
5547 #define PO_THROTTLE_NONE 0
5548 #define PO_THROTTLE_CONSTANT 1
5549 #define PO_THROTTLE_DEGRADE 2
5550 #define PO_THROTTLE_ADAPTIVE 3
5552 typedef enum _POWER_ACTION
{
5553 PowerActionNone
= 0,
5554 PowerActionReserved
,
5556 PowerActionHibernate
,
5557 PowerActionShutdown
,
5558 PowerActionShutdownReset
,
5559 PowerActionShutdownOff
,
5560 PowerActionWarmEject
5564 typedef enum _POWER_PLATFORM_ROLE
{
5565 PlatformRoleUnspecified
,
5566 PlatformRoleDesktop
,
5568 PlatformRoleWorkstation
,
5569 PlatformRoleEnterpriseServer
,
5570 PlatformRoleSOHOServer
,
5571 PlatformRoleAppliancePC
,
5572 PlatformRolePerformanceServer
,
5575 } POWER_PLATFORM_ROLE
, *PPOWER_PLATFORM_ROLE
;
5577 typedef enum _SYSTEM_POWER_STATE
{
5578 PowerSystemUnspecified
= 0,
5579 PowerSystemWorking
= 1,
5580 PowerSystemSleeping1
= 2,
5581 PowerSystemSleeping2
= 3,
5582 PowerSystemSleeping3
= 4,
5583 PowerSystemHibernate
= 5,
5584 PowerSystemShutdown
= 6,
5585 PowerSystemMaximum
= 7
5586 } SYSTEM_POWER_STATE
,
5587 *PSYSTEM_POWER_STATE
;
5589 typedef enum _DEVICE_POWER_STATE
{
5590 PowerDeviceUnspecified
,
5596 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
5598 typedef enum _POWER_INFORMATION_LEVEL
{
5599 SystemPowerPolicyAc
,
5600 SystemPowerPolicyDc
,
5601 VerifySystemPolicyAc
,
5602 VerifySystemPolicyDc
,
5603 SystemPowerCapabilities
,
5605 SystemPowerStateHandler
,
5606 ProcessorStateHandler
,
5607 SystemPowerPolicyCurrent
,
5608 AdministratorPowerPolicy
,
5609 SystemReserveHiberFile
,
5610 ProcessorInformation
,
5611 SystemPowerInformation
,
5612 ProcessorStateHandler2
,
5615 SystemExecutionState
,
5616 SystemPowerStateNotifyHandler
,
5617 ProcessorPowerPolicyAc
,
5618 ProcessorPowerPolicyDc
,
5619 VerifyProcessorPowerPolicyAc
,
5620 VerifyProcessorPowerPolicyDc
,
5621 ProcessorPowerPolicyCurrent
5622 } POWER_INFORMATION_LEVEL
;
5624 typedef struct _ADMINISTRATOR_POWER_POLICY
{
5625 SYSTEM_POWER_STATE MinSleep
;
5626 SYSTEM_POWER_STATE MaxSleep
;
5627 ULONG MinVideoTimeout
;
5628 ULONG MaxVideoTimeout
;
5629 ULONG MinSpindownTimeout
;
5630 ULONG MaxSpindownTimeout
;
5631 } ADMINISTRATOR_POWER_POLICY
, *PADMINISTRATOR_POWER_POLICY
;
5636 } BATTERY_REPORTING_SCALE
,
5637 *PBATTERY_REPORTING_SCALE
;
5640 POWER_ACTION Action
;
5643 } POWER_ACTION_POLICY
,
5644 *PPOWER_ACTION_POLICY
;
5646 typedef struct _PROCESSOR_POWER_INFORMATION
{
5652 ULONG CurrentIdleState
;
5653 } PROCESSOR_POWER_INFORMATION
,
5654 *PPROCESSOR_POWER_INFORMATION
;
5656 typedef struct _PROCESSOR_POWER_POLICY_INFO
{
5660 UCHAR DemotePercent
;
5661 UCHAR PromotePercent
;
5663 ULONG AllowDemotion
:1;
5664 ULONG AllowPromotion
:1;
5666 } PROCESSOR_POWER_POLICY_INFO
,
5667 *PPROCESSOR_POWER_POLICY_INFO
;
5669 typedef struct _PROCESSOR_POWER_POLICY
{
5671 BYTE DynamicThrottle
;
5673 DWORD DisableCStates
:1;
5676 PROCESSOR_POWER_POLICY_INFO Policy
[3];
5677 } PROCESSOR_POWER_POLICY
,
5678 *PPROCESSOR_POWER_POLICY
;
5682 BOOLEAN BatteryPresent
;
5684 BOOLEAN Discharging
;
5688 ULONG RemainingCapacity
;
5690 ULONG EstimatedTime
;
5691 ULONG DefaultAlert1
;
5692 ULONG DefaultAlert2
;
5693 } SYSTEM_BATTERY_STATE
,
5694 *PSYSTEM_BATTERY_STATE
;
5697 BOOLEAN PowerButtonPresent
;
5698 BOOLEAN SleepButtonPresent
;
5705 BOOLEAN HiberFilePresent
;
5707 BOOLEAN VideoDimPresent
;
5710 BOOLEAN ThermalControl
;
5711 BOOLEAN ProcessorThrottle
;
5712 UCHAR ProcessorMinThrottle
;
5713 UCHAR ProcessorMaxThrottle
;
5715 BOOLEAN DiskSpinDown
;
5717 BOOLEAN SystemBatteriesPresent
;
5718 BOOLEAN BatteriesAreShortTerm
;
5719 BATTERY_REPORTING_SCALE BatteryScale
[3];
5720 SYSTEM_POWER_STATE AcOnLineWake
;
5721 SYSTEM_POWER_STATE SoftLidWake
;
5722 SYSTEM_POWER_STATE RtcWake
;
5723 SYSTEM_POWER_STATE MinDeviceWakeState
;
5724 SYSTEM_POWER_STATE DefaultLowLatencyWake
;
5725 } SYSTEM_POWER_CAPABILITIES
,
5726 *PSYSTEM_POWER_CAPABILITIES
;
5728 typedef struct _SYSTEM_POWER_INFORMATION
{
5729 ULONG MaxIdlenessAllowed
;
5731 ULONG TimeRemaining
;
5733 } SYSTEM_POWER_INFORMATION
,
5734 *PSYSTEM_POWER_INFORMATION
;
5736 typedef struct _SYSTEM_POWER_LEVEL
{
5740 POWER_ACTION_POLICY PowerPolicy
;
5741 SYSTEM_POWER_STATE MinSystemState
;
5742 } SYSTEM_POWER_LEVEL
,
5743 *PSYSTEM_POWER_LEVEL
;
5745 typedef struct _SYSTEM_POWER_POLICY
{
5747 POWER_ACTION_POLICY PowerButton
;
5748 POWER_ACTION_POLICY SleepButton
;
5749 POWER_ACTION_POLICY LidClose
;
5750 SYSTEM_POWER_STATE LidOpenWake
;
5752 POWER_ACTION_POLICY Idle
;
5754 UCHAR IdleSensitivity
;
5755 UCHAR DynamicThrottle
;
5757 SYSTEM_POWER_STATE MinSleep
;
5758 SYSTEM_POWER_STATE MaxSleep
;
5759 SYSTEM_POWER_STATE ReducedLatencySleep
;
5760 ULONG WinLogonFlags
;
5762 ULONG DozeS4Timeout
;
5763 ULONG BroadcastCapacityResolution
;
5764 SYSTEM_POWER_LEVEL DischargePolicy
[NUM_DISCHARGE_POLICIES
];
5766 BOOLEAN VideoDimDisplay
;
5767 ULONG VideoReserved
[3];
5768 ULONG SpindownTimeout
;
5769 BOOLEAN OptimizeForPower
;
5770 UCHAR FanThrottleTolerance
;
5771 UCHAR ForcedThrottle
;
5773 POWER_ACTION_POLICY OverThrottled
;
5774 } SYSTEM_POWER_POLICY
,
5775 *PSYSTEM_POWER_POLICY
;
5777 typedef enum _POWER_REQUEST_TYPE
5779 PowerRequestDisplayRequired
,
5780 PowerRequestSystemRequired
,
5781 PowerRequestAwayModeRequired
5782 } POWER_REQUEST_TYPE
, *PPOWER_REQUEST_TYPE
;
5784 #define POWER_REQUEST_CONTEXT_VERSION 0
5786 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
5787 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
5789 typedef union _FILE_SEGMENT_ELEMENT
{
5791 ULONGLONG Alignment
;
5792 } FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
5794 typedef struct _FILE_NOTIFY_INFORMATION
{
5795 DWORD NextEntryOffset
;
5797 DWORD FileNameLength
;
5799 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
5801 /* ----------------------------- begin tape storage --------------------- */
5803 #define TAPE_FIXED_PARTITIONS 0
5804 #define TAPE_SELECT_PARTITIONS 1
5805 #define TAPE_INITIATOR_PARTITIONS 2
5806 #define TAPE_ERASE_SHORT 0
5807 #define TAPE_ERASE_LONG 1
5809 #define TAPE_UNLOAD 1
5810 #define TAPE_TENSION 2
5812 #define TAPE_UNLOCK 4
5813 #define TAPE_FORMAT 5
5814 #define TAPE_SETMARKS 0
5815 #define TAPE_FILEMARKS 1
5816 #define TAPE_SHORT_FILEMARKS 2
5817 #define TAPE_LONG_FILEMARKS 3
5818 #define TAPE_REWIND 0
5819 #define TAPE_ABSOLUTE_BLOCK 1
5820 #define TAPE_LOGICAL_BLOCK 2
5821 #define TAPE_PSEUDO_LOGICAL_BLOCK 3
5822 #define TAPE_SPACE_END_OF_DATA 4
5823 #define TAPE_SPACE_RELATIVE_BLOCKS 5
5824 #define TAPE_SPACE_FILEMARKS 6
5825 #define TAPE_SPACE_SEQUENTIAL_FMKS 7
5826 #define TAPE_SPACE_SETMARKS 8
5827 #define TAPE_SPACE_SEQUENTIAL_SMKS 9
5829 typedef struct _TAPE_CREATE_PARTITION
{
5833 } TAPE_CREATE_PARTITION
, *PTAPE_CREATE_PARTITION
;
5835 typedef struct _TAPE_ERASE
{
5838 } TAPE_ERASE
, *PTAPE_ERASE
;
5840 typedef struct _TAPE_PREPARE
{
5843 } TAPE_PREPARE
, *PTAPE_PREPARE
;
5845 typedef struct _TAPE_SET_DRIVE_PARAMETERS
{
5847 BOOLEAN Compression
;
5848 BOOLEAN DataPadding
;
5849 BOOLEAN ReportSetmarks
;
5850 ULONG EOTWarningZoneSize
;
5851 } TAPE_SET_DRIVE_PARAMETERS
, *PTAPE_SET_DRIVE_PARAMETERS
;
5853 typedef struct _TAPE_SET_MEDIA_PARAMETERS
{
5855 } TAPE_SET_MEDIA_PARAMETERS
, *PTAPE_SET_MEDIA_PARAMETERS
;
5857 typedef struct _TAPE_WRITE_MARKS
{
5861 } TAPE_WRITE_MARKS
, *PTAPE_WRITE_MARKS
;
5863 typedef struct _TAPE_GET_POSITION
{
5868 } TAPE_GET_POSITION
, *PTAPE_GET_POSITION
;
5870 typedef struct _TAPE_SET_POSITION
{
5873 LARGE_INTEGER Offset
;
5875 } TAPE_SET_POSITION
, *PTAPE_SET_POSITION
;
5877 typedef struct _TAPE_GET_DRIVE_PARAMETERS
{
5879 BOOLEAN Compression
;
5880 BOOLEAN DataPadding
;
5881 BOOLEAN ReportSetmarks
;
5882 DWORD DefaultBlockSize
;
5883 DWORD MaximumBlockSize
;
5884 DWORD MinimumBlockSize
;
5885 DWORD MaximumPartitionCount
;
5888 DWORD EOTWarningZoneSize
;
5889 } TAPE_GET_DRIVE_PARAMETERS
, *PTAPE_GET_DRIVE_PARAMETERS
;
5891 typedef struct _TAPE_GET_MEDIA_PARAMETERS
{
5892 LARGE_INTEGER Capacity
;
5893 LARGE_INTEGER Remaining
;
5895 DWORD PartitionCount
;
5896 BOOLEAN WriteProtected
;
5897 } TAPE_GET_MEDIA_PARAMETERS
, *PTAPE_GET_MEDIA_PARAMETERS
;
5899 /* ----------------------------- begin registry ----------------------------- */
5901 /* Registry security values */
5902 #define OWNER_SECURITY_INFORMATION 0x00000001
5903 #define GROUP_SECURITY_INFORMATION 0x00000002
5904 #define DACL_SECURITY_INFORMATION 0x00000004
5905 #define SACL_SECURITY_INFORMATION 0x00000008
5906 #define LABEL_SECURITY_INFORMATION 0x00000010
5908 #define REG_OPTION_RESERVED 0x00000000
5909 #define REG_OPTION_NON_VOLATILE 0x00000000
5910 #define REG_OPTION_VOLATILE 0x00000001
5911 #define REG_OPTION_CREATE_LINK 0x00000002
5912 #define REG_OPTION_BACKUP_RESTORE 0x00000004 /* FIXME */
5913 #define REG_OPTION_OPEN_LINK 0x00000008
5914 #define REG_LEGAL_OPTION (REG_OPTION_RESERVED | \
5915 REG_OPTION_NON_VOLATILE | \
5916 REG_OPTION_VOLATILE | \
5917 REG_OPTION_CREATE_LINK | \
5918 REG_OPTION_BACKUP_RESTORE | \
5919 REG_OPTION_OPEN_LINK)
5922 #define REG_CREATED_NEW_KEY 0x00000001
5923 #define REG_OPENED_EXISTING_KEY 0x00000002
5925 /* For RegNotifyChangeKeyValue */
5926 #define REG_NOTIFY_CHANGE_NAME 0x01
5927 #define REG_NOTIFY_CHANGE_ATTRIBUTES 0x02
5928 #define REG_NOTIFY_CHANGE_LAST_SET 0x04
5929 #define REG_NOTIFY_CHANGE_SECURITY 0x08
5930 #define REG_NOTIFY_THREAD_AGNOSTIC 0x10000000
5932 #define KEY_QUERY_VALUE 0x00000001
5933 #define KEY_SET_VALUE 0x00000002
5934 #define KEY_CREATE_SUB_KEY 0x00000004
5935 #define KEY_ENUMERATE_SUB_KEYS 0x00000008
5936 #define KEY_NOTIFY 0x00000010
5937 #define KEY_CREATE_LINK 0x00000020
5938 #define KEY_WOW64_64KEY 0x00000100
5939 #define KEY_WOW64_32KEY 0x00000200
5940 #define KEY_WOW64_RES 0x00000300
5942 /* for RegKeyRestore flags */
5943 #define REG_WHOLE_HIVE_VOLATILE 0x00000001
5944 #define REG_REFRESH_HIVE 0x00000002
5945 #define REG_NO_LAZY_FLUSH 0x00000004
5946 #define REG_FORCE_RESTORE 0x00000008
5947 #define REG_APP_HIVE 0x00000010
5948 #define REG_PROCESS_PRIVATE 0x00000020
5950 #define KEY_READ ((STANDARD_RIGHTS_READ| \
5952 KEY_ENUMERATE_SUB_KEYS| \
5956 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE| \
5958 KEY_CREATE_SUB_KEY) \
5961 #define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE))
5962 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL| \
5965 KEY_CREATE_SUB_KEY| \
5966 KEY_ENUMERATE_SUB_KEYS| \
5971 /* ------------------------------ end registry ------------------------------ */
5973 #define DEVICEFAMILYINFOENUM_UAP 0x00
5974 #define DEVICEFAMILYINFOENUM_WINDOWS_8X 0x01
5975 #define DEVICEFAMILYINFOENUM_WINDOWS_PHONE_8X 0x02
5976 #define DEVICEFAMILYINFOENUM_DESKTOP 0x03
5977 #define DEVICEFAMILYINFOENUM_MOBILE 0x04
5978 #define DEVICEFAMILYINFOENUM_XBOX 0x05
5979 #define DEVICEFAMILYINFOENUM_TEAM 0x06
5980 #define DEVICEFAMILYINFOENUM_IOT 0x07
5981 #define DEVICEFAMILYINFOENUM_IOT_HEADLESS 0x08
5982 #define DEVICEFAMILYINFOENUM_SERVER 0x09
5983 #define DEVICEFAMILYINFOENUM_HOLOGRAPHIC 0x0A
5984 #define DEVICEFAMILYINFOENUM_XBOXSRA 0x0B
5985 #define DEVICEFAMILYINFOENUM_XBOXERA 0x0C
5986 #define DEVICEFAMILYINFOENUM_SERVER_NANO 0x0D
5987 #define DEVICEFAMILYINFOENUM_8828080 0x0E
5988 #define DEVICEFAMILYINFOENUM_7067329 0x0F
5989 #define DEVICEFAMILYINFOENUM_WINDOWS_CORE 0x10
5990 #define DEVICEFAMILYINFOENUM_WINDOWS_CORE_HEADLESS 0x11
5991 #define DEVICEFAMILYINFOENUM_MAX 0x11
5993 #define DEVICEFAMILYDEVICEFORM_UNKNOWN 0x00
5994 #define DEVICEFAMILYDEVICEFORM_PHONE 0x01
5995 #define DEVICEFAMILYDEVICEFORM_TABLET 0x02
5996 #define DEVICEFAMILYDEVICEFORM_DESKTOP 0x03
5997 #define DEVICEFAMILYDEVICEFORM_NOTEBOOK 0x04
5998 #define DEVICEFAMILYDEVICEFORM_CONVERTIBLE 0x05
5999 #define DEVICEFAMILYDEVICEFORM_DETACHABLE 0x06
6000 #define DEVICEFAMILYDEVICEFORM_ALLINONE 0x07
6001 #define DEVICEFAMILYDEVICEFORM_STICKPC 0x08
6002 #define DEVICEFAMILYDEVICEFORM_PUCK 0x09
6003 #define DEVICEFAMILYDEVICEFORM_LARGESCREEN 0x0A
6004 #define DEVICEFAMILYDEVICEFORM_HMD 0x0B
6005 #define DEVICEFAMILYDEVICEFORM_INDUSTRY_HANDHELD 0x0C
6006 #define DEVICEFAMILYDEVICEFORM_INDUSTRY_TABLET 0x0D
6007 #define DEVICEFAMILYDEVICEFORM_BANKING 0x0E
6008 #define DEVICEFAMILYDEVICEFORM_BUILDING_AUTOMATION 0x0F
6009 #define DEVICEFAMILYDEVICEFORM_DIGITAL_SIGNAGE 0x10
6010 #define DEVICEFAMILYDEVICEFORM_GAMING 0x11
6011 #define DEVICEFAMILYDEVICEFORM_HOME_AUTOMATION 0x12
6012 #define DEVICEFAMILYDEVICEFORM_INDUSTRIAL_AUTOMATION 0x13
6013 #define DEVICEFAMILYDEVICEFORM_KIOSK 0x14
6014 #define DEVICEFAMILYDEVICEFORM_MAKER_BOARD 0x15
6015 #define DEVICEFAMILYDEVICEFORM_MEDICAL 0x16
6016 #define DEVICEFAMILYDEVICEFORM_NETWORKING 0x17
6017 #define DEVICEFAMILYDEVICEFORM_POINT_OF_SERVICE 0x18
6018 #define DEVICEFAMILYDEVICEFORM_PRINTING 0x19
6019 #define DEVICEFAMILYDEVICEFORM_THIN_CLIENT 0x1A
6020 #define DEVICEFAMILYDEVICEFORM_TOY 0x1B
6021 #define DEVICEFAMILYDEVICEFORM_VENDING 0x1C
6022 #define DEVICEFAMILYDEVICEFORM_INDUSTRY_OTHER 0x1D
6023 #define DEVICEFAMILYDEVICEFORM_XBOX_ONE 0x1E
6024 #define DEVICEFAMILYDEVICEFORM_XBOX_ONE_S 0x1F
6025 #define DEVICEFAMILYDEVICEFORM_XBOX_ONE_X 0x20
6026 #define DEVICEFAMILYDEVICEFORM_XBOX_ONE_X_DEVKIT 0x21
6027 #define DEVICEFAMILYDEVICEFORM_MAX 0x21
6029 NTSYSAPI
void WINAPI
RtlGetDeviceFamilyInfoEnum(ULONGLONG
*,DWORD
*,DWORD
*);
6031 #define EVENTLOG_SUCCESS 0x0000
6032 #define EVENTLOG_ERROR_TYPE 0x0001
6033 #define EVENTLOG_WARNING_TYPE 0x0002
6034 #define EVENTLOG_INFORMATION_TYPE 0x0004
6035 #define EVENTLOG_AUDIT_SUCCESS 0x0008
6036 #define EVENTLOG_AUDIT_FAILURE 0x0010
6038 #define EVENTLOG_SEQUENTIAL_READ 0x0001
6039 #define EVENTLOG_SEEK_READ 0x0002
6040 #define EVENTLOG_FORWARDS_READ 0x0004
6041 #define EVENTLOG_BACKWARDS_READ 0x0008
6043 typedef struct _EVENTLOGRECORD
{
6047 DWORD TimeGenerated
;
6054 DWORD ClosingRecordNumber
;
6056 DWORD UserSidLength
;
6057 DWORD UserSidOffset
;
6060 } EVENTLOGRECORD
, *PEVENTLOGRECORD
;
6062 #define SERVICE_BOOT_START 0x00000000
6063 #define SERVICE_SYSTEM_START 0x00000001
6064 #define SERVICE_AUTO_START 0x00000002
6065 #define SERVICE_DEMAND_START 0x00000003
6066 #define SERVICE_DISABLED 0x00000004
6068 #define SERVICE_ERROR_IGNORE 0x00000000
6069 #define SERVICE_ERROR_NORMAL 0x00000001
6070 #define SERVICE_ERROR_SEVERE 0x00000002
6071 #define SERVICE_ERROR_CRITICAL 0x00000003
6074 #define SERVICE_KERNEL_DRIVER 0x00000001
6075 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
6076 #define SERVICE_ADAPTER 0x00000004
6077 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
6079 #define SERVICE_DRIVER ( SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | \
6080 SERVICE_RECOGNIZER_DRIVER )
6082 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
6083 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
6084 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
6086 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
6088 #define SERVICE_TYPE_ALL ( SERVICE_WIN32 | SERVICE_ADAPTER | \
6089 SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS )
6092 typedef enum _CM_SERVICE_NODE_TYPE
6094 DriverType
= SERVICE_KERNEL_DRIVER
,
6095 FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,
6096 Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
6097 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,
6098 AdapterType
= SERVICE_ADAPTER
,
6099 RecognizerType
= SERVICE_RECOGNIZER_DRIVER
6100 } SERVICE_NODE_TYPE
;
6102 typedef enum _CM_SERVICE_LOAD_TYPE
6104 BootLoad
= SERVICE_BOOT_START
,
6105 SystemLoad
= SERVICE_SYSTEM_START
,
6106 AutoLoad
= SERVICE_AUTO_START
,
6107 DemandLoad
= SERVICE_DEMAND_START
,
6108 DisableLoad
= SERVICE_DISABLED
6109 } SERVICE_LOAD_TYPE
;
6111 typedef enum _CM_ERROR_CONTROL_TYPE
6113 IgnoreError
= SERVICE_ERROR_IGNORE
,
6114 NormalError
= SERVICE_ERROR_NORMAL
,
6115 SevereError
= SERVICE_ERROR_SEVERE
,
6116 CriticalError
= SERVICE_ERROR_CRITICAL
6117 } SERVICE_ERROR_TYPE
;
6119 NTSYSAPI SIZE_T WINAPI
RtlCompareMemory(const VOID
*, const VOID
*, SIZE_T
);
6120 NTSYSAPI SIZE_T WINAPI
RtlCompareMemoryUlong(VOID
*, SIZE_T
, ULONG
);
6122 #define RtlEqualMemory(Destination, Source, Length) (!memcmp((Destination),(Source),(Length)))
6123 #define RtlMoveMemory(Destination, Source, Length) memmove((Destination),(Source),(Length))
6124 #define RtlCopyMemory(Destination, Source, Length) memcpy((Destination),(Source),(Length))
6125 #define RtlFillMemory(Destination, Length, Fill) memset((Destination),(Fill),(Length))
6126 #define RtlZeroMemory(Destination, Length) memset((Destination),0,(Length))
6128 static FORCEINLINE
void *RtlSecureZeroMemory(void *buffer
, SIZE_T length
)
6130 volatile char *ptr
= (volatile char *)buffer
;
6132 while (length
--) *ptr
++ = 0;
6136 #include <guiddef.h>
6138 typedef struct _OBJECT_TYPE_LIST
{
6142 } OBJECT_TYPE_LIST
, *POBJECT_TYPE_LIST
;
6144 typedef struct _RTL_CRITICAL_SECTION_DEBUG
6147 WORD CreatorBackTraceIndex
;
6148 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
6149 LIST_ENTRY ProcessLocksList
;
6151 DWORD ContentionCount
;
6152 #ifdef __WINESRC__ /* in Wine we store the name here */
6153 DWORD_PTR Spare
[8/sizeof(DWORD_PTR
)];
6157 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
6159 typedef struct _RTL_CRITICAL_SECTION
{
6160 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
6162 LONG RecursionCount
;
6163 HANDLE OwningThread
;
6164 HANDLE LockSemaphore
;
6165 ULONG_PTR SpinCount
;
6166 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
6168 #define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x01000000
6169 #define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x02000000
6170 #define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x04000000
6171 #define RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE 0x08000000
6172 #define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO 0x10000000
6173 #define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xff000000
6174 #define RTL_CRITICAL_SECTION_FLAG_RESERVED 0xe0000000
6176 typedef struct _RTL_SRWLOCK
{
6178 } RTL_SRWLOCK
, *PRTL_SRWLOCK
;
6180 #define RTL_SRWLOCK_INIT {0}
6182 typedef struct _RTL_CONDITION_VARIABLE
{
6184 } RTL_CONDITION_VARIABLE
, *PRTL_CONDITION_VARIABLE
;
6185 #define RTL_CONDITION_VARIABLE_INIT {0}
6186 #define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1
6188 typedef VOID (NTAPI
* WAITORTIMERCALLBACKFUNC
) (PVOID
, BOOLEAN
);
6189 typedef VOID (NTAPI
* PFLS_CALLBACK_FUNCTION
) ( PVOID
);
6191 #define RTL_RUN_ONCE_INIT {0}
6192 typedef union _RTL_RUN_ONCE
{
6194 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
6196 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001
6197 #define RTL_RUN_ONCE_ASYNC 0x00000002
6198 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004
6200 typedef DWORD WINAPI
RTL_RUN_ONCE_INIT_FN(PRTL_RUN_ONCE
, PVOID
, PVOID
*);
6201 typedef RTL_RUN_ONCE_INIT_FN
*PRTL_RUN_ONCE_INIT_FN
;
6202 NTSYSAPI VOID WINAPI
RtlRunOnceInitialize(PRTL_RUN_ONCE
);
6203 NTSYSAPI DWORD WINAPI
RtlRunOnceExecuteOnce(PRTL_RUN_ONCE
,PRTL_RUN_ONCE_INIT_FN
,PVOID
,PVOID
*);
6204 NTSYSAPI DWORD WINAPI
RtlRunOnceBeginInitialize(PRTL_RUN_ONCE
, DWORD
, PVOID
*);
6205 NTSYSAPI DWORD WINAPI
RtlRunOnceComplete(PRTL_RUN_ONCE
, DWORD
, PVOID
);
6207 #include <pshpack8.h>
6208 typedef struct _IO_COUNTERS
{
6209 ULONGLONG
DECLSPEC_ALIGN(8) ReadOperationCount
;
6210 ULONGLONG
DECLSPEC_ALIGN(8) WriteOperationCount
;
6211 ULONGLONG
DECLSPEC_ALIGN(8) OtherOperationCount
;
6212 ULONGLONG
DECLSPEC_ALIGN(8) ReadTransferCount
;
6213 ULONGLONG
DECLSPEC_ALIGN(8) WriteTransferCount
;
6214 ULONGLONG
DECLSPEC_ALIGN(8) OtherTransferCount
;
6215 } IO_COUNTERS
, *PIO_COUNTERS
;
6216 #include <poppack.h>
6219 DWORD dwOSVersionInfoSize
;
6220 DWORD dwMajorVersion
;
6221 DWORD dwMinorVersion
;
6222 DWORD dwBuildNumber
;
6224 CHAR szCSDVersion
[128];
6225 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
6228 DWORD dwOSVersionInfoSize
;
6229 DWORD dwMajorVersion
;
6230 DWORD dwMinorVersion
;
6231 DWORD dwBuildNumber
;
6233 WCHAR szCSDVersion
[128];
6234 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
6236 DECL_WINELIB_TYPE_AW(OSVERSIONINFO
)
6237 DECL_WINELIB_TYPE_AW(POSVERSIONINFO
)
6238 DECL_WINELIB_TYPE_AW(LPOSVERSIONINFO
)
6241 DWORD dwOSVersionInfoSize
;
6242 DWORD dwMajorVersion
;
6243 DWORD dwMinorVersion
;
6244 DWORD dwBuildNumber
;
6246 CHAR szCSDVersion
[128];
6247 WORD wServicePackMajor
;
6248 WORD wServicePackMinor
;
6252 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
6255 DWORD dwOSVersionInfoSize
;
6256 DWORD dwMajorVersion
;
6257 DWORD dwMinorVersion
;
6258 DWORD dwBuildNumber
;
6260 WCHAR szCSDVersion
[128];
6261 WORD wServicePackMajor
;
6262 WORD wServicePackMinor
;
6266 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
6268 DECL_WINELIB_TYPE_AW(OSVERSIONINFOEX
)
6269 DECL_WINELIB_TYPE_AW(POSVERSIONINFOEX
)
6270 DECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX
)
6272 NTSYSAPI ULONGLONG WINAPI
VerSetConditionMask(ULONGLONG
,DWORD
,BYTE
);
6274 #define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
6276 #define VER_PLATFORM_WIN32s 0
6277 #define VER_PLATFORM_WIN32_WINDOWS 1
6278 #define VER_PLATFORM_WIN32_NT 2
6280 #define VER_MINORVERSION 0x00000001
6281 #define VER_MAJORVERSION 0x00000002
6282 #define VER_BUILDNUMBER 0x00000004
6283 #define VER_PLATFORMID 0x00000008
6284 #define VER_SERVICEPACKMINOR 0x00000010
6285 #define VER_SERVICEPACKMAJOR 0x00000020
6286 #define VER_SUITENAME 0x00000040
6287 #define VER_PRODUCT_TYPE 0x00000080
6289 #define VER_NT_WORKSTATION 1
6290 #define VER_NT_DOMAIN_CONTROLLER 2
6291 #define VER_NT_SERVER 3
6293 #define VER_SUITE_SMALLBUSINESS 0x00000001
6294 #define VER_SUITE_ENTERPRISE 0x00000002
6295 #define VER_SUITE_BACKOFFICE 0x00000004
6296 #define VER_SUITE_COMMUNICATIONS 0x00000008
6297 #define VER_SUITE_TERMINAL 0x00000010
6298 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
6299 #define VER_SUITE_EMBEDDEDNT 0x00000040
6300 #define VER_SUITE_DATACENTER 0x00000080
6301 #define VER_SUITE_SINGLEUSERTS 0x00000100
6302 #define VER_SUITE_PERSONAL 0x00000200
6303 #define VER_SUITE_BLADE 0x00000400
6304 #define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
6305 #define VER_SUITE_SECURITY_APPLIANCE 0x00001000
6306 #define VER_SUITE_STORAGE_SERVER 0x00002000
6307 #define VER_SUITE_COMPUTE_SERVER 0x00004000
6308 #define VER_SUITE_WH_SERVER 0x00008000
6311 #define VER_GREATER 2
6312 #define VER_GREATER_EQUAL 3
6314 #define VER_LESS_EQUAL 5
6318 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION
{
6320 DWORD ulFormatVersion
;
6321 DWORD ulAssemblyCount
;
6322 DWORD ulRootManifestPathType
;
6323 DWORD ulRootManifestPathChars
;
6324 DWORD ulRootConfigurationPathType
;
6325 DWORD ulRootConfigurationPathChars
;
6326 DWORD ulAppDirPathType
;
6327 DWORD ulAppDirPathChars
;
6328 PCWSTR lpRootManifestPath
;
6329 PCWSTR lpRootConfigurationPath
;
6330 PCWSTR lpAppDirPath
;
6331 } ACTIVATION_CONTEXT_DETAILED_INFORMATION
, *PACTIVATION_CONTEXT_DETAILED_INFORMATION
;
6333 typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
{
6335 DWORD ulEncodedAssemblyIdentityLength
;
6336 DWORD ulManifestPathType
;
6337 DWORD ulManifestPathLength
;
6338 LARGE_INTEGER liManifestLastWriteTime
;
6339 DWORD ulPolicyPathType
;
6340 DWORD ulPolicyPathLength
;
6341 LARGE_INTEGER liPolicyLastWriteTime
;
6342 DWORD ulMetadataSatelliteRosterIndex
;
6343 DWORD ulManifestVersionMajor
;
6344 DWORD ulManifestVersionMinor
;
6345 DWORD ulPolicyVersionMajor
;
6346 DWORD ulPolicyVersionMinor
;
6347 DWORD ulAssemblyDirectoryNameLength
;
6348 PCWSTR lpAssemblyEncodedAssemblyIdentity
;
6349 PCWSTR lpAssemblyManifestPath
;
6350 PCWSTR lpAssemblyPolicyPath
;
6351 PCWSTR lpAssemblyDirectoryName
;
6353 } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
;
6355 typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX
{
6356 DWORD ulAssemblyIndex
;
6357 DWORD ulFileIndexInAssembly
;
6358 } ACTIVATION_CONTEXT_QUERY_INDEX
, *PACTIVATION_CONTEXT_QUERY_INDEX
;
6360 typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX
*PCACTIVATION_CONTEXT_QUERY_INDEX
;
6362 typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION
{
6364 DWORD ulFilenameLength
;
6368 } ASSEMBLY_FILE_DETAILED_INFORMATION
, *PASSEMBLY_FILE_DETAILED_INFORMATION
;
6370 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION
*PCASSEMBLY_FILE_DETAILED_INFORMATION
;
6373 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN
= 0,
6374 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS
,
6375 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION
,
6376 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MAXVERSIONTESTED
6377 } ACTCTX_COMPATIBILITY_ELEMENT_TYPE
;
6379 typedef struct _COMPATIBILITY_CONTEXT_ELEMENT
{
6381 ACTCTX_COMPATIBILITY_ELEMENT_TYPE Type
;
6382 ULONGLONG MaxVersionTested
;
6383 } COMPATIBILITY_CONTEXT_ELEMENT
, *PCOMPATIBILITY_CONTEXT_ELEMENT
;
6385 #if !defined(__WINESRC__) && (defined(_MSC_EXTENSIONS) || ((defined(__GNUC__) && __GNUC__ >= 3)))
6386 typedef struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
{
6388 COMPATIBILITY_CONTEXT_ELEMENT Elements
[];
6389 } ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
, *PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
;
6393 ACTCTX_RUN_LEVEL_UNSPECIFIED
= 0,
6394 ACTCTX_RUN_LEVEL_AS_INVOKER
,
6395 ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE
,
6396 ACTCTX_RUN_LEVEL_REQUIRE_ADMIN
,
6397 ACTCTX_RUN_LEVEL_NUMBERS
6398 } ACTCTX_REQUESTED_RUN_LEVEL
;
6400 typedef struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
{
6402 ACTCTX_REQUESTED_RUN_LEVEL RunLevel
;
6404 } ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
, *PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
;
6406 typedef const struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
*PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
;
6408 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS
{
6409 ActivationContextBasicInformation
= 1,
6410 ActivationContextDetailedInformation
= 2,
6411 AssemblyDetailedInformationInActivationContext
= 3,
6412 FileInformationInAssemblyOfAssemblyInActivationContext
= 4,
6413 RunlevelInformationInActivationContext
= 5,
6414 CompatibilityInformationInActivationContext
= 6,
6415 ActivationContextManifestResourceName
= 7,
6416 MaxActivationContextInfoClass
,
6417 AssemblyDetailedInformationInActivationContxt
= AssemblyDetailedInformationInActivationContext
,
6418 FileInformationInAssemblyOfAssemblyInActivationContxt
= FileInformationInAssemblyOfAssemblyInActivationContext
6419 } ACTIVATION_CONTEXT_INFO_CLASS
;
6421 #define ACTIVATION_CONTEXT_PATH_TYPE_NONE 1
6422 #define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE 2
6423 #define ACTIVATION_CONTEXT_PATH_TYPE_URL 3
6424 #define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF 4
6426 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
6427 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
6428 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
6429 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
6430 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
6431 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
6432 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
6433 #define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE 8
6434 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
6435 #define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS 10
6436 #define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO 11
6437 #define ACTIVATION_CONTEXT_SECTION_WINRT_ACTIVATABLE_CLASSES 12
6439 #define ACTIVATION_CONTEXT_DATA_DLL_REDIRECTION_PATH_INCLUDES_BASE_NAME 1
6440 #define ACTIVATION_CONTEXT_DATA_DLL_REDIRECTION_PATH_OMITS_ASSEMBLY_ROOT 2
6441 #define ACTIVATION_CONTEXT_DATA_DLL_REDIRECTION_PATH_EXPAND 4
6442 #define ACTIVATION_CONTEXT_DATA_DLL_REDIRECTION_PATH_SYSTEM_DEFAULT_REDIRECTED_SYSTEM32_DLL 8
6444 typedef struct _ACTIVATION_CONTEXT_DATA_DLL_REDIRECTION
6448 ULONG TotalPathLength
;
6449 ULONG PathSegmentCount
;
6450 ULONG PathSegmentOffset
;
6451 } ACTIVATION_CONTEXT_DATA_DLL_REDIRECTION
, *PACTIVATION_CONTEXT_DATA_DLL_REDIRECTION
;
6453 typedef struct _ACTIVATION_CONTEXT_DATA_DLL_REDIRECTION_PATH_SEGMENT
6457 } ACTIVATION_CONTEXT_DATA_DLL_REDIRECTION_PATH_SEGMENT
, *PACTIVATION_CONTEXT_DATA_DLL_REDIRECTION_PATH_SEGMENT
;
6459 typedef enum _JOBOBJECTINFOCLASS
6461 JobObjectBasicAccountingInformation
= 1,
6462 JobObjectBasicLimitInformation
,
6463 JobObjectBasicProcessIdList
,
6464 JobObjectBasicUIRestrictions
,
6465 JobObjectSecurityLimitInformation
,
6466 JobObjectEndOfJobTimeInformation
,
6467 JobObjectAssociateCompletionPortInformation
,
6468 JobObjectBasicAndIoAccountingInformation
,
6469 JobObjectExtendedLimitInformation
,
6470 JobObjectJobSetInformation
,
6471 MaxJobObjectInfoClass
6472 } JOBOBJECTINFOCLASS
;
6474 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
{
6475 LARGE_INTEGER TotalUserTime
;
6476 LARGE_INTEGER TotalKernelTime
;
6477 LARGE_INTEGER ThisPeriodTotalUserTime
;
6478 LARGE_INTEGER ThisPeriodTotalKernelTime
;
6479 DWORD TotalPageFaultCount
;
6480 DWORD TotalProcesses
;
6481 DWORD ActiveProcesses
;
6482 DWORD TotalTerminatedProcesses
;
6483 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION
;
6485 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION
{
6486 LARGE_INTEGER PerProcessUserTimeLimit
;
6487 LARGE_INTEGER PerJobUserTimeLimit
;
6489 SIZE_T MinimumWorkingSetSize
;
6490 SIZE_T MaximumWorkingSetSize
;
6491 DWORD ActiveProcessLimit
;
6493 DWORD PriorityClass
;
6494 DWORD SchedulingClass
;
6495 } JOBOBJECT_BASIC_LIMIT_INFORMATION
, *PJOBOBJECT_BASIC_LIMIT_INFORMATION
;
6497 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST
{
6498 DWORD NumberOfAssignedProcesses
;
6499 DWORD NumberOfProcessIdsInList
;
6500 ULONG_PTR ProcessIdList
[1];
6501 } JOBOBJECT_BASIC_PROCESS_ID_LIST
, *PJOBOBJECT_BASIC_PROCESS_ID_LIST
;
6503 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS
{
6504 DWORD UIRestrictionsClass
;
6505 } JOBOBJECT_BASIC_UI_RESTRICTIONS
, *PJOBOBJECT_BASIC_UI_RESTRICTIONS
;
6507 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION
{
6508 DWORD SecurityLimitFlags
;
6510 PTOKEN_GROUPS SidsToDisable
;
6511 PTOKEN_PRIVILEGES PrivilegesToDelete
;
6512 PTOKEN_GROUPS RestrictedSids
;
6513 } JOBOBJECT_SECURITY_LIMIT_INFORMATION
, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION
;
6515 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION
{
6516 DWORD EndOfJobTimeAction
;
6517 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION
, PJOBOBJECT_END_OF_JOB_TIME_INFORMATION
;
6519 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT
{
6520 PVOID CompletionKey
;
6521 HANDLE CompletionPort
;
6522 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT
, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT
;
6524 #define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
6525 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
6526 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
6527 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
6528 #define JOB_OBJECT_MSG_NEW_PROCESS 6
6529 #define JOB_OBJECT_MSG_EXIT_PROCESS 7
6530 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
6531 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
6532 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
6534 typedef struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
{
6535 JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo
;
6537 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
, *PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
;
6539 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION
{
6540 JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation
;
6542 SIZE_T ProcessMemoryLimit
;
6543 SIZE_T JobMemoryLimit
;
6544 SIZE_T PeakProcessMemoryUsed
;
6545 SIZE_T PeakJobMemoryUsed
;
6546 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION
, *PJOBOBJECT_EXTENDED_LIMIT_INFORMATION
;
6548 #define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
6549 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
6550 #define JOB_OBJECT_LIMIT_JOB_TIME 0x00000004
6551 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008
6552 #define JOB_OBJECT_LIMIT_AFFINITY 0x00000010
6553 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
6554 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
6555 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
6556 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
6557 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200
6558 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
6559 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
6560 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
6561 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
6562 #define JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000
6564 #define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff
6565 #define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff
6566 #define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00007fff
6568 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
6570 RelationProcessorCore
= 0,
6571 RelationNumaNode
= 1,
6573 RelationProcessorPackage
= 3,
6575 RelationProcessorDie
= 5,
6576 RelationNumaNodeEx
= 6,
6577 RelationProcessorModule
= 7,
6578 RelationAll
= 0xffff
6579 } LOGICAL_PROCESSOR_RELATIONSHIP
;
6581 #define LTP_PC_SMT 0x1
6583 typedef enum _PROCESSOR_CACHE_TYPE
6589 } PROCESSOR_CACHE_TYPE
;
6591 typedef struct _PROCESSOR_GROUP_INFO
6593 BYTE MaximumProcessorCount
;
6594 BYTE ActiveProcessorCount
;
6596 KAFFINITY ActiveProcessorMask
;
6597 } PROCESSOR_GROUP_INFO
, *PPROCESSOR_GROUP_INFO
;
6599 typedef struct _CACHE_DESCRIPTOR
6605 PROCESSOR_CACHE_TYPE Type
;
6606 } CACHE_DESCRIPTOR
, *PCACHE_DESCRIPTOR
;
6608 typedef struct _GROUP_AFFINITY
6613 } GROUP_AFFINITY
, *PGROUP_AFFINITY
;
6615 #define ALL_PROCESSOR_GROUPS 0xffff
6617 typedef struct _PROCESSOR_NUMBER
6622 } PROCESSOR_NUMBER
, *PPROCESSOR_NUMBER
;
6624 typedef struct _PROCESSOR_RELATIONSHIP
6627 BYTE EfficiencyClass
;
6630 GROUP_AFFINITY GroupMask
[ANYSIZE_ARRAY
];
6631 } PROCESSOR_RELATIONSHIP
, *PPROCESSOR_RELATIONSHIP
;
6633 typedef struct _NUMA_NODE_RELATIONSHIP
6637 GROUP_AFFINITY GroupMask
;
6638 } NUMA_NODE_RELATIONSHIP
, *PNUMA_NODE_RELATIONSHIP
;
6640 typedef struct _CACHE_RELATIONSHIP
6646 PROCESSOR_CACHE_TYPE Type
;
6648 GROUP_AFFINITY GroupMask
;
6649 } CACHE_RELATIONSHIP
, *PCACHE_RELATIONSHIP
;
6651 typedef struct _GROUP_RELATIONSHIP
6653 WORD MaximumGroupCount
;
6654 WORD ActiveGroupCount
;
6656 PROCESSOR_GROUP_INFO GroupInfo
[ANYSIZE_ARRAY
];
6657 } GROUP_RELATIONSHIP
, *PGROUP_RELATIONSHIP
;
6659 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
6661 ULONG_PTR ProcessorMask
;
6662 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
6673 CACHE_DESCRIPTOR Cache
;
6674 ULONGLONG Reserved
[2];
6676 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
6678 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
6680 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
6684 PROCESSOR_RELATIONSHIP Processor
;
6685 NUMA_NODE_RELATIONSHIP NumaNode
;
6686 CACHE_RELATIONSHIP Cache
;
6687 GROUP_RELATIONSHIP Group
;
6689 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
;
6691 typedef enum _CPU_SET_INFORMATION_TYPE
6694 } CPU_SET_INFORMATION_TYPE
, *PCPU_SET_INFORMATION_TYPE
;
6696 typedef struct _SYSTEM_CPU_SET_INFORMATION
6699 CPU_SET_INFORMATION_TYPE Type
;
6706 BYTE LogicalProcessorIndex
;
6708 BYTE LastLevelCacheIndex
;
6710 BYTE EfficiencyClass
;
6718 BYTE AllocatedToTargetProcess
: 1;
6720 BYTE ReservedFlags
: 4;
6725 BYTE SchedulingClass
;
6727 DWORD64 AllocationTag
;
6730 } SYSTEM_CPU_SET_INFORMATION
, *PSYSTEM_CPU_SET_INFORMATION
;
6732 typedef struct _SYSTEM_SUPPORTED_PROCESSOR_ARCHITECTURES_INFORMATION
6735 DWORD KernelMode
: 1;
6739 DWORD WoW64Container
: 1;
6740 DWORD ReservedZero0
: 11;
6741 } SYSTEM_SUPPORTED_PROCESSOR_ARCHITECTURES_INFORMATION
;
6743 /* Threadpool things */
6744 typedef DWORD TP_VERSION
,*PTP_VERSION
;
6746 typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE
,*PTP_CALLBACK_INSTANCE
;
6748 typedef VOID (CALLBACK
*PTP_SIMPLE_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
);
6750 typedef struct _TP_POOL TP_POOL
,*PTP_POOL
;
6752 typedef enum _TP_CALLBACK_PRIORITY
6754 TP_CALLBACK_PRIORITY_HIGH
,
6755 TP_CALLBACK_PRIORITY_NORMAL
,
6756 TP_CALLBACK_PRIORITY_LOW
,
6757 TP_CALLBACK_PRIORITY_INVALID
,
6758 TP_CALLBACK_PRIORITY_COUNT
= TP_CALLBACK_PRIORITY_INVALID
6759 } TP_CALLBACK_PRIORITY
;
6761 typedef struct _TP_POOL_STACK_INFORMATION
6763 SIZE_T StackReserve
;
6765 } TP_POOL_STACK_INFORMATION
,*PTP_POOL_STACK_INFORMATION
;
6767 typedef struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP
,*PTP_CLEANUP_GROUP
;
6769 typedef VOID (CALLBACK
*PTP_CLEANUP_GROUP_CANCEL_CALLBACK
)(PVOID
,PVOID
);
6771 typedef struct _TP_CALLBACK_ENVIRON_V1
6775 PTP_CLEANUP_GROUP CleanupGroup
;
6776 PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback
;
6778 struct _ACTIVATION_CONTEXT
* ActivationContext
;
6779 PTP_SIMPLE_CALLBACK FinalizationCallback
;
6785 DWORD LongFunction
:1;
6790 } TP_CALLBACK_ENVIRON_V1
;
6792 typedef struct _TP_CALLBACK_ENVIRON_V3
6796 PTP_CLEANUP_GROUP CleanupGroup
;
6797 PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback
;
6799 struct _ACTIVATION_CONTEXT
*ActivationContext
;
6800 PTP_SIMPLE_CALLBACK FinalizationCallback
;
6806 DWORD LongFunction
:1;
6811 TP_CALLBACK_PRIORITY CallbackPriority
;
6813 } TP_CALLBACK_ENVIRON_V3
;
6815 typedef struct _TP_WORK TP_WORK
, *PTP_WORK
;
6816 typedef struct _TP_TIMER TP_TIMER
, *PTP_TIMER
;
6818 typedef DWORD TP_WAIT_RESULT
;
6819 typedef struct _TP_WAIT TP_WAIT
, *PTP_WAIT
;
6821 typedef struct _TP_IO TP_IO
, *PTP_IO
;
6823 typedef TP_CALLBACK_ENVIRON_V1 TP_CALLBACK_ENVIRON
, *PTP_CALLBACK_ENVIRON
;
6825 typedef VOID (CALLBACK
*PTP_WORK_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_WORK
);
6826 typedef VOID (CALLBACK
*PTP_TIMER_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_TIMER
);
6827 typedef VOID (CALLBACK
*PTP_WAIT_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_WAIT
,TP_WAIT_RESULT
);
6830 NTSYSAPI BOOLEAN NTAPI
RtlGetProductInfo(DWORD
,DWORD
,DWORD
,DWORD
,PDWORD
);
6832 typedef enum _RTL_UMS_THREAD_INFO_CLASS
6834 UmsThreadInvalidInfoClass
,
6835 UmsThreadUserContext
,
6839 UmsThreadIsSuspended
,
6840 UmsThreadIsTerminated
,
6841 UmsThreadMaxInfoClass
6842 } RTL_UMS_THREAD_INFO_CLASS
, *PRTL_UMS_THREAD_INFO_CLASS
;
6844 typedef enum _RTL_UMS_SCHEDULER_REASON
6846 UmsSchedulerStartup
,
6847 UmsSchedulerThreadBlocked
,
6848 UmsSchedulerThreadYield
,
6849 } RTL_UMS_SCHEDULER_REASON
, *PRTL_UMS_SCHEDULER_REASON
;
6851 typedef void (CALLBACK
*PRTL_UMS_SCHEDULER_ENTRY_POINT
)(RTL_UMS_SCHEDULER_REASON
,ULONG_PTR
,PVOID
);
6853 typedef enum _PROCESS_MITIGATION_POLICY
6857 ProcessDynamicCodePolicy
,
6858 ProcessStrictHandleCheckPolicy
,
6859 ProcessSystemCallDisablePolicy
,
6860 ProcessMitigationOptionsMask
,
6861 ProcessExtensionPointDisablePolicy
,
6862 ProcessControlFlowGuardPolicy
,
6863 ProcessSignaturePolicy
,
6864 ProcessFontDisablePolicy
,
6865 ProcessImageLoadPolicy
,
6866 ProcessSystemCallFilterPolicy
,
6867 ProcessPayloadRestrictionPolicy
,
6868 ProcessChildProcessPolicy
,
6869 ProcessSideChannelIsolationPolicy
,
6870 MaxProcessMitigationPolicy
6871 } PROCESS_MITIGATION_POLICY
, *PPROCESS_MITIGATION_POLICY
;
6873 typedef enum _FIRMWARE_TYPE
6875 FirmwareTypeUnknown
,
6879 } FIRMWARE_TYPE
, *PFIRMWARE_TYPE
;
6881 #ifndef __has_builtin
6882 # define __has_builtin(x) 0
6885 /* Intrinsic functions */
6887 #define BitScanForward _BitScanForward
6888 #define BitScanReverse _BitScanReverse
6889 #define InterlockedAdd _InlineInterlockedAdd
6890 #define InterlockedAnd _InterlockedAnd
6891 #define InterlockedAnd64 _InterlockedAnd64
6892 #define InterlockedCompareExchange _InterlockedCompareExchange
6893 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
6894 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
6895 #define InterlockedDecrement _InterlockedDecrement
6896 #define InterlockedDecrement16 _InterlockedDecrement16
6897 #define InterlockedDecrement64 _InterlockedDecrement64
6898 #define InterlockedExchange _InterlockedExchange
6899 #define InterlockedExchangeAdd _InterlockedExchangeAdd
6900 #define InterlockedExchangeAdd16 _InterlockedExchangeAdd16
6901 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
6902 #define InterlockedExchangePointer _InterlockedExchangePointer
6903 #define InterlockedIncrement _InterlockedIncrement
6904 #define InterlockedIncrement16 _InterlockedIncrement16
6905 #define InterlockedIncrement64 _InterlockedIncrement64
6906 #define InterlockedOr _InterlockedOr
6907 #define InterlockedOr64 _InterlockedOr64
6908 #define InterlockedXor _InterlockedXor
6909 #define InterlockedXor64 _InterlockedXor64
6913 #pragma intrinsic(_BitScanForward)
6914 #pragma intrinsic(_BitScanReverse)
6915 #pragma intrinsic(_InterlockedAnd)
6916 #pragma intrinsic(_InterlockedCompareExchange)
6917 #pragma intrinsic(_InterlockedCompareExchange64)
6918 #pragma intrinsic(_InterlockedCompareExchangePointer)
6919 #pragma intrinsic(_InterlockedExchange)
6920 #pragma intrinsic(_InterlockedExchangeAdd)
6921 #pragma intrinsic(_InterlockedExchangeAdd16)
6922 #pragma intrinsic(_InterlockedExchangePointer)
6923 #pragma intrinsic(_InterlockedIncrement)
6924 #pragma intrinsic(_InterlockedIncrement16)
6925 #pragma intrinsic(_InterlockedDecrement)
6926 #pragma intrinsic(_InterlockedDecrement16)
6927 #pragma intrinsic(_InterlockedOr)
6928 #pragma intrinsic(_InterlockedXor)
6929 #pragma intrinsic(__fastfail)
6931 BOOLEAN
_BitScanForward(unsigned long*,unsigned long);
6932 BOOLEAN
_BitScanReverse(unsigned long*,unsigned long);
6933 long _InterlockedAnd(long volatile *,long);
6934 long _InterlockedCompareExchange(long volatile*,long,long);
6935 long long _InterlockedCompareExchange64(long long volatile*,long long,long long);
6936 void * _InterlockedCompareExchangePointer(void *volatile*,void*,void*);
6937 long _InterlockedDecrement(long volatile*);
6938 short _InterlockedDecrement16(short volatile*);
6939 long _InterlockedExchange(long volatile*,long);
6940 long _InterlockedExchangeAdd(long volatile*,long);
6941 short _InterlockedExchangeAdd16(short volatile*,short);
6942 void * _InterlockedExchangePointer(void *volatile*,void*);
6943 long _InterlockedIncrement(long volatile*);
6944 short _InterlockedIncrement16(short volatile*);
6945 long _InterlockedOr(long volatile *,long);
6946 long _InterlockedXor(long volatile *,long);
6947 DECLSPEC_NORETURN
void __fastfail(unsigned int);
6949 #if !defined(__i386__) || __has_builtin(_InterlockedAnd64)
6950 #pragma intrinsic(_InterlockedAnd64)
6951 __int64
_InterlockedAnd64(__int64
volatile *, __int64
);
6953 static FORCEINLINE __int64
InterlockedAnd64( __int64
volatile *dest
, __int64 val
)
6956 do prev
= *dest
; while (InterlockedCompareExchange64( dest
, prev
& val
, prev
) != prev
);
6961 #if !defined(__i386__) || __has_builtin(_InterlockedExchangeAdd64)
6962 #pragma intrinsic(_InterlockedExchangeAdd64)
6963 __int64
_InterlockedExchangeAdd64(__int64
volatile *, __int64
);
6965 static FORCEINLINE __int64
InterlockedExchangeAdd64( __int64
volatile *dest
, __int64 val
)
6968 do prev
= *dest
; while (InterlockedCompareExchange64( dest
, prev
+ val
, prev
) != prev
);
6973 #if !defined(__i386__) || __has_builtin(_InterlockedDecrement64)
6974 #pragma intrinsic(_InterlockedDecrement64)
6975 __int64
_InterlockedDecrement64(__int64
volatile *);
6977 static FORCEINLINE __int64
InterlockedDecrement64( __int64
volatile *dest
)
6979 return InterlockedExchangeAdd64( dest
, -1 ) - 1;
6983 #if !defined(__i386__) || __has_builtin(_InterlockedIncrement64)
6984 #pragma intrinsic(_InterlockedIncrement64)
6985 __int64
_InterlockedIncrement64(__int64
volatile *);
6987 static FORCEINLINE __int64
InterlockedIncrement64( __int64
volatile *dest
)
6989 return InterlockedExchangeAdd64( dest
, 1 ) + 1;
6993 #if !defined(__i386__) || __has_builtin(_InterlockedOr64)
6994 #pragma intrinsic(_InterlockedOr64)
6995 __int64
_InterlockedOr64(__int64
volatile *, __int64
);
6997 static FORCEINLINE __int64
InterlockedOr64( __int64
volatile *dest
, __int64 val
)
7000 do prev
= *dest
; while (InterlockedCompareExchange64( dest
, prev
| val
, prev
) != prev
);
7005 #if !defined(__i386__) || __has_builtin(_InterlockedXor64)
7006 #pragma intrinsic(_InterlockedXor64)
7007 __int64
_InterlockedXor64(__int64
volatile *, __int64
);
7009 static FORCEINLINE __int64
InterlockedXor64( __int64
volatile *dest
, __int64 val
)
7012 do prev
= *dest
; while (InterlockedCompareExchange64( dest
, prev
^ val
, prev
) != prev
);
7017 static FORCEINLINE
long InterlockedAdd( long volatile *dest
, long val
)
7019 return InterlockedExchangeAdd( dest
, val
) + val
;
7022 static FORCEINLINE __int64
InterlockedAdd64( __int64
volatile *dest
, __int64 val
)
7024 return InterlockedExchangeAdd64( dest
, val
) + val
;
7029 static FORCEINLINE
void MemoryBarrier(void)
7032 InterlockedOr(&dummy
, 0);
7035 #elif defined(__aarch64__) || defined(__arm64ec__)
7037 static FORCEINLINE
void MemoryBarrier(void)
7039 __dmb(_ARM64_BARRIER_SY
);
7042 #elif defined(__x86_64__)
7044 #pragma intrinsic(__faststorefence)
7045 void __faststorefence(void);
7047 static FORCEINLINE
void MemoryBarrier(void)
7052 #elif defined(__arm__)
7054 static FORCEINLINE
void MemoryBarrier(void)
7056 __dmb(_ARM_BARRIER_SY
);
7059 #endif /* __i386__ */
7061 /* Since Visual Studio 2012, volatile accesses do not always imply acquire and
7062 * release semantics. We explicitly use ISO volatile semantics, manually
7063 * placing barriers as appropriate.
7065 #if _MSC_VER >= 1700
7066 #pragma intrinsic(__iso_volatile_load32)
7067 #pragma intrinsic(__iso_volatile_store32)
7068 #define __WINE_LOAD32_NO_FENCE(src) (__iso_volatile_load32(src))
7069 #define __WINE_STORE32_NO_FENCE(dest, value) (__iso_volatile_store32(dest, value))
7070 #else /* _MSC_VER >= 1700 */
7071 #define __WINE_LOAD32_NO_FENCE(src) (*(src))
7072 #define __WINE_STORE32_NO_FENCE(dest, value) ((void)(*(dest) = (value)))
7073 #endif /* _MSC_VER >= 1700 */
7075 #if defined(__i386__) || defined(__x86_64__)
7076 #pragma intrinsic(_ReadWriteBarrier)
7077 void _ReadWriteBarrier(void);
7078 #endif /* defined(__i386__) || defined(__x86_64__) */
7080 static void __wine_memory_barrier_acq_rel(void)
7082 #if defined(__i386__) || defined(__x86_64__)
7083 #pragma warning(suppress:4996)
7084 _ReadWriteBarrier();
7085 #elif defined(__arm__)
7086 __dmb(_ARM_BARRIER_ISH
);
7087 #elif defined(__aarch64__)
7088 __dmb(_ARM64_BARRIER_ISH
);
7089 #endif /* defined(__i386__) || defined(__x86_64__) */
7092 static FORCEINLINE LONG
ReadAcquire( LONG
const volatile *src
)
7094 LONG value
= __WINE_LOAD32_NO_FENCE( (int const volatile *)src
);
7095 __wine_memory_barrier_acq_rel();
7099 static FORCEINLINE LONG
ReadNoFence( LONG
const volatile *src
)
7101 LONG value
= __WINE_LOAD32_NO_FENCE( (int const volatile *)src
);
7105 static FORCEINLINE
void WriteRelease( LONG
volatile *dest
, LONG value
)
7107 __wine_memory_barrier_acq_rel();
7108 __WINE_STORE32_NO_FENCE( (int volatile *)dest
, value
);
7111 static FORCEINLINE
void WriteNoFence( LONG
volatile *dest
, LONG value
)
7113 __WINE_STORE32_NO_FENCE( (int volatile *)dest
, value
);
7116 #elif defined(__GNUC__)
7118 static FORCEINLINE BOOLEAN WINAPI
BitScanForward(DWORD
*index
, DWORD mask
)
7120 *index
= __builtin_ctz( mask
);
7124 static FORCEINLINE BOOLEAN WINAPI
BitScanReverse(DWORD
*index
, DWORD mask
)
7126 *index
= 31 - __builtin_clz( mask
);
7130 static FORCEINLINE LONG WINAPI
InterlockedAdd( LONG
volatile *dest
, LONG val
)
7132 return __sync_add_and_fetch( dest
, val
);
7135 static FORCEINLINE LONGLONG WINAPI
InterlockedAdd64( LONGLONG
volatile *dest
, LONGLONG val
)
7137 return __sync_add_and_fetch( dest
, val
);
7140 static FORCEINLINE LONG WINAPI
InterlockedAnd( LONG
volatile *dest
, LONG val
)
7142 return __sync_fetch_and_and( dest
, val
);
7145 static FORCEINLINE LONGLONG WINAPI
InterlockedAnd64( LONGLONG
volatile *dest
, LONGLONG val
)
7147 return __sync_fetch_and_and( dest
, val
);
7150 static FORCEINLINE LONG WINAPI
InterlockedCompareExchange( LONG
volatile *dest
, LONG xchg
, LONG compare
)
7152 return __sync_val_compare_and_swap( dest
, compare
, xchg
);
7155 static FORCEINLINE
void * WINAPI
InterlockedCompareExchangePointer( void *volatile *dest
, void *xchg
, void *compare
)
7157 return __sync_val_compare_and_swap( dest
, compare
, xchg
);
7160 static FORCEINLINE LONGLONG WINAPI
InterlockedCompareExchange64( LONGLONG
volatile *dest
, LONGLONG xchg
, LONGLONG compare
)
7162 return __sync_val_compare_and_swap( dest
, compare
, xchg
);
7165 static FORCEINLINE LONG WINAPI
InterlockedExchange( LONG
volatile *dest
, LONG val
)
7168 #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
7169 ret
= __atomic_exchange_n( dest
, val
, __ATOMIC_SEQ_CST
);
7170 #elif defined(__i386__) || defined(__x86_64__)
7171 __asm__
__volatile__( "lock; xchgl %0,(%1)"
7172 : "=r" (ret
) :"r" (dest
), "0" (val
) : "memory" );
7174 do ret
= *dest
; while (!__sync_bool_compare_and_swap( dest
, ret
, val
));
7179 static FORCEINLINE LONG WINAPI
InterlockedExchangeAdd( LONG
volatile *dest
, LONG incr
)
7181 return __sync_fetch_and_add( dest
, incr
);
7184 static FORCEINLINE
short WINAPI
InterlockedExchangeAdd16( short volatile *dest
, short incr
)
7186 return __sync_fetch_and_add( dest
, incr
);
7189 static FORCEINLINE LONGLONG WINAPI
InterlockedExchangeAdd64( LONGLONG
volatile *dest
, LONGLONG incr
)
7191 return __sync_fetch_and_add( dest
, incr
);
7194 static FORCEINLINE LONG WINAPI
InterlockedIncrement( LONG
volatile *dest
)
7196 return __sync_add_and_fetch( dest
, 1 );
7199 static FORCEINLINE
short WINAPI
InterlockedIncrement16( short volatile *dest
)
7201 return __sync_add_and_fetch( dest
, 1 );
7204 static FORCEINLINE LONGLONG WINAPI
InterlockedIncrement64( LONGLONG
volatile *dest
)
7206 return __sync_add_and_fetch( dest
, 1 );
7209 static FORCEINLINE LONG WINAPI
InterlockedDecrement( LONG
volatile *dest
)
7211 return __sync_add_and_fetch( dest
, -1 );
7214 static FORCEINLINE
short WINAPI
InterlockedDecrement16( short volatile *dest
)
7216 return __sync_add_and_fetch( dest
, -1 );
7219 static FORCEINLINE LONGLONG WINAPI
InterlockedDecrement64( LONGLONG
volatile *dest
)
7221 return __sync_add_and_fetch( dest
, -1 );
7224 static FORCEINLINE
void * WINAPI
InterlockedExchangePointer( void *volatile *dest
, void *val
)
7227 #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
7228 ret
= __atomic_exchange_n( dest
, val
, __ATOMIC_SEQ_CST
);
7229 #elif defined(__x86_64__)
7230 __asm__
__volatile__( "lock; xchgq %0,(%1)" : "=r" (ret
) :"r" (dest
), "0" (val
) : "memory" );
7231 #elif defined(__i386__)
7232 __asm__
__volatile__( "lock; xchgl %0,(%1)" : "=r" (ret
) :"r" (dest
), "0" (val
) : "memory" );
7234 do ret
= *dest
; while (!__sync_bool_compare_and_swap( dest
, ret
, val
));
7239 static FORCEINLINE LONG WINAPI
InterlockedOr( LONG
volatile *dest
, LONG val
)
7241 return __sync_fetch_and_or( dest
, val
);
7244 static FORCEINLINE LONGLONG WINAPI
InterlockedOr64( LONGLONG
volatile *dest
, LONGLONG val
)
7246 return __sync_fetch_and_or( dest
, val
);
7249 static FORCEINLINE LONG WINAPI
InterlockedXor( LONG
volatile *dest
, LONG val
)
7251 return __sync_fetch_and_xor( dest
, val
);
7254 static FORCEINLINE LONGLONG WINAPI
InterlockedXor64( LONGLONG
volatile *dest
, LONGLONG val
)
7256 return __sync_fetch_and_xor( dest
, val
);
7259 static FORCEINLINE
void MemoryBarrier(void)
7261 __sync_synchronize();
7264 #if defined(__x86_64__) || defined(__i386__)
7265 /* On x86, Support old GCC with either no or buggy (GCC BZ#81316) __atomic_* support */
7266 #define __WINE_ATOMIC_LOAD_ACQUIRE(ptr, ret) do { *(ret) = *(ptr); __asm__ __volatile__( "" ::: "memory" ); } while (0)
7267 #define __WINE_ATOMIC_LOAD_RELAXED(ptr, ret) do { *(ret) = *(ptr); } while (0)
7268 #define __WINE_ATOMIC_STORE_RELEASE(ptr, val) do { __asm__ __volatile__( "" ::: "memory" ); *(ptr) = *(val); } while (0)
7269 #define __WINE_ATOMIC_STORE_RELAXED(ptr, val) do { *(ptr) = *(val); } while (0)
7271 #define __WINE_ATOMIC_LOAD_ACQUIRE(ptr, ret) __atomic_load(ptr, ret, __ATOMIC_ACQUIRE)
7272 #define __WINE_ATOMIC_LOAD_RELAXED(ptr, ret) __atomic_load(ptr, ret, __ATOMIC_RELAXED)
7273 #define __WINE_ATOMIC_STORE_RELEASE(ptr, val) __atomic_store(ptr, val, __ATOMIC_RELEASE)
7274 #define __WINE_ATOMIC_STORE_RELAXED(ptr, val) __atomic_store(ptr, val, __ATOMIC_RELAXED)
7275 #endif /* defined(__x86_64__) || defined(__i386__) */
7277 static FORCEINLINE LONG
ReadAcquire( LONG
const volatile *src
)
7280 __WINE_ATOMIC_LOAD_ACQUIRE( src
, &value
);
7284 static FORCEINLINE LONG
ReadNoFence( LONG
const volatile *src
)
7287 __WINE_ATOMIC_LOAD_RELAXED( src
, &value
);
7291 static FORCEINLINE
void WriteRelease( LONG
volatile *dest
, LONG value
)
7293 __WINE_ATOMIC_STORE_RELEASE( dest
, &value
);
7296 static FORCEINLINE
void WriteNoFence( LONG
volatile *dest
, LONG value
)
7298 __WINE_ATOMIC_STORE_RELAXED( dest
, &value
);
7301 static FORCEINLINE DECLSPEC_NORETURN
void __fastfail(unsigned int code
)
7303 #if defined(__x86_64__) || defined(__i386__)
7304 for (;;) __asm__
__volatile__( "int $0x29" :: "c" ((ULONG_PTR
)code
) : "memory" );
7305 #elif defined(__aarch64__)
7306 register ULONG_PTR val
__asm__("x0") = code
;
7307 for (;;) __asm__
__volatile__( "brk #0xf003" :: "r" (val
) : "memory" );
7308 #elif defined(__arm__)
7309 register ULONG_PTR val
__asm__("r0") = code
;
7310 for (;;) __asm__
__volatile__( "udf #0xfb" :: "r" (val
) : "memory" );
7314 #endif /* __GNUC__ */
7318 #define InterlockedCompareExchange128 _InterlockedCompareExchange128
7320 #if defined(_MSC_VER) && (!defined(__clang__) || !defined(__aarch64__) || __has_builtin(_InterlockedCompareExchange128))
7322 #pragma intrinsic(_InterlockedCompareExchange128)
7323 unsigned char _InterlockedCompareExchange128(volatile __int64
*, __int64
, __int64
, __int64
*);
7327 static FORCEINLINE
unsigned char InterlockedCompareExchange128( volatile __int64
*dest
, __int64 xchg_high
, __int64 xchg_low
, __int64
*compare
)
7329 #if defined(__x86_64__) && !defined(__arm64ec__)
7331 __asm__
__volatile__( "lock cmpxchg16b %0; setz %b2"
7332 : "=m" (dest
[0]), "=m" (dest
[1]), "=r" (ret
),
7333 "=a" (compare
[0]), "=d" (compare
[1])
7334 : "m" (dest
[0]), "m" (dest
[1]), "3" (compare
[0]), "4" (compare
[1]),
7335 "c" (xchg_high
), "b" (xchg_low
) );
7338 return __sync_bool_compare_and_swap( (__int128
*)dest
, *(__int128
*)compare
, ((__int128
)xchg_high
<< 64) | xchg_low
);
7344 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)(a))
7345 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)(a), (b))
7346 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)(a))
7350 #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)(a))
7351 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)(a), (b))
7352 #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)(a))
7356 static FORCEINLINE
void YieldProcessor(void)
7359 #if defined(__i386__) || defined(__x86_64__)
7360 __asm__
__volatile__( "rep; nop" : : : "memory" );
7361 #elif defined(__arm__) || defined(__aarch64__)
7362 __asm__
__volatile__( "dmb ishst\n\tyield" : : : "memory" );
7364 __asm__
__volatile__( "" : : : "memory" );
7373 #endif /* _WINNT_ */