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
41 #define NTSYSAPI DECLSPEC_IMPORT
44 #define NTAPI __stdcall
47 # if defined(_MSC_VER)
48 # define DECLSPEC_IMPORT __declspec(dllimport)
49 # elif defined(__MINGW32__) || defined(__CYGWIN__)
50 # define DECLSPEC_IMPORT __attribute__((dllimport))
52 # define DECLSPEC_IMPORT DECLSPEC_HIDDEN
55 # define DECLSPEC_IMPORT
58 #ifndef DECLSPEC_NORETURN
59 # if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS)
60 # define DECLSPEC_NORETURN __declspec(noreturn)
61 # elif defined(__GNUC__)
62 # define DECLSPEC_NORETURN __attribute__((noreturn))
64 # define DECLSPEC_NORETURN
68 #ifndef DECLSPEC_ALIGN
69 # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
70 # define DECLSPEC_ALIGN(x) __declspec(align(x))
71 # elif defined(__GNUC__)
72 # define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
74 # define DECLSPEC_ALIGN(x)
78 #ifndef DECLSPEC_CACHEALIGN
79 # define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(128)
83 # if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined (__cplusplus)
84 # define DECLSPEC_UUID(x) __declspec(uuid(x))
86 # define DECLSPEC_UUID(x)
90 #ifndef DECLSPEC_NOVTABLE
91 # if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined(__cplusplus)
92 # define DECLSPEC_NOVTABLE __declspec(novtable)
94 # define DECLSPEC_NOVTABLE
98 #ifndef DECLSPEC_SELECTANY
99 #if defined(_MSC_VER) && (_MSC_VER >= 1100)
100 #define DECLSPEC_SELECTANY __declspec(selectany)
102 #define DECLSPEC_SELECTANY
107 # if defined(_MSC_VER) && (_MSC_VER >= 1210)
108 # define NOP_FUNCTION __noop
110 # define NOP_FUNCTION (void)0
114 #ifndef DECLSPEC_ADDRSAFE
115 # if defined(_MSC_VER) && (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
116 # define DECLSPEC_ADDRSAFE __declspec(address_safe)
118 # define DECLSPEC_ADDRSAFE
123 # if defined(_MSC_VER) && (_MSC_VER >= 1200)
124 # define FORCEINLINE __forceinline
125 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
126 # define FORCEINLINE inline __attribute__((always_inline))
128 # define FORCEINLINE inline
132 #ifndef DECLSPEC_DEPRECATED
133 # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
134 # define DECLSPEC_DEPRECATED __declspec(deprecated)
135 # define DEPRECATE_SUPPORTED
136 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
137 # define DECLSPEC_DEPRECATED __attribute__((deprecated))
138 # define DEPRECATE_SUPPORTED
140 # define DECLSPEC_DEPRECATED
141 # undef DEPRECATE_SUPPORTED
145 /* a couple of useful Wine extensions */
148 # define DECLSPEC_EXPORT __declspec(dllexport)
149 #elif defined(__MINGW32__)
150 # define DECLSPEC_EXPORT __attribute__((dllexport))
151 #elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) && !defined(__sun)
152 # define DECLSPEC_EXPORT __attribute__((visibility ("default")))
154 # define DECLSPEC_EXPORT
157 #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) || defined(__sun)
158 # define DECLSPEC_HIDDEN
159 #elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
160 # define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
162 # define DECLSPEC_HIDDEN
165 #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
166 #define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
168 #define __WINE_ALLOC_SIZE(x)
171 /* Anonymous union/struct handling */
173 #ifndef NONAMELESSSTRUCT
175 /* Anonymous struct support starts with gcc 2.96 or gcc/g++ 3.x */
176 # if (__GNUC__ < 2) || ((__GNUC__ == 2) && (defined(__cplusplus) || (__GNUC_MINOR__ < 96)))
177 # define NONAMELESSSTRUCT
179 # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
180 # define NONAMELESSSTRUCT
182 #endif /* NONAMELESSSTRUCT */
184 #ifndef NONAMELESSUNION
186 /* Anonymous unions support starts with gcc 2.96/g++ 2.95 */
187 # if (__GNUC__ < 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ < 95) || ((__GNUC_MINOR__ == 95) && !defined(__cplusplus))))
188 # define NONAMELESSUNION
190 # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
191 # define NONAMELESSUNION
193 #endif /* NONAMELESSUNION */
195 #undef DUMMYSTRUCTNAME
196 #undef DUMMYSTRUCTNAME1
197 #undef DUMMYSTRUCTNAME2
198 #undef DUMMYSTRUCTNAME3
199 #undef DUMMYSTRUCTNAME4
200 #undef DUMMYSTRUCTNAME5
201 #ifndef NONAMELESSSTRUCT
202 #define DUMMYSTRUCTNAME
203 #define DUMMYSTRUCTNAME1
204 #define DUMMYSTRUCTNAME2
205 #define DUMMYSTRUCTNAME3
206 #define DUMMYSTRUCTNAME4
207 #define DUMMYSTRUCTNAME5
208 #else /* !defined(NONAMELESSSTRUCT) */
209 #define DUMMYSTRUCTNAME s
210 #define DUMMYSTRUCTNAME1 s1
211 #define DUMMYSTRUCTNAME2 s2
212 #define DUMMYSTRUCTNAME3 s3
213 #define DUMMYSTRUCTNAME4 s4
214 #define DUMMYSTRUCTNAME5 s5
215 #endif /* !defined(NONAMELESSSTRUCT) */
217 #undef DUMMYUNIONNAME
218 #undef DUMMYUNIONNAME1
219 #undef DUMMYUNIONNAME2
220 #undef DUMMYUNIONNAME3
221 #undef DUMMYUNIONNAME4
222 #undef DUMMYUNIONNAME5
223 #undef DUMMYUNIONNAME6
224 #undef DUMMYUNIONNAME7
225 #undef DUMMYUNIONNAME8
226 #ifndef NONAMELESSUNION
227 #define DUMMYUNIONNAME
228 #define DUMMYUNIONNAME1
229 #define DUMMYUNIONNAME2
230 #define DUMMYUNIONNAME3
231 #define DUMMYUNIONNAME4
232 #define DUMMYUNIONNAME5
233 #define DUMMYUNIONNAME6
234 #define DUMMYUNIONNAME7
235 #define DUMMYUNIONNAME8
236 #else /* !defined(NONAMELESSUNION) */
237 #define DUMMYUNIONNAME u
238 #define DUMMYUNIONNAME1 u1
239 #define DUMMYUNIONNAME2 u2
240 #define DUMMYUNIONNAME3 u3
241 #define DUMMYUNIONNAME4 u4
242 #define DUMMYUNIONNAME5 u5
243 #define DUMMYUNIONNAME6 u6
244 #define DUMMYUNIONNAME7 u7
245 #define DUMMYUNIONNAME8 u8
246 #endif /* !defined(NONAMELESSUNION) */
248 #undef __C89_NAMELESS
249 #undef __C89_NAMELESSSTRUCTNAME
250 #undef __C89_NAMELESSSTRUCTNAME1
251 #undef __C89_NAMELESSSTRUCTNAME2
252 #undef __C89_NAMELESSSTRUCTNAME3
253 #undef __C89_NAMELESSSTRUCTNAME4
254 #undef __C89_NAMELESSSTRUCTNAME5
255 #undef __C89_NAMELESSUNIONNAME
256 #undef __C89_NAMELESSUNIONNAME1
257 #undef __C89_NAMELESSUNIONNAME2
258 #undef __C89_NAMELESSUNIONNAME3
259 #undef __C89_NAMELESSUNIONNAME4
260 #undef __C89_NAMELESSUNIONNAME5
261 #undef __C89_NAMELESSUNIONNAME6
262 #undef __C89_NAMELESSUNIONNAME7
263 #undef __C89_NAMELESSUNIONNAME8
265 #if !defined(__WINESRC__) && !defined(WINE_NO_NAMELESS_EXTENSION)
267 /* Anonymous structs support starts with gcc 2.96/g++ 2.95 */
268 # if (__GNUC__ > 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ > 95) || ((__GNUC_MINOR__ == 95) && defined(__cplusplus))))
269 # define __C89_NAMELESS __extension__
271 # elif defined(_MSC_VER)
272 # define __C89_NAMELESS
276 #ifdef __C89_NAMELESS
277 # define __C89_NAMELESSSTRUCTNAME
278 # define __C89_NAMELESSSTRUCTNAME1
279 # define __C89_NAMELESSSTRUCTNAME2
280 # define __C89_NAMELESSSTRUCTNAME3
281 # define __C89_NAMELESSSTRUCTNAME4
282 # define __C89_NAMELESSSTRUCTNAME5
283 # define __C89_NAMELESSUNIONNAME
284 # define __C89_NAMELESSUNIONNAME1
285 # define __C89_NAMELESSUNIONNAME2
286 # define __C89_NAMELESSUNIONNAME3
287 # define __C89_NAMELESSUNIONNAME4
288 # define __C89_NAMELESSUNIONNAME5
289 # define __C89_NAMELESSUNIONNAME6
290 # define __C89_NAMELESSUNIONNAME7
291 # define __C89_NAMELESSUNIONNAME8
293 # define __C89_NAMELESS
294 # define __C89_NAMELESSSTRUCTNAME DUMMYSTRUCTNAME
295 # define __C89_NAMELESSSTRUCTNAME1 DUMMYSTRUCTNAME1
296 # define __C89_NAMELESSSTRUCTNAME2 DUMMYSTRUCTNAME2
297 # define __C89_NAMELESSSTRUCTNAME3 DUMMYSTRUCTNAME3
298 # define __C89_NAMELESSSTRUCTNAME4 DUMMYSTRUCTNAME4
299 # define __C89_NAMELESSSTRUCTNAME5 DUMMYSTRUCTNAME5
300 # define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME
301 # define __C89_NAMELESSUNIONNAME1 DUMMYUNIONNAME1
302 # define __C89_NAMELESSUNIONNAME2 DUMMYUNIONNAME2
303 # define __C89_NAMELESSUNIONNAME3 DUMMYUNIONNAME3
304 # define __C89_NAMELESSUNIONNAME4 DUMMYUNIONNAME4
305 # define __C89_NAMELESSUNIONNAME5 DUMMYUNIONNAME5
306 # define __C89_NAMELESSUNIONNAME6 DUMMYUNIONNAME6
307 # define __C89_NAMELESSUNIONNAME7 DUMMYUNIONNAME7
308 # define __C89_NAMELESSUNIONNAME8 DUMMYUNIONNAME8
311 /* C99 restrict support */
313 #if defined(ENABLE_RESTRICTED) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
314 # if defined(_MSC_VER) && defined(_M_MRX000)
315 # define RESTRICTED_POINTER __restrict
316 # elif defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95)))
317 # define RESTRICTED_POINTER __restrict
319 # define RESTRICTED_POINTER
322 # define RESTRICTED_POINTER
325 /* C99 unaligned support */
328 #if defined(_MSC_VER) && (defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64))
329 # define UNALIGNED __unaligned
331 # define UNALIGNED64 __unaligned
341 /* Alignment macros */
343 #if defined(_WIN64) || (defined(_MSC_VER) && defined(_M_ALPHA)) || defined(__alpha__)
344 #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
345 #define MEMORY_ALLOCATION_ALIGNMENT 16
347 #define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
348 #define MEMORY_ALLOCATION_ALIGNMENT 8
351 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
352 # define TYPE_ALIGNMENT(t) __alignof(t)
353 #elif defined(__GNUC__)
354 # define TYPE_ALIGNMENT(t) __alignof__(t)
356 # define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
360 # define PROBE_ALIGNMENT(_s) \
361 (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? \
362 TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD))
363 # define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD)
365 # define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
368 /* Compile time assertion */
370 #if defined(_MSC_VER)
371 # define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
373 # define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
376 /* Eliminate Microsoft C/C++ compiler warning 4715 */
377 #if defined(_MSC_VER) && (_MSC_VER > 1200)
378 # define DEFAULT_UNREACHABLE default: __assume(0)
379 #elif defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5))))
380 # define DEFAULT_UNREACHABLE default: __builtin_unreachable()
382 # define DEFAULT_UNREACHABLE default:
386 #define APPLICATION_ERROR_MASK 0x20000000
387 #define ERROR_SEVERITY_SUCCESS 0x00000000
388 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
389 #define ERROR_SEVERITY_WARNING 0x80000000
390 #define ERROR_SEVERITY_ERROR 0xC0000000
393 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
395 inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)|((int)b)); } \
396 inline ENUMTYPE operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \
397 inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)&((int)b)); } \
398 inline ENUMTYPE operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \
399 inline ENUMTYPE operator ~ (ENUMTYPE a) { return (ENUMTYPE)(~((int)a)); } \
400 inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)^((int)b)); } \
401 inline ENUMTYPE operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \
404 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */
407 /* Microsoft's macros for declaring functions */
410 # define EXTERN_C extern "C"
412 # define EXTERN_C extern
415 #define STDMETHODCALLTYPE __stdcall
416 #define STDMETHODVCALLTYPE __cdecl
417 #define STDAPICALLTYPE __stdcall
418 #define STDAPIVCALLTYPE __cdecl
420 #define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
421 #define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
422 #define STDMETHODIMP HRESULT STDMETHODCALLTYPE
423 #define STDMETHODIMP_(type) type STDMETHODCALLTYPE
424 #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
425 #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
426 #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
427 #define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
429 /* Define the basic types */
434 typedef VOID
*PVOID64
;
435 typedef BYTE BOOLEAN
, *PBOOLEAN
;
436 typedef char CHAR
, *PCHAR
;
437 typedef short SHORT
, *PSHORT
;
439 typedef long LONG
, *PLONG
;
441 typedef int LONG
, *PLONG
;
444 /* Some systems might have wchar_t, but we really need 16 bit characters */
445 #ifdef WINE_UNICODE_NATIVE
446 typedef wchar_t WCHAR
, *PWCHAR
;
448 typedef unsigned short WCHAR
, *PWCHAR
;
451 typedef ULONG UCSCHAR
;
452 #define MIN_UCSCHAR (0)
453 #define MAX_UCSCHAR (0x0010ffff)
454 #define UCSCHAR_INVALID_CHARACTER (0xffffffff)
456 /* 'Extended/Wide' numerical types */
460 typedef signed __int64 LONGLONG
, *PLONGLONG
;
461 typedef unsigned __int64 ULONGLONG
, *PULONGLONG
;
463 typedef signed __int64
DECLSPEC_ALIGN(8) LONGLONG
, *PLONGLONG
;
464 typedef unsigned __int64
DECLSPEC_ALIGN(8) ULONGLONG
, *PULONGLONG
;
471 typedef ULONGLONG DWORDLONG
, *PDWORDLONG
;
473 typedef ULONGLONG
DECLSPEC_ALIGN(8) DWORDLONG
, *PDWORDLONG
;
477 /* ANSI string types */
478 typedef CHAR
*PCH
, *LPCH
, *PNZCH
;
479 typedef const CHAR
*PCCH
, *LPCCH
, *PCNZCH
;
480 typedef CHAR
*PSTR
, *LPSTR
, *NPSTR
;
481 typedef const CHAR
*PCSTR
, *LPCSTR
;
482 typedef CHAR
*PZZSTR
;
483 typedef const CHAR
*PCZZSTR
;
485 /* Unicode string types */
486 typedef const WCHAR
*PCWCHAR
, *LPCUWCHAR
, *PCUWCHAR
;
487 typedef WCHAR
*PWCH
, *LPWCH
;
488 typedef const WCHAR
*PCWCH
, *LPCWCH
;
489 typedef WCHAR
*PNZWCH
, *PUNZWCH
;
490 typedef const WCHAR
*PCNZWCH
, *PCUNZWCH
;
491 typedef WCHAR
*PWSTR
, *LPWSTR
, *NWPSTR
;
492 typedef const WCHAR
*PCWSTR
, *LPCWSTR
;
493 typedef WCHAR
*PZZWSTR
, *PUZZWSTR
;
494 typedef const WCHAR
*PCZZWSTR
, *PCUZZWSTR
;
495 typedef PWSTR
*PZPWSTR
;
496 typedef PCWSTR
*PZPCWSTR
;
498 /* Neutral character and string types */
499 /* These are only defined for Winelib, i.e. _not_ defined for
500 * the emulator. The reason is they depend on the UNICODE
501 * macro which only exists in the user's code.
503 #ifndef WINE_NO_UNICODE_MACROS
505 # ifndef _TCHAR_DEFINED
506 typedef WCHAR TCHAR
, *PTCHAR
;
507 # define _TCHAR_DEFINED
509 typedef LPWCH PTCH
, LPTCH
;
510 typedef LPCWCH PCTCH
, LPCTCH
;
511 typedef LPWSTR PTSTR
, LPTSTR
;
512 typedef LPCWSTR PCTSTR
, LPCTSTR
;
513 typedef LPWSTR PUTSTR
, LPUTSTR
;
514 typedef LPCWSTR PCUTSTR
, LPCUTSTR
;
515 typedef PNZWCH PNZTCH
;
516 typedef PUNZWCH PUNZTCH
;
517 typedef PCNZWCH PCNZTCH
;
518 typedef PCUNZWCH PCUNZTCH
;
519 typedef PZZWSTR PZZTSTR
;
520 typedef PCZZWSTR PCZZTSTR
;
521 typedef PUZZWSTR PUZZTSTR
;
522 typedef PCUZZWSTR PCUZZTSTR
;
524 # ifndef _TCHAR_DEFINED
525 typedef CHAR TCHAR
, *PTCHAR
;
526 # define _TCHAR_DEFINED
528 typedef LPCH PTCH
, LPTCH
;
529 typedef LPCCH PCTCH
, LPCTCH
;
530 typedef LPSTR PTSTR
, LPTSTR
;
531 typedef LPCSTR PCTSTR
, LPCTSTR
;
532 typedef PNZCH PNZTCH
, PUNZTCH
;
533 typedef PCNZCH PCNZTCH
, PCUNZTCH
;
534 typedef PZZSTR PZZTSTR
, PUZZTSTR
;
535 typedef PCZZSTR PCZZTSTR
, PCUZZTSTR
;
536 # endif /* UNICODE */
537 #endif /* WINE_NO_UNICODE_MACROS */
539 /* UCS string types */
540 typedef UCSCHAR
*PUCSCHAR
, *PUUCSCHAR
;
541 typedef const UCSCHAR
*PCUCSCHAR
, *PCUUCSCHAR
;
542 typedef UCSCHAR
*PUCSSTR
, *PUUCSSTR
;
543 typedef const UCSCHAR
*PCUCSSTR
, *PCUUCSSTR
;
545 /* Misc common WIN32 types */
547 typedef DWORD LCID
, *PLCID
;
549 typedef DWORD EXECUTION_STATE
;
550 #ifndef _HRESULT_DEFINED
551 #define _HRESULT_DEFINED
552 typedef LONG HRESULT
;
557 typedef void *HANDLE
;
558 typedef HANDLE
*PHANDLE
, *LPHANDLE
;
561 #define DECLARE_HANDLE(a) typedef struct a##__ { int unused; } *a
563 #define DECLARE_HANDLE(a) typedef HANDLE a
570 /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
572 # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
573 # define __MSABI_LONG(x) x ## l
575 # define __MSABI_LONG(x) x
581 #ifndef WIN32_NO_STATUS
583 #define STATUS_WAIT_0 ((DWORD) 0x00000000)
584 #define STATUS_ABANDONED_WAIT_0 ((DWORD) 0x00000080)
585 #define STATUS_USER_APC ((DWORD) 0x000000C0)
586 #define STATUS_TIMEOUT ((DWORD) 0x00000102)
587 #define STATUS_PENDING ((DWORD) 0x00000103)
588 #define STATUS_SEGMENT_NOTIFICATION ((DWORD) 0x40000005)
589 #define STATUS_GUARD_PAGE_VIOLATION ((DWORD) 0x80000001)
590 #define STATUS_DATATYPE_MISALIGNMENT ((DWORD) 0x80000002)
591 #define STATUS_BREAKPOINT ((DWORD) 0x80000003)
592 #define STATUS_SINGLE_STEP ((DWORD) 0x80000004)
593 #define STATUS_ACCESS_VIOLATION ((DWORD) 0xC0000005)
594 #define STATUS_IN_PAGE_ERROR ((DWORD) 0xC0000006)
595 #define STATUS_INVALID_HANDLE ((DWORD) 0xC0000008)
596 #define STATUS_NO_MEMORY ((DWORD) 0xC0000017)
597 #define STATUS_ILLEGAL_INSTRUCTION ((DWORD) 0xC000001D)
598 #define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD) 0xC0000025)
599 #define STATUS_INVALID_DISPOSITION ((DWORD) 0xC0000026)
600 #define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD) 0xC000008C)
601 #define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD) 0xC000008D)
602 #define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD) 0xC000008E)
603 #define STATUS_FLOAT_INEXACT_RESULT ((DWORD) 0xC000008F)
604 #define STATUS_FLOAT_INVALID_OPERATION ((DWORD) 0xC0000090)
605 #define STATUS_FLOAT_OVERFLOW ((DWORD) 0xC0000091)
606 #define STATUS_FLOAT_STACK_CHECK ((DWORD) 0xC0000092)
607 #define STATUS_FLOAT_UNDERFLOW ((DWORD) 0xC0000093)
608 #define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD) 0xC0000094)
609 #define STATUS_INTEGER_OVERFLOW ((DWORD) 0xC0000095)
610 #define STATUS_PRIVILEGED_INSTRUCTION ((DWORD) 0xC0000096)
611 #define STATUS_STACK_OVERFLOW ((DWORD) 0xC00000FD)
612 #define STATUS_CONTROL_C_EXIT ((DWORD) 0xC000013A)
613 #define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD) 0xC00002B4)
614 #define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD) 0xC00002B5)
615 #define STATUS_REG_NAT_CONSUMPTION ((DWORD) 0xC00002C9)
616 #define STATUS_SXS_EARLY_DEACTIVATION ((DWORD) 0xC015000F)
617 #define STATUS_SXS_INVALID_DEACTIVATION ((DWORD) 0xC0150010)
619 /* status values for ContinueDebugEvent */
620 #define DBG_EXCEPTION_HANDLED ((DWORD) 0x00010001)
621 #define DBG_CONTINUE ((DWORD) 0x00010002)
622 #define DBG_TERMINATE_THREAD ((DWORD) 0x40010003)
623 #define DBG_TERMINATE_PROCESS ((DWORD) 0x40010004)
624 #define DBG_CONTROL_C ((DWORD) 0x40010005)
625 #define DBG_PRINTEXCEPTION_C ((DWORD) 0x40010006)
626 #define DBG_RIPEXCEPTION ((DWORD) 0x40010007)
627 #define DBG_CONTROL_BREAK ((DWORD) 0x40010008)
628 #define DBG_COMMAND_EXCEPTION ((DWORD) 0x40010009)
629 #define DBG_EXCEPTION_NOT_HANDLED ((DWORD) 0x80010001)
631 #endif /* WIN32_NO_STATUS */
633 /* Argument 1 passed to the DllEntryProc. */
634 #define DLL_PROCESS_DETACH 0 /* detach process (unload library) */
635 #define DLL_PROCESS_ATTACH 1 /* attach process (load library) */
636 #define DLL_THREAD_ATTACH 2 /* attach new thread */
637 #define DLL_THREAD_DETACH 3 /* detach thread */
639 #define DLL_WINE_PREATTACH 8 /* called before process attach for Wine builtins */
642 /* u.x.wProcessorArchitecture (NT) */
643 #define PROCESSOR_ARCHITECTURE_INTEL 0
644 #define PROCESSOR_ARCHITECTURE_MIPS 1
645 #define PROCESSOR_ARCHITECTURE_ALPHA 2
646 #define PROCESSOR_ARCHITECTURE_PPC 3
647 #define PROCESSOR_ARCHITECTURE_SHX 4
648 #define PROCESSOR_ARCHITECTURE_ARM 5
649 #define PROCESSOR_ARCHITECTURE_IA64 6
650 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
651 #define PROCESSOR_ARCHITECTURE_MSIL 8
652 #define PROCESSOR_ARCHITECTURE_AMD64 9
653 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
654 #define PROCESSOR_ARCHITECTURE_NEUTRAL 11
655 #define PROCESSOR_ARCHITECTURE_ARM64 12
656 #define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 13
657 #define PROCESSOR_ARCHITECTURE_IA32_ON_ARM64 14
658 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
660 /* dwProcessorType */
661 #define PROCESSOR_INTEL_386 386
662 #define PROCESSOR_INTEL_486 486
663 #define PROCESSOR_INTEL_PENTIUM 586
664 #define PROCESSOR_INTEL_860 860
665 #define PROCESSOR_INTEL_IA64 2200
666 #define PROCESSOR_AMD_X8664 8664
667 #define PROCESSOR_MIPS_R2000 2000
668 #define PROCESSOR_MIPS_R3000 3000
669 #define PROCESSOR_MIPS_R4000 4000
670 #define PROCESSOR_ALPHA_21064 21064
671 #define PROCESSOR_PPC_601 601
672 #define PROCESSOR_PPC_603 603
673 #define PROCESSOR_PPC_604 604
674 #define PROCESSOR_PPC_620 620
675 #define PROCESSOR_HITACHI_SH3 10003
676 #define PROCESSOR_HITACHI_SH3E 10004
677 #define PROCESSOR_HITACHI_SH4 10005
678 #define PROCESSOR_MOTOROLA_821 821
679 #define PROCESSOR_SHx_SH3 103
680 #define PROCESSOR_SHx_SH4 104
681 #define PROCESSOR_STRONGARM 2577
682 #define PROCESSOR_ARM720 1824 /* 0x720 */
683 #define PROCESSOR_ARM820 2080 /* 0x820 */
684 #define PROCESSOR_ARM920 2336 /* 0x920 */
685 #define PROCESSOR_ARM_7TDMI 70001
686 #define PROCESSOR_OPTIL 18767
689 #define MAXIMUM_PROCESSORS 64
691 #define MAXIMUM_PROCESSORS 32
694 typedef struct _MEMORY_BASIC_INFORMATION
697 LPVOID AllocationBase
;
698 DWORD AllocationProtect
;
703 } MEMORY_BASIC_INFORMATION
, *PMEMORY_BASIC_INFORMATION
;
705 #define PAGE_NOACCESS 0x01
706 #define PAGE_READONLY 0x02
707 #define PAGE_READWRITE 0x04
708 #define PAGE_WRITECOPY 0x08
709 #define PAGE_EXECUTE 0x10
710 #define PAGE_EXECUTE_READ 0x20
711 #define PAGE_EXECUTE_READWRITE 0x40
712 #define PAGE_EXECUTE_WRITECOPY 0x80
713 #define PAGE_GUARD 0x100
714 #define PAGE_NOCACHE 0x200
715 #define PAGE_WRITECOMBINE 0x400
717 #define MEM_COMMIT 0x00001000
718 #define MEM_RESERVE 0x00002000
719 #define MEM_DECOMMIT 0x00004000
720 #define MEM_RELEASE 0x00008000
721 #define MEM_FREE 0x00010000
722 #define MEM_PRIVATE 0x00020000
723 #define MEM_MAPPED 0x00040000
724 #define MEM_RESET 0x00080000
725 #define MEM_TOP_DOWN 0x00100000
726 #define MEM_WRITE_WATCH 0x00200000
727 #define MEM_PHYSICAL 0x00400000
728 #define MEM_LARGE_PAGES 0x20000000
729 #define MEM_4MB_PAGES 0x80000000
731 #define SEC_FILE 0x00800000
732 #define SEC_IMAGE 0x01000000
733 #define SEC_PROTECTED_IMAGE 0x02000000
734 #define SEC_RESERVE 0x04000000
735 #define SEC_COMMIT 0x08000000
736 #define SEC_NOCACHE 0x10000000
737 #define SEC_WRITECOMBINE 0x40000000
738 #define SEC_LARGE_PAGES 0x80000000
739 #define SEC_IMAGE_NO_EXECUTE (SEC_IMAGE | SEC_NOCACHE)
740 #define MEM_IMAGE SEC_IMAGE
742 #define WRITE_WATCH_FLAG_RESET 0x00000001
744 #define AT_ROUND_TO_PAGE 0x40000000
748 #define MINSHORT 0x8000
749 #define MAXSHORT 0x7fff
750 #define MINLONG 0x80000000
751 #define MAXLONG 0x7fffffff
753 #define MAXWORD 0xffff
754 #define MAXDWORD 0xffffffff
755 #define MAXLONGLONG (((LONGLONG)0x7fffffff << 32) | 0xffffffff)
757 #define UNICODE_STRING_MAX_CHARS 32767
759 #define FIELD_OFFSET(type, field) ((LONG)offsetof(type, field))
761 #define CONTAINING_RECORD(address, type, field) \
762 ((type *)((PCHAR)(address) - offsetof(type, field)))
765 # define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
770 typedef struct _LIST_ENTRY
{
771 struct _LIST_ENTRY
*Flink
;
772 struct _LIST_ENTRY
*Blink
;
773 } LIST_ENTRY
, *PLIST_ENTRY
, * RESTRICTED_POINTER PRLIST_ENTRY
;
775 typedef struct _SINGLE_LIST_ENTRY
{
776 struct _SINGLE_LIST_ENTRY
*Next
;
777 } SINGLE_LIST_ENTRY
, *PSINGLE_LIST_ENTRY
;
781 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
*PSLIST_ENTRY
;
782 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
{
786 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER
{
793 ULONGLONG Sequence
:9;
794 ULONGLONG NextEntry
:39;
795 ULONGLONG HeaderType
:1;
797 ULONGLONG Reserved
:59;
802 ULONGLONG Sequence
:48;
803 ULONGLONG HeaderType
:1;
805 ULONGLONG Reserved
:2;
806 ULONGLONG NextEntry
:60;
808 } SLIST_HEADER
, *PSLIST_HEADER
;
812 #undef SLIST_ENTRY /* for Mac OS */
813 #define SLIST_ENTRY SINGLE_LIST_ENTRY
814 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
815 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
817 typedef union _SLIST_HEADER
{
824 } SLIST_HEADER
, *PSLIST_HEADER
;
828 NTSYSAPI PSLIST_ENTRY WINAPI
RtlFirstEntrySList(const SLIST_HEADER
*);
829 NTSYSAPI VOID WINAPI
RtlInitializeSListHead(PSLIST_HEADER
);
830 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedFlushSList(PSLIST_HEADER
);
831 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedPopEntrySList(PSLIST_HEADER
);
832 NTSYSAPI PSLIST_ENTRY WINAPI
RtlInterlockedPushEntrySList(PSLIST_HEADER
, PSLIST_ENTRY
);
833 NTSYSAPI WORD WINAPI
RtlQueryDepthSList(PSLIST_HEADER
);
838 #define HEAP_NO_SERIALIZE 0x00000001
839 #define HEAP_GROWABLE 0x00000002
840 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
841 #define HEAP_ZERO_MEMORY 0x00000008
842 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
843 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
844 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
845 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
846 #define HEAP_CREATE_ALIGN_16 0x00010000
847 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
848 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
850 /* This flag allows it to create heaps shared by all processes under win95,
851 FIXME: correct name */
852 #define HEAP_SHARED 0x04000000
854 typedef enum _HEAP_INFORMATION_CLASS
{
855 HeapCompatibilityInformation
,
856 } HEAP_INFORMATION_CLASS
;
858 /* Processor feature flags. */
859 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
860 #define PF_FLOATING_POINT_EMULATED 1
861 #define PF_COMPARE_EXCHANGE_DOUBLE 2
862 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
863 #define PF_PPC_MOVEMEM_64BIT_OK 4
864 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
865 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
866 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
867 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
868 #define PF_PAE_ENABLED 9
869 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
870 #define PF_SSE_DAZ_MODE_AVAILABLE 11
871 #define PF_NX_ENABLED 12
872 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
873 #define PF_COMPARE_EXCHANGE128 14
874 #define PF_COMPARE64_EXCHANGE128 15
875 #define PF_CHANNELS_ENABLED 16
876 #define PF_XSAVE_ENABLED 17
877 #define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
878 #define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
879 #define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
880 #define PF_VIRT_FIRMWARE_ENABLED 21
881 #define PF_RDWRFSGSBASE_AVAILABLE 22
882 #define PF_FASTFAIL_AVAILABLE 23
883 #define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
884 #define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
885 #define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
886 #define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
887 #define PF_RDRAND_INSTRUCTION_AVAILABLE 28
888 #define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
889 #define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
890 #define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
893 /* Execution state flags */
894 #define ES_SYSTEM_REQUIRED 0x00000001
895 #define ES_DISPLAY_REQUIRED 0x00000002
896 #define ES_USER_PRESENT 0x00000004
897 #define ES_CONTINUOUS 0x80000000
899 /* The Win32 register context */
901 /* i386 context definitions */
904 #define SIZE_OF_80387_REGISTERS 80
906 typedef struct _FLOATING_SAVE_AREA
915 BYTE RegisterArea
[SIZE_OF_80387_REGISTERS
];
917 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
919 #define MAXIMUM_SUPPORTED_EXTENSION 512
921 typedef struct _CONTEXT
923 DWORD ContextFlags
; /* 000 */
925 /* These are selected by CONTEXT_DEBUG_REGISTERS */
933 /* These are selected by CONTEXT_FLOATING_POINT */
934 FLOATING_SAVE_AREA FloatSave
; /* 01c */
936 /* These are selected by CONTEXT_SEGMENTS */
937 DWORD SegGs
; /* 08c */
938 DWORD SegFs
; /* 090 */
939 DWORD SegEs
; /* 094 */
940 DWORD SegDs
; /* 098 */
942 /* These are selected by CONTEXT_INTEGER */
950 /* These are selected by CONTEXT_CONTROL */
953 DWORD SegCs
; /* 0bc */
954 DWORD EFlags
; /* 0c0 */
956 DWORD SegSs
; /* 0c8 */
958 BYTE ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
]; /* 0xcc */
961 #define CONTEXT_X86 0x00010000
962 #define CONTEXT_i386 CONTEXT_X86
963 #define CONTEXT_i486 CONTEXT_X86
965 #define CONTEXT_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
966 #define CONTEXT_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
967 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
968 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x0008) /* 387 state */
969 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010) /* DB 0-3,6,7 */
970 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020)
971 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
972 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
973 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
975 #define EXCEPTION_READ_FAULT 0
976 #define EXCEPTION_WRITE_FAULT 1
977 #define EXCEPTION_EXECUTE_FAULT 8
979 #endif /* __i386__ */
981 typedef struct _LDT_ENTRY
{
996 unsigned LimitHi
: 4;
998 unsigned Reserved_0
: 1;
999 unsigned Default_Big
: 1;
1000 unsigned Granularity
: 1;
1001 unsigned BaseHi
: 8;
1004 } LDT_ENTRY
, *PLDT_ENTRY
, WOW64_LDT_ENTRY
, *PWOW64_LDT_ENTRY
;
1006 /* x86-64 context definitions */
1007 #if defined(__x86_64__)
1009 #define CONTEXT_AMD64 0x00100000
1011 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x0001)
1012 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x0002)
1013 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x0004)
1014 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x0008)
1015 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010)
1016 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1017 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1019 #define EXCEPTION_READ_FAULT 0
1020 #define EXCEPTION_WRITE_FAULT 1
1021 #define EXCEPTION_EXECUTE_FAULT 8
1023 typedef struct DECLSPEC_ALIGN(16) _M128A
{
1028 typedef struct _XMM_SAVE_AREA32
{
1029 WORD ControlWord
; /* 000 */
1030 WORD StatusWord
; /* 002 */
1031 BYTE TagWord
; /* 004 */
1032 BYTE Reserved1
; /* 005 */
1033 WORD ErrorOpcode
; /* 006 */
1034 DWORD ErrorOffset
; /* 008 */
1035 WORD ErrorSelector
; /* 00c */
1036 WORD Reserved2
; /* 00e */
1037 DWORD DataOffset
; /* 010 */
1038 WORD DataSelector
; /* 014 */
1039 WORD Reserved3
; /* 016 */
1040 DWORD MxCsr
; /* 018 */
1041 DWORD MxCsr_Mask
; /* 01c */
1042 M128A FloatRegisters
[8]; /* 020 */
1043 M128A XmmRegisters
[16]; /* 0a0 */
1044 BYTE Reserved4
[96]; /* 1a0 */
1045 } XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
1047 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1048 DWORD64 P1Home
; /* 000 */
1049 DWORD64 P2Home
; /* 008 */
1050 DWORD64 P3Home
; /* 010 */
1051 DWORD64 P4Home
; /* 018 */
1052 DWORD64 P5Home
; /* 020 */
1053 DWORD64 P6Home
; /* 028 */
1056 DWORD ContextFlags
; /* 030 */
1057 DWORD MxCsr
; /* 034 */
1060 WORD SegCs
; /* 038 */
1061 WORD SegDs
; /* 03a */
1062 WORD SegEs
; /* 03c */
1063 WORD SegFs
; /* 03e */
1064 WORD SegGs
; /* 040 */
1065 WORD SegSs
; /* 042 */
1066 DWORD EFlags
; /* 044 */
1069 DWORD64 Dr0
; /* 048 */
1070 DWORD64 Dr1
; /* 050 */
1071 DWORD64 Dr2
; /* 058 */
1072 DWORD64 Dr3
; /* 060 */
1073 DWORD64 Dr6
; /* 068 */
1074 DWORD64 Dr7
; /* 070 */
1077 DWORD64 Rax
; /* 078 */
1078 DWORD64 Rcx
; /* 080 */
1079 DWORD64 Rdx
; /* 088 */
1080 DWORD64 Rbx
; /* 090 */
1081 DWORD64 Rsp
; /* 098 */
1082 DWORD64 Rbp
; /* 0a0 */
1083 DWORD64 Rsi
; /* 0a8 */
1084 DWORD64 Rdi
; /* 0b0 */
1085 DWORD64 R8
; /* 0b8 */
1086 DWORD64 R9
; /* 0c0 */
1087 DWORD64 R10
; /* 0c8 */
1088 DWORD64 R11
; /* 0d0 */
1089 DWORD64 R12
; /* 0d8 */
1090 DWORD64 R13
; /* 0e0 */
1091 DWORD64 R14
; /* 0e8 */
1092 DWORD64 R15
; /* 0f0 */
1095 DWORD64 Rip
; /* 0f8 */
1097 /* Floating point */
1099 XMM_SAVE_AREA32 FltSave
; /* 100 */
1101 M128A Header
[2]; /* 100 */
1102 M128A Legacy
[8]; /* 120 */
1103 M128A Xmm0
; /* 1a0 */
1104 M128A Xmm1
; /* 1b0 */
1105 M128A Xmm2
; /* 1c0 */
1106 M128A Xmm3
; /* 1d0 */
1107 M128A Xmm4
; /* 1e0 */
1108 M128A Xmm5
; /* 1f0 */
1109 M128A Xmm6
; /* 200 */
1110 M128A Xmm7
; /* 210 */
1111 M128A Xmm8
; /* 220 */
1112 M128A Xmm9
; /* 230 */
1113 M128A Xmm10
; /* 240 */
1114 M128A Xmm11
; /* 250 */
1115 M128A Xmm12
; /* 260 */
1116 M128A Xmm13
; /* 270 */
1117 M128A Xmm14
; /* 280 */
1118 M128A Xmm15
; /* 290 */
1123 M128A VectorRegister
[26]; /* 300 */
1124 DWORD64 VectorControl
; /* 4a0 */
1127 DWORD64 DebugControl
; /* 4a8 */
1128 DWORD64 LastBranchToRip
; /* 4b0 */
1129 DWORD64 LastBranchFromRip
; /* 4b8 */
1130 DWORD64 LastExceptionToRip
; /* 4c0 */
1131 DWORD64 LastExceptionFromRip
; /* 4c8 */
1134 typedef struct _RUNTIME_FUNCTION
1139 } RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1141 #define UNWIND_HISTORY_TABLE_SIZE 12
1143 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
1146 PRUNTIME_FUNCTION FunctionEntry
;
1147 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
1149 #define UNWIND_HISTORY_TABLE_NONE 0
1150 #define UNWIND_HISTORY_TABLE_GLOBAL 1
1151 #define UNWIND_HISTORY_TABLE_LOCAL 2
1153 typedef struct _UNWIND_HISTORY_TABLE
1158 ULONG64 HighAddress
;
1159 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
1160 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
1162 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
1166 PM128A FloatingContext
[16];
1190 PULONG64 IntegerContext
[16];
1211 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1213 typedef PRUNTIME_FUNCTION (CALLBACK
*PGET_RUNTIME_FUNCTION_CALLBACK
)(DWORD64
,PVOID
);
1215 BOOLEAN CDECL
RtlAddFunctionTable(RUNTIME_FUNCTION
*,DWORD
,DWORD64
);
1216 BOOLEAN CDECL
RtlDeleteFunctionTable(RUNTIME_FUNCTION
*);
1217 BOOLEAN CDECL
RtlInstallFunctionTableCallback(DWORD64
,DWORD64
,DWORD
,PGET_RUNTIME_FUNCTION_CALLBACK
,PVOID
,PCWSTR
);
1218 PRUNTIME_FUNCTION WINAPI
RtlLookupFunctionEntry(DWORD64
,DWORD64
*,UNWIND_HISTORY_TABLE
*);
1219 PVOID WINAPI
RtlVirtualUnwind(ULONG
,ULONG64
,ULONG64
,RUNTIME_FUNCTION
*,CONTEXT
*,PVOID
*,ULONG64
*,KNONVOLATILE_CONTEXT_POINTERS
*);
1221 #define UNW_FLAG_NHANDLER 0
1222 #define UNW_FLAG_EHANDLER 1
1223 #define UNW_FLAG_UHANDLER 2
1224 #define UNW_FLAG_CHAININFO 4
1226 #endif /* __x86_64__ */
1228 /* IA64 context definitions */
1231 #define CONTEXT_IA64 0x00080000
1232 #define CONTEXT_CONTROL (CONTEXT_IA64 | 0x00000001)
1233 #define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | 0x00000002)
1234 #define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004)
1235 #define CONTEXT_INTEGER (CONTEXT_IA64 | 0x00000008)
1236 #define CONTEXT_DEBUG (CONTEXT_IA64 | 0x00000010)
1237 #define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | 0x00000020)
1238 #define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)
1239 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
1240 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
1242 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1243 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1244 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1245 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1247 typedef struct _CONTEXT
1442 ULONGLONG RsBSPSTORE
;
1456 ULONGLONG UNUSEDPACK
;
1457 } CONTEXT
, *PCONTEXT
;
1459 typedef struct _RUNTIME_FUNCTION
1463 ULONG UnwindInfoAddress
;
1464 } RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1466 typedef struct _FRAME_POINTERS
{
1467 ULONGLONG MemoryStackFp
;
1468 ULONGLONG BackingStoreFp
;
1469 } FRAME_POINTERS
, *PFRAME_POINTERS
;
1471 #define UNWIND_HISTORY_TABLE_SIZE 12
1473 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
{
1476 PRUNTIME_FUNCTION FunctionEntry
;
1477 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
1479 typedef struct _UNWIND_HISTORY_TABLE
{
1483 ULONG64 HighAddress
;
1484 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
1485 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
1487 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
1493 PFLOAT128 HighFloatingContext
[10];
1515 PULONGLONG IntS0Nat
;
1516 PULONGLONG IntS1Nat
;
1517 PULONGLONG IntS2Nat
;
1518 PULONGLONG IntS3Nat
;
1519 PULONGLONG IntSpNat
;
1535 } KNONVOLATILE_CONTEXT_POINTERS
, *PKNONVOLATILE_CONTEXT_POINTERS
;
1537 ULONGLONG WINAPI
RtlVirtualUnwind(ULONGLONG
,ULONGLONG
,RUNTIME_FUNCTION
*,CONTEXT
*,BOOLEAN
*,FRAME_POINTERS
*,KNONVOLATILE_CONTEXT_POINTERS
*);
1539 #endif /* __ia64__ */
1541 /* Alpha context definitions */
1542 #if defined(_ALPHA_) || defined(__ALPHA__) || defined(__alpha__)
1544 #define CONTEXT_ALPHA 0x00020000
1546 #define CONTEXT_CONTROL (CONTEXT_ALPHA | 0x00000001)
1547 #define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA | 0x00000002)
1548 #define CONTEXT_INTEGER (CONTEXT_ALPHA | 0x00000004)
1549 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
1551 #define EXCEPTION_READ_FAULT 0
1552 #define EXCEPTION_WRITE_FAULT 1
1553 #define EXCEPTION_EXECUTE_FAULT 8
1555 typedef struct _CONTEXT
1557 /* selected by CONTEXT_FLOATING_POINT */
1591 /* selected by CONTEXT_INTEGER */
1625 /* selected by CONTEXT_FLOATING_POINT */
1629 /* selected by CONTEXT_CONTROL */
1636 #define _QUAD_PSR_OFFSET HighSoftFpcr
1637 #define _QUAD_FLAGS_OFFSET HighFir
1639 #endif /* _ALPHA_ */
1643 /* The following flags control the contents of the CONTEXT structure. */
1645 #define CONTEXT_ARM 0x0200000
1646 #define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001)
1647 #define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002)
1648 #define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x00000004)
1649 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
1651 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
1652 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1654 #define EXCEPTION_READ_FAULT 0
1655 #define EXCEPTION_WRITE_FAULT 1
1656 #define EXCEPTION_EXECUTE_FAULT 8
1658 #define ARM_MAX_BREAKPOINTS 8
1659 #define ARM_MAX_WATCHPOINTS 1
1661 typedef struct _RUNTIME_FUNCTION
1668 DWORD FunctionLength
: 11;
1675 DWORD StackAdjust
: 10;
1678 } RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1680 #define UNWIND_HISTORY_TABLE_SIZE 12
1682 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
1685 PRUNTIME_FUNCTION FunctionEntry
;
1686 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
1688 typedef struct _UNWIND_HISTORY_TABLE
1697 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
1698 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
1700 typedef struct _NEON128
1704 } NEON128
, *PNEON128
;
1706 typedef struct _CONTEXT
1708 ULONG ContextFlags
; /* 000 */
1709 /* CONTEXT_INTEGER */
1720 ULONG R10
; /* 02c */
1721 ULONG R11
; /* 030 */
1722 ULONG R12
; /* 034 */
1723 /* CONTEXT_CONTROL */
1727 ULONG Cpsr
; /* 044 */
1728 /* CONTEXT_FLOATING_POINT */
1729 ULONG Fpscr
; /* 048 */
1730 ULONG Padding
; /* 04c */
1736 } DUMMYUNIONNAME
; /* 050 */
1737 /* CONTEXT_DEBUG_REGISTERS */
1738 ULONG Bvr
[ARM_MAX_BREAKPOINTS
]; /* 150 */
1739 ULONG Bcr
[ARM_MAX_BREAKPOINTS
]; /* 170 */
1740 ULONG Wvr
[ARM_MAX_WATCHPOINTS
]; /* 190 */
1741 ULONG Wcr
[ARM_MAX_WATCHPOINTS
]; /* 194 */
1742 ULONG Padding2
[2]; /* 198 */
1745 BOOLEAN CDECL
RtlAddFunctionTable(RUNTIME_FUNCTION
*,DWORD
,DWORD
);
1746 BOOLEAN CDECL
RtlDeleteFunctionTable(RUNTIME_FUNCTION
*);
1747 PRUNTIME_FUNCTION WINAPI
RtlLookupFunctionEntry(ULONG_PTR
,DWORD
*,UNWIND_HISTORY_TABLE
*);
1749 #endif /* __arm__ */
1753 #define CONTEXT_ARM64 0x400000
1754 #define CONTEXT_CONTROL (CONTEXT_ARM64 | 0x00000001)
1755 #define CONTEXT_INTEGER (CONTEXT_ARM64 | 0x00000002)
1756 #define CONTEXT_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004)
1757 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
1759 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
1760 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1762 #define EXCEPTION_READ_FAULT 0
1763 #define EXCEPTION_WRITE_FAULT 1
1764 #define EXCEPTION_EXECUTE_FAULT 8
1766 #define ARM64_MAX_BREAKPOINTS 8
1767 #define ARM64_MAX_WATCHPOINTS 2
1769 typedef struct _RUNTIME_FUNCTION
1778 DWORD FunctionLength
: 11;
1783 DWORD FrameSize
: 9;
1786 } RUNTIME_FUNCTION
, *PRUNTIME_FUNCTION
;
1788 #define UNWIND_HISTORY_TABLE_SIZE 12
1790 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
1793 PRUNTIME_FUNCTION FunctionEntry
;
1794 } UNWIND_HISTORY_TABLE_ENTRY
, *PUNWIND_HISTORY_TABLE_ENTRY
;
1796 typedef struct _UNWIND_HISTORY_TABLE
1804 DWORD64 HighAddress
;
1805 UNWIND_HISTORY_TABLE_ENTRY Entry
[UNWIND_HISTORY_TABLE_SIZE
];
1806 } UNWIND_HISTORY_TABLE
, *PUNWIND_HISTORY_TABLE
;
1808 typedef union _NEON128
1819 } NEON128
, *PNEON128
;
1821 typedef struct _CONTEXT
1823 ULONG ContextFlags
; /* 000 */
1824 /* CONTEXT_INTEGER */
1825 ULONG Cpsr
; /* 004 */
1830 DWORD64 X0
; /* 008 */
1831 DWORD64 X1
; /* 010 */
1832 DWORD64 X2
; /* 018 */
1833 DWORD64 X3
; /* 020 */
1834 DWORD64 X4
; /* 028 */
1835 DWORD64 X5
; /* 030 */
1836 DWORD64 X6
; /* 038 */
1837 DWORD64 X7
; /* 040 */
1838 DWORD64 X8
; /* 048 */
1839 DWORD64 X9
; /* 050 */
1840 DWORD64 X10
; /* 058 */
1841 DWORD64 X11
; /* 060 */
1842 DWORD64 X12
; /* 068 */
1843 DWORD64 X13
; /* 070 */
1844 DWORD64 X14
; /* 078 */
1845 DWORD64 X15
; /* 080 */
1846 DWORD64 X16
; /* 088 */
1847 DWORD64 X17
; /* 090 */
1848 DWORD64 X18
; /* 098 */
1849 DWORD64 X19
; /* 0a0 */
1850 DWORD64 X20
; /* 0a8 */
1851 DWORD64 X21
; /* 0b0 */
1852 DWORD64 X22
; /* 0b8 */
1853 DWORD64 X23
; /* 0c0 */
1854 DWORD64 X24
; /* 0c8 */
1855 DWORD64 X25
; /* 0d0 */
1856 DWORD64 X26
; /* 0d8 */
1857 DWORD64 X27
; /* 0e0 */
1858 DWORD64 X28
; /* 0e8 */
1859 DWORD64 Fp
; /* 0f0 */
1860 DWORD64 Lr
; /* 0f8 */
1862 DWORD64 X
[31]; /* 008 */
1864 /* CONTEXT_CONTROL */
1865 DWORD64 Sp
; /* 100 */
1866 DWORD64 Pc
; /* 108 */
1867 /* CONTEXT_FLOATING_POINT */
1868 NEON128 V
[32]; /* 110 */
1869 DWORD Fpcr
; /* 310 */
1870 DWORD Fpsr
; /* 314 */
1871 /* CONTEXT_DEBUG_REGISTERS */
1872 DWORD Bcr
[ARM64_MAX_BREAKPOINTS
]; /* 318 */
1873 DWORD64 Bvr
[ARM64_MAX_BREAKPOINTS
]; /* 338 */
1874 DWORD Wcr
[ARM64_MAX_WATCHPOINTS
]; /* 378 */
1875 DWORD64 Wvr
[ARM64_MAX_WATCHPOINTS
]; /* 380 */
1878 BOOLEAN CDECL
RtlAddFunctionTable(RUNTIME_FUNCTION
*,DWORD
,ULONG_PTR
);
1879 BOOLEAN CDECL
RtlDeleteFunctionTable(RUNTIME_FUNCTION
*);
1881 #endif /* __aarch64__ */
1884 /* Mips context definitions */
1885 #if defined(_MIPS_) || defined(__MIPS__) || defined(__mips__)
1887 #define CONTEXT_R4000 0x00010000
1889 #define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001)
1890 #define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002)
1891 #define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004)
1893 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
1895 #define EXCEPTION_READ_FAULT 0
1896 #define EXCEPTION_WRITE_FAULT 1
1897 #define EXCEPTION_EXECUTE_FAULT 8
1899 typedef struct _CONTEXT
1902 /* These are selected by CONTEXT_FLOATING_POINT */
1936 /* These are selected by CONTEXT_INTEGER */
1972 /* These are selected by CONTEXT_FLOATING_POINT */
1975 /* These are selected by CONTEXT_CONTROL */
1985 /* PowerPC context definitions */
1988 #define CONTEXT_CONTROL 0x0001
1989 #define CONTEXT_FLOATING_POINT 0x0002
1990 #define CONTEXT_INTEGER 0x0004
1991 #define CONTEXT_DEBUG_REGISTERS 0x0008
1992 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
1994 #define EXCEPTION_READ_FAULT 0
1995 #define EXCEPTION_WRITE_FAULT 1
1996 #define EXCEPTION_EXECUTE_FAULT 8
2000 /* These are selected by CONTEXT_FLOATING_POINT */
2035 /* These are selected by CONTEXT_INTEGER */
2072 /* These are selected by CONTEXT_CONTROL */
2074 DWORD Iar
; /* Instruction Address Register , aka PC ... */
2080 DWORD Dar
; /* Fault registers for coredump */
2082 DWORD Trap
; /* number of powerpc exception taken */
2084 /* These are selected by CONTEXT_DEBUG_REGISTERS */
2095 typedef struct _STACK_FRAME_HEADER
2112 } STACK_FRAME_HEADER
,*PSTACK_FRAME_HEADER
;
2114 #endif /* __powerpc__ */
2116 #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
2117 #error You need to define a CONTEXT for your CPU
2120 typedef CONTEXT
*PCONTEXT
;
2122 NTSYSAPI
void WINAPI
RtlCaptureContext(CONTEXT
*);
2124 #define WOW64_CONTEXT_i386 0x00010000
2125 #define WOW64_CONTEXT_i486 0x00010000
2126 #define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000001))
2127 #define WOW64_CONTEXT_INTEGER (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000002))
2128 #define WOW64_CONTEXT_SEGMENTS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000004))
2129 #define WOW64_CONTEXT_FLOATING_POINT (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000008))
2130 #define WOW64_CONTEXT_DEBUG_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000010))
2131 #define WOW64_CONTEXT_EXTENDED_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000020))
2132 #define WOW64_CONTEXT_FULL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS)
2133 #define WOW64_CONTEXT_ALL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | \
2134 WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | \
2135 WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS)
2137 #define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040))
2139 #define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x08000000
2140 #define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000
2141 #define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000
2142 #define WOW64_CONTEXT_EXCEPTION_REPORTING 0x80000000
2144 #define WOW64_SIZE_OF_80387_REGISTERS 80
2145 #define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512
2147 typedef struct _WOW64_FLOATING_SAVE_AREA
2153 DWORD ErrorSelector
;
2156 BYTE RegisterArea
[WOW64_SIZE_OF_80387_REGISTERS
];
2158 } WOW64_FLOATING_SAVE_AREA
, *PWOW64_FLOATING_SAVE_AREA
;
2160 #include "pshpack4.h"
2161 typedef struct _WOW64_CONTEXT
2170 WOW64_FLOATING_SAVE_AREA FloatSave
;
2187 BYTE ExtendedRegisters
[WOW64_MAXIMUM_SUPPORTED_EXTENSION
];
2188 } WOW64_CONTEXT
, *PWOW64_CONTEXT
;
2189 #include "poppack.h"
2195 #define PRODUCT_UNDEFINED 0x00000000
2196 #define PRODUCT_ULTIMATE 0x00000001
2197 #define PRODUCT_HOME_BASIC 0x00000002
2198 #define PRODUCT_HOME_PREMIUM 0x00000003
2199 #define PRODUCT_ENTERPRISE 0x00000004
2200 #define PRODUCT_HOME_BASIC_N 0x00000005
2201 #define PRODUCT_BUSINESS 0x00000006
2202 #define PRODUCT_STANDARD_SERVER 0x00000007
2203 #define PRODUCT_DATACENTER_SERVER 0x00000008
2204 #define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
2205 #define PRODUCT_ENTERPRISE_SERVER 0x0000000A
2206 #define PRODUCT_STARTER 0x0000000B
2207 #define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
2208 #define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
2209 #define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
2210 #define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
2211 #define PRODUCT_BUSINESS_N 0x00000010
2212 #define PRODUCT_WEB_SERVER 0x00000011
2213 #define PRODUCT_CLUSTER_SERVER 0x00000012
2214 #define PRODUCT_HOME_SERVER 0x00000013
2215 #define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
2216 #define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
2217 #define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
2218 #define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
2219 #define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
2220 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019
2221 #define PRODUCT_HOME_PREMIUM_N 0x0000001A
2222 #define PRODUCT_ENTERPRISE_N 0x0000001B
2223 #define PRODUCT_ULTIMATE_N 0x0000001C
2224 #define PRODUCT_WEB_SERVER_CORE 0x0000001D
2225 #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
2226 #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
2227 #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
2228 #define PRODUCT_SERVER_FOUNDATION 0x00000021
2229 #define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
2230 #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
2231 #define PRODUCT_STANDARD_SERVER_V 0x00000024
2232 #define PRODUCT_DATACENTER_SERVER_V 0x00000025
2233 #define PRODUCT_SERVER_V 0x00000025
2234 #define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
2235 #define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
2236 #define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
2237 #define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
2238 #define PRODUCT_HYPERV 0x0000002A
2239 #define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B
2240 #define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C
2241 #define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D
2242 #define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E
2243 #define PRODUCT_STARTER_N 0x0000002F
2244 #define PRODUCT_PROFESSIONAL 0x00000030
2245 #define PRODUCT_PROFESSIONAL_N 0x00000031
2246 #define PRODUCT_SB_SOLUTION_SERVER 0x00000032
2247 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
2248 #define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
2249 #define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
2250 #define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
2251 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
2252 #define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
2253 #define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x00000039
2254 #define PRODUCT_PROFESSIONAL_EMBEDDED 0x0000003A
2255 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B
2256 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C
2257 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D
2258 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E
2259 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F
2260 #define PRODUCT_CLUSTER_SERVER_V 0x00000040
2261 #define PRODUCT_EMBEDDED 0x00000041
2262 #define PRODUCT_STARTER_E 0x00000042
2263 #define PRODUCT_HOME_BASIC_E 0x00000043
2264 #define PRODUCT_HOME_PREMIUM_E 0x00000044
2265 #define PRODUCT_PROFESSIONAL_E 0x00000045
2266 #define PRODUCT_ENTERPRISE_E 0x00000046
2267 #define PRODUCT_ULTIMATE_E 0x00000047
2268 #define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
2269 #define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C
2270 #define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D
2271 #define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F
2272 #define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050
2273 #define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054
2274 #define PRODUCT_EMBEDDED_AUTOMOTIVE 0x00000055
2275 #define PRODUCT_EMBEDDED_INDUSTRY_A 0x00000056
2276 #define PRODUCT_THINPC 0x00000057
2277 #define PRODUCT_EMBEDDED_A 0x00000058
2278 #define PRODUCT_EMBEDDED_INDUSTRY 0x00000059
2279 #define PRODUCT_EMBEDDED_E 0x0000005A
2280 #define PRODUCT_EMBEDDED_INDUSTRY_E 0x0000005B
2281 #define PRODUCT_EMBEDDED_INDUSTRY_A_E 0x0000005C
2282 #define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F
2283 #define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060
2284 #define PRODUCT_CORE_ARM 0x00000061
2285 #define PRODUCT_CORE_N 0x00000062
2286 #define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063
2287 #define PRODUCT_CORE_SINGLELANGUAGE 0x00000064
2288 #define PRODUCT_CORE_LANGUAGESPECIFIC 0x00000064
2289 #define PRODUCT_CORE 0x00000065
2290 #define PRODUCT_PROFESSIONAL_WMC 0x00000067
2291 #define PRODUCT_MOBILE_CORE 0x00000068
2292 #define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x00000069
2293 #define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x0000006A
2294 #define PRODUCT_EMBEDDED_EVAL 0x0000006B
2295 #define PRODUCT_EMBEDDED_E_EVAL 0x0000006C
2296 #define PRODUCT_NANO_SERVER 0x0000006D
2297 #define PRODUCT_CLOUD_STORAGE_SERVER 0x0000006E
2298 #define PRODUCT_CORE_CONNECTED 0x0000006F
2299 #define PRODUCT_PROFESSIONAL_STUDENT 0x00000070
2300 #define PRODUCT_CORE_CONNECTED_N 0x00000071
2301 #define PRODUCT_PROFESSIONAL_STUDENT_N 0x00000072
2302 #define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x00000073
2303 #define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC 0x00000074
2304 #define PRODUCT_CONNECTED_CAR 0x00000075
2305 #define PRODUCT_INDUSTRY_HANDHELD 0x00000076
2306 #define PRODUCT_PPI_PRO 0x00000077
2307 #define PRODUCT_ARM64_SERVER 0x00000078
2308 #define PRODUCT_EDUCATION 0x00000079
2309 #define PRODUCT_EDUCATION_N 0x0000007A
2310 #define PRODUCT_IOTUAP 0x0000007B
2311 #define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER 0x0000007C
2312 #define PRODUCT_ENTERPRISE_S 0x0000007D
2313 #define PRODUCT_ENTERPRISE_S_N 0x0000007E
2314 #define PRODUCT_PROFESSIONAL_S 0x0000007F
2315 #define PRODUCT_PROFESSIONAL_S_N 0x00000080
2316 #define PRODUCT_ENTERPRISE_S_EVALUATION 0x00000081
2317 #define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x00000082
2318 #define PRODUCT_UNLICENSED 0xABCDABCD
2325 #define MAKELCID(l, s) (MAKELONG(l, s))
2327 #define MAKELANGID(p, s) ((((WORD)(s))<<10) | (WORD)(p))
2328 #define PRIMARYLANGID(l) ((WORD)(l) & 0x3ff)
2329 #define SUBLANGID(l) ((WORD)(l) >> 10)
2331 #define LANGIDFROMLCID(lcid) ((WORD)(lcid))
2332 #define SORTIDFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 16) & 0x0f))
2334 #define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))
2335 #define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))
2336 #define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
2337 #define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))
2338 #define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
2339 #define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
2340 #define LOCALE_CUSTOM_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_DEFAULT),SORT_DEFAULT))
2341 #define LOCALE_CUSTOM_UNSPECIFIED (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_UNSPECIFIED),SORT_DEFAULT))
2342 #define LOCALE_CUSTOM_UI_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_UI_CUSTOM_DEFAULT),SORT_DEFAULT))
2343 #define LOCALE_NAME_MAX_LENGTH 85
2346 #define UNREFERENCED_PARAMETER(u) (void)(u)
2347 #define DBG_UNREFERENCED_PARAMETER(u) (void)(u)
2348 #define DBG_UNREFERENCED_LOCAL_VARIABLE(u) (void)(u)
2354 * Definitions for IsTextUnicode()
2357 #define IS_TEXT_UNICODE_ASCII16 0x0001
2358 #define IS_TEXT_UNICODE_STATISTICS 0x0002
2359 #define IS_TEXT_UNICODE_CONTROLS 0x0004
2360 #define IS_TEXT_UNICODE_SIGNATURE 0x0008
2361 #define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
2362 #define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010
2363 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
2364 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040
2365 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080
2366 #define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0
2367 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100
2368 #define IS_TEXT_UNICODE_ODD_LENGTH 0x0200
2369 #define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400
2370 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00
2371 #define IS_TEXT_UNICODE_NULL_BYTES 0x1000
2372 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000
2374 #define MAXIMUM_WAIT_OBJECTS 64
2375 #define MAXIMUM_SUSPEND_COUNT 127
2377 #define WT_EXECUTEDEFAULT 0x00
2378 #define WT_EXECUTEINIOTHREAD 0x01
2379 #define WT_EXECUTEINUITHREAD 0x02
2380 #define WT_EXECUTEINWAITTHREAD 0x04
2381 #define WT_EXECUTEONLYONCE 0x08
2382 #define WT_EXECUTELONGFUNCTION 0x10
2383 #define WT_EXECUTEINTIMERTHREAD 0x20
2384 #define WT_EXECUTEINPERSISTENTIOTHREAD 0x40
2385 #define WT_EXECUTEINPERSISTENTTHREAD 0x80
2386 #define WT_EXECUTEINLONGTHREAD 0x10
2387 #define WT_EXECUTEDELETEWAIT 0x08
2388 #define WT_TRANSFER_IMPERSONATION 0x0100
2391 #define EXCEPTION_CONTINUABLE 0
2392 #define EXCEPTION_NONCONTINUABLE 0x01
2395 * The exception record used by Win32 to give additional information
2396 * about exception to exception handlers.
2399 #define EXCEPTION_MAXIMUM_PARAMETERS 15
2401 typedef struct _EXCEPTION_RECORD
2403 DWORD ExceptionCode
;
2404 DWORD ExceptionFlags
;
2405 struct _EXCEPTION_RECORD
*ExceptionRecord
;
2407 PVOID ExceptionAddress
;
2408 DWORD NumberParameters
;
2409 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
2410 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
2413 * The exception pointers structure passed to exception filters
2414 * in except() and the UnhandledExceptionFilter().
2417 typedef struct _EXCEPTION_POINTERS
2419 PEXCEPTION_RECORD ExceptionRecord
;
2420 PCONTEXT ContextRecord
;
2421 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
2425 * The exception frame, used for registering exception handlers
2426 * Win32 cares only about this, but compilers generally emit
2427 * larger exception frames for their own use.
2430 struct _EXCEPTION_REGISTRATION_RECORD
;
2432 typedef DWORD (*PEXCEPTION_HANDLER
)(PEXCEPTION_RECORD
,struct _EXCEPTION_REGISTRATION_RECORD
*,
2433 PCONTEXT
,struct _EXCEPTION_REGISTRATION_RECORD
**);
2435 typedef struct _EXCEPTION_REGISTRATION_RECORD
2437 struct _EXCEPTION_REGISTRATION_RECORD
*Prev
;
2438 PEXCEPTION_HANDLER Handler
;
2439 } EXCEPTION_REGISTRATION_RECORD
;
2442 * function pointer to an exception filter
2445 typedef LONG (CALLBACK
*PVECTORED_EXCEPTION_HANDLER
)(PEXCEPTION_POINTERS ExceptionInfo
);
2447 typedef struct _NT_TIB
2449 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
2457 PVOID ArbitraryUserPointer
;
2458 struct _NT_TIB
*Self
;
2463 #if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
2464 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2467 __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb
));
2470 #elif defined(__i386__) && defined(_MSC_VER)
2471 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2474 __asm mov eax
, fs
:[0x18];
2478 #elif defined(__x86_64__) && defined(__GNUC__)
2479 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2482 __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb
));
2485 #elif defined(__x86_64__) && defined(_MSC_VER)
2486 #pragma intrinsic(__readgsqword)
2487 static FORCEINLINE
struct _TEB
* WINAPI
NtCurrentTeb(void)
2489 return (struct _TEB
*)__readgsqword(FIELD_OFFSET(NT_TIB
, Self
));
2492 extern struct _TEB
* WINAPI
NtCurrentTeb(void);
2495 #ifdef NONAMELESSUNION
2496 #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->u.FiberData)
2498 #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->FiberData)
2500 #define GetFiberData() (*(void **)GetCurrentFiber())
2502 #define TLS_MINIMUM_AVAILABLE 64
2504 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 * 1024)
2506 #define IO_REPARSE_TAG_RESERVED_ZERO 0
2507 #define IO_REPARSE_TAG_RESERVED_ONE 1
2508 #define IO_REPARSE_TAG_RESERVED_TWO 2
2510 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_TWO
2512 #define IO_REPARSE_TAG_MOUNT_POINT __MSABI_LONG(0xA0000003)
2513 #define IO_REPARSE_TAG_HSM __MSABI_LONG(0xC0000004)
2514 #define IO_REPARSE_TAG_DRIVE_EXTENDER __MSABI_LONG(0x80000005)
2515 #define IO_REPARSE_TAG_HSM2 __MSABI_LONG(0x80000006)
2516 #define IO_REPARSE_TAG_SIS __MSABI_LONG(0x80000007)
2517 #define IO_REPARSE_TAG_WIM __MSABI_LONG(0x80000008)
2518 #define IO_REPARSE_TAG_CSV __MSABI_LONG(0x80000009)
2519 #define IO_REPARSE_TAG_DFS __MSABI_LONG(0x8000000A)
2520 #define IO_REPARSE_TAG_FILTER_MANAGER __MSABI_LONG(0x8000000B)
2521 #define IO_REPARSE_TAG_SYMLINK __MSABI_LONG(0xA000000C)
2522 #define IO_REPARSE_TAG_IIS_CACHE __MSABI_LONG(0xA0000010)
2523 #define IO_REPARSE_TAG_DFSR __MSABI_LONG(0x80000012)
2524 #define IO_REPARSE_TAG_DEDUP __MSABI_LONG(0x80000013)
2525 #define IO_REPARSE_TAG_NFS __MSABI_LONG(0x80000014)
2526 #define IO_REPARSE_TAG_FILE_PLACEHOLDER __MSABI_LONG(0x80000015)
2527 #define IO_REPARSE_TAG_WOF __MSABI_LONG(0x80000017)
2528 #define IO_REPARSE_TAG_WCI __MSABI_LONG(0x80000018)
2529 #define IO_REPARSE_TAG_WCI_1 __MSABI_LONG(0x90001018)
2530 #define IO_REPARSE_TAG_GLOBAL_REPARSE __MSABI_LONG(0xA0000019)
2531 #define IO_REPARSE_TAG_CLOUD __MSABI_LONG(0x9000001A)
2532 #define IO_REPARSE_TAG_CLOUD_1 __MSABI_LONG(0x9000101A)
2533 #define IO_REPARSE_TAG_CLOUD_2 __MSABI_LONG(0x9000201A)
2534 #define IO_REPARSE_TAG_CLOUD_3 __MSABI_LONG(0x9000301A)
2535 #define IO_REPARSE_TAG_CLOUD_4 __MSABI_LONG(0x9000401A)
2536 #define IO_REPARSE_TAG_CLOUD_5 __MSABI_LONG(0x9000501A)
2537 #define IO_REPARSE_TAG_CLOUD_6 __MSABI_LONG(0x9000601A)
2538 #define IO_REPARSE_TAG_CLOUD_7 __MSABI_LONG(0x9000701A)
2539 #define IO_REPARSE_TAG_CLOUD_8 __MSABI_LONG(0x9000801A)
2540 #define IO_REPARSE_TAG_CLOUD_9 __MSABI_LONG(0x9000901A)
2541 #define IO_REPARSE_TAG_CLOUD_A __MSABI_LONG(0x9000A01A)
2542 #define IO_REPARSE_TAG_CLOUD_B __MSABI_LONG(0x9000B01A)
2543 #define IO_REPARSE_TAG_CLOUD_C __MSABI_LONG(0x9000C01A)
2544 #define IO_REPARSE_TAG_CLOUD_D __MSABI_LONG(0x9000D01A)
2545 #define IO_REPARSE_TAG_CLOUD_E __MSABI_LONG(0x9000E01A)
2546 #define IO_REPARSE_TAG_CLOUD_F __MSABI_LONG(0x9000F01A)
2547 #define IO_REPARSE_TAG_CLOUD_MASK __MSABI_LONG(0x0000F000)
2548 #define IO_REPARSE_TAG_APPEXECLINK __MSABI_LONG(0x8000001B)
2549 #define IO_REPARSE_TAG_GVFS __MSABI_LONG(0x9000001C)
2550 #define IO_REPARSE_TAG_STORAGE_SYNC __MSABI_LONG(0x8000001E)
2551 #define IO_REPARSE_TAG_WCI_TOMBSTONE __MSABI_LONG(0xA000001F)
2552 #define IO_REPARSE_TAG_UNHANDLED __MSABI_LONG(0x80000020)
2553 #define IO_REPARSE_TAG_ONEDRIVE __MSABI_LONG(0x80000021)
2554 #define IO_REPARSE_TAG_GVFS_TOMBSTONE __MSABI_LONG(0xA0000022)
2557 * File formats definitions
2560 #include <pshpack2.h>
2561 typedef struct _IMAGE_DOS_HEADER
{
2562 WORD e_magic
; /* 00: MZ Header signature */
2563 WORD e_cblp
; /* 02: Bytes on last page of file */
2564 WORD e_cp
; /* 04: Pages in file */
2565 WORD e_crlc
; /* 06: Relocations */
2566 WORD e_cparhdr
; /* 08: Size of header in paragraphs */
2567 WORD e_minalloc
; /* 0a: Minimum extra paragraphs needed */
2568 WORD e_maxalloc
; /* 0c: Maximum extra paragraphs needed */
2569 WORD e_ss
; /* 0e: Initial (relative) SS value */
2570 WORD e_sp
; /* 10: Initial SP value */
2571 WORD e_csum
; /* 12: Checksum */
2572 WORD e_ip
; /* 14: Initial IP value */
2573 WORD e_cs
; /* 16: Initial (relative) CS value */
2574 WORD e_lfarlc
; /* 18: File address of relocation table */
2575 WORD e_ovno
; /* 1a: Overlay number */
2576 WORD e_res
[4]; /* 1c: Reserved words */
2577 WORD e_oemid
; /* 24: OEM identifier (for e_oeminfo) */
2578 WORD e_oeminfo
; /* 26: OEM information; e_oemid specific */
2579 WORD e_res2
[10]; /* 28: Reserved words */
2580 DWORD e_lfanew
; /* 3c: Offset to extended header */
2581 } IMAGE_DOS_HEADER
, *PIMAGE_DOS_HEADER
;
2582 #include <poppack.h>
2584 #define IMAGE_DOS_SIGNATURE 0x5A4D /* MZ */
2585 #define IMAGE_OS2_SIGNATURE 0x454E /* NE */
2586 #define IMAGE_OS2_SIGNATURE_LE 0x454C /* LE */
2587 #define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */
2588 #define IMAGE_VXD_SIGNATURE 0x454C /* LE */
2589 #define IMAGE_NT_SIGNATURE 0x00004550 /* PE00 */
2592 * This is the Windows executable (NE) header.
2593 * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way.
2595 #include <pshpack2.h>
2598 WORD ne_magic
; /* 00 NE signature 'NE' */
2599 BYTE ne_ver
; /* 02 Linker version number */
2600 BYTE ne_rev
; /* 03 Linker revision number */
2601 WORD ne_enttab
; /* 04 Offset to entry table relative to NE */
2602 WORD ne_cbenttab
; /* 06 Length of entry table in bytes */
2603 LONG ne_crc
; /* 08 Checksum */
2604 WORD ne_flags
; /* 0c Flags about segments in this file */
2605 WORD ne_autodata
; /* 0e Automatic data segment number */
2606 WORD ne_heap
; /* 10 Initial size of local heap */
2607 WORD ne_stack
; /* 12 Initial size of stack */
2608 DWORD ne_csip
; /* 14 Initial CS:IP */
2609 DWORD ne_sssp
; /* 18 Initial SS:SP */
2610 WORD ne_cseg
; /* 1c # of entries in segment table */
2611 WORD ne_cmod
; /* 1e # of entries in module reference tab. */
2612 WORD ne_cbnrestab
; /* 20 Length of nonresident-name table */
2613 WORD ne_segtab
; /* 22 Offset to segment table */
2614 WORD ne_rsrctab
; /* 24 Offset to resource table */
2615 WORD ne_restab
; /* 26 Offset to resident-name table */
2616 WORD ne_modtab
; /* 28 Offset to module reference table */
2617 WORD ne_imptab
; /* 2a Offset to imported name table */
2618 DWORD ne_nrestab
; /* 2c Offset to nonresident-name table */
2619 WORD ne_cmovent
; /* 30 # of movable entry points */
2620 WORD ne_align
; /* 32 Logical sector alignment shift count */
2621 WORD ne_cres
; /* 34 # of resource segments */
2622 BYTE ne_exetyp
; /* 36 Flags indicating target OS */
2623 BYTE ne_flagsothers
; /* 37 Additional information flags */
2624 WORD ne_pretthunks
; /* 38 Offset to return thunks */
2625 WORD ne_psegrefbytes
; /* 3a Offset to segment ref. bytes */
2626 WORD ne_swaparea
; /* 3c Reserved by Microsoft */
2627 WORD ne_expver
; /* 3e Expected Windows version number */
2628 } IMAGE_OS2_HEADER
, *PIMAGE_OS2_HEADER
;
2629 #include <poppack.h>
2631 #include <pshpack2.h>
2632 typedef struct _IMAGE_VXD_HEADER
{
2647 DWORD e32_lastpagesize
;
2648 DWORD e32_fixupsize
;
2665 DWORD e32_impmodcnt
;
2671 DWORD e32_cbnrestab
;
2674 DWORD e32_debuginfo
;
2676 DWORD e32_instpreload
;
2677 DWORD e32_instdemand
;
2680 DWORD e32_winresoff
;
2681 DWORD e32_winreslen
;
2684 } IMAGE_VXD_HEADER
, *PIMAGE_VXD_HEADER
;
2685 #include <poppack.h>
2687 /* These defines describe the meanings of the bits in the Characteristics
2690 #define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* No relocation info */
2691 #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
2692 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
2693 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
2694 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
2695 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
2696 #define IMAGE_FILE_16BIT_MACHINE 0x0040
2697 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
2698 #define IMAGE_FILE_32BIT_MACHINE 0x0100
2699 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200
2700 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
2701 #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
2702 #define IMAGE_FILE_SYSTEM 0x1000
2703 #define IMAGE_FILE_DLL 0x2000
2704 #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
2705 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
2707 /* These are the settings of the Machine field. */
2708 #define IMAGE_FILE_MACHINE_UNKNOWN 0
2709 #define IMAGE_FILE_MACHINE_I860 0x014d
2710 #define IMAGE_FILE_MACHINE_I386 0x014c
2711 #define IMAGE_FILE_MACHINE_R3000 0x0162
2712 #define IMAGE_FILE_MACHINE_R4000 0x0166
2713 #define IMAGE_FILE_MACHINE_R10000 0x0168
2714 #define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
2715 #define IMAGE_FILE_MACHINE_ALPHA 0x0184
2716 #define IMAGE_FILE_MACHINE_SH3 0x01a2
2717 #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
2718 #define IMAGE_FILE_MACHINE_SH3E 0x01a4
2719 #define IMAGE_FILE_MACHINE_SH4 0x01a6
2720 #define IMAGE_FILE_MACHINE_SH5 0x01a8
2721 #define IMAGE_FILE_MACHINE_ARM 0x01c0
2722 #define IMAGE_FILE_MACHINE_THUMB 0x01c2
2723 #define IMAGE_FILE_MACHINE_ARMNT 0x01c4
2724 #define IMAGE_FILE_MACHINE_ARM64 0xaa64
2725 #define IMAGE_FILE_MACHINE_AM33 0x01d3
2726 #define IMAGE_FILE_MACHINE_POWERPC 0x01f0
2727 #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
2728 #define IMAGE_FILE_MACHINE_IA64 0x0200
2729 #define IMAGE_FILE_MACHINE_MIPS16 0x0266
2730 #define IMAGE_FILE_MACHINE_ALPHA64 0x0284
2731 #define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
2732 #define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
2733 #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
2734 #define IMAGE_FILE_MACHINE_TRICORE 0x0520
2735 #define IMAGE_FILE_MACHINE_CEF 0x0cef
2736 #define IMAGE_FILE_MACHINE_EBC 0x0ebc
2737 #define IMAGE_FILE_MACHINE_AMD64 0x8664
2738 #define IMAGE_FILE_MACHINE_M32R 0x9041
2739 #define IMAGE_FILE_MACHINE_CEE 0xc0ee
2741 #define IMAGE_SIZEOF_FILE_HEADER 20
2742 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
2743 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
2744 #define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
2745 #define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
2746 #define IMAGE_SIZEOF_SHORT_NAME 8
2747 #define IMAGE_SIZEOF_SECTION_HEADER 40
2748 #define IMAGE_SIZEOF_SYMBOL 18
2749 #define IMAGE_SIZEOF_AUX_SYMBOL 18
2750 #define IMAGE_SIZEOF_RELOCATION 10
2751 #define IMAGE_SIZEOF_BASE_RELOCATION 8
2752 #define IMAGE_SIZEOF_LINENUMBER 6
2753 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
2755 /* Possible Magic values */
2756 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
2757 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
2758 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
2761 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
2762 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
2764 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
2765 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
2768 /* These are indexes into the DataDirectory array */
2769 #define IMAGE_FILE_EXPORT_DIRECTORY 0
2770 #define IMAGE_FILE_IMPORT_DIRECTORY 1
2771 #define IMAGE_FILE_RESOURCE_DIRECTORY 2
2772 #define IMAGE_FILE_EXCEPTION_DIRECTORY 3
2773 #define IMAGE_FILE_SECURITY_DIRECTORY 4
2774 #define IMAGE_FILE_BASE_RELOCATION_TABLE 5
2775 #define IMAGE_FILE_DEBUG_DIRECTORY 6
2776 #define IMAGE_FILE_DESCRIPTION_STRING 7
2777 #define IMAGE_FILE_MACHINE_VALUE 8 /* Mips */
2778 #define IMAGE_FILE_THREAD_LOCAL_STORAGE 9
2779 #define IMAGE_FILE_CALLBACK_DIRECTORY 10
2781 /* Directory Entries, indices into the DataDirectory array */
2783 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0
2784 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
2785 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
2786 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
2787 #define IMAGE_DIRECTORY_ENTRY_SECURITY 4
2788 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
2789 #define IMAGE_DIRECTORY_ENTRY_DEBUG 6
2790 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
2791 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 /* (MIPS GP) */
2792 #define IMAGE_DIRECTORY_ENTRY_TLS 9
2793 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
2794 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
2795 #define IMAGE_DIRECTORY_ENTRY_IAT 12 /* Import Address Table */
2796 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
2797 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
2799 /* Subsystem Values */
2801 #define IMAGE_SUBSYSTEM_UNKNOWN 0
2802 #define IMAGE_SUBSYSTEM_NATIVE 1
2803 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 /* Windows GUI subsystem */
2804 #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 /* Windows character subsystem */
2805 #define IMAGE_SUBSYSTEM_OS2_CUI 5
2806 #define IMAGE_SUBSYSTEM_POSIX_CUI 7
2807 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 /* native Win9x driver */
2808 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* Windows CE subsystem */
2809 #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
2810 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
2811 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
2812 #define IMAGE_SUBSYSTEM_EFI_ROM 13
2813 #define IMAGE_SUBSYSTEM_XBOX 14
2814 #define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
2816 /* DLL Characteristics */
2817 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040
2818 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080
2819 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100
2820 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
2821 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
2822 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
2823 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
2824 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
2826 typedef struct _IMAGE_FILE_HEADER
{
2828 WORD NumberOfSections
;
2829 DWORD TimeDateStamp
;
2830 DWORD PointerToSymbolTable
;
2831 DWORD NumberOfSymbols
;
2832 WORD SizeOfOptionalHeader
;
2833 WORD Characteristics
;
2834 } IMAGE_FILE_HEADER
, *PIMAGE_FILE_HEADER
;
2836 typedef struct _IMAGE_DATA_DIRECTORY
{
2837 DWORD VirtualAddress
;
2839 } IMAGE_DATA_DIRECTORY
, *PIMAGE_DATA_DIRECTORY
;
2841 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
2843 typedef struct _IMAGE_OPTIONAL_HEADER64
{
2844 WORD Magic
; /* 0x20b */
2845 BYTE MajorLinkerVersion
;
2846 BYTE MinorLinkerVersion
;
2848 DWORD SizeOfInitializedData
;
2849 DWORD SizeOfUninitializedData
;
2850 DWORD AddressOfEntryPoint
;
2852 ULONGLONG ImageBase
;
2853 DWORD SectionAlignment
;
2854 DWORD FileAlignment
;
2855 WORD MajorOperatingSystemVersion
;
2856 WORD MinorOperatingSystemVersion
;
2857 WORD MajorImageVersion
;
2858 WORD MinorImageVersion
;
2859 WORD MajorSubsystemVersion
;
2860 WORD MinorSubsystemVersion
;
2861 DWORD Win32VersionValue
;
2863 DWORD SizeOfHeaders
;
2866 WORD DllCharacteristics
;
2867 ULONGLONG SizeOfStackReserve
;
2868 ULONGLONG SizeOfStackCommit
;
2869 ULONGLONG SizeOfHeapReserve
;
2870 ULONGLONG SizeOfHeapCommit
;
2872 DWORD NumberOfRvaAndSizes
;
2873 IMAGE_DATA_DIRECTORY DataDirectory
[IMAGE_NUMBEROF_DIRECTORY_ENTRIES
];
2874 } IMAGE_OPTIONAL_HEADER64
, *PIMAGE_OPTIONAL_HEADER64
;
2876 typedef struct _IMAGE_NT_HEADERS64
{
2878 IMAGE_FILE_HEADER FileHeader
;
2879 IMAGE_OPTIONAL_HEADER64 OptionalHeader
;
2880 } IMAGE_NT_HEADERS64
, *PIMAGE_NT_HEADERS64
;
2882 typedef struct _IMAGE_OPTIONAL_HEADER
{
2884 /* Standard fields */
2886 WORD Magic
; /* 0x10b or 0x107 */ /* 0x00 */
2887 BYTE MajorLinkerVersion
;
2888 BYTE MinorLinkerVersion
;
2890 DWORD SizeOfInitializedData
;
2891 DWORD SizeOfUninitializedData
;
2892 DWORD AddressOfEntryPoint
; /* 0x10 */
2896 /* NT additional fields */
2899 DWORD SectionAlignment
; /* 0x20 */
2900 DWORD FileAlignment
;
2901 WORD MajorOperatingSystemVersion
;
2902 WORD MinorOperatingSystemVersion
;
2903 WORD MajorImageVersion
;
2904 WORD MinorImageVersion
;
2905 WORD MajorSubsystemVersion
; /* 0x30 */
2906 WORD MinorSubsystemVersion
;
2907 DWORD Win32VersionValue
;
2909 DWORD SizeOfHeaders
;
2910 DWORD CheckSum
; /* 0x40 */
2912 WORD DllCharacteristics
;
2913 DWORD SizeOfStackReserve
;
2914 DWORD SizeOfStackCommit
;
2915 DWORD SizeOfHeapReserve
; /* 0x50 */
2916 DWORD SizeOfHeapCommit
;
2918 DWORD NumberOfRvaAndSizes
;
2919 IMAGE_DATA_DIRECTORY DataDirectory
[IMAGE_NUMBEROF_DIRECTORY_ENTRIES
]; /* 0x60 */
2921 } IMAGE_OPTIONAL_HEADER32
, *PIMAGE_OPTIONAL_HEADER32
;
2923 typedef struct _IMAGE_NT_HEADERS
{
2924 DWORD Signature
; /* "PE"\0\0 */ /* 0x00 */
2925 IMAGE_FILE_HEADER FileHeader
; /* 0x04 */
2926 IMAGE_OPTIONAL_HEADER32 OptionalHeader
; /* 0x18 */
2927 } IMAGE_NT_HEADERS32
, *PIMAGE_NT_HEADERS32
;
2930 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS
;
2931 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
2932 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER
;
2933 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER
;
2935 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS
;
2936 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
2937 typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER
;
2938 typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER
;
2941 #define IMAGE_SIZEOF_SHORT_NAME 8
2943 typedef struct _IMAGE_SECTION_HEADER
{
2944 BYTE Name
[IMAGE_SIZEOF_SHORT_NAME
];
2946 DWORD PhysicalAddress
;
2949 DWORD VirtualAddress
;
2950 DWORD SizeOfRawData
;
2951 DWORD PointerToRawData
;
2952 DWORD PointerToRelocations
;
2953 DWORD PointerToLinenumbers
;
2954 WORD NumberOfRelocations
;
2955 WORD NumberOfLinenumbers
;
2956 DWORD Characteristics
;
2957 } IMAGE_SECTION_HEADER
, *PIMAGE_SECTION_HEADER
;
2959 #define IMAGE_SIZEOF_SECTION_HEADER 40
2961 #define IMAGE_FIRST_SECTION(ntheader) \
2962 ((PIMAGE_SECTION_HEADER)(ULONG_PTR)((const BYTE *)&((const IMAGE_NT_HEADERS *)(ntheader))->OptionalHeader + \
2963 ((const IMAGE_NT_HEADERS *)(ntheader))->FileHeader.SizeOfOptionalHeader))
2965 /* These defines are for the Characteristics bitfield. */
2966 /* #define IMAGE_SCN_TYPE_REG 0x00000000 - Reserved */
2967 /* #define IMAGE_SCN_TYPE_DSECT 0x00000001 - Reserved */
2968 /* #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 - Reserved */
2969 /* #define IMAGE_SCN_TYPE_GROUP 0x00000004 - Reserved */
2970 #define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved */
2971 /* #define IMAGE_SCN_TYPE_COPY 0x00000010 - Reserved */
2973 #define IMAGE_SCN_CNT_CODE 0x00000020
2974 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
2975 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
2977 #define IMAGE_SCN_LNK_OTHER 0x00000100
2978 #define IMAGE_SCN_LNK_INFO 0x00000200
2979 /* #define IMAGE_SCN_TYPE_OVER 0x00000400 - Reserved */
2980 #define IMAGE_SCN_LNK_REMOVE 0x00000800
2981 #define IMAGE_SCN_LNK_COMDAT 0x00001000
2983 /* 0x00002000 - Reserved */
2984 /* #define IMAGE_SCN_MEM_PROTECTED 0x00004000 - Obsolete */
2985 #define IMAGE_SCN_MEM_FARDATA 0x00008000
2987 /* #define IMAGE_SCN_MEM_SYSHEAP 0x00010000 - Obsolete */
2988 #define IMAGE_SCN_MEM_PURGEABLE 0x00020000
2989 #define IMAGE_SCN_MEM_16BIT 0x00020000
2990 #define IMAGE_SCN_MEM_LOCKED 0x00040000
2991 #define IMAGE_SCN_MEM_PRELOAD 0x00080000
2993 #define IMAGE_SCN_ALIGN_1BYTES 0x00100000
2994 #define IMAGE_SCN_ALIGN_2BYTES 0x00200000
2995 #define IMAGE_SCN_ALIGN_4BYTES 0x00300000
2996 #define IMAGE_SCN_ALIGN_8BYTES 0x00400000
2997 #define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default */
2998 #define IMAGE_SCN_ALIGN_32BYTES 0x00600000
2999 #define IMAGE_SCN_ALIGN_64BYTES 0x00700000
3000 #define IMAGE_SCN_ALIGN_128BYTES 0x00800000
3001 #define IMAGE_SCN_ALIGN_256BYTES 0x00900000
3002 #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000
3003 #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000
3004 #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000
3005 #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000
3006 #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000
3007 /* 0x00F00000 - Unused */
3008 #define IMAGE_SCN_ALIGN_MASK 0x00F00000
3010 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
3013 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
3014 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
3015 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
3016 #define IMAGE_SCN_MEM_SHARED 0x10000000
3017 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
3018 #define IMAGE_SCN_MEM_READ 0x40000000
3019 #define IMAGE_SCN_MEM_WRITE 0x80000000
3021 #include <pshpack2.h>
3023 typedef struct _IMAGE_SYMBOL
{
3033 SHORT SectionNumber
;
3036 BYTE NumberOfAuxSymbols
;
3038 typedef IMAGE_SYMBOL
*PIMAGE_SYMBOL
;
3040 #define IMAGE_SIZEOF_SYMBOL 18
3042 typedef struct _IMAGE_LINENUMBER
{
3044 DWORD SymbolTableIndex
;
3045 DWORD VirtualAddress
;
3049 typedef IMAGE_LINENUMBER
*PIMAGE_LINENUMBER
;
3051 #define IMAGE_SIZEOF_LINENUMBER 6
3053 typedef union _IMAGE_AUX_SYMBOL
{
3065 DWORD PointerToLinenumber
;
3066 DWORD PointerToNextFunction
;
3075 BYTE Name
[IMAGE_SIZEOF_SYMBOL
];
3079 WORD NumberOfRelocations
;
3080 WORD NumberOfLinenumbers
;
3086 typedef IMAGE_AUX_SYMBOL
*PIMAGE_AUX_SYMBOL
;
3088 #define IMAGE_SIZEOF_AUX_SYMBOL 18
3090 #include <poppack.h>
3092 #define IMAGE_SYM_UNDEFINED (SHORT)0
3093 #define IMAGE_SYM_ABSOLUTE (SHORT)-1
3094 #define IMAGE_SYM_DEBUG (SHORT)-2
3096 #define IMAGE_SYM_TYPE_NULL 0x0000
3097 #define IMAGE_SYM_TYPE_VOID 0x0001
3098 #define IMAGE_SYM_TYPE_CHAR 0x0002
3099 #define IMAGE_SYM_TYPE_SHORT 0x0003
3100 #define IMAGE_SYM_TYPE_INT 0x0004
3101 #define IMAGE_SYM_TYPE_LONG 0x0005
3102 #define IMAGE_SYM_TYPE_FLOAT 0x0006
3103 #define IMAGE_SYM_TYPE_DOUBLE 0x0007
3104 #define IMAGE_SYM_TYPE_STRUCT 0x0008
3105 #define IMAGE_SYM_TYPE_UNION 0x0009
3106 #define IMAGE_SYM_TYPE_ENUM 0x000A
3107 #define IMAGE_SYM_TYPE_MOE 0x000B
3108 #define IMAGE_SYM_TYPE_BYTE 0x000C
3109 #define IMAGE_SYM_TYPE_WORD 0x000D
3110 #define IMAGE_SYM_TYPE_UINT 0x000E
3111 #define IMAGE_SYM_TYPE_DWORD 0x000F
3112 #define IMAGE_SYM_TYPE_PCODE 0x8000
3114 #define IMAGE_SYM_DTYPE_NULL 0
3115 #define IMAGE_SYM_DTYPE_POINTER 1
3116 #define IMAGE_SYM_DTYPE_FUNCTION 2
3117 #define IMAGE_SYM_DTYPE_ARRAY 3
3119 #define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE )-1
3120 #define IMAGE_SYM_CLASS_NULL 0x0000
3121 #define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
3122 #define IMAGE_SYM_CLASS_EXTERNAL 0x0002
3123 #define IMAGE_SYM_CLASS_STATIC 0x0003
3124 #define IMAGE_SYM_CLASS_REGISTER 0x0004
3125 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
3126 #define IMAGE_SYM_CLASS_LABEL 0x0006
3127 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
3128 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
3129 #define IMAGE_SYM_CLASS_ARGUMENT 0x0009
3130 #define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
3131 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
3132 #define IMAGE_SYM_CLASS_UNION_TAG 0x000C
3133 #define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
3134 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
3135 #define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
3136 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
3137 #define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
3138 #define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
3140 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044
3141 #define IMAGE_SYM_CLASS_BLOCK 0x0064
3142 #define IMAGE_SYM_CLASS_FUNCTION 0x0065
3143 #define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
3144 #define IMAGE_SYM_CLASS_FILE 0x0067
3145 #define IMAGE_SYM_CLASS_SECTION 0x0068
3146 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
3148 #define N_BTMASK 0x000F
3149 #define N_TMASK 0x0030
3150 #define N_TMASK1 0x00C0
3151 #define N_TMASK2 0x00F0
3155 #define BTYPE(x) ((x) & N_BTMASK)
3158 #define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
3162 #define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
3166 #define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
3170 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
3174 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
3177 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
3180 #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
3181 #define IMAGE_COMDAT_SELECT_ANY 2
3182 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
3183 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
3184 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
3185 #define IMAGE_COMDAT_SELECT_LARGEST 6
3186 #define IMAGE_COMDAT_SELECT_NEWEST 7
3188 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
3189 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
3190 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
3192 /* Export module directory */
3194 typedef struct _IMAGE_EXPORT_DIRECTORY
{
3195 DWORD Characteristics
;
3196 DWORD TimeDateStamp
;
3201 DWORD NumberOfFunctions
;
3202 DWORD NumberOfNames
;
3203 DWORD AddressOfFunctions
;
3204 DWORD AddressOfNames
;
3205 DWORD AddressOfNameOrdinals
;
3206 } IMAGE_EXPORT_DIRECTORY
,*PIMAGE_EXPORT_DIRECTORY
;
3208 /* Import name entry */
3209 typedef struct _IMAGE_IMPORT_BY_NAME
{
3212 } IMAGE_IMPORT_BY_NAME
,*PIMAGE_IMPORT_BY_NAME
;
3214 #include <pshpack8.h>
3216 typedef struct _IMAGE_THUNK_DATA64
{
3218 ULONGLONG ForwarderString
;
3221 ULONGLONG AddressOfData
;
3223 } IMAGE_THUNK_DATA64
,*PIMAGE_THUNK_DATA64
;
3224 #include <poppack.h>
3226 typedef struct _IMAGE_THUNK_DATA32
{
3228 DWORD ForwarderString
;
3231 DWORD AddressOfData
;
3233 } IMAGE_THUNK_DATA32
,*PIMAGE_THUNK_DATA32
;
3235 /* Import module directory */
3237 typedef struct _IMAGE_IMPORT_DESCRIPTOR
{
3239 DWORD Characteristics
; /* 0 for terminating null import descriptor */
3240 DWORD OriginalFirstThunk
; /* RVA to original unbound IAT */
3242 DWORD TimeDateStamp
; /* 0 if not bound,
3243 * -1 if bound, and real date\time stamp
3244 * in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
3246 * otherwise date/time stamp of DLL bound to
3249 DWORD ForwarderChain
; /* -1 if no forwarders */
3251 /* RVA to IAT (if bound this IAT has actual addresses) */
3253 } IMAGE_IMPORT_DESCRIPTOR
,*PIMAGE_IMPORT_DESCRIPTOR
;
3255 #define IMAGE_ORDINAL_FLAG64 (((ULONGLONG)0x80000000 << 32) | 0x00000000)
3256 #define IMAGE_ORDINAL_FLAG32 0x80000000
3257 #define IMAGE_SNAP_BY_ORDINAL64(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG64) != 0)
3258 #define IMAGE_SNAP_BY_ORDINAL32(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG32) != 0)
3259 #define IMAGE_ORDINAL64(ordinal) ((ordinal) & 0xffff)
3260 #define IMAGE_ORDINAL32(ordinal) ((ordinal) & 0xffff)
3263 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
3264 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
3265 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
3266 typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA
;
3267 typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA
;
3269 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
3270 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
3271 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
3272 typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA
;
3273 typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA
;
3276 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR
3278 DWORD TimeDateStamp
;
3279 WORD OffsetModuleName
;
3280 WORD NumberOfModuleForwarderRefs
;
3281 /* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */
3282 } IMAGE_BOUND_IMPORT_DESCRIPTOR
, *PIMAGE_BOUND_IMPORT_DESCRIPTOR
;
3284 typedef struct _IMAGE_BOUND_FORWARDER_REF
3286 DWORD TimeDateStamp
;
3287 WORD OffsetModuleName
;
3289 } IMAGE_BOUND_FORWARDER_REF
, *PIMAGE_BOUND_FORWARDER_REF
;
3291 typedef struct _IMAGE_BASE_RELOCATION
3293 DWORD VirtualAddress
;
3295 /* WORD TypeOffset[1]; */
3296 } IMAGE_BASE_RELOCATION
,*PIMAGE_BASE_RELOCATION
;
3298 #include <pshpack2.h>
3300 typedef struct _IMAGE_RELOCATION
3303 DWORD VirtualAddress
;
3306 DWORD SymbolTableIndex
;
3308 } IMAGE_RELOCATION
, *PIMAGE_RELOCATION
;
3310 #include <poppack.h>
3312 #define IMAGE_SIZEOF_RELOCATION 10
3314 typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR
3318 DWORD AllAttributes
;
3322 DWORD ReservedAttributes
:31;
3327 DWORD ModuleHandleRVA
;
3328 DWORD ImportAddressTableRVA
;
3329 DWORD ImportNameTableRVA
;
3330 DWORD BoundImportAddressTableRVA
;
3331 DWORD UnloadInformationTableRVA
;
3332 DWORD TimeDateStamp
;
3333 } IMAGE_DELAYLOAD_DESCRIPTOR
, *PIMAGE_DELAYLOAD_DESCRIPTOR
;
3334 typedef const IMAGE_DELAYLOAD_DESCRIPTOR
*PCIMAGE_DELAYLOAD_DESCRIPTOR
;
3336 /* generic relocation types */
3337 #define IMAGE_REL_BASED_ABSOLUTE 0
3338 #define IMAGE_REL_BASED_HIGH 1
3339 #define IMAGE_REL_BASED_LOW 2
3340 #define IMAGE_REL_BASED_HIGHLOW 3
3341 #define IMAGE_REL_BASED_HIGHADJ 4
3342 #define IMAGE_REL_BASED_MIPS_JMPADDR 5
3343 #define IMAGE_REL_BASED_ARM_MOV32A 5 /* yes, 5 too */
3344 #define IMAGE_REL_BASED_ARM_MOV32 5 /* yes, 5 too */
3345 #define IMAGE_REL_BASED_SECTION 6
3346 #define IMAGE_REL_BASED_REL 7
3347 #define IMAGE_REL_BASED_ARM_MOV32T 7 /* yes, 7 too */
3348 #define IMAGE_REL_BASED_THUMB_MOV32 7 /* yes, 7 too */
3349 #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
3350 #define IMAGE_REL_BASED_IA64_IMM64 9 /* yes, 9 too */
3351 #define IMAGE_REL_BASED_DIR64 10
3352 #define IMAGE_REL_BASED_HIGH3ADJ 11
3354 /* I386 relocation types */
3355 #define IMAGE_REL_I386_ABSOLUTE 0
3356 #define IMAGE_REL_I386_DIR16 1
3357 #define IMAGE_REL_I386_REL16 2
3358 #define IMAGE_REL_I386_DIR32 6
3359 #define IMAGE_REL_I386_DIR32NB 7
3360 #define IMAGE_REL_I386_SEG12 9
3361 #define IMAGE_REL_I386_SECTION 10
3362 #define IMAGE_REL_I386_SECREL 11
3363 #define IMAGE_REL_I386_TOKEN 12
3364 #define IMAGE_REL_I386_SECREL7 13
3365 #define IMAGE_REL_I386_REL32 20
3367 /* MIPS relocation types */
3368 #define IMAGE_REL_MIPS_ABSOLUTE 0x0000
3369 #define IMAGE_REL_MIPS_REFHALF 0x0001
3370 #define IMAGE_REL_MIPS_REFWORD 0x0002
3371 #define IMAGE_REL_MIPS_JMPADDR 0x0003
3372 #define IMAGE_REL_MIPS_REFHI 0x0004
3373 #define IMAGE_REL_MIPS_REFLO 0x0005
3374 #define IMAGE_REL_MIPS_GPREL 0x0006
3375 #define IMAGE_REL_MIPS_LITERAL 0x0007
3376 #define IMAGE_REL_MIPS_SECTION 0x000A
3377 #define IMAGE_REL_MIPS_SECREL 0x000B
3378 #define IMAGE_REL_MIPS_SECRELLO 0x000C
3379 #define IMAGE_REL_MIPS_SECRELHI 0x000D
3380 #define IMAGE_REL_MIPS_TOKEN 0x000E
3381 #define IMAGE_REL_MIPS_JMPADDR16 0x0010
3382 #define IMAGE_REL_MIPS_REFWORDNB 0x0022
3383 #define IMAGE_REL_MIPS_PAIR 0x0025
3385 /* ALPHA relocation types */
3386 #define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
3387 #define IMAGE_REL_ALPHA_REFLONG 0x0001
3388 #define IMAGE_REL_ALPHA_REFQUAD 0x0002
3389 #define IMAGE_REL_ALPHA_GPREL 0x0003
3390 #define IMAGE_REL_ALPHA_LITERAL 0x0004
3391 #define IMAGE_REL_ALPHA_LITUSE 0x0005
3392 #define IMAGE_REL_ALPHA_GPDISP 0x0006
3393 #define IMAGE_REL_ALPHA_BRADDR 0x0007
3394 #define IMAGE_REL_ALPHA_HINT 0x0008
3395 #define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
3396 #define IMAGE_REL_ALPHA_REFHI 0x000A
3397 #define IMAGE_REL_ALPHA_REFLO 0x000B
3398 #define IMAGE_REL_ALPHA_PAIR 0x000C
3399 #define IMAGE_REL_ALPHA_MATCH 0x000D
3400 #define IMAGE_REL_ALPHA_SECTION 0x000E
3401 #define IMAGE_REL_ALPHA_SECREL 0x000F
3402 #define IMAGE_REL_ALPHA_REFLONGNB 0x0010
3403 #define IMAGE_REL_ALPHA_SECRELLO 0x0011
3404 #define IMAGE_REL_ALPHA_SECRELHI 0x0012
3405 #define IMAGE_REL_ALPHA_REFQ3 0x0013
3406 #define IMAGE_REL_ALPHA_REFQ2 0x0014
3407 #define IMAGE_REL_ALPHA_REFQ1 0x0015
3408 #define IMAGE_REL_ALPHA_GPRELLO 0x0016
3409 #define IMAGE_REL_ALPHA_GPRELHI 0x0017
3411 /* PowerPC relocation types */
3412 #define IMAGE_REL_PPC_ABSOLUTE 0x0000
3413 #define IMAGE_REL_PPC_ADDR64 0x0001
3414 #define IMAGE_REL_PPC_ADDR 0x0002
3415 #define IMAGE_REL_PPC_ADDR24 0x0003
3416 #define IMAGE_REL_PPC_ADDR16 0x0004
3417 #define IMAGE_REL_PPC_ADDR14 0x0005
3418 #define IMAGE_REL_PPC_REL24 0x0006
3419 #define IMAGE_REL_PPC_REL14 0x0007
3420 #define IMAGE_REL_PPC_TOCREL16 0x0008
3421 #define IMAGE_REL_PPC_TOCREL14 0x0009
3422 #define IMAGE_REL_PPC_ADDR32NB 0x000A
3423 #define IMAGE_REL_PPC_SECREL 0x000B
3424 #define IMAGE_REL_PPC_SECTION 0x000C
3425 #define IMAGE_REL_PPC_IFGLUE 0x000D
3426 #define IMAGE_REL_PPC_IMGLUE 0x000E
3427 #define IMAGE_REL_PPC_SECREL16 0x000F
3428 #define IMAGE_REL_PPC_REFHI 0x0010
3429 #define IMAGE_REL_PPC_REFLO 0x0011
3430 #define IMAGE_REL_PPC_PAIR 0x0012
3431 #define IMAGE_REL_PPC_SECRELLO 0x0013
3432 #define IMAGE_REL_PPC_SECRELHI 0x0014
3433 #define IMAGE_REL_PPC_GPREL 0x0015
3434 #define IMAGE_REL_PPC_TOKEN 0x0016
3435 #define IMAGE_REL_PPC_TYPEMASK 0x00FF
3437 #define IMAGE_REL_PPC_NEG 0x0100
3438 #define IMAGE_REL_PPC_BRTAKEN 0x0200
3439 #define IMAGE_REL_PPC_BRNTAKEN 0x0400
3440 #define IMAGE_REL_PPC_TOCDEFN 0x0800
3442 /* SH3 relocation types */
3443 #define IMAGE_REL_SH3_ABSOLUTE 0x0000
3444 #define IMAGE_REL_SH3_DIRECT16 0x0001
3445 #define IMAGE_REL_SH3_DIRECT 0x0002
3446 #define IMAGE_REL_SH3_DIRECT8 0x0003
3447 #define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
3448 #define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
3449 #define IMAGE_REL_SH3_DIRECT4 0x0006
3450 #define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
3451 #define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
3452 #define IMAGE_REL_SH3_PCREL8_WORD 0x0009
3453 #define IMAGE_REL_SH3_PCREL8_LONG 0x000A
3454 #define IMAGE_REL_SH3_PCREL12_WORD 0x000B
3455 #define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
3456 #define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
3457 #define IMAGE_REL_SH3_SECTION 0x000E
3458 #define IMAGE_REL_SH3_SECREL 0x000F
3459 #define IMAGE_REL_SH3_DIRECT32_NB 0x0010
3460 #define IMAGE_REL_SH3_GPREL4_LONG 0x0011
3461 #define IMAGE_REL_SH3_TOKEN 0x0012
3463 /* ARM relocation types */
3464 #define IMAGE_REL_ARM_ABSOLUTE 0x0000
3465 #define IMAGE_REL_ARM_ADDR 0x0001
3466 #define IMAGE_REL_ARM_ADDR32NB 0x0002
3467 #define IMAGE_REL_ARM_BRANCH24 0x0003
3468 #define IMAGE_REL_ARM_BRANCH11 0x0004
3469 #define IMAGE_REL_ARM_TOKEN 0x0005
3470 #define IMAGE_REL_ARM_GPREL12 0x0006
3471 #define IMAGE_REL_ARM_GPREL7 0x0007
3472 #define IMAGE_REL_ARM_BLX24 0x0008
3473 #define IMAGE_REL_ARM_BLX11 0x0009
3474 #define IMAGE_REL_ARM_SECTION 0x000E
3475 #define IMAGE_REL_ARM_SECREL 0x000F
3476 #define IMAGE_REL_ARM_MOV32A 0x0010
3477 #define IMAGE_REL_ARM_MOV32T 0x0011
3478 #define IMAGE_REL_ARM_BRANCH20T 0x0012
3479 #define IMAGE_REL_ARM_BRANCH24T 0x0014
3480 #define IMAGE_REL_ARM_BLX23T 0x0015
3482 /* ARM64 relocation types */
3483 #define IMAGE_REL_ARM64_ABSOLUTE 0x0000
3484 #define IMAGE_REL_ARM64_ADDR32 0x0001
3485 #define IMAGE_REL_ARM64_ADDR32NB 0x0002
3486 #define IMAGE_REL_ARM64_BRANCH26 0x0003
3487 #define IMAGE_REL_ARM64_PAGEBASE_REL21 0x0004
3488 #define IMAGE_REL_ARM64_REL21 0x0005
3489 #define IMAGE_REL_ARM64_PAGEOFFSET_12A 0x0006
3490 #define IMAGE_REL_ARM64_PAGEOFFSET_12L 0x0007
3491 #define IMAGE_REL_ARM64_SECREL 0x0008
3492 #define IMAGE_REL_ARM64_SECREL_LOW12A 0x0009
3493 #define IMAGE_REL_ARM64_SECREL_HIGH12A 0x000A
3494 #define IMAGE_REL_ARM64_SECREL_LOW12L 0x000B
3495 #define IMAGE_REL_ARM64_TOKEN 0x000C
3496 #define IMAGE_REL_ARM64_SECTION 0x000D
3497 #define IMAGE_REL_ARM64_ADDR64 0x000E
3498 #define IMAGE_REL_ARM64_BRANCH19 0x000F
3500 /* IA64 relocation types */
3501 #define IMAGE_REL_IA64_ABSOLUTE 0x0000
3502 #define IMAGE_REL_IA64_IMM14 0x0001
3503 #define IMAGE_REL_IA64_IMM22 0x0002
3504 #define IMAGE_REL_IA64_IMM64 0x0003
3505 #define IMAGE_REL_IA64_DIR 0x0004
3506 #define IMAGE_REL_IA64_DIR64 0x0005
3507 #define IMAGE_REL_IA64_PCREL21B 0x0006
3508 #define IMAGE_REL_IA64_PCREL21M 0x0007
3509 #define IMAGE_REL_IA64_PCREL21F 0x0008
3510 #define IMAGE_REL_IA64_GPREL22 0x0009
3511 #define IMAGE_REL_IA64_LTOFF22 0x000A
3512 #define IMAGE_REL_IA64_SECTION 0x000B
3513 #define IMAGE_REL_IA64_SECREL22 0x000C
3514 #define IMAGE_REL_IA64_SECREL64I 0x000D
3515 #define IMAGE_REL_IA64_SECREL 0x000E
3516 #define IMAGE_REL_IA64_LTOFF64 0x000F
3517 #define IMAGE_REL_IA64_DIR32NB 0x0010
3518 #define IMAGE_REL_IA64_SREL14 0x0011
3519 #define IMAGE_REL_IA64_SREL22 0x0012
3520 #define IMAGE_REL_IA64_SREL32 0x0013
3521 #define IMAGE_REL_IA64_UREL32 0x0014
3522 #define IMAGE_REL_IA64_PCREL60X 0x0015
3523 #define IMAGE_REL_IA64_PCREL60B 0x0016
3524 #define IMAGE_REL_IA64_PCREL60F 0x0017
3525 #define IMAGE_REL_IA64_PCREL60I 0x0018
3526 #define IMAGE_REL_IA64_PCREL60M 0x0019
3527 #define IMAGE_REL_IA64_IMMGPREL64 0x001A
3528 #define IMAGE_REL_IA64_TOKEN 0x001B
3529 #define IMAGE_REL_IA64_GPREL32 0x001C
3530 #define IMAGE_REL_IA64_ADDEND 0x001F
3532 /* AMD64 relocation types */
3533 #define IMAGE_REL_AMD64_ABSOLUTE 0x0000
3534 #define IMAGE_REL_AMD64_ADDR64 0x0001
3535 #define IMAGE_REL_AMD64_ADDR32 0x0002
3536 #define IMAGE_REL_AMD64_ADDR32NB 0x0003
3537 #define IMAGE_REL_AMD64_REL32 0x0004
3538 #define IMAGE_REL_AMD64_REL32_1 0x0005
3539 #define IMAGE_REL_AMD64_REL32_2 0x0006
3540 #define IMAGE_REL_AMD64_REL32_3 0x0007
3541 #define IMAGE_REL_AMD64_REL32_4 0x0008
3542 #define IMAGE_REL_AMD64_REL32_5 0x0009
3543 #define IMAGE_REL_AMD64_SECTION 0x000A
3544 #define IMAGE_REL_AMD64_SECREL 0x000B
3545 #define IMAGE_REL_AMD64_SECREL7 0x000C
3546 #define IMAGE_REL_AMD64_TOKEN 0x000D
3547 #define IMAGE_REL_AMD64_SREL32 0x000E
3548 #define IMAGE_REL_AMD64_PAIR 0x000F
3549 #define IMAGE_REL_AMD64_SSPAN32 0x0010
3551 /* archive format */
3553 #define IMAGE_ARCHIVE_START_SIZE 8
3554 #define IMAGE_ARCHIVE_START "!<arch>\n"
3555 #define IMAGE_ARCHIVE_END "`\n"
3556 #define IMAGE_ARCHIVE_PAD "\n"
3557 #define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
3558 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
3560 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
3569 } IMAGE_ARCHIVE_MEMBER_HEADER
, *PIMAGE_ARCHIVE_MEMBER_HEADER
;
3571 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
3573 typedef struct _IMPORT_OBJECT_HEADER
3579 DWORD TimeDateStamp
;
3589 } IMPORT_OBJECT_HEADER
;
3591 #define IMPORT_OBJECT_HDR_SIG2 0xffff
3593 typedef enum IMPORT_OBJECT_TYPE
3595 IMPORT_OBJECT_CODE
= 0,
3596 IMPORT_OBJECT_DATA
= 1,
3597 IMPORT_OBJECT_CONST
= 2
3598 } IMPORT_OBJECT_TYPE
;
3600 typedef enum IMPORT_OBJECT_NAME_TYPE
3602 IMPORT_OBJECT_ORDINAL
= 0,
3603 IMPORT_OBJECT_NAME
= 1,
3604 IMPORT_OBJECT_NAME_NO_PREFIX
= 2,
3605 IMPORT_OBJECT_NAME_UNDECORATE
= 3
3606 } IMPORT_OBJECT_NAME_TYPE
;
3608 typedef struct _ANON_OBJECT_HEADER
3614 DWORD TimeDateStamp
;
3617 } ANON_OBJECT_HEADER
;
3620 * Resource directory stuff
3622 typedef struct _IMAGE_RESOURCE_DIRECTORY
{
3623 DWORD Characteristics
;
3624 DWORD TimeDateStamp
;
3627 WORD NumberOfNamedEntries
;
3628 WORD NumberOfIdEntries
;
3629 /* IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */
3630 } IMAGE_RESOURCE_DIRECTORY
,*PIMAGE_RESOURCE_DIRECTORY
;
3632 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
3633 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
3635 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY
{
3638 #ifdef BITFIELDS_BIGENDIAN
3639 unsigned NameIsString
:1;
3640 unsigned NameOffset
:31;
3642 unsigned NameOffset
:31;
3643 unsigned NameIsString
:1;
3647 #ifdef WORDS_BIGENDIAN
3658 #ifdef BITFIELDS_BIGENDIAN
3659 unsigned DataIsDirectory
:1;
3660 unsigned OffsetToDirectory
:31;
3662 unsigned OffsetToDirectory
:31;
3663 unsigned DataIsDirectory
:1;
3667 } IMAGE_RESOURCE_DIRECTORY_ENTRY
,*PIMAGE_RESOURCE_DIRECTORY_ENTRY
;
3670 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING
{
3672 CHAR NameString
[ 1 ];
3673 } IMAGE_RESOURCE_DIRECTORY_STRING
,*PIMAGE_RESOURCE_DIRECTORY_STRING
;
3675 typedef struct _IMAGE_RESOURCE_DIR_STRING_U
{
3677 WCHAR NameString
[ 1 ];
3678 } IMAGE_RESOURCE_DIR_STRING_U
,*PIMAGE_RESOURCE_DIR_STRING_U
;
3680 typedef struct _IMAGE_RESOURCE_DATA_ENTRY
{
3685 } IMAGE_RESOURCE_DATA_ENTRY
,*PIMAGE_RESOURCE_DATA_ENTRY
;
3688 typedef VOID (CALLBACK
*PIMAGE_TLS_CALLBACK
)(
3689 LPVOID DllHandle
,DWORD Reason
,LPVOID Reserved
3692 typedef struct _IMAGE_TLS_DIRECTORY64
{
3693 ULONGLONG StartAddressOfRawData
;
3694 ULONGLONG EndAddressOfRawData
;
3695 ULONGLONG AddressOfIndex
;
3696 ULONGLONG AddressOfCallBacks
;
3697 DWORD SizeOfZeroFill
;
3698 DWORD Characteristics
;
3699 } IMAGE_TLS_DIRECTORY64
, *PIMAGE_TLS_DIRECTORY64
;
3701 typedef struct _IMAGE_TLS_DIRECTORY32
{
3702 DWORD StartAddressOfRawData
;
3703 DWORD EndAddressOfRawData
;
3704 DWORD AddressOfIndex
;
3705 DWORD AddressOfCallBacks
;
3706 DWORD SizeOfZeroFill
;
3707 DWORD Characteristics
;
3708 } IMAGE_TLS_DIRECTORY32
, *PIMAGE_TLS_DIRECTORY32
;
3711 typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY
;
3712 typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY
;
3714 typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY
;
3715 typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY
;
3718 typedef struct _IMAGE_DEBUG_DIRECTORY
{
3719 DWORD Characteristics
;
3720 DWORD TimeDateStamp
;
3725 DWORD AddressOfRawData
;
3726 DWORD PointerToRawData
;
3727 } IMAGE_DEBUG_DIRECTORY
, *PIMAGE_DEBUG_DIRECTORY
;
3729 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
3730 #define IMAGE_DEBUG_TYPE_COFF 1
3731 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
3732 #define IMAGE_DEBUG_TYPE_FPO 3
3733 #define IMAGE_DEBUG_TYPE_MISC 4
3734 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
3735 #define IMAGE_DEBUG_TYPE_FIXUP 6
3736 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
3737 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
3738 #define IMAGE_DEBUG_TYPE_BORLAND 9
3739 #define IMAGE_DEBUG_TYPE_RESERVED10 10
3740 #define IMAGE_DEBUG_TYPE_CLSID 11
3741 #define IMAGE_DEBUG_TYPE_VC_FEATURE 12
3742 #define IMAGE_DEBUG_TYPE_POGO 13
3743 #define IMAGE_DEBUG_TYPE_ILTCG 14
3744 #define IMAGE_DEBUG_TYPE_MPX 15
3745 #define IMAGE_DEBUG_TYPE_REPRO 16
3747 typedef enum ReplacesCorHdrNumericDefines
3749 COMIMAGE_FLAGS_ILONLY
= 0x00000001,
3750 COMIMAGE_FLAGS_32BITREQUIRED
= 0x00000002,
3751 COMIMAGE_FLAGS_IL_LIBRARY
= 0x00000004,
3752 COMIMAGE_FLAGS_STRONGNAMESIGNED
= 0x00000008,
3753 COMIMAGE_FLAGS_NATIVE_ENTRYPOINT
= 0x00000010,
3754 COMIMAGE_FLAGS_TRACKDEBUGDATA
= 0x00010000,
3755 COMIMAGE_FLAGS_32BITPREFERRED
= 0x00020000,
3757 COR_VERSION_MAJOR_V2
= 2,
3758 COR_VERSION_MAJOR
= COR_VERSION_MAJOR_V2
,
3759 COR_VERSION_MINOR
= 5,
3760 COR_DELETED_NAME_LENGTH
= 8,
3761 COR_VTABLEGAP_NAME_LENGTH
= 8,
3763 NATIVE_TYPE_MAX_CB
= 1,
3764 COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE
= 0xff,
3766 IMAGE_COR_MIH_METHODRVA
= 0x01,
3767 IMAGE_COR_MIH_EHRVA
= 0x02,
3768 IMAGE_COR_MIH_BASICBLOCK
= 0x08,
3770 COR_VTABLE_32BIT
= 0x01,
3771 COR_VTABLE_64BIT
= 0x02,
3772 COR_VTABLE_FROM_UNMANAGED
= 0x04,
3773 COR_VTABLE_CALL_MOST_DERIVED
= 0x10,
3775 IMAGE_COR_EATJ_THUNK_SIZE
= 32,
3777 MAX_CLASS_NAME
= 1024,
3778 MAX_PACKAGE_NAME
= 1024,
3779 } ReplacesCorHdrNumericDefines
;
3781 typedef struct IMAGE_COR20_HEADER
3784 WORD MajorRuntimeVersion
;
3785 WORD MinorRuntimeVersion
;
3787 IMAGE_DATA_DIRECTORY MetaData
;
3790 DWORD EntryPointToken
;
3791 DWORD EntryPointRVA
;
3794 IMAGE_DATA_DIRECTORY Resources
;
3795 IMAGE_DATA_DIRECTORY StrongNameSignature
;
3796 IMAGE_DATA_DIRECTORY CodeManagerTable
;
3797 IMAGE_DATA_DIRECTORY VTableFixups
;
3798 IMAGE_DATA_DIRECTORY ExportAddressTableJumps
;
3799 IMAGE_DATA_DIRECTORY ManagedNativeHeader
;
3801 } IMAGE_COR20_HEADER
, *PIMAGE_COR20_HEADER
;
3803 typedef struct _IMAGE_COFF_SYMBOLS_HEADER
{
3804 DWORD NumberOfSymbols
;
3805 DWORD LvaToFirstSymbol
;
3806 DWORD NumberOfLinenumbers
;
3807 DWORD LvaToFirstLinenumber
;
3808 DWORD RvaToFirstByteOfCode
;
3809 DWORD RvaToLastByteOfCode
;
3810 DWORD RvaToFirstByteOfData
;
3811 DWORD RvaToLastByteOfData
;
3812 } IMAGE_COFF_SYMBOLS_HEADER
, *PIMAGE_COFF_SYMBOLS_HEADER
;
3815 #define FRAME_TRAP 1
3817 #define FRAME_NONFPO 3
3819 typedef struct _FPO_DATA
{
3830 } FPO_DATA
, *PFPO_DATA
;
3832 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64
{
3834 DWORD TimeDateStamp
;
3837 DWORD GlobalFlagsClear
;
3838 DWORD GlobalFlagsSet
;
3839 DWORD CriticalSectionDefaultTimeout
;
3840 ULONGLONG DeCommitFreeBlockThreshold
;
3841 ULONGLONG DeCommitTotalFreeThreshold
;
3842 ULONGLONG LockPrefixTable
;
3843 ULONGLONG MaximumAllocationSize
;
3844 ULONGLONG VirtualMemoryThreshold
;
3845 ULONGLONG ProcessAffinityMask
;
3846 DWORD ProcessHeapFlags
;
3850 ULONGLONG SecurityCookie
;
3851 ULONGLONG SEHandlerTable
;
3852 ULONGLONG SEHandlerCount
;
3853 } IMAGE_LOAD_CONFIG_DIRECTORY64
, *PIMAGE_LOAD_CONFIG_DIRECTORY64
;
3855 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32
{
3857 DWORD TimeDateStamp
;
3860 DWORD GlobalFlagsClear
;
3861 DWORD GlobalFlagsSet
;
3862 DWORD CriticalSectionDefaultTimeout
;
3863 DWORD DeCommitFreeBlockThreshold
;
3864 DWORD DeCommitTotalFreeThreshold
;
3865 PVOID LockPrefixTable
;
3866 DWORD MaximumAllocationSize
;
3867 DWORD VirtualMemoryThreshold
;
3868 DWORD ProcessHeapFlags
;
3869 DWORD ProcessAffinityMask
;
3873 DWORD SecurityCookie
;
3874 DWORD SEHandlerTable
;
3875 DWORD SEHandlerCount
;
3876 } IMAGE_LOAD_CONFIG_DIRECTORY32
, *PIMAGE_LOAD_CONFIG_DIRECTORY32
;
3879 typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY
;
3880 typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY
;
3882 typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY
;
3883 typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY
;
3886 typedef struct _IMAGE_FUNCTION_ENTRY
{
3887 DWORD StartingAddress
;
3888 DWORD EndingAddress
;
3889 DWORD EndOfPrologue
;
3890 } IMAGE_FUNCTION_ENTRY
, *PIMAGE_FUNCTION_ENTRY
;
3892 #define IMAGE_DEBUG_MISC_EXENAME 1
3894 typedef struct _IMAGE_DEBUG_MISC
{
3900 } IMAGE_DEBUG_MISC
, *PIMAGE_DEBUG_MISC
;
3902 /* This is the structure that appears at the very start of a .DBG file. */
3904 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER
{
3908 WORD Characteristics
;
3909 DWORD TimeDateStamp
;
3913 DWORD NumberOfSections
;
3914 DWORD ExportedNamesSize
;
3915 DWORD DebugDirectorySize
;
3916 DWORD SectionAlignment
;
3917 DWORD Reserved
[ 2 ];
3918 } IMAGE_SEPARATE_DEBUG_HEADER
,*PIMAGE_SEPARATE_DEBUG_HEADER
;
3920 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
3923 typedef struct tagMESSAGE_RESOURCE_ENTRY
{
3927 } MESSAGE_RESOURCE_ENTRY
,*PMESSAGE_RESOURCE_ENTRY
;
3928 #define MESSAGE_RESOURCE_UNICODE 0x0001
3930 typedef struct tagMESSAGE_RESOURCE_BLOCK
{
3933 DWORD OffsetToEntries
;
3934 } MESSAGE_RESOURCE_BLOCK
,*PMESSAGE_RESOURCE_BLOCK
;
3936 typedef struct tagMESSAGE_RESOURCE_DATA
{
3937 DWORD NumberOfBlocks
;
3938 MESSAGE_RESOURCE_BLOCK Blocks
[ 1 ];
3939 } MESSAGE_RESOURCE_DATA
,*PMESSAGE_RESOURCE_DATA
;
3942 * Here follows typedefs for security and tokens.
3946 * First a constant for the following typedefs.
3949 #define ANYSIZE_ARRAY 1
3951 /* FIXME: Orphan. What does it point to? */
3952 typedef PVOID PACCESS_TOKEN
;
3953 typedef PVOID PSECURITY_DESCRIPTOR
;
3956 typedef enum _TOKEN_ELEVATION_TYPE
{
3957 TokenElevationTypeDefault
= 1,
3958 TokenElevationTypeFull
,
3959 TokenElevationTypeLimited
3960 } TOKEN_ELEVATION_TYPE
, *PTOKEN_ELEVATION_TYPE
;
3963 * TOKEN_INFORMATION_CLASS
3966 typedef enum _TOKEN_INFORMATION_CLASS
{
3975 TokenImpersonationLevel
,
3977 TokenRestrictedSids
,
3979 TokenGroupsAndPrivileges
,
3980 TokenSessionReference
,
3987 TokenHasRestrictions
,
3988 TokenAccessInformation
,
3989 TokenVirtualizationAllowed
,
3990 TokenVirtualizationEnabled
,
3991 TokenIntegrityLevel
,
3993 TokenMandatoryPolicy
,
3995 TokenIsAppContainer
,
3997 TokenAppContainerSid
,
3998 TokenAppContainerNumber
,
3999 TokenUserClaimAttributes
,
4000 TokenDeviceClaimAttributes
,
4001 TokenRestrictedUserClaimAttributes
,
4002 TokenRestrictedDeviceClaimAttributes
,
4004 TokenRestrictedDeviceGroups
,
4005 TokenSecurityAttributes
,
4007 TokenProcessTrustLevel
,
4009 } TOKEN_INFORMATION_CLASS
;
4011 #define TOKEN_TOKEN_ADJUST_DEFAULT 0x0080
4012 #define TOKEN_ADJUST_GROUPS 0x0040
4013 #define TOKEN_ADJUST_PRIVILEGES 0x0020
4014 #define TOKEN_ADJUST_SESSIONID 0x0100
4015 #define TOKEN_ASSIGN_PRIMARY 0x0001
4016 #define TOKEN_DUPLICATE 0x0002
4017 #define TOKEN_EXECUTE STANDARD_RIGHTS_EXECUTE
4018 #define TOKEN_IMPERSONATE 0x0004
4019 #define TOKEN_QUERY 0x0008
4020 #define TOKEN_QUERY_SOURCE 0x0010
4021 #define TOKEN_ADJUST_DEFAULT 0x0080
4022 #define TOKEN_READ (STANDARD_RIGHTS_READ|TOKEN_QUERY)
4023 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE | \
4024 TOKEN_ADJUST_PRIVILEGES | \
4025 TOKEN_ADJUST_GROUPS | \
4026 TOKEN_ADJUST_DEFAULT )
4027 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
4028 TOKEN_ASSIGN_PRIMARY | \
4030 TOKEN_IMPERSONATE | \
4032 TOKEN_QUERY_SOURCE | \
4033 TOKEN_ADJUST_PRIVILEGES | \
4034 TOKEN_ADJUST_GROUPS | \
4035 TOKEN_ADJUST_SESSIONID | \
4036 TOKEN_ADJUST_DEFAULT )
4038 #ifndef _SECURITY_DEFINED
4039 #define _SECURITY_DEFINED
4042 typedef DWORD ACCESS_MASK
, *PACCESS_MASK
;
4044 typedef struct _GENERIC_MAPPING
{
4045 ACCESS_MASK GenericRead
;
4046 ACCESS_MASK GenericWrite
;
4047 ACCESS_MASK GenericExecute
;
4048 ACCESS_MASK GenericAll
;
4049 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
4051 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
4052 #define SID_IDENTIFIER_AUTHORITY_DEFINED
4055 } SID_IDENTIFIER_AUTHORITY
, *PSID_IDENTIFIER_AUTHORITY
;
4056 #endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */
4060 typedef struct _SID
{
4062 BYTE SubAuthorityCount
;
4063 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
4064 DWORD SubAuthority
[1];
4066 #endif /* !defined(SID_DEFINED) */
4068 #define SID_REVISION (1) /* Current revision */
4069 #define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */
4070 #define SID_RECOMMENDED_SUB_AUTHORITIES (1) /* recommended subauths */
4072 #define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))
4078 #define ACL_REVISION1 1
4079 #define ACL_REVISION2 2
4080 #define ACL_REVISION3 3
4081 #define ACL_REVISION4 4
4083 #define MIN_ACL_REVISION ACL_REVISION2
4084 #define MAX_ACL_REVISION ACL_REVISION4
4086 #define ACL_REVISION 2
4088 typedef struct _ACL
{
4096 typedef enum _ACL_INFORMATION_CLASS
4098 AclRevisionInformation
= 1,
4100 } ACL_INFORMATION_CLASS
;
4102 typedef struct _ACL_REVISION_INFORMATION
4105 } ACL_REVISION_INFORMATION
, *PACL_REVISION_INFORMATION
;
4107 typedef struct _ACL_SIZE_INFORMATION
4110 DWORD AclBytesInUse
;
4112 } ACL_SIZE_INFORMATION
, *PACL_SIZE_INFORMATION
;
4114 /* SECURITY_DESCRIPTOR */
4115 #define SECURITY_DESCRIPTOR_REVISION 1
4116 #define SECURITY_DESCRIPTOR_REVISION1 1
4123 #if defined(_MSC_VER)
4124 #define SE_CREATE_TOKEN_NAME L"SeCreateTokenPrivilege"
4125 #define SE_ASSIGNPRIMARYTOKEN_NAME L"SeAssignPrimaryTokenPrivilege"
4126 #define SE_LOCK_MEMORY_NAME L"SeLockMemoryPrivilege"
4127 #define SE_INCREASE_QUOTA_NAME L"SeIncreaseQuotaPrivilege"
4128 #define SE_UNSOLICITED_INPUT_NAME L"SeUnsolicitedInputPrivilege"
4129 #define SE_MACHINE_ACCOUNT_NAME L"SeMachineAccountPrivilege"
4130 #define SE_TCB_NAME L"SeTcbPrivilege"
4131 #define SE_SECURITY_NAME L"SeSecurityPrivilege"
4132 #define SE_TAKE_OWNERSHIP_NAME L"SeTakeOwnershipPrivilege"
4133 #define SE_LOAD_DRIVER_NAME L"SeLoadDriverPrivilege"
4134 #define SE_SYSTEM_PROFILE_NAME L"SeSystemProfilePrivilege"
4135 #define SE_SYSTEMTIME_NAME L"SeSystemtimePrivilege"
4136 #define SE_PROF_SINGLE_PROCESS_NAME L"SeProfileSingleProcessPrivilege"
4137 #define SE_INC_BASE_PRIORITY_NAME L"SeIncreaseBasePriorityPrivilege"
4138 #define SE_CREATE_PAGEFILE_NAME L"SeCreatePagefilePrivilege"
4139 #define SE_CREATE_PERMANENT_NAME L"SeCreatePermanentPrivilege"
4140 #define SE_BACKUP_NAME L"SeBackupPrivilege"
4141 #define SE_RESTORE_NAME L"SeRestorePrivilege"
4142 #define SE_SHUTDOWN_NAME L"SeShutdownPrivilege"
4143 #define SE_DEBUG_NAME L"SeDebugPrivilege"
4144 #define SE_AUDIT_NAME L"SeAuditPrivilege"
4145 #define SE_SYSTEM_ENVIRONMENT_NAME L"SeSystemEnvironmentPrivilege"
4146 #define SE_CHANGE_NOTIFY_NAME L"SeChangeNotifyPrivilege"
4147 #define SE_REMOTE_SHUTDOWN_NAME L"SeRemoteShutdownPrivilege"
4148 #define SE_UNDOCK_NAME L"SeUndockPrivilege"
4149 #define SE_ENABLE_DELEGATION_NAME L"SeEnableDelegationPrivilege"
4150 #define SE_MANAGE_VOLUME_NAME L"SeManageVolumePrivilege"
4151 #define SE_IMPERSONATE_NAME L"SeImpersonatePrivilege"
4152 #define SE_CREATE_GLOBAL_NAME L"SeCreateGlobalPrivilege"
4153 #elif defined(__GNUC__)
4154 #define SE_CREATE_TOKEN_NAME (const WCHAR []){ 'S','e','C','r','e','a','t','e','T','o','k','e','n','P','r','i','v','i','l','e','g','e',0 }
4155 #define SE_ASSIGNPRIMARYTOKEN_NAME (const WCHAR []){ '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 }
4156 #define SE_LOCK_MEMORY_NAME (const WCHAR []){ 'S','e','L','o','c','k','M','e','m','o','r','y','P','r','i','v','i','l','e','g','e',0 }
4157 #define SE_INCREASE_QUOTA_NAME (const WCHAR []){ '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 }
4158 #define SE_UNSOLICITED_INPUT_NAME (const WCHAR []){ '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 }
4159 #define SE_MACHINE_ACCOUNT_NAME (const WCHAR []){ '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 }
4160 #define SE_TCB_NAME (const WCHAR []){ 'S','e','T','c','b','P','r','i','v','i','l','e','g','e',0 }
4161 #define SE_SECURITY_NAME (const WCHAR []){ 'S','e','S','e','c','u','r','i','t','y','P','r','i','v','i','l','e','g','e',0 }
4162 #define SE_TAKE_OWNERSHIP_NAME (const WCHAR []){ '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 }
4163 #define SE_LOAD_DRIVER_NAME (const WCHAR []){ 'S','e','L','o','a','d','D','r','i','v','e','r','P','r','i','v','i','l','e','g','e',0 }
4164 #define SE_SYSTEM_PROFILE_NAME (const WCHAR []){ '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 }
4165 #define SE_SYSTEMTIME_NAME (const WCHAR []){ 'S','e','S','y','s','t','e','m','t','i','m','e','P','r','i','v','i','l','e','g','e',0 }
4166 #define SE_PROF_SINGLE_PROCESS_NAME (const WCHAR []){ '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 }
4167 #define SE_INC_BASE_PRIORITY_NAME (const WCHAR []){ '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 }
4168 #define SE_CREATE_PAGEFILE_NAME (const WCHAR []){ '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 }
4169 #define SE_CREATE_PERMANENT_NAME (const WCHAR []){ '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 }
4170 #define SE_BACKUP_NAME (const WCHAR []){ 'S','e','B','a','c','k','u','p','P','r','i','v','i','l','e','g','e',0 }
4171 #define SE_RESTORE_NAME (const WCHAR []){ 'S','e','R','e','s','t','o','r','e','P','r','i','v','i','l','e','g','e',0 }
4172 #define SE_SHUTDOWN_NAME (const WCHAR []){ 'S','e','S','h','u','t','d','o','w','n','P','r','i','v','i','l','e','g','e',0 }
4173 #define SE_DEBUG_NAME (const WCHAR []){ 'S','e','D','e','b','u','g','P','r','i','v','i','l','e','g','e',0 }
4174 #define SE_AUDIT_NAME (const WCHAR []){ 'S','e','A','u','d','i','t','P','r','i','v','i','l','e','g','e',0 }
4175 #define SE_SYSTEM_ENVIRONMENT_NAME (const WCHAR []){ '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 }
4176 #define SE_CHANGE_NOTIFY_NAME (const WCHAR []){ 'S','e','C','h','a','n','g','e','N','o','t','i','f','y','P','r','i','v','i','l','e','g','e',0 }
4177 #define SE_REMOTE_SHUTDOWN_NAME (const WCHAR []){ '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 }
4178 #define SE_UNDOCK_NAME (const WCHAR []){ 'S','e','U','n','d','o','c','k','P','r','i','v','i','l','e','g','e',0 }
4179 #define SE_ENABLE_DELEGATION_NAME (const WCHAR []){ '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 }
4180 #define SE_MANAGE_VOLUME_NAME (const WCHAR []){ 'S','e','M','a','n','a','g','e','V','o','l','u','m','e','P','r','i','v','i','l','e','g','e',0 }
4181 #define SE_IMPERSONATE_NAME (const WCHAR []){ 'S','e','I','m','p','e','r','s','o','n','a','t','e','P','r','i','v','i','l','e','g','e',0 }
4182 #define SE_CREATE_GLOBAL_NAME (const WCHAR []){ 'S','e','C','r','e','a','t','e','G','l','o','b','a','l','P','r','i','v','i','l','e','g','e',0 }
4183 #else /* _MSC_VER/__GNUC__ */
4184 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 };
4185 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 };
4186 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 };
4187 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 };
4188 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 };
4189 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 };
4190 static const WCHAR SE_TCB_NAME
[] = { 'S','e','T','c','b','P','r','i','v','i','l','e','g','e',0 };
4191 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 };
4192 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 };
4193 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 };
4194 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 };
4195 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 };
4196 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 };
4197 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 };
4198 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 };
4199 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 };
4200 static const WCHAR SE_BACKUP_NAME
[] = { 'S','e','B','a','c','k','u','p','P','r','i','v','i','l','e','g','e',0 };
4201 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 };
4202 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 };
4203 static const WCHAR SE_DEBUG_NAME
[] = { 'S','e','D','e','b','u','g','P','r','i','v','i','l','e','g','e',0 };
4204 static const WCHAR SE_AUDIT_NAME
[] = { 'S','e','A','u','d','i','t','P','r','i','v','i','l','e','g','e',0 };
4205 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 };
4206 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 };
4207 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 };
4208 static const WCHAR SE_UNDOCK_NAME
[] = { 'S','e','U','n','d','o','c','k','P','r','i','v','i','l','e','g','e',0 };
4209 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 };
4210 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 };
4211 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 };
4212 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 };
4215 #define SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege"
4216 #define SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege"
4217 #define SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege"
4218 #define SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege"
4219 #define SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege"
4220 #define SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege"
4221 #define SE_TCB_NAME "SeTcbPrivilege"
4222 #define SE_SECURITY_NAME "SeSecurityPrivilege"
4223 #define SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege"
4224 #define SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege"
4225 #define SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege"
4226 #define SE_SYSTEMTIME_NAME "SeSystemtimePrivilege"
4227 #define SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege"
4228 #define SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege"
4229 #define SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege"
4230 #define SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege"
4231 #define SE_BACKUP_NAME "SeBackupPrivilege"
4232 #define SE_RESTORE_NAME "SeRestorePrivilege"
4233 #define SE_SHUTDOWN_NAME "SeShutdownPrivilege"
4234 #define SE_DEBUG_NAME "SeDebugPrivilege"
4235 #define SE_AUDIT_NAME "SeAuditPrivilege"
4236 #define SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege"
4237 #define SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege"
4238 #define SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege"
4239 #define SE_UNDOCK_NAME "SeUndockPrivilege"
4240 #define SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege"
4241 #define SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege"
4242 #define SE_IMPERSONATE_NAME "SeImpersonatePrivilege"
4243 #define SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege"
4246 #define SE_GROUP_MANDATORY 0x00000001
4247 #define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002
4248 #define SE_GROUP_ENABLED 0x00000004
4249 #define SE_GROUP_OWNER 0x00000008
4250 #define SE_GROUP_USE_FOR_DENY_ONLY 0x00000010
4251 #define SE_GROUP_INTEGRITY 0x00000020
4252 #define SE_GROUP_INTEGRITY_ENABLED 0x00000040
4253 #define SE_GROUP_LOGON_ID 0xC0000000
4254 #define SE_GROUP_RESOURCE 0x20000000
4255 #define SE_GROUP_VALID_ATTRIBUTES 0xE000007F
4257 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001
4258 #define SE_PRIVILEGE_ENABLED 0x00000002
4259 #define SE_PRIVILEGE_REMOVED 0x00000004
4260 #define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
4262 #define PRIVILEGE_SET_ALL_NECESSARY 1
4264 #define SE_OWNER_DEFAULTED 0x00000001
4265 #define SE_GROUP_DEFAULTED 0x00000002
4266 #define SE_DACL_PRESENT 0x00000004
4267 #define SE_DACL_DEFAULTED 0x00000008
4268 #define SE_SACL_PRESENT 0x00000010
4269 #define SE_SACL_DEFAULTED 0x00000020
4270 #define SE_DACL_AUTO_INHERIT_REQ 0x00000100
4271 #define SE_SACL_AUTO_INHERIT_REQ 0x00000200
4272 #define SE_DACL_AUTO_INHERITED 0x00000400
4273 #define SE_SACL_AUTO_INHERITED 0x00000800
4274 #define SE_DACL_PROTECTED 0x00001000
4275 #define SE_SACL_PROTECTED 0x00002000
4276 #define SE_RM_CONTROL_VALID 0x00004000
4277 #define SE_SELF_RELATIVE 0x00008000
4279 typedef DWORD SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
4280 typedef WORD SECURITY_DESCRIPTOR_CONTROL
, *PSECURITY_DESCRIPTOR_CONTROL
;
4282 /* The security descriptor structure */
4286 SECURITY_DESCRIPTOR_CONTROL Control
;
4291 } SECURITY_DESCRIPTOR_RELATIVE
, *PISECURITY_DESCRIPTOR_RELATIVE
;
4296 SECURITY_DESCRIPTOR_CONTROL Control
;
4301 } SECURITY_DESCRIPTOR
, *PISECURITY_DESCRIPTOR
;
4303 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
4305 #endif /* _SECURITY_DEFINED */
4308 * SID_AND_ATTRIBUTES
4311 typedef struct _SID_AND_ATTRIBUTES
{
4314 } SID_AND_ATTRIBUTES
, *PSID_AND_ATTRIBUTES
;
4316 /* security entities */
4317 #define SECURITY_NULL_RID __MSABI_LONG(0x00000000)
4318 #define SECURITY_WORLD_RID __MSABI_LONG(0x00000000)
4319 #define SECURITY_LOCAL_RID __MSABI_LONG(0X00000000)
4321 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
4324 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
4327 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
4330 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
4331 #define SECURITY_CREATOR_OWNER_RID __MSABI_LONG(0x00000000)
4332 #define SECURITY_CREATOR_GROUP_RID __MSABI_LONG(0x00000001)
4333 #define SECURITY_CREATOR_OWNER_SERVER_RID __MSABI_LONG(0x00000002)
4334 #define SECURITY_CREATOR_GROUP_SERVER_RID __MSABI_LONG(0x00000003)
4335 #define SECURITY_CREATOR_OWNER_RIGHTS_RID __MSABI_LONG(0x00000004)
4338 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
4341 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
4342 #define SECURITY_DIALUP_RID __MSABI_LONG(0x00000001)
4343 #define SECURITY_NETWORK_RID __MSABI_LONG(0x00000002)
4344 #define SECURITY_BATCH_RID __MSABI_LONG(0x00000003)
4345 #define SECURITY_INTERACTIVE_RID __MSABI_LONG(0x00000004)
4346 #define SECURITY_LOGON_IDS_RID __MSABI_LONG(0x00000005)
4347 #define SECURITY_SERVICE_RID __MSABI_LONG(0x00000006)
4348 #define SECURITY_ANONYMOUS_LOGON_RID __MSABI_LONG(0x00000007)
4349 #define SECURITY_PROXY_RID __MSABI_LONG(0x00000008)
4350 #define SECURITY_ENTERPRISE_CONTROLLERS_RID __MSABI_LONG(0x00000009)
4351 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
4352 #define SECURITY_PRINCIPAL_SELF_RID __MSABI_LONG(0x0000000A)
4353 #define SECURITY_AUTHENTICATED_USER_RID __MSABI_LONG(0x0000000B)
4354 #define SECURITY_RESTRICTED_CODE_RID __MSABI_LONG(0x0000000C)
4355 #define SECURITY_TERMINAL_SERVER_RID __MSABI_LONG(0x0000000D)
4356 #define SECURITY_REMOTE_LOGON_RID __MSABI_LONG(0x0000000E)
4357 #define SECURITY_THIS_ORGANIZATION_RID __MSABI_LONG(0x0000000F)
4358 #define SECURITY_LOCAL_SYSTEM_RID __MSABI_LONG(0x00000012)
4359 #define SECURITY_LOCAL_SERVICE_RID __MSABI_LONG(0x00000013)
4360 #define SECURITY_NETWORK_SERVICE_RID __MSABI_LONG(0x00000014)
4361 #define SECURITY_NT_NON_UNIQUE __MSABI_LONG(0x00000015)
4362 #define SECURITY_BUILTIN_DOMAIN_RID __MSABI_LONG(0x00000020)
4364 #define SECURITY_PACKAGE_BASE_RID __MSABI_LONG(0x00000040)
4365 #define SECURITY_PACKAGE_NTLM_RID __MSABI_LONG(0x0000000A)
4366 #define SECURITY_PACKAGE_SCHANNEL_RID __MSABI_LONG(0x0000000E)
4367 #define SECURITY_PACKAGE_DIGEST_RID __MSABI_LONG(0x00000015)
4368 #define SECURITY_MAX_ALWAYS_FILTERED __MSABI_LONG(0x000003E7)
4369 #define SECURITY_MIN_NEVER_FILTERED __MSABI_LONG(0x000003E8)
4370 #define SECURITY_OTHER_ORGANIZATION_RID __MSABI_LONG(0x000003E8)
4372 #define FOREST_USER_RID_MAX __MSABI_LONG(0x000001F3)
4373 #define DOMAIN_USER_RID_ADMIN __MSABI_LONG(0x000001F4)
4374 #define DOMAIN_USER_RID_GUEST __MSABI_LONG(0x000001F5)
4375 #define DOMAIN_USER_RID_KRBTGT __MSABI_LONG(0x000001F6)
4376 #define DOMAIN_USER_RID_MAX __MSABI_LONG(0x000003E7)
4378 #define DOMAIN_GROUP_RID_ADMINS __MSABI_LONG(0x00000200)
4379 #define DOMAIN_GROUP_RID_USERS __MSABI_LONG(0x00000201)
4380 #define DOMAIN_GROUP_RID_GUESTS __MSABI_LONG(0x00000202)
4381 #define DOMAIN_GROUP_RID_COMPUTERS __MSABI_LONG(0x00000203)
4382 #define DOMAIN_GROUP_RID_CONTROLLERS __MSABI_LONG(0x00000204)
4383 #define DOMAIN_GROUP_RID_CERT_ADMINS __MSABI_LONG(0x00000205)
4384 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS __MSABI_LONG(0x00000206)
4385 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS __MSABI_LONG(0x00000207)
4386 #define DOMAIN_GROUP_RID_POLICY_ADMINS __MSABI_LONG(0x00000208)
4388 #define SECURITY_APP_PACKAGE_AUTHORITY {0,0,0,0,0,15}
4389 #define SECURITY_APP_PACKAGE_BASE_RID __MSABI_LONG(0x000000002)
4390 #define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT __MSABI_LONG(0x000000002)
4391 #define SECURITY_APP_PACKAGE_RID_COUNT __MSABI_LONG(0x000000008)
4392 #define SECURITY_CAPABILITY_BASE_RID __MSABI_LONG(0x000000003)
4393 #define SECURITY_CAPABILITY_APP_RID __MSABI_LONG(0x000000400)
4394 #define SECURITY_BUILTIN_CAPABILITY_RID_COUNT __MSABI_LONG(0x000000002)
4395 #define SECURITY_CAPABILITY_RID_COUNT __MSABI_LONG(0x000000005)
4396 #define SECURITY_PARENT_PACKAGE_RID_COUNT SECURITY_APP_PACKAGE_RID_COUNT
4397 #define SECURITY_CHILD_PACKAGE_RID_COUNT __MSABI_LONG(0x00000000c)
4398 #define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE __MSABI_LONG(0x000000001)
4400 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
4401 #define SECURITY_MANDATORY_UNTRUSTED_RID __MSABI_LONG(0x00000000)
4402 #define SECURITY_MANDATORY_LOW_RID __MSABI_LONG(0x00001000)
4403 #define SECURITY_MANDATORY_MEDIUM_RID __MSABI_LONG(0x00002000)
4404 #define SECURITY_MANDATORY_HIGH_RID __MSABI_LONG(0x00003000)
4405 #define SECURITY_MANDATORY_SYSTEM_RID __MSABI_LONG(0x00004000)
4406 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID __MSABI_LONG(0x00005000)
4408 #define DOMAIN_ALIAS_RID_ADMINS __MSABI_LONG(0x00000220)
4409 #define DOMAIN_ALIAS_RID_USERS __MSABI_LONG(0x00000221)
4410 #define DOMAIN_ALIAS_RID_GUESTS __MSABI_LONG(0x00000222)
4411 #define DOMAIN_ALIAS_RID_POWER_USERS __MSABI_LONG(0x00000223)
4413 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS __MSABI_LONG(0x00000224)
4414 #define DOMAIN_ALIAS_RID_SYSTEM_OPS __MSABI_LONG(0x00000225)
4415 #define DOMAIN_ALIAS_RID_PRINT_OPS __MSABI_LONG(0x00000226)
4416 #define DOMAIN_ALIAS_RID_BACKUP_OPS __MSABI_LONG(0x00000227)
4418 #define DOMAIN_ALIAS_RID_REPLICATOR __MSABI_LONG(0x00000228)
4419 #define DOMAIN_ALIAS_RID_RAS_SERVERS __MSABI_LONG(0x00000229)
4420 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS __MSABI_LONG(0x0000022A)
4421 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS __MSABI_LONG(0x0000022B)
4422 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS __MSABI_LONG(0x0000022C)
4423 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS __MSABI_LONG(0x0000022D)
4425 #define DOMAIN_ALIAS_RID_MONITORING_USERS __MSABI_LONG(0x0000022E)
4426 #define DOMAIN_ALIAS_RID_LOGGING_USERS __MSABI_LONG(0x0000022F)
4427 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS __MSABI_LONG(0x00000230)
4428 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS __MSABI_LONG(0x00000231)
4429 #define DOMAIN_ALIAS_RID_DCOM_USERS __MSABI_LONG(0x00000232)
4431 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
4433 #define SECURITY_PACKAGE_RID_COUNT __MSABI_LONG(2)
4434 #define SECURITY_LOGON_IDS_RID_COUNT __MSABI_LONG(3)
4440 WinCreatorOwnerSid
= 3,
4441 WinCreatorGroupSid
= 4,
4442 WinCreatorOwnerServerSid
= 5,
4443 WinCreatorGroupServerSid
= 6,
4444 WinNtAuthoritySid
= 7,
4448 WinInteractiveSid
= 11,
4450 WinAnonymousSid
= 13,
4452 WinEnterpriseControllersSid
= 15,
4454 WinAuthenticatedUserSid
= 17,
4455 WinRestrictedCodeSid
= 18,
4456 WinTerminalServerSid
= 19,
4457 WinRemoteLogonIdSid
= 20,
4458 WinLogonIdsSid
= 21,
4459 WinLocalSystemSid
= 22,
4460 WinLocalServiceSid
= 23,
4461 WinNetworkServiceSid
= 24,
4462 WinBuiltinDomainSid
= 25,
4463 WinBuiltinAdministratorsSid
= 26,
4464 WinBuiltinUsersSid
= 27,
4465 WinBuiltinGuestsSid
= 28,
4466 WinBuiltinPowerUsersSid
= 29,
4467 WinBuiltinAccountOperatorsSid
= 30,
4468 WinBuiltinSystemOperatorsSid
= 31,
4469 WinBuiltinPrintOperatorsSid
= 32,
4470 WinBuiltinBackupOperatorsSid
= 33,
4471 WinBuiltinReplicatorSid
= 34,
4472 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
4473 WinBuiltinRemoteDesktopUsersSid
= 36,
4474 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
4475 WinAccountAdministratorSid
= 38,
4476 WinAccountGuestSid
= 39,
4477 WinAccountKrbtgtSid
= 40,
4478 WinAccountDomainAdminsSid
= 41,
4479 WinAccountDomainUsersSid
= 42,
4480 WinAccountDomainGuestsSid
= 43,
4481 WinAccountComputersSid
= 44,
4482 WinAccountControllersSid
= 45,
4483 WinAccountCertAdminsSid
= 46,
4484 WinAccountSchemaAdminsSid
= 47,
4485 WinAccountEnterpriseAdminsSid
= 48,
4486 WinAccountPolicyAdminsSid
= 49,
4487 WinAccountRasAndIasServersSid
= 50,
4488 WinNTLMAuthenticationSid
= 51,
4489 WinDigestAuthenticationSid
= 52,
4490 WinSChannelAuthenticationSid
= 53,
4491 WinThisOrganizationSid
= 54,
4492 WinOtherOrganizationSid
= 55,
4493 WinBuiltinIncomingForestTrustBuildersSid
= 56,
4494 WinBuiltinPerfMonitoringUsersSid
= 57,
4495 WinBuiltinPerfLoggingUsersSid
= 58,
4496 WinBuiltinAuthorizationAccessSid
= 59,
4497 WinBuiltinTerminalServerLicenseServersSid
= 60,
4498 WinBuiltinDCOMUsersSid
= 61,
4499 WinBuiltinIUsersSid
= 62,
4501 WinBuiltinCryptoOperatorsSid
= 64,
4502 WinUntrustedLabelSid
= 65,
4503 WinLowLabelSid
= 66,
4504 WinMediumLabelSid
= 67,
4505 WinHighLabelSid
= 68,
4506 WinSystemLabelSid
= 69,
4507 WinWriteRestrictedCodeSid
= 70,
4508 WinCreatorOwnerRightsSid
= 71,
4509 WinCacheablePrincipalsGroupSid
= 72,
4510 WinNonCacheablePrincipalsGroupSid
= 73,
4511 WinEnterpriseReadonlyControllersSid
= 74,
4512 WinAccountReadonlyControllersSid
= 75,
4513 WinBuiltinEventLogReadersGroup
= 76,
4514 WinNewEnterpriseReadonlyControllersSid
= 77,
4515 WinBuiltinCertSvcDComAccessGroup
= 78,
4516 WinMediumPlusLabelSid
= 79,
4517 WinLocalLogonSid
= 80,
4518 WinConsoleLogonSid
= 81,
4519 WinThisOrganizationCertificateSid
= 82,
4520 WinApplicationPackageAuthoritySid
= 83,
4521 WinBuiltinAnyPackageSid
= 84,
4522 WinCapabilityInternetClientSid
= 85,
4523 WinCapabilityInternetClientServerSid
= 86,
4524 WinCapabilityPrivateNetworkClientServerSid
= 87,
4525 WinCapabilityPicturesLibrarySid
= 88,
4526 WinCapabilityVideosLibrarySid
= 89,
4527 WinCapabilityMusicLibrarySid
= 90,
4528 WinCapabilityDocumentsLibrarySid
= 91,
4529 WinCapabilitySharedUserCertificatesSid
= 92,
4530 WinCapabilityEnterpriseAuthenticationSid
= 93,
4531 WinCapabilityRemovableStorageSid
= 94,
4532 WinBuiltinRDSRemoteAccessServersSid
= 95,
4533 WinBuiltinRDSEndpointServersSid
= 96,
4534 WinBuiltinRDSManagementServersSid
= 97,
4535 WinUserModeDriversSid
= 98,
4536 WinBuiltinHyperVAdminsSid
= 99,
4537 WinAccountCloneableControllersSid
= 100,
4538 WinBuiltinAccessControlAssistanceOperatorsSid
= 101,
4539 WinBuiltinRemoteManagementUsersSid
= 102,
4540 WinAuthenticationAuthorityAssertedSid
= 103,
4541 WinAuthenticationServiceAssertedSid
= 104,
4542 WinLocalAccountSid
= 105,
4543 WinLocalAccountAndAdministratorSid
= 106,
4544 WinAccountProtectedUsersSid
= 107,
4545 } WELL_KNOWN_SID_TYPE
;
4551 typedef struct _TOKEN_USER
{
4552 SID_AND_ATTRIBUTES User
;
4553 } TOKEN_USER
, *PTOKEN_USER
;
4559 typedef struct _TOKEN_GROUPS
{
4561 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
4562 } TOKEN_GROUPS
, *PTOKEN_GROUPS
;
4565 * LUID_AND_ATTRIBUTES
4568 typedef union _LARGE_INTEGER
{
4570 #ifdef WORDS_BIGENDIAN
4578 #ifndef NONAMELESSSTRUCT
4580 #ifdef WORDS_BIGENDIAN
4590 } LARGE_INTEGER
, *PLARGE_INTEGER
;
4592 typedef union _ULARGE_INTEGER
{
4594 #ifdef WORDS_BIGENDIAN
4602 #ifndef NONAMELESSSTRUCT
4604 #ifdef WORDS_BIGENDIAN
4614 } ULARGE_INTEGER
, *PULARGE_INTEGER
;
4617 * Locally Unique Identifier
4620 typedef struct _LUID
{
4625 #include <pshpack4.h>
4626 typedef struct _LUID_AND_ATTRIBUTES
{
4629 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
4630 #include <poppack.h>
4636 typedef struct _PRIVILEGE_SET
{
4637 DWORD PrivilegeCount
;
4639 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
4640 } PRIVILEGE_SET
, *PPRIVILEGE_SET
;
4646 typedef struct _TOKEN_PRIVILEGES
{
4647 DWORD PrivilegeCount
;
4648 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
4649 } TOKEN_PRIVILEGES
, *PTOKEN_PRIVILEGES
;
4655 typedef struct _TOKEN_OWNER
{
4657 } TOKEN_OWNER
, *PTOKEN_OWNER
;
4660 * TOKEN_PRIMARY_GROUP
4663 typedef struct _TOKEN_PRIMARY_GROUP
{
4665 } TOKEN_PRIMARY_GROUP
, *PTOKEN_PRIMARY_GROUP
;
4669 * TOKEN_DEFAULT_DACL
4672 typedef struct _TOKEN_DEFAULT_DACL
{
4674 } TOKEN_DEFAULT_DACL
, *PTOKEN_DEFAULT_DACL
;
4680 #define TOKEN_SOURCE_LENGTH 8
4682 typedef struct _TOKEN_SOURCE
{
4683 char SourceName
[TOKEN_SOURCE_LENGTH
];
4684 LUID SourceIdentifier
;
4685 } TOKEN_SOURCE
, *PTOKEN_SOURCE
;
4691 typedef enum tagTOKEN_TYPE
{
4697 * SECURITY_IMPERSONATION_LEVEL
4700 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
4702 SecurityIdentification
,
4703 SecurityImpersonation
,
4705 } SECURITY_IMPERSONATION_LEVEL
, *PSECURITY_IMPERSONATION_LEVEL
;
4707 #define SECURITY_DYNAMIC_TRACKING (TRUE)
4708 #define SECURITY_STATIC_TRACKING (FALSE)
4710 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
,
4711 * PSECURITY_CONTEXT_TRACKING_MODE
;
4713 * Quality of Service
4716 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
4718 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
4719 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
4720 BOOLEAN EffectiveOnly
;
4721 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
4727 #include <pshpack4.h>
4728 typedef struct _TOKEN_STATISTICS
{
4730 LUID AuthenticationId
;
4731 LARGE_INTEGER ExpirationTime
;
4732 TOKEN_TYPE TokenType
;
4733 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
4734 DWORD DynamicCharged
;
4735 DWORD DynamicAvailable
;
4737 DWORD PrivilegeCount
;
4740 #include <poppack.h>
4742 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
{
4745 PSID_AND_ATTRIBUTES Sids
;
4746 DWORD RestrictedSidCount
;
4747 DWORD RestrictedSidLength
;
4748 PSID_AND_ATTRIBUTES RestrictedSids
;
4749 DWORD PrivilegeCount
;
4750 DWORD PrivilegeLength
;
4751 PLUID_AND_ATTRIBUTES Privileges
;
4752 LUID AuthenticationId
;
4753 } TOKEN_GROUPS_AND_PRIVILEGES
, * PTOKEN_GROUPS_AND_PRIVILEGES
;
4755 typedef struct _TOKEN_ORIGIN
{
4756 LUID OriginatingLogonSession
;
4757 } TOKEN_ORIGIN
, * PTOKEN_ORIGIN
;
4759 typedef struct _TOKEN_LINKED_TOKEN
{
4761 } TOKEN_LINKED_TOKEN
, * PTOKEN_LINKED_TOKEN
;
4763 typedef struct _TOKEN_ELEVATION
{
4764 DWORD TokenIsElevated
;
4765 } TOKEN_ELEVATION
, * PTOKEN_ELEVATION
;
4767 typedef struct _TOKEN_MANDATORY_LABEL
{
4768 SID_AND_ATTRIBUTES Label
;
4769 } TOKEN_MANDATORY_LABEL
, * PTOKEN_MANDATORY_LABEL
;
4771 typedef struct _TOKEN_APPCONTAINER_INFORMATION
{
4772 PSID TokenAppContainer
;
4773 } TOKEN_APPCONTAINER_INFORMATION
, * PTOKEN_APPCONTAINER_INFORMATION
;
4779 /* ACEs, directly starting after an ACL */
4780 typedef struct _ACE_HEADER
{
4784 } ACE_HEADER
,*PACE_HEADER
;
4787 #define ACCESS_ALLOWED_ACE_TYPE 0
4788 #define ACCESS_DENIED_ACE_TYPE 1
4789 #define SYSTEM_AUDIT_ACE_TYPE 2
4790 #define SYSTEM_ALARM_ACE_TYPE 3
4791 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11
4793 /* inherit AceFlags */
4794 #define OBJECT_INHERIT_ACE 0x01
4795 #define CONTAINER_INHERIT_ACE 0x02
4796 #define NO_PROPAGATE_INHERIT_ACE 0x04
4797 #define INHERIT_ONLY_ACE 0x08
4798 #define INHERITED_ACE 0x10
4799 #define VALID_INHERIT_FLAGS 0x1F
4801 /* AceFlags mask for what events we (should) audit */
4802 #define SUCCESSFUL_ACCESS_ACE_FLAG 0x40
4803 #define FAILED_ACCESS_ACE_FLAG 0x80
4805 /* different ACEs depending on AceType
4806 * SidStart marks the begin of a SID
4807 * so the thing finally looks like this:
4812 typedef struct _ACCESS_ALLOWED_ACE
{
4816 } ACCESS_ALLOWED_ACE
,*PACCESS_ALLOWED_ACE
;
4818 typedef struct _ACCESS_DENIED_ACE
{
4822 } ACCESS_DENIED_ACE
,*PACCESS_DENIED_ACE
;
4824 typedef struct _SYSTEM_AUDIT_ACE
{
4828 } SYSTEM_AUDIT_ACE
,*PSYSTEM_AUDIT_ACE
;
4830 typedef struct _SYSTEM_ALARM_ACE
{
4834 } SYSTEM_ALARM_ACE
,*PSYSTEM_ALARM_ACE
;
4836 typedef struct _SYSTEM_MANDATORY_LABEL_ACE
{
4840 } SYSTEM_MANDATORY_LABEL_ACE
,*PSYSTEM_MANDATORY_LABEL_ACE
;
4842 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
4843 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
4844 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
4846 typedef enum tagSID_NAME_USE
{
4851 SidTypeWellKnownGroup
,
4852 SidTypeDeletedAccount
,
4855 } SID_NAME_USE
,*PSID_NAME_USE
;
4857 #define ACE_OBJECT_TYPE_PRESENT 0x1
4858 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
4862 /* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */
4864 #define DELETE 0x00010000
4865 #define READ_CONTROL 0x00020000
4866 #define WRITE_DAC 0x00040000
4867 #define WRITE_OWNER 0x00080000
4868 #define SYNCHRONIZE 0x00100000
4869 #define STANDARD_RIGHTS_REQUIRED 0x000f0000
4871 #define STANDARD_RIGHTS_READ READ_CONTROL
4872 #define STANDARD_RIGHTS_WRITE READ_CONTROL
4873 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
4875 #define STANDARD_RIGHTS_ALL 0x001f0000
4877 #define SPECIFIC_RIGHTS_ALL 0x0000ffff
4879 #define GENERIC_READ 0x80000000
4880 #define GENERIC_WRITE 0x40000000
4881 #define GENERIC_EXECUTE 0x20000000
4882 #define GENERIC_ALL 0x10000000
4884 #define MAXIMUM_ALLOWED 0x02000000
4885 #define ACCESS_SYSTEM_SECURITY 0x01000000
4887 #define EVENT_QUERY_STATE 0x0001
4888 #define EVENT_MODIFY_STATE 0x0002
4889 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
4891 #define SEMAPHORE_QUERY_STATE 0x0001
4892 #define SEMAPHORE_MODIFY_STATE 0x0002
4893 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
4895 #define MUTANT_QUERY_STATE 0x0001
4896 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
4898 #define JOB_OBJECT_ASSIGN_PROCESS 0x0001
4899 #define JOB_OBJECT_SET_ATTRIBUTES 0x0002
4900 #define JOB_OBJECT_QUERY 0x0004
4901 #define JOB_OBJECT_TERMINATE 0x0008
4902 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x0010
4903 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1f)
4905 #define TIMER_QUERY_STATE 0x0001
4906 #define TIMER_MODIFY_STATE 0x0002
4907 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
4909 #define PROCESS_TERMINATE 0x0001
4910 #define PROCESS_CREATE_THREAD 0x0002
4911 #define PROCESS_VM_OPERATION 0x0008
4912 #define PROCESS_VM_READ 0x0010
4913 #define PROCESS_VM_WRITE 0x0020
4914 #define PROCESS_DUP_HANDLE 0x0040
4915 #define PROCESS_CREATE_PROCESS 0x0080
4916 #define PROCESS_SET_QUOTA 0x0100
4917 #define PROCESS_SET_INFORMATION 0x0200
4918 #define PROCESS_QUERY_INFORMATION 0x0400
4919 #define PROCESS_SUSPEND_RESUME 0x0800
4920 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
4921 #define PROCESS_SET_LIMITED_INFORMATION 0x2000
4922 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff)
4924 #define THREAD_TERMINATE 0x0001
4925 #define THREAD_SUSPEND_RESUME 0x0002
4926 #define THREAD_GET_CONTEXT 0x0008
4927 #define THREAD_SET_CONTEXT 0x0010
4928 #define THREAD_SET_INFORMATION 0x0020
4929 #define THREAD_QUERY_INFORMATION 0x0040
4930 #define THREAD_SET_THREAD_TOKEN 0x0080
4931 #define THREAD_IMPERSONATE 0x0100
4932 #define THREAD_DIRECT_IMPERSONATION 0x0200
4933 #define THREAD_SET_LIMITED_INFORMATION 0x0400
4934 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
4935 #define THREAD_RESUME 0x1000
4936 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff)
4938 #define THREAD_BASE_PRIORITY_LOWRT 15
4939 #define THREAD_BASE_PRIORITY_MAX 2
4940 #define THREAD_BASE_PRIORITY_MIN -2
4941 #define THREAD_BASE_PRIORITY_IDLE -15
4943 typedef struct _QUOTA_LIMITS
{
4944 SIZE_T PagedPoolLimit
;
4945 SIZE_T NonPagedPoolLimit
;
4946 SIZE_T MinimumWorkingSetSize
;
4947 SIZE_T MaximumWorkingSetSize
;
4948 SIZE_T PagefileLimit
;
4949 LARGE_INTEGER TimeLimit
;
4950 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
4952 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
4953 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
4954 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
4955 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
4957 typedef struct _QUOTA_LIMITS_EX
{
4958 SIZE_T PagedPoolLimit
;
4959 SIZE_T NonPagedPoolLimit
;
4960 SIZE_T MinimumWorkingSetSize
;
4961 SIZE_T MaximumWorkingSetSize
;
4962 SIZE_T PagefileLimit
;
4963 LARGE_INTEGER TimeLimit
;
4970 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
4972 #define SECTION_QUERY 0x0001
4973 #define SECTION_MAP_WRITE 0x0002
4974 #define SECTION_MAP_READ 0x0004
4975 #define SECTION_MAP_EXECUTE 0x0008
4976 #define SECTION_EXTEND_SIZE 0x0010
4977 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
4978 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x01f)
4980 #define FILE_READ_DATA 0x0001 /* file & pipe */
4981 #define FILE_LIST_DIRECTORY 0x0001 /* directory */
4982 #define FILE_WRITE_DATA 0x0002 /* file & pipe */
4983 #define FILE_ADD_FILE 0x0002 /* directory */
4984 #define FILE_APPEND_DATA 0x0004 /* file */
4985 #define FILE_ADD_SUBDIRECTORY 0x0004 /* directory */
4986 #define FILE_CREATE_PIPE_INSTANCE 0x0004 /* named pipe */
4987 #define FILE_READ_EA 0x0008 /* file & directory */
4988 #define FILE_READ_PROPERTIES FILE_READ_EA
4989 #define FILE_WRITE_EA 0x0010 /* file & directory */
4990 #define FILE_WRITE_PROPERTIES FILE_WRITE_EA
4991 #define FILE_EXECUTE 0x0020 /* file */
4992 #define FILE_TRAVERSE 0x0020 /* directory */
4993 #define FILE_DELETE_CHILD 0x0040 /* directory */
4994 #define FILE_READ_ATTRIBUTES 0x0080 /* all */
4995 #define FILE_WRITE_ATTRIBUTES 0x0100 /* all */
4996 #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
4998 #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | \
4999 FILE_READ_ATTRIBUTES | FILE_READ_EA | \
5001 #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \
5002 FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \
5003 FILE_APPEND_DATA | SYNCHRONIZE)
5004 #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
5005 FILE_READ_ATTRIBUTES | SYNCHRONIZE)
5007 #define DUPLICATE_CLOSE_SOURCE 0x00000001
5008 #define DUPLICATE_SAME_ACCESS 0x00000002
5010 /* File attribute flags */
5011 #define FILE_SHARE_READ 0x00000001
5012 #define FILE_SHARE_WRITE 0x00000002
5013 #define FILE_SHARE_DELETE 0x00000004
5015 #define FILE_ATTRIBUTE_READONLY 0x00000001
5016 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
5017 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
5018 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
5019 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
5020 #define FILE_ATTRIBUTE_DEVICE 0x00000040
5021 #define FILE_ATTRIBUTE_NORMAL 0x00000080
5022 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
5023 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
5024 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
5025 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
5026 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
5027 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
5028 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
5029 #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000
5030 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
5031 #define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000
5032 #define FILE_ATTRIBUTE_EA 0x00040000
5034 /* File notification flags */
5035 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
5036 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
5037 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
5038 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
5039 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
5040 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
5041 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
5042 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
5043 #define FILE_NOTIFY_CHANGE_EA 0x00000080
5044 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
5045 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
5046 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
5047 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
5049 #define FILE_ACTION_ADDED 0x00000001
5050 #define FILE_ACTION_REMOVED 0x00000002
5051 #define FILE_ACTION_MODIFIED 0x00000003
5052 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
5053 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
5054 #define FILE_ACTION_ADDED_STREAM 0x00000006
5055 #define FILE_ACTION_REMOVED_STREAM 0x00000007
5056 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
5057 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
5058 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000a
5059 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000b
5061 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
5062 #define FILE_CASE_PRESERVED_NAMES 0x00000002
5063 #define FILE_UNICODE_ON_DISK 0x00000004
5064 #define FILE_PERSISTENT_ACLS 0x00000008
5065 #define FILE_FILE_COMPRESSION 0x00000010
5066 #define FILE_VOLUME_QUOTAS 0x00000020
5067 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
5068 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
5069 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
5070 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
5071 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
5072 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
5073 #define FILE_NAMED_STREAMS 0x00040000
5074 #define FILE_READ_ONLY_VOLUME 0x00080000
5075 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
5076 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
5077 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
5078 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
5079 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
5080 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
5081 #define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000
5082 #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000
5083 #define FILE_SUPPORTS_SPARSE_VDL 0x10000000
5085 /* File alignments (NT) */
5086 #define FILE_BYTE_ALIGNMENT 0x00000000
5087 #define FILE_WORD_ALIGNMENT 0x00000001
5088 #define FILE_LONG_ALIGNMENT 0x00000003
5089 #define FILE_QUAD_ALIGNMENT 0x00000007
5090 #define FILE_OCTA_ALIGNMENT 0x0000000f
5091 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
5092 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
5093 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
5094 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
5095 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
5097 #define COMPRESSION_FORMAT_NONE 0
5098 #define COMPRESSION_FORMAT_DEFAULT 1
5099 #define COMPRESSION_FORMAT_LZNT1 2
5100 #define COMPRESSION_ENGINE_STANDARD 0
5101 #define COMPRESSION_ENGINE_MAXIMUM 256
5103 #define MAILSLOT_NO_MESSAGE ((DWORD)-1)
5104 #define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
5106 #define REG_NONE 0 /* no type */
5107 #define REG_SZ 1 /* string type (ASCII) */
5108 #define REG_EXPAND_SZ 2 /* string, includes %ENVVAR% (expanded by caller) (ASCII) */
5109 #define REG_BINARY 3 /* binary format, callerspecific */
5110 /* YES, REG_DWORD == REG_DWORD_LITTLE_ENDIAN */
5111 #define REG_DWORD 4 /* DWORD in little endian format */
5112 #define REG_DWORD_LITTLE_ENDIAN 4 /* DWORD in little endian format */
5113 #define REG_DWORD_BIG_ENDIAN 5 /* DWORD in big endian format */
5114 #define REG_LINK 6 /* symbolic link (UNICODE) */
5115 #define REG_MULTI_SZ 7 /* multiple strings, delimited by \0, terminated by \0\0 (ASCII) */
5116 #define REG_RESOURCE_LIST 8 /* resource list? huh? */
5117 #define REG_FULL_RESOURCE_DESCRIPTOR 9 /* full resource descriptor? huh? */
5118 #define REG_RESOURCE_REQUIREMENTS_LIST 10
5119 #define REG_QWORD 11 /* QWORD in little endian format */
5120 #define REG_QWORD_LITTLE_ENDIAN 11 /* QWORD in little endian format */
5122 /* ----------------------------- begin power management --------------------- */
5124 typedef enum _LATENCY_TIME
{
5127 } LATENCY_TIME
, *PLATENCY_TIME
;
5129 #define DISCHARGE_POLICY_CRITICAL 0
5130 #define DISCHARGE_POLICY_LOW 1
5131 #define NUM_DISCHARGE_POLICIES 4
5133 #define PO_THROTTLE_NONE 0
5134 #define PO_THROTTLE_CONSTANT 1
5135 #define PO_THROTTLE_DEGRADE 2
5136 #define PO_THROTTLE_ADAPTIVE 3
5138 typedef enum _POWER_ACTION
{
5139 PowerActionNone
= 0,
5140 PowerActionReserved
,
5142 PowerActionHibernate
,
5143 PowerActionShutdown
,
5144 PowerActionShutdownReset
,
5145 PowerActionShutdownOff
,
5146 PowerActionWarmEject
5150 typedef enum _POWER_PLATFORM_ROLE
{
5151 PlatformRoleUnspecified
,
5152 PlatformRoleDesktop
,
5154 PlatformRoleWorkstation
,
5155 PlatformRoleEnterpriseServer
,
5156 PlatformRoleSOHOServer
,
5157 PlatformRoleAppliancePC
,
5158 PlatformRolePerformanceServer
,
5161 } POWER_PLATFORM_ROLE
, *PPOWER_PLATFORM_ROLE
;
5163 typedef enum _SYSTEM_POWER_STATE
{
5164 PowerSystemUnspecified
= 0,
5165 PowerSystemWorking
= 1,
5166 PowerSystemSleeping1
= 2,
5167 PowerSystemSleeping2
= 3,
5168 PowerSystemSleeping3
= 4,
5169 PowerSystemHibernate
= 5,
5170 PowerSystemShutdown
= 6,
5171 PowerSystemMaximum
= 7
5172 } SYSTEM_POWER_STATE
,
5173 *PSYSTEM_POWER_STATE
;
5175 typedef enum _DEVICE_POWER_STATE
{
5176 PowerDeviceUnspecified
,
5182 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
5184 typedef enum _POWER_INFORMATION_LEVEL
{
5185 SystemPowerPolicyAc
,
5186 SystemPowerPolicyDc
,
5187 VerifySystemPolicyAc
,
5188 VerifySystemPolicyDc
,
5189 SystemPowerCapabilities
,
5191 SystemPowerStateHandler
,
5192 ProcessorStateHandler
,
5193 SystemPowerPolicyCurrent
,
5194 AdministratorPowerPolicy
,
5195 SystemReserveHiberFile
,
5196 ProcessorInformation
,
5197 SystemPowerInformation
,
5198 ProcessorStateHandler2
,
5201 SystemExecutionState
,
5202 SystemPowerStateNotifyHandler
,
5203 ProcessorPowerPolicyAc
,
5204 ProcessorPowerPolicyDc
,
5205 VerifyProcessorPowerPolicyAc
,
5206 VerifyProcessorPowerPolicyDc
,
5207 ProcessorPowerPolicyCurrent
5208 } POWER_INFORMATION_LEVEL
;
5210 typedef struct _ADMINISTRATOR_POWER_POLICY
{
5211 SYSTEM_POWER_STATE MinSleep
;
5212 SYSTEM_POWER_STATE MaxSleep
;
5213 ULONG MinVideoTimeout
;
5214 ULONG MaxVideoTimeout
;
5215 ULONG MinSpindownTimeout
;
5216 ULONG MaxSpindownTimeout
;
5217 } ADMINISTRATOR_POWER_POLICY
, *PADMINISTRATOR_POWER_POLICY
;
5222 } BATTERY_REPORTING_SCALE
,
5223 *PBATTERY_REPORTING_SCALE
;
5226 POWER_ACTION Action
;
5229 } POWER_ACTION_POLICY
,
5230 *PPOWER_ACTION_POLICY
;
5232 typedef struct _PROCESSOR_POWER_INFORMATION
{
5238 ULONG CurrentIdleState
;
5239 } PROCESSOR_POWER_INFORMATION
,
5240 *PPROCESSOR_POWER_INFORMATION
;
5242 typedef struct _PROCESSOR_POWER_POLICY_INFO
{
5246 UCHAR DemotePercent
;
5247 UCHAR PromotePercent
;
5249 ULONG AllowDemotion
:1;
5250 ULONG AllowPromotion
:1;
5252 } PROCESSOR_POWER_POLICY_INFO
,
5253 *PPROCESSOR_POWER_POLICY_INFO
;
5255 typedef struct _PROCESSOR_POWER_POLICY
{
5257 BYTE DynamicThrottle
;
5259 DWORD DisableCStates
:1;
5262 PROCESSOR_POWER_POLICY_INFO Policy
[3];
5263 } PROCESSOR_POWER_POLICY
,
5264 *PPROCESSOR_POWER_POLICY
;
5268 BOOLEAN BatteryPresent
;
5270 BOOLEAN Discharging
;
5273 ULONG RemainingCapacity
;
5275 ULONG EstimatedTime
;
5276 ULONG DefaultAlert1
;
5277 ULONG DefaultAlert2
;
5278 } SYSTEM_BATTERY_STATE
,
5279 *PSYSTEM_BATTERY_STATE
;
5282 BOOLEAN PowerButtonPresent
;
5283 BOOLEAN SleepButtonPresent
;
5290 BOOLEAN HiberFilePresent
;
5292 BOOLEAN VideoDimPresent
;
5295 BOOLEAN ThermalControl
;
5296 BOOLEAN ProcessorThrottle
;
5297 UCHAR ProcessorMinThrottle
;
5298 UCHAR ProcessorMaxThrottle
;
5300 BOOLEAN DiskSpinDown
;
5302 BOOLEAN SystemBatteriesPresent
;
5303 BOOLEAN BatteriesAreShortTerm
;
5304 BATTERY_REPORTING_SCALE BatteryScale
[3];
5305 SYSTEM_POWER_STATE AcOnLineWake
;
5306 SYSTEM_POWER_STATE SoftLidWake
;
5307 SYSTEM_POWER_STATE RtcWake
;
5308 SYSTEM_POWER_STATE MinDeviceWakeState
;
5309 SYSTEM_POWER_STATE DefaultLowLatencyWake
;
5310 } SYSTEM_POWER_CAPABILITIES
,
5311 *PSYSTEM_POWER_CAPABILITIES
;
5313 typedef struct _SYSTEM_POWER_INFORMATION
{
5314 ULONG MaxIdlenessAllowed
;
5316 ULONG TimeRemaining
;
5318 } SYSTEM_POWER_INFORMATION
,
5319 *PSYSTEM_POWER_INFORMATION
;
5321 typedef struct _SYSTEM_POWER_LEVEL
{
5325 POWER_ACTION_POLICY PowerPolicy
;
5326 SYSTEM_POWER_STATE MinSystemState
;
5327 } SYSTEM_POWER_LEVEL
,
5328 *PSYSTEM_POWER_LEVEL
;
5330 typedef struct _SYSTEM_POWER_POLICY
{
5332 POWER_ACTION_POLICY PowerButton
;
5333 POWER_ACTION_POLICY SleepButton
;
5334 POWER_ACTION_POLICY LidClose
;
5335 SYSTEM_POWER_STATE LidOpenWake
;
5337 POWER_ACTION_POLICY Idle
;
5339 UCHAR IdleSensitivity
;
5340 UCHAR DynamicThrottle
;
5342 SYSTEM_POWER_STATE MinSleep
;
5343 SYSTEM_POWER_STATE MaxSleep
;
5344 SYSTEM_POWER_STATE ReducedLatencySleep
;
5345 ULONG WinLogonFlags
;
5347 ULONG DozeS4Timeout
;
5348 ULONG BroadcastCapacityResolution
;
5349 SYSTEM_POWER_LEVEL DischargePolicy
[NUM_DISCHARGE_POLICIES
];
5351 BOOLEAN VideoDimDisplay
;
5352 ULONG VideoReserved
[3];
5353 ULONG SpindownTimeout
;
5354 BOOLEAN OptimizeForPower
;
5355 UCHAR FanThrottleTolerance
;
5356 UCHAR ForcedThrottle
;
5358 POWER_ACTION_POLICY OverThrottled
;
5359 } SYSTEM_POWER_POLICY
,
5360 *PSYSTEM_POWER_POLICY
;
5362 typedef union _FILE_SEGMENT_ELEMENT
{
5364 ULONGLONG Alignment
;
5365 } FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
5367 typedef struct _FILE_NOTIFY_INFORMATION
{
5368 DWORD NextEntryOffset
;
5370 DWORD FileNameLength
;
5372 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
5374 /* ----------------------------- begin tape storage --------------------- */
5376 #define TAPE_FIXED_PARTITIONS 0
5377 #define TAPE_SELECT_PARTITIONS 1
5378 #define TAPE_INITIATOR_PARTITIONS 2
5379 #define TAPE_ERASE_SHORT 0
5380 #define TAPE_ERASE_LONG 1
5382 #define TAPE_UNLOAD 1
5383 #define TAPE_TENSION 2
5385 #define TAPE_UNLOCK 4
5386 #define TAPE_FORMAT 5
5387 #define TAPE_SETMARKS 0
5388 #define TAPE_FILEMARKS 1
5389 #define TAPE_SHORT_FILEMARKS 2
5390 #define TAPE_LONG_FILEMARKS 3
5391 #define TAPE_REWIND 0
5392 #define TAPE_ABSOLUTE_BLOCK 1
5393 #define TAPE_LOGICAL_BLOCK 2
5394 #define TAPE_PSEUDO_LOGICAL_BLOCK 3
5395 #define TAPE_SPACE_END_OF_DATA 4
5396 #define TAPE_SPACE_RELATIVE_BLOCKS 5
5397 #define TAPE_SPACE_FILEMARKS 6
5398 #define TAPE_SPACE_SEQUENTIAL_FMKS 7
5399 #define TAPE_SPACE_SETMARKS 8
5400 #define TAPE_SPACE_SEQUENTIAL_SMKS 9
5402 typedef struct _TAPE_CREATE_PARTITION
{
5406 } TAPE_CREATE_PARTITION
, *PTAPE_CREATE_PARTITION
;
5408 typedef struct _TAPE_ERASE
{
5411 } TAPE_ERASE
, *PTAPE_ERASE
;
5413 typedef struct _TAPE_PREPARE
{
5416 } TAPE_PREPARE
, *PTAPE_PREPARE
;
5418 typedef struct _TAPE_SET_DRIVE_PARAMETERS
{
5420 BOOLEAN Compression
;
5421 BOOLEAN DataPadding
;
5422 BOOLEAN ReportSetmarks
;
5423 ULONG EOTWarningZoneSize
;
5424 } TAPE_SET_DRIVE_PARAMETERS
, *PTAPE_SET_DRIVE_PARAMETERS
;
5426 typedef struct _TAPE_SET_MEDIA_PARAMETERS
{
5428 } TAPE_SET_MEDIA_PARAMETERS
, *PTAPE_SET_MEDIA_PARAMETERS
;
5430 typedef struct _TAPE_WRITE_MARKS
{
5434 } TAPE_WRITE_MARKS
, *PTAPE_WRITE_MARKS
;
5436 typedef struct _TAPE_GET_POSITION
{
5441 } TAPE_GET_POSITION
, *PTAPE_GET_POSITION
;
5443 typedef struct _TAPE_SET_POSITION
{
5446 LARGE_INTEGER Offset
;
5448 } TAPE_SET_POSITION
, *PTAPE_SET_POSITION
;
5450 typedef struct _TAPE_GET_DRIVE_PARAMETERS
{
5452 BOOLEAN Compression
;
5453 BOOLEAN DataPadding
;
5454 BOOLEAN ReportSetmarks
;
5455 DWORD DefaultBlockSize
;
5456 DWORD MaximumBlockSize
;
5457 DWORD MinimumBlockSize
;
5458 DWORD MaximumPartitionCount
;
5461 DWORD EOTWarningZoneSize
;
5462 } TAPE_GET_DRIVE_PARAMETERS
, *PTAPE_GET_DRIVE_PARAMETERS
;
5464 typedef struct _TAPE_GET_MEDIA_PARAMETERS
{
5465 LARGE_INTEGER Capacity
;
5466 LARGE_INTEGER Remaining
;
5468 DWORD PartitionCount
;
5469 BOOLEAN WriteProtected
;
5470 } TAPE_GET_MEDIA_PARAMETERS
, *PTAPE_GET_MEDIA_PARAMETERS
;
5472 /* ----------------------------- begin registry ----------------------------- */
5474 /* Registry security values */
5475 #define OWNER_SECURITY_INFORMATION 0x00000001
5476 #define GROUP_SECURITY_INFORMATION 0x00000002
5477 #define DACL_SECURITY_INFORMATION 0x00000004
5478 #define SACL_SECURITY_INFORMATION 0x00000008
5479 #define LABEL_SECURITY_INFORMATION 0x00000010
5481 #define REG_OPTION_RESERVED 0x00000000
5482 #define REG_OPTION_NON_VOLATILE 0x00000000
5483 #define REG_OPTION_VOLATILE 0x00000001
5484 #define REG_OPTION_CREATE_LINK 0x00000002
5485 #define REG_OPTION_BACKUP_RESTORE 0x00000004 /* FIXME */
5486 #define REG_OPTION_OPEN_LINK 0x00000008
5487 #define REG_LEGAL_OPTION (REG_OPTION_RESERVED | \
5488 REG_OPTION_NON_VOLATILE | \
5489 REG_OPTION_VOLATILE | \
5490 REG_OPTION_CREATE_LINK | \
5491 REG_OPTION_BACKUP_RESTORE | \
5492 REG_OPTION_OPEN_LINK)
5495 #define REG_CREATED_NEW_KEY 0x00000001
5496 #define REG_OPENED_EXISTING_KEY 0x00000002
5498 /* For RegNotifyChangeKeyValue */
5499 #define REG_NOTIFY_CHANGE_NAME 0x01
5500 #define REG_NOTIFY_CHANGE_ATTRIBUTES 0x02
5501 #define REG_NOTIFY_CHANGE_LAST_SET 0x04
5502 #define REG_NOTIFY_CHANGE_SECURITY 0x08
5503 #define REG_NOTIFY_THREAD_AGNOSTIC 0x10000000
5505 #define KEY_QUERY_VALUE 0x00000001
5506 #define KEY_SET_VALUE 0x00000002
5507 #define KEY_CREATE_SUB_KEY 0x00000004
5508 #define KEY_ENUMERATE_SUB_KEYS 0x00000008
5509 #define KEY_NOTIFY 0x00000010
5510 #define KEY_CREATE_LINK 0x00000020
5511 #define KEY_WOW64_64KEY 0x00000100
5512 #define KEY_WOW64_32KEY 0x00000200
5513 #define KEY_WOW64_RES 0x00000300
5515 /* for RegKeyRestore flags */
5516 #define REG_WHOLE_HIVE_VOLATILE 0x00000001
5517 #define REG_REFRESH_HIVE 0x00000002
5518 #define REG_NO_LAZY_FLUSH 0x00000004
5519 #define REG_FORCE_RESTORE 0x00000008
5521 #define KEY_READ ((STANDARD_RIGHTS_READ| \
5523 KEY_ENUMERATE_SUB_KEYS| \
5527 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE| \
5529 KEY_CREATE_SUB_KEY) \
5532 #define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE))
5533 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL| \
5536 KEY_CREATE_SUB_KEY| \
5537 KEY_ENUMERATE_SUB_KEYS| \
5542 /* ------------------------------ end registry ------------------------------ */
5545 #define EVENTLOG_SUCCESS 0x0000
5546 #define EVENTLOG_ERROR_TYPE 0x0001
5547 #define EVENTLOG_WARNING_TYPE 0x0002
5548 #define EVENTLOG_INFORMATION_TYPE 0x0004
5549 #define EVENTLOG_AUDIT_SUCCESS 0x0008
5550 #define EVENTLOG_AUDIT_FAILURE 0x0010
5552 #define EVENTLOG_SEQUENTIAL_READ 0x0001
5553 #define EVENTLOG_SEEK_READ 0x0002
5554 #define EVENTLOG_FORWARDS_READ 0x0004
5555 #define EVENTLOG_BACKWARDS_READ 0x0008
5557 typedef struct _EVENTLOGRECORD
{
5561 DWORD TimeGenerated
;
5568 DWORD ClosingRecordNumber
;
5570 DWORD UserSidLength
;
5571 DWORD UserSidOffset
;
5574 } EVENTLOGRECORD
, *PEVENTLOGRECORD
;
5576 #define SERVICE_BOOT_START 0x00000000
5577 #define SERVICE_SYSTEM_START 0x00000001
5578 #define SERVICE_AUTO_START 0x00000002
5579 #define SERVICE_DEMAND_START 0x00000003
5580 #define SERVICE_DISABLED 0x00000004
5582 #define SERVICE_ERROR_IGNORE 0x00000000
5583 #define SERVICE_ERROR_NORMAL 0x00000001
5584 #define SERVICE_ERROR_SEVERE 0x00000002
5585 #define SERVICE_ERROR_CRITICAL 0x00000003
5588 #define SERVICE_KERNEL_DRIVER 0x00000001
5589 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
5590 #define SERVICE_ADAPTER 0x00000004
5591 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
5593 #define SERVICE_DRIVER ( SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | \
5594 SERVICE_RECOGNIZER_DRIVER )
5596 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
5597 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
5598 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
5600 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
5602 #define SERVICE_TYPE_ALL ( SERVICE_WIN32 | SERVICE_ADAPTER | \
5603 SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS )
5606 typedef enum _CM_SERVICE_NODE_TYPE
5608 DriverType
= SERVICE_KERNEL_DRIVER
,
5609 FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,
5610 Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
5611 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,
5612 AdapterType
= SERVICE_ADAPTER
,
5613 RecognizerType
= SERVICE_RECOGNIZER_DRIVER
5614 } SERVICE_NODE_TYPE
;
5616 typedef enum _CM_SERVICE_LOAD_TYPE
5618 BootLoad
= SERVICE_BOOT_START
,
5619 SystemLoad
= SERVICE_SYSTEM_START
,
5620 AutoLoad
= SERVICE_AUTO_START
,
5621 DemandLoad
= SERVICE_DEMAND_START
,
5622 DisableLoad
= SERVICE_DISABLED
5623 } SERVICE_LOAD_TYPE
;
5625 typedef enum _CM_ERROR_CONTROL_TYPE
5627 IgnoreError
= SERVICE_ERROR_IGNORE
,
5628 NormalError
= SERVICE_ERROR_NORMAL
,
5629 SevereError
= SERVICE_ERROR_SEVERE
,
5630 CriticalError
= SERVICE_ERROR_CRITICAL
5631 } SERVICE_ERROR_TYPE
;
5633 NTSYSAPI SIZE_T WINAPI
RtlCompareMemory(const VOID
*, const VOID
*, SIZE_T
);
5635 #define RtlEqualMemory(Destination, Source, Length) (!memcmp((Destination),(Source),(Length)))
5636 #define RtlMoveMemory(Destination, Source, Length) memmove((Destination),(Source),(Length))
5637 #define RtlCopyMemory(Destination, Source, Length) memcpy((Destination),(Source),(Length))
5638 #define RtlFillMemory(Destination, Length, Fill) memset((Destination),(Fill),(Length))
5639 #define RtlZeroMemory(Destination, Length) memset((Destination),0,(Length))
5641 static FORCEINLINE
void *RtlSecureZeroMemory(void *buffer
, SIZE_T length
)
5643 volatile char *ptr
= (volatile char *)buffer
;
5645 while (length
--) *ptr
++ = 0;
5649 #include <guiddef.h>
5651 typedef struct _OBJECT_TYPE_LIST
{
5655 } OBJECT_TYPE_LIST
, *POBJECT_TYPE_LIST
;
5657 typedef struct _RTL_CRITICAL_SECTION_DEBUG
5660 WORD CreatorBackTraceIndex
;
5661 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
5662 LIST_ENTRY ProcessLocksList
;
5664 DWORD ContentionCount
;
5665 #ifdef __WINESRC__ /* in Wine we store the name here */
5666 DWORD_PTR Spare
[8/sizeof(DWORD_PTR
)];
5670 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
5672 typedef struct _RTL_CRITICAL_SECTION
{
5673 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
5675 LONG RecursionCount
;
5676 HANDLE OwningThread
;
5677 HANDLE LockSemaphore
;
5678 ULONG_PTR SpinCount
;
5679 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
5681 #define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x1000000
5682 #define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x2000000
5683 #define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x4000000
5684 #define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xFF000000
5685 #define RTL_CRITICAL_SECTION_FLAG_RESERVED (RTL_CRITICAL_SECTION_ALL_FLAG_BITS & ~0x7000000)
5687 typedef struct _RTL_SRWLOCK
{
5689 } RTL_SRWLOCK
, *PRTL_SRWLOCK
;
5691 #define RTL_SRWLOCK_INIT {0}
5693 typedef struct _RTL_CONDITION_VARIABLE
{
5695 } RTL_CONDITION_VARIABLE
, *PRTL_CONDITION_VARIABLE
;
5696 #define RTL_CONDITION_VARIABLE_INIT {0}
5697 #define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1
5699 typedef VOID (NTAPI
* WAITORTIMERCALLBACKFUNC
) (PVOID
, BOOLEAN
);
5700 typedef VOID (NTAPI
* PFLS_CALLBACK_FUNCTION
) ( PVOID
);
5702 #define RTL_RUN_ONCE_INIT {0}
5703 typedef union _RTL_RUN_ONCE
{
5705 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
5707 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001
5708 #define RTL_RUN_ONCE_ASYNC 0x00000002
5709 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004
5711 typedef DWORD WINAPI
RTL_RUN_ONCE_INIT_FN(PRTL_RUN_ONCE
, PVOID
, PVOID
*);
5712 typedef RTL_RUN_ONCE_INIT_FN
*PRTL_RUN_ONCE_INIT_FN
;
5713 NTSYSAPI VOID WINAPI
RtlRunOnceInitialize(PRTL_RUN_ONCE
);
5714 NTSYSAPI DWORD WINAPI
RtlRunOnceExecuteOnce(PRTL_RUN_ONCE
,PRTL_RUN_ONCE_INIT_FN
,PVOID
,PVOID
*);
5715 NTSYSAPI DWORD WINAPI
RtlRunOnceBeginInitialize(PRTL_RUN_ONCE
, DWORD
, PVOID
*);
5716 NTSYSAPI DWORD WINAPI
RtlRunOnceComplete(PRTL_RUN_ONCE
, DWORD
, PVOID
);
5718 #include <pshpack8.h>
5719 typedef struct _IO_COUNTERS
{
5720 ULONGLONG
DECLSPEC_ALIGN(8) ReadOperationCount
;
5721 ULONGLONG
DECLSPEC_ALIGN(8) WriteOperationCount
;
5722 ULONGLONG
DECLSPEC_ALIGN(8) OtherOperationCount
;
5723 ULONGLONG
DECLSPEC_ALIGN(8) ReadTransferCount
;
5724 ULONGLONG
DECLSPEC_ALIGN(8) WriteTransferCount
;
5725 ULONGLONG
DECLSPEC_ALIGN(8) OtherTransferCount
;
5726 } IO_COUNTERS
, *PIO_COUNTERS
;
5727 #include <poppack.h>
5730 DWORD dwOSVersionInfoSize
;
5731 DWORD dwMajorVersion
;
5732 DWORD dwMinorVersion
;
5733 DWORD dwBuildNumber
;
5735 CHAR szCSDVersion
[128];
5736 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
5739 DWORD dwOSVersionInfoSize
;
5740 DWORD dwMajorVersion
;
5741 DWORD dwMinorVersion
;
5742 DWORD dwBuildNumber
;
5744 WCHAR szCSDVersion
[128];
5745 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
5747 DECL_WINELIB_TYPE_AW(OSVERSIONINFO
)
5748 DECL_WINELIB_TYPE_AW(POSVERSIONINFO
)
5749 DECL_WINELIB_TYPE_AW(LPOSVERSIONINFO
)
5752 DWORD dwOSVersionInfoSize
;
5753 DWORD dwMajorVersion
;
5754 DWORD dwMinorVersion
;
5755 DWORD dwBuildNumber
;
5757 CHAR szCSDVersion
[128];
5758 WORD wServicePackMajor
;
5759 WORD wServicePackMinor
;
5763 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
5766 DWORD dwOSVersionInfoSize
;
5767 DWORD dwMajorVersion
;
5768 DWORD dwMinorVersion
;
5769 DWORD dwBuildNumber
;
5771 WCHAR szCSDVersion
[128];
5772 WORD wServicePackMajor
;
5773 WORD wServicePackMinor
;
5777 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
5779 DECL_WINELIB_TYPE_AW(OSVERSIONINFOEX
)
5780 DECL_WINELIB_TYPE_AW(POSVERSIONINFOEX
)
5781 DECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX
)
5783 NTSYSAPI ULONGLONG WINAPI
VerSetConditionMask(ULONGLONG
,DWORD
,BYTE
);
5785 #define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
5787 #define VER_PLATFORM_WIN32s 0
5788 #define VER_PLATFORM_WIN32_WINDOWS 1
5789 #define VER_PLATFORM_WIN32_NT 2
5791 #define VER_MINORVERSION 0x00000001
5792 #define VER_MAJORVERSION 0x00000002
5793 #define VER_BUILDNUMBER 0x00000004
5794 #define VER_PLATFORMID 0x00000008
5795 #define VER_SERVICEPACKMINOR 0x00000010
5796 #define VER_SERVICEPACKMAJOR 0x00000020
5797 #define VER_SUITENAME 0x00000040
5798 #define VER_PRODUCT_TYPE 0x00000080
5800 #define VER_NT_WORKSTATION 1
5801 #define VER_NT_DOMAIN_CONTROLLER 2
5802 #define VER_NT_SERVER 3
5804 #define VER_SUITE_SMALLBUSINESS 0x00000001
5805 #define VER_SUITE_ENTERPRISE 0x00000002
5806 #define VER_SUITE_BACKOFFICE 0x00000004
5807 #define VER_SUITE_COMMUNICATIONS 0x00000008
5808 #define VER_SUITE_TERMINAL 0x00000010
5809 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
5810 #define VER_SUITE_EMBEDDEDNT 0x00000040
5811 #define VER_SUITE_DATACENTER 0x00000080
5812 #define VER_SUITE_SINGLEUSERTS 0x00000100
5813 #define VER_SUITE_PERSONAL 0x00000200
5814 #define VER_SUITE_BLADE 0x00000400
5815 #define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
5816 #define VER_SUITE_SECURITY_APPLIANCE 0x00001000
5817 #define VER_SUITE_STORAGE_SERVER 0x00002000
5818 #define VER_SUITE_COMPUTE_SERVER 0x00004000
5819 #define VER_SUITE_WH_SERVER 0x00008000
5822 #define VER_GREATER 2
5823 #define VER_GREATER_EQUAL 3
5825 #define VER_LESS_EQUAL 5
5829 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION
{
5831 DWORD ulFormatVersion
;
5832 DWORD ulAssemblyCount
;
5833 DWORD ulRootManifestPathType
;
5834 DWORD ulRootManifestPathChars
;
5835 DWORD ulRootConfigurationPathType
;
5836 DWORD ulRootConfigurationPathChars
;
5837 DWORD ulAppDirPathType
;
5838 DWORD ulAppDirPathChars
;
5839 PCWSTR lpRootManifestPath
;
5840 PCWSTR lpRootConfigurationPath
;
5841 PCWSTR lpAppDirPath
;
5842 } ACTIVATION_CONTEXT_DETAILED_INFORMATION
, *PACTIVATION_CONTEXT_DETAILED_INFORMATION
;
5844 typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
{
5846 DWORD ulEncodedAssemblyIdentityLength
;
5847 DWORD ulManifestPathType
;
5848 DWORD ulManifestPathLength
;
5849 LARGE_INTEGER liManifestLastWriteTime
;
5850 DWORD ulPolicyPathType
;
5851 DWORD ulPolicyPathLength
;
5852 LARGE_INTEGER liPolicyLastWriteTime
;
5853 DWORD ulMetadataSatelliteRosterIndex
;
5854 DWORD ulManifestVersionMajor
;
5855 DWORD ulManifestVersionMinor
;
5856 DWORD ulPolicyVersionMajor
;
5857 DWORD ulPolicyVersionMinor
;
5858 DWORD ulAssemblyDirectoryNameLength
;
5859 PCWSTR lpAssemblyEncodedAssemblyIdentity
;
5860 PCWSTR lpAssemblyManifestPath
;
5861 PCWSTR lpAssemblyPolicyPath
;
5862 PCWSTR lpAssemblyDirectoryName
;
5864 } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
;
5866 typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX
{
5867 DWORD ulAssemblyIndex
;
5868 DWORD ulFileIndexInAssembly
;
5869 } ACTIVATION_CONTEXT_QUERY_INDEX
, *PACTIVATION_CONTEXT_QUERY_INDEX
;
5871 typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX
*PCACTIVATION_CONTEXT_QUERY_INDEX
;
5873 typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION
{
5875 DWORD ulFilenameLength
;
5879 } ASSEMBLY_FILE_DETAILED_INFORMATION
, *PASSEMBLY_FILE_DETAILED_INFORMATION
;
5881 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION
*PCASSEMBLY_FILE_DETAILED_INFORMATION
;
5884 ACTCX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN
= 0,
5885 ACTCX_COMPATIBILITY_ELEMENT_TYPE_OS
5886 } ACTCTX_COMPATIBILITY_ELEMENT_TYPE
;
5888 typedef struct _COMPATIBILITY_CONTEXT_ELEMENT
{
5890 ACTCTX_COMPATIBILITY_ELEMENT_TYPE Type
;
5891 } COMPATIBILITY_CONTEXT_ELEMENT
, *PCOMPATIBILITY_CONTEXT_ELEMENT
;
5893 #if !defined(__WINESRC__) && (defined(_MSC_EXTENSIONS) || ((defined(__GNUC__) && __GNUC__ >= 3)))
5894 typedef struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
{
5896 COMPATIBILITY_CONTEXT_ELEMENT Elements
[];
5897 } ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
, *PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
;
5901 ACTCTX_RUN_LEVEL_UNSPECIFIED
= 0,
5902 ACTCTX_RUN_LEVEL_AS_INVOKER
,
5903 ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE
,
5904 ACTCTX_RUN_LEVEL_REQUIRE_ADMIN
,
5905 ACTCTX_RUN_LEVEL_NUMBERS
5906 } ACTCTX_REQUESTED_RUN_LEVEL
;
5908 typedef struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
{
5910 ACTCTX_REQUESTED_RUN_LEVEL RunLevel
;
5912 } ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
, *PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
;
5914 typedef const struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
*PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
;
5916 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS
{
5917 ActivationContextBasicInformation
= 1,
5918 ActivationContextDetailedInformation
= 2,
5919 AssemblyDetailedInformationInActivationContext
= 3,
5920 FileInformationInAssemblyOfAssemblyInActivationContext
= 4,
5921 RunlevelInformationInActivationContext
= 5,
5922 CompatibilityInformationInActivationContext
= 6,
5923 ActivationContextManifestResourceName
= 7,
5924 MaxActivationContextInfoClass
,
5925 AssemblyDetailedInformationInActivationContxt
= AssemblyDetailedInformationInActivationContext
,
5926 FileInformationInAssemblyOfAssemblyInActivationContxt
= FileInformationInAssemblyOfAssemblyInActivationContext
5927 } ACTIVATION_CONTEXT_INFO_CLASS
;
5929 #define ACTIVATION_CONTEXT_PATH_TYPE_NONE 1
5930 #define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE 2
5931 #define ACTIVATION_CONTEXT_PATH_TYPE_URL 3
5932 #define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF 4
5934 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
5935 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
5936 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
5937 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
5938 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
5939 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
5940 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
5941 #define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE 8
5942 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
5943 #define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS 10
5944 #define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO 11
5946 typedef enum _JOBOBJECTINFOCLASS
5948 JobObjectBasicAccountingInformation
= 1,
5949 JobObjectBasicLimitInformation
,
5950 JobObjectBasicProcessIdList
,
5951 JobObjectBasicUIRestrictions
,
5952 JobObjectSecurityLimitInformation
,
5953 JobObjectEndOfJobTimeInformation
,
5954 JobObjectAssociateCompletionPortInformation
,
5955 JobObjectBasicAndIoAccountingInformation
,
5956 JobObjectExtendedLimitInformation
,
5957 JobObjectJobSetInformation
,
5958 MaxJobObjectInfoClass
5959 } JOBOBJECTINFOCLASS
;
5961 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
{
5962 LARGE_INTEGER TotalUserTime
;
5963 LARGE_INTEGER TotalKernelTime
;
5964 LARGE_INTEGER ThisPeriodTotalUserTime
;
5965 LARGE_INTEGER ThisPeriodTotalKernelTime
;
5966 DWORD TotalPageFaultCount
;
5967 DWORD TotalProcesses
;
5968 DWORD ActiveProcesses
;
5969 DWORD TotalTerminatedProcesses
;
5970 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION
;
5972 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION
{
5973 LARGE_INTEGER PerProcessUserTimeLimit
;
5974 LARGE_INTEGER PerJobUserTimeLimit
;
5976 SIZE_T MinimumWorkingSetSize
;
5977 SIZE_T MaximumWorkingSetSize
;
5978 DWORD ActiveProcessLimit
;
5980 DWORD PriorityClass
;
5981 DWORD SchedulingClass
;
5982 } JOBOBJECT_BASIC_LIMIT_INFORMATION
, *PJOBOBJECT_BASIC_LIMIT_INFORMATION
;
5984 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST
{
5985 DWORD NumberOfAssignedProcesses
;
5986 DWORD NumberOfProcessIdsInList
;
5987 ULONG_PTR ProcessIdList
[1];
5988 } JOBOBJECT_BASIC_PROCESS_ID_LIST
, *PJOBOBJECT_BASIC_PROCESS_ID_LIST
;
5990 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS
{
5991 DWORD UIRestrictionsClass
;
5992 } JOBOBJECT_BASIC_UI_RESTRICTIONS
, *PJOBOBJECT_BASIC_UI_RESTRICTIONS
;
5994 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION
{
5995 DWORD SecurityLimitFlags
;
5997 PTOKEN_GROUPS SidsToDisable
;
5998 PTOKEN_PRIVILEGES PrivilegesToDelete
;
5999 PTOKEN_GROUPS RestrictedSids
;
6000 } JOBOBJECT_SECURITY_LIMIT_INFORMATION
, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION
;
6002 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION
{
6003 DWORD EndOfJobTimeAction
;
6004 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION
, PJOBOBJECT_END_OF_JOB_TIME_INFORMATION
;
6006 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT
{
6007 PVOID CompletionKey
;
6008 HANDLE CompletionPort
;
6009 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT
, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT
;
6011 #define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
6012 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
6013 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
6014 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
6015 #define JOB_OBJECT_MSG_NEW_PROCESS 6
6016 #define JOB_OBJECT_MSG_EXIT_PROCESS 7
6017 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
6018 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
6019 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
6021 typedef struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
{
6022 JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo
;
6024 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
, *PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
;
6026 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION
{
6027 JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation
;
6029 SIZE_T ProcessMemoryLimit
;
6030 SIZE_T JobMemoryLimit
;
6031 SIZE_T PeakProcessMemoryUsed
;
6032 SIZE_T PeakJobMemoryUsed
;
6033 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION
, *PJOBOBJECT_EXTENDED_LIMIT_INFORMATION
;
6035 #define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
6036 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
6037 #define JOB_OBJECT_LIMIT_JOB_TIME 0x00000004
6038 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008
6039 #define JOB_OBJECT_LIMIT_AFFINITY 0x00000010
6040 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
6041 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
6042 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
6043 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
6044 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200
6045 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
6046 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
6047 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
6048 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
6049 #define JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000
6051 #define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff
6052 #define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff
6053 #define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00007fff
6055 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
6057 RelationProcessorCore
= 0,
6058 RelationNumaNode
= 1,
6060 RelationProcessorPackage
= 3,
6062 RelationAll
= 0xffff
6063 } LOGICAL_PROCESSOR_RELATIONSHIP
;
6065 #define LTP_PC_SMT 0x1
6067 typedef enum _PROCESSOR_CACHE_TYPE
6073 } PROCESSOR_CACHE_TYPE
;
6075 typedef struct _PROCESSOR_GROUP_INFO
6077 BYTE MaximumProcessorCount
;
6078 BYTE ActiveProcessorCount
;
6080 KAFFINITY ActiveProcessorMask
;
6081 } PROCESSOR_GROUP_INFO
, *PPROCESSOR_GROUP_INFO
;
6083 typedef struct _CACHE_DESCRIPTOR
6089 PROCESSOR_CACHE_TYPE Type
;
6090 } CACHE_DESCRIPTOR
, *PCACHE_DESCRIPTOR
;
6092 typedef struct _GROUP_AFFINITY
6097 } GROUP_AFFINITY
, *PGROUP_AFFINITY
;
6099 typedef struct _PROCESSOR_NUMBER
6104 } PROCESSOR_NUMBER
, *PPROCESSOR_NUMBER
;
6106 typedef struct _PROCESSOR_RELATIONSHIP
6109 BYTE EfficiencyClass
;
6112 GROUP_AFFINITY GroupMask
[ANYSIZE_ARRAY
];
6113 } PROCESSOR_RELATIONSHIP
, *PPROCESSOR_RELATIONSHIP
;
6115 typedef struct _NUMA_NODE_RELATIONSHIP
6119 GROUP_AFFINITY GroupMask
;
6120 } NUMA_NODE_RELATIONSHIP
, *PNUMA_NODE_RELATIONSHIP
;
6122 typedef struct _CACHE_RELATIONSHIP
6128 PROCESSOR_CACHE_TYPE Type
;
6130 GROUP_AFFINITY GroupMask
;
6131 } CACHE_RELATIONSHIP
, *PCACHE_RELATIONSHIP
;
6133 typedef struct _GROUP_RELATIONSHIP
6135 WORD MaximumGroupCount
;
6136 WORD ActiveGroupCount
;
6138 PROCESSOR_GROUP_INFO GroupInfo
[ANYSIZE_ARRAY
];
6139 } GROUP_RELATIONSHIP
, *PGROUP_RELATIONSHIP
;
6141 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
6143 ULONG_PTR ProcessorMask
;
6144 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
6155 CACHE_DESCRIPTOR Cache
;
6156 ULONGLONG Reserved
[2];
6158 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
6160 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
6162 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
6166 PROCESSOR_RELATIONSHIP Processor
;
6167 NUMA_NODE_RELATIONSHIP NumaNode
;
6168 CACHE_RELATIONSHIP Cache
;
6169 GROUP_RELATIONSHIP Group
;
6171 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
;
6173 /* Threadpool things */
6174 typedef DWORD TP_VERSION
,*PTP_VERSION
;
6176 typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE
,*PTP_CALLBACK_INSTANCE
;
6178 typedef VOID (CALLBACK
*PTP_SIMPLE_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
);
6180 typedef struct _TP_POOL TP_POOL
,*PTP_POOL
;
6182 typedef enum _TP_CALLBACK_PRIORITY
6184 TP_CALLBACK_PRIORITY_HIGH
,
6185 TP_CALLBACK_PRIORITY_NORMAL
,
6186 TP_CALLBACK_PRIORITY_LOW
,
6187 TP_CALLBACK_PRIORITY_INVALID
,
6188 TP_CALLBACK_PRIORITY_COUNT
= TP_CALLBACK_PRIORITY_INVALID
6189 } TP_CALLBACK_PRIORITY
;
6191 typedef struct _TP_POOL_STACK_INFORMATION
6193 SIZE_T StackReserve
;
6195 } TP_POOL_STACK_INFORMATION
,*PTP_POOL_STACK_INFORMATION
;
6197 typedef struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP
,*PTP_CLEANUP_GROUP
;
6199 typedef VOID (CALLBACK
*PTP_CLEANUP_GROUP_CANCEL_CALLBACK
)(PVOID
,PVOID
);
6201 typedef struct _TP_CALLBACK_ENVIRON_V1
6205 PTP_CLEANUP_GROUP CleanupGroup
;
6206 PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback
;
6208 struct _ACTIVATION_CONTEXT
* ActivationContext
;
6209 PTP_SIMPLE_CALLBACK FinalizationCallback
;
6215 DWORD LongFunction
:1;
6220 } TP_CALLBACK_ENVIRON_V1
;
6222 typedef struct _TP_CALLBACK_ENVIRON_V3
6226 PTP_CLEANUP_GROUP CleanupGroup
;
6227 PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback
;
6229 struct _ACTIVATION_CONTEXT
*ActivationContext
;
6230 PTP_SIMPLE_CALLBACK FinalizationCallback
;
6236 DWORD LongFunction
:1;
6241 TP_CALLBACK_PRIORITY CallbackPriority
;
6243 } TP_CALLBACK_ENVIRON_V3
;
6245 typedef struct _TP_WORK TP_WORK
, *PTP_WORK
;
6246 typedef struct _TP_TIMER TP_TIMER
, *PTP_TIMER
;
6248 typedef DWORD TP_WAIT_RESULT
;
6249 typedef struct _TP_WAIT TP_WAIT
, *PTP_WAIT
;
6251 typedef struct _TP_IO TP_IO
, *PTP_IO
;
6253 typedef TP_CALLBACK_ENVIRON_V1 TP_CALLBACK_ENVIRON
, *PTP_CALLBACK_ENVIRON
;
6255 typedef VOID (CALLBACK
*PTP_WORK_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_WORK
);
6256 typedef VOID (CALLBACK
*PTP_TIMER_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_TIMER
);
6257 typedef VOID (CALLBACK
*PTP_WAIT_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PTP_WAIT
,TP_WAIT_RESULT
);
6258 typedef VOID (CALLBACK
*PTP_WIN32_IO_CALLBACK
)(PTP_CALLBACK_INSTANCE
,PVOID
,PVOID
,ULONG
,ULONG_PTR
,PTP_IO
);
6261 NTSYSAPI BOOLEAN NTAPI
RtlGetProductInfo(DWORD
,DWORD
,DWORD
,DWORD
,PDWORD
);
6263 typedef enum _RTL_UMS_THREAD_INFO_CLASS
6265 UmsThreadInvalidInfoClass
,
6266 UmsThreadUserContext
,
6270 UmsThreadIsSuspended
,
6271 UmsThreadIsTerminated
,
6272 UmsThreadMaxInfoClass
6273 } RTL_UMS_THREAD_INFO_CLASS
, *PRTL_UMS_THREAD_INFO_CLASS
;
6275 typedef enum _RTL_UMS_SCHEDULER_REASON
6277 UmsSchedulerStartup
,
6278 UmsSchedulerThreadBlocked
,
6279 UmsSchedulerThreadYield
,
6280 } RTL_UMS_SCHEDULER_REASON
, *PRTL_UMS_SCHEDULER_REASON
;
6282 typedef void (CALLBACK
*PRTL_UMS_SCHEDULER_ENTRY_POINT
)(RTL_UMS_SCHEDULER_REASON
,ULONG_PTR
,PVOID
);
6284 typedef enum _PROCESS_MITIGATION_POLICY
6288 ProcessDynamicCodePolicy
,
6289 ProcessStrictHandleCheckPolicy
,
6290 ProcessSystemCallDisablePolicy
,
6291 ProcessMitigationOptionsMask
,
6292 ProcessExtensionPointDisablePolicy
,
6293 ProcessControlFlowGuardPolicy
,
6294 ProcessSignaturePolicy
,
6295 ProcessFontDisablePolicy
,
6296 ProcessImageLoadPolicy
,
6297 ProcessSystemCallFilterPolicy
,
6298 ProcessPayloadRestrictionPolicy
,
6299 ProcessChildProcessPolicy
,
6300 ProcessSideChannelIsolationPolicy
,
6301 MaxProcessMitigationPolicy
6302 } PROCESS_MITIGATION_POLICY
, *PPROCESS_MITIGATION_POLICY
;
6308 #endif /* _WINNT_ */