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>
35 #if defined(_MSC_VER) && (defined(__arm__) || defined(__aarch64__))
47 #define NTSYSAPI DECLSPEC_IMPORT
50 #define NTAPI __stdcall
51 #define FASTCALL __fastcall
54 # if defined(_MSC_VER)
55 # define DECLSPEC_IMPORT __declspec(dllimport)
56 # elif defined(__MINGW32__) || defined(__CYGWIN__)
57 # define DECLSPEC_IMPORT __attribute__((dllimport))
59 # define DECLSPEC_IMPORT DECLSPEC_HIDDEN
62 # define DECLSPEC_IMPORT
65 #ifndef DECLSPEC_NORETURN
66 # if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS)
67 # define DECLSPEC_NORETURN __declspec(noreturn)
68 # elif defined(__GNUC__)
69 # define DECLSPEC_NORETURN __attribute__((noreturn))
71 # define DECLSPEC_NORETURN
75 #ifndef DECLSPEC_ALIGN
76 # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
77 # define DECLSPEC_ALIGN(x) __declspec(align(x))
78 # elif defined(__GNUC__)
79 # define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
81 # define DECLSPEC_ALIGN(x)
85 #ifndef DECLSPEC_NOTHROW
86 # if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS)
87 # define DECLSPEC_NOTHROW __declspec(nothrow)
88 # elif defined(__GNUC__)
89 # define DECLSPEC_NOTHROW __attribute__((nothrow))
91 # define DECLSPEC_NOTHROW
95 #ifndef DECLSPEC_CACHEALIGN
96 # define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(128)
100 # if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined (__cplusplus)
101 # define DECLSPEC_UUID(x) __declspec(uuid(x))
103 # define DECLSPEC_UUID(x)
107 #ifndef DECLSPEC_NOVTABLE
108 # if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined(__cplusplus)
109 # define DECLSPEC_NOVTABLE __declspec(novtable)
111 # define DECLSPEC_NOVTABLE
115 #ifndef DECLSPEC_SELECTANY
116 #if defined(_MSC_VER) && (_MSC_VER >= 1100)
117 #define DECLSPEC_SELECTANY __declspec(selectany)
118 #elif defined(__MINGW32__)
119 #define DECLSPEC_SELECTANY __attribute__((selectany))
121 #define DECLSPEC_SELECTANY
126 # if defined(_MSC_VER) && (_MSC_VER >= 1210)
127 # define NOP_FUNCTION __noop
129 # define NOP_FUNCTION (void)0
133 #ifndef DECLSPEC_ADDRSAFE
134 # if defined(_MSC_VER) && (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
135 # define DECLSPEC_ADDRSAFE __declspec(address_safe)
137 # define DECLSPEC_ADDRSAFE
142 # if defined(_MSC_VER) && (_MSC_VER >= 1200)
143 # define FORCEINLINE __forceinline
144 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
145 # define FORCEINLINE inline __attribute__((always_inline))
147 # define FORCEINLINE inline
151 #ifndef DECLSPEC_DEPRECATED
152 # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
153 # define DECLSPEC_DEPRECATED __declspec(deprecated)
154 # define DEPRECATE_SUPPORTED
155 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
156 # define DECLSPEC_DEPRECATED __attribute__((deprecated))
157 # define DEPRECATE_SUPPORTED
159 # define DECLSPEC_DEPRECATED
160 # undef DEPRECATE_SUPPORTED
164 /* a couple of useful Wine extensions */
167 # define DECLSPEC_EXPORT __declspec(dllexport)
168 #elif defined(__MINGW32__)
169 # define DECLSPEC_EXPORT __attribute__((dllexport))
170 #elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) && !defined(__sun)
171 # define DECLSPEC_EXPORT __attribute__((visibility ("default")))
173 # define DECLSPEC_EXPORT
176 #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) || defined(__sun)
177 # define DECLSPEC_HIDDEN
178 #elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
179 # define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
181 # define DECLSPEC_HIDDEN
184 #ifndef __has_attribute
185 # define __has_attribute(x) 0
188 #if ((defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)))) || __has_attribute(ms_hook_prologue)) && (defined(__i386__) || defined(__x86_64__))
189 #define DECLSPEC_HOTPATCH __attribute__((__ms_hook_prologue__))
191 #define DECLSPEC_HOTPATCH
194 #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
195 #define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
197 #define __WINE_ALLOC_SIZE(x)
200 /* Anonymous union/struct handling */
202 #ifndef NONAMELESSSTRUCT
204 /* Anonymous struct support starts with gcc 2.96 or gcc/g++ 3.x */
205 # if (__GNUC__ < 2) || ((__GNUC__ == 2) && (defined(__cplusplus) || (__GNUC_MINOR__ < 96)))
206 # define NONAMELESSSTRUCT
208 # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
209 # define NONAMELESSSTRUCT
211 #endif /* NONAMELESSSTRUCT */
213 #ifndef NONAMELESSUNION
215 /* Anonymous unions support starts with gcc 2.96/g++ 2.95 */
216 # if (__GNUC__ < 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ < 95) || ((__GNUC_MINOR__ == 95) && !defined(__cplusplus))))
217 # define NONAMELESSUNION
219 # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
220 # define NONAMELESSUNION
222 #endif /* NONAMELESSUNION */
224 #undef DUMMYSTRUCTNAME
225 #undef DUMMYSTRUCTNAME1
226 #undef DUMMYSTRUCTNAME2
227 #undef DUMMYSTRUCTNAME3
228 #undef DUMMYSTRUCTNAME4
229 #undef DUMMYSTRUCTNAME5
230 #ifndef NONAMELESSSTRUCT
231 #define DUMMYSTRUCTNAME
232 #define DUMMYSTRUCTNAME1
233 #define DUMMYSTRUCTNAME2
234 #define DUMMYSTRUCTNAME3
235 #define DUMMYSTRUCTNAME4
236 #define DUMMYSTRUCTNAME5
237 #else /* !defined(NONAMELESSSTRUCT) */
238 #define DUMMYSTRUCTNAME s
239 #define DUMMYSTRUCTNAME1 s1
240 #define DUMMYSTRUCTNAME2 s2
241 #define DUMMYSTRUCTNAME3 s3
242 #define DUMMYSTRUCTNAME4 s4
243 #define DUMMYSTRUCTNAME5 s5
244 #endif /* !defined(NONAMELESSSTRUCT) */
246 #undef DUMMYUNIONNAME
247 #undef DUMMYUNIONNAME1
248 #undef DUMMYUNIONNAME2
249 #undef DUMMYUNIONNAME3
250 #undef DUMMYUNIONNAME4
251 #undef DUMMYUNIONNAME5
252 #undef DUMMYUNIONNAME6
253 #undef DUMMYUNIONNAME7
254 #undef DUMMYUNIONNAME8
255 #ifndef NONAMELESSUNION
256 #define DUMMYUNIONNAME
257 #define DUMMYUNIONNAME1
258 #define DUMMYUNIONNAME2
259 #define DUMMYUNIONNAME3
260 #define DUMMYUNIONNAME4
261 #define DUMMYUNIONNAME5
262 #define DUMMYUNIONNAME6
263 #define DUMMYUNIONNAME7
264 #define DUMMYUNIONNAME8
265 #else /* !defined(NONAMELESSUNION) */
266 #define DUMMYUNIONNAME u
267 #define DUMMYUNIONNAME1 u1
268 #define DUMMYUNIONNAME2 u2
269 #define DUMMYUNIONNAME3 u3
270 #define DUMMYUNIONNAME4 u4
271 #define DUMMYUNIONNAME5 u5
272 #define DUMMYUNIONNAME6 u6
273 #define DUMMYUNIONNAME7 u7
274 #define DUMMYUNIONNAME8 u8
275 #endif /* !defined(NONAMELESSUNION) */
277 #undef __C89_NAMELESS
278 #undef __C89_NAMELESSSTRUCTNAME
279 #undef __C89_NAMELESSSTRUCTNAME1
280 #undef __C89_NAMELESSSTRUCTNAME2
281 #undef __C89_NAMELESSSTRUCTNAME3
282 #undef __C89_NAMELESSSTRUCTNAME4
283 #undef __C89_NAMELESSSTRUCTNAME5
284 #undef __C89_NAMELESSUNIONNAME
285 #undef __C89_NAMELESSUNIONNAME1
286 #undef __C89_NAMELESSUNIONNAME2
287 #undef __C89_NAMELESSUNIONNAME3
288 #undef __C89_NAMELESSUNIONNAME4
289 #undef __C89_NAMELESSUNIONNAME5
290 #undef __C89_NAMELESSUNIONNAME6
291 #undef __C89_NAMELESSUNIONNAME7
292 #undef __C89_NAMELESSUNIONNAME8
294 #if !defined(__WINESRC__) && !defined(WINE_NO_NAMELESS_EXTENSION)
296 /* Anonymous structs support starts with gcc 2.96/g++ 2.95 */
297 # if (__GNUC__ > 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ > 95) || ((__GNUC_MINOR__ == 95) && defined(__cplusplus))))
298 # define __C89_NAMELESS __extension__
300 # elif defined(_MSC_VER)
301 # define __C89_NAMELESS
305 #ifdef __C89_NAMELESS
306 # define __C89_NAMELESSSTRUCTNAME
307 # define __C89_NAMELESSSTRUCTNAME1
308 # define __C89_NAMELESSSTRUCTNAME2
309 # define __C89_NAMELESSSTRUCTNAME3
310 # define __C89_NAMELESSSTRUCTNAME4
311 # define __C89_NAMELESSSTRUCTNAME5
312 # define __C89_NAMELESSUNIONNAME
313 # define __C89_NAMELESSUNIONNAME1
314 # define __C89_NAMELESSUNIONNAME2
315 # define __C89_NAMELESSUNIONNAME3
316 # define __C89_NAMELESSUNIONNAME4
317 # define __C89_NAMELESSUNIONNAME5
318 # define __C89_NAMELESSUNIONNAME6
319 # define __C89_NAMELESSUNIONNAME7
320 # define __C89_NAMELESSUNIONNAME8
322 # define __C89_NAMELESS
323 # define __C89_NAMELESSSTRUCTNAME DUMMYSTRUCTNAME
324 # define __C89_NAMELESSSTRUCTNAME1 DUMMYSTRUCTNAME1
325 # define __C89_NAMELESSSTRUCTNAME2 DUMMYSTRUCTNAME2
326 # define __C89_NAMELESSSTRUCTNAME3 DUMMYSTRUCTNAME3
327 # define __C89_NAMELESSSTRUCTNAME4 DUMMYSTRUCTNAME4
328 # define __C89_NAMELESSSTRUCTNAME5 DUMMYSTRUCTNAME5
329 # define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME
330 # define __C89_NAMELESSUNIONNAME1 DUMMYUNIONNAME1
331 # define __C89_NAMELESSUNIONNAME2 DUMMYUNIONNAME2
332 # define __C89_NAMELESSUNIONNAME3 DUMMYUNIONNAME3
333 # define __C89_NAMELESSUNIONNAME4 DUMMYUNIONNAME4
334 # define __C89_NAMELESSUNIONNAME5 DUMMYUNIONNAME5
335 # define __C89_NAMELESSUNIONNAME6 DUMMYUNIONNAME6
336 # define __C89_NAMELESSUNIONNAME7 DUMMYUNIONNAME7
337 # define __C89_NAMELESSUNIONNAME8 DUMMYUNIONNAME8
340 /* C99 restrict support */
342 #if defined(ENABLE_RESTRICTED) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
343 # if defined(_MSC_VER) && defined(_M_MRX000)
344 # define RESTRICTED_POINTER __restrict
345 # elif defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95)))
346 # define RESTRICTED_POINTER __restrict
348 # define RESTRICTED_POINTER
351 # define RESTRICTED_POINTER
354 /* C99 unaligned support */
357 #if defined(_MSC_VER) && (defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64))
358 # define UNALIGNED __unaligned
360 # define UNALIGNED64 __unaligned
370 /* Alignment macros */
372 #if defined(_WIN64) || (defined(_MSC_VER) && defined(_M_ALPHA)) || defined(__alpha__)
373 #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
374 #define MEMORY_ALLOCATION_ALIGNMENT 16
376 #define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
377 #define MEMORY_ALLOCATION_ALIGNMENT 8
380 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
381 # define TYPE_ALIGNMENT(t) __alignof(t)
382 #elif defined(__GNUC__)
383 # define TYPE_ALIGNMENT(t) __alignof__(t)
385 # define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
389 # define PROBE_ALIGNMENT(_s) \
390 (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? \
391 TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD))
392 # define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD)
394 # define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
397 /* Compile time assertion */
399 #define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
401 /* Eliminate Microsoft C/C++ compiler warning 4715 */
402 #if defined(_MSC_VER) && (_MSC_VER > 1200)
403 # define DEFAULT_UNREACHABLE default: __assume(0)
404 #elif defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5))))
405 # define DEFAULT_UNREACHABLE default: __builtin_unreachable()
407 # define DEFAULT_UNREACHABLE default:
411 #define APPLICATION_ERROR_MASK 0x20000000
412 #define ERROR_SEVERITY_SUCCESS 0x00000000
413 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
414 #define ERROR_SEVERITY_WARNING 0x80000000
415 #define ERROR_SEVERITY_ERROR 0xC0000000
418 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
420 inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)|((int)b)); } \
421 inline ENUMTYPE operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \
422 inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)&((int)b)); } \
423 inline ENUMTYPE operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \
424 inline ENUMTYPE operator ~ (ENUMTYPE a) { return (ENUMTYPE)(~((int)a)); } \
425 inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)^((int)b)); } \
426 inline ENUMTYPE operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \
429 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */
432 /* Microsoft's macros for declaring functions */
435 # define EXTERN_C extern "C"
437 # define EXTERN_C extern
440 #define STDMETHODCALLTYPE WINAPI
441 #define STDMETHODVCALLTYPE WINAPIV
442 #define STDAPICALLTYPE WINAPI
443 #define STDAPIVCALLTYPE WINAPIV
445 #define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
446 #define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
447 #define STDMETHODIMP HRESULT STDMETHODCALLTYPE
448 #define STDMETHODIMP_(type) type STDMETHODCALLTYPE
449 #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
450 #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
451 #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
452 #define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
454 /* Define the basic types */
459 typedef VOID
*PVOID64
;
460 typedef BYTE BOOLEAN
, *PBOOLEAN
;
461 typedef char CHAR
, *PCHAR
;
462 typedef short SHORT
, *PSHORT
;
464 typedef long LONG
, *PLONG
;
466 typedef int LONG
, *PLONG
;
469 /* Some systems might have wchar_t, but we really need 16 bit characters */
470 #if defined(WINE_UNICODE_NATIVE)
471 typedef wchar_t WCHAR
;
472 #elif __cpp_unicode_literals >= 200710
473 typedef char16_t WCHAR
;
475 typedef unsigned short WCHAR
;
477 typedef WCHAR
*PWCHAR
;
479 typedef ULONG UCSCHAR
;
480 #define MIN_UCSCHAR (0)
481 #define MAX_UCSCHAR (0x0010ffff)
482 #define UCSCHAR_INVALID_CHARACTER (0xffffffff)
484 /* 'Extended/Wide' numerical types */
488 typedef signed __int64 LONGLONG
, *PLONGLONG
;
489 typedef unsigned __int64 ULONGLONG
, *PULONGLONG
;
491 typedef signed __int64
DECLSPEC_ALIGN(8) LONGLONG
, *PLONGLONG
;
492 typedef unsigned __int64
DECLSPEC_ALIGN(8) ULONGLONG
, *PULONGLONG
;
499 typedef ULONGLONG DWORDLONG
, *PDWORDLONG
;
501 typedef ULONGLONG
DECLSPEC_ALIGN(8) DWORDLONG
, *PDWORDLONG
;
505 /* ANSI string types */
506 typedef CHAR
*PCH
, *LPCH
, *PNZCH
;
507 typedef const CHAR
*PCCH
, *LPCCH
, *PCNZCH
;
508 typedef CHAR
*PSTR
, *LPSTR
, *NPSTR
;
509 typedef const CHAR
*PCSTR
, *LPCSTR
;
510 typedef CHAR
*PZZSTR
;
511 typedef const CHAR
*PCZZSTR
;
513 /* Unicode string types */
514 typedef const WCHAR
*PCWCHAR
, *LPCUWCHAR
, *PCUWCHAR
;
515 typedef WCHAR
*PWCH
, *LPWCH
;
516 typedef const WCHAR
*PCWCH
, *LPCWCH
;
517 typedef WCHAR
*PNZWCH
, *PUNZWCH
;
518 typedef const WCHAR
*PCNZWCH
, *PCUNZWCH
;
519 typedef WCHAR
*PWSTR
, *LPWSTR
, *NWPSTR
;
520 typedef const WCHAR
*PCWSTR
, *LPCWSTR
;
521 typedef WCHAR
*PZZWSTR
, *PUZZWSTR
;
522 typedef const WCHAR
*PCZZWSTR
, *PCUZZWSTR
;
523 typedef PWSTR
*PZPWSTR
;
524 typedef PCWSTR
*PZPCWSTR
;
526 /* Neutral character and string types */
527 /* These are only defined for Winelib, i.e. _not_ defined for
528 * the emulator. The reason is they depend on the UNICODE
529 * macro which only exists in the user's code.
531 #ifndef WINE_NO_UNICODE_MACROS
533 # ifndef _TCHAR_DEFINED
534 typedef WCHAR TCHAR
, *PTCHAR
;
535 # define _TCHAR_DEFINED
537 typedef LPWCH PTCH
, LPTCH
;
538 typedef LPCWCH PCTCH
, LPCTCH
;
539 typedef LPWSTR PTSTR
, LPTSTR
;
540 typedef LPCWSTR PCTSTR
, LPCTSTR
;
541 typedef LPWSTR PUTSTR
, LPUTSTR
;
542 typedef LPCWSTR PCUTSTR
, LPCUTSTR
;
543 typedef PNZWCH PNZTCH
;
544 typedef PUNZWCH PUNZTCH
;
545 typedef PCNZWCH PCNZTCH
;
546 typedef PCUNZWCH PCUNZTCH
;
547 typedef PZZWSTR PZZTSTR
;
548 typedef PCZZWSTR PCZZTSTR
;
549 typedef PUZZWSTR PUZZTSTR
;
550 typedef PCUZZWSTR PCUZZTSTR
;
552 # ifndef _TCHAR_DEFINED
553 typedef CHAR TCHAR
, *PTCHAR
;
554 # define _TCHAR_DEFINED
556 typedef LPCH PTCH
, LPTCH
;
557 typedef LPCCH PCTCH
, LPCTCH
;
558 typedef LPSTR PTSTR
, LPTSTR
;
559 typedef LPCSTR PCTSTR
, LPCTSTR
;
560 typedef PNZCH PNZTCH
, PUNZTCH
;
561 typedef PCNZCH PCNZTCH
, PCUNZTCH
;
562 typedef PZZSTR PZZTSTR
, PUZZTSTR
;
563 typedef PCZZSTR PCZZTSTR
, PCUZZTSTR
;
564 # endif /* UNICODE */
565 #endif /* WINE_NO_UNICODE_MACROS */
567 /* UCS string types */
568 typedef UCSCHAR
*PUCSCHAR
, *PUUCSCHAR
;
569 typedef const UCSCHAR
*PCUCSCHAR
, *PCUUCSCHAR
;
570 typedef UCSCHAR
*PUCSSTR
, *PUUCSSTR
;
571 typedef const UCSCHAR
*PCUCSSTR
, *PCUUCSSTR
;
573 /* Misc common WIN32 types */
575 typedef DWORD LCID
, *PLCID
;
577 typedef DWORD EXECUTION_STATE
;
578 #ifndef _HRESULT_DEFINED
579 #define _HRESULT_DEFINED
580 typedef LONG HRESULT
;
585 typedef void *HANDLE
;
586 typedef HANDLE
*PHANDLE
, *LPHANDLE
;
589 #define DECLARE_HANDLE(a) typedef struct a##__ { int unused; } *a
591 #define DECLARE_HANDLE(a) typedef HANDLE a
598 /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
600 # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
601 # define __MSABI_LONG(x) x ## l
603 # define __MSABI_LONG(x) x
609 #ifndef WIN32_NO_STATUS
611 #define STATUS_WAIT_0 ((DWORD) 0x00000000)
612 #define STATUS_ABANDONED_WAIT_0 ((DWORD) 0x00000080)
613 #define STATUS_USER_APC ((DWORD) 0x000000C0)
614 #define STATUS_TIMEOUT ((DWORD) 0x00000102)
615 #define STATUS_PENDING ((DWORD) 0x00000103)
616 #define STATUS_SEGMENT_NOTIFICATION ((DWORD) 0x40000005)
617 #define STATUS_FATAL_APP_EXIT ((DWORD) 0x40000015)
618 #define STATUS_GUARD_PAGE_VIOLATION ((DWORD) 0x80000001)
619 #define STATUS_DATATYPE_MISALIGNMENT ((DWORD) 0x80000002)
620 #define STATUS_BREAKPOINT ((DWORD) 0x80000003)
621 #define STATUS_SINGLE_STEP ((DWORD) 0x80000004)
622 #define STATUS_LONGJUMP ((DWORD) 0x80000026)
623 #define STATUS_UNWIND_CONSOLIDATE ((DWORD) 0x80000029)
624 #define STATUS_ACCESS_VIOLATION ((DWORD) 0xC0000005)
625 #define STATUS_IN_PAGE_ERROR ((DWORD) 0xC0000006)
626 #define STATUS_INVALID_HANDLE ((DWORD) 0xC0000008)
627 #define STATUS_NO_MEMORY ((DWORD) 0xC0000017)
628 #define STATUS_ILLEGAL_INSTRUCTION ((DWORD) 0xC000001D)
629 #define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD) 0xC0000025)
630 #define STATUS_INVALID_DISPOSITION ((DWORD) 0xC0000026)
631 #define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD) 0xC000008C)
632 #define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD) 0xC000008D)
633 #define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD) 0xC000008E)
634 #define STATUS_FLOAT_INEXACT_RESULT ((DWORD) 0xC000008F)
635 #define STATUS_FLOAT_INVALID_OPERATION ((DWORD) 0xC0000090)
636 #define STATUS_FLOAT_OVERFLOW ((DWORD) 0xC0000091)
637 #define STATUS_FLOAT_STACK_CHECK ((DWORD) 0xC0000092)
638 #define STATUS_FLOAT_UNDERFLOW ((DWORD) 0xC0000093)
639 #define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD) 0xC0000094)
640 #define STATUS_INTEGER_OVERFLOW ((DWORD) 0xC0000095)
641 #define STATUS_PRIVILEGED_INSTRUCTION ((DWORD) 0xC0000096)
642 #define STATUS_STACK_OVERFLOW ((DWORD) 0xC00000FD)
643 #define STATUS_DLL_NOT_FOUND ((DWORD) 0xC0000135)
644 #define STATUS_ORDINAL_NOT_FOUND ((DWORD) 0xC0000138)
645 #define STATUS_ENTRYPOINT_NOT_FOUND ((DWORD) 0xC0000139)
646 #define STATUS_CONTROL_C_EXIT ((DWORD) 0xC000013A)
647 #define STATUS_DLL_INIT_FAILED ((DWORD) 0xC0000142)
648 #define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD) 0xC00002B4)
649 #define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD) 0xC00002B5)
650 #define STATUS_REG_NAT_CONSUMPTION ((DWORD) 0xC00002C9)
651 #define STATUS_HEAP_CORRUPTION ((DWORD) 0xC0000374)
652 #define STATUS_STACK_BUFFER_OVERRUN ((DWORD) 0xC0000409)
653 #define STATUS_INVALID_CRUNTIME_PARAMETER ((DWORD) 0xC0000417)
654 #define STATUS_ASSERTION_FAILURE ((DWORD) 0xC0000420)
655 #define STATUS_SXS_EARLY_DEACTIVATION ((DWORD) 0xC015000F)
656 #define STATUS_SXS_INVALID_DEACTIVATION ((DWORD) 0xC0150010)
658 /* status values for ContinueDebugEvent */
659 #define DBG_EXCEPTION_HANDLED ((DWORD) 0x00010001)
660 #define DBG_CONTINUE ((DWORD) 0x00010002)
661 #define DBG_REPLY_LATER ((DWORD) 0x40010001)
662 #define DBG_TERMINATE_THREAD ((DWORD) 0x40010003)
663 #define DBG_TERMINATE_PROCESS ((DWORD) 0x40010004)
664 #define DBG_CONTROL_C ((DWORD) 0x40010005)
665 #define DBG_PRINTEXCEPTION_C ((DWORD) 0x40010006)
666 #define DBG_RIPEXCEPTION ((DWORD) 0x40010007)
667 #define DBG_CONTROL_BREAK ((DWORD) 0x40010008)
668 #define DBG_COMMAND_EXCEPTION ((DWORD) 0x40010009)
669 #define DBG_PRINTEXCEPTION_WIDE_C ((DWORD) 0x4001000A)
670 #define DBG_EXCEPTION_NOT_HANDLED ((DWORD) 0x80010001)
672 #endif /* WIN32_NO_STATUS */
674 /* Argument 1 passed to the DllEntryProc. */
675 #define DLL_PROCESS_DETACH 0 /* detach process (unload library) */
676 #define DLL_PROCESS_ATTACH 1 /* attach process (load library) */
677 #define DLL_THREAD_ATTACH 2 /* attach new thread */
678 #define DLL_THREAD_DETACH 3 /* detach thread */
680 #define DLL_WINE_PREATTACH 8 /* called before process attach for Wine builtins */
683 /* u.x.wProcessorArchitecture (NT) */
684 #define PROCESSOR_ARCHITECTURE_INTEL 0
685 #define PROCESSOR_ARCHITECTURE_MIPS 1
686 #define PROCESSOR_ARCHITECTURE_ALPHA 2
687 #define PROCESSOR_ARCHITECTURE_PPC 3
688 #define PROCESSOR_ARCHITECTURE_SHX 4
689 #define PROCESSOR_ARCHITECTURE_ARM 5
690 #define PROCESSOR_ARCHITECTURE_IA64 6
691 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
692 #define PROCESSOR_ARCHITECTURE_MSIL 8
693 #define PROCESSOR_ARCHITECTURE_AMD64 9
694 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
695 #define PROCESSOR_ARCHITECTURE_NEUTRAL 11
696 #define PROCESSOR_ARCHITECTURE_ARM64 12
697 #define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 13
698 #define PROCESSOR_ARCHITECTURE_IA32_ON_ARM64 14
699 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
701 /* dwProcessorType */
702 #define PROCESSOR_INTEL_386 386
703 #define PROCESSOR_INTEL_486 486
704 #define PROCESSOR_INTEL_PENTIUM 586
705 #define PROCESSOR_INTEL_860 860
706 #define PROCESSOR_INTEL_IA64 2200
707 #define PROCESSOR_AMD_X8664 8664
708 #define PROCESSOR_MIPS_R2000 2000
709 #define PROCESSOR_MIPS_R3000 3000
710 #define PROCESSOR_MIPS_R4000 4000
711 #define PROCESSOR_ALPHA_21064 21064
712 #define PROCESSOR_PPC_601 601
713 #define PROCESSOR_PPC_603 603
714 #define PROCESSOR_PPC_604 604
715 #define PROCESSOR_PPC_620 620
716 #define PROCESSOR_HITACHI_SH3 10003
717 #define PROCESSOR_HITACHI_SH3E 10004
718 #define PROCESSOR_HITACHI_SH4 10005
719 #define PROCESSOR_MOTOROLA_821 821
720 #define PROCESSOR_SHx_SH3 103
721 #define PROCESSOR_SHx_SH4 104
722 #define PROCESSOR_STRONGARM 2577
723 #define PROCESSOR_ARM720 1824 /* 0x720 */
724 #define PROCESSOR_ARM820 2080 /* 0x820 */
725 #define PROCESSOR_ARM920 2336 /* 0x920 */
726 #define PROCESSOR_ARM_7TDMI 70001
727 #define PROCESSOR_OPTIL 18767
730 #define MAXIMUM_PROCESSORS 64
732 #define MAXIMUM_PROCESSORS 32
735 typedef struct _MEMORY_BASIC_INFORMATION
738 LPVOID AllocationBase
;
739 DWORD AllocationProtect
;
744 } MEMORY_BASIC_INFORMATION
, *PMEMORY_BASIC_INFORMATION
;
746 #define MEM_EXTENDED_PARAMETER_TYPE_BITS 8
748 typedef enum MEM_EXTENDED_PARAMETER_TYPE
{
749 MemExtendedParameterInvalidType
= 0,
750 MemExtendedParameterAddressRequirements
,
751 MemExtendedParameterNumaNode
,
752 MemExtendedParameterPartitionHandle
,
753 MemExtendedParameterUserPhysicalHandle
,
754 MemExtendedParameterAttributeFlags
,
755 MemExtendedParameterMax
756 } MEM_EXTENDED_PARAMETER_TYPE
, *PMEM_EXTENDED_PARAMETER_TYPE
;
758 typedef struct DECLSPEC_ALIGN(8) MEM_EXTENDED_PARAMETER
{
761 DWORD64 Type
: MEM_EXTENDED_PARAMETER_TYPE_BITS
;
762 DWORD64 Reserved
: 64 - MEM_EXTENDED_PARAMETER_TYPE_BITS
;
773 } MEM_EXTENDED_PARAMETER
, *PMEM_EXTENDED_PARAMETER
;
775 #define PAGE_NOACCESS 0x01
776 #define PAGE_READONLY 0x02
777 #define PAGE_READWRITE 0x04
778 #define PAGE_WRITECOPY 0x08
779 #define PAGE_EXECUTE 0x10
780 #define PAGE_EXECUTE_READ 0x20
781 #define PAGE_EXECUTE_READWRITE 0x40
782 #define PAGE_EXECUTE_WRITECOPY 0x80
783 #define PAGE_GUARD 0x100
784 #define PAGE_NOCACHE 0x200
785 #define PAGE_WRITECOMBINE 0x400
787 #define MEM_COMMIT 0x00001000
788 #define MEM_RESERVE 0x00002000
789 #define MEM_DECOMMIT 0x00004000
790 #define MEM_RELEASE 0x00008000
791 #define MEM_FREE 0x00010000
792 #define MEM_PRIVATE 0x00020000
793 #define MEM_MAPPED 0x00040000
794 #define MEM_RESET 0x00080000
795 #define MEM_TOP_DOWN 0x00100000
796 #define MEM_WRITE_WATCH 0x00200000
797 #define MEM_PHYSICAL 0x00400000
798 #define MEM_LARGE_PAGES 0x20000000
799 #define MEM_4MB_PAGES 0x80000000
801 #define SEC_FILE 0x00800000
802 #define SEC_IMAGE 0x01000000
803 #define SEC_PROTECTED_IMAGE 0x02000000
804 #define SEC_RESERVE 0x04000000
805 #define SEC_COMMIT 0x08000000
806 #define SEC_NOCACHE 0x10000000
807 #define SEC_WRITECOMBINE 0x40000000
808 #define SEC_LARGE_PAGES 0x80000000
809 #define SEC_IMAGE_NO_EXECUTE (SEC_IMAGE | SEC_NOCACHE)
810 #define MEM_IMAGE SEC_IMAGE
812 #define WRITE_WATCH_FLAG_RESET 0x00000001
814 #define AT_ROUND_TO_PAGE 0x40000000
818 #define MINSHORT 0x8000
819 #define MAXSHORT 0x7fff
820 #define MINLONG 0x80000000
821 #define MAXLONG 0x7fffffff
823 #define MAXWORD 0xffff
824 #define MAXDWORD 0xffffffff
825 #define MAXLONGLONG (((LONGLONG)0x7fffffff << 32) | 0xffffffff)
827 #define UNICODE_STRING_MAX_CHARS 32767
829 #define FIELD_OFFSET(type, field) ((LONG)offsetof(type, field))
830 #define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
831 #define RTL_SIZEOF_THROUGH_FIELD(type, field) (FIELD_OFFSET(type, field) + RTL_FIELD_SIZE(type, field))
833 #define CONTAINING_RECORD(address, type, field) \
834 ((type *)((PCHAR)(address) - offsetof(type, field)))
836 #define ARRAYSIZE(x) (sizeof(x) / sizeof((x)[0]))
838 # define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
843 typedef struct _LIST_ENTRY
{
844 struct _LIST_ENTRY
*Flink
;
845 struct _LIST_ENTRY
*Blink
;
846 } LIST_ENTRY
, *PLIST_ENTRY
, * RESTRICTED_POINTER PRLIST_ENTRY
;
848 typedef struct _SINGLE_LIST_ENTRY
{
849 struct _SINGLE_LIST_ENTRY
*Next
;
850 } SINGLE_LIST_ENTRY
, *PSINGLE_LIST_ENTRY
;
854 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
{
855 struct _SLIST_ENTRY
*Next
;
856 } SLIST_ENTRY
, *PSLIST_ENTRY
;
858 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER
{
865 ULONGLONG Sequence
:9;
866 ULONGLONG NextEntry
:39;
867 ULONGLONG HeaderType
:1;
869 ULONGLONG Reserved
:59;
874 ULONGLONG Sequence
:48;
875 ULONGLONG HeaderType
:1;
877 ULONGLONG Reserved
:2;
878 ULONGLONG NextEntry
:60;
880 } SLIST_HEADER
, *PSLIST_HEADER
;
884 #undef SLIST_ENTRY /* for Mac OS */
885 #define SLIST_ENTRY SINGLE_LIST_ENTRY
886 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
887 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
889 typedef union _SLIST_HEADER
{
896 } SLIST_HEADER
, *PSLIST_HEADER
;
900 NTSYSAPI PSLIST_ENTRY WINAPI
RtlFirstEntrySList(const SLIST_HEADER
*);
901 NTSYSAPI VOID WINAPI
RtlInitializeSListHead(PSLIST_HEADER
);
902 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedFlushSList(PSLIST_HEADER
);
903 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedPopEntrySList(PSLIST_HEADER
);
904 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedPushEntrySList(PSLIST_HEADER
, PSLIST_ENTRY
);
905 NTSYSAPI WORD WINAPI
RtlQueryDepthSList(PSLIST_HEADER
);
910 #define HEAP_NO_SERIALIZE 0x00000001
911 #define HEAP_GROWABLE 0x00000002
912 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
913 #define HEAP_ZERO_MEMORY 0x00000008
914 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
915 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
916 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
917 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
918 #define HEAP_CREATE_ALIGN_16 0x00010000
919 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
920 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
922 /* This flag allows it to create heaps shared by all processes under win95,
923 FIXME: correct name */
924 #define HEAP_SHARED 0x04000000
926 typedef enum _HEAP_INFORMATION_CLASS
{
927 HeapCompatibilityInformation
,
928 } HEAP_INFORMATION_CLASS
;
930 /* Processor feature flags. */
931 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
932 #define PF_FLOATING_POINT_EMULATED 1
933 #define PF_COMPARE_EXCHANGE_DOUBLE 2
934 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
935 #define PF_PPC_MOVEMEM_64BIT_OK 4
936 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
937 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
938 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
939 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
940 #define PF_PAE_ENABLED 9
941 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
942 #define PF_SSE_DAZ_MODE_AVAILABLE 11
943 #define PF_NX_ENABLED 12
944 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
945 #define PF_COMPARE_EXCHANGE128 14
946 #define PF_COMPARE64_EXCHANGE128 15
947 #define PF_CHANNELS_ENABLED 16
948 #define PF_XSAVE_ENABLED 17
949 #define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
950 #define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
951 #define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
952 #define PF_VIRT_FIRMWARE_ENABLED 21
953 #define PF_RDWRFSGSBASE_AVAILABLE 22
954 #define PF_FASTFAIL_AVAILABLE 23
955 #define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
956 #define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
957 #define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
958 #define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
959 #define PF_RDRAND_INSTRUCTION_AVAILABLE 28
960 #define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
961 #define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
962 #define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
963 #define PF_RDTSCP_INSTRUCTION_AVAILABLE 32
964 #define PF_RDPID_INSTRUCTION_AVAILABLE 33
965 #define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34
966 #define PF_MONITORX_INSTRUCTION_AVAILABLE 35
967 #define PF_SSSE3_INSTRUCTIONS_AVAILABLE 36
968 #define PF_SSE4_1_INSTRUCTIONS_AVAILABLE 37
969 #define PF_SSE4_2_INSTRUCTIONS_AVAILABLE 38
970 #define PF_AVX_INSTRUCTIONS_AVAILABLE 39
971 #define PF_AVX2_INSTRUCTIONS_AVAILABLE 40
972 #define PF_AVX512F_INSTRUCTIONS_AVAILABLE 41
975 /* Execution state flags */
976 #define ES_SYSTEM_REQUIRED 0x00000001
977 #define ES_DISPLAY_REQUIRED 0x00000002
978 #define ES_USER_PRESENT 0x00000004
979 #define ES_CONTINUOUS 0x80000000
984 struct _EXCEPTION_POINTERS
;
985 struct _EXCEPTION_RECORD
;
987 typedef EXCEPTION_DISPOSITION WINAPI
EXCEPTION_ROUTINE(struct _EXCEPTION_RECORD
*,PVOID
,
988 struct _CONTEXT
*,PVOID
);
989 typedef EXCEPTION_ROUTINE
*PEXCEPTION_ROUTINE
;
991 /* The Win32 register context */
993 /* i386 context definitions */
996 #define SIZE_OF_80387_REGISTERS 80
998 typedef struct _FLOATING_SAVE_AREA
1004 DWORD ErrorSelector
;
1007 BYTE RegisterArea
[SIZE_OF_80387_REGISTERS
];
1009 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1011 #define MAXIMUM_SUPPORTED_EXTENSION 512
1013 typedef struct _CONTEXT
1015 DWORD ContextFlags
; /* 000 */
1017 /* These are selected by CONTEXT_DEBUG_REGISTERS */
1018 DWORD Dr0
; /* 004 */
1019 DWORD Dr1
; /* 008 */
1020 DWORD Dr2
; /* 00c */
1021 DWORD Dr3
; /* 010 */
1022 DWORD Dr6
; /* 014 */
1023 DWORD Dr7
; /* 018 */
1025 /* These are selected by CONTEXT_FLOATING_POINT */
1026 FLOATING_SAVE_AREA FloatSave
; /* 01c */
1028 /* These are selected by CONTEXT_SEGMENTS */
1029 DWORD SegGs
; /* 08c */
1030 DWORD SegFs
; /* 090 */
1031 DWORD SegEs
; /* 094 */
1032 DWORD SegDs
; /* 098 */
1034 /* These are selected by CONTEXT_INTEGER */
1035 DWORD Edi
; /* 09c */
1036 DWORD Esi
; /* 0a0 */
1037 DWORD Ebx
; /* 0a4 */
1038 DWORD Edx
; /* 0a8 */
1039 DWORD Ecx
; /* 0ac */
1040 DWORD Eax
; /* 0b0 */
1042 /* These are selected by CONTEXT_CONTROL */
1043 DWORD Ebp
; /* 0b4 */
1044 DWORD Eip
; /* 0b8 */
1045 DWORD SegCs
; /* 0bc */
1046 DWORD EFlags
; /* 0c0 */
1047 DWORD Esp
; /* 0c4 */
1048 DWORD SegSs
; /* 0c8 */
1050 BYTE ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
]; /* 0xcc */
1051 } CONTEXT
, *PCONTEXT
;
1053 #define CONTEXT_X86 0x00010000
1054 #define CONTEXT_i386 CONTEXT_X86
1055 #define CONTEXT_i486 CONTEXT_X86
1057 #define CONTEXT_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
1058 #define CONTEXT_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
1059 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
1060 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x0008) /* 387 state */
1061 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010) /* DB 0-3,6,7 */
1062 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020)
1063 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x0040)
1064 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
1065 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
1066 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
1068 #define EXCEPTION_READ_FAULT 0
1069 #define EXCEPTION_WRITE_FAULT 1
1070 #define EXCEPTION_EXECUTE_FAULT 8
1072 #endif /* __i386__ */
1074 typedef struct _LDT_ENTRY
{
1085 unsigned BaseMid
: 8;
1089 unsigned LimitHi
: 4;
1091 unsigned Reserved_0
: 1;
1092 unsigned Default_Big
: 1;
1093 unsigned Granularity
: 1;
1094 unsigned BaseHi
: 8;
1097 } LDT_ENTRY
, *PLDT_ENTRY
, WOW64_LDT_ENTRY
, *PWOW64_LDT_ENTRY
;
1099 typedef struct DECLSPEC_ALIGN(16) _M128A
{
1104 typedef struct _XSAVE_FORMAT
{
1105 WORD ControlWord
; /* 000 */
1106 WORD StatusWord
; /* 002 */
1107 BYTE TagWord
; /* 004 */
1108 BYTE Reserved1
; /* 005 */
1109 WORD ErrorOpcode
; /* 006 */
1110 DWORD ErrorOffset
; /* 008 */
1111 WORD ErrorSelector
; /* 00c */
1112 WORD Reserved2
; /* 00e */
1113 DWORD DataOffset
; /* 010 */
1114 WORD DataSelector
; /* 014 */
1115 WORD Reserved3
; /* 016 */
1116 DWORD MxCsr
; /* 018 */
1117 DWORD MxCsr_Mask
; /* 01c */
1118 M128A FloatRegisters
[8]; /* 020 */
1119 M128A XmmRegisters
[16]; /* 0a0 */
1120 BYTE Reserved4
[96]; /* 1a0 */
1121 } XSAVE_FORMAT
, *PXSAVE_FORMAT
;
1123 /* x86-64 context definitions */
1124 #if defined(__x86_64__)
1126 #define CONTEXT_AMD64 0x00100000
1128 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x0001)
1129 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x0002)
1130 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x0004)
1131 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x0008)
1132 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010)
1133 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x0040)
1134 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1135 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1137 #define EXCEPTION_READ_FAULT 0
1138 #define EXCEPTION_WRITE_FAULT 1
1139 #define EXCEPTION_EXECUTE_FAULT 8
1141 typedef XSAVE_FORMAT XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
1143 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1144 DWORD64 P1Home
; /* 000 */
1145 DWORD64 P2Home
; /* 008 */
1146 DWORD64 P3Home
; /* 010 */
1147 DWORD64 P4Home
; /* 018 */
1148 DWORD64 P5Home
; /* 020 */
1149 DWORD64 P6Home
; /* 028 */
1152 DWORD ContextFlags
; /* 030 */
1153 DWORD MxCsr
; /* 034 */
1156 WORD SegCs
; /* 038 */
1157 WORD SegDs
; /* 03a */
1158 WORD SegEs
; /* 03c */
1159 WORD SegFs
; /* 03e */
1160 WORD SegGs
; /* 040 */
1161 WORD SegSs
; /* 042 */
1162 DWORD EFlags
; /* 044 */
1165 DWORD64 Dr0
; /* 048 */
1166 DWORD64 Dr1
; /* 050 */
1167 DWORD64 Dr2
; /* 058 */
1168 DWORD64 Dr3
; /* 060 */
1169 DWORD64 Dr6
; /* 068 */
1170 DWORD64 Dr7
; /* 070 */
1173 DWORD64 Rax
; /* 078 */
1174 DWORD64 Rcx
; /* 080 */
1175 DWORD64 Rdx
; /* 088 */
1176 DWORD64 Rbx
; /* 090 */
1177 DWORD64 Rsp
; /* 098 */
1178 DWORD64 Rbp
; /* 0a0 */
1179 DWORD64 Rsi
; /* 0a8 */
1180 DWORD64 Rdi
; /* 0b0 */
1181 DWORD64 R8
; /* 0b8 */
1182 DWORD64 R9
; /* 0c0 */
1183 DWORD64 R10
; /* 0c8 */
1184 DWORD64 R11
; /* 0d0 */
1185 DWORD64 R12
; /* 0d8 */
1186 DWORD64 R13
; /* 0e0 */
1187 DWORD64 R14
; /* 0e8 */
1188 DWORD64 R15
; /* 0f0 */
1191 DWORD64 Rip
; /* 0f8 */
1193 /* Floating point */
1195 XMM_SAVE_AREA32 FltSave
; /* 100 */
1197 M128A Header
[2]; /* 100 */
1198 M128A Legacy
[8]; /* 120 */
1199 M128A Xmm0
; /* 1a0 */
1200 M128A Xmm1
; /* 1b0 */
1201 M128A Xmm2
; /* 1c0 */
1202 M128A Xmm3
; /* 1d0 */
1203 M128A Xmm4
; /* 1e0 */
1204 M128A Xmm5
; /* 1f0 */
1205 M128A Xmm6
; /* 200 */
1206 M128A Xmm7
; /* 210 */
1207 M128A Xmm8
; /* 220 */
1208 M128A Xmm9
; /* 230 */
1209 M128A Xmm10
; /* 240 */
1210 M128A Xmm11
; /* 250 */
1211 M128A Xmm12
; /* 260 */
1212 M128A Xmm13
; /* 270 */
1213 M128A Xmm14
; /* 280 */
1214 M128A Xmm15
; /* 290 */
1219 M128A VectorRegister
[26]; /* 300 */
1220 DWORD64 VectorControl
; /* 4a0 */
1223 DWORD64 DebugControl
; /* 4a8 */
1224 DWORD64 LastBranchToRip
; /* 4b0 */
1225 DWORD64 LastBranchFromRip
; /* 4b8 */
1226 DWORD64 LastExceptionToRip
; /* 4c0 */
1227 DWORD64 LastExceptionFromRip
; /* 4c8 */
1228 } CONTEXT
, *PCONTEXT
;
1230 typedef struct _RUNTIME_FUNCTION
1235 } RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1237 #define UNWIND_HISTORY_TABLE_SIZE 12
1239 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
1242 PRUNTIME_FUNCTION FunctionEntry
;
1243 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
1245 #define UNWIND_HISTORY_TABLE_NONE 0
1246 #define UNWIND_HISTORY_TABLE_GLOBAL 1
1247 #define UNWIND_HISTORY_TABLE_LOCAL 2
1249 typedef struct _UNWIND_HISTORY_TABLE
1254 ULONG64 HighAddress
;
1255 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
1256 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
1258 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
1262 PM128A FloatingContext
[16];
1286 PULONG64 IntegerContext
[16];
1307 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1309 typedef struct _DISPATCHER_CONTEXT
1313 PRUNTIME_FUNCTION FunctionEntry
;
1314 ULONG64 EstablisherFrame
;
1316 PCONTEXT ContextRecord
;
1317 PEXCEPTION_ROUTINE LanguageHandler
;
1319 PUNWIND_HISTORY_TABLE HistoryTable
;
1322 } DISPATCHER_CONTEXT
, *PDISPATCHER_CONTEXT
;
1324 typedef LONG (CALLBACK
*PEXCEPTION_FILTER
)(struct _EXCEPTION_POINTERS
*,PVOID
);
1325 typedef void (CALLBACK
*PTERMINATION_HANDLER
)(BOOLEAN
,PVOID
);
1327 NTSYSAPI PVOID WINAPI
RtlVirtualUnwind(ULONG
,ULONG64
,ULONG64
,RUNTIME_FUNCTION
*,CONTEXT
*,PVOID
*,ULONG64
*,KNONVOLATILE_CONTEXT_POINTERS
*);
1329 #define UNW_FLAG_NHANDLER 0
1330 #define UNW_FLAG_EHANDLER 1
1331 #define UNW_FLAG_UHANDLER 2
1332 #define UNW_FLAG_CHAININFO 4
1334 #endif /* __x86_64__ */
1336 #define XSTATE_LEGACY_FLOATING_POINT 0
1337 #define XSTATE_LEGACY_SSE 1
1338 #define XSTATE_GSSE 2
1339 #define XSTATE_AVX XSTATE_GSSE
1340 #define XSTATE_MPX_BNDREGS 3
1341 #define XSTATE_MPX_BNDCSR 4
1342 #define XSTATE_AVX512_KMASK 5
1343 #define XSTATE_AVX512_ZMM_H 6
1344 #define XSTATE_AVX512_ZMM 7
1345 #define XSTATE_IPT 8
1346 #define XSTATE_CET_U 11
1347 #define XSTATE_LWP 62
1348 #define MAXIMUM_XSTATE_FEATURES 64
1350 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1 << XSTATE_LEGACY_FLOATING_POINT)
1351 #define XSTATE_MASK_LEGACY_SSE (1 << XSTATE_LEGACY_SSE)
1352 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1353 #define XSTATE_MASK_GSSE (1 << XSTATE_GSSE)
1355 typedef struct _XSTATE_FEATURE
1359 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1361 typedef struct _XSTATE_CONFIGURATION
1363 ULONG64 EnabledFeatures
;
1364 ULONG64 EnabledVolatileFeatures
;
1366 ULONG OptimizedSave
:1;
1367 ULONG CompactionEnabled
:1;
1368 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1370 ULONG64 EnabledSupervisorFeatures
;
1371 ULONG64 AlignedFeatures
;
1372 ULONG AllFeatureSize
;
1373 ULONG AllFeatures
[MAXIMUM_XSTATE_FEATURES
];
1374 ULONG64 EnabledUserVisibleSupervisorFeatures
;
1375 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1377 typedef struct _YMMCONTEXT
1396 YMMCONTEXT
, *PYMMCONTEXT
;
1398 typedef struct _XSTATE
1401 ULONG64 CompactionMask
;
1402 ULONG64 Reserved
[6];
1403 YMMCONTEXT YmmContext
;
1406 typedef struct _CONTEXT_CHUNK
1410 } CONTEXT_CHUNK
, *PCONTEXT_CHUNK
;
1412 typedef struct _CONTEXT_EX
1415 CONTEXT_CHUNK Legacy
;
1416 CONTEXT_CHUNK XState
;
1420 } CONTEXT_EX
, *PCONTEXT_EX
;
1422 /* IA64 context definitions */
1425 #define CONTEXT_IA64 0x00080000
1426 #define CONTEXT_CONTROL (CONTEXT_IA64 | 0x00000001)
1427 #define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | 0x00000002)
1428 #define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004)
1429 #define CONTEXT_INTEGER (CONTEXT_IA64 | 0x00000008)
1430 #define CONTEXT_DEBUG (CONTEXT_IA64 | 0x00000010)
1431 #define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | 0x00000020)
1432 #define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)
1433 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
1434 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
1436 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1437 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1438 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1439 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1441 typedef struct _CONTEXT
1636 ULONGLONG RsBSPSTORE
;
1650 ULONGLONG UNUSEDPACK
;
1651 } CONTEXT
, *PCONTEXT
;
1653 typedef struct _RUNTIME_FUNCTION
1657 ULONG UnwindInfoAddress
;
1658 } RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1660 typedef struct _FRAME_POINTERS
{
1661 ULONGLONG MemoryStackFp
;
1662 ULONGLONG BackingStoreFp
;
1663 } FRAME_POINTERS
, *PFRAME_POINTERS
;
1665 #define UNWIND_HISTORY_TABLE_SIZE 12
1667 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
{
1670 PRUNTIME_FUNCTION FunctionEntry
;
1671 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
1673 typedef struct _UNWIND_HISTORY_TABLE
{
1677 ULONG64 HighAddress
;
1678 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
1679 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
1681 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
1687 PFLOAT128 HighFloatingContext
[10];
1709 PULONGLONG IntS0Nat
;
1710 PULONGLONG IntS1Nat
;
1711 PULONGLONG IntS2Nat
;
1712 PULONGLONG IntS3Nat
;
1713 PULONGLONG IntSpNat
;
1729 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1731 NTSYSAPI ULONGLONG WINAPI
RtlVirtualUnwind(ULONGLONG
,ULONGLONG
,RUNTIME_FUNCTION
*,CONTEXT
*,BOOLEAN
*,FRAME_POINTERS
*,KNONVOLATILE_CONTEXT_POINTERS
*);
1733 #endif /* __ia64__ */
1735 /* Alpha context definitions */
1736 #if defined(_ALPHA_) || defined(__ALPHA__) || defined(__alpha__)
1738 #define CONTEXT_ALPHA 0x00020000
1740 #define CONTEXT_CONTROL (CONTEXT_ALPHA | 0x00000001)
1741 #define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA | 0x00000002)
1742 #define CONTEXT_INTEGER (CONTEXT_ALPHA | 0x00000004)
1743 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
1745 #define EXCEPTION_READ_FAULT 0
1746 #define EXCEPTION_WRITE_FAULT 1
1747 #define EXCEPTION_EXECUTE_FAULT 8
1749 typedef struct _CONTEXT
1751 /* selected by CONTEXT_FLOATING_POINT */
1785 /* selected by CONTEXT_INTEGER */
1819 /* selected by CONTEXT_FLOATING_POINT */
1823 /* selected by CONTEXT_CONTROL */
1828 } CONTEXT
, *PCONTEXT
;
1830 #define _QUAD_PSR_OFFSET HighSoftFpcr
1831 #define _QUAD_FLAGS_OFFSET HighFir
1833 #endif /* _ALPHA_ */
1837 /* The following flags control the contents of the CONTEXT structure. */
1839 #define CONTEXT_ARM 0x0200000
1840 #define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001)
1841 #define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002)
1842 #define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x00000004)
1843 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
1845 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
1846 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1848 #define EXCEPTION_READ_FAULT 0
1849 #define EXCEPTION_WRITE_FAULT 1
1850 #define EXCEPTION_EXECUTE_FAULT 8
1852 #define ARM_MAX_BREAKPOINTS 8
1853 #define ARM_MAX_WATCHPOINTS 1
1855 typedef struct _RUNTIME_FUNCTION
1862 DWORD FunctionLength
: 11;
1869 DWORD StackAdjust
: 10;
1872 } RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1874 #define UNWIND_HISTORY_TABLE_SIZE 12
1876 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
1879 PRUNTIME_FUNCTION FunctionEntry
;
1880 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
1882 typedef struct _UNWIND_HISTORY_TABLE
1891 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
1892 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
1894 typedef struct _NEON128
1898 } NEON128
, *PNEON128
;
1900 typedef struct _CONTEXT
1902 ULONG ContextFlags
; /* 000 */
1903 /* CONTEXT_INTEGER */
1914 ULONG R10
; /* 02c */
1915 ULONG R11
; /* 030 */
1916 ULONG R12
; /* 034 */
1917 /* CONTEXT_CONTROL */
1921 ULONG Cpsr
; /* 044 */
1922 /* CONTEXT_FLOATING_POINT */
1923 ULONG Fpscr
; /* 048 */
1924 ULONG Padding
; /* 04c */
1930 } DUMMYUNIONNAME
; /* 050 */
1931 /* CONTEXT_DEBUG_REGISTERS */
1932 ULONG Bvr
[ARM_MAX_BREAKPOINTS
]; /* 150 */
1933 ULONG Bcr
[ARM_MAX_BREAKPOINTS
]; /* 170 */
1934 ULONG Wvr
[ARM_MAX_WATCHPOINTS
]; /* 190 */
1935 ULONG Wcr
[ARM_MAX_WATCHPOINTS
]; /* 194 */
1936 ULONG Padding2
[2]; /* 198 */
1937 } CONTEXT
, *PCONTEXT
;
1939 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
1958 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1960 typedef struct _DISPATCHER_CONTEXT
1964 PRUNTIME_FUNCTION FunctionEntry
;
1965 DWORD EstablisherFrame
;
1967 PCONTEXT ContextRecord
;
1968 PEXCEPTION_ROUTINE LanguageHandler
;
1970 PUNWIND_HISTORY_TABLE HistoryTable
;
1972 BOOLEAN ControlPcIsUnwound
;
1973 PBYTE NonVolatileRegisters
;
1975 } DISPATCHER_CONTEXT
, *PDISPATCHER_CONTEXT
;
1977 typedef LONG (CALLBACK
*PEXCEPTION_FILTER
)(struct _EXCEPTION_POINTERS
*,DWORD
);
1978 typedef void (CALLBACK
*PTERMINATION_HANDLER
)(BOOLEAN
,DWORD
);
1980 NTSYSAPI PVOID WINAPI
RtlVirtualUnwind(DWORD
,DWORD
,DWORD
,RUNTIME_FUNCTION
*,CONTEXT
*,PVOID
*,DWORD
*,KNONVOLATILE_CONTEXT_POINTERS
*);
1982 #define UNW_FLAG_NHANDLER 0
1983 #define UNW_FLAG_EHANDLER 1
1984 #define UNW_FLAG_UHANDLER 2
1986 #endif /* __arm__ */
1990 #define CONTEXT_ARM64 0x400000
1991 #define CONTEXT_CONTROL (CONTEXT_ARM64 | 0x00000001)
1992 #define CONTEXT_INTEGER (CONTEXT_ARM64 | 0x00000002)
1993 #define CONTEXT_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004)
1994 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
1995 #define CONTEXT_ARM64_X18 (CONTEXT_ARM64 | 0x00000010)
1997 #define CONTEXT_UNWOUND_TO_CALL 0x20000000
1999 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
2000 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_ARM64_X18)
2002 #define EXCEPTION_READ_FAULT 0
2003 #define EXCEPTION_WRITE_FAULT 1
2004 #define EXCEPTION_EXECUTE_FAULT 8
2006 #define ARM64_MAX_BREAKPOINTS 8
2007 #define ARM64_MAX_WATCHPOINTS 2
2009 typedef struct _RUNTIME_FUNCTION
2018 DWORD FunctionLength
: 11;
2023 DWORD FrameSize
: 9;
2026 } RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
2028 #define UNWIND_HISTORY_TABLE_SIZE 12
2030 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
2033 PRUNTIME_FUNCTION FunctionEntry
;
2034 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
2036 typedef struct _UNWIND_HISTORY_TABLE
2044 DWORD64 HighAddress
;
2045 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
2046 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
2048 typedef union _NEON128
2059 } NEON128
, *PNEON128
;
2061 typedef struct _CONTEXT
2063 ULONG ContextFlags
; /* 000 */
2064 /* CONTEXT_INTEGER */
2065 ULONG Cpsr
; /* 004 */
2070 DWORD64 X0
; /* 008 */
2071 DWORD64 X1
; /* 010 */
2072 DWORD64 X2
; /* 018 */
2073 DWORD64 X3
; /* 020 */
2074 DWORD64 X4
; /* 028 */
2075 DWORD64 X5
; /* 030 */
2076 DWORD64 X6
; /* 038 */
2077 DWORD64 X7
; /* 040 */
2078 DWORD64 X8
; /* 048 */
2079 DWORD64 X9
; /* 050 */
2080 DWORD64 X10
; /* 058 */
2081 DWORD64 X11
; /* 060 */
2082 DWORD64 X12
; /* 068 */
2083 DWORD64 X13
; /* 070 */
2084 DWORD64 X14
; /* 078 */
2085 DWORD64 X15
; /* 080 */
2086 DWORD64 X16
; /* 088 */
2087 DWORD64 X17
; /* 090 */
2088 DWORD64 X18
; /* 098 */
2089 DWORD64 X19
; /* 0a0 */
2090 DWORD64 X20
; /* 0a8 */
2091 DWORD64 X21
; /* 0b0 */
2092 DWORD64 X22
; /* 0b8 */
2093 DWORD64 X23
; /* 0c0 */
2094 DWORD64 X24
; /* 0c8 */
2095 DWORD64 X25
; /* 0d0 */
2096 DWORD64 X26
; /* 0d8 */
2097 DWORD64 X27
; /* 0e0 */
2098 DWORD64 X28
; /* 0e8 */
2099 DWORD64 Fp
; /* 0f0 */
2100 DWORD64 Lr
; /* 0f8 */
2102 DWORD64 X
[31]; /* 008 */
2104 /* CONTEXT_CONTROL */
2105 DWORD64 Sp
; /* 100 */
2106 DWORD64 Pc
; /* 108 */
2107 /* CONTEXT_FLOATING_POINT */
2108 NEON128 V
[32]; /* 110 */
2109 DWORD Fpcr
; /* 310 */
2110 DWORD Fpsr
; /* 314 */
2111 /* CONTEXT_DEBUG_REGISTERS */
2112 DWORD Bcr
[ARM64_MAX_BREAKPOINTS
]; /* 318 */
2113 DWORD64 Bvr
[ARM64_MAX_BREAKPOINTS
]; /* 338 */
2114 DWORD Wcr
[ARM64_MAX_WATCHPOINTS
]; /* 378 */
2115 DWORD64 Wvr
[ARM64_MAX_WATCHPOINTS
]; /* 380 */
2116 } CONTEXT
, *PCONTEXT
;
2118 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
2140 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
2142 typedef struct _DISPATCHER_CONTEXT
2144 ULONG_PTR ControlPc
;
2145 ULONG_PTR ImageBase
;
2146 PRUNTIME_FUNCTION FunctionEntry
;
2147 ULONG_PTR EstablisherFrame
;
2149 PCONTEXT ContextRecord
;
2150 PEXCEPTION_ROUTINE LanguageHandler
;
2152 PUNWIND_HISTORY_TABLE HistoryTable
;
2154 BOOLEAN ControlPcIsUnwound
;
2155 PBYTE NonVolatileRegisters
;
2156 } DISPATCHER_CONTEXT
, *PDISPATCHER_CONTEXT
;
2158 typedef LONG (CALLBACK
*PEXCEPTION_FILTER
)(struct _EXCEPTION_POINTERS
*,DWORD64
);
2159 typedef void (CALLBACK
*PTERMINATION_HANDLER
)(BOOLEAN
,DWORD64
);
2161 NTSYSAPI PVOID WINAPI
RtlVirtualUnwind(DWORD
,ULONG_PTR
,ULONG_PTR
,RUNTIME_FUNCTION
*,CONTEXT
*,PVOID
*,ULONG_PTR
*,KNONVOLATILE_CONTEXT_POINTERS
*);
2163 #define UNW_FLAG_NHANDLER 0
2164 #define UNW_FLAG_EHANDLER 1
2165 #define UNW_FLAG_UHANDLER 2
2167 #endif /* __aarch64__ */
2170 /* Mips context definitions */
2171 #if defined(_MIPS_) || defined(__MIPS__) || defined(__mips__)
2173 #define CONTEXT_R4000 0x00010000
2175 #define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001)
2176 #define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002)
2177 #define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004)
2179 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
2181 #define EXCEPTION_READ_FAULT 0
2182 #define EXCEPTION_WRITE_FAULT 1
2183 #define EXCEPTION_EXECUTE_FAULT 8
2185 typedef struct _CONTEXT
2188 /* These are selected by CONTEXT_FLOATING_POINT */
2222 /* These are selected by CONTEXT_INTEGER */
2258 /* These are selected by CONTEXT_FLOATING_POINT */
2261 /* These are selected by CONTEXT_CONTROL */
2267 } CONTEXT
, *PCONTEXT
;
2271 /* PowerPC context definitions */
2274 #define CONTEXT_CONTROL 0x0001
2275 #define CONTEXT_FLOATING_POINT 0x0002
2276 #define CONTEXT_INTEGER 0x0004
2277 #define CONTEXT_DEBUG_REGISTERS 0x0008
2278 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
2280 #define EXCEPTION_READ_FAULT 0
2281 #define EXCEPTION_WRITE_FAULT 1
2282 #define EXCEPTION_EXECUTE_FAULT 8
2286 /* These are selected by CONTEXT_FLOATING_POINT */
2321 /* These are selected by CONTEXT_INTEGER */
2358 /* These are selected by CONTEXT_CONTROL */
2360 DWORD Iar
; /* Instruction Address Register , aka PC ... */
2366 DWORD Dar
; /* Fault registers for coredump */
2368 DWORD Trap
; /* number of powerpc exception taken */
2370 /* These are selected by CONTEXT_DEBUG_REGISTERS */
2379 } CONTEXT
, *PCONTEXT
;
2381 typedef struct _STACK_FRAME_HEADER
2398 } STACK_FRAME_HEADER
,*PSTACK_FRAME_HEADER
;
2400 #endif /* __powerpc__ */
2402 #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
2403 #error You need to define a CONTEXT for your CPU
2406 NTSYSAPI
void WINAPI
RtlCaptureContext(CONTEXT
*);
2408 #define WOW64_CONTEXT_i386 0x00010000
2409 #define WOW64_CONTEXT_i486 0x00010000
2410 #define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000001))
2411 #define WOW64_CONTEXT_INTEGER (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000002))
2412 #define WOW64_CONTEXT_SEGMENTS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000004))
2413 #define WOW64_CONTEXT_FLOATING_POINT (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000008))
2414 #define WOW64_CONTEXT_DEBUG_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000010))
2415 #define WOW64_CONTEXT_EXTENDED_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000020))
2416 #define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040))
2417 #define WOW64_CONTEXT_FULL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS)
2418 #define WOW64_CONTEXT_ALL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | \
2419 WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | \
2420 WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS)
2422 #define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040))
2424 #define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x08000000
2425 #define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000
2426 #define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000
2427 #define WOW64_CONTEXT_EXCEPTION_REPORTING 0x80000000
2429 #define WOW64_SIZE_OF_80387_REGISTERS 80
2430 #define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512
2432 typedef struct _WOW64_FLOATING_SAVE_AREA
2438 DWORD ErrorSelector
;
2441 BYTE RegisterArea
[WOW64_SIZE_OF_80387_REGISTERS
];
2443 } WOW64_FLOATING_SAVE_AREA
, *PWOW64_FLOATING_SAVE_AREA
;
2445 #include "pshpack4.h"
2446 typedef struct _WOW64_CONTEXT
2455 WOW64_FLOATING_SAVE_AREA FloatSave
;
2472 BYTE ExtendedRegisters
[WOW64_MAXIMUM_SUPPORTED_EXTENSION
];
2473 } WOW64_CONTEXT
, *PWOW64_CONTEXT
;
2474 #include "poppack.h"
2476 #if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
2478 typedef PRUNTIME_FUNCTION (CALLBACK
*PGET_RUNTIME_FUNCTION_CALLBACK
)(DWORD_PTR
,PVOID
);
2480 NTSYSAPI BOOLEAN CDECL
RtlAddFunctionTable(RUNTIME_FUNCTION
*,DWORD
,DWORD_PTR
);
2481 NTSYSAPI DWORD WINAPI
RtlAddGrowableFunctionTable(void**,PRUNTIME_FUNCTION
,DWORD
,DWORD
,ULONG_PTR
,ULONG_PTR
);
2482 NTSYSAPI BOOLEAN CDECL
RtlDeleteFunctionTable(RUNTIME_FUNCTION
*);
2483 NTSYSAPI
void WINAPI
RtlDeleteGrowableFunctionTable(void*);
2484 NTSYSAPI
void WINAPI
RtlGrowFunctionTable(void*,DWORD
);
2485 NTSYSAPI BOOLEAN CDECL
RtlInstallFunctionTableCallback(DWORD_PTR
,DWORD_PTR
,DWORD
,PGET_RUNTIME_FUNCTION_CALLBACK
,PVOID
,PCWSTR
);
2486 NTSYSAPI PRUNTIME_FUNCTION WINAPI
RtlLookupFunctionEntry(DWORD_PTR
,DWORD_PTR
*,UNWIND_HISTORY_TABLE
*);
2487 NTSYSAPI
void WINAPI
RtlUnwindEx(PVOID
,PVOID
,struct _EXCEPTION_RECORD
*,PVOID
,CONTEXT
*,UNWIND_HISTORY_TABLE
*);
2493 #define PRODUCT_UNDEFINED 0x00000000
2494 #define PRODUCT_ULTIMATE 0x00000001
2495 #define PRODUCT_HOME_BASIC 0x00000002
2496 #define PRODUCT_HOME_PREMIUM 0x00000003
2497 #define PRODUCT_ENTERPRISE 0x00000004
2498 #define PRODUCT_HOME_BASIC_N 0x00000005
2499 #define PRODUCT_BUSINESS 0x00000006
2500 #define PRODUCT_STANDARD_SERVER 0x00000007
2501 #define PRODUCT_DATACENTER_SERVER 0x00000008
2502 #define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
2503 #define PRODUCT_ENTERPRISE_SERVER 0x0000000A
2504 #define PRODUCT_STARTER 0x0000000B
2505 #define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
2506 #define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
2507 #define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
2508 #define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
2509 #define PRODUCT_BUSINESS_N 0x00000010
2510 #define PRODUCT_WEB_SERVER 0x00000011
2511 #define PRODUCT_CLUSTER_SERVER 0x00000012
2512 #define PRODUCT_HOME_SERVER 0x00000013
2513 #define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
2514 #define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
2515 #define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
2516 #define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
2517 #define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
2518 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019
2519 #define PRODUCT_HOME_PREMIUM_N 0x0000001A
2520 #define PRODUCT_ENTERPRISE_N 0x0000001B
2521 #define PRODUCT_ULTIMATE_N 0x0000001C
2522 #define PRODUCT_WEB_SERVER_CORE 0x0000001D
2523 #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
2524 #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
2525 #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
2526 #define PRODUCT_SERVER_FOUNDATION 0x00000021
2527 #define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
2528 #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
2529 #define PRODUCT_STANDARD_SERVER_V 0x00000024
2530 #define PRODUCT_DATACENTER_SERVER_V 0x00000025
2531 #define PRODUCT_SERVER_V 0x00000025
2532 #define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
2533 #define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
2534 #define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
2535 #define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
2536 #define PRODUCT_HYPERV 0x0000002A
2537 #define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B
2538 #define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C
2539 #define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D
2540 #define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E
2541 #define PRODUCT_STARTER_N 0x0000002F
2542 #define PRODUCT_PROFESSIONAL 0x00000030
2543 #define PRODUCT_PROFESSIONAL_N 0x00000031
2544 #define PRODUCT_SB_SOLUTION_SERVER 0x00000032
2545 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
2546 #define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
2547 #define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
2548 #define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
2549 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
2550 #define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
2551 #define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x00000039
2552 #define PRODUCT_PROFESSIONAL_EMBEDDED 0x0000003A
2553 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B
2554 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C
2555 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D
2556 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E
2557 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F
2558 #define PRODUCT_CLUSTER_SERVER_V 0x00000040
2559 #define PRODUCT_EMBEDDED 0x00000041
2560 #define PRODUCT_STARTER_E 0x00000042
2561 #define PRODUCT_HOME_BASIC_E 0x00000043
2562 #define PRODUCT_HOME_PREMIUM_E 0x00000044
2563 #define PRODUCT_PROFESSIONAL_E 0x00000045
2564 #define PRODUCT_ENTERPRISE_E 0x00000046
2565 #define PRODUCT_ULTIMATE_E 0x00000047
2566 #define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
2567 #define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C
2568 #define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D
2569 #define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F
2570 #define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050
2571 #define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054
2572 #define PRODUCT_EMBEDDED_AUTOMOTIVE 0x00000055
2573 #define PRODUCT_EMBEDDED_INDUSTRY_A 0x00000056
2574 #define PRODUCT_THINPC 0x00000057
2575 #define PRODUCT_EMBEDDED_A 0x00000058
2576 #define PRODUCT_EMBEDDED_INDUSTRY 0x00000059
2577 #define PRODUCT_EMBEDDED_E 0x0000005A
2578 #define PRODUCT_EMBEDDED_INDUSTRY_E 0x0000005B
2579 #define PRODUCT_EMBEDDED_INDUSTRY_A_E 0x0000005C
2580 #define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F
2581 #define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060
2582 #define PRODUCT_CORE_ARM 0x00000061
2583 #define PRODUCT_CORE_N 0x00000062
2584 #define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063
2585 #define PRODUCT_CORE_SINGLELANGUAGE 0x00000064
2586 #define PRODUCT_CORE_LANGUAGESPECIFIC 0x00000064
2587 #define PRODUCT_CORE 0x00000065
2588 #define PRODUCT_PROFESSIONAL_WMC 0x00000067
2589 #define PRODUCT_MOBILE_CORE 0x00000068
2590 #define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x00000069
2591 #define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x0000006A
2592 #define PRODUCT_EMBEDDED_EVAL 0x0000006B
2593 #define PRODUCT_EMBEDDED_E_EVAL 0x0000006C
2594 #define PRODUCT_NANO_SERVER 0x0000006D
2595 #define PRODUCT_CLOUD_STORAGE_SERVER 0x0000006E
2596 #define PRODUCT_CORE_CONNECTED 0x0000006F
2597 #define PRODUCT_PROFESSIONAL_STUDENT 0x00000070
2598 #define PRODUCT_CORE_CONNECTED_N 0x00000071
2599 #define PRODUCT_PROFESSIONAL_STUDENT_N 0x00000072
2600 #define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x00000073
2601 #define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC 0x00000074
2602 #define PRODUCT_CONNECTED_CAR 0x00000075
2603 #define PRODUCT_INDUSTRY_HANDHELD 0x00000076
2604 #define PRODUCT_PPI_PRO 0x00000077
2605 #define PRODUCT_ARM64_SERVER 0x00000078
2606 #define PRODUCT_EDUCATION 0x00000079
2607 #define PRODUCT_EDUCATION_N 0x0000007A
2608 #define PRODUCT_IOTUAP 0x0000007B
2609 #define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER 0x0000007C
2610 #define PRODUCT_ENTERPRISE_S 0x0000007D
2611 #define PRODUCT_ENTERPRISE_S_N 0x0000007E
2612 #define PRODUCT_PROFESSIONAL_S 0x0000007F
2613 #define PRODUCT_PROFESSIONAL_S_N 0x00000080
2614 #define PRODUCT_ENTERPRISE_S_EVALUATION 0x00000081
2615 #define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x00000082
2616 #define PRODUCT_UNLICENSED 0xABCDABCD
2623 #define MAKELCID(l, s) (MAKELONG(l, s))
2625 #define MAKELANGID(p, s) ((((WORD)(s))<<10) | (WORD)(p))
2626 #define PRIMARYLANGID(l) ((WORD)(l) & 0x3ff)
2627 #define SUBLANGID(l) ((WORD)(l) >> 10)
2629 #define LANGIDFROMLCID(lcid) ((WORD)(lcid))
2630 #define SORTIDFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 16) & 0x0f))
2632 #define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))
2633 #define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))
2634 #define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
2635 #define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))
2636 #define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
2637 #define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
2638 #define LOCALE_CUSTOM_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_DEFAULT),SORT_DEFAULT))
2639 #define LOCALE_CUSTOM_UNSPECIFIED (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_UNSPECIFIED),SORT_DEFAULT))
2640 #define LOCALE_CUSTOM_UI_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_UI_CUSTOM_DEFAULT),SORT_DEFAULT))
2641 #define LOCALE_NAME_MAX_LENGTH 85
2644 #define UNREFERENCED_PARAMETER(u) (void)(u)
2645 #define DBG_UNREFERENCED_PARAMETER(u) (void)(u)
2646 #define DBG_UNREFERENCED_LOCAL_VARIABLE(u) (void)(u)
2652 * Definitions for IsTextUnicode()
2655 #define IS_TEXT_UNICODE_ASCII16 0x0001
2656 #define IS_TEXT_UNICODE_STATISTICS 0x0002
2657 #define IS_TEXT_UNICODE_CONTROLS 0x0004
2658 #define IS_TEXT_UNICODE_SIGNATURE 0x0008
2659 #define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
2660 #define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010
2661 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
2662 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040
2663 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080
2664 #define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0
2665 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100
2666 #define IS_TEXT_UNICODE_ODD_LENGTH 0x0200
2667 #define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400
2668 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00
2669 #define IS_TEXT_UNICODE_NULL_BYTES 0x1000
2670 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000
2672 #define MAXIMUM_WAIT_OBJECTS 64
2673 #define MAXIMUM_SUSPEND_COUNT 127
2675 #define WT_EXECUTEDEFAULT 0x00
2676 #define WT_EXECUTEINIOTHREAD 0x01
2677 #define WT_EXECUTEINUITHREAD 0x02
2678 #define WT_EXECUTEINWAITTHREAD 0x04
2679 #define WT_EXECUTEONLYONCE 0x08
2680 #define WT_EXECUTELONGFUNCTION 0x10
2681 #define WT_EXECUTEINTIMERTHREAD 0x20
2682 #define WT_EXECUTEINPERSISTENTIOTHREAD 0x40
2683 #define WT_EXECUTEINPERSISTENTTHREAD 0x80
2684 #define WT_EXECUTEINLONGTHREAD 0x10
2685 #define WT_EXECUTEDELETEWAIT 0x08
2686 #define WT_TRANSFER_IMPERSONATION 0x0100
2689 #define EXCEPTION_CONTINUABLE 0
2690 #define EXCEPTION_NONCONTINUABLE 0x01
2693 * The exception record used by Win32 to give additional information
2694 * about exception to exception handlers.
2697 #define EXCEPTION_MAXIMUM_PARAMETERS 15
2699 typedef struct _EXCEPTION_RECORD
2701 DWORD ExceptionCode
;
2702 DWORD ExceptionFlags
;
2703 struct _EXCEPTION_RECORD
*ExceptionRecord
;
2705 PVOID ExceptionAddress
;
2706 DWORD NumberParameters
;
2707 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
2708 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
2710 typedef struct _EXCEPTION_RECORD32
2712 DWORD ExceptionCode
;
2713 DWORD ExceptionFlags
;
2714 DWORD ExceptionRecord
;
2715 DWORD ExceptionAddress
;
2716 DWORD NumberParameters
;
2717 DWORD ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
2718 } EXCEPTION_RECORD32
, *PEXCEPTION_RECORD32
;
2720 typedef struct _EXCEPTION_RECORD64
2722 DWORD ExceptionCode
;
2723 DWORD ExceptionFlags
;
2724 DWORD64 ExceptionRecord
;
2725 DWORD64 ExceptionAddress
;
2726 DWORD NumberParameters
;
2727 DWORD __unusedAlignment
;
2728 DWORD64 ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
2729 } EXCEPTION_RECORD64
, *PEXCEPTION_RECORD64
;
2732 * The exception pointers structure passed to exception filters
2733 * in except() and the UnhandledExceptionFilter().
2736 typedef struct _EXCEPTION_POINTERS
2738 PEXCEPTION_RECORD ExceptionRecord
;
2739 PCONTEXT ContextRecord
;
2740 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
2744 * The exception frame, used for registering exception handlers
2745 * Win32 cares only about this, but compilers generally emit
2746 * larger exception frames for their own use.
2749 struct _EXCEPTION_REGISTRATION_RECORD
;
2751 typedef DWORD (CDECL
*PEXCEPTION_HANDLER
)(PEXCEPTION_RECORD
,struct _EXCEPTION_REGISTRATION_RECORD
*,
2752 PCONTEXT
,struct _EXCEPTION_REGISTRATION_RECORD
**);
2754 typedef struct _EXCEPTION_REGISTRATION_RECORD
2756 struct _EXCEPTION_REGISTRATION_RECORD
*Prev
;
2757 PEXCEPTION_HANDLER Handler
;
2758 } EXCEPTION_REGISTRATION_RECORD
;
2761 * function pointer to an exception filter
2764 typedef LONG (CALLBACK
*PVECTORED_EXCEPTION_HANDLER
)(PEXCEPTION_POINTERS ExceptionInfo
);
2766 typedef struct _NT_TIB
2768 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
2776 PVOID ArbitraryUserPointer
;
2777 struct _NT_TIB
*Self
;
2782 #if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
2783 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2786 __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb
));
2789 #elif defined(__i386__) && defined(_MSC_VER)
2790 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2793 __asm mov eax
, fs
:[0x18];
2797 #elif defined(__x86_64__) && defined(__GNUC__)
2798 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2801 __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb
));
2804 #elif defined(__x86_64__) && defined(_MSC_VER)
2805 unsigned __int64
__readgsqword(unsigned long);
2806 #pragma intrinsic(__readgsqword)
2807 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2809 return (struct _TEB
*)__readgsqword(FIELD_OFFSET(NT_TIB
, Self
));
2811 #elif defined(__arm__) && defined(__GNUC__)
2812 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2815 __asm__("mrc p15, 0, %0, c13, c0, 2" : "=r" (teb
));
2818 #elif defined(__arm__) && defined(_MSC_VER)
2819 #pragma intrinsic(_MoveFromCoprocessor)
2820 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2822 return (struct _TEB
*)(ULONG_PTR
)_MoveFromCoprocessor(15, 0, 13, 0, 2);
2825 extern struct _TEB
* WINAPI
NtCurrentTeb(void);
2828 #ifdef NONAMELESSUNION
2829 #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->u.FiberData)
2831 #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->FiberData)
2833 #define GetFiberData() (*(void **)GetCurrentFiber())
2835 #define TLS_MINIMUM_AVAILABLE 64
2837 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 * 1024)
2839 #define IO_REPARSE_TAG_RESERVED_ZERO 0
2840 #define IO_REPARSE_TAG_RESERVED_ONE 1
2841 #define IO_REPARSE_TAG_RESERVED_TWO 2
2843 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_TWO
2845 #define IO_REPARSE_TAG_MOUNT_POINT __MSABI_LONG(0xA0000003)
2846 #define IO_REPARSE_TAG_HSM __MSABI_LONG(0xC0000004)
2847 #define IO_REPARSE_TAG_DRIVE_EXTENDER __MSABI_LONG(0x80000005)
2848 #define IO_REPARSE_TAG_HSM2 __MSABI_LONG(0x80000006)
2849 #define IO_REPARSE_TAG_SIS __MSABI_LONG(0x80000007)
2850 #define IO_REPARSE_TAG_WIM __MSABI_LONG(0x80000008)
2851 #define IO_REPARSE_TAG_CSV __MSABI_LONG(0x80000009)
2852 #define IO_REPARSE_TAG_DFS __MSABI_LONG(0x8000000A)
2853 #define IO_REPARSE_TAG_FILTER_MANAGER __MSABI_LONG(0x8000000B)
2854 #define IO_REPARSE_TAG_SYMLINK __MSABI_LONG(0xA000000C)
2855 #define IO_REPARSE_TAG_IIS_CACHE __MSABI_LONG(0xA0000010)
2856 #define IO_REPARSE_TAG_DFSR __MSABI_LONG(0x80000012)
2857 #define IO_REPARSE_TAG_DEDUP __MSABI_LONG(0x80000013)
2858 #define IO_REPARSE_TAG_NFS __MSABI_LONG(0x80000014)
2859 #define IO_REPARSE_TAG_FILE_PLACEHOLDER __MSABI_LONG(0x80000015)
2860 #define IO_REPARSE_TAG_WOF __MSABI_LONG(0x80000017)
2861 #define IO_REPARSE_TAG_WCI __MSABI_LONG(0x80000018)
2862 #define IO_REPARSE_TAG_WCI_1 __MSABI_LONG(0x90001018)
2863 #define IO_REPARSE_TAG_GLOBAL_REPARSE __MSABI_LONG(0xA0000019)
2864 #define IO_REPARSE_TAG_CLOUD __MSABI_LONG(0x9000001A)
2865 #define IO_REPARSE_TAG_CLOUD_1 __MSABI_LONG(0x9000101A)
2866 #define IO_REPARSE_TAG_CLOUD_2 __MSABI_LONG(0x9000201A)
2867 #define IO_REPARSE_TAG_CLOUD_3 __MSABI_LONG(0x9000301A)
2868 #define IO_REPARSE_TAG_CLOUD_4 __MSABI_LONG(0x9000401A)
2869 #define IO_REPARSE_TAG_CLOUD_5 __MSABI_LONG(0x9000501A)
2870 #define IO_REPARSE_TAG_CLOUD_6 __MSABI_LONG(0x9000601A)
2871 #define IO_REPARSE_TAG_CLOUD_7 __MSABI_LONG(0x9000701A)
2872 #define IO_REPARSE_TAG_CLOUD_8 __MSABI_LONG(0x9000801A)
2873 #define IO_REPARSE_TAG_CLOUD_9 __MSABI_LONG(0x9000901A)
2874 #define IO_REPARSE_TAG_CLOUD_A __MSABI_LONG(0x9000A01A)
2875 #define IO_REPARSE_TAG_CLOUD_B __MSABI_LONG(0x9000B01A)
2876 #define IO_REPARSE_TAG_CLOUD_C __MSABI_LONG(0x9000C01A)
2877 #define IO_REPARSE_TAG_CLOUD_D __MSABI_LONG(0x9000D01A)
2878 #define IO_REPARSE_TAG_CLOUD_E __MSABI_LONG(0x9000E01A)
2879 #define IO_REPARSE_TAG_CLOUD_F __MSABI_LONG(0x9000F01A)
2880 #define IO_REPARSE_TAG_CLOUD_MASK __MSABI_LONG(0x0000F000)
2881 #define IO_REPARSE_TAG_APPEXECLINK __MSABI_LONG(0x8000001B)
2882 #define IO_REPARSE_TAG_GVFS __MSABI_LONG(0x9000001C)
2883 #define IO_REPARSE_TAG_STORAGE_SYNC __MSABI_LONG(0x8000001E)
2884 #define IO_REPARSE_TAG_WCI_TOMBSTONE __MSABI_LONG(0xA000001F)
2885 #define IO_REPARSE_TAG_UNHANDLED __MSABI_LONG(0x80000020)
2886 #define IO_REPARSE_TAG_ONEDRIVE __MSABI_LONG(0x80000021)
2887 #define IO_REPARSE_TAG_GVFS_TOMBSTONE __MSABI_LONG(0xA0000022)
2890 * File formats definitions
2893 #include <pshpack2.h>
2894 typedef struct _IMAGE_DOS_HEADER
{
2895 WORD e_magic
; /* 00: MZ Header signature */
2896 WORD e_cblp
; /* 02: Bytes on last page of file */
2897 WORD e_cp
; /* 04: Pages in file */
2898 WORD e_crlc
; /* 06: Relocations */
2899 WORD e_cparhdr
; /* 08: Size of header in paragraphs */
2900 WORD e_minalloc
; /* 0a: Minimum extra paragraphs needed */
2901 WORD e_maxalloc
; /* 0c: Maximum extra paragraphs needed */
2902 WORD e_ss
; /* 0e: Initial (relative) SS value */
2903 WORD e_sp
; /* 10: Initial SP value */
2904 WORD e_csum
; /* 12: Checksum */
2905 WORD e_ip
; /* 14: Initial IP value */
2906 WORD e_cs
; /* 16: Initial (relative) CS value */
2907 WORD e_lfarlc
; /* 18: File address of relocation table */
2908 WORD e_ovno
; /* 1a: Overlay number */
2909 WORD e_res
[4]; /* 1c: Reserved words */
2910 WORD e_oemid
; /* 24: OEM identifier (for e_oeminfo) */
2911 WORD e_oeminfo
; /* 26: OEM information; e_oemid specific */
2912 WORD e_res2
[10]; /* 28: Reserved words */
2913 DWORD e_lfanew
; /* 3c: Offset to extended header */
2914 } IMAGE_DOS_HEADER
, *PIMAGE_DOS_HEADER
;
2915 #include <poppack.h>
2917 #define IMAGE_DOS_SIGNATURE 0x5A4D /* MZ */
2918 #define IMAGE_OS2_SIGNATURE 0x454E /* NE */
2919 #define IMAGE_OS2_SIGNATURE_LE 0x454C /* LE */
2920 #define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */
2921 #define IMAGE_VXD_SIGNATURE 0x454C /* LE */
2922 #define IMAGE_NT_SIGNATURE 0x00004550 /* PE00 */
2925 * This is the Windows executable (NE) header.
2926 * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way.
2928 #include <pshpack2.h>
2931 WORD ne_magic
; /* 00 NE signature 'NE' */
2932 BYTE ne_ver
; /* 02 Linker version number */
2933 BYTE ne_rev
; /* 03 Linker revision number */
2934 WORD ne_enttab
; /* 04 Offset to entry table relative to NE */
2935 WORD ne_cbenttab
; /* 06 Length of entry table in bytes */
2936 LONG ne_crc
; /* 08 Checksum */
2937 WORD ne_flags
; /* 0c Flags about segments in this file */
2938 WORD ne_autodata
; /* 0e Automatic data segment number */
2939 WORD ne_heap
; /* 10 Initial size of local heap */
2940 WORD ne_stack
; /* 12 Initial size of stack */
2941 DWORD ne_csip
; /* 14 Initial CS:IP */
2942 DWORD ne_sssp
; /* 18 Initial SS:SP */
2943 WORD ne_cseg
; /* 1c # of entries in segment table */
2944 WORD ne_cmod
; /* 1e # of entries in module reference tab. */
2945 WORD ne_cbnrestab
; /* 20 Length of nonresident-name table */
2946 WORD ne_segtab
; /* 22 Offset to segment table */
2947 WORD ne_rsrctab
; /* 24 Offset to resource table */
2948 WORD ne_restab
; /* 26 Offset to resident-name table */
2949 WORD ne_modtab
; /* 28 Offset to module reference table */
2950 WORD ne_imptab
; /* 2a Offset to imported name table */
2951 DWORD ne_nrestab
; /* 2c Offset to nonresident-name table */
2952 WORD ne_cmovent
; /* 30 # of movable entry points */
2953 WORD ne_align
; /* 32 Logical sector alignment shift count */
2954 WORD ne_cres
; /* 34 # of resource segments */
2955 BYTE ne_exetyp
; /* 36 Flags indicating target OS */
2956 BYTE ne_flagsothers
; /* 37 Additional information flags */
2957 WORD ne_pretthunks
; /* 38 Offset to return thunks */
2958 WORD ne_psegrefbytes
; /* 3a Offset to segment ref. bytes */
2959 WORD ne_swaparea
; /* 3c Reserved by Microsoft */
2960 WORD ne_expver
; /* 3e Expected Windows version number */
2961 } IMAGE_OS2_HEADER
, *PIMAGE_OS2_HEADER
;
2962 #include <poppack.h>
2964 #include <pshpack2.h>
2965 typedef struct _IMAGE_VXD_HEADER
{
2980 DWORD e32_lastpagesize
;
2981 DWORD e32_fixupsize
;
2998 DWORD e32_impmodcnt
;
3004 DWORD e32_cbnrestab
;
3007 DWORD e32_debuginfo
;
3009 DWORD e32_instpreload
;
3010 DWORD e32_instdemand
;
3013 DWORD e32_winresoff
;
3014 DWORD e32_winreslen
;
3017 } IMAGE_VXD_HEADER
, *PIMAGE_VXD_HEADER
;
3018 #include <poppack.h>
3020 /* These defines describe the meanings of the bits in the Characteristics
3023 #define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* No relocation info */
3024 #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
3025 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
3026 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
3027 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
3028 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
3029 #define IMAGE_FILE_16BIT_MACHINE 0x0040
3030 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
3031 #define IMAGE_FILE_32BIT_MACHINE 0x0100
3032 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200
3033 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
3034 #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
3035 #define IMAGE_FILE_SYSTEM 0x1000
3036 #define IMAGE_FILE_DLL 0x2000
3037 #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
3038 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
3040 /* These are the settings of the Machine field. */
3041 #define IMAGE_FILE_MACHINE_UNKNOWN 0
3042 #define IMAGE_FILE_MACHINE_TARGET_HOST 0x0001
3043 #define IMAGE_FILE_MACHINE_I860 0x014d
3044 #define IMAGE_FILE_MACHINE_I386 0x014c
3045 #define IMAGE_FILE_MACHINE_R3000 0x0162
3046 #define IMAGE_FILE_MACHINE_R4000 0x0166
3047 #define IMAGE_FILE_MACHINE_R10000 0x0168
3048 #define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
3049 #define IMAGE_FILE_MACHINE_ALPHA 0x0184
3050 #define IMAGE_FILE_MACHINE_SH3 0x01a2
3051 #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
3052 #define IMAGE_FILE_MACHINE_SH3E 0x01a4
3053 #define IMAGE_FILE_MACHINE_SH4 0x01a6
3054 #define IMAGE_FILE_MACHINE_SH5 0x01a8
3055 #define IMAGE_FILE_MACHINE_ARM 0x01c0
3056 #define IMAGE_FILE_MACHINE_THUMB 0x01c2
3057 #define IMAGE_FILE_MACHINE_ARMNT 0x01c4
3058 #define IMAGE_FILE_MACHINE_ARM64 0xaa64
3059 #define IMAGE_FILE_MACHINE_AM33 0x01d3
3060 #define IMAGE_FILE_MACHINE_POWERPC 0x01f0
3061 #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
3062 #define IMAGE_FILE_MACHINE_IA64 0x0200
3063 #define IMAGE_FILE_MACHINE_MIPS16 0x0266
3064 #define IMAGE_FILE_MACHINE_ALPHA64 0x0284
3065 #define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
3066 #define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
3067 #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
3068 #define IMAGE_FILE_MACHINE_TRICORE 0x0520
3069 #define IMAGE_FILE_MACHINE_CEF 0x0cef
3070 #define IMAGE_FILE_MACHINE_EBC 0x0ebc
3071 #define IMAGE_FILE_MACHINE_AMD64 0x8664
3072 #define IMAGE_FILE_MACHINE_M32R 0x9041
3073 #define IMAGE_FILE_MACHINE_CEE 0xc0ee
3075 #define IMAGE_SIZEOF_FILE_HEADER 20
3076 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
3077 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
3078 #define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
3079 #define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
3080 #define IMAGE_SIZEOF_SHORT_NAME 8
3081 #define IMAGE_SIZEOF_SECTION_HEADER 40
3082 #define IMAGE_SIZEOF_SYMBOL 18
3083 #define IMAGE_SIZEOF_AUX_SYMBOL 18
3084 #define IMAGE_SIZEOF_RELOCATION 10
3085 #define IMAGE_SIZEOF_BASE_RELOCATION 8
3086 #define IMAGE_SIZEOF_LINENUMBER 6
3087 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
3089 /* Possible Magic values */
3090 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
3091 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
3092 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
3095 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
3096 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
3098 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
3099 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
3102 /* These are indexes into the DataDirectory array */
3103 #define IMAGE_FILE_EXPORT_DIRECTORY 0
3104 #define IMAGE_FILE_IMPORT_DIRECTORY 1
3105 #define IMAGE_FILE_RESOURCE_DIRECTORY 2
3106 #define IMAGE_FILE_EXCEPTION_DIRECTORY 3
3107 #define IMAGE_FILE_SECURITY_DIRECTORY 4
3108 #define IMAGE_FILE_BASE_RELOCATION_TABLE 5
3109 #define IMAGE_FILE_DEBUG_DIRECTORY 6
3110 #define IMAGE_FILE_DESCRIPTION_STRING 7
3111 #define IMAGE_FILE_MACHINE_VALUE 8 /* Mips */
3112 #define IMAGE_FILE_THREAD_LOCAL_STORAGE 9
3113 #define IMAGE_FILE_CALLBACK_DIRECTORY 10
3115 /* Directory Entries, indices into the DataDirectory array */
3117 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0
3118 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
3119 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
3120 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
3121 #define IMAGE_DIRECTORY_ENTRY_SECURITY 4
3122 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
3123 #define IMAGE_DIRECTORY_ENTRY_DEBUG 6
3124 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
3125 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 /* (MIPS GP) */
3126 #define IMAGE_DIRECTORY_ENTRY_TLS 9
3127 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
3128 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
3129 #define IMAGE_DIRECTORY_ENTRY_IAT 12 /* Import Address Table */
3130 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
3131 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
3133 /* Subsystem Values */
3135 #define IMAGE_SUBSYSTEM_UNKNOWN 0
3136 #define IMAGE_SUBSYSTEM_NATIVE 1
3137 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 /* Windows GUI subsystem */
3138 #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 /* Windows character subsystem */
3139 #define IMAGE_SUBSYSTEM_OS2_CUI 5
3140 #define IMAGE_SUBSYSTEM_POSIX_CUI 7
3141 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 /* native Win9x driver */
3142 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* Windows CE subsystem */
3143 #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
3144 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
3145 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
3146 #define IMAGE_SUBSYSTEM_EFI_ROM 13
3147 #define IMAGE_SUBSYSTEM_XBOX 14
3148 #define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
3150 /* DLL Characteristics */
3151 #define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020
3152 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040
3153 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080
3154 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100
3155 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
3156 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
3157 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
3158 #define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000
3159 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
3160 #define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000
3161 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
3163 typedef struct _IMAGE_FILE_HEADER
{
3165 WORD NumberOfSections
;
3166 DWORD TimeDateStamp
;
3167 DWORD PointerToSymbolTable
;
3168 DWORD NumberOfSymbols
;
3169 WORD SizeOfOptionalHeader
;
3170 WORD Characteristics
;
3171 } IMAGE_FILE_HEADER
, *PIMAGE_FILE_HEADER
;
3173 typedef struct _IMAGE_DATA_DIRECTORY
{
3174 DWORD VirtualAddress
;
3176 } IMAGE_DATA_DIRECTORY
, *PIMAGE_DATA_DIRECTORY
;
3178 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
3180 typedef struct _IMAGE_OPTIONAL_HEADER64
{
3181 WORD Magic
; /* 0x20b */
3182 BYTE MajorLinkerVersion
;
3183 BYTE MinorLinkerVersion
;
3185 DWORD SizeOfInitializedData
;
3186 DWORD SizeOfUninitializedData
;
3187 DWORD AddressOfEntryPoint
;
3189 ULONGLONG ImageBase
;
3190 DWORD SectionAlignment
;
3191 DWORD FileAlignment
;
3192 WORD MajorOperatingSystemVersion
;
3193 WORD MinorOperatingSystemVersion
;
3194 WORD MajorImageVersion
;
3195 WORD MinorImageVersion
;
3196 WORD MajorSubsystemVersion
;
3197 WORD MinorSubsystemVersion
;
3198 DWORD Win32VersionValue
;
3200 DWORD SizeOfHeaders
;
3203 WORD DllCharacteristics
;
3204 ULONGLONG SizeOfStackReserve
;
3205 ULONGLONG SizeOfStackCommit
;
3206 ULONGLONG SizeOfHeapReserve
;
3207 ULONGLONG SizeOfHeapCommit
;
3209 DWORD NumberOfRvaAndSizes
;
3210 IMAGE_DATA_DIRECTORY DataDirectory
[IMAGE_NUMBEROF_DIRECTORY_ENTRIES
];
3211 } IMAGE_OPTIONAL_HEADER64
, *PIMAGE_OPTIONAL_HEADER64
;
3213 typedef struct _IMAGE_NT_HEADERS64
{
3215 IMAGE_FILE_HEADER FileHeader
;
3216 IMAGE_OPTIONAL_HEADER64 OptionalHeader
;
3217 } IMAGE_NT_HEADERS64
, *PIMAGE_NT_HEADERS64
;
3219 typedef struct _IMAGE_OPTIONAL_HEADER
{
3221 /* Standard fields */
3223 WORD Magic
; /* 0x10b or 0x107 */ /* 0x00 */
3224 BYTE MajorLinkerVersion
;
3225 BYTE MinorLinkerVersion
;
3227 DWORD SizeOfInitializedData
;
3228 DWORD SizeOfUninitializedData
;
3229 DWORD AddressOfEntryPoint
; /* 0x10 */
3233 /* NT additional fields */
3236 DWORD SectionAlignment
; /* 0x20 */
3237 DWORD FileAlignment
;
3238 WORD MajorOperatingSystemVersion
;
3239 WORD MinorOperatingSystemVersion
;
3240 WORD MajorImageVersion
;
3241 WORD MinorImageVersion
;
3242 WORD MajorSubsystemVersion
; /* 0x30 */
3243 WORD MinorSubsystemVersion
;
3244 DWORD Win32VersionValue
;
3246 DWORD SizeOfHeaders
;
3247 DWORD CheckSum
; /* 0x40 */
3249 WORD DllCharacteristics
;
3250 DWORD SizeOfStackReserve
;
3251 DWORD SizeOfStackCommit
;
3252 DWORD SizeOfHeapReserve
; /* 0x50 */
3253 DWORD SizeOfHeapCommit
;
3255 DWORD NumberOfRvaAndSizes
;
3256 IMAGE_DATA_DIRECTORY DataDirectory
[IMAGE_NUMBEROF_DIRECTORY_ENTRIES
]; /* 0x60 */
3258 } IMAGE_OPTIONAL_HEADER32
, *PIMAGE_OPTIONAL_HEADER32
;
3260 typedef struct _IMAGE_NT_HEADERS
{
3261 DWORD Signature
; /* "PE"\0\0 */ /* 0x00 */
3262 IMAGE_FILE_HEADER FileHeader
; /* 0x04 */
3263 IMAGE_OPTIONAL_HEADER32 OptionalHeader
; /* 0x18 */
3264 } IMAGE_NT_HEADERS32
, *PIMAGE_NT_HEADERS32
;
3267 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS
;
3268 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
3269 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER
;
3270 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER
;
3272 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS
;
3273 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
3274 typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER
;
3275 typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER
;
3278 #define IMAGE_SIZEOF_SHORT_NAME 8
3280 typedef struct _IMAGE_SECTION_HEADER
{
3281 BYTE Name
[IMAGE_SIZEOF_SHORT_NAME
];
3283 DWORD PhysicalAddress
;
3286 DWORD VirtualAddress
;
3287 DWORD SizeOfRawData
;
3288 DWORD PointerToRawData
;
3289 DWORD PointerToRelocations
;
3290 DWORD PointerToLinenumbers
;
3291 WORD NumberOfRelocations
;
3292 WORD NumberOfLinenumbers
;
3293 DWORD Characteristics
;
3294 } IMAGE_SECTION_HEADER
, *PIMAGE_SECTION_HEADER
;
3296 #define IMAGE_SIZEOF_SECTION_HEADER 40
3298 #define IMAGE_FIRST_SECTION(ntheader) \
3299 ((PIMAGE_SECTION_HEADER)(ULONG_PTR)((const BYTE *)&((const IMAGE_NT_HEADERS *)(ntheader))->OptionalHeader + \
3300 ((const IMAGE_NT_HEADERS *)(ntheader))->FileHeader.SizeOfOptionalHeader))
3302 /* These defines are for the Characteristics bitfield. */
3303 /* #define IMAGE_SCN_TYPE_REG 0x00000000 - Reserved */
3304 /* #define IMAGE_SCN_TYPE_DSECT 0x00000001 - Reserved */
3305 /* #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 - Reserved */
3306 /* #define IMAGE_SCN_TYPE_GROUP 0x00000004 - Reserved */
3307 #define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved */
3308 /* #define IMAGE_SCN_TYPE_COPY 0x00000010 - Reserved */
3310 #define IMAGE_SCN_CNT_CODE 0x00000020
3311 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
3312 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
3314 #define IMAGE_SCN_LNK_OTHER 0x00000100
3315 #define IMAGE_SCN_LNK_INFO 0x00000200
3316 /* #define IMAGE_SCN_TYPE_OVER 0x00000400 - Reserved */
3317 #define IMAGE_SCN_LNK_REMOVE 0x00000800
3318 #define IMAGE_SCN_LNK_COMDAT 0x00001000
3320 /* 0x00002000 - Reserved */
3321 /* #define IMAGE_SCN_MEM_PROTECTED 0x00004000 - Obsolete */
3322 #define IMAGE_SCN_MEM_FARDATA 0x00008000
3324 /* #define IMAGE_SCN_MEM_SYSHEAP 0x00010000 - Obsolete */
3325 #define IMAGE_SCN_MEM_PURGEABLE 0x00020000
3326 #define IMAGE_SCN_MEM_16BIT 0x00020000
3327 #define IMAGE_SCN_MEM_LOCKED 0x00040000
3328 #define IMAGE_SCN_MEM_PRELOAD 0x00080000
3330 #define IMAGE_SCN_ALIGN_1BYTES 0x00100000
3331 #define IMAGE_SCN_ALIGN_2BYTES 0x00200000
3332 #define IMAGE_SCN_ALIGN_4BYTES 0x00300000
3333 #define IMAGE_SCN_ALIGN_8BYTES 0x00400000
3334 #define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default */
3335 #define IMAGE_SCN_ALIGN_32BYTES 0x00600000
3336 #define IMAGE_SCN_ALIGN_64BYTES 0x00700000
3337 #define IMAGE_SCN_ALIGN_128BYTES 0x00800000
3338 #define IMAGE_SCN_ALIGN_256BYTES 0x00900000
3339 #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000
3340 #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000
3341 #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000
3342 #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000
3343 #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000
3344 /* 0x00F00000 - Unused */
3345 #define IMAGE_SCN_ALIGN_MASK 0x00F00000
3347 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
3350 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
3351 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
3352 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
3353 #define IMAGE_SCN_MEM_SHARED 0x10000000
3354 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
3355 #define IMAGE_SCN_MEM_READ 0x40000000
3356 #define IMAGE_SCN_MEM_WRITE 0x80000000
3358 #include <pshpack2.h>
3360 typedef struct _IMAGE_SYMBOL
{
3370 SHORT SectionNumber
;
3373 BYTE NumberOfAuxSymbols
;
3375 typedef IMAGE_SYMBOL
*PIMAGE_SYMBOL
;
3377 #define IMAGE_SIZEOF_SYMBOL 18
3379 typedef struct _IMAGE_LINENUMBER
{
3381 DWORD SymbolTableIndex
;
3382 DWORD VirtualAddress
;
3386 typedef IMAGE_LINENUMBER
*PIMAGE_LINENUMBER
;
3388 #define IMAGE_SIZEOF_LINENUMBER 6
3390 typedef union _IMAGE_AUX_SYMBOL
{
3402 DWORD PointerToLinenumber
;
3403 DWORD PointerToNextFunction
;
3412 BYTE Name
[IMAGE_SIZEOF_SYMBOL
];
3416 WORD NumberOfRelocations
;
3417 WORD NumberOfLinenumbers
;
3423 typedef IMAGE_AUX_SYMBOL
*PIMAGE_AUX_SYMBOL
;
3425 #define IMAGE_SIZEOF_AUX_SYMBOL 18
3427 #include <poppack.h>
3429 #define IMAGE_SYM_UNDEFINED (SHORT)0
3430 #define IMAGE_SYM_ABSOLUTE (SHORT)-1
3431 #define IMAGE_SYM_DEBUG (SHORT)-2
3433 #define IMAGE_SYM_TYPE_NULL 0x0000
3434 #define IMAGE_SYM_TYPE_VOID 0x0001
3435 #define IMAGE_SYM_TYPE_CHAR 0x0002
3436 #define IMAGE_SYM_TYPE_SHORT 0x0003
3437 #define IMAGE_SYM_TYPE_INT 0x0004
3438 #define IMAGE_SYM_TYPE_LONG 0x0005
3439 #define IMAGE_SYM_TYPE_FLOAT 0x0006
3440 #define IMAGE_SYM_TYPE_DOUBLE 0x0007
3441 #define IMAGE_SYM_TYPE_STRUCT 0x0008
3442 #define IMAGE_SYM_TYPE_UNION 0x0009
3443 #define IMAGE_SYM_TYPE_ENUM 0x000A
3444 #define IMAGE_SYM_TYPE_MOE 0x000B
3445 #define IMAGE_SYM_TYPE_BYTE 0x000C
3446 #define IMAGE_SYM_TYPE_WORD 0x000D
3447 #define IMAGE_SYM_TYPE_UINT 0x000E
3448 #define IMAGE_SYM_TYPE_DWORD 0x000F
3449 #define IMAGE_SYM_TYPE_PCODE 0x8000
3451 #define IMAGE_SYM_DTYPE_NULL 0
3452 #define IMAGE_SYM_DTYPE_POINTER 1
3453 #define IMAGE_SYM_DTYPE_FUNCTION 2
3454 #define IMAGE_SYM_DTYPE_ARRAY 3
3456 #define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE )-1
3457 #define IMAGE_SYM_CLASS_NULL 0x0000
3458 #define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
3459 #define IMAGE_SYM_CLASS_EXTERNAL 0x0002
3460 #define IMAGE_SYM_CLASS_STATIC 0x0003
3461 #define IMAGE_SYM_CLASS_REGISTER 0x0004
3462 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
3463 #define IMAGE_SYM_CLASS_LABEL 0x0006
3464 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
3465 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
3466 #define IMAGE_SYM_CLASS_ARGUMENT 0x0009
3467 #define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
3468 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
3469 #define IMAGE_SYM_CLASS_UNION_TAG 0x000C
3470 #define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
3471 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
3472 #define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
3473 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
3474 #define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
3475 #define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
3477 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044
3478 #define IMAGE_SYM_CLASS_BLOCK 0x0064
3479 #define IMAGE_SYM_CLASS_FUNCTION 0x0065
3480 #define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
3481 #define IMAGE_SYM_CLASS_FILE 0x0067
3482 #define IMAGE_SYM_CLASS_SECTION 0x0068
3483 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
3485 #define N_BTMASK 0x000F
3486 #define N_TMASK 0x0030
3487 #define N_TMASK1 0x00C0
3488 #define N_TMASK2 0x00F0
3492 #define BTYPE(x) ((x) & N_BTMASK)
3495 #define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
3499 #define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
3503 #define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
3507 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
3511 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
3514 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
3517 #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
3518 #define IMAGE_COMDAT_SELECT_ANY 2
3519 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
3520 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
3521 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
3522 #define IMAGE_COMDAT_SELECT_LARGEST 6
3523 #define IMAGE_COMDAT_SELECT_NEWEST 7
3525 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
3526 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
3527 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
3529 /* Export module directory */
3531 typedef struct _IMAGE_EXPORT_DIRECTORY
{
3532 DWORD Characteristics
;
3533 DWORD TimeDateStamp
;
3538 DWORD NumberOfFunctions
;
3539 DWORD NumberOfNames
;
3540 DWORD AddressOfFunctions
;
3541 DWORD AddressOfNames
;
3542 DWORD AddressOfNameOrdinals
;
3543 } IMAGE_EXPORT_DIRECTORY
,*PIMAGE_EXPORT_DIRECTORY
;
3545 /* Import name entry */
3546 typedef struct _IMAGE_IMPORT_BY_NAME
{
3549 } IMAGE_IMPORT_BY_NAME
,*PIMAGE_IMPORT_BY_NAME
;
3551 #include <pshpack8.h>
3553 typedef struct _IMAGE_THUNK_DATA64
{
3555 ULONGLONG ForwarderString
;
3558 ULONGLONG AddressOfData
;
3560 } IMAGE_THUNK_DATA64
,*PIMAGE_THUNK_DATA64
;
3561 #include <poppack.h>
3563 typedef struct _IMAGE_THUNK_DATA32
{
3565 DWORD ForwarderString
;
3568 DWORD AddressOfData
;
3570 } IMAGE_THUNK_DATA32
,*PIMAGE_THUNK_DATA32
;
3572 /* Import module directory */
3574 typedef struct _IMAGE_IMPORT_DESCRIPTOR
{
3576 DWORD Characteristics
; /* 0 for terminating null import descriptor */
3577 DWORD OriginalFirstThunk
; /* RVA to original unbound IAT */
3579 DWORD TimeDateStamp
; /* 0 if not bound,
3580 * -1 if bound, and real date\time stamp
3581 * in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
3583 * otherwise date/time stamp of DLL bound to
3586 DWORD ForwarderChain
; /* -1 if no forwarders */
3588 /* RVA to IAT (if bound this IAT has actual addresses) */
3590 } IMAGE_IMPORT_DESCRIPTOR
,*PIMAGE_IMPORT_DESCRIPTOR
;
3592 #define IMAGE_ORDINAL_FLAG64 (((ULONGLONG)0x80000000 << 32) | 0x00000000)
3593 #define IMAGE_ORDINAL_FLAG32 0x80000000
3594 #define IMAGE_SNAP_BY_ORDINAL64(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG64) != 0)
3595 #define IMAGE_SNAP_BY_ORDINAL32(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG32) != 0)
3596 #define IMAGE_ORDINAL64(ordinal) ((ordinal) & 0xffff)
3597 #define IMAGE_ORDINAL32(ordinal) ((ordinal) & 0xffff)
3600 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
3601 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
3602 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
3603 typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA
;
3604 typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA
;
3606 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
3607 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
3608 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
3609 typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA
;
3610 typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA
;
3613 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR
3615 DWORD TimeDateStamp
;
3616 WORD OffsetModuleName
;
3617 WORD NumberOfModuleForwarderRefs
;
3618 /* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */
3619 } IMAGE_BOUND_IMPORT_DESCRIPTOR
, *PIMAGE_BOUND_IMPORT_DESCRIPTOR
;
3621 typedef struct _IMAGE_BOUND_FORWARDER_REF
3623 DWORD TimeDateStamp
;
3624 WORD OffsetModuleName
;
3626 } IMAGE_BOUND_FORWARDER_REF
, *PIMAGE_BOUND_FORWARDER_REF
;
3628 typedef struct _IMAGE_BASE_RELOCATION
3630 DWORD VirtualAddress
;
3632 /* WORD TypeOffset[1]; */
3633 } IMAGE_BASE_RELOCATION
,*PIMAGE_BASE_RELOCATION
;
3635 #include <pshpack2.h>
3637 typedef struct _IMAGE_RELOCATION
3640 DWORD VirtualAddress
;
3643 DWORD SymbolTableIndex
;
3645 } IMAGE_RELOCATION
, *PIMAGE_RELOCATION
;
3647 #include <poppack.h>
3649 #define IMAGE_SIZEOF_RELOCATION 10
3651 typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR
3655 DWORD AllAttributes
;
3659 DWORD ReservedAttributes
:31;
3664 DWORD ModuleHandleRVA
;
3665 DWORD ImportAddressTableRVA
;
3666 DWORD ImportNameTableRVA
;
3667 DWORD BoundImportAddressTableRVA
;
3668 DWORD UnloadInformationTableRVA
;
3669 DWORD TimeDateStamp
;
3670 } IMAGE_DELAYLOAD_DESCRIPTOR
, *PIMAGE_DELAYLOAD_DESCRIPTOR
;
3671 typedef const IMAGE_DELAYLOAD_DESCRIPTOR
*PCIMAGE_DELAYLOAD_DESCRIPTOR
;
3673 /* generic relocation types */
3674 #define IMAGE_REL_BASED_ABSOLUTE 0
3675 #define IMAGE_REL_BASED_HIGH 1
3676 #define IMAGE_REL_BASED_LOW 2
3677 #define IMAGE_REL_BASED_HIGHLOW 3
3678 #define IMAGE_REL_BASED_HIGHADJ 4
3679 #define IMAGE_REL_BASED_MIPS_JMPADDR 5
3680 #define IMAGE_REL_BASED_ARM_MOV32A 5 /* yes, 5 too */
3681 #define IMAGE_REL_BASED_ARM_MOV32 5 /* yes, 5 too */
3682 #define IMAGE_REL_BASED_SECTION 6
3683 #define IMAGE_REL_BASED_REL 7
3684 #define IMAGE_REL_BASED_ARM_MOV32T 7 /* yes, 7 too */
3685 #define IMAGE_REL_BASED_THUMB_MOV32 7 /* yes, 7 too */
3686 #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
3687 #define IMAGE_REL_BASED_IA64_IMM64 9 /* yes, 9 too */
3688 #define IMAGE_REL_BASED_DIR64 10
3689 #define IMAGE_REL_BASED_HIGH3ADJ 11
3691 /* I386 relocation types */
3692 #define IMAGE_REL_I386_ABSOLUTE 0
3693 #define IMAGE_REL_I386_DIR16 1
3694 #define IMAGE_REL_I386_REL16 2
3695 #define IMAGE_REL_I386_DIR32 6
3696 #define IMAGE_REL_I386_DIR32NB 7
3697 #define IMAGE_REL_I386_SEG12 9
3698 #define IMAGE_REL_I386_SECTION 10
3699 #define IMAGE_REL_I386_SECREL 11
3700 #define IMAGE_REL_I386_TOKEN 12
3701 #define IMAGE_REL_I386_SECREL7 13
3702 #define IMAGE_REL_I386_REL32 20
3704 /* MIPS relocation types */
3705 #define IMAGE_REL_MIPS_ABSOLUTE 0x0000
3706 #define IMAGE_REL_MIPS_REFHALF 0x0001
3707 #define IMAGE_REL_MIPS_REFWORD 0x0002
3708 #define IMAGE_REL_MIPS_JMPADDR 0x0003
3709 #define IMAGE_REL_MIPS_REFHI 0x0004
3710 #define IMAGE_REL_MIPS_REFLO 0x0005
3711 #define IMAGE_REL_MIPS_GPREL 0x0006
3712 #define IMAGE_REL_MIPS_LITERAL 0x0007
3713 #define IMAGE_REL_MIPS_SECTION 0x000A
3714 #define IMAGE_REL_MIPS_SECREL 0x000B
3715 #define IMAGE_REL_MIPS_SECRELLO 0x000C
3716 #define IMAGE_REL_MIPS_SECRELHI 0x000D
3717 #define IMAGE_REL_MIPS_TOKEN 0x000E
3718 #define IMAGE_REL_MIPS_JMPADDR16 0x0010
3719 #define IMAGE_REL_MIPS_REFWORDNB 0x0022
3720 #define IMAGE_REL_MIPS_PAIR 0x0025
3722 /* ALPHA relocation types */
3723 #define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
3724 #define IMAGE_REL_ALPHA_REFLONG 0x0001
3725 #define IMAGE_REL_ALPHA_REFQUAD 0x0002
3726 #define IMAGE_REL_ALPHA_GPREL 0x0003
3727 #define IMAGE_REL_ALPHA_LITERAL 0x0004
3728 #define IMAGE_REL_ALPHA_LITUSE 0x0005
3729 #define IMAGE_REL_ALPHA_GPDISP 0x0006
3730 #define IMAGE_REL_ALPHA_BRADDR 0x0007
3731 #define IMAGE_REL_ALPHA_HINT 0x0008
3732 #define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
3733 #define IMAGE_REL_ALPHA_REFHI 0x000A
3734 #define IMAGE_REL_ALPHA_REFLO 0x000B
3735 #define IMAGE_REL_ALPHA_PAIR 0x000C
3736 #define IMAGE_REL_ALPHA_MATCH 0x000D
3737 #define IMAGE_REL_ALPHA_SECTION 0x000E
3738 #define IMAGE_REL_ALPHA_SECREL 0x000F
3739 #define IMAGE_REL_ALPHA_REFLONGNB 0x0010
3740 #define IMAGE_REL_ALPHA_SECRELLO 0x0011
3741 #define IMAGE_REL_ALPHA_SECRELHI 0x0012
3742 #define IMAGE_REL_ALPHA_REFQ3 0x0013
3743 #define IMAGE_REL_ALPHA_REFQ2 0x0014
3744 #define IMAGE_REL_ALPHA_REFQ1 0x0015
3745 #define IMAGE_REL_ALPHA_GPRELLO 0x0016
3746 #define IMAGE_REL_ALPHA_GPRELHI 0x0017
3748 /* PowerPC relocation types */
3749 #define IMAGE_REL_PPC_ABSOLUTE 0x0000
3750 #define IMAGE_REL_PPC_ADDR64 0x0001
3751 #define IMAGE_REL_PPC_ADDR 0x0002
3752 #define IMAGE_REL_PPC_ADDR24 0x0003
3753 #define IMAGE_REL_PPC_ADDR16 0x0004
3754 #define IMAGE_REL_PPC_ADDR14 0x0005
3755 #define IMAGE_REL_PPC_REL24 0x0006
3756 #define IMAGE_REL_PPC_REL14 0x0007
3757 #define IMAGE_REL_PPC_TOCREL16 0x0008
3758 #define IMAGE_REL_PPC_TOCREL14 0x0009
3759 #define IMAGE_REL_PPC_ADDR32NB 0x000A
3760 #define IMAGE_REL_PPC_SECREL 0x000B
3761 #define IMAGE_REL_PPC_SECTION 0x000C
3762 #define IMAGE_REL_PPC_IFGLUE 0x000D
3763 #define IMAGE_REL_PPC_IMGLUE 0x000E
3764 #define IMAGE_REL_PPC_SECREL16 0x000F
3765 #define IMAGE_REL_PPC_REFHI 0x0010
3766 #define IMAGE_REL_PPC_REFLO 0x0011
3767 #define IMAGE_REL_PPC_PAIR 0x0012
3768 #define IMAGE_REL_PPC_SECRELLO 0x0013
3769 #define IMAGE_REL_PPC_SECRELHI 0x0014
3770 #define IMAGE_REL_PPC_GPREL 0x0015
3771 #define IMAGE_REL_PPC_TOKEN 0x0016
3772 #define IMAGE_REL_PPC_TYPEMASK 0x00FF
3774 #define IMAGE_REL_PPC_NEG 0x0100
3775 #define IMAGE_REL_PPC_BRTAKEN 0x0200
3776 #define IMAGE_REL_PPC_BRNTAKEN 0x0400
3777 #define IMAGE_REL_PPC_TOCDEFN 0x0800
3779 /* SH3 relocation types */
3780 #define IMAGE_REL_SH3_ABSOLUTE 0x0000
3781 #define IMAGE_REL_SH3_DIRECT16 0x0001
3782 #define IMAGE_REL_SH3_DIRECT 0x0002
3783 #define IMAGE_REL_SH3_DIRECT8 0x0003
3784 #define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
3785 #define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
3786 #define IMAGE_REL_SH3_DIRECT4 0x0006
3787 #define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
3788 #define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
3789 #define IMAGE_REL_SH3_PCREL8_WORD 0x0009
3790 #define IMAGE_REL_SH3_PCREL8_LONG 0x000A
3791 #define IMAGE_REL_SH3_PCREL12_WORD 0x000B
3792 #define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
3793 #define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
3794 #define IMAGE_REL_SH3_SECTION 0x000E
3795 #define IMAGE_REL_SH3_SECREL 0x000F
3796 #define IMAGE_REL_SH3_DIRECT32_NB 0x0010
3797 #define IMAGE_REL_SH3_GPREL4_LONG 0x0011
3798 #define IMAGE_REL_SH3_TOKEN 0x0012
3800 /* ARM relocation types */
3801 #define IMAGE_REL_ARM_ABSOLUTE 0x0000
3802 #define IMAGE_REL_ARM_ADDR 0x0001
3803 #define IMAGE_REL_ARM_ADDR32NB 0x0002
3804 #define IMAGE_REL_ARM_BRANCH24 0x0003
3805 #define IMAGE_REL_ARM_BRANCH11 0x0004
3806 #define IMAGE_REL_ARM_TOKEN 0x0005
3807 #define IMAGE_REL_ARM_GPREL12 0x0006
3808 #define IMAGE_REL_ARM_GPREL7 0x0007
3809 #define IMAGE_REL_ARM_BLX24 0x0008
3810 #define IMAGE_REL_ARM_BLX11 0x0009
3811 #define IMAGE_REL_ARM_SECTION 0x000E
3812 #define IMAGE_REL_ARM_SECREL 0x000F
3813 #define IMAGE_REL_ARM_MOV32A 0x0010
3814 #define IMAGE_REL_ARM_MOV32T 0x0011
3815 #define IMAGE_REL_ARM_BRANCH20T 0x0012
3816 #define IMAGE_REL_ARM_BRANCH24T 0x0014
3817 #define IMAGE_REL_ARM_BLX23T 0x0015
3819 /* ARM64 relocation types */
3820 #define IMAGE_REL_ARM64_ABSOLUTE 0x0000
3821 #define IMAGE_REL_ARM64_ADDR32 0x0001
3822 #define IMAGE_REL_ARM64_ADDR32NB 0x0002
3823 #define IMAGE_REL_ARM64_BRANCH26 0x0003
3824 #define IMAGE_REL_ARM64_PAGEBASE_REL21 0x0004
3825 #define IMAGE_REL_ARM64_REL21 0x0005
3826 #define IMAGE_REL_ARM64_PAGEOFFSET_12A 0x0006
3827 #define IMAGE_REL_ARM64_PAGEOFFSET_12L 0x0007
3828 #define IMAGE_REL_ARM64_SECREL 0x0008
3829 #define IMAGE_REL_ARM64_SECREL_LOW12A 0x0009
3830 #define IMAGE_REL_ARM64_SECREL_HIGH12A 0x000A
3831 #define IMAGE_REL_ARM64_SECREL_LOW12L 0x000B
3832 #define IMAGE_REL_ARM64_TOKEN 0x000C
3833 #define IMAGE_REL_ARM64_SECTION 0x000D
3834 #define IMAGE_REL_ARM64_ADDR64 0x000E
3835 #define IMAGE_REL_ARM64_BRANCH19 0x000F
3837 /* IA64 relocation types */
3838 #define IMAGE_REL_IA64_ABSOLUTE 0x0000
3839 #define IMAGE_REL_IA64_IMM14 0x0001
3840 #define IMAGE_REL_IA64_IMM22 0x0002
3841 #define IMAGE_REL_IA64_IMM64 0x0003
3842 #define IMAGE_REL_IA64_DIR 0x0004
3843 #define IMAGE_REL_IA64_DIR64 0x0005
3844 #define IMAGE_REL_IA64_PCREL21B 0x0006
3845 #define IMAGE_REL_IA64_PCREL21M 0x0007
3846 #define IMAGE_REL_IA64_PCREL21F 0x0008
3847 #define IMAGE_REL_IA64_GPREL22 0x0009
3848 #define IMAGE_REL_IA64_LTOFF22 0x000A
3849 #define IMAGE_REL_IA64_SECTION 0x000B
3850 #define IMAGE_REL_IA64_SECREL22 0x000C
3851 #define IMAGE_REL_IA64_SECREL64I 0x000D
3852 #define IMAGE_REL_IA64_SECREL 0x000E
3853 #define IMAGE_REL_IA64_LTOFF64 0x000F
3854 #define IMAGE_REL_IA64_DIR32NB 0x0010
3855 #define IMAGE_REL_IA64_SREL14 0x0011
3856 #define IMAGE_REL_IA64_SREL22 0x0012
3857 #define IMAGE_REL_IA64_SREL32 0x0013
3858 #define IMAGE_REL_IA64_UREL32 0x0014
3859 #define IMAGE_REL_IA64_PCREL60X 0x0015
3860 #define IMAGE_REL_IA64_PCREL60B 0x0016
3861 #define IMAGE_REL_IA64_PCREL60F 0x0017
3862 #define IMAGE_REL_IA64_PCREL60I 0x0018
3863 #define IMAGE_REL_IA64_PCREL60M 0x0019
3864 #define IMAGE_REL_IA64_IMMGPREL64 0x001A
3865 #define IMAGE_REL_IA64_TOKEN 0x001B
3866 #define IMAGE_REL_IA64_GPREL32 0x001C
3867 #define IMAGE_REL_IA64_ADDEND 0x001F
3869 /* AMD64 relocation types */
3870 #define IMAGE_REL_AMD64_ABSOLUTE 0x0000
3871 #define IMAGE_REL_AMD64_ADDR64 0x0001
3872 #define IMAGE_REL_AMD64_ADDR32 0x0002
3873 #define IMAGE_REL_AMD64_ADDR32NB 0x0003
3874 #define IMAGE_REL_AMD64_REL32 0x0004
3875 #define IMAGE_REL_AMD64_REL32_1 0x0005
3876 #define IMAGE_REL_AMD64_REL32_2 0x0006
3877 #define IMAGE_REL_AMD64_REL32_3 0x0007
3878 #define IMAGE_REL_AMD64_REL32_4 0x0008
3879 #define IMAGE_REL_AMD64_REL32_5 0x0009
3880 #define IMAGE_REL_AMD64_SECTION 0x000A
3881 #define IMAGE_REL_AMD64_SECREL 0x000B
3882 #define IMAGE_REL_AMD64_SECREL7 0x000C
3883 #define IMAGE_REL_AMD64_TOKEN 0x000D
3884 #define IMAGE_REL_AMD64_SREL32 0x000E
3885 #define IMAGE_REL_AMD64_PAIR 0x000F
3886 #define IMAGE_REL_AMD64_SSPAN32 0x0010
3888 /* archive format */
3890 #define IMAGE_ARCHIVE_START_SIZE 8
3891 #define IMAGE_ARCHIVE_START "!<arch>\n"
3892 #define IMAGE_ARCHIVE_END "`\n"
3893 #define IMAGE_ARCHIVE_PAD "\n"
3894 #define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
3895 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
3897 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
3906 } IMAGE_ARCHIVE_MEMBER_HEADER
, *PIMAGE_ARCHIVE_MEMBER_HEADER
;
3908 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
3910 typedef struct _IMPORT_OBJECT_HEADER
3916 DWORD TimeDateStamp
;
3926 } IMPORT_OBJECT_HEADER
;
3928 #define IMPORT_OBJECT_HDR_SIG2 0xffff
3930 typedef enum IMPORT_OBJECT_TYPE
3932 IMPORT_OBJECT_CODE
= 0,
3933 IMPORT_OBJECT_DATA
= 1,
3934 IMPORT_OBJECT_CONST
= 2
3935 } IMPORT_OBJECT_TYPE
;
3937 typedef enum IMPORT_OBJECT_NAME_TYPE
3939 IMPORT_OBJECT_ORDINAL
= 0,
3940 IMPORT_OBJECT_NAME
= 1,
3941 IMPORT_OBJECT_NAME_NO_PREFIX
= 2,
3942 IMPORT_OBJECT_NAME_UNDECORATE
= 3
3943 } IMPORT_OBJECT_NAME_TYPE
;
3945 typedef struct _ANON_OBJECT_HEADER
3951 DWORD TimeDateStamp
;
3954 } ANON_OBJECT_HEADER
;
3957 * Resource directory stuff
3959 typedef struct _IMAGE_RESOURCE_DIRECTORY
{
3960 DWORD Characteristics
;
3961 DWORD TimeDateStamp
;
3964 WORD NumberOfNamedEntries
;
3965 WORD NumberOfIdEntries
;
3966 /* IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */
3967 } IMAGE_RESOURCE_DIRECTORY
,*PIMAGE_RESOURCE_DIRECTORY
;
3969 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
3970 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
3972 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY
{
3975 unsigned NameOffset
:31;
3976 unsigned NameIsString
:1;
3984 unsigned OffsetToDirectory
:31;
3985 unsigned DataIsDirectory
:1;
3988 } IMAGE_RESOURCE_DIRECTORY_ENTRY
,*PIMAGE_RESOURCE_DIRECTORY_ENTRY
;
3991 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING
{
3993 CHAR NameString
[ 1 ];
3994 } IMAGE_RESOURCE_DIRECTORY_STRING
,*PIMAGE_RESOURCE_DIRECTORY_STRING
;
3996 typedef struct _IMAGE_RESOURCE_DIR_STRING_U
{
3998 WCHAR NameString
[ 1 ];
3999 } IMAGE_RESOURCE_DIR_STRING_U
,*PIMAGE_RESOURCE_DIR_STRING_U
;
4001 typedef struct _IMAGE_RESOURCE_DATA_ENTRY
{
4006 } IMAGE_RESOURCE_DATA_ENTRY
,*PIMAGE_RESOURCE_DATA_ENTRY
;
4009 typedef VOID (CALLBACK
*PIMAGE_TLS_CALLBACK
)(
4010 LPVOID DllHandle
,DWORD Reason
,LPVOID Reserved
4013 typedef struct _IMAGE_TLS_DIRECTORY64
{
4014 ULONGLONG StartAddressOfRawData
;
4015 ULONGLONG EndAddressOfRawData
;
4016 ULONGLONG AddressOfIndex
;
4017 ULONGLONG AddressOfCallBacks
;
4018 DWORD SizeOfZeroFill
;
4019 DWORD Characteristics
;
4020 } IMAGE_TLS_DIRECTORY64
, *PIMAGE_TLS_DIRECTORY64
;
4022 typedef struct _IMAGE_TLS_DIRECTORY32
{
4023 DWORD StartAddressOfRawData
;
4024 DWORD EndAddressOfRawData
;
4025 DWORD AddressOfIndex
;
4026 DWORD AddressOfCallBacks
;
4027 DWORD SizeOfZeroFill
;
4028 DWORD Characteristics
;
4029 } IMAGE_TLS_DIRECTORY32
, *PIMAGE_TLS_DIRECTORY32
;
4032 typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY
;
4033 typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY
;
4035 typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY
;
4036 typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY
;
4039 typedef struct _IMAGE_DEBUG_DIRECTORY
{
4040 DWORD Characteristics
;
4041 DWORD TimeDateStamp
;
4046 DWORD AddressOfRawData
;
4047 DWORD PointerToRawData
;
4048 } IMAGE_DEBUG_DIRECTORY
, *PIMAGE_DEBUG_DIRECTORY
;
4050 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
4051 #define IMAGE_DEBUG_TYPE_COFF 1
4052 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
4053 #define IMAGE_DEBUG_TYPE_FPO 3
4054 #define IMAGE_DEBUG_TYPE_MISC 4
4055 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
4056 #define IMAGE_DEBUG_TYPE_FIXUP 6
4057 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
4058 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
4059 #define IMAGE_DEBUG_TYPE_BORLAND 9
4060 #define IMAGE_DEBUG_TYPE_RESERVED10 10
4061 #define IMAGE_DEBUG_TYPE_CLSID 11
4062 #define IMAGE_DEBUG_TYPE_VC_FEATURE 12
4063 #define IMAGE_DEBUG_TYPE_POGO 13
4064 #define IMAGE_DEBUG_TYPE_ILTCG 14
4065 #define IMAGE_DEBUG_TYPE_MPX 15
4066 #define IMAGE_DEBUG_TYPE_REPRO 16
4068 typedef enum ReplacesCorHdrNumericDefines
4070 COMIMAGE_FLAGS_ILONLY
= 0x00000001,
4071 COMIMAGE_FLAGS_32BITREQUIRED
= 0x00000002,
4072 COMIMAGE_FLAGS_IL_LIBRARY
= 0x00000004,
4073 COMIMAGE_FLAGS_STRONGNAMESIGNED
= 0x00000008,
4074 COMIMAGE_FLAGS_NATIVE_ENTRYPOINT
= 0x00000010,
4075 COMIMAGE_FLAGS_TRACKDEBUGDATA
= 0x00010000,
4076 COMIMAGE_FLAGS_32BITPREFERRED
= 0x00020000,
4078 COR_VERSION_MAJOR_V2
= 2,
4079 COR_VERSION_MAJOR
= COR_VERSION_MAJOR_V2
,
4080 COR_VERSION_MINOR
= 5,
4081 COR_DELETED_NAME_LENGTH
= 8,
4082 COR_VTABLEGAP_NAME_LENGTH
= 8,
4084 NATIVE_TYPE_MAX_CB
= 1,
4085 COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE
= 0xff,
4087 IMAGE_COR_MIH_METHODRVA
= 0x01,
4088 IMAGE_COR_MIH_EHRVA
= 0x02,
4089 IMAGE_COR_MIH_BASICBLOCK
= 0x08,
4091 COR_VTABLE_32BIT
= 0x01,
4092 COR_VTABLE_64BIT
= 0x02,
4093 COR_VTABLE_FROM_UNMANAGED
= 0x04,
4094 COR_VTABLE_CALL_MOST_DERIVED
= 0x10,
4096 IMAGE_COR_EATJ_THUNK_SIZE
= 32,
4098 MAX_CLASS_NAME
= 1024,
4099 MAX_PACKAGE_NAME
= 1024,
4100 } ReplacesCorHdrNumericDefines
;
4102 typedef struct IMAGE_COR20_HEADER
4105 WORD MajorRuntimeVersion
;
4106 WORD MinorRuntimeVersion
;
4108 IMAGE_DATA_DIRECTORY MetaData
;
4111 DWORD EntryPointToken
;
4112 DWORD EntryPointRVA
;
4115 IMAGE_DATA_DIRECTORY Resources
;
4116 IMAGE_DATA_DIRECTORY StrongNameSignature
;
4117 IMAGE_DATA_DIRECTORY CodeManagerTable
;
4118 IMAGE_DATA_DIRECTORY VTableFixups
;
4119 IMAGE_DATA_DIRECTORY ExportAddressTableJumps
;
4120 IMAGE_DATA_DIRECTORY ManagedNativeHeader
;
4122 } IMAGE_COR20_HEADER
, *PIMAGE_COR20_HEADER
;
4124 typedef struct _IMAGE_COFF_SYMBOLS_HEADER
{
4125 DWORD NumberOfSymbols
;
4126 DWORD LvaToFirstSymbol
;
4127 DWORD NumberOfLinenumbers
;
4128 DWORD LvaToFirstLinenumber
;
4129 DWORD RvaToFirstByteOfCode
;
4130 DWORD RvaToLastByteOfCode
;
4131 DWORD RvaToFirstByteOfData
;
4132 DWORD RvaToLastByteOfData
;
4133 } IMAGE_COFF_SYMBOLS_HEADER
, *PIMAGE_COFF_SYMBOLS_HEADER
;
4136 #define FRAME_TRAP 1
4138 #define FRAME_NONFPO 3
4140 typedef struct _FPO_DATA
{
4151 } FPO_DATA
, *PFPO_DATA
;
4153 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64
{
4155 DWORD TimeDateStamp
;
4158 DWORD GlobalFlagsClear
;
4159 DWORD GlobalFlagsSet
;
4160 DWORD CriticalSectionDefaultTimeout
;
4161 ULONGLONG DeCommitFreeBlockThreshold
;
4162 ULONGLONG DeCommitTotalFreeThreshold
;
4163 ULONGLONG LockPrefixTable
;
4164 ULONGLONG MaximumAllocationSize
;
4165 ULONGLONG VirtualMemoryThreshold
;
4166 ULONGLONG ProcessAffinityMask
;
4167 DWORD ProcessHeapFlags
;
4171 ULONGLONG SecurityCookie
;
4172 ULONGLONG SEHandlerTable
;
4173 ULONGLONG SEHandlerCount
;
4174 } IMAGE_LOAD_CONFIG_DIRECTORY64
, *PIMAGE_LOAD_CONFIG_DIRECTORY64
;
4176 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32
{
4178 DWORD TimeDateStamp
;
4181 DWORD GlobalFlagsClear
;
4182 DWORD GlobalFlagsSet
;
4183 DWORD CriticalSectionDefaultTimeout
;
4184 DWORD DeCommitFreeBlockThreshold
;
4185 DWORD DeCommitTotalFreeThreshold
;
4186 PVOID LockPrefixTable
;
4187 DWORD MaximumAllocationSize
;
4188 DWORD VirtualMemoryThreshold
;
4189 DWORD ProcessHeapFlags
;
4190 DWORD ProcessAffinityMask
;
4194 DWORD SecurityCookie
;
4195 DWORD SEHandlerTable
;
4196 DWORD SEHandlerCount
;
4197 } IMAGE_LOAD_CONFIG_DIRECTORY32
, *PIMAGE_LOAD_CONFIG_DIRECTORY32
;
4200 typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY
;
4201 typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY
;
4203 typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY
;
4204 typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY
;
4207 typedef struct _IMAGE_FUNCTION_ENTRY
{
4208 DWORD StartingAddress
;
4209 DWORD EndingAddress
;
4210 DWORD EndOfPrologue
;
4211 } IMAGE_FUNCTION_ENTRY
, *PIMAGE_FUNCTION_ENTRY
;
4213 #define IMAGE_DEBUG_MISC_EXENAME 1
4215 typedef struct _IMAGE_DEBUG_MISC
{
4221 } IMAGE_DEBUG_MISC
, *PIMAGE_DEBUG_MISC
;
4223 /* This is the structure that appears at the very start of a .DBG file. */
4225 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER
{
4229 WORD Characteristics
;
4230 DWORD TimeDateStamp
;
4234 DWORD NumberOfSections
;
4235 DWORD ExportedNamesSize
;
4236 DWORD DebugDirectorySize
;
4237 DWORD SectionAlignment
;
4238 DWORD Reserved
[ 2 ];
4239 } IMAGE_SEPARATE_DEBUG_HEADER
,*PIMAGE_SEPARATE_DEBUG_HEADER
;
4241 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
4244 typedef struct tagMESSAGE_RESOURCE_ENTRY
{
4248 } MESSAGE_RESOURCE_ENTRY
,*PMESSAGE_RESOURCE_ENTRY
;
4249 #define MESSAGE_RESOURCE_UNICODE 0x0001
4251 typedef struct tagMESSAGE_RESOURCE_BLOCK
{
4254 DWORD OffsetToEntries
;
4255 } MESSAGE_RESOURCE_BLOCK
,*PMESSAGE_RESOURCE_BLOCK
;
4257 typedef struct tagMESSAGE_RESOURCE_DATA
{
4258 DWORD NumberOfBlocks
;
4259 MESSAGE_RESOURCE_BLOCK Blocks
[ 1 ];
4260 } MESSAGE_RESOURCE_DATA
,*PMESSAGE_RESOURCE_DATA
;
4263 * Here follows typedefs for security and tokens.
4267 * First a constant for the following typedefs.
4270 #define ANYSIZE_ARRAY 1
4272 /* FIXME: Orphan. What does it point to? */
4273 typedef PVOID PACCESS_TOKEN
;
4274 typedef PVOID PSECURITY_DESCRIPTOR
;
4277 typedef enum _TOKEN_ELEVATION_TYPE
{
4278 TokenElevationTypeDefault
= 1,
4279 TokenElevationTypeFull
,
4280 TokenElevationTypeLimited
4281 } TOKEN_ELEVATION_TYPE
, *PTOKEN_ELEVATION_TYPE
;
4284 * TOKEN_INFORMATION_CLASS
4287 typedef enum _TOKEN_INFORMATION_CLASS
{
4296 TokenImpersonationLevel
,
4298 TokenRestrictedSids
,
4300 TokenGroupsAndPrivileges
,
4301 TokenSessionReference
,
4308 TokenHasRestrictions
,
4309 TokenAccessInformation
,
4310 TokenVirtualizationAllowed
,
4311 TokenVirtualizationEnabled
,
4312 TokenIntegrityLevel
,
4314 TokenMandatoryPolicy
,
4316 TokenIsAppContainer
,
4318 TokenAppContainerSid
,
4319 TokenAppContainerNumber
,
4320 TokenUserClaimAttributes
,
4321 TokenDeviceClaimAttributes
,
4322 TokenRestrictedUserClaimAttributes
,
4323 TokenRestrictedDeviceClaimAttributes
,
4325 TokenRestrictedDeviceGroups
,
4326 TokenSecurityAttributes
,
4328 TokenProcessTrustLevel
,
4330 } TOKEN_INFORMATION_CLASS
;
4332 #define DISABLE_MAX_PRIVILEGE 0x1
4333 #define SANDBOX_INERT 0x2
4334 #define LUA_TOKEN 0x4
4335 #define WRITE_RESTRICTED 0x8
4337 #define TOKEN_ASSIGN_PRIMARY 0x0001
4338 #define TOKEN_DUPLICATE 0x0002
4339 #define TOKEN_IMPERSONATE 0x0004
4340 #define TOKEN_QUERY 0x0008
4341 #define TOKEN_QUERY_SOURCE 0x0010
4342 #define TOKEN_ADJUST_PRIVILEGES 0x0020
4343 #define TOKEN_ADJUST_GROUPS 0x0040
4344 #define TOKEN_ADJUST_DEFAULT 0x0080
4345 #define TOKEN_ADJUST_SESSIONID 0x0100
4346 #define TOKEN_EXECUTE STANDARD_RIGHTS_EXECUTE
4347 #define TOKEN_READ (STANDARD_RIGHTS_READ|TOKEN_QUERY)
4348 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE | \
4349 TOKEN_ADJUST_PRIVILEGES | \
4350 TOKEN_ADJUST_GROUPS | \
4351 TOKEN_ADJUST_DEFAULT )
4352 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
4353 TOKEN_ASSIGN_PRIMARY | \
4355 TOKEN_IMPERSONATE | \
4357 TOKEN_QUERY_SOURCE | \
4358 TOKEN_ADJUST_PRIVILEGES | \
4359 TOKEN_ADJUST_GROUPS | \
4360 TOKEN_ADJUST_SESSIONID | \
4361 TOKEN_ADJUST_DEFAULT )
4363 #ifndef _SECURITY_DEFINED
4364 #define _SECURITY_DEFINED
4366 typedef DWORD ACCESS_MASK
, *PACCESS_MASK
;
4368 typedef struct _GENERIC_MAPPING
{
4369 ACCESS_MASK GenericRead
;
4370 ACCESS_MASK GenericWrite
;
4371 ACCESS_MASK GenericExecute
;
4372 ACCESS_MASK GenericAll
;
4373 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
4375 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
4376 #define SID_IDENTIFIER_AUTHORITY_DEFINED
4379 } SID_IDENTIFIER_AUTHORITY
, *PSID_IDENTIFIER_AUTHORITY
;
4380 #endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */
4384 typedef struct _SID
{
4386 BYTE SubAuthorityCount
;
4387 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
4388 DWORD SubAuthority
[1];
4390 #endif /* !defined(SID_DEFINED) */
4392 #define SID_REVISION (1) /* Current revision */
4393 #define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */
4394 #define SID_RECOMMENDED_SUB_AUTHORITIES (1) /* recommended subauths */
4396 #define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))
4402 #define ACL_REVISION1 1
4403 #define ACL_REVISION2 2
4404 #define ACL_REVISION3 3
4405 #define ACL_REVISION4 4
4407 #define MIN_ACL_REVISION ACL_REVISION2
4408 #define MAX_ACL_REVISION ACL_REVISION4
4410 #define ACL_REVISION 2
4412 typedef struct _ACL
{
4420 typedef enum _ACL_INFORMATION_CLASS
4422 AclRevisionInformation
= 1,
4424 } ACL_INFORMATION_CLASS
;
4426 typedef struct _ACL_REVISION_INFORMATION
4429 } ACL_REVISION_INFORMATION
, *PACL_REVISION_INFORMATION
;
4431 typedef struct _ACL_SIZE_INFORMATION
4434 DWORD AclBytesInUse
;
4436 } ACL_SIZE_INFORMATION
, *PACL_SIZE_INFORMATION
;
4438 /* SECURITY_DESCRIPTOR */
4439 #define SECURITY_DESCRIPTOR_REVISION 1
4440 #define SECURITY_DESCRIPTOR_REVISION1 1
4447 #if defined(_MSC_VER) || defined(__MINGW32__)
4448 #define SE_CREATE_TOKEN_NAME L"SeCreateTokenPrivilege"
4449 #define SE_ASSIGNPRIMARYTOKEN_NAME L"SeAssignPrimaryTokenPrivilege"
4450 #define SE_LOCK_MEMORY_NAME L"SeLockMemoryPrivilege"
4451 #define SE_INCREASE_QUOTA_NAME L"SeIncreaseQuotaPrivilege"
4452 #define SE_UNSOLICITED_INPUT_NAME L"SeUnsolicitedInputPrivilege"
4453 #define SE_MACHINE_ACCOUNT_NAME L"SeMachineAccountPrivilege"
4454 #define SE_TCB_NAME L"SeTcbPrivilege"
4455 #define SE_SECURITY_NAME L"SeSecurityPrivilege"
4456 #define SE_TAKE_OWNERSHIP_NAME L"SeTakeOwnershipPrivilege"
4457 #define SE_LOAD_DRIVER_NAME L"SeLoadDriverPrivilege"
4458 #define SE_SYSTEM_PROFILE_NAME L"SeSystemProfilePrivilege"
4459 #define SE_SYSTEMTIME_NAME L"SeSystemtimePrivilege"
4460 #define SE_PROF_SINGLE_PROCESS_NAME L"SeProfileSingleProcessPrivilege"
4461 #define SE_INC_BASE_PRIORITY_NAME L"SeIncreaseBasePriorityPrivilege"
4462 #define SE_CREATE_PAGEFILE_NAME L"SeCreatePagefilePrivilege"
4463 #define SE_CREATE_PERMANENT_NAME L"SeCreatePermanentPrivilege"
4464 #define SE_BACKUP_NAME L"SeBackupPrivilege"
4465 #define SE_RESTORE_NAME L"SeRestorePrivilege"
4466 #define SE_SHUTDOWN_NAME L"SeShutdownPrivilege"
4467 #define SE_DEBUG_NAME L"SeDebugPrivilege"
4468 #define SE_AUDIT_NAME L"SeAuditPrivilege"
4469 #define SE_SYSTEM_ENVIRONMENT_NAME L"SeSystemEnvironmentPrivilege"
4470 #define SE_CHANGE_NOTIFY_NAME L"SeChangeNotifyPrivilege"
4471 #define SE_REMOTE_SHUTDOWN_NAME L"SeRemoteShutdownPrivilege"
4472 #define SE_UNDOCK_NAME L"SeUndockPrivilege"
4473 #define SE_ENABLE_DELEGATION_NAME L"SeEnableDelegationPrivilege"
4474 #define SE_MANAGE_VOLUME_NAME L"SeManageVolumePrivilege"
4475 #define SE_IMPERSONATE_NAME L"SeImpersonatePrivilege"
4476 #define SE_CREATE_GLOBAL_NAME L"SeCreateGlobalPrivilege"
4477 #define SE_TRUSTED_CREDMAN_ACCESS_NAME L"SeTrustedCredManAccessPrivilege"
4478 #define SE_RELABEL_NAME L"SeRelabelPrivilege"
4479 #define SE_INC_WORKING_SET_NAME L"SeIncreaseWorkingSetPrivilege"
4480 #define SE_TIME_ZONE_NAME L"SeTimeZonePrivilege"
4481 #define SE_CREATE_SYMBOLIC_LINK_NAME L"SeCreateSymbolicLinkPrivilege"
4482 #define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME L"SeDelegateSessionUserImpersonatePrivilege"
4483 #else /* _MSC_VER/__MINGW32__ */
4484 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 };
4485 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 };
4486 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 };
4487 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 };
4488 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 };
4489 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 };
4490 static const WCHAR SE_TCB_NAME
[] = { 'S','e','T','c','b','P','r','i','v','i','l','e','g','e',0 };
4491 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 };
4492 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 };
4493 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 };
4494 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 };
4495 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 };
4496 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 };
4497 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 };
4498 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 };
4499 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 };
4500 static const WCHAR SE_BACKUP_NAME
[] = { 'S','e','B','a','c','k','u','p','P','r','i','v','i','l','e','g','e',0 };
4501 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 };
4502 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 };
4503 static const WCHAR SE_DEBUG_NAME
[] = { 'S','e','D','e','b','u','g','P','r','i','v','i','l','e','g','e',0 };
4504 static const WCHAR SE_AUDIT_NAME
[] = { 'S','e','A','u','d','i','t','P','r','i','v','i','l','e','g','e',0 };
4505 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 };
4506 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 };
4507 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 };
4508 static const WCHAR SE_UNDOCK_NAME
[] = { 'S','e','U','n','d','o','c','k','P','r','i','v','i','l','e','g','e',0 };
4509 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 };
4510 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 };
4511 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 };
4512 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 };
4513 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 };
4514 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 };
4515 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 };
4516 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 };
4517 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 };
4518 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 };
4521 #define SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege"
4522 #define SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege"
4523 #define SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege"
4524 #define SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege"
4525 #define SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege"
4526 #define SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege"
4527 #define SE_TCB_NAME "SeTcbPrivilege"
4528 #define SE_SECURITY_NAME "SeSecurityPrivilege"
4529 #define SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege"
4530 #define SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege"
4531 #define SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege"
4532 #define SE_SYSTEMTIME_NAME "SeSystemtimePrivilege"
4533 #define SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege"
4534 #define SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege"
4535 #define SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege"
4536 #define SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege"
4537 #define SE_BACKUP_NAME "SeBackupPrivilege"
4538 #define SE_RESTORE_NAME "SeRestorePrivilege"
4539 #define SE_SHUTDOWN_NAME "SeShutdownPrivilege"
4540 #define SE_DEBUG_NAME "SeDebugPrivilege"
4541 #define SE_AUDIT_NAME "SeAuditPrivilege"
4542 #define SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege"
4543 #define SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege"
4544 #define SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege"
4545 #define SE_UNDOCK_NAME "SeUndockPrivilege"
4546 #define SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege"
4547 #define SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege"
4548 #define SE_IMPERSONATE_NAME "SeImpersonatePrivilege"
4549 #define SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege"
4550 #define SE_TRUSTED_CREDMAN_ACCESS_NAME "SeTrustedCredManAccessPrivilege"
4551 #define SE_RELABEL_NAME "SeRelabelPrivilege"
4552 #define SE_INC_WORKING_SET_NAME "SeIncreaseWorkingSetPrivilege"
4553 #define SE_TIME_ZONE_NAME "SeTimeZonePrivilege"
4554 #define SE_CREATE_SYMBOLIC_LINK_NAME "SeCreateSymbolicLinkPrivilege"
4555 #define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME "SeDelegateSessionUserImpersonatePrivilege"
4558 #define SE_GROUP_MANDATORY 0x00000001
4559 #define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002
4560 #define SE_GROUP_ENABLED 0x00000004
4561 #define SE_GROUP_OWNER 0x00000008
4562 #define SE_GROUP_USE_FOR_DENY_ONLY 0x00000010
4563 #define SE_GROUP_INTEGRITY 0x00000020
4564 #define SE_GROUP_INTEGRITY_ENABLED 0x00000040
4565 #define SE_GROUP_LOGON_ID 0xC0000000
4566 #define SE_GROUP_RESOURCE 0x20000000
4567 #define SE_GROUP_VALID_ATTRIBUTES 0xE000007F
4569 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001
4570 #define SE_PRIVILEGE_ENABLED 0x00000002
4571 #define SE_PRIVILEGE_REMOVED 0x00000004
4572 #define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
4573 #define SE_PRIVILEGE_VALID_ATTRIBUTES 0x80000007
4575 #define PRIVILEGE_SET_ALL_NECESSARY 1
4577 #define SE_OWNER_DEFAULTED 0x00000001
4578 #define SE_GROUP_DEFAULTED 0x00000002
4579 #define SE_DACL_PRESENT 0x00000004
4580 #define SE_DACL_DEFAULTED 0x00000008
4581 #define SE_SACL_PRESENT 0x00000010
4582 #define SE_SACL_DEFAULTED 0x00000020
4583 #define SE_DACL_AUTO_INHERIT_REQ 0x00000100
4584 #define SE_SACL_AUTO_INHERIT_REQ 0x00000200
4585 #define SE_DACL_AUTO_INHERITED 0x00000400
4586 #define SE_SACL_AUTO_INHERITED 0x00000800
4587 #define SE_DACL_PROTECTED 0x00001000
4588 #define SE_SACL_PROTECTED 0x00002000
4589 #define SE_RM_CONTROL_VALID 0x00004000
4590 #define SE_SELF_RELATIVE 0x00008000
4592 typedef DWORD SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
4593 typedef WORD SECURITY_DESCRIPTOR_CONTROL
, *PSECURITY_DESCRIPTOR_CONTROL
;
4595 /* The security descriptor structure */
4599 SECURITY_DESCRIPTOR_CONTROL Control
;
4604 } SECURITY_DESCRIPTOR_RELATIVE
, *PISECURITY_DESCRIPTOR_RELATIVE
;
4609 SECURITY_DESCRIPTOR_CONTROL Control
;
4614 } SECURITY_DESCRIPTOR
, *PISECURITY_DESCRIPTOR
;
4616 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
4618 #endif /* _SECURITY_DEFINED */
4621 * SID_AND_ATTRIBUTES
4624 typedef struct _SID_AND_ATTRIBUTES
{
4627 } SID_AND_ATTRIBUTES
, *PSID_AND_ATTRIBUTES
;
4629 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
4630 typedef SID_AND_ATTRIBUTES_ARRAY
*PSID_AND_ATTRIBUTES_ARRAY
;
4632 #define SID_HASH_SIZE 32
4634 typedef ULONG_PTR SID_HASH_ENTRY
, *PSID_HASH_ENTRY
;
4636 typedef struct _SID_AND_ATTRIBUTES_HASH
{
4638 PSID_AND_ATTRIBUTES SidAttr
;
4639 SID_HASH_ENTRY Hash
[SID_HASH_SIZE
];
4640 } SID_AND_ATTRIBUTES_HASH
, *PSID_AND_ATTRIBUTES_HASH
;
4642 /* security entities */
4643 #define SECURITY_NULL_RID __MSABI_LONG(0x00000000)
4644 #define SECURITY_WORLD_RID __MSABI_LONG(0x00000000)
4645 #define SECURITY_LOCAL_RID __MSABI_LONG(0X00000000)
4647 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
4650 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
4653 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
4654 #define SECURITY_LOCAL_LOGON_RID __MSABI_LONG(0X00000000)
4657 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
4658 #define SECURITY_CREATOR_OWNER_RID __MSABI_LONG(0x00000000)
4659 #define SECURITY_CREATOR_GROUP_RID __MSABI_LONG(0x00000001)
4660 #define SECURITY_CREATOR_OWNER_SERVER_RID __MSABI_LONG(0x00000002)
4661 #define SECURITY_CREATOR_GROUP_SERVER_RID __MSABI_LONG(0x00000003)
4662 #define SECURITY_CREATOR_OWNER_RIGHTS_RID __MSABI_LONG(0x00000004)
4665 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
4668 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
4669 #define SECURITY_DIALUP_RID __MSABI_LONG(0x00000001)
4670 #define SECURITY_NETWORK_RID __MSABI_LONG(0x00000002)
4671 #define SECURITY_BATCH_RID __MSABI_LONG(0x00000003)
4672 #define SECURITY_INTERACTIVE_RID __MSABI_LONG(0x00000004)
4673 #define SECURITY_LOGON_IDS_RID __MSABI_LONG(0x00000005)
4674 #define SECURITY_SERVICE_RID __MSABI_LONG(0x00000006)
4675 #define SECURITY_ANONYMOUS_LOGON_RID __MSABI_LONG(0x00000007)
4676 #define SECURITY_PROXY_RID __MSABI_LONG(0x00000008)
4677 #define SECURITY_ENTERPRISE_CONTROLLERS_RID __MSABI_LONG(0x00000009)
4678 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
4679 #define SECURITY_PRINCIPAL_SELF_RID __MSABI_LONG(0x0000000A)
4680 #define SECURITY_AUTHENTICATED_USER_RID __MSABI_LONG(0x0000000B)
4681 #define SECURITY_RESTRICTED_CODE_RID __MSABI_LONG(0x0000000C)
4682 #define SECURITY_TERMINAL_SERVER_RID __MSABI_LONG(0x0000000D)
4683 #define SECURITY_REMOTE_LOGON_RID __MSABI_LONG(0x0000000E)
4684 #define SECURITY_THIS_ORGANIZATION_RID __MSABI_LONG(0x0000000F)
4685 #define SECURITY_LOCAL_SYSTEM_RID __MSABI_LONG(0x00000012)
4686 #define SECURITY_LOCAL_SERVICE_RID __MSABI_LONG(0x00000013)
4687 #define SECURITY_NETWORK_SERVICE_RID __MSABI_LONG(0x00000014)
4688 #define SECURITY_NT_NON_UNIQUE __MSABI_LONG(0x00000015)
4689 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID __MSABI_LONG(0x00000016)
4690 #define SECURITY_BUILTIN_DOMAIN_RID __MSABI_LONG(0x00000020)
4691 #define SECURITY_WRITE_RESTRICTED_CODE_RID __MSABI_LONG(0x00000021)
4693 #define SECURITY_PACKAGE_BASE_RID __MSABI_LONG(0x00000040)
4694 #define SECURITY_PACKAGE_NTLM_RID __MSABI_LONG(0x0000000A)
4695 #define SECURITY_PACKAGE_SCHANNEL_RID __MSABI_LONG(0x0000000E)
4696 #define SECURITY_PACKAGE_DIGEST_RID __MSABI_LONG(0x00000015)
4697 #define SECURITY_CRED_TYPE_BASE_RID __MSABI_LONG(0x00000041)
4698 #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID __MSABI_LONG(0x00000001)
4699 #define SECURITY_MIN_BASE_RID __MSABI_LONG(0x00000050)
4700 #define SECURITY_SERVICE_ID_BASE_RID __MSABI_LONG(0x00000050)
4701 #define SECURITY_RESERVED_ID_BASE_RID __MSABI_LONG(0x00000051)
4702 #define SECURITY_APPPOOL_ID_BASE_RID __MSABI_LONG(0x00000052)
4703 #define SECURITY_VIRTUALSERVER_ID_BASE_RID __MSABI_LONG(0x00000053)
4704 #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID __MSABI_LONG(0x00000054)
4705 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID __MSABI_LONG(0x00000055)
4706 #define SECURITY_WMIHOST_ID_BASE_RID __MSABI_LONG(0x00000056)
4707 #define SECURITY_TASK_ID_BASE_RID __MSABI_LONG(0x00000057)
4708 #define SECURITY_NFS_ID_BASE_RID __MSABI_LONG(0x00000058)
4709 #define SECURITY_COM_ID_BASE_RID __MSABI_LONG(0x00000059)
4710 #define SECURITY_MAX_BASE_RID __MSABI_LONG(0x0000006F)
4711 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID __MSABI_LONG(0x00000070)
4712 #define SECURITY_MAX_ALWAYS_FILTERED __MSABI_LONG(0x000003E7)
4713 #define SECURITY_MIN_NEVER_FILTERED __MSABI_LONG(0x000003E8)
4714 #define SECURITY_OTHER_ORGANIZATION_RID __MSABI_LONG(0x000003E8)
4716 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS __MSABI_LONG(0x000001F2)
4718 #define FOREST_USER_RID_MAX __MSABI_LONG(0x000001F3)
4719 #define DOMAIN_USER_RID_ADMIN __MSABI_LONG(0x000001F4)
4720 #define DOMAIN_USER_RID_GUEST __MSABI_LONG(0x000001F5)
4721 #define DOMAIN_USER_RID_KRBTGT __MSABI_LONG(0x000001F6)
4722 #define DOMAIN_USER_RID_MAX __MSABI_LONG(0x000003E7)
4724 #define DOMAIN_GROUP_RID_ADMINS __MSABI_LONG(0x00000200)
4725 #define DOMAIN_GROUP_RID_USERS __MSABI_LONG(0x00000201)
4726 #define DOMAIN_GROUP_RID_GUESTS __MSABI_LONG(0x00000202)
4727 #define DOMAIN_GROUP_RID_COMPUTERS __MSABI_LONG(0x00000203)
4728 #define DOMAIN_GROUP_RID_CONTROLLERS __MSABI_LONG(0x00000204)
4729 #define DOMAIN_GROUP_RID_CERT_ADMINS __MSABI_LONG(0x00000205)
4730 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS __MSABI_LONG(0x00000206)
4731 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS __MSABI_LONG(0x00000207)
4732 #define DOMAIN_GROUP_RID_POLICY_ADMINS __MSABI_LONG(0x00000208)
4733 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS __MSABI_LONG(0x00000209)
4735 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
4737 #define SECURITY_APP_PACKAGE_AUTHORITY {0,0,0,0,0,15}
4738 #define SECURITY_APP_PACKAGE_BASE_RID __MSABI_LONG(0x000000002)
4739 #define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT __MSABI_LONG(0x000000002)
4740 #define SECURITY_APP_PACKAGE_RID_COUNT __MSABI_LONG(0x000000008)
4741 #define SECURITY_CAPABILITY_BASE_RID __MSABI_LONG(0x000000003)
4742 #define SECURITY_CAPABILITY_APP_RID __MSABI_LONG(0x000000400)
4743 #define SECURITY_BUILTIN_CAPABILITY_RID_COUNT __MSABI_LONG(0x000000002)
4744 #define SECURITY_CAPABILITY_RID_COUNT __MSABI_LONG(0x000000005)
4745 #define SECURITY_PARENT_PACKAGE_RID_COUNT SECURITY_APP_PACKAGE_RID_COUNT
4746 #define SECURITY_CHILD_PACKAGE_RID_COUNT __MSABI_LONG(0x00000000c)
4747 #define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE __MSABI_LONG(0x000000001)
4749 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
4750 #define SECURITY_MANDATORY_UNTRUSTED_RID __MSABI_LONG(0x00000000)
4751 #define SECURITY_MANDATORY_LOW_RID __MSABI_LONG(0x00001000)
4752 #define SECURITY_MANDATORY_MEDIUM_RID __MSABI_LONG(0x00002000)
4753 #define SECURITY_MANDATORY_MEDIUM_PLUS_RID __MSABI_LONG(0x00002100)
4754 #define SECURITY_MANDATORY_HIGH_RID __MSABI_LONG(0x00003000)
4755 #define SECURITY_MANDATORY_SYSTEM_RID __MSABI_LONG(0x00004000)
4756 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID __MSABI_LONG(0x00005000)
4757 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
4759 #define MANDATORY_LEVEL_TO_MANDATORY_RID(ML) (ML * 0x1000)
4761 #define DOMAIN_ALIAS_RID_ADMINS __MSABI_LONG(0x00000220)
4762 #define DOMAIN_ALIAS_RID_USERS __MSABI_LONG(0x00000221)
4763 #define DOMAIN_ALIAS_RID_GUESTS __MSABI_LONG(0x00000222)
4764 #define DOMAIN_ALIAS_RID_POWER_USERS __MSABI_LONG(0x00000223)
4766 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS __MSABI_LONG(0x00000224)
4767 #define DOMAIN_ALIAS_RID_SYSTEM_OPS __MSABI_LONG(0x00000225)
4768 #define DOMAIN_ALIAS_RID_PRINT_OPS __MSABI_LONG(0x00000226)
4769 #define DOMAIN_ALIAS_RID_BACKUP_OPS __MSABI_LONG(0x00000227)
4771 #define DOMAIN_ALIAS_RID_REPLICATOR __MSABI_LONG(0x00000228)
4772 #define DOMAIN_ALIAS_RID_RAS_SERVERS __MSABI_LONG(0x00000229)
4773 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS __MSABI_LONG(0x0000022A)
4774 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS __MSABI_LONG(0x0000022B)
4775 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS __MSABI_LONG(0x0000022C)
4776 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS __MSABI_LONG(0x0000022D)
4778 #define DOMAIN_ALIAS_RID_MONITORING_USERS __MSABI_LONG(0x0000022E)
4779 #define DOMAIN_ALIAS_RID_LOGGING_USERS __MSABI_LONG(0x0000022F)
4780 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS __MSABI_LONG(0x00000230)
4781 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS __MSABI_LONG(0x00000231)
4782 #define DOMAIN_ALIAS_RID_DCOM_USERS __MSABI_LONG(0x00000232)
4783 #define DOMAIN_ALIAS_RID_IUSERS __MSABI_LONG(0x00000238)
4784 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS __MSABI_LONG(0x00000239)
4785 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP __MSABI_LONG(0x0000023B)
4786 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP __MSABI_LONG(0x0000023C)
4787 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP __MSABI_LONG(0x0000023D)
4788 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP __MSABI_LONG(0x0000023E)
4790 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
4792 #define SECURITY_PACKAGE_RID_COUNT __MSABI_LONG(2)
4793 #define SECURITY_CRED_TYPE_RID_COUNT __MSABI_LONG(2)
4794 #define SECURITY_LOGON_IDS_RID_COUNT __MSABI_LONG(3)
4795 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT __MSABI_LONG(3)
4796 #define SECURITY_SERVICE_ID_RID_COUNT __MSABI_LONG(6)
4797 #define SECURITY_APPPOOL_ID_RID_COUNT __MSABI_LONG(6)
4798 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT __MSABI_LONG(6)
4799 #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT __MSABI_LONG(6)
4800 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT __MSABI_LONG(6)
4801 #define SECURITY_WMIHOST_ID_RID_COUNT __MSABI_LONG(6)
4802 #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT __MSABI_LONG(6)
4804 #define SYSTEM_LUID { 0x3e7, 0x0 }
4805 #define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
4806 #define LOCALSERVICE_LUID { 0x3e5, 0x0 }
4807 #define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
4808 #define IUSER_LUID { 0x3e3, 0x0 }
4814 WinCreatorOwnerSid
= 3,
4815 WinCreatorGroupSid
= 4,
4816 WinCreatorOwnerServerSid
= 5,
4817 WinCreatorGroupServerSid
= 6,
4818 WinNtAuthoritySid
= 7,
4822 WinInteractiveSid
= 11,
4824 WinAnonymousSid
= 13,
4826 WinEnterpriseControllersSid
= 15,
4828 WinAuthenticatedUserSid
= 17,
4829 WinRestrictedCodeSid
= 18,
4830 WinTerminalServerSid
= 19,
4831 WinRemoteLogonIdSid
= 20,
4832 WinLogonIdsSid
= 21,
4833 WinLocalSystemSid
= 22,
4834 WinLocalServiceSid
= 23,
4835 WinNetworkServiceSid
= 24,
4836 WinBuiltinDomainSid
= 25,
4837 WinBuiltinAdministratorsSid
= 26,
4838 WinBuiltinUsersSid
= 27,
4839 WinBuiltinGuestsSid
= 28,
4840 WinBuiltinPowerUsersSid
= 29,
4841 WinBuiltinAccountOperatorsSid
= 30,
4842 WinBuiltinSystemOperatorsSid
= 31,
4843 WinBuiltinPrintOperatorsSid
= 32,
4844 WinBuiltinBackupOperatorsSid
= 33,
4845 WinBuiltinReplicatorSid
= 34,
4846 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
4847 WinBuiltinRemoteDesktopUsersSid
= 36,
4848 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
4849 WinAccountAdministratorSid
= 38,
4850 WinAccountGuestSid
= 39,
4851 WinAccountKrbtgtSid
= 40,
4852 WinAccountDomainAdminsSid
= 41,
4853 WinAccountDomainUsersSid
= 42,
4854 WinAccountDomainGuestsSid
= 43,
4855 WinAccountComputersSid
= 44,
4856 WinAccountControllersSid
= 45,
4857 WinAccountCertAdminsSid
= 46,
4858 WinAccountSchemaAdminsSid
= 47,
4859 WinAccountEnterpriseAdminsSid
= 48,
4860 WinAccountPolicyAdminsSid
= 49,
4861 WinAccountRasAndIasServersSid
= 50,
4862 WinNTLMAuthenticationSid
= 51,
4863 WinDigestAuthenticationSid
= 52,
4864 WinSChannelAuthenticationSid
= 53,
4865 WinThisOrganizationSid
= 54,
4866 WinOtherOrganizationSid
= 55,
4867 WinBuiltinIncomingForestTrustBuildersSid
= 56,
4868 WinBuiltinPerfMonitoringUsersSid
= 57,
4869 WinBuiltinPerfLoggingUsersSid
= 58,
4870 WinBuiltinAuthorizationAccessSid
= 59,
4871 WinBuiltinTerminalServerLicenseServersSid
= 60,
4872 WinBuiltinDCOMUsersSid
= 61,
4873 WinBuiltinIUsersSid
= 62,
4875 WinBuiltinCryptoOperatorsSid
= 64,
4876 WinUntrustedLabelSid
= 65,
4877 WinLowLabelSid
= 66,
4878 WinMediumLabelSid
= 67,
4879 WinHighLabelSid
= 68,
4880 WinSystemLabelSid
= 69,
4881 WinWriteRestrictedCodeSid
= 70,
4882 WinCreatorOwnerRightsSid
= 71,
4883 WinCacheablePrincipalsGroupSid
= 72,
4884 WinNonCacheablePrincipalsGroupSid
= 73,
4885 WinEnterpriseReadonlyControllersSid
= 74,
4886 WinAccountReadonlyControllersSid
= 75,
4887 WinBuiltinEventLogReadersGroup
= 76,
4888 WinNewEnterpriseReadonlyControllersSid
= 77,
4889 WinBuiltinCertSvcDComAccessGroup
= 78,
4890 WinMediumPlusLabelSid
= 79,
4891 WinLocalLogonSid
= 80,
4892 WinConsoleLogonSid
= 81,
4893 WinThisOrganizationCertificateSid
= 82,
4894 WinApplicationPackageAuthoritySid
= 83,
4895 WinBuiltinAnyPackageSid
= 84,
4896 WinCapabilityInternetClientSid
= 85,
4897 WinCapabilityInternetClientServerSid
= 86,
4898 WinCapabilityPrivateNetworkClientServerSid
= 87,
4899 WinCapabilityPicturesLibrarySid
= 88,
4900 WinCapabilityVideosLibrarySid
= 89,
4901 WinCapabilityMusicLibrarySid
= 90,
4902 WinCapabilityDocumentsLibrarySid
= 91,
4903 WinCapabilitySharedUserCertificatesSid
= 92,
4904 WinCapabilityEnterpriseAuthenticationSid
= 93,
4905 WinCapabilityRemovableStorageSid
= 94,
4906 WinBuiltinRDSRemoteAccessServersSid
= 95,
4907 WinBuiltinRDSEndpointServersSid
= 96,
4908 WinBuiltinRDSManagementServersSid
= 97,
4909 WinUserModeDriversSid
= 98,
4910 WinBuiltinHyperVAdminsSid
= 99,
4911 WinAccountCloneableControllersSid
= 100,
4912 WinBuiltinAccessControlAssistanceOperatorsSid
= 101,
4913 WinBuiltinRemoteManagementUsersSid
= 102,
4914 WinAuthenticationAuthorityAssertedSid
= 103,
4915 WinAuthenticationServiceAssertedSid
= 104,
4916 WinLocalAccountSid
= 105,
4917 WinLocalAccountAndAdministratorSid
= 106,
4918 WinAccountProtectedUsersSid
= 107,
4919 } WELL_KNOWN_SID_TYPE
;
4925 typedef struct _TOKEN_USER
{
4926 SID_AND_ATTRIBUTES User
;
4927 } TOKEN_USER
, *PTOKEN_USER
;
4933 typedef struct _TOKEN_GROUPS
{
4935 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
4936 } TOKEN_GROUPS
, *PTOKEN_GROUPS
;
4939 * LUID_AND_ATTRIBUTES
4942 typedef union _LARGE_INTEGER
{
4944 #ifdef WORDS_BIGENDIAN
4952 #ifndef NONAMELESSSTRUCT
4954 #ifdef WORDS_BIGENDIAN
4964 } LARGE_INTEGER
, *PLARGE_INTEGER
;
4966 typedef union _ULARGE_INTEGER
{
4968 #ifdef WORDS_BIGENDIAN
4976 #ifndef NONAMELESSSTRUCT
4978 #ifdef WORDS_BIGENDIAN
4988 } ULARGE_INTEGER
, *PULARGE_INTEGER
;
4991 * Locally Unique Identifier
4994 typedef struct _LUID
{
4999 #include <pshpack4.h>
5000 typedef struct _LUID_AND_ATTRIBUTES
{
5003 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
5004 #include <poppack.h>
5010 typedef struct _PRIVILEGE_SET
{
5011 DWORD PrivilegeCount
;
5013 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
5014 } PRIVILEGE_SET
, *PPRIVILEGE_SET
;
5020 typedef struct _TOKEN_PRIVILEGES
{
5021 DWORD PrivilegeCount
;
5022 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
5023 } TOKEN_PRIVILEGES
, *PTOKEN_PRIVILEGES
;
5029 typedef struct _TOKEN_OWNER
{
5031 } TOKEN_OWNER
, *PTOKEN_OWNER
;
5034 * TOKEN_PRIMARY_GROUP
5037 typedef struct _TOKEN_PRIMARY_GROUP
{
5039 } TOKEN_PRIMARY_GROUP
, *PTOKEN_PRIMARY_GROUP
;
5043 * TOKEN_DEFAULT_DACL
5046 typedef struct _TOKEN_DEFAULT_DACL
{
5048 } TOKEN_DEFAULT_DACL
, *PTOKEN_DEFAULT_DACL
;
5054 #define TOKEN_SOURCE_LENGTH 8
5056 typedef struct _TOKEN_SOURCE
{
5057 char SourceName
[TOKEN_SOURCE_LENGTH
];
5058 LUID SourceIdentifier
;
5059 } TOKEN_SOURCE
, *PTOKEN_SOURCE
;
5065 typedef enum tagTOKEN_TYPE
{
5071 * SECURITY_IMPERSONATION_LEVEL
5074 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
5076 SecurityIdentification
,
5077 SecurityImpersonation
,
5079 } SECURITY_IMPERSONATION_LEVEL
, *PSECURITY_IMPERSONATION_LEVEL
;
5081 #define SECURITY_DYNAMIC_TRACKING (TRUE)
5082 #define SECURITY_STATIC_TRACKING (FALSE)
5084 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
,
5085 * PSECURITY_CONTEXT_TRACKING_MODE
;
5087 * Quality of Service
5090 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
5092 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
5093 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
5094 BOOLEAN EffectiveOnly
;
5095 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
5101 #include <pshpack4.h>
5102 typedef struct _TOKEN_STATISTICS
{
5104 LUID AuthenticationId
;
5105 LARGE_INTEGER ExpirationTime
;
5106 TOKEN_TYPE TokenType
;
5107 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
5108 DWORD DynamicCharged
;
5109 DWORD DynamicAvailable
;
5111 DWORD PrivilegeCount
;
5114 #include <poppack.h>
5116 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
{
5119 PSID_AND_ATTRIBUTES Sids
;
5120 DWORD RestrictedSidCount
;
5121 DWORD RestrictedSidLength
;
5122 PSID_AND_ATTRIBUTES RestrictedSids
;
5123 DWORD PrivilegeCount
;
5124 DWORD PrivilegeLength
;
5125 PLUID_AND_ATTRIBUTES Privileges
;
5126 LUID AuthenticationId
;
5127 } TOKEN_GROUPS_AND_PRIVILEGES
, * PTOKEN_GROUPS_AND_PRIVILEGES
;
5129 typedef struct _TOKEN_ORIGIN
{
5130 LUID OriginatingLogonSession
;
5131 } TOKEN_ORIGIN
, * PTOKEN_ORIGIN
;
5133 typedef struct _TOKEN_LINKED_TOKEN
{
5135 } TOKEN_LINKED_TOKEN
, * PTOKEN_LINKED_TOKEN
;
5137 typedef struct _TOKEN_ELEVATION
{
5138 DWORD TokenIsElevated
;
5139 } TOKEN_ELEVATION
, * PTOKEN_ELEVATION
;
5141 typedef struct _TOKEN_MANDATORY_LABEL
{
5142 SID_AND_ATTRIBUTES Label
;
5143 } TOKEN_MANDATORY_LABEL
, * PTOKEN_MANDATORY_LABEL
;
5145 #define TOKEN_MANDATORY_POLICY_OFF 0x0
5146 #define TOKEN_MANDATORY_POLICY_NO_WRITEUP 0x1
5147 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
5148 #define TOKEN_MANDATORY_POLICY_VALID_MASK 0x3
5150 typedef struct _TOKEN_MANDATORY_POLICY
{
5152 } TOKEN_MANDATORY_POLICY
, *PTOKEN_MANDATORY_POLICY
;
5154 typedef struct _TOKEN_APPCONTAINER_INFORMATION
{
5155 PSID TokenAppContainer
;
5156 } TOKEN_APPCONTAINER_INFORMATION
, * PTOKEN_APPCONTAINER_INFORMATION
;
5158 #define POLICY_AUDIT_SUBCATEGORY_COUNT 53
5160 typedef struct _TOKEN_AUDIT_POLICY
{
5161 BYTE PerUserPolicy
[((POLICY_AUDIT_SUBCATEGORY_COUNT
) >> 1) + 1];
5162 } TOKEN_AUDIT_POLICY
, *PTOKEN_AUDIT_POLICY
;
5164 typedef struct _TOKEN_ACCESS_INFORMATION
{
5165 PSID_AND_ATTRIBUTES_HASH SidHash
;
5166 PSID_AND_ATTRIBUTES_HASH RestrictedSidHash
;
5167 PTOKEN_PRIVILEGES Privileges
;
5168 LUID AuthenticationId
;
5169 TOKEN_TYPE TokenType
;
5170 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
5171 TOKEN_MANDATORY_POLICY MandatoryPolicy
;
5173 } TOKEN_ACCESS_INFORMATION
, *PTOKEN_ACCESS_INFORMATION
;
5175 typedef struct _TOKEN_CONTROL
{
5177 LUID AuthenticationId
;
5179 TOKEN_SOURCE TokenSource
;
5180 } TOKEN_CONTROL
, *PTOKEN_CONTROL
;
5186 /* ACEs, directly starting after an ACL */
5187 typedef struct _ACE_HEADER
{
5191 } ACE_HEADER
,*PACE_HEADER
;
5194 #define ACCESS_MIN_MS_ACE_TYPE 0x0
5195 #define ACCESS_ALLOWED_ACE_TYPE 0x0
5196 #define ACCESS_DENIED_ACE_TYPE 0x1
5197 #define SYSTEM_AUDIT_ACE_TYPE 0x2
5198 #define SYSTEM_ALARM_ACE_TYPE 0x3
5199 #define ACCESS_MAX_MS_V2_ACE_TYPE 0x3
5200 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE 0x4
5201 #define ACCESS_MAX_MS_V3_ACE_TYPE 0x4
5202 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE 0x5
5203 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE 0x5
5204 #define ACCESS_DENIED_OBJECT_ACE_TYPE 0x6
5205 #define ACCESS_AUDIT_OBJECT_ACE_TYPE 0x7
5206 #define ACCESS_ALARM_OBJECT_ACE_TYPE 0x8
5207 #define ACCESS_MAX_MS_V4_ACE_TYPE 0x8
5208 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE 0x9
5209 #define ACCESS_DENIED_CALLBACK_ACE_TYPE 0xa
5210 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE 0xb
5211 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE 0xc
5212 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE 0xd
5213 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE 0xe
5214 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE 0xf
5215 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE 0x10
5216 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11
5217 #define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE 0x12
5218 #define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE 0x13
5219 #define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE 0x14
5220 #define ACCESS_MAX_MS_V5_ACE_TYPE 0x14
5222 /* inherit AceFlags */
5223 #define OBJECT_INHERIT_ACE 0x01
5224 #define CONTAINER_INHERIT_ACE 0x02
5225 #define NO_PROPAGATE_INHERIT_ACE 0x04
5226 #define INHERIT_ONLY_ACE 0x08
5227 #define INHERITED_ACE 0x10
5228 #define VALID_INHERIT_FLAGS 0x1F
5230 /* AceFlags mask for what events we (should) audit */
5231 #define SUCCESSFUL_ACCESS_ACE_FLAG 0x40
5232 #define FAILED_ACCESS_ACE_FLAG 0x80
5234 /* different ACEs depending on AceType
5235 * SidStart marks the begin of a SID
5236 * so the thing finally looks like this:
5241 typedef struct _ACCESS_ALLOWED_ACE
{
5245 } ACCESS_ALLOWED_ACE
,*PACCESS_ALLOWED_ACE
;
5247 typedef struct _ACCESS_DENIED_ACE
{
5251 } ACCESS_DENIED_ACE
,*PACCESS_DENIED_ACE
;
5253 typedef struct _SYSTEM_AUDIT_ACE
{
5257 } SYSTEM_AUDIT_ACE
,*PSYSTEM_AUDIT_ACE
;
5259 typedef struct _SYSTEM_ALARM_ACE
{
5263 } SYSTEM_ALARM_ACE
,*PSYSTEM_ALARM_ACE
;
5265 typedef struct _SYSTEM_MANDATORY_LABEL_ACE
{
5269 } SYSTEM_MANDATORY_LABEL_ACE
,*PSYSTEM_MANDATORY_LABEL_ACE
;
5271 typedef struct _ACCESS_ALLOWED_OBJECT_ACE
{
5276 GUID InheritedObjectType
;
5278 } ACCESS_ALLOWED_OBJECT_ACE
, *PACCESS_ALLOWED_OBJECT_ACE
;
5280 typedef struct _ACCESS_DENIED_OBJECT_ACE
{
5285 GUID InheritedObjectType
;
5287 } ACCESS_DENIED_OBJECT_ACE
, *PACCESS_DENIED_OBJECT_ACE
;
5289 typedef struct _SYSTEM_AUDIT_OBJECT_ACE
{
5294 GUID InheritedObjectType
;
5296 } SYSTEM_AUDIT_OBJECT_ACE
, *PSYSTEM_AUDIT_OBJECT_ACE
;
5298 typedef struct _SYSTEM_ALARM_OBJECT_ACE
{
5303 GUID InheritedObjectType
;
5305 } SYSTEM_ALARM_OBJECT_ACE
, *PSYSTEM_ALARM_OBJECT_aCE
;
5307 typedef struct _ACCESS_ALLOWED_CALLBACK_ACE
{
5311 } ACCESS_ALLOWED_CALLBACK_ACE
,*PACCESS_ALLOWED_CALLBACK_ACE
;
5313 typedef struct _ACCESS_DENIED_CALLBACK_ACE
{
5317 } ACCESS_DENIED_CALLBACK_ACE
,*PACCESS_DENIED_CALLBACK_ACE
;
5319 typedef struct _SYSTEM_AUDIT_CALLBACK_ACE
{
5323 } SYSTEM_AUDIT_CALLBACK_ACE
,*PSYSTEM_AUDIT_CALLBACK_ACE
;
5325 typedef struct _SYSTEM_ALARM_CALLBACK_ACE
{
5329 } SYSTEM_ALARM_CALLBACK_ACE
,*PSYSTEM_ALARM_CALLBACK_ACE
;
5331 typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
{
5336 GUID InheritedObjectType
;
5338 } ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
, *PACCESS_ALLOWED_CALLBACK_OBJECT_ACE
;
5340 typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE
{
5345 GUID InheritedObjectType
;
5347 } ACCESS_DENIED_CALLBACK_OBJECT_ACE
, *PACCESS_DENIED_CALLBACK_OBJECT_ACE
;
5349 typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
{
5354 GUID InheritedObjectType
;
5356 } SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
, *PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE
;
5358 typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE
{
5363 GUID InheritedObjectType
;
5365 } SYSTEM_ALARM_CALLBACK_OBJECT_ACE
, *PSYSTEM_ALARM_CALLBACK_OBJECT_ACE
;
5367 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
5368 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
5369 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
5370 #define SYSTEM_MANDATORY_LABEL_VALID_MASK 0x7
5372 typedef enum tagSID_NAME_USE
{
5377 SidTypeWellKnownGroup
,
5378 SidTypeDeletedAccount
,
5381 } SID_NAME_USE
,*PSID_NAME_USE
;
5383 #define ACE_OBJECT_TYPE_PRESENT 0x1
5384 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
5388 /* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */
5390 #define DELETE 0x00010000
5391 #define READ_CONTROL 0x00020000
5392 #define WRITE_DAC 0x00040000
5393 #define WRITE_OWNER 0x00080000
5394 #define SYNCHRONIZE 0x00100000
5395 #define STANDARD_RIGHTS_REQUIRED 0x000f0000
5397 #define STANDARD_RIGHTS_READ READ_CONTROL
5398 #define STANDARD_RIGHTS_WRITE READ_CONTROL
5399 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
5401 #define STANDARD_RIGHTS_ALL 0x001f0000
5403 #define SPECIFIC_RIGHTS_ALL 0x0000ffff
5405 #define GENERIC_READ 0x80000000
5406 #define GENERIC_WRITE 0x40000000
5407 #define GENERIC_EXECUTE 0x20000000
5408 #define GENERIC_ALL 0x10000000
5410 #define MAXIMUM_ALLOWED 0x02000000
5411 #define ACCESS_SYSTEM_SECURITY 0x01000000
5413 #define EVENT_QUERY_STATE 0x0001
5414 #define EVENT_MODIFY_STATE 0x0002
5415 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
5417 #define SEMAPHORE_QUERY_STATE 0x0001
5418 #define SEMAPHORE_MODIFY_STATE 0x0002
5419 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
5421 #define MUTANT_QUERY_STATE 0x0001
5422 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
5424 #define JOB_OBJECT_ASSIGN_PROCESS 0x0001
5425 #define JOB_OBJECT_SET_ATTRIBUTES 0x0002
5426 #define JOB_OBJECT_QUERY 0x0004
5427 #define JOB_OBJECT_TERMINATE 0x0008
5428 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x0010
5429 #define JOB_OBJECT_IMPERSONATE 0x0020
5430 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3f)
5432 #define TIMER_QUERY_STATE 0x0001
5433 #define TIMER_MODIFY_STATE 0x0002
5434 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
5436 #define PROCESS_TERMINATE 0x0001
5437 #define PROCESS_CREATE_THREAD 0x0002
5438 #define PROCESS_VM_OPERATION 0x0008
5439 #define PROCESS_VM_READ 0x0010
5440 #define PROCESS_VM_WRITE 0x0020
5441 #define PROCESS_DUP_HANDLE 0x0040
5442 #define PROCESS_CREATE_PROCESS 0x0080
5443 #define PROCESS_SET_QUOTA 0x0100
5444 #define PROCESS_SET_INFORMATION 0x0200
5445 #define PROCESS_QUERY_INFORMATION 0x0400
5446 #define PROCESS_SUSPEND_RESUME 0x0800
5447 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
5448 #define PROCESS_SET_LIMITED_INFORMATION 0x2000
5449 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff)
5451 #define THREAD_TERMINATE 0x0001
5452 #define THREAD_SUSPEND_RESUME 0x0002
5453 #define THREAD_GET_CONTEXT 0x0008
5454 #define THREAD_SET_CONTEXT 0x0010
5455 #define THREAD_SET_INFORMATION 0x0020
5456 #define THREAD_QUERY_INFORMATION 0x0040
5457 #define THREAD_SET_THREAD_TOKEN 0x0080
5458 #define THREAD_IMPERSONATE 0x0100
5459 #define THREAD_DIRECT_IMPERSONATION 0x0200
5460 #define THREAD_SET_LIMITED_INFORMATION 0x0400
5461 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
5462 #define THREAD_RESUME 0x1000
5463 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff)
5465 #define THREAD_BASE_PRIORITY_LOWRT 15
5466 #define THREAD_BASE_PRIORITY_MAX 2
5467 #define THREAD_BASE_PRIORITY_MIN -2
5468 #define THREAD_BASE_PRIORITY_IDLE -15
5470 typedef struct _QUOTA_LIMITS
{
5471 SIZE_T PagedPoolLimit
;
5472 SIZE_T NonPagedPoolLimit
;
5473 SIZE_T MinimumWorkingSetSize
;
5474 SIZE_T MaximumWorkingSetSize
;
5475 SIZE_T PagefileLimit
;
5476 LARGE_INTEGER TimeLimit
;
5477 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
5479 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
5480 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
5481 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
5482 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
5483 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
5485 typedef union _RATE_QUOTA_LIMIT
{
5488 DWORD RatePercent
:7;
5491 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
5493 typedef struct _QUOTA_LIMITS_EX
{
5494 SIZE_T PagedPoolLimit
;
5495 SIZE_T NonPagedPoolLimit
;
5496 SIZE_T MinimumWorkingSetSize
;
5497 SIZE_T MaximumWorkingSetSize
;
5498 SIZE_T PagefileLimit
;
5499 LARGE_INTEGER TimeLimit
;
5500 SIZE_T WorkingSetLimit
;
5505 RATE_QUOTA_LIMIT CpuRateLimit
;
5506 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
5508 #define SECTION_QUERY 0x0001
5509 #define SECTION_MAP_WRITE 0x0002
5510 #define SECTION_MAP_READ 0x0004
5511 #define SECTION_MAP_EXECUTE 0x0008
5512 #define SECTION_EXTEND_SIZE 0x0010
5513 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
5514 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x01f)
5516 #define FILE_READ_DATA 0x0001 /* file & pipe */
5517 #define FILE_LIST_DIRECTORY 0x0001 /* directory */
5518 #define FILE_WRITE_DATA 0x0002 /* file & pipe */
5519 #define FILE_ADD_FILE 0x0002 /* directory */
5520 #define FILE_APPEND_DATA 0x0004 /* file */
5521 #define FILE_ADD_SUBDIRECTORY 0x0004 /* directory */
5522 #define FILE_CREATE_PIPE_INSTANCE 0x0004 /* named pipe */
5523 #define FILE_READ_EA 0x0008 /* file & directory */
5524 #define FILE_READ_PROPERTIES FILE_READ_EA
5525 #define FILE_WRITE_EA 0x0010 /* file & directory */
5526 #define FILE_WRITE_PROPERTIES FILE_WRITE_EA
5527 #define FILE_EXECUTE 0x0020 /* file */
5528 #define FILE_TRAVERSE 0x0020 /* directory */
5529 #define FILE_DELETE_CHILD 0x0040 /* directory */
5530 #define FILE_READ_ATTRIBUTES 0x0080 /* all */
5531 #define FILE_WRITE_ATTRIBUTES 0x0100 /* all */
5532 #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
5534 #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | \
5535 FILE_READ_ATTRIBUTES | FILE_READ_EA | \
5537 #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \
5538 FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \
5539 FILE_APPEND_DATA | SYNCHRONIZE)
5540 #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
5541 FILE_READ_ATTRIBUTES | SYNCHRONIZE)
5543 #define DUPLICATE_CLOSE_SOURCE 0x00000001
5544 #define DUPLICATE_SAME_ACCESS 0x00000002
5546 #define DUPLICATE_MAKE_GLOBAL 0x80000000 /* Not a Windows flag */
5549 /* File attribute flags */
5550 #define FILE_SHARE_READ 0x00000001
5551 #define FILE_SHARE_WRITE 0x00000002
5552 #define FILE_SHARE_DELETE 0x00000004
5554 #define FILE_ATTRIBUTE_READONLY 0x00000001
5555 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
5556 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
5557 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
5558 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
5559 #define FILE_ATTRIBUTE_DEVICE 0x00000040
5560 #define FILE_ATTRIBUTE_NORMAL 0x00000080
5561 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
5562 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
5563 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
5564 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
5565 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
5566 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
5567 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
5568 #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000
5569 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
5570 #define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000
5571 #define FILE_ATTRIBUTE_EA 0x00040000
5573 /* File notification flags */
5574 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
5575 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
5576 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
5577 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
5578 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
5579 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
5580 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
5581 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
5582 #define FILE_NOTIFY_CHANGE_EA 0x00000080
5583 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
5584 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
5585 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
5586 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
5588 #define FILE_ACTION_ADDED 0x00000001
5589 #define FILE_ACTION_REMOVED 0x00000002
5590 #define FILE_ACTION_MODIFIED 0x00000003
5591 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
5592 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
5593 #define FILE_ACTION_ADDED_STREAM 0x00000006
5594 #define FILE_ACTION_REMOVED_STREAM 0x00000007
5595 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
5596 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
5597 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000a
5598 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000b
5600 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
5601 #define FILE_CASE_PRESERVED_NAMES 0x00000002
5602 #define FILE_UNICODE_ON_DISK 0x00000004
5603 #define FILE_PERSISTENT_ACLS 0x00000008
5604 #define FILE_FILE_COMPRESSION 0x00000010
5605 #define FILE_VOLUME_QUOTAS 0x00000020
5606 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
5607 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
5608 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
5609 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
5610 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
5611 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
5612 #define FILE_NAMED_STREAMS 0x00040000
5613 #define FILE_READ_ONLY_VOLUME 0x00080000
5614 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
5615 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
5616 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
5617 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
5618 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
5619 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
5620 #define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000
5621 #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000
5622 #define FILE_SUPPORTS_SPARSE_VDL 0x10000000
5623 #define FILE_DAX_VOLUME 0x20000000
5624 #define FILE_SUPPORTS_GHOSTING 0x40000000
5626 /* File alignments (NT) */
5627 #define FILE_BYTE_ALIGNMENT 0x00000000
5628 #define FILE_WORD_ALIGNMENT 0x00000001
5629 #define FILE_LONG_ALIGNMENT 0x00000003
5630 #define FILE_QUAD_ALIGNMENT 0x00000007
5631 #define FILE_OCTA_ALIGNMENT 0x0000000f
5632 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
5633 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
5634 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
5635 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
5636 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
5638 #define COMPRESSION_FORMAT_NONE 0
5639 #define COMPRESSION_FORMAT_DEFAULT 1
5640 #define COMPRESSION_FORMAT_LZNT1 2
5641 #define COMPRESSION_ENGINE_STANDARD 0
5642 #define COMPRESSION_ENGINE_MAXIMUM 256
5644 #define MAILSLOT_NO_MESSAGE ((DWORD)-1)
5645 #define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
5647 #define REG_NONE 0 /* no type */
5648 #define REG_SZ 1 /* string type (ASCII) */
5649 #define REG_EXPAND_SZ 2 /* string, includes %ENVVAR% (expanded by caller) (ASCII) */
5650 #define REG_BINARY 3 /* binary format, callerspecific */
5651 /* YES, REG_DWORD == REG_DWORD_LITTLE_ENDIAN */
5652 #define REG_DWORD 4 /* DWORD in little endian format */
5653 #define REG_DWORD_LITTLE_ENDIAN 4 /* DWORD in little endian format */
5654 #define REG_DWORD_BIG_ENDIAN 5 /* DWORD in big endian format */
5655 #define REG_LINK 6 /* symbolic link (UNICODE) */
5656 #define REG_MULTI_SZ 7 /* multiple strings, delimited by \0, terminated by \0\0 (ASCII) */
5657 #define REG_RESOURCE_LIST 8 /* resource list? huh? */
5658 #define REG_FULL_RESOURCE_DESCRIPTOR 9 /* full resource descriptor? huh? */
5659 #define REG_RESOURCE_REQUIREMENTS_LIST 10
5660 #define REG_QWORD 11 /* QWORD in little endian format */
5661 #define REG_QWORD_LITTLE_ENDIAN 11 /* QWORD in little endian format */
5663 /* ----------------------------- begin power management --------------------- */
5665 typedef enum _LATENCY_TIME
{
5668 } LATENCY_TIME
, *PLATENCY_TIME
;
5670 #define DISCHARGE_POLICY_CRITICAL 0
5671 #define DISCHARGE_POLICY_LOW 1
5672 #define NUM_DISCHARGE_POLICIES 4
5674 #define PO_THROTTLE_NONE 0
5675 #define PO_THROTTLE_CONSTANT 1
5676 #define PO_THROTTLE_DEGRADE 2
5677 #define PO_THROTTLE_ADAPTIVE 3
5679 typedef enum _POWER_ACTION
{
5680 PowerActionNone
= 0,
5681 PowerActionReserved
,
5683 PowerActionHibernate
,
5684 PowerActionShutdown
,
5685 PowerActionShutdownReset
,
5686 PowerActionShutdownOff
,
5687 PowerActionWarmEject
5691 typedef enum _POWER_PLATFORM_ROLE
{
5692 PlatformRoleUnspecified
,
5693 PlatformRoleDesktop
,
5695 PlatformRoleWorkstation
,
5696 PlatformRoleEnterpriseServer
,
5697 PlatformRoleSOHOServer
,
5698 PlatformRoleAppliancePC
,
5699 PlatformRolePerformanceServer
,
5702 } POWER_PLATFORM_ROLE
, *PPOWER_PLATFORM_ROLE
;
5704 typedef enum _SYSTEM_POWER_STATE
{
5705 PowerSystemUnspecified
= 0,
5706 PowerSystemWorking
= 1,
5707 PowerSystemSleeping1
= 2,
5708 PowerSystemSleeping2
= 3,
5709 PowerSystemSleeping3
= 4,
5710 PowerSystemHibernate
= 5,
5711 PowerSystemShutdown
= 6,
5712 PowerSystemMaximum
= 7
5713 } SYSTEM_POWER_STATE
,
5714 *PSYSTEM_POWER_STATE
;
5716 typedef enum _DEVICE_POWER_STATE
{
5717 PowerDeviceUnspecified
,
5723 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
5725 typedef enum _POWER_INFORMATION_LEVEL
{
5726 SystemPowerPolicyAc
,
5727 SystemPowerPolicyDc
,
5728 VerifySystemPolicyAc
,
5729 VerifySystemPolicyDc
,
5730 SystemPowerCapabilities
,
5732 SystemPowerStateHandler
,
5733 ProcessorStateHandler
,
5734 SystemPowerPolicyCurrent
,
5735 AdministratorPowerPolicy
,
5736 SystemReserveHiberFile
,
5737 ProcessorInformation
,
5738 SystemPowerInformation
,
5739 ProcessorStateHandler2
,
5742 SystemExecutionState
,
5743 SystemPowerStateNotifyHandler
,
5744 ProcessorPowerPolicyAc
,
5745 ProcessorPowerPolicyDc
,
5746 VerifyProcessorPowerPolicyAc
,
5747 VerifyProcessorPowerPolicyDc
,
5748 ProcessorPowerPolicyCurrent
5749 } POWER_INFORMATION_LEVEL
;
5751 typedef struct _ADMINISTRATOR_POWER_POLICY
{
5752 SYSTEM_POWER_STATE MinSleep
;
5753 SYSTEM_POWER_STATE MaxSleep
;
5754 ULONG MinVideoTimeout
;
5755 ULONG MaxVideoTimeout
;
5756 ULONG MinSpindownTimeout
;
5757 ULONG MaxSpindownTimeout
;
5758 } ADMINISTRATOR_POWER_POLICY
, *PADMINISTRATOR_POWER_POLICY
;
5763 } BATTERY_REPORTING_SCALE
,
5764 *PBATTERY_REPORTING_SCALE
;
5767 POWER_ACTION Action
;
5770 } POWER_ACTION_POLICY
,
5771 *PPOWER_ACTION_POLICY
;
5773 typedef struct _PROCESSOR_POWER_INFORMATION
{
5779 ULONG CurrentIdleState
;
5780 } PROCESSOR_POWER_INFORMATION
,
5781 *PPROCESSOR_POWER_INFORMATION
;
5783 typedef struct _PROCESSOR_POWER_POLICY_INFO
{
5787 UCHAR DemotePercent
;
5788 UCHAR PromotePercent
;
5790 ULONG AllowDemotion
:1;
5791 ULONG AllowPromotion
:1;
5793 } PROCESSOR_POWER_POLICY_INFO
,
5794 *PPROCESSOR_POWER_POLICY_INFO
;
5796 typedef struct _PROCESSOR_POWER_POLICY
{
5798 BYTE DynamicThrottle
;
5800 DWORD DisableCStates
:1;
5803 PROCESSOR_POWER_POLICY_INFO Policy
[3];
5804 } PROCESSOR_POWER_POLICY
,
5805 *PPROCESSOR_POWER_POLICY
;
5809 BOOLEAN BatteryPresent
;
5811 BOOLEAN Discharging
;
5815 ULONG RemainingCapacity
;
5817 ULONG EstimatedTime
;
5818 ULONG DefaultAlert1
;
5819 ULONG DefaultAlert2
;
5820 } SYSTEM_BATTERY_STATE
,
5821 *PSYSTEM_BATTERY_STATE
;
5824 BOOLEAN PowerButtonPresent
;
5825 BOOLEAN SleepButtonPresent
;
5832 BOOLEAN HiberFilePresent
;
5834 BOOLEAN VideoDimPresent
;
5837 BOOLEAN ThermalControl
;
5838 BOOLEAN ProcessorThrottle
;
5839 UCHAR ProcessorMinThrottle
;
5840 UCHAR ProcessorMaxThrottle
;
5842 BOOLEAN DiskSpinDown
;
5844 BOOLEAN SystemBatteriesPresent
;
5845 BOOLEAN BatteriesAreShortTerm
;
5846 BATTERY_REPORTING_SCALE BatteryScale
[3];
5847 SYSTEM_POWER_STATE AcOnLineWake
;
5848 SYSTEM_POWER_STATE SoftLidWake
;
5849 SYSTEM_POWER_STATE RtcWake
;
5850 SYSTEM_POWER_STATE MinDeviceWakeState
;
5851 SYSTEM_POWER_STATE DefaultLowLatencyWake
;
5852 } SYSTEM_POWER_CAPABILITIES
,
5853 *PSYSTEM_POWER_CAPABILITIES
;
5855 typedef struct _SYSTEM_POWER_INFORMATION
{
5856 ULONG MaxIdlenessAllowed
;
5858 ULONG TimeRemaining
;
5860 } SYSTEM_POWER_INFORMATION
,
5861 *PSYSTEM_POWER_INFORMATION
;
5863 typedef struct _SYSTEM_POWER_LEVEL
{
5867 POWER_ACTION_POLICY PowerPolicy
;
5868 SYSTEM_POWER_STATE MinSystemState
;
5869 } SYSTEM_POWER_LEVEL
,
5870 *PSYSTEM_POWER_LEVEL
;
5872 typedef struct _SYSTEM_POWER_POLICY
{
5874 POWER_ACTION_POLICY PowerButton
;
5875 POWER_ACTION_POLICY SleepButton
;
5876 POWER_ACTION_POLICY LidClose
;
5877 SYSTEM_POWER_STATE LidOpenWake
;
5879 POWER_ACTION_POLICY Idle
;
5881 UCHAR IdleSensitivity
;
5882 UCHAR DynamicThrottle
;
5884 SYSTEM_POWER_STATE MinSleep
;
5885 SYSTEM_POWER_STATE MaxSleep
;
5886 SYSTEM_POWER_STATE ReducedLatencySleep
;
5887 ULONG WinLogonFlags
;
5889 ULONG DozeS4Timeout
;
5890 ULONG BroadcastCapacityResolution
;
5891 SYSTEM_POWER_LEVEL DischargePolicy
[NUM_DISCHARGE_POLICIES
];
5893 BOOLEAN VideoDimDisplay
;
5894 ULONG VideoReserved
[3];
5895 ULONG SpindownTimeout
;
5896 BOOLEAN OptimizeForPower
;
5897 UCHAR FanThrottleTolerance
;
5898 UCHAR ForcedThrottle
;
5900 POWER_ACTION_POLICY OverThrottled
;
5901 } SYSTEM_POWER_POLICY
,
5902 *PSYSTEM_POWER_POLICY
;
5904 typedef enum _POWER_REQUEST_TYPE
5906 PowerRequestDisplayRequired
,
5907 PowerRequestSystemRequired
,
5908 PowerRequestAwayModeRequired
5909 } POWER_REQUEST_TYPE
, *PPOWER_REQUEST_TYPE
;
5911 #define POWER_REQUEST_CONTEXT_VERSION 0
5913 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
5914 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
5916 typedef union _FILE_SEGMENT_ELEMENT
{
5918 ULONGLONG Alignment
;
5919 } FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
5921 typedef struct _FILE_NOTIFY_INFORMATION
{
5922 DWORD NextEntryOffset
;
5924 DWORD FileNameLength
;
5926 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
5928 /* ----------------------------- begin tape storage --------------------- */
5930 #define TAPE_FIXED_PARTITIONS 0
5931 #define TAPE_SELECT_PARTITIONS 1
5932 #define TAPE_INITIATOR_PARTITIONS 2
5933 #define TAPE_ERASE_SHORT 0
5934 #define TAPE_ERASE_LONG 1
5936 #define TAPE_UNLOAD 1
5937 #define TAPE_TENSION 2
5939 #define TAPE_UNLOCK 4
5940 #define TAPE_FORMAT 5
5941 #define TAPE_SETMARKS 0
5942 #define TAPE_FILEMARKS 1
5943 #define TAPE_SHORT_FILEMARKS 2
5944 #define TAPE_LONG_FILEMARKS 3
5945 #define TAPE_REWIND 0
5946 #define TAPE_ABSOLUTE_BLOCK 1
5947 #define TAPE_LOGICAL_BLOCK 2
5948 #define TAPE_PSEUDO_LOGICAL_BLOCK 3
5949 #define TAPE_SPACE_END_OF_DATA 4
5950 #define TAPE_SPACE_RELATIVE_BLOCKS 5
5951 #define TAPE_SPACE_FILEMARKS 6
5952 #define TAPE_SPACE_SEQUENTIAL_FMKS 7
5953 #define TAPE_SPACE_SETMARKS 8
5954 #define TAPE_SPACE_SEQUENTIAL_SMKS 9
5956 typedef struct _TAPE_CREATE_PARTITION
{
5960 } TAPE_CREATE_PARTITION
, *PTAPE_CREATE_PARTITION
;
5962 typedef struct _TAPE_ERASE
{
5965 } TAPE_ERASE
, *PTAPE_ERASE
;
5967 typedef struct _TAPE_PREPARE
{
5970 } TAPE_PREPARE
, *PTAPE_PREPARE
;
5972 typedef struct _TAPE_SET_DRIVE_PARAMETERS
{
5974 BOOLEAN Compression
;
5975 BOOLEAN DataPadding
;
5976 BOOLEAN ReportSetmarks
;
5977 ULONG EOTWarningZoneSize
;
5978 } TAPE_SET_DRIVE_PARAMETERS
, *PTAPE_SET_DRIVE_PARAMETERS
;
5980 typedef struct _TAPE_SET_MEDIA_PARAMETERS
{
5982 } TAPE_SET_MEDIA_PARAMETERS
, *PTAPE_SET_MEDIA_PARAMETERS
;
5984 typedef struct _TAPE_WRITE_MARKS
{
5988 } TAPE_WRITE_MARKS
, *PTAPE_WRITE_MARKS
;
5990 typedef struct _TAPE_GET_POSITION
{
5995 } TAPE_GET_POSITION
, *PTAPE_GET_POSITION
;
5997 typedef struct _TAPE_SET_POSITION
{
6000 LARGE_INTEGER Offset
;
6002 } TAPE_SET_POSITION
, *PTAPE_SET_POSITION
;
6004 typedef struct _TAPE_GET_DRIVE_PARAMETERS
{
6006 BOOLEAN Compression
;
6007 BOOLEAN DataPadding
;
6008 BOOLEAN ReportSetmarks
;
6009 DWORD DefaultBlockSize
;
6010 DWORD MaximumBlockSize
;
6011 DWORD MinimumBlockSize
;
6012 DWORD MaximumPartitionCount
;
6015 DWORD EOTWarningZoneSize
;
6016 } TAPE_GET_DRIVE_PARAMETERS
, *PTAPE_GET_DRIVE_PARAMETERS
;
6018 typedef struct _TAPE_GET_MEDIA_PARAMETERS
{
6019 LARGE_INTEGER Capacity
;
6020 LARGE_INTEGER Remaining
;
6022 DWORD PartitionCount
;
6023 BOOLEAN WriteProtected
;
6024 } TAPE_GET_MEDIA_PARAMETERS
, *PTAPE_GET_MEDIA_PARAMETERS
;
6026 /* ----------------------------- begin registry ----------------------------- */
6028 /* Registry security values */
6029 #define OWNER_SECURITY_INFORMATION 0x00000001
6030 #define GROUP_SECURITY_INFORMATION 0x00000002
6031 #define DACL_SECURITY_INFORMATION 0x00000004
6032 #define SACL_SECURITY_INFORMATION 0x00000008
6033 #define LABEL_SECURITY_INFORMATION 0x00000010
6035 #define REG_OPTION_RESERVED 0x00000000
6036 #define REG_OPTION_NON_VOLATILE 0x00000000
6037 #define REG_OPTION_VOLATILE 0x00000001
6038 #define REG_OPTION_CREATE_LINK 0x00000002
6039 #define REG_OPTION_BACKUP_RESTORE 0x00000004 /* FIXME */
6040 #define REG_OPTION_OPEN_LINK 0x00000008
6041 #define REG_LEGAL_OPTION (REG_OPTION_RESERVED | \
6042 REG_OPTION_NON_VOLATILE | \
6043 REG_OPTION_VOLATILE | \
6044 REG_OPTION_CREATE_LINK | \
6045 REG_OPTION_BACKUP_RESTORE | \
6046 REG_OPTION_OPEN_LINK)
6049 #define REG_CREATED_NEW_KEY 0x00000001
6050 #define REG_OPENED_EXISTING_KEY 0x00000002
6052 /* For RegNotifyChangeKeyValue */
6053 #define REG_NOTIFY_CHANGE_NAME 0x01
6054 #define REG_NOTIFY_CHANGE_ATTRIBUTES 0x02
6055 #define REG_NOTIFY_CHANGE_LAST_SET 0x04
6056 #define REG_NOTIFY_CHANGE_SECURITY 0x08
6057 #define REG_NOTIFY_THREAD_AGNOSTIC 0x10000000
6059 #define KEY_QUERY_VALUE 0x00000001
6060 #define KEY_SET_VALUE 0x00000002
6061 #define KEY_CREATE_SUB_KEY 0x00000004
6062 #define KEY_ENUMERATE_SUB_KEYS 0x00000008
6063 #define KEY_NOTIFY 0x00000010
6064 #define KEY_CREATE_LINK 0x00000020
6065 #define KEY_WOW64_64KEY 0x00000100
6066 #define KEY_WOW64_32KEY 0x00000200
6067 #define KEY_WOW64_RES 0x00000300
6069 /* for RegKeyRestore flags */
6070 #define REG_WHOLE_HIVE_VOLATILE 0x00000001
6071 #define REG_REFRESH_HIVE 0x00000002
6072 #define REG_NO_LAZY_FLUSH 0x00000004
6073 #define REG_FORCE_RESTORE 0x00000008
6075 #define KEY_READ ((STANDARD_RIGHTS_READ| \
6077 KEY_ENUMERATE_SUB_KEYS| \
6081 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE| \
6083 KEY_CREATE_SUB_KEY) \
6086 #define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE))
6087 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL| \
6090 KEY_CREATE_SUB_KEY| \
6091 KEY_ENUMERATE_SUB_KEYS| \
6096 /* ------------------------------ end registry ------------------------------ */
6099 #define EVENTLOG_SUCCESS 0x0000
6100 #define EVENTLOG_ERROR_TYPE 0x0001
6101 #define EVENTLOG_WARNING_TYPE 0x0002
6102 #define EVENTLOG_INFORMATION_TYPE 0x0004
6103 #define EVENTLOG_AUDIT_SUCCESS 0x0008
6104 #define EVENTLOG_AUDIT_FAILURE 0x0010
6106 #define EVENTLOG_SEQUENTIAL_READ 0x0001
6107 #define EVENTLOG_SEEK_READ 0x0002
6108 #define EVENTLOG_FORWARDS_READ 0x0004
6109 #define EVENTLOG_BACKWARDS_READ 0x0008
6111 typedef struct _EVENTLOGRECORD
{
6115 DWORD TimeGenerated
;
6122 DWORD ClosingRecordNumber
;
6124 DWORD UserSidLength
;
6125 DWORD UserSidOffset
;
6128 } EVENTLOGRECORD
, *PEVENTLOGRECORD
;
6130 #define SERVICE_BOOT_START 0x00000000
6131 #define SERVICE_SYSTEM_START 0x00000001
6132 #define SERVICE_AUTO_START 0x00000002
6133 #define SERVICE_DEMAND_START 0x00000003
6134 #define SERVICE_DISABLED 0x00000004
6136 #define SERVICE_ERROR_IGNORE 0x00000000
6137 #define SERVICE_ERROR_NORMAL 0x00000001
6138 #define SERVICE_ERROR_SEVERE 0x00000002
6139 #define SERVICE_ERROR_CRITICAL 0x00000003
6142 #define SERVICE_KERNEL_DRIVER 0x00000001
6143 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
6144 #define SERVICE_ADAPTER 0x00000004
6145 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
6147 #define SERVICE_DRIVER ( SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | \
6148 SERVICE_RECOGNIZER_DRIVER )
6150 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
6151 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
6152 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
6154 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
6156 #define SERVICE_TYPE_ALL ( SERVICE_WIN32 | SERVICE_ADAPTER | \
6157 SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS )
6160 typedef enum _CM_SERVICE_NODE_TYPE
6162 DriverType
= SERVICE_KERNEL_DRIVER
,
6163 FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,
6164 Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
6165 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,
6166 AdapterType
= SERVICE_ADAPTER
,
6167 RecognizerType
= SERVICE_RECOGNIZER_DRIVER
6168 } SERVICE_NODE_TYPE
;
6170 typedef enum _CM_SERVICE_LOAD_TYPE
6172 BootLoad
= SERVICE_BOOT_START
,
6173 SystemLoad
= SERVICE_SYSTEM_START
,
6174 AutoLoad
= SERVICE_AUTO_START
,
6175 DemandLoad
= SERVICE_DEMAND_START
,
6176 DisableLoad
= SERVICE_DISABLED
6177 } SERVICE_LOAD_TYPE
;
6179 typedef enum _CM_ERROR_CONTROL_TYPE
6181 IgnoreError
= SERVICE_ERROR_IGNORE
,
6182 NormalError
= SERVICE_ERROR_NORMAL
,
6183 SevereError
= SERVICE_ERROR_SEVERE
,
6184 CriticalError
= SERVICE_ERROR_CRITICAL
6185 } SERVICE_ERROR_TYPE
;
6187 NTSYSAPI SIZE_T WINAPI
RtlCompareMemory(const VOID
*, const VOID
*, SIZE_T
);
6188 NTSYSAPI SIZE_T WINAPI
RtlCompareMemoryUlong(VOID
*, SIZE_T
, ULONG
);
6190 #define RtlEqualMemory(Destination, Source, Length) (!memcmp((Destination),(Source),(Length)))
6191 #define RtlMoveMemory(Destination, Source, Length) memmove((Destination),(Source),(Length))
6192 #define RtlCopyMemory(Destination, Source, Length) memcpy((Destination),(Source),(Length))
6193 #define RtlFillMemory(Destination, Length, Fill) memset((Destination),(Fill),(Length))
6194 #define RtlZeroMemory(Destination, Length) memset((Destination),0,(Length))
6196 static FORCEINLINE
void *RtlSecureZeroMemory(void *buffer
, SIZE_T length
)
6198 volatile char *ptr
= (volatile char *)buffer
;
6200 while (length
--) *ptr
++ = 0;
6204 #include <guiddef.h>
6206 typedef struct _OBJECT_TYPE_LIST
{
6210 } OBJECT_TYPE_LIST
, *POBJECT_TYPE_LIST
;
6212 typedef struct _RTL_CRITICAL_SECTION_DEBUG
6215 WORD CreatorBackTraceIndex
;
6216 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
6217 LIST_ENTRY ProcessLocksList
;
6219 DWORD ContentionCount
;
6220 #ifdef __WINESRC__ /* in Wine we store the name here */
6221 DWORD_PTR Spare
[8/sizeof(DWORD_PTR
)];
6225 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
6227 typedef struct _RTL_CRITICAL_SECTION
{
6228 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
6230 LONG RecursionCount
;
6231 HANDLE OwningThread
;
6232 HANDLE LockSemaphore
;
6233 ULONG_PTR SpinCount
;
6234 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
6236 #define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x1000000
6237 #define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x2000000
6238 #define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x4000000
6239 #define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xFF000000
6240 #define RTL_CRITICAL_SECTION_FLAG_RESERVED (RTL_CRITICAL_SECTION_ALL_FLAG_BITS & ~0x7000000)
6242 typedef struct _RTL_SRWLOCK
{
6244 } RTL_SRWLOCK
, *PRTL_SRWLOCK
;
6246 #define RTL_SRWLOCK_INIT {0}
6248 typedef struct _RTL_CONDITION_VARIABLE
{
6250 } RTL_CONDITION_VARIABLE
, *PRTL_CONDITION_VARIABLE
;
6251 #define RTL_CONDITION_VARIABLE_INIT {0}
6252 #define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1
6254 typedef VOID (NTAPI
* WAITORTIMERCALLBACKFUNC
) (PVOID
, BOOLEAN
);
6255 typedef VOID (NTAPI
* PFLS_CALLBACK_FUNCTION
) ( PVOID
);
6257 #define RTL_RUN_ONCE_INIT {0}
6258 typedef union _RTL_RUN_ONCE
{
6260 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
6262 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001
6263 #define RTL_RUN_ONCE_ASYNC 0x00000002
6264 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004
6266 typedef DWORD WINAPI
RTL_RUN_ONCE_INIT_FN(PRTL_RUN_ONCE
, PVOID
, PVOID
*);
6267 typedef RTL_RUN_ONCE_INIT_FN
*PRTL_RUN_ONCE_INIT_FN
;
6268 NTSYSAPI VOID WINAPI
RtlRunOnceInitialize(PRTL_RUN_ONCE
);
6269 NTSYSAPI DWORD WINAPI
RtlRunOnceExecuteOnce(PRTL_RUN_ONCE
,PRTL_RUN_ONCE_INIT_FN
,PVOID
,PVOID
*);
6270 NTSYSAPI DWORD WINAPI
RtlRunOnceBeginInitialize(PRTL_RUN_ONCE
, DWORD
, PVOID
*);
6271 NTSYSAPI DWORD WINAPI
RtlRunOnceComplete(PRTL_RUN_ONCE
, DWORD
, PVOID
);
6273 #include <pshpack8.h>
6274 typedef struct _IO_COUNTERS
{
6275 ULONGLONG
DECLSPEC_ALIGN(8) ReadOperationCount
;
6276 ULONGLONG
DECLSPEC_ALIGN(8) WriteOperationCount
;
6277 ULONGLONG
DECLSPEC_ALIGN(8) OtherOperationCount
;
6278 ULONGLONG
DECLSPEC_ALIGN(8) ReadTransferCount
;
6279 ULONGLONG
DECLSPEC_ALIGN(8) WriteTransferCount
;
6280 ULONGLONG
DECLSPEC_ALIGN(8) OtherTransferCount
;
6281 } IO_COUNTERS
, *PIO_COUNTERS
;
6282 #include <poppack.h>
6285 DWORD dwOSVersionInfoSize
;
6286 DWORD dwMajorVersion
;
6287 DWORD dwMinorVersion
;
6288 DWORD dwBuildNumber
;
6290 CHAR szCSDVersion
[128];
6291 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
6294 DWORD dwOSVersionInfoSize
;
6295 DWORD dwMajorVersion
;
6296 DWORD dwMinorVersion
;
6297 DWORD dwBuildNumber
;
6299 WCHAR szCSDVersion
[128];
6300 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
6302 DECL_WINELIB_TYPE_AW(OSVERSIONINFO
)
6303 DECL_WINELIB_TYPE_AW(POSVERSIONINFO
)
6304 DECL_WINELIB_TYPE_AW(LPOSVERSIONINFO
)
6307 DWORD dwOSVersionInfoSize
;
6308 DWORD dwMajorVersion
;
6309 DWORD dwMinorVersion
;
6310 DWORD dwBuildNumber
;
6312 CHAR szCSDVersion
[128];
6313 WORD wServicePackMajor
;
6314 WORD wServicePackMinor
;
6318 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
6321 DWORD dwOSVersionInfoSize
;
6322 DWORD dwMajorVersion
;
6323 DWORD dwMinorVersion
;
6324 DWORD dwBuildNumber
;
6326 WCHAR szCSDVersion
[128];
6327 WORD wServicePackMajor
;
6328 WORD wServicePackMinor
;
6332 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
6334 DECL_WINELIB_TYPE_AW(OSVERSIONINFOEX
)
6335 DECL_WINELIB_TYPE_AW(POSVERSIONINFOEX
)
6336 DECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX
)
6338 NTSYSAPI ULONGLONG WINAPI
VerSetConditionMask(ULONGLONG
,DWORD
,BYTE
);
6340 #define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
6342 #define VER_PLATFORM_WIN32s 0
6343 #define VER_PLATFORM_WIN32_WINDOWS 1
6344 #define VER_PLATFORM_WIN32_NT 2
6346 #define VER_MINORVERSION 0x00000001
6347 #define VER_MAJORVERSION 0x00000002
6348 #define VER_BUILDNUMBER 0x00000004
6349 #define VER_PLATFORMID 0x00000008
6350 #define VER_SERVICEPACKMINOR 0x00000010
6351 #define VER_SERVICEPACKMAJOR 0x00000020
6352 #define VER_SUITENAME 0x00000040
6353 #define VER_PRODUCT_TYPE 0x00000080
6355 #define VER_NT_WORKSTATION 1
6356 #define VER_NT_DOMAIN_CONTROLLER 2
6357 #define VER_NT_SERVER 3
6359 #define VER_SUITE_SMALLBUSINESS 0x00000001
6360 #define VER_SUITE_ENTERPRISE 0x00000002
6361 #define VER_SUITE_BACKOFFICE 0x00000004
6362 #define VER_SUITE_COMMUNICATIONS 0x00000008
6363 #define VER_SUITE_TERMINAL 0x00000010
6364 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
6365 #define VER_SUITE_EMBEDDEDNT 0x00000040
6366 #define VER_SUITE_DATACENTER 0x00000080
6367 #define VER_SUITE_SINGLEUSERTS 0x00000100
6368 #define VER_SUITE_PERSONAL 0x00000200
6369 #define VER_SUITE_BLADE 0x00000400
6370 #define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
6371 #define VER_SUITE_SECURITY_APPLIANCE 0x00001000
6372 #define VER_SUITE_STORAGE_SERVER 0x00002000
6373 #define VER_SUITE_COMPUTE_SERVER 0x00004000
6374 #define VER_SUITE_WH_SERVER 0x00008000
6377 #define VER_GREATER 2
6378 #define VER_GREATER_EQUAL 3
6380 #define VER_LESS_EQUAL 5
6384 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION
{
6386 DWORD ulFormatVersion
;
6387 DWORD ulAssemblyCount
;
6388 DWORD ulRootManifestPathType
;
6389 DWORD ulRootManifestPathChars
;
6390 DWORD ulRootConfigurationPathType
;
6391 DWORD ulRootConfigurationPathChars
;
6392 DWORD ulAppDirPathType
;
6393 DWORD ulAppDirPathChars
;
6394 PCWSTR lpRootManifestPath
;
6395 PCWSTR lpRootConfigurationPath
;
6396 PCWSTR lpAppDirPath
;
6397 } ACTIVATION_CONTEXT_DETAILED_INFORMATION
, *PACTIVATION_CONTEXT_DETAILED_INFORMATION
;
6399 typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
{
6401 DWORD ulEncodedAssemblyIdentityLength
;
6402 DWORD ulManifestPathType
;
6403 DWORD ulManifestPathLength
;
6404 LARGE_INTEGER liManifestLastWriteTime
;
6405 DWORD ulPolicyPathType
;
6406 DWORD ulPolicyPathLength
;
6407 LARGE_INTEGER liPolicyLastWriteTime
;
6408 DWORD ulMetadataSatelliteRosterIndex
;
6409 DWORD ulManifestVersionMajor
;
6410 DWORD ulManifestVersionMinor
;
6411 DWORD ulPolicyVersionMajor
;
6412 DWORD ulPolicyVersionMinor
;
6413 DWORD ulAssemblyDirectoryNameLength
;
6414 PCWSTR lpAssemblyEncodedAssemblyIdentity
;
6415 PCWSTR lpAssemblyManifestPath
;
6416 PCWSTR lpAssemblyPolicyPath
;
6417 PCWSTR lpAssemblyDirectoryName
;
6419 } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
;
6421 typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX
{
6422 DWORD ulAssemblyIndex
;
6423 DWORD ulFileIndexInAssembly
;
6424 } ACTIVATION_CONTEXT_QUERY_INDEX
, *PACTIVATION_CONTEXT_QUERY_INDEX
;
6426 typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX
*PCACTIVATION_CONTEXT_QUERY_INDEX
;
6428 typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION
{
6430 DWORD ulFilenameLength
;
6434 } ASSEMBLY_FILE_DETAILED_INFORMATION
, *PASSEMBLY_FILE_DETAILED_INFORMATION
;
6436 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION
*PCASSEMBLY_FILE_DETAILED_INFORMATION
;
6439 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN
= 0,
6440 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS
,
6441 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION
,
6442 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MAXVERSIONTESTED
6443 } ACTCTX_COMPATIBILITY_ELEMENT_TYPE
;
6445 typedef struct _COMPATIBILITY_CONTEXT_ELEMENT
{
6447 ACTCTX_COMPATIBILITY_ELEMENT_TYPE Type
;
6448 } COMPATIBILITY_CONTEXT_ELEMENT
, *PCOMPATIBILITY_CONTEXT_ELEMENT
;
6450 #if !defined(__WINESRC__) && (defined(_MSC_EXTENSIONS) || ((defined(__GNUC__) && __GNUC__ >= 3)))
6451 typedef struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
{
6453 COMPATIBILITY_CONTEXT_ELEMENT Elements
[];
6454 } ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
, *PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
;
6458 ACTCTX_RUN_LEVEL_UNSPECIFIED
= 0,
6459 ACTCTX_RUN_LEVEL_AS_INVOKER
,
6460 ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE
,
6461 ACTCTX_RUN_LEVEL_REQUIRE_ADMIN
,
6462 ACTCTX_RUN_LEVEL_NUMBERS
6463 } ACTCTX_REQUESTED_RUN_LEVEL
;
6465 typedef struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
{
6467 ACTCTX_REQUESTED_RUN_LEVEL RunLevel
;
6469 } ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
, *PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
;
6471 typedef const struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
*PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
;
6473 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS
{
6474 ActivationContextBasicInformation
= 1,
6475 ActivationContextDetailedInformation
= 2,
6476 AssemblyDetailedInformationInActivationContext
= 3,
6477 FileInformationInAssemblyOfAssemblyInActivationContext
= 4,
6478 RunlevelInformationInActivationContext
= 5,
6479 CompatibilityInformationInActivationContext
= 6,
6480 ActivationContextManifestResourceName
= 7,
6481 MaxActivationContextInfoClass
,
6482 AssemblyDetailedInformationInActivationContxt
= AssemblyDetailedInformationInActivationContext
,
6483 FileInformationInAssemblyOfAssemblyInActivationContxt
= FileInformationInAssemblyOfAssemblyInActivationContext
6484 } ACTIVATION_CONTEXT_INFO_CLASS
;
6486 #define ACTIVATION_CONTEXT_PATH_TYPE_NONE 1
6487 #define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE 2
6488 #define ACTIVATION_CONTEXT_PATH_TYPE_URL 3
6489 #define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF 4
6491 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
6492 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
6493 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
6494 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
6495 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
6496 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
6497 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
6498 #define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE 8
6499 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
6500 #define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS 10
6501 #define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO 11
6503 typedef enum _JOBOBJECTINFOCLASS
6505 JobObjectBasicAccountingInformation
= 1,
6506 JobObjectBasicLimitInformation
,
6507 JobObjectBasicProcessIdList
,
6508 JobObjectBasicUIRestrictions
,
6509 JobObjectSecurityLimitInformation
,
6510 JobObjectEndOfJobTimeInformation
,
6511 JobObjectAssociateCompletionPortInformation
,
6512 JobObjectBasicAndIoAccountingInformation
,
6513 JobObjectExtendedLimitInformation
,
6514 JobObjectJobSetInformation
,
6515 MaxJobObjectInfoClass
6516 } JOBOBJECTINFOCLASS
;
6518 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
{
6519 LARGE_INTEGER TotalUserTime
;
6520 LARGE_INTEGER TotalKernelTime
;
6521 LARGE_INTEGER ThisPeriodTotalUserTime
;
6522 LARGE_INTEGER ThisPeriodTotalKernelTime
;
6523 DWORD TotalPageFaultCount
;
6524 DWORD TotalProcesses
;
6525 DWORD ActiveProcesses
;
6526 DWORD TotalTerminatedProcesses
;
6527 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION
;
6529 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION
{
6530 LARGE_INTEGER PerProcessUserTimeLimit
;
6531 LARGE_INTEGER PerJobUserTimeLimit
;
6533 SIZE_T MinimumWorkingSetSize
;
6534 SIZE_T MaximumWorkingSetSize
;
6535 DWORD ActiveProcessLimit
;
6537 DWORD PriorityClass
;
6538 DWORD SchedulingClass
;
6539 } JOBOBJECT_BASIC_LIMIT_INFORMATION
, *PJOBOBJECT_BASIC_LIMIT_INFORMATION
;
6541 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST
{
6542 DWORD NumberOfAssignedProcesses
;
6543 DWORD NumberOfProcessIdsInList
;
6544 ULONG_PTR ProcessIdList
[1];
6545 } JOBOBJECT_BASIC_PROCESS_ID_LIST
, *PJOBOBJECT_BASIC_PROCESS_ID_LIST
;
6547 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS
{
6548 DWORD UIRestrictionsClass
;
6549 } JOBOBJECT_BASIC_UI_RESTRICTIONS
, *PJOBOBJECT_BASIC_UI_RESTRICTIONS
;
6551 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION
{
6552 DWORD SecurityLimitFlags
;
6554 PTOKEN_GROUPS SidsToDisable
;
6555 PTOKEN_PRIVILEGES PrivilegesToDelete
;
6556 PTOKEN_GROUPS RestrictedSids
;
6557 } JOBOBJECT_SECURITY_LIMIT_INFORMATION
, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION
;
6559 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION
{
6560 DWORD EndOfJobTimeAction
;
6561 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION
, PJOBOBJECT_END_OF_JOB_TIME_INFORMATION
;
6563 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT
{
6564 PVOID CompletionKey
;
6565 HANDLE CompletionPort
;
6566 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT
, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT
;
6568 #define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
6569 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
6570 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
6571 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
6572 #define JOB_OBJECT_MSG_NEW_PROCESS 6
6573 #define JOB_OBJECT_MSG_EXIT_PROCESS 7
6574 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
6575 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
6576 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
6578 typedef struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
{
6579 JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo
;
6581 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
, *PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
;
6583 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION
{
6584 JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation
;
6586 SIZE_T ProcessMemoryLimit
;
6587 SIZE_T JobMemoryLimit
;
6588 SIZE_T PeakProcessMemoryUsed
;
6589 SIZE_T PeakJobMemoryUsed
;
6590 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION
, *PJOBOBJECT_EXTENDED_LIMIT_INFORMATION
;
6592 #define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
6593 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
6594 #define JOB_OBJECT_LIMIT_JOB_TIME 0x00000004
6595 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008
6596 #define JOB_OBJECT_LIMIT_AFFINITY 0x00000010
6597 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
6598 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
6599 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
6600 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
6601 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200
6602 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
6603 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
6604 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
6605 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
6606 #define JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000
6608 #define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff
6609 #define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff
6610 #define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00007fff
6612 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
6614 RelationProcessorCore
= 0,
6615 RelationNumaNode
= 1,
6617 RelationProcessorPackage
= 3,
6619 RelationAll
= 0xffff
6620 } LOGICAL_PROCESSOR_RELATIONSHIP
;
6622 #define LTP_PC_SMT 0x1
6624 typedef enum _PROCESSOR_CACHE_TYPE
6630 } PROCESSOR_CACHE_TYPE
;
6632 typedef struct _PROCESSOR_GROUP_INFO
6634 BYTE MaximumProcessorCount
;
6635 BYTE ActiveProcessorCount
;
6637 KAFFINITY ActiveProcessorMask
;
6638 } PROCESSOR_GROUP_INFO
, *PPROCESSOR_GROUP_INFO
;
6640 typedef struct _CACHE_DESCRIPTOR
6646 PROCESSOR_CACHE_TYPE Type
;
6647 } CACHE_DESCRIPTOR
, *PCACHE_DESCRIPTOR
;
6649 typedef struct _GROUP_AFFINITY
6654 } GROUP_AFFINITY
, *PGROUP_AFFINITY
;
6656 #define ALL_PROCESSOR_GROUPS 0xffff
6658 typedef struct _PROCESSOR_NUMBER
6663 } PROCESSOR_NUMBER
, *PPROCESSOR_NUMBER
;
6665 typedef struct _PROCESSOR_RELATIONSHIP
6668 BYTE EfficiencyClass
;
6671 GROUP_AFFINITY GroupMask
[ANYSIZE_ARRAY
];
6672 } PROCESSOR_RELATIONSHIP
, *PPROCESSOR_RELATIONSHIP
;
6674 typedef struct _NUMA_NODE_RELATIONSHIP
6678 GROUP_AFFINITY GroupMask
;
6679 } NUMA_NODE_RELATIONSHIP
, *PNUMA_NODE_RELATIONSHIP
;
6681 typedef struct _CACHE_RELATIONSHIP
6687 PROCESSOR_CACHE_TYPE Type
;
6689 GROUP_AFFINITY GroupMask
;
6690 } CACHE_RELATIONSHIP
, *PCACHE_RELATIONSHIP
;
6692 typedef struct _GROUP_RELATIONSHIP
6694 WORD MaximumGroupCount
;
6695 WORD ActiveGroupCount
;
6697 PROCESSOR_GROUP_INFO GroupInfo
[ANYSIZE_ARRAY
];
6698 } GROUP_RELATIONSHIP
, *PGROUP_RELATIONSHIP
;
6700 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
6702 ULONG_PTR ProcessorMask
;
6703 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
6714 CACHE_DESCRIPTOR Cache
;
6715 ULONGLONG Reserved
[2];
6717 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
6719 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
6721 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
6725 PROCESSOR_RELATIONSHIP Processor
;
6726 NUMA_NODE_RELATIONSHIP NumaNode
;
6727 CACHE_RELATIONSHIP Cache
;
6728 GROUP_RELATIONSHIP Group
;
6730 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
;
6732 /* Threadpool things */
6733 typedef DWORD TP_VERSION
,*PTP_VERSION
;
6735 typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE
,*PTP_CALLBACK_INSTANCE
;
6737 typedef VOID (CALLBACK
*PTP_SIMPLE_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
);
6739 typedef struct _TP_POOL TP_POOL
,*PTP_POOL
;
6741 typedef enum _TP_CALLBACK_PRIORITY
6743 TP_CALLBACK_PRIORITY_HIGH
,
6744 TP_CALLBACK_PRIORITY_NORMAL
,
6745 TP_CALLBACK_PRIORITY_LOW
,
6746 TP_CALLBACK_PRIORITY_INVALID
,
6747 TP_CALLBACK_PRIORITY_COUNT
= TP_CALLBACK_PRIORITY_INVALID
6748 } TP_CALLBACK_PRIORITY
;
6750 typedef struct _TP_POOL_STACK_INFORMATION
6752 SIZE_T StackReserve
;
6754 } TP_POOL_STACK_INFORMATION
,*PTP_POOL_STACK_INFORMATION
;
6756 typedef struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP
,*PTP_CLEANUP_GROUP
;
6758 typedef VOID (CALLBACK
*PTP_CLEANUP_GROUP_CANCEL_CALLBACK
)(PVOID
,PVOID
);
6760 typedef struct _TP_CALLBACK_ENVIRON_V1
6764 PTP_CLEANUP_GROUP CleanupGroup
;
6765 PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback
;
6767 struct _ACTIVATION_CONTEXT
* ActivationContext
;
6768 PTP_SIMPLE_CALLBACK FinalizationCallback
;
6774 DWORD LongFunction
:1;
6779 } TP_CALLBACK_ENVIRON_V1
;
6781 typedef struct _TP_CALLBACK_ENVIRON_V3
6785 PTP_CLEANUP_GROUP CleanupGroup
;
6786 PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback
;
6788 struct _ACTIVATION_CONTEXT
*ActivationContext
;
6789 PTP_SIMPLE_CALLBACK FinalizationCallback
;
6795 DWORD LongFunction
:1;
6800 TP_CALLBACK_PRIORITY CallbackPriority
;
6802 } TP_CALLBACK_ENVIRON_V3
;
6804 typedef struct _TP_WORK TP_WORK
, *PTP_WORK
;
6805 typedef struct _TP_TIMER TP_TIMER
, *PTP_TIMER
;
6807 typedef DWORD TP_WAIT_RESULT
;
6808 typedef struct _TP_WAIT TP_WAIT
, *PTP_WAIT
;
6810 typedef struct _TP_IO TP_IO
, *PTP_IO
;
6812 typedef TP_CALLBACK_ENVIRON_V1 TP_CALLBACK_ENVIRON
, *PTP_CALLBACK_ENVIRON
;
6814 typedef VOID (CALLBACK
*PTP_WORK_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_WORK
);
6815 typedef VOID (CALLBACK
*PTP_TIMER_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_TIMER
);
6816 typedef VOID (CALLBACK
*PTP_WAIT_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_WAIT
,TP_WAIT_RESULT
);
6819 NTSYSAPI BOOLEAN NTAPI
RtlGetProductInfo(DWORD
,DWORD
,DWORD
,DWORD
,PDWORD
);
6821 typedef enum _RTL_UMS_THREAD_INFO_CLASS
6823 UmsThreadInvalidInfoClass
,
6824 UmsThreadUserContext
,
6828 UmsThreadIsSuspended
,
6829 UmsThreadIsTerminated
,
6830 UmsThreadMaxInfoClass
6831 } RTL_UMS_THREAD_INFO_CLASS
, *PRTL_UMS_THREAD_INFO_CLASS
;
6833 typedef enum _RTL_UMS_SCHEDULER_REASON
6835 UmsSchedulerStartup
,
6836 UmsSchedulerThreadBlocked
,
6837 UmsSchedulerThreadYield
,
6838 } RTL_UMS_SCHEDULER_REASON
, *PRTL_UMS_SCHEDULER_REASON
;
6840 typedef void (CALLBACK
*PRTL_UMS_SCHEDULER_ENTRY_POINT
)(RTL_UMS_SCHEDULER_REASON
,ULONG_PTR
,PVOID
);
6842 typedef enum _PROCESS_MITIGATION_POLICY
6846 ProcessDynamicCodePolicy
,
6847 ProcessStrictHandleCheckPolicy
,
6848 ProcessSystemCallDisablePolicy
,
6849 ProcessMitigationOptionsMask
,
6850 ProcessExtensionPointDisablePolicy
,
6851 ProcessControlFlowGuardPolicy
,
6852 ProcessSignaturePolicy
,
6853 ProcessFontDisablePolicy
,
6854 ProcessImageLoadPolicy
,
6855 ProcessSystemCallFilterPolicy
,
6856 ProcessPayloadRestrictionPolicy
,
6857 ProcessChildProcessPolicy
,
6858 ProcessSideChannelIsolationPolicy
,
6859 MaxProcessMitigationPolicy
6860 } PROCESS_MITIGATION_POLICY
, *PPROCESS_MITIGATION_POLICY
;
6864 BOOLEAN
_BitScanForward(unsigned long*,unsigned long);
6865 BOOLEAN
_BitScanReverse(unsigned long*,unsigned long);
6867 #pragma intrinsic(_BitScanForward)
6868 #pragma intrinsic(_BitScanReverse)
6870 static inline BOOLEAN
BitScanForward(DWORD
*index
, DWORD mask
)
6872 return _BitScanForward((unsigned long*)index
, mask
);
6875 static inline BOOLEAN
BitScanReverse(DWORD
*index
, DWORD mask
)
6877 return _BitScanReverse((unsigned long*)index
, mask
);
6880 #elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
6882 static inline BOOLEAN
BitScanForward(DWORD
*index
, DWORD mask
)
6884 *index
= __builtin_ctz(mask
);
6888 static inline BOOLEAN
BitScanReverse(DWORD
*index
, DWORD mask
)
6890 *index
= 31 - __builtin_clz(mask
);
6896 static inline BOOLEAN
BitScanForward(DWORD
*index
, DWORD mask
)
6899 while (r
< 31 && !(mask
& (1 << r
))) r
++;
6904 static inline BOOLEAN
BitScanReverse(DWORD
*index
, DWORD mask
)
6906 unsigned int r
= 31;
6907 while (r
> 0 && !(mask
& (1 << r
))) r
--;
6914 /* Interlocked functions */
6918 #pragma intrinsic(_InterlockedAnd)
6919 #pragma intrinsic(_InterlockedCompareExchange)
6920 #pragma intrinsic(_InterlockedCompareExchange64)
6922 #pragma intrinsic(_InterlockedCompareExchange128)
6924 #pragma intrinsic(_InterlockedExchange)
6925 #pragma intrinsic(_InterlockedExchangeAdd)
6926 #pragma intrinsic(_InterlockedIncrement)
6927 #pragma intrinsic(_InterlockedIncrement16)
6928 #pragma intrinsic(_InterlockedDecrement)
6929 #pragma intrinsic(_InterlockedDecrement16)
6930 #pragma intrinsic(_InterlockedOr)
6932 long _InterlockedAnd(long volatile *,long);
6933 long _InterlockedCompareExchange(long volatile*,long,long);
6934 long long _InterlockedCompareExchange64(long long volatile*,long long,long long);
6936 unsigned char _InterlockedCompareExchange128(volatile __int64
*, __int64
, __int64
, __int64
*);
6938 long _InterlockedDecrement(long volatile*);
6939 short _InterlockedDecrement16(short volatile*);
6940 long _InterlockedExchange(long volatile*,long);
6941 long _InterlockedExchangeAdd(long volatile*,long);
6942 long _InterlockedIncrement(long volatile*);
6943 short _InterlockedIncrement16(short volatile*);
6944 long _InterlockedOr(long volatile *,long);
6946 static FORCEINLINE LONG WINAPI
InterlockedAnd( LONG
volatile *dest
, LONG val
)
6948 return _InterlockedAnd( (long volatile *)dest
, val
);
6951 static FORCEINLINE LONG WINAPI
InterlockedCompareExchange( LONG
volatile *dest
, LONG xchg
, LONG compare
)
6953 return _InterlockedCompareExchange( (long volatile *)dest
, xchg
, compare
);
6956 static FORCEINLINE LONGLONG WINAPI
InterlockedCompareExchange64( LONGLONG
volatile *dest
, LONGLONG xchg
, LONGLONG compare
)
6958 return _InterlockedCompareExchange64( (long long volatile *)dest
, xchg
, compare
);
6962 static FORCEINLINE
unsigned char WINAPI
InterlockedCompareExchange128( volatile __int64
*dest
, __int64 xchg_high
, __int64 xchg_low
, __int64
*compare
)
6964 return _InterlockedCompareExchange128( dest
, xchg_high
, xchg_low
, compare
);
6968 static FORCEINLINE LONG WINAPI
InterlockedExchange( LONG
volatile *dest
, LONG val
)
6970 return _InterlockedExchange( (long volatile *)dest
, val
);
6973 static FORCEINLINE LONG WINAPI
InterlockedExchangeAdd( LONG
volatile *dest
, LONG incr
)
6975 return _InterlockedExchangeAdd( (long volatile *)dest
, incr
);
6978 static FORCEINLINE LONG WINAPI
InterlockedIncrement( LONG
volatile *dest
)
6980 return _InterlockedIncrement( (long volatile *)dest
);
6983 static FORCEINLINE
short WINAPI
InterlockedIncrement16( short volatile *dest
)
6985 return _InterlockedIncrement16( dest
);
6988 static FORCEINLINE LONG WINAPI
InterlockedDecrement( LONG
volatile *dest
)
6990 return _InterlockedDecrement( (long volatile *)dest
);
6993 static FORCEINLINE
short WINAPI
InterlockedDecrement16( short volatile *dest
)
6995 return _InterlockedDecrement16( dest
);
6998 static FORCEINLINE LONG WINAPI
InterlockedOr( LONG
volatile *dest
, LONG val
)
7000 return _InterlockedOr( (long volatile *)dest
, val
);
7005 #pragma intrinsic(_InterlockedCompareExchangePointer)
7006 #pragma intrinsic(_InterlockedExchangePointer)
7008 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
7009 #define InterlockedExchangePointer _InterlockedExchangePointer
7011 void *InterlockedCompareExchangePointer(void *volatile*,void*,void*);
7012 void *InterlockedExchangePointer(void *volatile*,void*);
7016 static FORCEINLINE
void * WINAPI
InterlockedCompareExchangePointer( void *volatile *dest
, void *xchg
, void *compare
)
7018 return (void *)_InterlockedCompareExchange( (long volatile*)dest
, (long)xchg
, (long)compare
);
7021 static FORCEINLINE
void * WINAPI
InterlockedExchangePointer( void *volatile *dest
, void *val
)
7023 return (void *)_InterlockedExchange( (long volatile*)dest
, (long)val
);
7026 #endif /* __i386__ */
7030 static FORCEINLINE
void MemoryBarrier(void)
7033 InterlockedOr(&dummy
, 0);
7036 #elif defined(__x86_64__)
7038 #pragma intrinsic(__faststorefence)
7040 void __faststorefence(void);
7042 static FORCEINLINE
void MemoryBarrier(void)
7047 #elif defined(__arm__)
7049 static FORCEINLINE
void MemoryBarrier(void)
7051 __dmb(_ARM_BARRIER_SY
);
7054 #elif defined(__aarch64__)
7056 static FORCEINLINE
void MemoryBarrier(void)
7058 __dmb(_ARM64_BARRIER_SY
);
7061 #endif /* __i386__ */
7063 #elif defined(__GNUC__)
7065 static FORCEINLINE LONG WINAPI
InterlockedAnd( LONG
volatile *dest
, LONG val
)
7067 return __sync_fetch_and_and( dest
, val
);
7070 static FORCEINLINE LONG WINAPI
InterlockedCompareExchange( LONG
volatile *dest
, LONG xchg
, LONG compare
)
7072 return __sync_val_compare_and_swap( dest
, compare
, xchg
);
7075 static FORCEINLINE
void * WINAPI
InterlockedCompareExchangePointer( void *volatile *dest
, void *xchg
, void *compare
)
7077 return __sync_val_compare_and_swap( dest
, compare
, xchg
);
7080 static FORCEINLINE LONGLONG WINAPI
InterlockedCompareExchange64( LONGLONG
volatile *dest
, LONGLONG xchg
, LONGLONG compare
)
7082 return __sync_val_compare_and_swap( dest
, compare
, xchg
);
7086 static FORCEINLINE
unsigned char InterlockedCompareExchange128( volatile __int64
*dest
, __int64 xchg_high
, __int64 xchg_low
, __int64
*compare
)
7090 __asm__
__volatile__( "lock cmpxchg16b %0; setz %b2"
7091 : "=m" (dest
[0]), "=m" (dest
[1]), "=r" (ret
),
7092 "=a" (compare
[0]), "=d" (compare
[1])
7093 : "m" (dest
[0]), "m" (dest
[1]), "3" (compare
[0]), "4" (compare
[1]),
7094 "c" (xchg_high
), "b" (xchg_low
) );
7097 return __sync_bool_compare_and_swap( (__int128
*)dest
, *(__int128
*)compare
, ((__int128
)xchg_high
<< 64) | xchg_low
);
7102 static FORCEINLINE LONG WINAPI
InterlockedExchange( LONG
volatile *dest
, LONG val
)
7105 #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
7106 ret
= __atomic_exchange_n( dest
, val
, __ATOMIC_SEQ_CST
);
7107 #elif defined(__i386__) || defined(__x86_64__)
7108 __asm__
__volatile__( "lock; xchgl %0,(%1)"
7109 : "=r" (ret
) :"r" (dest
), "0" (val
) : "memory" );
7111 do ret
= *dest
; while (!__sync_bool_compare_and_swap( dest
, ret
, val
));
7116 static FORCEINLINE LONG WINAPI
InterlockedExchangeAdd( LONG
volatile *dest
, LONG incr
)
7118 return __sync_fetch_and_add( dest
, incr
);
7121 static FORCEINLINE LONG WINAPI
InterlockedIncrement( LONG
volatile *dest
)
7123 return __sync_add_and_fetch( dest
, 1 );
7126 static FORCEINLINE
short WINAPI
InterlockedIncrement16( short volatile *dest
)
7128 return __sync_add_and_fetch( dest
, 1 );
7131 static FORCEINLINE LONG WINAPI
InterlockedDecrement( LONG
volatile *dest
)
7133 return __sync_add_and_fetch( dest
, -1 );
7136 static FORCEINLINE
short WINAPI
InterlockedDecrement16( short volatile *dest
)
7138 return __sync_add_and_fetch( dest
, -1 );
7141 static FORCEINLINE
void * WINAPI
InterlockedExchangePointer( void *volatile *dest
, void *val
)
7144 #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
7145 ret
= __atomic_exchange_n( dest
, val
, __ATOMIC_SEQ_CST
);
7146 #elif defined(__x86_64__)
7147 __asm__
__volatile__( "lock; xchgq %0,(%1)" : "=r" (ret
) :"r" (dest
), "0" (val
) : "memory" );
7148 #elif defined(__i386__)
7149 __asm__
__volatile__( "lock; xchgl %0,(%1)" : "=r" (ret
) :"r" (dest
), "0" (val
) : "memory" );
7151 do ret
= *dest
; while (!__sync_bool_compare_and_swap( dest
, ret
, val
));
7156 static FORCEINLINE LONG WINAPI
InterlockedOr( LONG
volatile *dest
, LONG val
)
7158 return __sync_fetch_and_or( dest
, val
);
7161 static FORCEINLINE
void MemoryBarrier(void)
7163 __sync_synchronize();
7166 #endif /* __GNUC__ */
7168 static FORCEINLINE
void YieldProcessor(void)
7171 #if defined(__i386__) || defined(__x86_64__)
7172 __asm__
__volatile__( "rep; nop" : : : "memory" );
7173 #elif defined(__arm__) || defined(__aarch64__)
7174 __asm__
__volatile__( "dmb ishst\n\tyield" : : : "memory" );
7176 __asm__
__volatile__( "" : : : "memory" );
7185 #endif /* _WINNT_ */