1 /**
2  * @file winnt.h
3  * Copyright 2012, 2013 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _WINNT_H
25 #define _WINNT_H
26 #pragma GCC system_header
27 #include <_mingw.h>
28 
29 /* translate GCC target defines to MS equivalents. Keep this synchronized
30    with windows.h. */
31 #if defined(__i686__) && !defined(_M_IX86)
32 #define _M_IX86 600
33 #elif defined(__i586__) && !defined(_M_IX86)
34 #define _M_IX86 500
35 #elif defined(__i486__) && !defined(_M_IX86)
36 #define _M_IX86 400
37 #elif defined(__i386__) && !defined(_M_IX86)
38 #define _M_IX86 300
39 #endif
40 
41 #if defined(_M_IX86) && !defined(_X86_)
42 #define _X86_
43 #elif defined(_M_ALPHA) && !defined(_ALPHA_)
44 #define _ALPHA_
45 #elif defined(_M_PPC) && !defined(_PPC_)
46 #define _PPC_
47 #elif defined(_M_MRX000) && !defined(_MIPS_)
48 #define _MIPS_
49 #elif defined(_M_M68K) && !defined(_68K_)
50 #define _68K_
51 #endif
52 
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56 
57 #include <winerror.h>
58 
59 #ifndef RC_INVOKED
60 #include <string.h>
61 
62 /* FIXME: add more architectures. Is there a way to specify this in GCC? */
63 #ifdef _X86_
64 #define UNALIGNED
65 #else
66 #define UNALIGNED
67 #endif
68 
69 #ifndef DECLSPEC_ALIGN
70 #define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
71 #endif
72 
73 #ifndef DECLSPEC_SELECTANY
74 #if (__GNUC__ >= 4)
75 #define DECLSPEC_SELECTANY  __attribute__((selectany))
76 #else
77 #define DECLSPEC_SELECTANY
78 #endif
79 #endif
80 
81 #ifndef FORCEINLINE
82 #define FORCEINLINE __inline  __attribute__((always_inline))
83 #endif
84 
85 #ifndef C_ASSERT
86 #define C_ASSERT(expr) typedef char __C_ASSERT__[(expr)?1:-1]
87 #endif
88 
89 #ifndef VOID
90 #define VOID void
91 #endif
92 
93 typedef char CHAR;
94 typedef short SHORT;
95 typedef long LONG;
96 typedef char CCHAR, *PCCHAR;
97 typedef unsigned char UCHAR,*PUCHAR;
98 typedef unsigned short USHORT,*PUSHORT;
99 typedef unsigned long ULONG,*PULONG;
100 typedef char *PSZ;
101 
102 typedef void *PVOID,*LPVOID;
103 
104 /* FIXME for __WIN64 */
105 #ifndef  __ptr64
106 #define __ptr64
107 #endif
108 typedef void* __ptr64 PVOID64;
109 
110 #ifndef _WCHAR_T_DEFINED
111 #define _WCHAR_T_DEFINED
112 #ifndef _WCHAR_T_
113 #define _WCHAR_T_
114 #undef __need_wchar_t
115 #ifndef __cplusplus
116 typedef unsigned short wchar_t;
117 #endif
118 #endif
119 #endif
120 
121 typedef wchar_t WCHAR;
122 typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR;
123 typedef CONST WCHAR *LPCWCH,*PCWCH,*LPCWSTR,*PCWSTR;
124 typedef CHAR *PCHAR,*LPCH,*PCH,*NPSTR,*LPSTR,*PSTR;
125 typedef CONST CHAR *LPCCH,*PCSTR,*LPCSTR;
126 
127 #ifndef _TCHAR_DEFINED
128 #define _TCHAR_DEFINED
129 
130 /* Cannot use __AW(). */
131 #ifdef UNICODE
132 /*
133  * NOTE: This tests UNICODE, which is different from the _UNICODE define
134  *       used to differentiate standard C runtime calls.
135  */
136 typedef WCHAR TCHAR;
137 typedef WCHAR _TCHAR;
138 /*
139  * __TEXT is a private macro whose specific use is to force the expansion of a
140  * macro passed as an argument to the macro TEXT.  DO NOT use this
141  * macro within your programs.  It's name and function could change without
142  * notice.
143  */
144 #define __TEXT(q) L##q
145 #else
146 typedef CHAR TCHAR;
147 typedef CHAR _TCHAR;
148 #define __TEXT(q) q
149 #endif
150 
151 #endif
152 
153 typedef TCHAR TBYTE,*PTCH,*PTBYTE;
154 typedef TCHAR *LPTCH,*PTSTR,*LPTSTR,*LP,*PTCHAR;
155 typedef const TCHAR *LPCTSTR;
156 
157 /*
158  * UNICODE a constant string when UNICODE is defined, else returns the string
159  * unmodified.
160  * The corresponding macros  _TEXT() and _T() for mapping _UNICODE strings
161  * passed to C runtime functions are defined in mingw/tchar.h
162  */
163 #define TEXT(q) __TEXT(q)
164 typedef SHORT *PSHORT;
165 typedef LONG *PLONG;
166 
167 #ifdef STRICT
168 typedef void *HANDLE;
169 #define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n
170 #else
171 
172 typedef PVOID HANDLE;
173 #define DECLARE_HANDLE(n) typedef HANDLE n
174 #endif
175 
176 typedef HANDLE *PHANDLE,*LPHANDLE;
177 typedef DWORD LCID;
178 typedef PDWORD PLCID;
179 typedef WORD LANGID;
180 
181 #define _HAVE_INT64
182 #define _INTEGRAL_MAX_BITS 64
183 #undef __int64
184 #define __int64 long long
185 
186 typedef __int64 LONGLONG;
187 typedef unsigned __int64 DWORDLONG;
188 
189 typedef LONGLONG *PLONGLONG;
190 typedef DWORDLONG *PDWORDLONG;
191 typedef DWORDLONG ULONGLONG,*PULONGLONG;
192 typedef LONGLONG USN;
193 
194 #define Int32x32To64(a,b) ((LONGLONG)(a)*(LONGLONG)(b))
195 #define UInt32x32To64(a,b) ((DWORDLONG)(a)*(DWORDLONG)(b))
196 #define Int64ShllMod32(a,b) ((DWORDLONG)(a)<<(b))
197 #define Int64ShraMod32(a,b) ((LONGLONG)(a)>>(b))
198 #define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b))
199 
200 #define ANSI_NULL '\0'
201 #define UNICODE_NULL L'\0'
202 typedef BYTE BOOLEAN,*PBOOLEAN;
203 #endif
204 typedef BYTE FCHAR;
205 typedef WORD FSHORT;
206 typedef DWORD FLONG;
207 
208 #define NTAPI __stdcall
209 #include <basetsd.h>
210 #define ACE_OBJECT_TYPE_PRESENT           0x00000001
211 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x00000002
212 #define APPLICATION_ERROR_MASK       0x20000000
213 #define ERROR_SEVERITY_SUCCESS       0x00000000
214 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
215 #define ERROR_SEVERITY_WARNING       0x80000000
216 #define ERROR_SEVERITY_ERROR         0xC0000000
217 /* also in ddk/ntifs.h */
218 #define COMPRESSION_FORMAT_NONE         (0x0000)
219 #define COMPRESSION_FORMAT_DEFAULT      (0x0001)
220 #define COMPRESSION_FORMAT_LZNT1        (0x0002)
221 #define COMPRESSION_ENGINE_STANDARD     (0x0000)
222 #define COMPRESSION_ENGINE_MAXIMUM      (0x0100)
223 #define COMPRESSION_ENGINE_HIBER        (0x0200)
224 #define ACCESS_ALLOWED_ACE_TYPE         (0x0)
225 #define ACCESS_DENIED_ACE_TYPE          (0x1)
226 #define SYSTEM_AUDIT_ACE_TYPE           (0x2)
227 #define SYSTEM_ALARM_ACE_TYPE           (0x3)
228 /*end ntifs.h */
229 #define ANYSIZE_ARRAY 1
230 #define OBJECT_INHERIT_ACE	1
231 #define CONTAINER_INHERIT_ACE	2
232 #define NO_PROPAGATE_INHERIT_ACE	4
233 #define INHERIT_ONLY_ACE	8
234 #define INHERITED_ACE	16
235 #define VALID_INHERIT_FLAGS \
236 	OBJECT_INHERIT_ACE \
237 	| CONTAINER_INHERIT_ACE \
238 	| NO_PROPAGATE_INHERIT_ACE \
239 	| INHERIT_ONLY_ACE \
240 	| INHERITED_ACE
241 #define SUCCESSFUL_ACCESS_ACE_FLAG	64
242 #define FAILED_ACCESS_ACE_FLAG	128
243 #define DELETE	0x00010000L
244 #define READ_CONTROL	0x20000L
245 #define WRITE_DAC	0x40000L
246 #define WRITE_OWNER	0x80000L
247 #define SYNCHRONIZE	0x100000L
248 #define STANDARD_RIGHTS_REQUIRED	0xF0000
249 #define STANDARD_RIGHTS_READ	0x20000
250 #define STANDARD_RIGHTS_WRITE	0x20000
251 #define STANDARD_RIGHTS_EXECUTE	0x20000
252 #define STANDARD_RIGHTS_ALL	0x1F0000
253 #define SPECIFIC_RIGHTS_ALL	0xFFFF
254 #define ACCESS_SYSTEM_SECURITY	0x1000000
255 
256 #define MAXIMUM_ALLOWED	0x2000000
257 #define GENERIC_READ	0x80000000
258 #define GENERIC_WRITE	0x40000000
259 #define GENERIC_EXECUTE	0x20000000
260 #define GENERIC_ALL	0x10000000
261 
262 #define INVALID_FILE_ATTRIBUTES	((DWORD)-1)
263 
264 /* Also in ddk/winddk.h */
265 #define FILE_LIST_DIRECTORY		0x00000001
266 #define FILE_READ_DATA			0x00000001
267 #define FILE_ADD_FILE			0x00000002
268 #define FILE_WRITE_DATA			0x00000002
269 #define FILE_ADD_SUBDIRECTORY		0x00000004
270 #define FILE_APPEND_DATA		0x00000004
271 #define FILE_CREATE_PIPE_INSTANCE	0x00000004
272 #define FILE_READ_EA			0x00000008
273 #define FILE_READ_PROPERTIES		0x00000008
274 #define FILE_WRITE_EA			0x00000010
275 #define FILE_WRITE_PROPERTIES		0x00000010
276 #define FILE_EXECUTE			0x00000020
277 #define FILE_TRAVERSE			0x00000020
278 #define FILE_DELETE_CHILD		0x00000040
279 #define FILE_READ_ATTRIBUTES		0x00000080
280 #define FILE_WRITE_ATTRIBUTES		0x00000100
281 
282 #define FILE_SHARE_READ			0x00000001
283 #define FILE_SHARE_WRITE		0x00000002
284 #define FILE_SHARE_DELETE		0x00000004
285 #define FILE_SHARE_VALID_FLAGS		0x00000007
286 
287 #define FILE_ATTRIBUTE_READONLY			0x00000001
288 #define FILE_ATTRIBUTE_HIDDEN			0x00000002
289 #define FILE_ATTRIBUTE_SYSTEM			0x00000004
290 #define FILE_ATTRIBUTE_DIRECTORY		0x00000010
291 #define FILE_ATTRIBUTE_ARCHIVE			0x00000020
292 #define FILE_ATTRIBUTE_DEVICE			0x00000040
293 #define FILE_ATTRIBUTE_NORMAL			0x00000080
294 #define FILE_ATTRIBUTE_TEMPORARY		0x00000100
295 #define FILE_ATTRIBUTE_SPARSE_FILE		0x00000200
296 #define FILE_ATTRIBUTE_REPARSE_POINT		0x00000400
297 #define FILE_ATTRIBUTE_COMPRESSED		0x00000800
298 #define FILE_ATTRIBUTE_OFFLINE			0x00001000
299 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED	0x00002000
300 #define FILE_ATTRIBUTE_ENCRYPTED		0x00004000
301 #define FILE_ATTRIBUTE_VIRTUAL			0x00010000
302 #define FILE_ATTRIBUTE_VALID_FLAGS		0x00017fb7
303 #define FILE_ATTRIBUTE_VALID_SET_FLAGS		0x000031a7
304 
305 #define FILE_COPY_STRUCTURED_STORAGE		0x00000041
306 #define FILE_STRUCTURED_STORAGE			0x00000441
307 
308 #define FILE_VALID_OPTION_FLAGS			0x00ffffff
309 #define FILE_VALID_PIPE_OPTION_FLAGS		0x00000032
310 #define FILE_VALID_MAILSLOT_OPTION_FLAGS	0x00000032
311 #define FILE_VALID_SET_FLAGS			0x00000036
312 
313 #define FILE_SUPERSEDE			0x00000000
314 #define FILE_OPEN			0x00000001
315 #define FILE_CREATE			0x00000002
316 #define FILE_OPEN_IF			0x00000003
317 #define FILE_OVERWRITE			0x00000004
318 #define FILE_OVERWRITE_IF		0x00000005
319 #define FILE_MAXIMUM_DISPOSITION	0x00000005
320 
321 #define FILE_DIRECTORY_FILE		0x00000001
322 #define FILE_WRITE_THROUGH		0x00000002
323 #define FILE_SEQUENTIAL_ONLY		0x00000004
324 #define FILE_NO_INTERMEDIATE_BUFFERING	0x00000008
325 #define FILE_SYNCHRONOUS_IO_ALERT	0x00000010
326 #define FILE_SYNCHRONOUS_IO_NONALERT	0x00000020
327 #define FILE_NON_DIRECTORY_FILE		0x00000040
328 #define FILE_CREATE_TREE_CONNECTION	0x00000080
329 #define FILE_COMPLETE_IF_OPLOCKED	0x00000100
330 #define FILE_NO_EA_KNOWLEDGE		0x00000200
331 #define FILE_OPEN_FOR_RECOVERY		0x00000400
332 #define FILE_RANDOM_ACCESS		0x00000800
333 #define FILE_DELETE_ON_CLOSE		0x00001000
334 #define FILE_OPEN_BY_FILE_ID		0x00002000
335 #define FILE_OPEN_FOR_BACKUP_INTENT	0x00004000
336 #define FILE_NO_COMPRESSION		0x00008000
337 #define FILE_RESERVE_OPFILTER		0x00100000
338 #define FILE_OPEN_REPARSE_POINT		0x00200000
339 #define FILE_OPEN_NO_RECALL		0x00400000
340 #define FILE_OPEN_FOR_FREE_SPACE_QUERY	0x00800000
341 
342 #define FILE_ALL_ACCESS \
343   (STANDARD_RIGHTS_REQUIRED | \
344    SYNCHRONIZE | \
345    0x1FF)
346 
347 #define FILE_GENERIC_EXECUTE \
348   (STANDARD_RIGHTS_EXECUTE | \
349    FILE_READ_ATTRIBUTES | \
350    FILE_EXECUTE | \
351    SYNCHRONIZE)
352 
353 #define FILE_GENERIC_READ \
354   (STANDARD_RIGHTS_READ | \
355    FILE_READ_DATA | \
356    FILE_READ_ATTRIBUTES | \
357    FILE_READ_EA | \
358    SYNCHRONIZE)
359 
360 #define FILE_GENERIC_WRITE \
361   (STANDARD_RIGHTS_WRITE | \
362    FILE_WRITE_DATA | \
363    FILE_WRITE_ATTRIBUTES | \
364    FILE_WRITE_EA | \
365    FILE_APPEND_DATA | \
366    SYNCHRONIZE)
367 /* end winddk.h */
368 /* also in ddk/ntifs.h */
369 #define FILE_NOTIFY_CHANGE_FILE_NAME	0x00000001
370 #define FILE_NOTIFY_CHANGE_DIR_NAME	0x00000002
371 #define FILE_NOTIFY_CHANGE_NAME		0x00000003
372 #define FILE_NOTIFY_CHANGE_ATTRIBUTES	0x00000004
373 #define FILE_NOTIFY_CHANGE_SIZE		0x00000008
374 #define FILE_NOTIFY_CHANGE_LAST_WRITE	0x00000010
375 #define FILE_NOTIFY_CHANGE_LAST_ACCESS	0x00000020
376 #define FILE_NOTIFY_CHANGE_CREATION	0x00000040
377 #define FILE_NOTIFY_CHANGE_EA		0x00000080
378 #define FILE_NOTIFY_CHANGE_SECURITY	0x00000100
379 #define FILE_NOTIFY_CHANGE_STREAM_NAME	0x00000200
380 #define FILE_NOTIFY_CHANGE_STREAM_SIZE	0x00000400
381 #define FILE_NOTIFY_CHANGE_STREAM_WRITE	0x00000800
382 #define FILE_NOTIFY_VALID_MASK		0x00000fff
383 
384 #define FILE_CASE_SENSITIVE_SEARCH      0x00000001
385 #define FILE_CASE_PRESERVED_NAMES       0x00000002
386 #define FILE_UNICODE_ON_DISK            0x00000004
387 #define FILE_PERSISTENT_ACLS            0x00000008
388 #define FILE_FILE_COMPRESSION           0x00000010
389 #define FILE_VOLUME_QUOTAS              0x00000020
390 #define FILE_SUPPORTS_SPARSE_FILES      0x00000040
391 #define FILE_SUPPORTS_REPARSE_POINTS    0x00000080
392 #define FILE_SUPPORTS_REMOTE_STORAGE    0x00000100
393 #define FS_LFN_APIS                     0x00004000
394 #define FILE_VOLUME_IS_COMPRESSED       0x00008000
395 #define FILE_SUPPORTS_OBJECT_IDS        0x00010000
396 #define FILE_SUPPORTS_ENCRYPTION        0x00020000
397 #define FILE_NAMED_STREAMS              0x00040000
398 #define FILE_READ_ONLY_VOLUME           0x00080000
399 #define FILE_SEQUENTIAL_WRITE_ONCE      0x00100000
400 #define FILE_SUPPORTS_TRANSACTIONS      0x00200000
401 /* Note: These flags only have a meaning starting with Windows 7/2008 R2.
402    Their absence on older OSes does NOT mean that a filesystem is missing
403    that property. */
404 #define FILE_SUPPORTS_HARD_LINKS        0x00400000
405 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
406 #define FILE_SUPPORTS_OPEN_BY_FILE_ID   0x01000000
407 #define FILE_SUPPORTS_USN_JOURNAL       0x02000000
408 
409 
410 #define IO_COMPLETION_QUERY_STATE       0x0001
411 #define IO_COMPLETION_MODIFY_STATE      0x0002
412 #define IO_COMPLETION_ALL_ACCESS        (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
413 /* end ntifs.h */
414 
415 /* also in ddk/winddk.h */
416 #define DUPLICATE_CLOSE_SOURCE		0x00000001
417 #define DUPLICATE_SAME_ACCESS		0x00000002
418 #define DUPLICATE_SAME_ATTRIBUTES	0x00000004
419 /* end winddk.k */
420 
421 #define MAILSLOT_NO_MESSAGE	((DWORD)-1)
422 #define MAILSLOT_WAIT_FOREVER	((DWORD)-1)
423 #define PROCESS_TERMINATE	1
424 #define PROCESS_CREATE_THREAD	2
425 #define PROCESS_SET_SESSIONID	4
426 #define PROCESS_VM_OPERATION	8
427 #define PROCESS_VM_READ	16
428 #define PROCESS_VM_WRITE	32
429 #define PROCESS_DUP_HANDLE	64
430 #define PROCESS_CREATE_PROCESS	128
431 #define PROCESS_SET_QUOTA	256
432 #define PROCESS_SUSPEND_RESUME 0x0800
433 #define PROCESS_SET_INFORMATION	512
434 #define PROCESS_QUERY_INFORMATION	1024
435 #define PROCESS_QUERY_LIMITED_INFORMATION	0x1000
436 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xFFF)
437 #define THREAD_TERMINATE	1
438 #define THREAD_SUSPEND_RESUME	2
439 #define THREAD_GET_CONTEXT	8
440 #define THREAD_SET_CONTEXT	16
441 #define THREAD_SET_INFORMATION	32
442 #define THREAD_QUERY_INFORMATION	64
443 #define THREAD_SET_THREAD_TOKEN	128
444 #define THREAD_IMPERSONATE	256
445 #define THREAD_DIRECT_IMPERSONATION	0x200
446 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3FF)
447 #define THREAD_BASE_PRIORITY_LOWRT	15
448 #define THREAD_BASE_PRIORITY_MAX	2
449 #define THREAD_BASE_PRIORITY_MIN	(-2)
450 #define THREAD_BASE_PRIORITY_IDLE	(-15)
451 #define EXCEPTION_NONCONTINUABLE	1
452 #define EXCEPTION_MAXIMUM_PARAMETERS 15
453 #define MUTANT_QUERY_STATE	0x0001
454 #define MUTANT_ALL_ACCESS	(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
455 #define TIMER_QUERY_STATE	0x0001
456 #define TIMER_MODIFY_STATE	0x0002
457 #define TIMER_ALL_ACCESS	(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|TIMER_QUERY_STATE|TIMER_MODIFY_STATE)
458 /*
459  * To prevent gcc compiler warnings, bracket these defines when initialising
460  * a  SID_IDENTIFIER_AUTHORITY, eg.
461  * SID_IDENTIFIER_AUTHORITY aNullSidAuthority = {SECURITY_NULL_SID_AUTHORITY};
462  */
463 #define SECURITY_NULL_SID_AUTHORITY	{0,0,0,0,0,0}
464 #define SECURITY_WORLD_SID_AUTHORITY	{0,0,0,0,0,1}
465 #define SECURITY_LOCAL_SID_AUTHORITY	{0,0,0,0,0,2}
466 #define SECURITY_CREATOR_SID_AUTHORITY	{0,0,0,0,0,3}
467 #define SECURITY_NON_UNIQUE_AUTHORITY	{0,0,0,0,0,4}
468 #define SECURITY_NT_AUTHORITY	{0,0,0,0,0,5}
469 #define SECURITY_MANDATORY_LABEL_AUTHORITY	{0,0,0,0,0,16}
470 #define SECURITY_NULL_RID	0
471 #define SECURITY_WORLD_RID	(0x00000000L)
472 #define SECURITY_LOCAL_RID	0
473 #define SECURITY_CREATOR_OWNER_RID	0
474 #define SECURITY_CREATOR_GROUP_RID	1
475 #define SECURITY_DIALUP_RID	1
476 #define SECURITY_NETWORK_RID	2
477 #define SECURITY_BATCH_RID	3
478 #define SECURITY_INTERACTIVE_RID	4
479 #define SECURITY_LOGON_IDS_RID	5
480 #define SECURITY_SERVICE_RID	6
481 #define SECURITY_LOCAL_SYSTEM_RID	18
482 #define SECURITY_BUILTIN_DOMAIN_RID   32
483 #define SECURITY_PRINCIPAL_SELF_RID   10
484 #define SECURITY_CREATOR_OWNER_SERVER_RID 0x2
485 #define SECURITY_CREATOR_GROUP_SERVER_RID 0x3
486 #define SECURITY_LOGON_IDS_RID_COUNT 0x3
487 #define SECURITY_ANONYMOUS_LOGON_RID 0x7
488 #define SECURITY_PROXY_RID 0x8
489 #define SECURITY_ENTERPRISE_CONTROLLERS_RID 0x9
490 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
491 #define SECURITY_AUTHENTICATED_USER_RID 0xB
492 #define SECURITY_RESTRICTED_CODE_RID 0xC
493 #define SECURITY_NT_NON_UNIQUE_RID 0x15
494 #define SID_REVISION 1
495 
496 #define DOMAIN_USER_RID_ADMIN 0x1F4L
497 #define DOMAIN_USER_RID_GUEST 0x1F5L
498 #define DOMAIN_GROUP_RID_ADMINS	0x200L
499 #define DOMAIN_GROUP_RID_USERS	0x201L
500 #define DOMAIN_ALIAS_RID_ADMINS	0x220L
501 #define DOMAIN_ALIAS_RID_USERS	0x221L
502 #define DOMAIN_ALIAS_RID_GUESTS	0x222L
503 #define DOMAIN_ALIAS_RID_POWER_USERS	0x223L
504 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS	0x224L
505 #define DOMAIN_ALIAS_RID_SYSTEM_OPS	0x225L
506 #define DOMAIN_ALIAS_RID_PRINT_OPS	0x226L
507 #define DOMAIN_ALIAS_RID_BACKUP_OPS	0x227L
508 #define DOMAIN_ALIAS_RID_REPLICATOR	0x228L
509 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS	0x22BL
510 #define SECURITY_MANDATORY_UNTRUSTED_RID	0
511 #define SECURITY_MANDATORY_LOW_RID	0x1000
512 #define SECURITY_MANDATORY_MEDIUM_RID	0x2000
513 #define SECURITY_MANDATORY_HIGH_RID	0x3000
514 #define SECURITY_MANDATORY_SYSTEM_RID	0x4000
515 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID	0x5000
516 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
517 #define SE_CREATE_TOKEN_NAME	TEXT("SeCreateTokenPrivilege")
518 #define SE_ASSIGNPRIMARYTOKEN_NAME	TEXT("SeAssignPrimaryTokenPrivilege")
519 #define SE_LOCK_MEMORY_NAME	TEXT("SeLockMemoryPrivilege")
520 #define SE_INCREASE_QUOTA_NAME	TEXT("SeIncreaseQuotaPrivilege")
521 #define SE_UNSOLICITED_INPUT_NAME	TEXT("SeUnsolicitedInputPrivilege")
522 #define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
523 #define SE_TCB_NAME	TEXT("SeTcbPrivilege")
524 #define SE_SECURITY_NAME	TEXT("SeSecurityPrivilege")
525 #define SE_TAKE_OWNERSHIP_NAME	TEXT("SeTakeOwnershipPrivilege")
526 #define SE_LOAD_DRIVER_NAME	TEXT("SeLoadDriverPrivilege")
527 #define SE_SYSTEM_PROFILE_NAME	TEXT("SeSystemProfilePrivilege")
528 #define SE_SYSTEMTIME_NAME	TEXT("SeSystemtimePrivilege")
529 #define SE_PROF_SINGLE_PROCESS_NAME	TEXT("SeProfileSingleProcessPrivilege")
530 #define SE_INC_BASE_PRIORITY_NAME	TEXT("SeIncreaseBasePriorityPrivilege")
531 #define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
532 #define SE_CREATE_PERMANENT_NAME	TEXT("SeCreatePermanentPrivilege")
533 #define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
534 #define SE_RESTORE_NAME	TEXT("SeRestorePrivilege")
535 #define SE_SHUTDOWN_NAME	TEXT("SeShutdownPrivilege")
536 #define SE_DEBUG_NAME	TEXT("SeDebugPrivilege")
537 #define SE_AUDIT_NAME	TEXT("SeAuditPrivilege")
538 #define SE_SYSTEM_ENVIRONMENT_NAME	TEXT("SeSystemEnvironmentPrivilege")
539 #define SE_CHANGE_NOTIFY_NAME	TEXT("SeChangeNotifyPrivilege")
540 #define SE_REMOTE_SHUTDOWN_NAME	TEXT("SeRemoteShutdownPrivilege")
541 #define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
542 #define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
543 #define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
544 #define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
545 #define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
546 #define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
547 #define SE_TRUSTED_CREDMAN_ACCESS_NAME	TEXT("SeTrustedCredManAccessPrivilege")
548 #define SE_RELABEL_NAME TEXT("SeRelabelPrivilege")
549 #define SE_INCREASE_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege")
550 #define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")
551 #define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege")
552 #define SE_GROUP_MANDATORY 1
553 #define SE_GROUP_ENABLED_BY_DEFAULT 2
554 #define SE_GROUP_ENABLED 4
555 #define SE_GROUP_OWNER 8
556 #define SE_GROUP_USE_FOR_DENY_ONLY 16
557 #define SE_GROUP_INTEGRITY 32
558 #define SE_GROUP_INTEGRITY_ENABLED 64
559 #define SE_GROUP_LOGON_ID 3221225472U
560 #define SE_GROUP_RESOURCE 536870912
561 #define LANG_NEUTRAL	0x00
562 #define LANG_ARABIC 	0x01
563 #define LANG_BULGARIAN 	0x02
564 #define LANG_CATALAN 	0x03
565 #define LANG_CHINESE	0x04
566 #define LANG_CZECH	0x05
567 #define LANG_DANISH	0x06
568 #define LANG_GERMAN	0x07
569 #define LANG_GREEK	0x08
570 #define LANG_ENGLISH	0x09
571 #define LANG_SPANISH	0x0a
572 #define LANG_FINNISH	0x0b
573 #define LANG_FRENCH	0x0c
574 #define LANG_HEBREW	0x0d
575 #define LANG_HUNGARIAN	0x0e
576 #define LANG_ICELANDIC	0x0f
577 #define LANG_ITALIAN	0x10
578 #define LANG_JAPANESE	0x11
579 #define LANG_KOREAN	0x12
580 #define LANG_DUTCH	0x13
581 #define LANG_NORWEGIAN	0x14
582 #define LANG_POLISH	0x15
583 #define LANG_PORTUGUESE	0x16
584 #define LANG_ROMANIAN	0x18
585 #define LANG_RUSSIAN	0x19
586 #define LANG_CROATIAN	0x1a
587 #define LANG_SERBIAN	0x1a
588 #define LANG_SERBIAN_NEUTRAL 0x7c1a
589 #define LANG_BOSNIAN	0x1a
590 #define LANG_BOSNIAN_NEUTRAL 0x781a
591 #define LANG_SLOVAK	0x1b
592 #define LANG_ALBANIAN	0x1c
593 #define LANG_SWEDISH	0x1d
594 #define LANG_THAI	0x1e
595 #define LANG_TURKISH	0x1f
596 #define LANG_URDU	0x20
597 #define LANG_INDONESIAN	0x21
598 #define LANG_UKRAINIAN	0x22
599 #define LANG_BELARUSIAN	0x23
600 #define LANG_SLOVENIAN	0x24
601 #define LANG_ESTONIAN	0x25
602 #define LANG_LATVIAN	0x26
603 #define LANG_LITHUANIAN	0x27
604 #define LANG_PERSIAN    0x29
605 #define LANG_FARSI	LANG_PERSIAN
606 #define LANG_VIETNAMESE	0x2a
607 #define LANG_ARMENIAN	0x2b
608 #define LANG_AZERI	0x2c
609 #define LANG_BASQUE	0x2d
610 #define LANG_LOWER_SORBIAN	0x2e
611 #define LANG_UPPER_SORBIAN	0x2e
612 #define LANG_MACEDONIAN	0x2f
613 #define LANG_TSWANA	0x32
614 #define LANG_XHOSA	0x34
615 #define LANG_ZULU	0x35
616 #define LANG_AFRIKAANS	0x36
617 #define LANG_GEORGIAN	0x37
618 #define LANG_FAEROESE	0x38
619 #define LANG_HINDI	0x39
620 #define LANG_MALTESE	0x3a
621 #define LANG_SAMI	0x3b
622 #define LANG_IRISH	0x3c
623 #define LANG_MALAY	0x3e
624 #define LANG_KAZAK	0x3f
625 #define LANG_KYRGYZ	0x40
626 #define LANG_SWAHILI	0x41
627 #define LANG_UZBEK	0x43
628 #define LANG_TATAR	0x44
629 #define LANG_BENGALI	0x45
630 #define LANG_PUNJABI	0x46
631 #define LANG_GUJARATI	0x47
632 #define LANG_ORIYA	0x48
633 #define LANG_TAMIL	0x49
634 #define LANG_TELUGU	0x4a
635 #define LANG_KANNADA	0x4b
636 #define LANG_MALAYALAM	0x4c
637 #define LANG_ASSAMESE	0x4d
638 #define LANG_MARATHI	0x4e
639 #define LANG_SANSKRIT	0x4f
640 #define LANG_MONGOLIAN	0x50
641 #define LANG_TIBETAN	0x51
642 #define LANG_WELSH	0x52
643 #define LANG_KHMER	0x53
644 #define LANG_LAO	0x54
645 #define LANG_GALICIAN	0x56
646 #define LANG_KONKANI	0x57
647 #define LANG_MANIPURI	0x58
648 #define LANG_SINDHI	0x59
649 #define LANG_SYRIAC	0x5a
650 #define LANG_SINHALESE	0x5b
651 #define LANG_INUKTITUT	0x5d
652 #define LANG_AMHARIC	0x5e
653 #define LANG_TAMAZIGHT	0x5f
654 #define LANG_KASHMIRI	0x60
655 #define LANG_NEPALI	0x61
656 #define LANG_FRISIAN	0x62
657 #define LANG_PASHTO	0x63
658 #define LANG_FILIPINO	0x64
659 #define LANG_DIVEHI	0x65
660 #define LANG_HAUSA	0x68
661 #define LANG_YORUBA	0x6a
662 #define LANG_QUECHUA	0x6b
663 #define LANG_SOTHO	0x6c
664 #define LANG_BASHKIR	0x6d
665 #define LANG_LUXEMBOURGISH	0x6e
666 #define LANG_GREENLANDIC	0x6f
667 #define LANG_IGBO	0x70
668 #define LANG_TIGRIGNA	0x73
669 #define LANG_YI	0x78
670 #define LANG_MAPUDUNGUN	0x7a
671 #define LANG_MOHAWK	0x7c
672 #define LANG_BRETON	0x7e
673 #define LANG_INVARIANT	0x7f
674 #define LANG_UIGHUR	0x80
675 #define LANG_MAORI	0x81
676 #define LANG_OCCITAN	0x82
677 #define LANG_CORSICAN	0x83
678 #define LANG_ALSATIAN	0x84
679 #define LANG_YAKUT	0x85
680 #define LANG_KICHE	0x86
681 #define LANG_KINYARWANDA	0x87
682 #define LANG_WOLOF	0x88
683 #define LANG_DARI	0x8c
684 #define LANG_MALAGASY	0x8d
685 #define SUBLANG_NEUTRAL	0x00
686 #define SUBLANG_DEFAULT	0x01
687 #define SUBLANG_SYS_DEFAULT	0x02
688 #define SUBLANG_CUSTOM_DEFAULT	0x03
689 #define SUBLANG_CUSTOM_UNSPECIFIED	0x04
690 #define SUBLANG_UI_CUSTOM_DEFAULT	0x05
691 #define SUBLANG_AFRIKAANS_SOUTH_AFRICA	0x01
692 #define SUBLANG_ALBANIAN_ALBANIA	0x01
693 #define SUBLANG_ALSATIAN_FRANCE	0x01
694 #define SUBLANG_AMHARIC_ETHIOPIA	0x01
695 #define SUBLANG_ARABIC_SAUDI_ARABIA	0x01
696 #define SUBLANG_ARABIC_IRAQ	0x02
697 #define SUBLANG_ARABIC_EGYPT	0x03
698 #define SUBLANG_ARABIC_LIBYA	0x04
699 #define SUBLANG_ARABIC_ALGERIA	0x05
700 #define SUBLANG_ARABIC_MOROCCO	0x06
701 #define SUBLANG_ARABIC_TUNISIA	0x07
702 #define SUBLANG_ARABIC_OMAN	0x08
703 #define SUBLANG_ARABIC_YEMEN	0x09
704 #define SUBLANG_ARABIC_SYRIA	0x0a
705 #define SUBLANG_ARABIC_JORDAN	0x0b
706 #define SUBLANG_ARABIC_LEBANON	0x0c
707 #define SUBLANG_ARABIC_KUWAIT	0x0d
708 #define SUBLANG_ARABIC_UAE	0x0e
709 #define SUBLANG_ARABIC_BAHRAIN	0x0f
710 #define SUBLANG_ARABIC_QATAR	0x10
711 #define SUBLANG_ARMENIAN_ARMENIA	0x01
712 #define SUBLANG_ASSAMESE_INDIA	0x01
713 #define SUBLANG_AZERI_LATIN	0x01
714 #define SUBLANG_AZERI_CYRILLIC	0x02
715 #define SUBLANG_BASHKIR_RUSSIA	0x01
716 #define SUBLANG_BASQUE_BASQUE	0x01
717 #define SUBLANG_BELARUSIAN_BELARUS	0x01
718 #define SUBLANG_BENGALI_INDIA	0x01
719 #define SUBLANG_BENGALI_BANGLADESH  0x02
720 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN	0x05
721 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC	0x08
722 #define SUBLANG_BRETON_FRANCE	0x01
723 #define SUBLANG_BULGARIAN_BULGARIA	0x01
724 #define SUBLANG_CATALAN_CATALAN	0x01
725 #define SUBLANG_CHINESE_TRADITIONAL	0x01
726 #define SUBLANG_CHINESE_SIMPLIFIED	0x02
727 #define SUBLANG_CHINESE_HONGKONG	0x03
728 #define SUBLANG_CHINESE_SINGAPORE	0x04
729 #define SUBLANG_CHINESE_MACAU	0x05
730 #define SUBLANG_CORSICAN_FRANCE	0x01
731 #define SUBLANG_CZECH_CZECH_REPUBLIC	0x01
732 #define SUBLANG_CROATIAN_CROATIA	0x01
733 #define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN	0x04
734 #define SUBLANG_DANISH_DENMARK	0x01
735 #define SUBLANG_DIVEHI_MALDIVES	0x01
736 #define SUBLANG_DUTCH	0x01
737 #define SUBLANG_DUTCH_BELGIAN	0x02
738 #define SUBLANG_ENGLISH_US	0x01
739 #define SUBLANG_ENGLISH_UK	0x02
740 #define SUBLANG_ENGLISH_AUS	0x03
741 #define SUBLANG_ENGLISH_CAN	0x04
742 #define SUBLANG_ENGLISH_NZ	0x05
743 
744 #define SUBLANG_ENGLISH_EIRE	0x06
745 #define SUBLANG_ENGLISH_SOUTH_AFRICA	0x07
746 #define SUBLANG_ENGLISH_JAMAICA	0x08
747 #define SUBLANG_ENGLISH_CARIBBEAN	0x09
748 #define SUBLANG_ENGLISH_BELIZE	0x0a
749 #define SUBLANG_ENGLISH_TRINIDAD	0x0b
750 #define SUBLANG_ENGLISH_ZIMBABWE	0x0c
751 #define SUBLANG_ENGLISH_PHILIPPINES	0x0d
752 #define SUBLANG_ENGLISH_INDIA	0x10
753 #define SUBLANG_ENGLISH_MALAYSIA	0x11
754 #define SUBLANG_ENGLISH_SINGAPORE	0x12
755 #define SUBLANG_ESTONIAN_ESTONIA	0x01
756 #define SUBLANG_FAEROESE_FAROE_ISLANDS	0x01
757 #define SUBLANG_FILIPINO_PHILIPPINES	0x01
758 #define SUBLANG_FINNISH_FINLAND	0x01
759 #define SUBLANG_FRENCH	0x01
760 #define SUBLANG_FRENCH_BELGIAN	0x02
761 #define SUBLANG_FRENCH_CANADIAN	0x03
762 #define SUBLANG_FRENCH_SWISS	0x04
763 #define SUBLANG_FRENCH_LUXEMBOURG	0x05
764 #define SUBLANG_FRENCH_MONACO	0x06
765 #define SUBLANG_FRISIAN_NETHERLANDS	0x01
766 #define SUBLANG_GALICIAN_GALICIAN	0x01
767 #define SUBLANG_GEORGIAN_GEORGIA	0x01
768 #define SUBLANG_GERMAN	0x01
769 #define SUBLANG_GERMAN_SWISS	0x02
770 #define SUBLANG_GERMAN_AUSTRIAN	0x03
771 #define SUBLANG_GERMAN_LUXEMBOURG	0x04
772 #define SUBLANG_GERMAN_LIECHTENSTEIN	0x05
773 #define SUBLANG_GREEK_GREECE	0x01
774 #define SUBLANG_GREENLANDIC_GREENLAND	0x01
775 #define SUBLANG_GUJARATI_INDIA	0x01
776 #define SUBLANG_HAUSA_NIGERIA_LATIN	0x01
777 #define SUBLANG_HAUSA_NIGERIA	SUBLANG_HAUSA_NIGERIA_LATIN /* SUBLANG_HAUSA_NIGERIA_LATIN is what MS defines */
778 #define SUBLANG_HEBREW_ISRAEL	0x01
779 #define SUBLANG_HINDI_INDIA	0x01
780 #define SUBLANG_HUNGARIAN_HUNGARY	0x01
781 #define SUBLANG_ICELANDIC_ICELAND	0x01
782 #define SUBLANG_IGBO_NIGERIA	0x01
783 #define SUBLANG_INDONESIAN_INDONESIA	0x01
784 #define SUBLANG_INUKTITUT_CANADA	0x01
785 #define SUBLANG_INUKTITUT_CANADA_LATIN	0x02
786 #define SUBLANG_IRISH_IRELAND	0x02
787 #define SUBLANG_ITALIAN	0x01
788 #define SUBLANG_ITALIAN_SWISS	0x02
789 #define SUBLANG_JAPANESE_JAPAN	0x01
790 #define SUBLANG_KASHMIRI_INDIA	0x02
791 #define SUBLANG_KASHMIRI_SASIA	0x02
792 #define SUBLANG_KAZAK_KAZAKHSTAN	0x01
793 #define SUBLANG_KHMER_CAMBODIA	0x01
794 #define SUBLANG_KICHE_GUATEMALA	0x01
795 #define SUBLANG_KINYARWANDA_RWANDA	0x01
796 #define SUBLANG_KONKANI_INDIA	0x01
797 #define SUBLANG_KOREAN	0x01
798 #define SUBLANG_KYRGYZ_KYRGYZSTAN	0x01
799 #define SUBLANG_LAO_LAO	0x01
800 #define SUBLANG_LAO_LAO_PDR	SUBLANG_LAO_LAO /* SUBLANG_LAO_LAO is what MS defines */
801 #define SUBLANG_LATVIAN_LATVIA	0x01
802 
803 #define SUBLANG_LITHUANIAN	0x01
804 #define SUBLANG_LOWER_SORBIAN_GERMANY	0x02
805 #define SUBLANG_LUXEMBOURGISH_LUXEMBOURG	0x01
806 #define SUBLANG_MACEDONIAN_MACEDONIA	0x01
807 #define SUBLANG_MALAY_MALAYSIA	0x01
808 #define SUBLANG_MALAY_BRUNEI_DARUSSALAM	0x02
809 #define SUBLANG_MALAYALAM_INDIA	0x01
810 #define SUBLANG_MALTESE_MALTA	0x01
811 #define SUBLANG_MAORI_NEW_ZEALAND	0x01
812 #define SUBLANG_MAPUDUNGUN_CHILE	0x01
813 #define SUBLANG_MARATHI_INDIA	0x01
814 #define SUBLANG_MOHAWK_MOHAWK	0x01
815 #define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA	0x01
816 #define SUBLANG_MONGOLIAN_PRC	0x02
817 #define SUBLANG_NEPALI_NEPAL	0x01
818 #define SUBLANG_NEPALI_INDIA	0x02
819 #define SUBLANG_NORWEGIAN_BOKMAL	0x01
820 #define SUBLANG_NORWEGIAN_NYNORSK	0x02
821 #define SUBLANG_OCCITAN_FRANCE	0x01
822 #define SUBLANG_ORIYA_INDIA	0x01
823 #define SUBLANG_PASHTO_AFGHANISTAN	0x01
824 #define SUBLANG_PERSIAN_IRAN	0x01
825 #define SUBLANG_POLISH_POLAND	0x01
826 #define SUBLANG_PORTUGUESE_BRAZILIAN	0x01
827 
828 #define SUBLANG_PORTUGUESE	0x02
829 #define SUBLANG_PUNJABI_INDIA	0x01
830 /* ??? #define SUBLANG_PUNJABI_PAKISTAN 0x01 ??? */
831 #define SUBLANG_QUECHUA_BOLIVIA	0x01
832 #define SUBLANG_QUECHUA_ECUADOR	0x02
833 #define SUBLANG_QUECHUA_PERU	0x03
834 #define SUBLANG_ROMANIAN_ROMANIA	0x01
835 /* ??? #define SUBLANG_ROMANIAN_MOLDOVA 0x01 ??? */
836 #define SUBLANG_ROMANSH_SWITZERLAND	0x01
837 #define SUBLANG_RUSSIAN_RUSSIA	0x01
838 #define SUBLANG_SAMI_NORTHERN_NORWAY	0x01
839 #define SUBLANG_SAMI_NORTHERN_SWEDEN	0x02
840 #define SUBLANG_SAMI_NORTHERN_FINLAND	0x03
841 #define SUBLANG_SAMI_LULE_NORWAY	0x04
842 #define SUBLANG_SAMI_LULE_SWEDEN	0x05
843 #define SUBLANG_SAMI_SOUTHERN_NORWAY	0x06
844 #define SUBLANG_SAMI_SOUTHERN_SWEDEN	0x07
845 #define SUBLANG_SAMI_SKOLT_FINLAND	0x08
846 #define SUBLANG_SAMI_INARI_FINLAND	0x09
847 #define SUBLANG_SANSKRIT_INDIA	0x01
848 #define SUBLANG_SERBIAN_LATIN	0x02
849 #define SUBLANG_SERBIAN_CYRILLIC	0x03
850 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN	0x06
851 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC	0x07
852 #define SUBLANG_SINDHI_AFGHANISTAN	0x02
853 #define SUBLANG_SINHALESE_SRI_LANKA	0x01
854 #define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA	0x01
855 #define SUBLANG_SLOVAK_SLOVAKIA	0x01
856 #define SUBLANG_SLOVENIAN_SLOVENIA	0x01
857 #define SUBLANG_SPANISH	0x01
858 #define SUBLANG_SPANISH_MEXICAN	0x02
859 #define SUBLANG_SPANISH_MODERN	0x03
860 #define SUBLANG_SPANISH_GUATEMALA	0x04
861 #define SUBLANG_SPANISH_COSTA_RICA	0x05
862 #define SUBLANG_SPANISH_PANAMA	0x06
863 #define SUBLANG_SPANISH_DOMINICAN_REPUBLIC	0x07
864 #define SUBLANG_SPANISH_VENEZUELA	0x08
865 #define SUBLANG_SPANISH_COLOMBIA	0x09
866 #define SUBLANG_SPANISH_PERU	0x0a
867 #define SUBLANG_SPANISH_ARGENTINA	0x0b
868 #define SUBLANG_SPANISH_ECUADOR	0x0c
869 #define SUBLANG_SPANISH_CHILE	0x0d
870 #define SUBLANG_SPANISH_URUGUAY	0x0e
871 #define SUBLANG_SPANISH_PARAGUAY	0x0f
872 #define SUBLANG_SPANISH_BOLIVIA	0x10
873 #define SUBLANG_SPANISH_EL_SALVADOR	0x11
874 #define SUBLANG_SPANISH_HONDURAS	0x12
875 #define SUBLANG_SPANISH_NICARAGUA	0x13
876 #define SUBLANG_SPANISH_PUERTO_RICO	0x14
877 #define SUBLANG_SPANISH_US	0x15
878 
879 #define SUBLANG_SWEDISH	0x01
880 #define SUBLANG_SWEDISH_FINLAND	0x02
881 #define SUBLANG_SYRIAC	0x01
882 #define SUBLANG_SYRIAC_SYRIA	SUBLANG_SYRIAC /* SUBLANG_SYRIAC_SYRIA is what MSDN mentions */
883 #define SUBLANG_TAJIK_TAJIKISTAN	0x01
884 #define SUBLANG_TAMAZIGHT_ALGERIA_LATIN	0x02
885 #define SUBLANG_TAMIL_INDIA	0x01
886 #define SUBLANG_TATAR_RUSSIA	0x01
887 #define SUBLANG_TELUGU_INDIA	0x01
888 #define SUBLANG_THAI_THAILAND	0x01
889 #define SUBLANG_TIBETAN_PRC	0x01
890 #define SUBLANG_TIBETAN_BHUTAN	0x02
891 #define SUBLANG_TIGRIGNA_ERITREA	0x02
892 #define SUBLANG_TSWANA_SOUTH_AFRICA	0x01
893 #define SUBLANG_TURKISH_TURKEY	0x01
894 #define SUBLANG_TURKMEN_TURKMENISTAN	0x01
895 #define SUBLANG_UIGHUR_PRC	0x01
896 #define SUBLANG_UKRAINIAN_UKRAINE	0x01
897 #define SUBLANG_UPPER_SORBIAN_GERMANY	0x01
898 #define SUBLANG_URDU_PAKISTAN	0x01
899 #define SUBLANG_URDU_INDIA	0x02
900 #define SUBLANG_UZBEK_LATIN	0x01
901 #define SUBLANG_UZBEK_CYRILLIC	0x02
902 #define SUBLANG_VIETNAMESE_VIETNAM	0x01
903 #define SUBLANG_WELSH_UNITED_KINGDOM	0x01
904 #define SUBLANG_WOLOF_SENEGAL	0x01
905 #define SUBLANG_YORUBA_NIGERIA	0x01
906 #define SUBLANG_XHOSA_SOUTH_AFRICA	0x01
907 #define SUBLANG_YAKUT_RUSSIA	0x01
908 #define SUBLANG_YI_PRC	0x01
909 #define SUBLANG_ZULU_SOUTH_AFRICA	0x01
910 #define NLS_VALID_LOCALE_MASK	1048575
911 #define SORT_DEFAULT	0
912 #define SORT_JAPANESE_XJIS	0
913 #define SORT_JAPANESE_UNICODE	1
914 #define SORT_CHINESE_BIG5	0
915 #define SORT_CHINESE_PRCP	0
916 #define SORT_CHINESE_UNICODE	1
917 #define SORT_CHINESE_PRC	2
918 #define SORT_CHINESE_BOPOMOFO	3
919 #define SORT_KOREAN_KSC	0
920 #define SORT_KOREAN_UNICODE	1
921 #define SORT_GERMAN_PHONE_BOOK	1
922 #define SORT_HUNGARIAN_DEFAULT	0
923 #define SORT_HUNGARIAN_TECHNICAL	1
924 #define SORT_GEORGIAN_TRADITIONAL	0
925 #define SORT_GEORGIAN_MODERN	1
926 #define MAKELANGID(p,s)	((((WORD)(s))<<10)|(WORD)(p))
927 #define MAKELCID(l,s) ((DWORD)((((DWORD)((WORD)(s)))<<16)|((DWORD)((WORD)(l)))))
928 #define PRIMARYLANGID(l)	((WORD)(l)&0x3ff)
929 #define SORTIDFROMLCID(l)	((WORD)((((DWORD)(l))&NLS_VALID_LOCALE_MASK)>>16))
930 #define SORTVERSIONFROMLCID(l) ((WORD)((((DWORD)(l))>>20)&0xf))
931 #define SUBLANGID(l)	((WORD)(l)>>10)
932 #define LANGIDFROMLCID(l)	((WORD)(l))
933 #define LANG_SYSTEM_DEFAULT	MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT)
934 #define LANG_USER_DEFAULT	MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT)
935 #define LOCALE_NEUTRAL	MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT)
936 #define ACL_REVISION	2
937 #define ACL_REVISION_DS 4
938 #define ACL_REVISION1 1
939 #define ACL_REVISION2 2
940 #define ACL_REVISION3 3
941 #define ACL_REVISION4 4
942 #define MIN_ACL_REVISION 2
943 #define MAX_ACL_REVISION 4
944 #define MINCHAR	0x80
945 #define MAXCHAR	0x7f
946 #define MINSHORT	0x8000
947 #define MAXSHORT	0x7fff
948 #define MINLONG	0x80000000
949 #define MAXLONG	0x7fffffff
950 #define MAXBYTE	0xff
951 #define MAXWORD	0xffff
952 #define MAXDWORD	0xffffffff
953 #define PROCESSOR_INTEL_386 386
954 #define PROCESSOR_INTEL_486 486
955 #define PROCESSOR_INTEL_PENTIUM 586
956 #define PROCESSOR_MIPS_R4000 4000
957 #define PROCESSOR_ALPHA_21064 21064
958 #define PROCESSOR_INTEL_IA64 2200
959 #define PROCESSOR_ARCHITECTURE_INTEL 0
960 #define PROCESSOR_ARCHITECTURE_MIPS 1
961 #define PROCESSOR_ARCHITECTURE_ALPHA 2
962 #define PROCESSOR_ARCHITECTURE_PPC 3
963 #define PROCESSOR_ARCHITECTURE_SHX 4
964 #define PROCESSOR_ARCHITECTURE_ARM 5
965 #define PROCESSOR_ARCHITECTURE_IA64 6
966 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
967 #define PROCESSOR_ARCHITECTURE_MSIL 8
968 #define PROCESSOR_ARCHITECTURE_AMD64 9
969 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
970 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
971 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
972 #define PF_FLOATING_POINT_EMULATED 1
973 #define PF_COMPARE_EXCHANGE_DOUBLE 2
974 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
975 #define PF_PPC_MOVEMEM_64BIT_OK 4
976 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
977 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
978 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
979 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
980 #define PF_PAE_ENABLED 9
981 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
982 /* also in ddk/ntifs.h */
983 #define FILE_ACTION_ADDED                   0x00000001
984 #define FILE_ACTION_REMOVED                 0x00000002
985 #define FILE_ACTION_MODIFIED                0x00000003
986 #define FILE_ACTION_RENAMED_OLD_NAME        0x00000004
987 #define FILE_ACTION_RENAMED_NEW_NAME        0x00000005
988 #define FILE_ACTION_ADDED_STREAM            0x00000006
989 #define FILE_ACTION_REMOVED_STREAM          0x00000007
990 #define FILE_ACTION_MODIFIED_STREAM         0x00000008
991 #define FILE_ACTION_REMOVED_BY_DELETE       0x00000009
992 #define FILE_ACTION_ID_NOT_TUNNELLED        0x0000000A
993 #define FILE_ACTION_TUNNELLED_ID_COLLISION  0x0000000B
994 /* end ntifs.h */
995 #define HEAP_NO_SERIALIZE 1
996 #define HEAP_GROWABLE 2
997 #define HEAP_GENERATE_EXCEPTIONS 4
998 #define HEAP_ZERO_MEMORY 8
999 #define HEAP_REALLOC_IN_PLACE_ONLY 16
1000 #define HEAP_TAIL_CHECKING_ENABLED 32
1001 #define HEAP_FREE_CHECKING_ENABLED 64
1002 #define HEAP_DISABLE_COALESCE_ON_FREE 128
1003 #define HEAP_CREATE_ALIGN_16 0x0000
1004 #define HEAP_CREATE_ENABLE_TRACING 0x20000
1005 #define HEAP_MAXIMUM_TAG 0xFFF
1006 #define HEAP_PSEUDO_TAG_FLAG 0x8000
1007 #define HEAP_TAG_SHIFT 16
1008 #define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b)+(o)<<16))
1009 #define KEY_QUERY_VALUE 1
1010 #define KEY_SET_VALUE 2
1011 #define KEY_CREATE_SUB_KEY 4
1012 #define KEY_ENUMERATE_SUB_KEYS 8
1013 #define KEY_NOTIFY 16
1014 #define KEY_CREATE_LINK 32
1015 #define KEY_WRITE 0x20006
1016 #define KEY_EXECUTE 0x20019
1017 #define KEY_READ 0x20019
1018 
1019 #define KEY_ALL_ACCESS 0xf003f
1020 #define REG_WHOLE_HIVE_VOLATILE	1
1021 #define REG_REFRESH_HIVE	2
1022 #define REG_NO_LAZY_FLUSH	4
1023 #define REG_OPTION_RESERVED	0
1024 #define REG_OPTION_NON_VOLATILE	0
1025 #define REG_OPTION_VOLATILE	1
1026 #define REG_OPTION_CREATE_LINK	2
1027 #define REG_OPTION_BACKUP_RESTORE	4
1028 #define REG_OPTION_OPEN_LINK	8
1029 #define REG_LEGAL_OPTION	15
1030 #define OWNER_SECURITY_INFORMATION 0x00000001
1031 #define GROUP_SECURITY_INFORMATION 0x00000002
1032 #define DACL_SECURITY_INFORMATION 0x00000004
1033 #define SACL_SECURITY_INFORMATION 0x00000008
1034 #define LABEL_SECURITY_INFORMATION 0x00000010
1035 #define UNPROTECTED_SACL_SECURITY_INFORMATION 0x10000000
1036 #define UNPROTECTED_DACL_SECURITY_INFORMATION 0x20000000
1037 #define PROTECTED_SACL_SECURITY_INFORMATION 0x40000000
1038 #define PROTECTED_DACL_SECURITY_INFORMATION 0x80000000
1039 #define MAXIMUM_PROCESSORS 32
1040 #define PAGE_NOACCESS	0x0001
1041 #define PAGE_READONLY	0x0002
1042 #define PAGE_READWRITE	0x0004
1043 #define PAGE_WRITECOPY	0x0008
1044 #define PAGE_EXECUTE	0x0010
1045 #define PAGE_EXECUTE_READ	0x0020
1046 #define PAGE_EXECUTE_READWRITE	0x0040
1047 #define PAGE_EXECUTE_WRITECOPY	0x0080
1048 #define PAGE_GUARD		0x0100
1049 #define PAGE_NOCACHE		0x0200
1050 #define PAGE_WRITECOMBINE 0x0400
1051 #define MEM_COMMIT           0x1000
1052 #define MEM_RESERVE          0x2000
1053 #define MEM_DECOMMIT         0x4000
1054 #define MEM_RELEASE          0x8000
1055 #define MEM_FREE            0x10000
1056 #define MEM_PRIVATE         0x20000
1057 #define MEM_MAPPED          0x40000
1058 #define MEM_RESET           0x80000
1059 #define MEM_TOP_DOWN       0x100000
1060 #define MEM_WRITE_WATCH	   0x200000 /* 98/Me */
1061 #define MEM_PHYSICAL	   0x400000
1062 #define MEM_4MB_PAGES    0x80000000
1063 /* also in ddk/ntifs.h */
1064 #define MEM_IMAGE        SEC_IMAGE
1065 #define SEC_BASED	0x00200000
1066 #define SEC_NO_CHANGE	0x00400000
1067 #define SEC_FILE	0x00800000
1068 #define SEC_IMAGE	0x01000000
1069 #define SEC_VLM		0x02000000
1070 #define SEC_RESERVE	0x04000000
1071 #define SEC_COMMIT	0x08000000
1072 #define SEC_NOCACHE	0x10000000
1073 /* end ntifs.h */
1074 #define SECTION_EXTEND_SIZE 16
1075 #define SECTION_MAP_READ 4
1076 #define SECTION_MAP_WRITE 2
1077 #define SECTION_QUERY 1
1078 #define SECTION_MAP_EXECUTE 8
1079 #define SECTION_ALL_ACCESS 0xf001f
1080 #define MESSAGE_RESOURCE_UNICODE 1
1081 #define RTL_CRITSECT_TYPE 0
1082 #define RTL_RESOURCE_TYPE 1
1083 /* Also in winddk.h */
1084 #define FIELD_OFFSET(t,f) ((LONG)&(((t*)0)->f))
1085 
1086 #ifndef CONTAINING_RECORD
1087 #define CONTAINING_RECORD(address, type, field) \
1088   ((type*)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
1089 #endif
1090 
1091 /* end winddk.h */
1092 #define IMAGE_SIZEOF_FILE_HEADER	20
1093 #define IMAGE_FILE_RELOCS_STRIPPED	1
1094 #define IMAGE_FILE_EXECUTABLE_IMAGE	2
1095 #define IMAGE_FILE_LINE_NUMS_STRIPPED	4
1096 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED	8
1097 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 	16
1098 #define IMAGE_FILE_LARGE_ADDRESS_AWARE	32
1099 #define IMAGE_FILE_BYTES_REVERSED_LO	128
1100 #define IMAGE_FILE_32BIT_MACHINE	256
1101 #define IMAGE_FILE_DEBUG_STRIPPED	512
1102 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP	1024
1103 #define IMAGE_FILE_NET_RUN_FROM_SWAP	2048
1104 #define IMAGE_FILE_SYSTEM	4096
1105 #define IMAGE_FILE_DLL	8192
1106 #define IMAGE_FILE_UP_SYSTEM_ONLY	16384
1107 #define IMAGE_FILE_BYTES_REVERSED_HI	32768
1108 
1109 #define IMAGE_FILE_MACHINE_UNKNOWN	0x0000
1110 #define IMAGE_FILE_MACHINE_AM33		0x01d3 /* Matsushita AM33 */
1111 #define IMAGE_FILE_MACHINE_AMD64	0x8664 /* x64 */
1112 #define IMAGE_FILE_MACHINE_ARM		0x01c0 /* ARM little endian */
1113 #define IMAGE_FILE_MACHINE_EBC		0x0ebc /* EFI byte code */
1114 #define IMAGE_FILE_MACHINE_I386		0x014c /* Intel 386 or later processors
1115 						  and compatible processors */
1116 #define IMAGE_FILE_MACHINE_IA64		0x0200 /* Intel Itanium processor family */
1117 #define IMAGE_FILE_MACHINE_M32R		0x9041 /* Mitsubishi M32R little endian */
1118 #define IMAGE_FILE_MACHINE_MIPS16	0x0266 /* MIPS16 */
1119 #define IMAGE_FILE_MACHINE_MIPSFPU	0x0366 /* MIPS with FPU */
1120 #define IMAGE_FILE_MACHINE_MIPSFPU16	0x0466 /* MIPS16 with FPU */
1121 #define IMAGE_FILE_MACHINE_POWERPC	0x01f0 /* Power PC little endian */
1122 #define IMAGE_FILE_MACHINE_POWERPCFP	0x01f1 /* Power PC with floating point support */
1123 #define IMAGE_FILE_MACHINE_R4000	0x0166 /* MIPS little endian */
1124 #define IMAGE_FILE_MACHINE_SH3		0x01a2 /* Hitachi SH3 */
1125 #define IMAGE_FILE_MACHINE_SH3DSP	0x01a3 /* Hitachi SH3 DSP */
1126 #define IMAGE_FILE_MACHINE_SH4		0x01a6 /* Hitachi SH4 */
1127 #define IMAGE_FILE_MACHINE_SH5		0x01a8 /* Hitachi SH5 */
1128 #define IMAGE_FILE_MACHINE_THUMB	0x01c2 /* Thumb */
1129 #define IMAGE_FILE_MACHINE_WCEMIPSV2	0x0169 /* MIPS little-endian WCE v2 */
1130 
1131 #define IMAGE_DOS_SIGNATURE 0x5A4D
1132 #define IMAGE_OS2_SIGNATURE 0x454E
1133 #define IMAGE_OS2_SIGNATURE_LE 0x454C
1134 #define IMAGE_VXD_SIGNATURE 0x454C
1135 #define IMAGE_NT_SIGNATURE 0x00004550
1136 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
1137 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
1138 
1139 #ifdef _WIN64
1140 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
1141 #else
1142 
1143 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
1144 #endif
1145 
1146 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
1147 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
1148 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
1149 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
1150 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
1151 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER 224
1152 #define IMAGE_SIZEOF_SHORT_NAME 8
1153 #define IMAGE_SIZEOF_SECTION_HEADER 40
1154 #define IMAGE_SIZEOF_SYMBOL 18
1155 #define IMAGE_SIZEOF_AUX_SYMBOL 18
1156 #define IMAGE_SIZEOF_RELOCATION 10
1157 #define IMAGE_SIZEOF_BASE_RELOCATION 8
1158 #define IMAGE_SIZEOF_LINENUMBER 6
1159 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
1160 #define SIZEOF_RFPO_DATA 16
1161 
1162 #define IMAGE_SUBSYSTEM_UNKNOWN	0
1163 #define IMAGE_SUBSYSTEM_NATIVE	1
1164 #define IMAGE_SUBSYSTEM_WINDOWS_GUI	2
1165 #define IMAGE_SUBSYSTEM_WINDOWS_CUI	3
1166 #define IMAGE_SUBSYSTEM_OS2_CUI		5  /* Not in PECOFF v8 spec */
1167 #define IMAGE_SUBSYSTEM_POSIX_CUI	7
1168 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS	8  /* Not in PECOFF v8 spec */
1169 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI	9
1170 #define IMAGE_SUBSYSTEM_EFI_APPLICATION	10
1171 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER	11
1172 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER	12
1173 #define IMAGE_SUBSYSTEM_EFI_ROM	13
1174 #define IMAGE_SUBSYSTEM_XBOX	14
1175 
1176 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE		0x0040
1177 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY	0x0080
1178 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT		0x0100
1179 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION		0x0200
1180 #define IMAGE_DLLCHARACTERISTICS_NO_SEH			0x0400
1181 #define IMAGE_DLLCHARACTERISTICS_NO_BIND		0x0800
1182 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER		0x2000
1183 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE	0x8000
1184 
1185 /* Keep broken definitions for backward compatibility. */
1186 #define IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
1187 #define IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
1188 #define IMAGE_DLL_CHARACTERISTICS_NX_COMPAT IMAGE_DLLCHARACTERISTICS_NX_COMPAT
1189 
1190 #define IMAGE_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) ((DWORD)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+((PIMAGE_NT_HEADERS)(h))->FileHeader.SizeOfOptionalHeader))
1191 #define IMAGE_DIRECTORY_ENTRY_EXPORT	0
1192 #define IMAGE_DIRECTORY_ENTRY_IMPORT	1
1193 #define IMAGE_DIRECTORY_ENTRY_RESOURCE	2
1194 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION	3
1195 #define IMAGE_DIRECTORY_ENTRY_SECURITY	4
1196 #define IMAGE_DIRECTORY_ENTRY_BASERELOC	5
1197 #define IMAGE_DIRECTORY_ENTRY_DEBUG	6
1198 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT	7
1199 #define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE	7
1200 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR	8
1201 #define IMAGE_DIRECTORY_ENTRY_TLS	9
1202 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG	10
1203 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT	11
1204 #define IMAGE_DIRECTORY_ENTRY_IAT	12
1205 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT	13
1206 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR	14
1207 #define IMAGE_SCN_TYPE_REG 0
1208 #define IMAGE_SCN_TYPE_DSECT 1
1209 #define IMAGE_SCN_TYPE_NOLOAD 2
1210 #define IMAGE_SCN_TYPE_GROUP 4
1211 #define IMAGE_SCN_TYPE_NO_PAD 8
1212 #define IMAGE_SCN_TYPE_COPY 16
1213 #define IMAGE_SCN_CNT_CODE 32
1214 #define IMAGE_SCN_CNT_INITIALIZED_DATA 64
1215 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 128
1216 #define IMAGE_SCN_LNK_OTHER 256
1217 #define IMAGE_SCN_LNK_INFO 512
1218 #define IMAGE_SCN_TYPE_OVER 1024
1219 #define IMAGE_SCN_LNK_REMOVE 2048
1220 #define IMAGE_SCN_LNK_COMDAT 4096
1221 #define IMAGE_SCN_GPREL	0x8000 /*  Valid only for IA64 */
1222 #define IMAGE_SCN_MEM_FARDATA 0x8000 /* Not in PECOFF v8 spec */
1223 #define IMAGE_SCN_MEM_PURGEABLE 0x20000
1224 #define IMAGE_SCN_MEM_16BIT 0x20000
1225 #define IMAGE_SCN_MEM_LOCKED  0x40000
1226 #define IMAGE_SCN_MEM_PRELOAD 0x80000
1227 #define IMAGE_SCN_ALIGN_1BYTES 0x100000
1228 #define IMAGE_SCN_ALIGN_2BYTES 0x200000
1229 #define IMAGE_SCN_ALIGN_4BYTES 0x300000
1230 #define IMAGE_SCN_ALIGN_8BYTES 0x400000
1231 #define IMAGE_SCN_ALIGN_16BYTES 0x500000
1232 #define IMAGE_SCN_ALIGN_32BYTES 0x600000
1233 #define IMAGE_SCN_ALIGN_64BYTES 0x700000
1234 #define IMAGE_SCN_ALIGN_128BYTES 0x800000
1235 #define IMAGE_SCN_ALIGN_256BYTES 0x900000
1236 #define IMAGE_SCN_ALIGN_512BYTES 0xa00000
1237 #define IMAGE_SCN_ALIGN_1024BYTES 0xb00000
1238 #define IMAGE_SCN_ALIGN_2048BYTES 0xc00000
1239 #define IMAGE_SCN_ALIGN_4096BYTES 0xd00000
1240 #define IMAGE_SCN_ALIGN_8192BYTES 0xe00000
1241 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x1000000
1242 #define IMAGE_SCN_MEM_DISCARDABLE 0x2000000
1243 #define IMAGE_SCN_MEM_NOT_CACHED 0x4000000
1244 #define IMAGE_SCN_MEM_NOT_PAGED 0x8000000
1245 #define IMAGE_SCN_MEM_SHARED 0x10000000
1246 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
1247 #define IMAGE_SCN_MEM_READ 0x40000000
1248 #define IMAGE_SCN_MEM_WRITE 0x80000000
1249 #define IMAGE_SYM_UNDEFINED	0
1250 #define IMAGE_SYM_ABSOLUTE (-1)
1251 #define IMAGE_SYM_DEBUG	(-2)
1252 #define IMAGE_SYM_TYPE_NULL 0
1253 #define IMAGE_SYM_TYPE_VOID 1
1254 #define IMAGE_SYM_TYPE_CHAR 2
1255 #define IMAGE_SYM_TYPE_SHORT 3
1256 #define IMAGE_SYM_TYPE_INT 4
1257 #define IMAGE_SYM_TYPE_LONG 5
1258 #define IMAGE_SYM_TYPE_FLOAT 6
1259 #define IMAGE_SYM_TYPE_DOUBLE 7
1260 #define IMAGE_SYM_TYPE_STRUCT 8
1261 #define IMAGE_SYM_TYPE_UNION 9
1262 #define IMAGE_SYM_TYPE_ENUM 10
1263 #define IMAGE_SYM_TYPE_MOE 11
1264 #define IMAGE_SYM_TYPE_BYTE 12
1265 #define IMAGE_SYM_TYPE_WORD 13
1266 #define IMAGE_SYM_TYPE_UINT 14
1267 #define IMAGE_SYM_TYPE_DWORD 15
1268 #define IMAGE_SYM_TYPE_PCODE 32768
1269 #define IMAGE_SYM_DTYPE_NULL 0
1270 #define IMAGE_SYM_DTYPE_POINTER 1
1271 #define IMAGE_SYM_DTYPE_FUNCTION 2
1272 #define IMAGE_SYM_DTYPE_ARRAY 3
1273 #define IMAGE_SYM_CLASS_END_OF_FUNCTION	(-1)
1274 #define IMAGE_SYM_CLASS_NULL 0
1275 #define IMAGE_SYM_CLASS_AUTOMATIC 1
1276 #define IMAGE_SYM_CLASS_EXTERNAL 2
1277 #define IMAGE_SYM_CLASS_STATIC 3
1278 #define IMAGE_SYM_CLASS_REGISTER 4
1279 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 5
1280 #define IMAGE_SYM_CLASS_LABEL 6
1281 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 7
1282 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8
1283 #define IMAGE_SYM_CLASS_ARGUMENT 9
1284 #define IMAGE_SYM_CLASS_STRUCT_TAG 10
1285 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 11
1286 #define IMAGE_SYM_CLASS_UNION_TAG 12
1287 #define IMAGE_SYM_CLASS_TYPE_DEFINITION 13
1288 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 14
1289 #define IMAGE_SYM_CLASS_ENUM_TAG 15
1290 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16
1291 #define IMAGE_SYM_CLASS_REGISTER_PARAM 17
1292 #define IMAGE_SYM_CLASS_BIT_FIELD 18
1293 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 68 /* Not in PECOFF v8 spec */
1294 #define IMAGE_SYM_CLASS_BLOCK 100
1295 #define IMAGE_SYM_CLASS_FUNCTION 101
1296 #define IMAGE_SYM_CLASS_END_OF_STRUCT 102
1297 #define IMAGE_SYM_CLASS_FILE 103
1298 #define IMAGE_SYM_CLASS_SECTION 104
1299 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 105
1300 #define IMAGE_SYM_CLASS_CLR_TOKEN 107
1301 
1302 #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
1303 #define IMAGE_COMDAT_SELECT_ANY 2
1304 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
1305 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
1306 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
1307 #define IMAGE_COMDAT_SELECT_LARGEST 6
1308 #define IMAGE_COMDAT_SELECT_NEWEST 7 /* Not in PECOFF v8 spec */
1309 
1310 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
1311 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
1312 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
1313 
1314 #define IMAGE_REL_I386_ABSOLUTE	0x0000
1315 #define IMAGE_REL_I386_DIR16	0x0001
1316 #define IMAGE_REL_I386_REL16	0x0002
1317 #define IMAGE_REL_I386_DIR32	0x0006
1318 #define IMAGE_REL_I386_DIR32NB	0x0007
1319 #define IMAGE_REL_I386_SEG12	0x0009
1320 #define IMAGE_REL_I386_SECTION	0x000A
1321 #define IMAGE_REL_I386_SECREL	0x000B
1322 #define IMAGE_REL_I386_TOKEN	0x000C
1323 #define IMAGE_REL_I386_SECREL7	0x000D
1324 #define IMAGE_REL_I386_REL32	0x0014
1325 
1326 #define IMAGE_REL_AMD64_ABSOLUTE	0x0000
1327 #define IMAGE_REL_AMD64_ADDR64		0x0001
1328 #define IMAGE_REL_AMD64_ADDR32		0x0002
1329 #define IMAGE_REL_AMD64_ADDR32NB	0x0003
1330 #define IMAGE_REL_AMD64_REL32		0x0004
1331 #define IMAGE_REL_AMD64_REL32_1		0x0005
1332 #define IMAGE_REL_AMD64_REL32_2		0x0006
1333 #define IMAGE_REL_AMD64_REL32_3		0x0007
1334 #define IMAGE_REL_AMD64_REL32_4		0x0008
1335 #define IMAGE_REL_AMD64_REL32_5		0x0009
1336 #define IMAGE_REL_AMD64_SECTION		0x000A
1337 #define IMAGE_REL_AMD64_SECREL		0x000B
1338 #define IMAGE_REL_AMD64_SECREL7		0x000C
1339 #define IMAGE_REL_AMD64_TOKEN		0x000D
1340 #define IMAGE_REL_AMD64_SREL32		0x000E
1341 #define IMAGE_REL_AMD64_PAIR		0x000F
1342 #define IMAGE_REL_AMD64_SSPAN32		0x0010
1343 
1344 #define IMAGE_REL_IA64_ABSOLUTE		0x0000
1345 #define IMAGE_REL_IA64_IMM14		0x0001
1346 #define IMAGE_REL_IA64_IMM22		0x0002
1347 #define IMAGE_REL_IA64_IMM64		0x0003
1348 #define IMAGE_REL_IA64_DIR32		0x0004
1349 #define IMAGE_REL_IA64_DIR64		0x0005
1350 #define IMAGE_REL_IA64_PCREL21B		0x0006
1351 #define IMAGE_REL_IA64_PCREL21M		0x0007
1352 #define IMAGE_REL_IA64_PCREL21F		0x0008
1353 #define IMAGE_REL_IA64_GPREL22		0x0009
1354 #define IMAGE_REL_IA64_LTOFF22		0x000A
1355 #define IMAGE_REL_IA64_SECTION		0x000B
1356 #define IMAGE_REL_IA64_SECREL22		0x000C
1357 #define IMAGE_REL_IA64_SECREL64I	0x000D
1358 #define IMAGE_REL_IA64_SECREL32		0x000E
1359 #define IMAGE_REL_IA64_DIR32NB		0x0010
1360 #define IMAGE_REL_IA64_SREL14		0x0011
1361 #define IMAGE_REL_IA64_SREL22		0x0012
1362 #define IMAGE_REL_IA64_SREL32		0x0013
1363 #define IMAGE_REL_IA64_UREL32		0x0014
1364 #define IMAGE_REL_IA64_PCREL60X		0x0015
1365 #define IMAGE_REL_IA64_PCREL60B		0x0016
1366 #define IMAGE_REL_IA64_PCREL60F		0x0017
1367 #define IMAGE_REL_IA64_PCREL60I		0x0018
1368 #define IMAGE_REL_IA64_PCREL60M		0x0019
1369 #define IMAGE_REL_IA64_IMMGPREL64	0x001a
1370 #define IMAGE_REL_IA64_TOKEN		0x001b
1371 #define IMAGE_REL_IA64_GPREL32		0x001c
1372 #define IMAGE_REL_IA64_ADDEND		0x001F
1373 
1374 #define	IMAGE_REL_SH3_ABSOLUTE		0x0000
1375 #define	IMAGE_REL_SH3_DIRECT16		0x0001
1376 #define	IMAGE_REL_SH3_DIRECT32		0x0002
1377 #define	IMAGE_REL_SH3_DIRECT8		0x0003
1378 #define	IMAGE_REL_SH3_DIRECT8_WORD	0x0004
1379 #define	IMAGE_REL_SH3_DIRECT8_LONG	0x0005
1380 #define	IMAGE_REL_SH3_DIRECT4		0x0006
1381 #define	IMAGE_REL_SH3_DIRECT4_WORD	0x0007
1382 #define	IMAGE_REL_SH3_DIRECT4_LONG	0x0008
1383 #define	IMAGE_REL_SH3_PCREL8_WORD	0x0009
1384 #define	IMAGE_REL_SH3_PCREL8_LONG	0x000A
1385 #define	IMAGE_REL_SH3_PCREL12_WORD	0x000B
1386 #define	IMAGE_REL_SH3_STARTOF_SECTION	0x000C
1387 #define	IMAGE_REL_SH3_SIZEOF_SECTION	0x000D
1388 #define	IMAGE_REL_SH3_SECTION		0x000E
1389 #define	IMAGE_REL_SH3_SECREL		0x000F
1390 #define	IMAGE_REL_SH3_DIRECT32_NB	0x0010
1391 #define	IMAGE_REL_SH3_GPREL4_LONG	0x0011
1392 #define	IMAGE_REL_SH3_TOKEN		0x0012
1393 #define	IMAGE_REL_SHM_PCRELPT		0x0013
1394 #define	IMAGE_REL_SHM_REFLO		0x0014
1395 #define	IMAGE_REL_SHM_REFHALF		0x0015
1396 #define	IMAGE_REL_SHM_RELLO		0x0016
1397 #define	IMAGE_REL_SHM_RELHALF		0x0017
1398 #define	IMAGE_REL_SHM_PAIR		0x0018
1399 #define	IMAGE_REL_SHM_NOMODE		0x8000
1400 
1401 #define	IMAGE_REL_M32R_ABSOLUTE	0x0000
1402 #define	IMAGE_REL_M32R_ADDR32	0x0001
1403 #define	IMAGE_REL_M32R_ADDR32NB	0x0002
1404 #define	IMAGE_REL_M32R_ADDR24	0x0003
1405 #define	IMAGE_REL_M32R_GPREL16	0x0004
1406 #define	IMAGE_REL_M32R_PCREL24	0x0005
1407 #define	IMAGE_REL_M32R_PCREL16	0x0006
1408 #define	IMAGE_REL_M32R_PCREL8	0x0007
1409 #define	IMAGE_REL_M32R_REFHALF	0x0008
1410 #define	IMAGE_REL_M32R_REFHI	0x0009
1411 #define	IMAGE_REL_M32R_REFLO	0x000A
1412 #define	IMAGE_REL_M32R_PAIR	0x000B
1413 #define	IMAGE_REL_M32R_SECTION	0x000C
1414 #define	IMAGE_REL_M32R_SECREL	0x000D
1415 #define	IMAGE_REL_M32R_TOKEN	0x000E
1416 
1417 #define	IMAGE_REL_MIPS_ABSOLUTE	0x0000
1418 #define	IMAGE_REL_MIPS_REFHALF	0x0001
1419 #define	IMAGE_REL_MIPS_REFWORD	0x0002
1420 #define	IMAGE_REL_MIPS_JMPADDR	0x0003
1421 #define	IMAGE_REL_MIPS_REFHI	0x0004
1422 #define	IMAGE_REL_MIPS_REFLO	0x0005
1423 #define	IMAGE_REL_MIPS_GPREL	0x0006
1424 #define	IMAGE_REL_MIPS_LITERAL	0x0007
1425 #define	IMAGE_REL_MIPS_SECTION	0x000A
1426 #define	IMAGE_REL_MIPS_SECREL	0x000B
1427 #define	IMAGE_REL_MIPS_SECRELLO	0x000C
1428 #define	IMAGE_REL_MIPS_SECRELHI	0x000D
1429 #define	IMAGE_REL_MIPS_JMPADDR16	0x0010
1430 #define	IMAGE_REL_MIPS_REFWORDNB	0x0022
1431 #define	IMAGE_REL_MIPS_PAIR	0x0025
1432 
1433 #define IMAGE_REL_ALPHA_ABSOLUTE 0
1434 #define IMAGE_REL_ALPHA_REFLONG 1
1435 #define IMAGE_REL_ALPHA_REFQUAD 2
1436 #define IMAGE_REL_ALPHA_GPREL32 3
1437 #define IMAGE_REL_ALPHA_LITERAL 4
1438 #define IMAGE_REL_ALPHA_LITUSE 5
1439 #define IMAGE_REL_ALPHA_GPDISP 6
1440 #define IMAGE_REL_ALPHA_BRADDR 7
1441 #define IMAGE_REL_ALPHA_HINT 8
1442 #define IMAGE_REL_ALPHA_INLINE_REFLONG 9
1443 #define IMAGE_REL_ALPHA_REFHI 10
1444 #define IMAGE_REL_ALPHA_REFLO 11
1445 #define IMAGE_REL_ALPHA_PAIR 12
1446 #define IMAGE_REL_ALPHA_MATCH 13
1447 #define IMAGE_REL_ALPHA_SECTION 14
1448 #define IMAGE_REL_ALPHA_SECREL 15
1449 #define IMAGE_REL_ALPHA_REFLONGNB 16
1450 #define IMAGE_REL_ALPHA_SECRELLO 17
1451 #define IMAGE_REL_ALPHA_SECRELHI 18
1452 #define IMAGE_REL_PPC_ABSOLUTE 0
1453 #define IMAGE_REL_PPC_ADDR64 1
1454 #define IMAGE_REL_PPC_ADDR32 2
1455 #define IMAGE_REL_PPC_ADDR24 3
1456 #define IMAGE_REL_PPC_ADDR16 4
1457 #define IMAGE_REL_PPC_ADDR14 5
1458 #define IMAGE_REL_PPC_REL24 6
1459 #define IMAGE_REL_PPC_REL14 7
1460 #define IMAGE_REL_PPC_TOCREL16 8
1461 #define IMAGE_REL_PPC_TOCREL14 9
1462 #define IMAGE_REL_PPC_ADDR32NB 10
1463 #define IMAGE_REL_PPC_SECREL 11
1464 #define IMAGE_REL_PPC_SECTION 12
1465 #define IMAGE_REL_PPC_IFGLUE 13
1466 #define IMAGE_REL_PPC_IMGLUE 14
1467 #define IMAGE_REL_PPC_SECREL16 15
1468 #define IMAGE_REL_PPC_REFHI 16
1469 #define IMAGE_REL_PPC_REFLO 17
1470 #define IMAGE_REL_PPC_PAIR 18
1471 #define IMAGE_REL_PPC_TYPEMASK 255
1472 #define IMAGE_REL_PPC_NEG 256
1473 #define IMAGE_REL_PPC_BRTAKEN 512
1474 #define IMAGE_REL_PPC_BRNTAKEN 1024
1475 #define IMAGE_REL_PPC_TOCDEFN 2048
1476 #define IMAGE_REL_BASED_ABSOLUTE 0
1477 #define IMAGE_REL_BASED_HIGH 1
1478 #define IMAGE_REL_BASED_LOW 2
1479 #define IMAGE_REL_BASED_HIGHLOW 3
1480 #define IMAGE_REL_BASED_HIGHADJ 4
1481 #define IMAGE_REL_BASED_MIPS_JMPADDR 5
1482 #define IMAGE_ARCHIVE_START_SIZE 8
1483 #define IMAGE_ARCHIVE_START "!<arch>\n"
1484 #define IMAGE_ARCHIVE_END "`\n"
1485 #define IMAGE_ARCHIVE_PAD "\n"
1486 #define IMAGE_ARCHIVE_LINKER_MEMBER "/               "
1487 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "//              "
1488 #define IMAGE_ORDINAL_FLAG32 0x80000000
1489 #define IMAGE_SNAP_BY_ORDINAL32(o) ((o&IMAGE_ORDINAL_FLAG32)!=0)
1490 #define IMAGE_ORDINAL32(o) (o&0xffff)
1491 #define IMAGE_ORDINAL_FLAG64 0x8000000000000000ULL
1492 #define IMAGE_SNAP_BY_ORDINAL64(o) ((o&IMAGE_ORDINAL_FLAG64)!=0)
1493 #define IMAGE_ORDINAL64(o) (o&0xffff)
1494 
1495 #ifdef _WIN64
1496 #define IMAGE_ORDINAL_FLAG		IMAGE_ORDINAL_FLAG64
1497 #define IMAGE_SNAP_BY_ORDINAL(o)	IMAGE_SNAP_BY_ORDINAL64(o)
1498 #define IMAGE_ORDINAL(o)		IMAGE_ORDINAL64(o)
1499 #else
1500 
1501 #define IMAGE_ORDINAL_FLAG		IMAGE_ORDINAL_FLAG32
1502 #define IMAGE_SNAP_BY_ORDINAL(o)	IMAGE_SNAP_BY_ORDINAL32(o)
1503 #define IMAGE_ORDINAL(o)		IMAGE_ORDINAL32(o)
1504 #endif
1505 
1506 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
1507 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
1508 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
1509 #define IMAGE_DEBUG_TYPE_COFF 1
1510 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
1511 #define IMAGE_DEBUG_TYPE_FPO 3
1512 #define IMAGE_DEBUG_TYPE_MISC 4
1513 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
1514 #define IMAGE_DEBUG_TYPE_FIXUP 6
1515 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
1516 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
1517 #define IMAGE_DEBUG_TYPE_BORLAND 9
1518 #define FRAME_FPO 0
1519 #define FRAME_TRAP 1
1520 #define FRAME_TSS 2
1521 #define FRAME_NONFPO 3
1522 #define IMAGE_DEBUG_MISC_EXENAME 1
1523 #define N_BTMASK 0x000F
1524 #define N_TMASK 0x0030
1525 #define N_TMASK1 0x00C0
1526 #define N_TMASK2 0x00F0
1527 #define N_BTSHFT 4
1528 #define N_TSHIFT 2
1529 #define IS_TEXT_UNICODE_ASCII16 1
1530 #define IS_TEXT_UNICODE_REVERSE_ASCII16 16
1531 #define IS_TEXT_UNICODE_STATISTICS 2
1532 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 32
1533 #define IS_TEXT_UNICODE_CONTROLS 4
1534 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 64
1535 #define IS_TEXT_UNICODE_SIGNATURE 8
1536 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 128
1537 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 256
1538 #define IS_TEXT_UNICODE_ODD_LENGTH 512
1539 #define IS_TEXT_UNICODE_NULL_BYTES 4096
1540 #define IS_TEXT_UNICODE_UNICODE_MASK 15
1541 #define IS_TEXT_UNICODE_REVERSE_MASK 240
1542 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 3840
1543 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 61440
1544 #define SERVICE_KERNEL_DRIVER 1
1545 #define SERVICE_FILE_SYSTEM_DRIVER 2
1546 #define SERVICE_ADAPTER 4
1547 #define SERVICE_RECOGNIZER_DRIVER 8
1548 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER|SERVICE_FILE_SYSTEM_DRIVER|SERVICE_RECOGNIZER_DRIVER)
1549 #define SERVICE_WIN32_OWN_PROCESS 16
1550 #define SERVICE_WIN32_SHARE_PROCESS 32
1551 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS|SERVICE_WIN32_SHARE_PROCESS)
1552 #define SERVICE_INTERACTIVE_PROCESS 256
1553 #define SERVICE_TYPE_ALL (SERVICE_WIN32|SERVICE_ADAPTER|SERVICE_DRIVER|SERVICE_INTERACTIVE_PROCESS)
1554 #define SERVICE_BOOT_START 0
1555 #define SERVICE_SYSTEM_START 1
1556 #define SERVICE_AUTO_START 2
1557 #define SERVICE_DEMAND_START 3
1558 #define SERVICE_DISABLED 4
1559 #define SERVICE_ERROR_IGNORE 0
1560 #define SERVICE_ERROR_NORMAL 1
1561 #define SERVICE_ERROR_SEVERE 2
1562 #define SERVICE_ERROR_CRITICAL 3
1563 #define SE_OWNER_DEFAULTED 1
1564 #define SE_GROUP_DEFAULTED 2
1565 #define SE_DACL_PRESENT 4
1566 #define SE_DACL_DEFAULTED 8
1567 #define SE_SACL_PRESENT 16
1568 #define SE_SACL_DEFAULTED 32
1569 #define SE_DACL_AUTO_INHERIT_REQ 256
1570 #define SE_SACL_AUTO_INHERIT_REQ 512
1571 #define SE_DACL_AUTO_INHERITED 1024
1572 #define SE_SACL_AUTO_INHERITED 2048
1573 #define SE_DACL_PROTECTED 4096
1574 #define SE_SACL_PROTECTED 8192
1575 #define SE_SELF_RELATIVE 0x8000
1576 #define SECURITY_DESCRIPTOR_MIN_LENGTH 20
1577 #define SECURITY_DESCRIPTOR_REVISION 1
1578 #define SECURITY_DESCRIPTOR_REVISION1 1
1579 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT 1
1580 #define SE_PRIVILEGE_ENABLED 2
1581 #define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
1582 #define PRIVILEGE_SET_ALL_NECESSARY 1
1583 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
1584 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
1585 #define SECURITY_DYNAMIC_TRACKING TRUE
1586 #define SECURITY_STATIC_TRACKING FALSE
1587 /* also in ddk/ntifs.h */
1588 #define TOKEN_ASSIGN_PRIMARY            (0x0001)
1589 #define TOKEN_DUPLICATE                 (0x0002)
1590 #define TOKEN_IMPERSONATE               (0x0004)
1591 #define TOKEN_QUERY                     (0x0008)
1592 #define TOKEN_QUERY_SOURCE              (0x0010)
1593 #define TOKEN_ADJUST_PRIVILEGES         (0x0020)
1594 #define TOKEN_ADJUST_GROUPS             (0x0040)
1595 #define TOKEN_ADJUST_DEFAULT            (0x0080)
1596 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
1597                           TOKEN_ASSIGN_PRIMARY     |\
1598                           TOKEN_DUPLICATE          |\
1599                           TOKEN_IMPERSONATE        |\
1600                           TOKEN_QUERY              |\
1601                           TOKEN_QUERY_SOURCE       |\
1602                           TOKEN_ADJUST_PRIVILEGES  |\
1603                           TOKEN_ADJUST_GROUPS      |\
1604                           TOKEN_ADJUST_DEFAULT)
1605 #define TOKEN_READ       (STANDARD_RIGHTS_READ     |\
1606                           TOKEN_QUERY)
1607 #define TOKEN_WRITE      (STANDARD_RIGHTS_WRITE    |\
1608                           TOKEN_ADJUST_PRIVILEGES  |\
1609                           TOKEN_ADJUST_GROUPS      |\
1610                           TOKEN_ADJUST_DEFAULT)
1611 
1612 #define TOKEN_EXECUTE    (STANDARD_RIGHTS_EXECUTE)
1613 #define TOKEN_SOURCE_LENGTH 8
1614 
1615 /* end ddk/ntifs.h */
1616 #define DLL_PROCESS_DETACH	0
1617 #define DLL_PROCESS_ATTACH	1
1618 #define DLL_THREAD_ATTACH	2
1619 #define DLL_THREAD_DETACH	3
1620 #define DBG_CONTINUE 0x10002
1621 #define DBG_TERMINATE_THREAD 0x40010003
1622 #define DBG_TERMINATE_PROCESS 0x40010004
1623 #define DBG_CONTROL_C 0x40010005
1624 #define DBG_CONTROL_BREAK 0x40010008
1625 #define DBG_EXCEPTION_NOT_HANDLED 0x80010001
1626 #define TAPE_ABSOLUTE_POSITION 0
1627 #define TAPE_LOGICAL_POSITION 1
1628 #define TAPE_PSEUDO_LOGICAL_POSITION 2
1629 #define TAPE_REWIND 0
1630 #define TAPE_ABSOLUTE_BLOCK 1
1631 #define TAPE_LOGICAL_BLOCK 2
1632 #define TAPE_PSEUDO_LOGICAL_BLOCK 3
1633 #define TAPE_SPACE_END_OF_DATA 4
1634 #define TAPE_SPACE_RELATIVE_BLOCKS 5
1635 #define TAPE_SPACE_FILEMARKS 6
1636 #define TAPE_SPACE_SEQUENTIAL_FMKS 7
1637 #define TAPE_SPACE_SETMARKS 8
1638 #define TAPE_SPACE_SEQUENTIAL_SMKS 9
1639 #define TAPE_DRIVE_FIXED 1
1640 #define TAPE_DRIVE_SELECT 2
1641 #define TAPE_DRIVE_INITIATOR 4
1642 #define TAPE_DRIVE_ERASE_SHORT 16
1643 #define TAPE_DRIVE_ERASE_LONG 32
1644 #define TAPE_DRIVE_ERASE_BOP_ONLY 64
1645 #define TAPE_DRIVE_ERASE_IMMEDIATE 128
1646 #define TAPE_DRIVE_TAPE_CAPACITY 256
1647 #define TAPE_DRIVE_TAPE_REMAINING 512
1648 #define TAPE_DRIVE_FIXED_BLOCK 1024
1649 #define TAPE_DRIVE_VARIABLE_BLOCK 2048
1650 #define TAPE_DRIVE_WRITE_PROTECT 4096
1651 #define TAPE_DRIVE_EOT_WZ_SIZE 8192
1652 #define TAPE_DRIVE_ECC 0x10000
1653 #define TAPE_DRIVE_COMPRESSION 0x20000
1654 #define TAPE_DRIVE_PADDING 0x40000
1655 #define TAPE_DRIVE_REPORT_SMKS 0x80000
1656 #define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x100000
1657 #define TAPE_DRIVE_GET_LOGICAL_BLK 0x200000
1658 #define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x400000
1659 #define TAPE_DRIVE_EJECT_MEDIA 0x1000000
1660 #define TAPE_DRIVE_CLEAN_REQUESTS 0x2000000
1661 #define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x4000000
1662 #define TAPE_DRIVE_RESERVED_BIT 0x80000000
1663 #define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
1664 #define TAPE_DRIVE_TENSION 0x80000002
1665 #define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
1666 #define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
1667 #define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
1668 #define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
1669 #define TAPE_DRIVE_TENSION_IMMED 0x80000040
1670 #define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
1671 #define TAPE_DRIVE_SET_ECC 0x80000100
1672 #define TAPE_DRIVE_SET_COMPRESSION 0x80000200
1673 #define TAPE_DRIVE_SET_PADDING 0x80000400
1674 #define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
1675 #define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
1676 #define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
1677 #define TAPE_DRIVE_LOGICAL_BLK 0x80004000
1678 #define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
1679 #define TAPE_DRIVE_END_OF_DATA 0x80010000
1680 #define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
1681 #define TAPE_DRIVE_FILEMARKS 0x80040000
1682 #define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
1683 #define TAPE_DRIVE_SETMARKS 0x80100000
1684 #define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
1685 #define TAPE_DRIVE_REVERSE_POSITION 0x80400000
1686 #define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
1687 #define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
1688 #define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
1689 #define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
1690 #define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
1691 #define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
1692 #define TAPE_DRIVE_FORMAT 0xA0000000
1693 #define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
1694 #define TAPE_DRIVE_HIGH_FEATURES 0x80000000
1695 #define TAPE_FIXED_PARTITIONS	0
1696 #define TAPE_INITIATOR_PARTITIONS	2
1697 #define TAPE_SELECT_PARTITIONS	1
1698 #define TAPE_FILEMARKS	1
1699 #define TAPE_LONG_FILEMARKS	3
1700 #define TAPE_SETMARKS	0
1701 #define TAPE_SHORT_FILEMARKS	2
1702 #define TAPE_ERASE_LONG 1
1703 #define TAPE_ERASE_SHORT 0
1704 #define TAPE_LOAD 0
1705 #define TAPE_UNLOAD 1
1706 #define TAPE_TENSION 2
1707 #define TAPE_LOCK 3
1708 #define TAPE_UNLOCK 4
1709 #define TAPE_FORMAT 5
1710 
1711 #define VER_PLATFORM_WIN32s 0
1712 #define VER_PLATFORM_WIN32_WINDOWS 1
1713 #define VER_PLATFORM_WIN32_NT 2
1714 #define VER_NT_WORKSTATION 1
1715 #define VER_NT_DOMAIN_CONTROLLER 2
1716 #define VER_NT_SERVER 3
1717 #define VER_SUITE_SMALLBUSINESS 1
1718 #define VER_SUITE_ENTERPRISE 2
1719 #define VER_SUITE_BACKOFFICE 4
1720 #define VER_SUITE_TERMINAL 16
1721 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 32
1722 #define VER_SUITE_EMBEDDEDNT 64
1723 #define VER_SUITE_DATACENTER 128
1724 #define VER_SUITE_SINGLEUSERTS 256
1725 #define VER_SUITE_PERSONAL 512
1726 #define VER_SUITE_BLADE 1024
1727 #define VER_SUITE_STORAGE_SERVER 8192
1728 #define VER_SUITE_COMPUTE_SERVER 16384
1729 #define WT_EXECUTEDEFAULT 0x00000000
1730 #define WT_EXECUTEINIOTHREAD 0x00000001
1731 #define WT_EXECUTEINWAITTHREAD 0x00000004
1732 #define WT_EXECUTEONLYONCE 0x00000008
1733 #define WT_EXECUTELONGFUNCTION 0x00000010
1734 #define WT_EXECUTEINTIMERTHREAD 0x00000020
1735 #define WT_EXECUTEINPERSISTENTTHREAD 0x00000080
1736 #define WT_TRANSFER_IMPERSONATION 0x00000100
1737 
1738 #define BTYPE(x) ((x)&N_BTMASK)
1739 #define ISPTR(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT))
1740 #define ISFCN(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION<<N_BTSHFT))
1741 #define ISARY(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY<<N_BTSHFT))
1742 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG||(x)==IMAGE_SYM_CLASS_UNION_TAG||(x)==IMAGE_SYM_CLASS_ENUM_TAG)
1743 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
1744 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
1745 #define TLS_MINIMUM_AVAILABLE 64
1746 #define REPARSE_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
1747 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
1748 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE 16384
1749 #define IO_REPARSE_TAG_RESERVED_ZERO 0
1750 #define IO_REPARSE_TAG_RESERVED_ONE 1
1751 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
1752 #define IsReparseTagMicrosoft(x) ((x)&0x80000000)
1753 #define IsReparseTagHighLatency(x) ((x)&0x40000000)
1754 #define IsReparseTagNameSurrogate(x) ((x)&0x20000000)
1755 #define IO_REPARSE_TAG_VALID_VALUES 0xE000FFFF
1756 #define IsReparseTagValid(x) (!((x)&~IO_REPARSE_TAG_VALID_VALUES)&&((x)>IO_REPARSE_TAG_RESERVED_RANGE))
1757 #define IO_REPARSE_TAG_SYMBOLIC_LINK IO_REPARSE_TAG_RESERVED_ZERO
1758 #define IO_REPARSE_TAG_MOUNT_POINT 0xA0000003
1759 #define IO_REPARSE_TAG_SYMLINK 0xA000000C
1760 #define WT_SET_MAX_THREADPOOL_THREADS(Flags,Limit) ((Flags)|=(Limit)<<16)
1761 
1762 #ifndef RC_INVOKED
1763 typedef DWORD ACCESS_MASK, *PACCESS_MASK;
1764 
1765 #ifdef _GUID_DEFINED
1766 # warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
1767 #endif
1768 
1769 #if ! (defined _GUID_DEFINED || defined GUID_DEFINED) /* also defined in basetyps.h */
1770 #define GUID_DEFINED
1771 typedef struct _GUID {
1772 	unsigned long  Data1;
1773 	unsigned short Data2;
1774 	unsigned short Data3;
1775 	unsigned char  Data4[8];
1776 } GUID, *REFGUID, *LPGUID;
1777 #define SYSTEM_LUID { 0x3e7, 0x0 }
1778 #endif /* GUID_DEFINED */
1779 
1780 typedef struct _GENERIC_MAPPING {
1781 	ACCESS_MASK GenericRead;
1782 	ACCESS_MASK GenericWrite;
1783 	ACCESS_MASK GenericExecute;
1784 	ACCESS_MASK GenericAll;
1785 } GENERIC_MAPPING, *PGENERIC_MAPPING;
1786 typedef struct _ACE_HEADER {
1787 	BYTE AceType;
1788 	BYTE AceFlags;
1789 	WORD AceSize;
1790 } ACE_HEADER, *PACE_HEADER;
1791 typedef struct _ACCESS_ALLOWED_ACE {
1792 	ACE_HEADER Header;
1793 	ACCESS_MASK Mask;
1794 	DWORD SidStart;
1795 } ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
1796 typedef struct _ACCESS_DENIED_ACE {
1797 	ACE_HEADER Header;
1798 	ACCESS_MASK Mask;
1799 	DWORD SidStart;
1800 } ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
1801 typedef struct _SYSTEM_AUDIT_ACE {
1802 	ACE_HEADER Header;
1803 	ACCESS_MASK Mask;
1804 	DWORD SidStart;
1805 } SYSTEM_AUDIT_ACE;
1806 typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
1807 typedef struct _SYSTEM_ALARM_ACE {
1808 	ACE_HEADER Header;
1809 	ACCESS_MASK Mask;
1810 	DWORD SidStart;
1811 } SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
1812 typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
1813 	ACE_HEADER Header;
1814 	ACCESS_MASK Mask;
1815 	DWORD Flags;
1816 	GUID ObjectType;
1817 	GUID InheritedObjectType;
1818 	DWORD SidStart;
1819 } ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
1820 typedef struct _ACCESS_DENIED_OBJECT_ACE {
1821 	ACE_HEADER Header;
1822 	ACCESS_MASK Mask;
1823 	DWORD Flags;
1824 	GUID ObjectType;
1825 	GUID InheritedObjectType;
1826 	DWORD SidStart;
1827 } ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
1828 typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
1829 	ACE_HEADER Header;
1830 	ACCESS_MASK Mask;
1831 	DWORD Flags;
1832 	GUID ObjectType;
1833 	GUID InheritedObjectType;
1834 	DWORD SidStart;
1835 } SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
1836 typedef struct _SYSTEM_ALARM_OBJECT_ACE {
1837 	ACE_HEADER Header;
1838 	ACCESS_MASK Mask;
1839 	DWORD Flags;
1840 	GUID ObjectType;
1841 	GUID InheritedObjectType;
1842 	DWORD SidStart;
1843 } SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
1844 typedef struct _ACL {
1845 	BYTE AclRevision;
1846 	BYTE Sbz1;
1847 	WORD AclSize;
1848 	WORD AceCount;
1849 	WORD Sbz2;
1850 } ACL,*PACL;
1851 typedef struct _ACL_REVISION_INFORMATION {
1852 	DWORD AclRevision;
1853 } ACL_REVISION_INFORMATION;
1854 typedef struct _ACL_SIZE_INFORMATION {
1855 	DWORD   AceCount;
1856 	DWORD   AclBytesInUse;
1857 	DWORD   AclBytesFree;
1858 } ACL_SIZE_INFORMATION;
1859 
1860 /* FIXME: add more machines */
1861 #ifdef _X86_
1862 #define SIZE_OF_80387_REGISTERS	80
1863 #define CONTEXT_i386	0x10000
1864 #define CONTEXT_i486	0x10000
1865 #define CONTEXT_CONTROL	(CONTEXT_i386|0x00000001L)
1866 #define CONTEXT_INTEGER	(CONTEXT_i386|0x00000002L)
1867 #define CONTEXT_SEGMENTS	(CONTEXT_i386|0x00000004L)
1868 #define CONTEXT_FLOATING_POINT	(CONTEXT_i386|0x00000008L)
1869 #define CONTEXT_DEBUG_REGISTERS	(CONTEXT_i386|0x00000010L)
1870 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1871 #define CONTEXT_FULL	(CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1872 #define MAXIMUM_SUPPORTED_EXTENSION  512
1873 typedef struct _FLOATING_SAVE_AREA {
1874 	DWORD	ControlWord;
1875 	DWORD	StatusWord;
1876 	DWORD	TagWord;
1877 	DWORD	ErrorOffset;
1878 	DWORD	ErrorSelector;
1879 	DWORD	DataOffset;
1880 	DWORD	DataSelector;
1881 	BYTE	RegisterArea[80];
1882 	DWORD	Cr0NpxState;
1883 } FLOATING_SAVE_AREA;
1884 typedef struct _CONTEXT {
1885 	DWORD	ContextFlags;
1886 	DWORD	Dr0;
1887 	DWORD	Dr1;
1888 	DWORD	Dr2;
1889 	DWORD	Dr3;
1890 	DWORD	Dr6;
1891 	DWORD	Dr7;
1892 	FLOATING_SAVE_AREA FloatSave;
1893 	DWORD	SegGs;
1894 	DWORD	SegFs;
1895 	DWORD	SegEs;
1896 	DWORD	SegDs;
1897 	DWORD	Edi;
1898 	DWORD	Esi;
1899 	DWORD	Ebx;
1900 	DWORD	Edx;
1901 	DWORD	Ecx;
1902 	DWORD	Eax;
1903 	DWORD	Ebp;
1904 	DWORD	Eip;
1905 	DWORD	SegCs;
1906 	DWORD	EFlags;
1907 	DWORD	Esp;
1908 	DWORD	SegSs;
1909 	BYTE	ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
1910 } CONTEXT;
1911 #elif defined(_PPC_)
1912 #define CONTEXT_CONTROL	1L
1913 #define CONTEXT_FLOATING_POINT	2L
1914 #define CONTEXT_INTEGER	4L
1915 #define CONTEXT_DEBUG_REGISTERS	8L
1916 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
1917 typedef struct {
1918 	double Fpr0;
1919 	double Fpr1;
1920 	double Fpr2;
1921 	double Fpr3;
1922 	double Fpr4;
1923 	double Fpr5;
1924 	double Fpr6;
1925 	double Fpr7;
1926 	double Fpr8;
1927 	double Fpr9;
1928 	double Fpr10;
1929 	double Fpr11;
1930 	double Fpr12;
1931 	double Fpr13;
1932 	double Fpr14;
1933 	double Fpr15;
1934 	double Fpr16;
1935 	double Fpr17;
1936 	double Fpr18;
1937 	double Fpr19;
1938 	double Fpr20;
1939 	double Fpr21;
1940 	double Fpr22;
1941 	double Fpr23;
1942 	double Fpr24;
1943 	double Fpr25;
1944 	double Fpr26;
1945 	double Fpr27;
1946 	double Fpr28;
1947 	double Fpr29;
1948 	double Fpr30;
1949 	double Fpr31;
1950 	double Fpscr;
1951 	DWORD Gpr0;
1952 	DWORD Gpr1;
1953 	DWORD Gpr2;
1954 	DWORD Gpr3;
1955 	DWORD Gpr4;
1956 	DWORD Gpr5;
1957 	DWORD Gpr6;
1958 	DWORD Gpr7;
1959 	DWORD Gpr8;
1960 	DWORD Gpr9;
1961 	DWORD Gpr10;
1962 	DWORD Gpr11;
1963 	DWORD Gpr12;
1964 	DWORD Gpr13;
1965 	DWORD Gpr14;
1966 	DWORD Gpr15;
1967 	DWORD Gpr16;
1968 	DWORD Gpr17;
1969 	DWORD Gpr18;
1970 	DWORD Gpr19;
1971 	DWORD Gpr20;
1972 	DWORD Gpr21;
1973 	DWORD Gpr22;
1974 	DWORD Gpr23;
1975 	DWORD Gpr24;
1976 	DWORD Gpr25;
1977 	DWORD Gpr26;
1978 	DWORD Gpr27;
1979 	DWORD Gpr28;
1980 	DWORD Gpr29;
1981 	DWORD Gpr30;
1982 	DWORD Gpr31;
1983 	DWORD Cr;
1984 	DWORD Xer;
1985 	DWORD Msr;
1986 	DWORD Iar;
1987 	DWORD Lr;
1988 	DWORD Ctr;
1989 	DWORD ContextFlags;
1990 	DWORD Fill[3];
1991 	DWORD Dr0;
1992 	DWORD Dr1;
1993 	DWORD Dr2;
1994 	DWORD Dr3;
1995 	DWORD Dr4;
1996 	DWORD Dr5;
1997 	DWORD Dr6;
1998 	DWORD Dr7;
1999 } CONTEXT;
2000 
2001 #elif defined(_ALPHA_)
2002 
2003 #define CONTEXT_ALPHA	0x20000
2004 #define CONTEXT_CONTROL	(CONTEXT_ALPHA|1L)
2005 #define CONTEXT_FLOATING_POINT	(CONTEXT_ALPHA|2L)
2006 #define CONTEXT_INTEGER	(CONTEXT_ALPHA|4L)
2007 #define CONTEXT_FULL	(CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
2008 typedef struct _CONTEXT {
2009 	ULONGLONG FltF0;
2010 	ULONGLONG FltF1;
2011 	ULONGLONG FltF2;
2012 	ULONGLONG FltF3;
2013 	ULONGLONG FltF4;
2014 	ULONGLONG FltF5;
2015 	ULONGLONG FltF6;
2016 	ULONGLONG FltF7;
2017 	ULONGLONG FltF8;
2018 	ULONGLONG FltF9;
2019 	ULONGLONG FltF10;
2020 	ULONGLONG FltF11;
2021 	ULONGLONG FltF12;
2022 	ULONGLONG FltF13;
2023 	ULONGLONG FltF14;
2024 	ULONGLONG FltF15;
2025 	ULONGLONG FltF16;
2026 	ULONGLONG FltF17;
2027 	ULONGLONG FltF18;
2028 	ULONGLONG FltF19;
2029 	ULONGLONG FltF20;
2030 	ULONGLONG FltF21;
2031 	ULONGLONG FltF22;
2032 	ULONGLONG FltF23;
2033 	ULONGLONG FltF24;
2034 	ULONGLONG FltF25;
2035 	ULONGLONG FltF26;
2036 	ULONGLONG FltF27;
2037 	ULONGLONG FltF28;
2038 	ULONGLONG FltF29;
2039 	ULONGLONG FltF30;
2040 	ULONGLONG FltF31;
2041 	ULONGLONG IntV0;
2042 	ULONGLONG IntT0;
2043 	ULONGLONG IntT1;
2044 	ULONGLONG IntT2;
2045 	ULONGLONG IntT3;
2046 	ULONGLONG IntT4;
2047 	ULONGLONG IntT5;
2048 	ULONGLONG IntT6;
2049 	ULONGLONG IntT7;
2050 	ULONGLONG IntS0;
2051 	ULONGLONG IntS1;
2052 	ULONGLONG IntS2;
2053 	ULONGLONG IntS3;
2054 	ULONGLONG IntS4;
2055 	ULONGLONG IntS5;
2056 	ULONGLONG IntFp;
2057 	ULONGLONG IntA0;
2058 	ULONGLONG IntA1;
2059 	ULONGLONG IntA2;
2060 	ULONGLONG IntA3;
2061 	ULONGLONG IntA4;
2062 	ULONGLONG IntA5;
2063 	ULONGLONG IntT8;
2064 	ULONGLONG IntT9;
2065 	ULONGLONG IntT10;
2066 	ULONGLONG IntT11;
2067 	ULONGLONG IntRa;
2068 	ULONGLONG IntT12;
2069 	ULONGLONG IntAt;
2070 	ULONGLONG IntGp;
2071 	ULONGLONG IntSp;
2072 	ULONGLONG IntZero;
2073 	ULONGLONG Fpcr;
2074 	ULONGLONG SoftFpcr;
2075 	ULONGLONG Fir;
2076 	DWORD Psr;
2077 	DWORD ContextFlags;
2078 	DWORD Fill[4];
2079 } CONTEXT;
2080 
2081 #elif defined(SHx)
2082 
2083 /* These are the debug or break registers on the SH3 */
2084 typedef struct _DEBUG_REGISTERS {
2085 	ULONG  BarA;
2086 	UCHAR  BasrA;
2087 	UCHAR  BamrA;
2088 	USHORT BbrA;
2089 	ULONG  BarB;
2090 	UCHAR  BasrB;
2091 	UCHAR  BamrB;
2092 	USHORT BbrB;
2093 	ULONG  BdrB;
2094 	ULONG  BdmrB;
2095 	USHORT Brcr;
2096 	USHORT Align;
2097 } DEBUG_REGISTERS, *PDEBUG_REGISTERS;
2098 
2099 /* The following flags control the contents of the CONTEXT structure. */
2100 
2101 #define CONTEXT_SH3		0x00000040
2102 #define CONTEXT_SH4		0x000000c0	/* CONTEXT_SH3 | 0x80 - must contain the SH3 bits */
2103 
2104 #ifdef SH3
2105 #define CONTEXT_CONTROL         (CONTEXT_SH3 | 0x00000001L)
2106 #define CONTEXT_INTEGER         (CONTEXT_SH3 | 0x00000002L)
2107 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH3 | 0x00000008L)
2108 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS)
2109 #else	/* SH4 */
2110 
2111 #define CONTEXT_CONTROL         (CONTEXT_SH4 | 0x00000001L)
2112 #define CONTEXT_INTEGER         (CONTEXT_SH4 | 0x00000002L)
2113 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH4 | 0x00000008L)
2114 #define CONTEXT_FLOATING_POINT  (CONTEXT_SH4 | 0x00000004L)
2115 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS | CONTEXT_FLOATING_POINT)
2116 #endif
2117 
2118 /* Context Frame */
2119 
2120 /*  This frame is used to store a limited processor context into the */
2121 /* Thread structure for CPUs which have no floating point support. */
2122 
2123 typedef struct _CONTEXT {
2124 	/* The flags values within this flag control the contents of */
2125 	/* a CONTEXT record. */
2126 
2127 	/* If the context record is used as an input parameter, then */
2128 	/* for each portion of the context record controlled by a flag */
2129 	/* whose value is set, it is assumed that that portion of the */
2130 	/* context record contains valid context. If the context record */
2131 	/* is being used to modify a thread's context, then only that */
2132 	/* portion of the threads context will be modified. */
2133 
2134 	/* If the context record is used as an IN OUT parameter to capture */
2135 	/* the context of a thread, then only those portions of the thread's */
2136 	/* context corresponding to set flags will be returned. */
2137 
2138 	/* The context record is never used as an OUT only parameter. */
2139 
2140 
2141 	ULONG ContextFlags;
2142 
2143 	/* This section is specified/returned if the ContextFlags word contains */
2144 	/* the flag CONTEXT_INTEGER. */
2145 
2146 	/* N.B. The registers RA and R15 are defined in this section, but are */
2147 	/*  considered part of the control context rather than part of the integer */
2148 	/*  context. */
2149 
2150 	ULONG PR;
2151 	ULONG MACH;
2152 	ULONG MACL;
2153 	ULONG GBR;
2154 	ULONG R0;
2155 	ULONG R1;
2156 	ULONG R2;
2157 	ULONG R3;
2158 	ULONG R4;
2159 	ULONG R5;
2160 	ULONG R6;
2161 	ULONG R7;
2162 	ULONG R8;
2163 	ULONG R9;
2164 	ULONG R10;
2165 	ULONG R11;
2166 	ULONG R12;
2167 	ULONG R13;
2168 	ULONG R14;
2169 	ULONG R15;
2170 
2171 	/* This section is specified/returned if the ContextFlags word contains */
2172 	/* the flag CONTEXT_CONTROL. */
2173 
2174 	/* N.B. The registers r15 and ra are defined in the integer section, */
2175 	/*   but are considered part of the control context rather than part of */
2176 	/*   the integer context. */
2177 
2178 	ULONG Fir;
2179 	ULONG Psr;
2180 
2181 #if !defined(SH3e) && !defined(SH4)
2182 	ULONG	OldStuff[2];
2183 	DEBUG_REGISTERS DebugRegisters;
2184 #else
2185 
2186 	ULONG	Fpscr;
2187 	ULONG	Fpul;
2188 	ULONG	FRegs[16];
2189 
2190 #if defined(SH4)
2191 	ULONG	xFRegs[16];
2192 #endif
2193 
2194 #endif
2195 } CONTEXT;
2196 
2197 #elif defined(MIPS)
2198 
2199 /* The following flags control the contents of the CONTEXT structure. */
2200 
2201 #define CONTEXT_R4000   0x00010000    /* r4000 context */
2202 
2203 #define CONTEXT_CONTROL         (CONTEXT_R4000 | 0x00000001L)
2204 #define CONTEXT_FLOATING_POINT  (CONTEXT_R4000 | 0x00000002L)
2205 #define CONTEXT_INTEGER         (CONTEXT_R4000 | 0x00000004L)
2206 
2207 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
2208 
2209 /* Context Frame */
2210 
2211 /*  N.B. This frame must be exactly a multiple of 16 bytes in length. */
2212 
2213 /*  This frame has a several purposes: 1) it is used as an argument to */
2214 /*  NtContinue, 2) it is used to constuct a call frame for APC delivery, */
2215 /*  3) it is used to construct a call frame for exception dispatching */
2216 /*  in user mode, and 4) it is used in the user level thread creation */
2217 /*  routines. */
2218 
2219 /*  The layout of the record conforms to a standard call frame. */
2220 
2221 
2222 typedef struct _CONTEXT {
2223 
2224 	/* This section is always present and is used as an argument build */
2225 	/* area. */
2226 
2227 	DWORD Argument[4];
2228 
2229 	/* This section is specified/returned if the ContextFlags word contains */
2230 	/* the flag CONTEXT_FLOATING_POINT. */
2231 
2232 	DWORD FltF0;
2233 	DWORD FltF1;
2234 	DWORD FltF2;
2235 	DWORD FltF3;
2236 	DWORD FltF4;
2237 	DWORD FltF5;
2238 	DWORD FltF6;
2239 	DWORD FltF7;
2240 	DWORD FltF8;
2241 	DWORD FltF9;
2242 	DWORD FltF10;
2243 	DWORD FltF11;
2244 	DWORD FltF12;
2245 	DWORD FltF13;
2246 	DWORD FltF14;
2247 	DWORD FltF15;
2248 	DWORD FltF16;
2249 	DWORD FltF17;
2250 	DWORD FltF18;
2251 	DWORD FltF19;
2252 	DWORD FltF20;
2253 	DWORD FltF21;
2254 	DWORD FltF22;
2255 	DWORD FltF23;
2256 	DWORD FltF24;
2257 	DWORD FltF25;
2258 	DWORD FltF26;
2259 	DWORD FltF27;
2260 	DWORD FltF28;
2261 	DWORD FltF29;
2262 	DWORD FltF30;
2263 	DWORD FltF31;
2264 
2265 	/* This section is specified/returned if the ContextFlags word contains */
2266 	/* the flag CONTEXT_INTEGER. */
2267 
2268 	/* N.B. The registers gp, sp, and ra are defined in this section, but are */
2269 	/*  considered part of the control context rather than part of the integer */
2270 	/*  context. */
2271 
2272 	/* N.B. Register zero is not stored in the frame. */
2273 
2274 	DWORD IntZero;
2275 	DWORD IntAt;
2276 	DWORD IntV0;
2277 	DWORD IntV1;
2278 	DWORD IntA0;
2279 	DWORD IntA1;
2280 	DWORD IntA2;
2281 	DWORD IntA3;
2282 	DWORD IntT0;
2283 	DWORD IntT1;
2284 	DWORD IntT2;
2285 	DWORD IntT3;
2286 	DWORD IntT4;
2287 	DWORD IntT5;
2288 	DWORD IntT6;
2289 	DWORD IntT7;
2290 	DWORD IntS0;
2291 	DWORD IntS1;
2292 	DWORD IntS2;
2293 	DWORD IntS3;
2294 	DWORD IntS4;
2295 	DWORD IntS5;
2296 	DWORD IntS6;
2297 	DWORD IntS7;
2298 	DWORD IntT8;
2299 	DWORD IntT9;
2300 	DWORD IntK0;
2301 	DWORD IntK1;
2302 	DWORD IntGp;
2303 	DWORD IntSp;
2304 	DWORD IntS8;
2305 	DWORD IntRa;
2306 	DWORD IntLo;
2307 	DWORD IntHi;
2308 
2309 	/* This section is specified/returned if the ContextFlags word contains */
2310 	/* the flag CONTEXT_FLOATING_POINT. */
2311 
2312 	DWORD Fsr;
2313 
2314 	/* This section is specified/returned if the ContextFlags word contains */
2315 	/* the flag CONTEXT_CONTROL. */
2316 
2317 	/* N.B. The registers gp, sp, and ra are defined in the integer section, */
2318 	/*   but are considered part of the control context rather than part of */
2319 	/*   the integer context. */
2320 
2321 	DWORD Fir;
2322 	DWORD Psr;
2323 
2324 	/* The flags values within this flag control the contents of */
2325 	/* a CONTEXT record. */
2326 
2327 	/* If the context record is used as an input parameter, then */
2328 	/* for each portion of the context record controlled by a flag */
2329 	/* whose value is set, it is assumed that that portion of the */
2330 	/* context record contains valid context. If the context record */
2331 	/* is being used to modify a thread's context, then only that */
2332 	/* portion of the threads context will be modified. */
2333 
2334 	/* If the context record is used as an IN OUT parameter to capture */
2335 	/* the context of a thread, then only those portions of the thread's */
2336 	/* context corresponding to set flags will be returned. */
2337 
2338 	/* The context record is never used as an OUT only parameter. */
2339 
2340 	DWORD ContextFlags;
2341 
2342 	DWORD Fill[2];
2343 
2344 } CONTEXT;
2345 
2346 #elif defined(ARM)
2347 
2348 /* The following flags control the contents of the CONTEXT structure. */
2349 
2350 #define CONTEXT_ARM    0x0000040
2351 #define CONTEXT_CONTROL         (CONTEXT_ARM | 0x00000001L)
2352 #define CONTEXT_INTEGER         (CONTEXT_ARM | 0x00000002L)
2353 
2354 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
2355 
2356 typedef struct _CONTEXT {
2357 	/* The flags values within this flag control the contents of
2358 	   a CONTEXT record.
2359 
2360 	   If the context record is used as an input parameter, then
2361 	   for each portion of the context record controlled by a flag
2362 	   whose value is set, it is assumed that that portion of the
2363 	   context record contains valid context. If the context record
2364 	   is being used to modify a thread's context, then only that
2365 	   portion of the threads context will be modified.
2366 
2367 	   If the context record is used as an IN OUT parameter to capture
2368 	   the context of a thread, then only those portions of the thread's
2369 	   context corresponding to set flags will be returned.
2370 
2371 	   The context record is never used as an OUT only parameter. */
2372 
2373 	ULONG ContextFlags;
2374 
2375 	/* This section is specified/returned if the ContextFlags word contains
2376 	   the flag CONTEXT_INTEGER. */
2377 	ULONG R0;
2378 	ULONG R1;
2379 	ULONG R2;
2380 	ULONG R3;
2381 	ULONG R4;
2382 	ULONG R5;
2383 	ULONG R6;
2384 	ULONG R7;
2385 	ULONG R8;
2386 	ULONG R9;
2387 	ULONG R10;
2388 	ULONG R11;
2389 	ULONG R12;
2390 
2391 	ULONG Sp;
2392 	ULONG Lr;
2393 	ULONG Pc;
2394 	ULONG Psr;
2395 } CONTEXT;
2396 #else
2397 
2398 #error "undefined processor type"
2399 #endif
2400 
2401 typedef CONTEXT *PCONTEXT,*LPCONTEXT;
2402 typedef struct _EXCEPTION_RECORD {
2403 	DWORD ExceptionCode;
2404 	DWORD ExceptionFlags;
2405 	struct _EXCEPTION_RECORD *ExceptionRecord;
2406 	PVOID ExceptionAddress;
2407 	DWORD NumberParameters;
2408 	DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
2409 } EXCEPTION_RECORD,*PEXCEPTION_RECORD,*LPEXCEPTION_RECORD;
2410 typedef struct _EXCEPTION_POINTERS {
2411 	PEXCEPTION_RECORD ExceptionRecord;
2412 	PCONTEXT ContextRecord;
2413 } EXCEPTION_POINTERS,*PEXCEPTION_POINTERS,*LPEXCEPTION_POINTERS;
2414 typedef union _LARGE_INTEGER {
2415   struct {
2416     DWORD LowPart;
2417     LONG  HighPart;
2418   } u;
2419 
2420 #if ! defined(NONAMELESSUNION) || defined(__cplusplus)
2421   _ANONYMOUS_STRUCT struct {
2422     DWORD LowPart;
2423     LONG  HighPart;
2424   };
2425 #endif /* NONAMELESSUNION */
2426 
2427   LONGLONG QuadPart;
2428 } LARGE_INTEGER, *PLARGE_INTEGER;
2429 
2430 typedef union _ULARGE_INTEGER {
2431   struct {
2432     DWORD LowPart;
2433     DWORD HighPart;
2434   } u;
2435 
2436 #if ! defined(NONAMELESSUNION) || defined(__cplusplus)
2437   _ANONYMOUS_STRUCT struct {
2438     DWORD LowPart;
2439     DWORD HighPart;
2440   };
2441 #endif /* NONAMELESSUNION */
2442 
2443   ULONGLONG QuadPart;
2444 } ULARGE_INTEGER, *PULARGE_INTEGER;
2445 
2446 typedef struct _LUID {
2447   DWORD LowPart;
2448   LONG HighPart;
2449 } LUID, *PLUID;
2450 #pragma pack(push,4)
2451 typedef struct _LUID_AND_ATTRIBUTES {
2452 	LUID   Luid;
2453 	DWORD  Attributes;
2454 } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
2455 #pragma pack(pop)
2456 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
2457 typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
2458 typedef struct _PRIVILEGE_SET {
2459 	DWORD PrivilegeCount;
2460 	DWORD Control;
2461 	LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
2462 } PRIVILEGE_SET,*PPRIVILEGE_SET;
2463 typedef struct _SECURITY_ATTRIBUTES {
2464 	DWORD nLength;
2465 	LPVOID lpSecurityDescriptor;
2466 	BOOL bInheritHandle;
2467 } SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;
2468 typedef enum _SECURITY_IMPERSONATION_LEVEL {
2469 	SecurityAnonymous,
2470 	SecurityIdentification,
2471 	SecurityImpersonation,
2472 	SecurityDelegation
2473 } SECURITY_IMPERSONATION_LEVEL,*PSECURITY_IMPERSONATION_LEVEL;
2474 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,*PSECURITY_CONTEXT_TRACKING_MODE;
2475 typedef struct _SECURITY_QUALITY_OF_SERVICE {
2476 	DWORD Length;
2477 	SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
2478 	SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
2479 	BOOLEAN EffectiveOnly;
2480 } SECURITY_QUALITY_OF_SERVICE,*PSECURITY_QUALITY_OF_SERVICE;
2481 typedef PVOID PACCESS_TOKEN;
2482 typedef struct _SE_IMPERSONATION_STATE {
2483 	PACCESS_TOKEN Token;
2484 	BOOLEAN CopyOnOpen;
2485 	BOOLEAN EffectiveOnly;
2486 	SECURITY_IMPERSONATION_LEVEL Level;
2487 } SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
2488 typedef struct _SID_IDENTIFIER_AUTHORITY {
2489 	BYTE Value[6];
2490 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
2491 typedef PVOID PSID;
2492 typedef struct _SID {
2493    BYTE  Revision;
2494    BYTE  SubAuthorityCount;
2495    SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
2496    DWORD SubAuthority[ANYSIZE_ARRAY];
2497 } SID, *PISID;
2498 typedef struct _SID_AND_ATTRIBUTES {
2499 	PSID Sid;
2500 	DWORD Attributes;
2501 } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
2502 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
2503 typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
2504 
2505 typedef struct _TOKEN_SOURCE {
2506 	CHAR SourceName[TOKEN_SOURCE_LENGTH];
2507 	LUID SourceIdentifier;
2508 } TOKEN_SOURCE,*PTOKEN_SOURCE;
2509 typedef struct _TOKEN_CONTROL {
2510 	LUID TokenId;
2511 	LUID AuthenticationId;
2512 	LUID ModifiedId;
2513 	TOKEN_SOURCE TokenSource;
2514 } TOKEN_CONTROL,*PTOKEN_CONTROL;
2515 typedef struct _TOKEN_DEFAULT_DACL {
2516 	PACL DefaultDacl;
2517 } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
2518 typedef struct _TOKEN_GROUPS {
2519 	DWORD GroupCount;
2520 	SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
2521 } TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
2522 typedef struct _TOKEN_OWNER {
2523 	PSID Owner;
2524 } TOKEN_OWNER,*PTOKEN_OWNER;
2525 typedef struct _TOKEN_PRIMARY_GROUP {
2526 	PSID PrimaryGroup;
2527 } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
2528 typedef struct _TOKEN_PRIVILEGES {
2529 	DWORD PrivilegeCount;
2530 	LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
2531 } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
2532 typedef enum tagTOKEN_TYPE {
2533 	TokenPrimary = 1,
2534 	TokenImpersonation
2535 } TOKEN_TYPE,*PTOKEN_TYPE;
2536 typedef struct _TOKEN_STATISTICS {
2537 	LUID TokenId;
2538 	LUID AuthenticationId;
2539 	LARGE_INTEGER ExpirationTime;
2540 	TOKEN_TYPE TokenType;
2541 	SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
2542 	DWORD DynamicCharged;
2543 	DWORD DynamicAvailable;
2544 	DWORD GroupCount;
2545 	DWORD PrivilegeCount;
2546 	LUID ModifiedId;
2547 } TOKEN_STATISTICS, *PTOKEN_STATISTICS;
2548 typedef struct _TOKEN_USER {
2549 	SID_AND_ATTRIBUTES User;
2550 } TOKEN_USER, *PTOKEN_USER;
2551 
2552 typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
2553 typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
2554 typedef struct _SECURITY_DESCRIPTOR {
2555 	BYTE Revision;
2556 	BYTE Sbz1;
2557 	SECURITY_DESCRIPTOR_CONTROL Control;
2558 	PSID Owner;
2559 	PSID Group;
2560 	PACL Sacl;
2561 	PACL Dacl;
2562 } SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
2563 typedef enum _TOKEN_INFORMATION_CLASS {
2564 	TokenUser=1,
2565 	TokenGroups,
2566 	TokenPrivileges,
2567 	TokenOwner,
2568 	TokenPrimaryGroup,
2569 	TokenDefaultDacl,
2570 	TokenSource,
2571 	TokenType,
2572 	TokenImpersonationLevel,
2573 	TokenStatistics,
2574 	TokenRestrictedSids,
2575 	TokenSessionId,
2576 	TokenGroupsAndPrivileges,
2577 	TokenSessionReference,
2578 	TokenSandBoxInert,
2579 	TokenAuditPolicy,
2580 	TokenOrigin,
2581 
2582 #if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
2583 	TokenElevationType,
2584 	TokenLinkedToken,
2585 	TokenElevation,
2586 	TokenHasRestrictions,
2587 	TokenAccessInformation,
2588 	TokenVirtualizationAllowed,
2589 	TokenVirtualizationEnabled,
2590 	TokenIntegrityLevel,
2591 	TokenUIAccess,
2592 	TokenMandatoryPolicy,
2593 	TokenLogonSid,
2594 #endif
2595 
2596 	MaxTokenInfoClass
2597 } TOKEN_INFORMATION_CLASS;
2598 typedef enum _SID_NAME_USE {
2599 	SidTypeUser=1,
2600 	SidTypeGroup,
2601 	SidTypeDomain,
2602 	SidTypeAlias,
2603 	SidTypeWellKnownGroup,
2604 	SidTypeDeletedAccount,
2605 	SidTypeInvalid,
2606 	SidTypeUnknown,
2607 	SidTypeComputer
2608 } SID_NAME_USE,*PSID_NAME_USE;
2609 typedef struct _QUOTA_LIMITS {
2610 	SIZE_T PagedPoolLimit;
2611 	SIZE_T NonPagedPoolLimit;
2612 	SIZE_T MinimumWorkingSetSize;
2613 	SIZE_T MaximumWorkingSetSize;
2614 	SIZE_T PagefileLimit;
2615 	LARGE_INTEGER TimeLimit;
2616 } QUOTA_LIMITS,*PQUOTA_LIMITS;
2617 typedef struct _IO_COUNTERS {
2618 	ULONGLONG  ReadOperationCount;
2619 	ULONGLONG  WriteOperationCount;
2620 	ULONGLONG  OtherOperationCount;
2621 	ULONGLONG ReadTransferCount;
2622 	ULONGLONG WriteTransferCount;
2623 	ULONGLONG OtherTransferCount;
2624 } IO_COUNTERS, *PIO_COUNTERS;
2625 typedef struct _FILE_NOTIFY_INFORMATION {
2626 	DWORD NextEntryOffset;
2627 	DWORD Action;
2628 	DWORD FileNameLength;
2629 	WCHAR FileName[1];
2630 } FILE_NOTIFY_INFORMATION,*PFILE_NOTIFY_INFORMATION;
2631 typedef struct _TAPE_ERASE {
2632 	DWORD Type;
2633 	BOOLEAN Immediate;
2634 } TAPE_ERASE,*PTAPE_ERASE;
2635 typedef struct _TAPE_GET_DRIVE_PARAMETERS {
2636 	BOOLEAN ECC;
2637 	BOOLEAN Compression;
2638 	BOOLEAN DataPadding;
2639 	BOOLEAN ReportSetmarks;
2640  	DWORD DefaultBlockSize;
2641  	DWORD MaximumBlockSize;
2642  	DWORD MinimumBlockSize;
2643  	DWORD MaximumPartitionCount;
2644  	DWORD FeaturesLow;
2645  	DWORD FeaturesHigh;
2646  	DWORD EOTWarningZoneSize;
2647 } TAPE_GET_DRIVE_PARAMETERS,*PTAPE_GET_DRIVE_PARAMETERS;
2648 typedef struct _TAPE_GET_MEDIA_PARAMETERS {
2649 	LARGE_INTEGER Capacity;
2650 	LARGE_INTEGER Remaining;
2651 	DWORD BlockSize;
2652 	DWORD PartitionCount;
2653 	BOOLEAN WriteProtected;
2654 } TAPE_GET_MEDIA_PARAMETERS,*PTAPE_GET_MEDIA_PARAMETERS;
2655 typedef struct _TAPE_GET_POSITION {
2656 	ULONG Type;
2657 	ULONG Partition;
2658 	ULONG OffsetLow;
2659 	ULONG OffsetHigh;
2660 } TAPE_GET_POSITION,*PTAPE_GET_POSITION;
2661 typedef struct _TAPE_PREPARE {
2662 	DWORD Operation;
2663 	BOOLEAN Immediate;
2664 } TAPE_PREPARE,*PTAPE_PREPARE;
2665 typedef struct _TAPE_SET_DRIVE_PARAMETERS {
2666 	BOOLEAN ECC;
2667 	BOOLEAN Compression;
2668 	BOOLEAN DataPadding;
2669 	BOOLEAN ReportSetmarks;
2670 	ULONG EOTWarningZoneSize;
2671 } TAPE_SET_DRIVE_PARAMETERS,*PTAPE_SET_DRIVE_PARAMETERS;
2672 typedef struct _TAPE_SET_MEDIA_PARAMETERS {
2673 	ULONG BlockSize;
2674 } TAPE_SET_MEDIA_PARAMETERS,*PTAPE_SET_MEDIA_PARAMETERS;
2675 typedef struct _TAPE_SET_POSITION {
2676 	DWORD Method;
2677 	DWORD Partition;
2678 	LARGE_INTEGER Offset;
2679 	BOOLEAN Immediate;
2680 } TAPE_SET_POSITION,*PTAPE_SET_POSITION;
2681 typedef struct _TAPE_WRITE_MARKS {
2682 	DWORD Type;
2683 	DWORD Count;
2684 	BOOLEAN Immediate;
2685 } TAPE_WRITE_MARKS,*PTAPE_WRITE_MARKS;
2686 typedef struct _TAPE_CREATE_PARTITION {
2687 	DWORD Method;
2688 	DWORD Count;
2689 	DWORD Size;
2690 } TAPE_CREATE_PARTITION,*PTAPE_CREATE_PARTITION;
2691 typedef struct _MEMORY_BASIC_INFORMATION {
2692 	PVOID BaseAddress;
2693 	PVOID AllocationBase;
2694 	DWORD AllocationProtect;
2695 	DWORD RegionSize;
2696 	DWORD State;
2697 	DWORD Protect;
2698 	DWORD Type;
2699 } MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;
2700 typedef struct _MESSAGE_RESOURCE_ENTRY {
2701 	WORD Length;
2702 	WORD Flags;
2703 	BYTE Text[1];
2704 } MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
2705 typedef struct _MESSAGE_RESOURCE_BLOCK {
2706 	DWORD LowId;
2707 	DWORD HighId;
2708 	DWORD OffsetToEntries;
2709 } MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;
2710 typedef struct _MESSAGE_RESOURCE_DATA {
2711 	DWORD NumberOfBlocks;
2712 	MESSAGE_RESOURCE_BLOCK Blocks[1];
2713 } MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
2714 typedef struct _LIST_ENTRY {
2715 	struct _LIST_ENTRY *Flink;
2716 	struct _LIST_ENTRY *Blink;
2717 } LIST_ENTRY,*PLIST_ENTRY;
2718 typedef struct _SINGLE_LIST_ENTRY {
2719 	struct _SINGLE_LIST_ENTRY *Next;
2720 } SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
2721 
2722 #ifndef _SLIST_HEADER_
2723 #define _SLIST_HEADER_
2724 #define SLIST_ENTRY SINGLE_LIST_ENTRY
2725 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
2726 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
2727 typedef union _SLIST_HEADER {
2728 	ULONGLONG Alignment;
2729 	_ANONYMOUS_STRUCT struct {
2730 		SLIST_ENTRY Next;
2731 		WORD Depth;
2732 		WORD Sequence;
2733 	} DUMMYSTRUCTNAME;
2734 } SLIST_HEADER,*PSLIST_HEADER;
2735 #endif /* !_SLIST_HEADER_ */
2736 
2737 typedef struct _RTL_CRITICAL_SECTION_DEBUG {
2738 	WORD Type;
2739 	WORD CreatorBackTraceIndex;
2740 	struct _RTL_CRITICAL_SECTION *CriticalSection;
2741 	LIST_ENTRY ProcessLocksList;
2742 	DWORD EntryCount;
2743 	DWORD ContentionCount;
2744 	DWORD Spare[2];
2745 } RTL_CRITICAL_SECTION_DEBUG,*PRTL_CRITICAL_SECTION_DEBUG;
2746 typedef struct _RTL_CRITICAL_SECTION {
2747 	PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
2748 	LONG LockCount;
2749 	LONG RecursionCount;
2750 	HANDLE OwningThread;
2751 	HANDLE LockSemaphore;
2752 	DWORD Reserved;
2753 } RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;
2754 typedef struct _EVENTLOGRECORD {
2755 	DWORD Length;
2756 	DWORD Reserved;
2757 	DWORD RecordNumber;
2758 	DWORD TimeGenerated;
2759 	DWORD TimeWritten;
2760 	DWORD EventID;
2761 	WORD EventType;
2762 	WORD NumStrings;
2763 	WORD EventCategory;
2764 	WORD ReservedFlags;
2765 	DWORD ClosingRecordNumber;
2766 	DWORD StringOffset;
2767 	DWORD UserSidLength;
2768 	DWORD UserSidOffset;
2769 	DWORD DataLength;
2770 	DWORD DataOffset;
2771 } EVENTLOGRECORD,*PEVENTLOGRECORD;
2772 typedef struct _OSVERSIONINFOA {
2773 	DWORD dwOSVersionInfoSize;
2774 	DWORD dwMajorVersion;
2775 	DWORD dwMinorVersion;
2776 	DWORD dwBuildNumber;
2777 	DWORD dwPlatformId;
2778 	CHAR szCSDVersion[128];
2779 } OSVERSIONINFOA,*POSVERSIONINFOA,*LPOSVERSIONINFOA;
2780 typedef struct _OSVERSIONINFOW {
2781 	DWORD dwOSVersionInfoSize;
2782 	DWORD dwMajorVersion;
2783 	DWORD dwMinorVersion;
2784 	DWORD dwBuildNumber;
2785 	DWORD dwPlatformId;
2786 	WCHAR szCSDVersion[128];
2787 } OSVERSIONINFOW,*POSVERSIONINFOW,*LPOSVERSIONINFOW;
2788 typedef struct _OSVERSIONINFOEXA {
2789 	DWORD dwOSVersionInfoSize;
2790 	DWORD dwMajorVersion;
2791 	DWORD dwMinorVersion;
2792 	DWORD dwBuildNumber;
2793 	DWORD dwPlatformId;
2794 	CHAR szCSDVersion[128];
2795 	WORD wServicePackMajor;
2796 	WORD wServicePackMinor;
2797 	WORD wSuiteMask;
2798 	BYTE wProductType;
2799 	BYTE wReserved;
2800 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
2801 typedef struct _OSVERSIONINFOEXW {
2802 	DWORD dwOSVersionInfoSize;
2803 	DWORD dwMajorVersion;
2804 	DWORD dwMinorVersion;
2805 	DWORD dwBuildNumber;
2806 	DWORD dwPlatformId;
2807 	WCHAR szCSDVersion[128];
2808 	WORD wServicePackMajor;
2809 	WORD wServicePackMinor;
2810 	WORD wSuiteMask;
2811 	BYTE wProductType;
2812 	BYTE wReserved;
2813 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
2814 #pragma pack(push,2)
2815 typedef struct _IMAGE_VXD_HEADER {
2816 	WORD e32_magic;
2817 	BYTE e32_border;
2818 	BYTE e32_worder;
2819 	DWORD e32_level;
2820 	WORD e32_cpu;
2821 	WORD e32_os;
2822 	DWORD e32_ver;
2823 	DWORD e32_mflags;
2824 	DWORD e32_mpages;
2825 	DWORD e32_startobj;
2826 	DWORD e32_eip;
2827 	DWORD e32_stackobj;
2828 	DWORD e32_esp;
2829 	DWORD e32_pagesize;
2830 	DWORD e32_lastpagesize;
2831 	DWORD e32_fixupsize;
2832 	DWORD e32_fixupsum;
2833 	DWORD e32_ldrsize;
2834 	DWORD e32_ldrsum;
2835 	DWORD e32_objtab;
2836 	DWORD e32_objcnt;
2837 	DWORD e32_objmap;
2838 	DWORD e32_itermap;
2839 	DWORD e32_rsrctab;
2840 	DWORD e32_rsrccnt;
2841 	DWORD e32_restab;
2842 	DWORD e32_enttab;
2843 	DWORD e32_dirtab;
2844 	DWORD e32_dircnt;
2845 	DWORD e32_fpagetab;
2846 	DWORD e32_frectab;
2847 	DWORD e32_impmod;
2848 	DWORD e32_impmodcnt;
2849 	DWORD e32_impproc;
2850 	DWORD e32_pagesum;
2851 	DWORD e32_datapage;
2852 	DWORD e32_preload;
2853 	DWORD e32_nrestab;
2854 	DWORD e32_cbnrestab;
2855 	DWORD e32_nressum;
2856 	DWORD e32_autodata;
2857 	DWORD e32_debuginfo;
2858 	DWORD e32_debuglen;
2859 	DWORD e32_instpreload;
2860 	DWORD e32_instdemand;
2861 	DWORD e32_heapsize;
2862 	BYTE e32_res3[12];
2863 	DWORD e32_winresoff;
2864 	DWORD e32_winreslen;
2865 	WORD e32_devid;
2866 	WORD e32_ddkver;
2867 } IMAGE_VXD_HEADER,*PIMAGE_VXD_HEADER;
2868 #pragma pack(pop)
2869 #pragma pack(push,4)
2870 typedef struct _IMAGE_FILE_HEADER {
2871 	WORD Machine;
2872 	WORD NumberOfSections;
2873 	DWORD TimeDateStamp;
2874 	DWORD PointerToSymbolTable;
2875 	DWORD NumberOfSymbols;
2876 	WORD SizeOfOptionalHeader;
2877 	WORD Characteristics;
2878 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
2879 typedef struct _IMAGE_DATA_DIRECTORY {
2880 	DWORD VirtualAddress;
2881 	DWORD Size;
2882 } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
2883 typedef struct _IMAGE_OPTIONAL_HEADER {
2884 	WORD Magic;
2885 	BYTE MajorLinkerVersion;
2886 	BYTE MinorLinkerVersion;
2887 	DWORD SizeOfCode;
2888 	DWORD SizeOfInitializedData;
2889 	DWORD SizeOfUninitializedData;
2890 	DWORD AddressOfEntryPoint;
2891 	DWORD BaseOfCode;
2892 	DWORD BaseOfData;
2893 	DWORD ImageBase;
2894 	DWORD SectionAlignment;
2895 	DWORD FileAlignment;
2896 	WORD MajorOperatingSystemVersion;
2897 	WORD MinorOperatingSystemVersion;
2898 	WORD MajorImageVersion;
2899 	WORD MinorImageVersion;
2900 	WORD MajorSubsystemVersion;
2901 	WORD MinorSubsystemVersion;
2902 	DWORD Win32VersionValue;
2903 	DWORD SizeOfImage;
2904 	DWORD SizeOfHeaders;
2905 	DWORD CheckSum;
2906 	WORD Subsystem;
2907 	WORD DllCharacteristics;
2908 	DWORD SizeOfStackReserve;
2909 	DWORD SizeOfStackCommit;
2910 	DWORD SizeOfHeapReserve;
2911 	DWORD SizeOfHeapCommit;
2912 	DWORD LoaderFlags;
2913 	DWORD NumberOfRvaAndSizes;
2914 	IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
2915 } IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
2916 typedef struct _IMAGE_OPTIONAL_HEADER64 {
2917 	WORD Magic;
2918 	BYTE MajorLinkerVersion;
2919 	BYTE MinorLinkerVersion;
2920 	DWORD SizeOfCode;
2921 	DWORD SizeOfInitializedData;
2922 	DWORD SizeOfUninitializedData;
2923 	DWORD AddressOfEntryPoint;
2924 	DWORD BaseOfCode;
2925 	ULONGLONG ImageBase;
2926 	DWORD SectionAlignment;
2927 	DWORD FileAlignment;
2928 	WORD MajorOperatingSystemVersion;
2929 	WORD MinorOperatingSystemVersion;
2930 	WORD MajorImageVersion;
2931 	WORD MinorImageVersion;
2932 	WORD MajorSubsystemVersion;
2933 	WORD MinorSubsystemVersion;
2934 	DWORD Win32VersionValue;
2935 	DWORD SizeOfImage;
2936 	DWORD SizeOfHeaders;
2937 	DWORD CheckSum;
2938 	WORD Subsystem;
2939 	WORD DllCharacteristics;
2940 	ULONGLONG SizeOfStackReserve;
2941 	ULONGLONG SizeOfStackCommit;
2942 	ULONGLONG SizeOfHeapReserve;
2943 	ULONGLONG SizeOfHeapCommit;
2944 	DWORD LoaderFlags;
2945 	DWORD NumberOfRvaAndSizes;
2946 	IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
2947 } IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
2948 
2949 #ifdef _WIN64
2950 typedef IMAGE_OPTIONAL_HEADER64		IMAGE_OPTIONAL_HEADER;
2951 typedef PIMAGE_OPTIONAL_HEADER64	PIMAGE_OPTIONAL_HEADER;
2952 #else
2953 typedef IMAGE_OPTIONAL_HEADER32		IMAGE_OPTIONAL_HEADER;
2954 typedef PIMAGE_OPTIONAL_HEADER32	PIMAGE_OPTIONAL_HEADER;
2955 #endif
2956 
2957 typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
2958 	WORD Magic;
2959 	BYTE MajorLinkerVersion;
2960 	BYTE MinorLinkerVersion;
2961 	DWORD SizeOfCode;
2962 	DWORD SizeOfInitializedData;
2963 	DWORD SizeOfUninitializedData;
2964 	DWORD AddressOfEntryPoint;
2965 	DWORD BaseOfCode;
2966 	DWORD BaseOfData;
2967 	DWORD BaseOfBss;
2968 	DWORD GprMask;
2969 	DWORD CprMask[4];
2970 	DWORD GpValue;
2971 } IMAGE_ROM_OPTIONAL_HEADER,*PIMAGE_ROM_OPTIONAL_HEADER;
2972 #pragma pack(pop)
2973 #pragma pack(push,2)
2974 typedef struct _IMAGE_DOS_HEADER {
2975 	WORD e_magic;
2976 	WORD e_cblp;
2977 	WORD e_cp;
2978 	WORD e_crlc;
2979 	WORD e_cparhdr;
2980 	WORD e_minalloc;
2981 	WORD e_maxalloc;
2982 	WORD e_ss;
2983 	WORD e_sp;
2984 	WORD e_csum;
2985 	WORD e_ip;
2986 	WORD e_cs;
2987 	WORD e_lfarlc;
2988 	WORD e_ovno;
2989 	WORD e_res[4];
2990 	WORD e_oemid;
2991 	WORD e_oeminfo;
2992 	WORD e_res2[10];
2993 	LONG e_lfanew;
2994 } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
2995 typedef struct _IMAGE_OS2_HEADER {
2996 	WORD ne_magic;
2997 	CHAR ne_ver;
2998 	CHAR ne_rev;
2999 	WORD ne_enttab;
3000 	WORD ne_cbenttab;
3001 	LONG ne_crc;
3002 	WORD ne_flags;
3003 	WORD ne_autodata;
3004 	WORD ne_heap;
3005 	WORD ne_stack;
3006 	LONG ne_csip;
3007 	LONG ne_sssp;
3008 	WORD ne_cseg;
3009 	WORD ne_cmod;
3010 	WORD ne_cbnrestab;
3011 	WORD ne_segtab;
3012 	WORD ne_rsrctab;
3013 	WORD ne_restab;
3014 	WORD ne_modtab;
3015 	WORD ne_imptab;
3016 	LONG ne_nrestab;
3017 	WORD ne_cmovent;
3018 	WORD ne_align;
3019 	WORD ne_cres;
3020 	BYTE ne_exetyp;
3021 	BYTE ne_flagsothers;
3022 	WORD ne_pretthunks;
3023 	WORD ne_psegrefbytes;
3024 	WORD ne_swaparea;
3025 	WORD ne_expver;
3026 } IMAGE_OS2_HEADER,*PIMAGE_OS2_HEADER;
3027 #pragma pack(pop)
3028 #pragma pack(push,4)
3029 typedef struct _IMAGE_NT_HEADERS {
3030 DWORD Signature;
3031 IMAGE_FILE_HEADER FileHeader;
3032 IMAGE_OPTIONAL_HEADER32 OptionalHeader;
3033 } IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;
3034 typedef struct _IMAGE_NT_HEADERS64 {
3035 DWORD Signature;
3036 IMAGE_FILE_HEADER FileHeader;
3037 IMAGE_OPTIONAL_HEADER64 OptionalHeader;
3038 } IMAGE_NT_HEADERS64,*PIMAGE_NT_HEADERS64;
3039 
3040 #ifdef _WIN64
3041 typedef IMAGE_NT_HEADERS64	IMAGE_NT_HEADERS;
3042 typedef PIMAGE_NT_HEADERS64	PIMAGE_NT_HEADERS;
3043 #else
3044 typedef IMAGE_NT_HEADERS32	IMAGE_NT_HEADERS;
3045 typedef PIMAGE_NT_HEADERS32	PIMAGE_NT_HEADERS;
3046 #endif
3047 
3048 typedef struct _IMAGE_ROM_HEADERS {
3049 	IMAGE_FILE_HEADER FileHeader;
3050 	IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
3051 } IMAGE_ROM_HEADERS,*PIMAGE_ROM_HEADERS;
3052 typedef struct _IMAGE_SECTION_HEADER {
3053 	BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
3054 	union {
3055 		DWORD PhysicalAddress;
3056 		DWORD VirtualSize;
3057 	} Misc;
3058 	DWORD VirtualAddress;
3059 	DWORD SizeOfRawData;
3060 	DWORD PointerToRawData;
3061 	DWORD PointerToRelocations;
3062 	DWORD PointerToLinenumbers;
3063 	WORD NumberOfRelocations;
3064 	WORD NumberOfLinenumbers;
3065 	DWORD Characteristics;
3066 } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
3067 #pragma pack(pop)
3068 #pragma pack(push,2)
3069 typedef struct _IMAGE_SYMBOL {
3070 	union {
3071 		BYTE ShortName[8];
3072 		struct {
3073 			DWORD Short;
3074 			DWORD Long;
3075 		} Name;
3076 		PBYTE LongName[2];
3077 	} N;
3078 	DWORD Value;
3079 	SHORT SectionNumber;
3080 	WORD Type;
3081 	BYTE StorageClass;
3082 	BYTE NumberOfAuxSymbols;
3083 } IMAGE_SYMBOL,*PIMAGE_SYMBOL;
3084 typedef union _IMAGE_AUX_SYMBOL {
3085 	struct {
3086 		DWORD TagIndex;
3087 		union {
3088 			struct {
3089 				WORD Linenumber;
3090 				WORD Size;
3091 			} LnSz;
3092 			DWORD TotalSize;
3093 		} Misc;
3094 		union {
3095 			struct {
3096 				DWORD PointerToLinenumber;
3097 				DWORD PointerToNextFunction;
3098 			} Function;
3099 			struct {
3100 				WORD Dimension[4];
3101 			} Array;
3102 		} FcnAry;
3103 		WORD TvIndex;
3104 	} Sym;
3105 	struct {
3106 		BYTE Name[IMAGE_SIZEOF_SYMBOL];
3107 	} File;
3108 	struct {
3109 		DWORD Length;
3110 		WORD NumberOfRelocations;
3111 		WORD NumberOfLinenumbers;
3112 		DWORD CheckSum;
3113 		SHORT Number;
3114 		BYTE Selection;
3115 	} Section;
3116 } IMAGE_AUX_SYMBOL,*PIMAGE_AUX_SYMBOL;
3117 typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
3118 	DWORD NumberOfSymbols;
3119 	DWORD LvaToFirstSymbol;
3120 	DWORD NumberOfLinenumbers;
3121 	DWORD LvaToFirstLinenumber;
3122 	DWORD RvaToFirstByteOfCode;
3123 	DWORD RvaToLastByteOfCode;
3124 	DWORD RvaToFirstByteOfData;
3125 	DWORD RvaToLastByteOfData;
3126 } IMAGE_COFF_SYMBOLS_HEADER,*PIMAGE_COFF_SYMBOLS_HEADER;
3127 typedef struct _IMAGE_RELOCATION {
3128 	_ANONYMOUS_UNION union {
3129 		DWORD VirtualAddress;
3130 		DWORD RelocCount;
3131 	} DUMMYUNIONNAME;
3132 	DWORD SymbolTableIndex;
3133 	WORD Type;
3134 } IMAGE_RELOCATION,*PIMAGE_RELOCATION;
3135 #pragma pack(pop)
3136 #pragma pack(push,4)
3137 typedef struct _IMAGE_BASE_RELOCATION {
3138 	DWORD VirtualAddress;
3139 	DWORD SizeOfBlock;
3140 } IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
3141 #pragma pack(pop)
3142 #pragma pack(push,2)
3143 typedef struct _IMAGE_LINENUMBER {
3144 	union {
3145 		DWORD SymbolTableIndex;
3146 		DWORD VirtualAddress;
3147 	} Type;
3148 	WORD Linenumber;
3149 } IMAGE_LINENUMBER,*PIMAGE_LINENUMBER;
3150 #pragma pack(pop)
3151 #pragma pack(push,4)
3152 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
3153 	BYTE Name[16];
3154 	BYTE Date[12];
3155 	BYTE UserID[6];
3156 	BYTE GroupID[6];
3157 	BYTE Mode[8];
3158 	BYTE Size[10];
3159 	BYTE EndHeader[2];
3160 } IMAGE_ARCHIVE_MEMBER_HEADER,*PIMAGE_ARCHIVE_MEMBER_HEADER;
3161 typedef struct _IMAGE_EXPORT_DIRECTORY {
3162 	DWORD Characteristics;
3163 	DWORD TimeDateStamp;
3164 	WORD MajorVersion;
3165 	WORD MinorVersion;
3166 	DWORD Name;
3167 	DWORD Base;
3168 	DWORD NumberOfFunctions;
3169 	DWORD NumberOfNames;
3170 	DWORD AddressOfFunctions;
3171 	DWORD AddressOfNames;
3172 	DWORD AddressOfNameOrdinals;
3173 } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
3174 typedef struct _IMAGE_IMPORT_BY_NAME {
3175 	WORD Hint;
3176 	BYTE Name[1];
3177 } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
3178 typedef struct _IMAGE_THUNK_DATA32 {
3179 	union {
3180 		DWORD ForwarderString;
3181 		DWORD Function;
3182 		DWORD Ordinal;
3183 		DWORD AddressOfData;
3184 	} u1;
3185 } IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;
3186 typedef struct _IMAGE_THUNK_DATA64 {
3187 	union {
3188 		ULONGLONG ForwarderString;
3189 		ULONGLONG Function;
3190 		ULONGLONG Ordinal;
3191 		ULONGLONG AddressOfData;
3192 	} u1;
3193 } IMAGE_THUNK_DATA64, *PIMAGE_THUNK_DATA64;
3194 
3195 #ifdef __WIN64
3196 typedef IMAGE_THUNK_DATA64	IMAGE_THUNK_DATA;
3197 typedef PIMAGE_THUNK_DATA64	PIMAGE_THUNK_DATA;
3198 #else
3199 typedef IMAGE_THUNK_DATA32	IMAGE_THUNK_DATA;
3200 typedef PIMAGE_THUNK_DATA32	PIMAGE_THUNK_DATA;
3201 #endif
3202 
3203 typedef struct _IMAGE_IMPORT_DESCRIPTOR {
3204 	_ANONYMOUS_UNION union {
3205 		DWORD Characteristics;
3206 		DWORD OriginalFirstThunk;
3207 	} DUMMYUNIONNAME;
3208 	DWORD TimeDateStamp;
3209 	DWORD ForwarderChain;
3210 	DWORD Name;
3211 	DWORD FirstThunk;
3212 } IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
3213 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
3214 	DWORD TimeDateStamp;
3215 	WORD OffsetModuleName;
3216 	WORD NumberOfModuleForwarderRefs;
3217 } IMAGE_BOUND_IMPORT_DESCRIPTOR,*PIMAGE_BOUND_IMPORT_DESCRIPTOR;
3218 typedef struct _IMAGE_BOUND_FORWARDER_REF {
3219 	DWORD TimeDateStamp;
3220 	WORD OffsetModuleName;
3221 	WORD Reserved;
3222 } IMAGE_BOUND_FORWARDER_REF,*PIMAGE_BOUND_FORWARDER_REF;
3223 typedef void(NTAPI *PIMAGE_TLS_CALLBACK)(PVOID,DWORD,PVOID);
3224 typedef struct _IMAGE_TLS_DIRECTORY32 {
3225 	DWORD StartAddressOfRawData;
3226 	DWORD EndAddressOfRawData;
3227 	DWORD AddressOfIndex;
3228 	DWORD AddressOfCallBacks;
3229 	DWORD SizeOfZeroFill;
3230 	DWORD Characteristics;
3231 } IMAGE_TLS_DIRECTORY32,*PIMAGE_TLS_DIRECTORY32;
3232 typedef struct _IMAGE_TLS_DIRECTORY64 {
3233 	ULONGLONG StartAddressOfRawData;
3234 	ULONGLONG EndAddressOfRawData;
3235 	ULONGLONG AddressOfIndex;
3236 	ULONGLONG AddressOfCallBacks;
3237 	DWORD SizeOfZeroFill;
3238 	DWORD Characteristics;
3239 } IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64;
3240 
3241 #ifdef __WIN64
3242 typedef IMAGE_TLS_DIRECTORY64	IMAGE_TLS_DIRECTORY;
3243 typedef PIMAGE_TLS_DIRECTORY64	PIMAGE_TLS_DIRECTORY;
3244 #else
3245 typedef IMAGE_TLS_DIRECTORY32	IMAGE_TLS_DIRECTORY;
3246 typedef PIMAGE_TLS_DIRECTORY32	PIMAGE_TLS_DIRECTORY;
3247 #endif
3248 
3249 typedef struct _IMAGE_RESOURCE_DIRECTORY {
3250 	DWORD Characteristics;
3251 	DWORD TimeDateStamp;
3252 	WORD MajorVersion;
3253 	WORD MinorVersion;
3254 	WORD NumberOfNamedEntries;
3255 	WORD NumberOfIdEntries;
3256 } IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
3257 _ANONYMOUS_STRUCT typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
3258 	_ANONYMOUS_UNION union {
3259 		_ANONYMOUS_STRUCT struct {
3260 			DWORD NameOffset:31;
3261 			DWORD NameIsString:1;
3262 		}DUMMYSTRUCTNAME;
3263 		DWORD Name;
3264 		WORD Id;
3265 	} DUMMYUNIONNAME;
3266 	_ANONYMOUS_UNION union {
3267 		DWORD OffsetToData;
3268 		_ANONYMOUS_STRUCT struct {
3269 			DWORD OffsetToDirectory:31;
3270 			DWORD DataIsDirectory:1;
3271 		} DUMMYSTRUCTNAME2;
3272 	} DUMMYUNIONNAME2;
3273 } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
3274 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
3275 	WORD Length;
3276 	CHAR NameString[1];
3277 } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
3278 typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
3279 	WORD Length;
3280 	WCHAR NameString[1];
3281 } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
3282 typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
3283 	DWORD OffsetToData;
3284 	DWORD Size;
3285 	DWORD CodePage;
3286 	DWORD Reserved;
3287 } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
3288 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
3289 	DWORD Characteristics;
3290 	DWORD TimeDateStamp;
3291 	WORD MajorVersion;
3292 	WORD MinorVersion;
3293 	DWORD GlobalFlagsClear;
3294 	DWORD GlobalFlagsSet;
3295 	DWORD CriticalSectionDefaultTimeout;
3296 	DWORD DeCommitFreeBlockThreshold;
3297 	DWORD DeCommitTotalFreeThreshold;
3298 	PVOID LockPrefixTable;
3299 	DWORD MaximumAllocationSize;
3300 	DWORD VirtualMemoryThreshold;
3301 	DWORD ProcessHeapFlags;
3302 	DWORD Reserved[4];
3303 } IMAGE_LOAD_CONFIG_DIRECTORY,*PIMAGE_LOAD_CONFIG_DIRECTORY;
3304 typedef struct {
3305 	DWORD Characteristics;
3306 	DWORD TimeDateStamp;
3307 	WORD MajorVersion;
3308 	WORD MinorVersion;
3309 	DWORD GlobalFlagsClear;
3310 	DWORD GlobalFlagsSet;
3311 	DWORD CriticalSectionDefaultTimeout;
3312 	ULONGLONG DeCommitFreeBlockThreshold;
3313 	ULONGLONG DeCommitTotalFreeThreshold;
3314 	ULONGLONG LockPrefixTable;
3315 	ULONGLONG MaximumAllocationSize;
3316 	ULONGLONG VirtualMemoryThreshold;
3317 	ULONGLONG ProcessAffinityMask;
3318 	DWORD ProcessHeapFlags;
3319 	WORD CSDFlags;
3320 	WORD Reserved1;
3321 	ULONGLONG EditList;
3322 	DWORD Reserved[2];
3323 } IMAGE_LOAD_CONFIG_DIRECTORY64,*PIMAGE_LOAD_CONFIG_DIRECTORY64;
3324 typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
3325 	DWORD BeginAddress;
3326 	DWORD EndAddress;
3327 	PVOID ExceptionHandler;
3328 	PVOID HandlerData;
3329 	DWORD PrologEndAddress;
3330 } IMAGE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_RUNTIME_FUNCTION_ENTRY;
3331 typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
3332 	unsigned int FuncStart:32;
3333 	unsigned int PrologLen:8;
3334 	unsigned int FuncLen:22;
3335 	unsigned int ThirtyTwoBit:1;
3336 	unsigned int ExceptionFlag:1;
3337 } IMAGE_CE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_CE_RUNTIME_FUNCTION_ENTRY;
3338 typedef struct _IMAGE_DEBUG_DIRECTORY {
3339 	DWORD Characteristics;
3340 	DWORD TimeDateStamp;
3341 	WORD MajorVersion;
3342 	WORD MinorVersion;
3343 	DWORD Type;
3344 	DWORD SizeOfData;
3345 	DWORD AddressOfRawData;
3346 	DWORD PointerToRawData;
3347 } IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
3348 typedef struct _FPO_DATA {
3349 	DWORD ulOffStart;
3350 	DWORD cbProcSize;
3351 	DWORD cdwLocals;
3352 	WORD cdwParams;
3353 	WORD cbProlog:8;
3354 	WORD cbRegs:3;
3355 	WORD fHasSEH:1;
3356 	WORD fUseBP:1;
3357 	WORD reserved:1;
3358 	WORD cbFrame:2;
3359 } FPO_DATA,*PFPO_DATA;
3360 typedef struct _IMAGE_DEBUG_MISC {
3361 	DWORD DataType;
3362 	DWORD Length;
3363 	BOOLEAN Unicode;
3364 	BYTE Reserved[3];
3365 	BYTE Data[1];
3366 } IMAGE_DEBUG_MISC,*PIMAGE_DEBUG_MISC;
3367 typedef struct _IMAGE_FUNCTION_ENTRY {
3368 	DWORD StartingAddress;
3369 	DWORD EndingAddress;
3370 	DWORD EndOfPrologue;
3371 } IMAGE_FUNCTION_ENTRY,*PIMAGE_FUNCTION_ENTRY;
3372 typedef struct _IMAGE_FUNCTION_ENTRY64 {
3373 	ULONGLONG StartingAddress;
3374 	ULONGLONG EndingAddress;
3375 	_ANONYMOUS_UNION union {
3376 		ULONGLONG EndOfPrologue;
3377 		ULONGLONG UnwindInfoAddress;
3378 	} DUMMYUNIONNAME;
3379 } IMAGE_FUNCTION_ENTRY64,*PIMAGE_FUNCTION_ENTRY64;
3380 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
3381 	WORD Signature;
3382 	WORD Flags;
3383 	WORD Machine;
3384 	WORD Characteristics;
3385 	DWORD TimeDateStamp;
3386 	DWORD CheckSum;
3387 	DWORD ImageBase;
3388 	DWORD SizeOfImage;
3389 	DWORD NumberOfSections;
3390 	DWORD ExportedNamesSize;
3391 	DWORD DebugDirectorySize;
3392 	DWORD SectionAlignment;
3393 	DWORD Reserved[2];
3394 } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
3395 #pragma pack(pop)
3396 typedef enum _CM_SERVICE_NODE_TYPE {
3397 	DriverType=SERVICE_KERNEL_DRIVER,
3398 	FileSystemType=SERVICE_FILE_SYSTEM_DRIVER,
3399 	Win32ServiceOwnProcess=SERVICE_WIN32_OWN_PROCESS,
3400 	Win32ServiceShareProcess=SERVICE_WIN32_SHARE_PROCESS,
3401 	AdapterType=SERVICE_ADAPTER,
3402 	RecognizerType=SERVICE_RECOGNIZER_DRIVER
3403 } SERVICE_NODE_TYPE;
3404 typedef enum _CM_SERVICE_LOAD_TYPE {
3405 	BootLoad=SERVICE_BOOT_START,
3406 	SystemLoad=SERVICE_SYSTEM_START,
3407 	AutoLoad=SERVICE_AUTO_START,
3408 	DemandLoad=SERVICE_DEMAND_START,
3409 	DisableLoad=SERVICE_DISABLED
3410 } SERVICE_LOAD_TYPE;
3411 typedef enum _CM_ERROR_CONTROL_TYPE {
3412 	IgnoreError=SERVICE_ERROR_IGNORE,
3413 	NormalError=SERVICE_ERROR_NORMAL,
3414 	SevereError=SERVICE_ERROR_SEVERE,
3415 	CriticalError=SERVICE_ERROR_CRITICAL
3416 } SERVICE_ERROR_TYPE;
3417 typedef struct _NT_TIB {
3418 	struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
3419 	PVOID StackBase;
3420 	PVOID StackLimit;
3421 	PVOID SubSystemTib;
3422 	_ANONYMOUS_UNION union {
3423 		PVOID FiberData;
3424 		DWORD Version;
3425 	} DUMMYUNIONNAME;
3426 	PVOID ArbitraryUserPointer;
3427 	struct _NT_TIB *Self;
3428 } NT_TIB,*PNT_TIB;
3429 typedef struct _REPARSE_DATA_BUFFER {
3430 	DWORD  ReparseTag;
3431 	WORD   ReparseDataLength;
3432 	WORD   Reserved;
3433 	_ANONYMOUS_UNION union {
3434 		struct {
3435 			WORD   SubstituteNameOffset;
3436 			WORD   SubstituteNameLength;
3437 			WORD   PrintNameOffset;
3438 			WORD   PrintNameLength;
3439 			ULONG  Flags;
3440 			WCHAR PathBuffer[1];
3441 		} SymbolicLinkReparseBuffer;
3442 		struct {
3443 			WORD   SubstituteNameOffset;
3444 			WORD   SubstituteNameLength;
3445 			WORD   PrintNameOffset;
3446 			WORD   PrintNameLength;
3447 			WCHAR PathBuffer[1];
3448 		} MountPointReparseBuffer;
3449 		struct {
3450 			BYTE   DataBuffer[1];
3451 		} GenericReparseBuffer;
3452 	} DUMMYUNIONNAME;
3453 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
3454 typedef struct _REPARSE_GUID_DATA_BUFFER {
3455 	DWORD  ReparseTag;
3456 	WORD   ReparseDataLength;
3457 	WORD   Reserved;
3458 	GUID   ReparseGuid;
3459 	struct {
3460 		BYTE   DataBuffer[1];
3461 	} GenericReparseBuffer;
3462 } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
3463 typedef struct _REPARSE_POINT_INFORMATION {
3464 	WORD   ReparseDataLength;
3465 	WORD   UnparsedNameLength;
3466 } REPARSE_POINT_INFORMATION, *PREPARSE_POINT_INFORMATION;
3467 
3468 typedef union _FILE_SEGMENT_ELEMENT {
3469 	PVOID64 Buffer;
3470 	ULONGLONG Alignment;
3471 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
3472 
3473 /* JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags constants */
3474 #define JOB_OBJECT_LIMIT_WORKINGSET                 0x0001
3475 #define JOB_OBJECT_LIMIT_PROCESS_TIME               0x0002
3476 #define JOB_OBJECT_LIMIT_JOB_TIME                   0x0004
3477 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS             0x0008
3478 #define JOB_OBJECT_LIMIT_AFFINITY                   0x0010
3479 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS             0x0020
3480 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME          0x0040
3481 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS           0x0080
3482 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY             0x0100
3483 #define JOB_OBJECT_LIMIT_JOB_MEMORY                 0x0200
3484 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x0400
3485 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK               0x0800
3486 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK        0x1000
3487 
3488 /* Wrong definitions, but keep for backward compatibility. */
3489 #define JOB_OBJECT_BREAKAWAY_OK      JOB_OBJECT_LIMIT_BREAKAWAY_OK
3490 #define JOB_OBJECT_SILENT_BREAKAWAY  JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK
3491 
3492 /* JOBOBJECT_BASIC_UI_RESTRICTIONS.UIRestrictionsClass constants */
3493 #define JOB_OBJECT_UILIMIT_HANDLES          0x0001
3494 #define JOB_OBJECT_UILIMIT_READCLIPBOARD    0x0002
3495 #define JOB_OBJECT_UILIMIT_WRITECLIPBOARD   0x0004
3496 #define JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x0008
3497 #define JOB_OBJECT_UILIMIT_DISPLAYSETTINGS  0x0010
3498 #define JOB_OBJECT_UILIMIT_GLOBALATOMS      0x0020
3499 #define JOB_OBJECT_UILIMIT_DESKTOP          0x0040
3500 #define JOB_OBJECT_UILIMIT_EXITWINDOWS      0x0080
3501 
3502 /* JOBOBJECT_SECURITY_LIMIT_INFORMATION.SecurityLimitFlags constants */
3503 #define JOB_OBJECT_SECURITY_NO_ADMIN          0x0001
3504 #define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN  0x0002
3505 #define JOB_OBJECT_SECURITY_ONLY_TOKEN        0x0004
3506 #define JOB_OBJECT_SECURITY_FILTER_TOKENS     0x0008
3507 
3508 /* JOBOBJECT_END_OF_JOB_TIME_INFORMATION.EndOfJobTimeAction constants */
3509 #define JOB_OBJECT_TERMINATE_AT_END_OF_JOB  0
3510 #define JOB_OBJECT_POST_AT_END_OF_JOB       1
3511 
3512 #define JOB_OBJECT_MSG_END_OF_JOB_TIME        1
3513 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME    2
3514 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT   3
3515 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO    4
3516 #define JOB_OBJECT_MSG_NEW_PROCESS            6
3517 #define JOB_OBJECT_MSG_EXIT_PROCESS           7
3518 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS  8
3519 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT   9
3520 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT       10
3521 
3522 typedef enum _JOBOBJECTINFOCLASS {
3523 	JobObjectBasicAccountingInformation = 1,
3524 	JobObjectBasicLimitInformation,
3525 	JobObjectBasicProcessIdList,
3526 	JobObjectBasicUIRestrictions,
3527 	JobObjectSecurityLimitInformation,
3528 	JobObjectEndOfJobTimeInformation,
3529 	JobObjectAssociateCompletionPortInformation,
3530 	JobObjectBasicAndIoAccountingInformation,
3531 	JobObjectExtendedLimitInformation,
3532 	JobObjectJobSetInformation,
3533 	MaxJobObjectInfoClass
3534 } JOBOBJECTINFOCLASS;
3535 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
3536 	LARGE_INTEGER TotalUserTime;
3537 	LARGE_INTEGER TotalKernelTime;
3538 	LARGE_INTEGER ThisPeriodTotalUserTime;
3539 	LARGE_INTEGER ThisPeriodTotalKernelTime;
3540 	DWORD TotalPageFaultCount;
3541 	DWORD TotalProcesses;
3542 	DWORD ActiveProcesses;
3543 	DWORD TotalTerminatedProcesses;
3544 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
3545 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
3546 	LARGE_INTEGER PerProcessUserTimeLimit;
3547 	LARGE_INTEGER PerJobUserTimeLimit;
3548 	DWORD LimitFlags;
3549 	SIZE_T MinimumWorkingSetSize;
3550 	SIZE_T MaximumWorkingSetSize;
3551 	DWORD ActiveProcessLimit;
3552 	ULONG_PTR Affinity;
3553 	DWORD PriorityClass;
3554 	DWORD SchedulingClass;
3555 } JOBOBJECT_BASIC_LIMIT_INFORMATION,*PJOBOBJECT_BASIC_LIMIT_INFORMATION;
3556 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {
3557 	DWORD NumberOfAssignedProcesses;
3558 	DWORD NumberOfProcessIdsInList;
3559 	ULONG_PTR ProcessIdList[1];
3560 } JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST;
3561 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
3562 	DWORD UIRestrictionsClass;
3563 } JOBOBJECT_BASIC_UI_RESTRICTIONS,*PJOBOBJECT_BASIC_UI_RESTRICTIONS;
3564 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
3565 	DWORD SecurityLimitFlags;
3566 	HANDLE JobToken;
3567 	PTOKEN_GROUPS SidsToDisable;
3568 	PTOKEN_PRIVILEGES PrivilegesToDelete;
3569 	PTOKEN_GROUPS RestrictedSids;
3570 } JOBOBJECT_SECURITY_LIMIT_INFORMATION,*PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
3571 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
3572 	DWORD EndOfJobTimeAction;
3573 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION,*PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
3574 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
3575 	PVOID CompletionKey;
3576 	HANDLE CompletionPort;
3577 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT,*PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
3578 typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
3579 	JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
3580 	IO_COUNTERS IoInfo;
3581 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
3582 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
3583 	JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
3584 	IO_COUNTERS IoInfo;
3585 	SIZE_T ProcessMemoryLimit;
3586 	SIZE_T JobMemoryLimit;
3587 	SIZE_T PeakProcessMemoryUsed;
3588 	SIZE_T PeakJobMemoryUsed;
3589 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION,*PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
3590 typedef struct _JOBOBJECT_JOBSET_INFORMATION {
3591 	DWORD MemberLevel;
3592 } JOBOBJECT_JOBSET_INFORMATION,*PJOBOBJECT_JOBSET_INFORMATION;
3593 
3594 /* Fixme: Making these defines conditional on WINVER will break ddk includes */
3595 #if 1 /* (WINVER >= _WIN32_WINNT_WIN2K) */
3596 #include <pshpack4.h>
3597 
3598 #define ES_SYSTEM_REQUIRED                0x00000001
3599 #define ES_DISPLAY_REQUIRED               0x00000002
3600 #define ES_USER_PRESENT                   0x00000004
3601 #define ES_CONTINUOUS                     0x80000000
3602 
3603 typedef enum _LATENCY_TIME {
3604 	LT_DONT_CARE,
3605 	LT_LOWEST_LATENCY
3606 } LATENCY_TIME, *PLATENCY_TIME;
3607 
3608 typedef enum _SYSTEM_POWER_STATE {
3609 	PowerSystemUnspecified,
3610 	PowerSystemWorking,
3611 	PowerSystemSleeping1,
3612 	PowerSystemSleeping2,
3613 	PowerSystemSleeping3,
3614 	PowerSystemHibernate,
3615 	PowerSystemShutdown,
3616 	PowerSystemMaximum
3617 } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
3618 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
3619 
3620 typedef enum {
3621 	PowerActionNone,
3622 	PowerActionReserved,
3623 	PowerActionSleep,
3624 	PowerActionHibernate,
3625 	PowerActionShutdown,
3626 	PowerActionShutdownReset,
3627 	PowerActionShutdownOff,
3628 	PowerActionWarmEject
3629 } POWER_ACTION, *PPOWER_ACTION;
3630 
3631 typedef enum _DEVICE_POWER_STATE {
3632 	PowerDeviceUnspecified,
3633 	PowerDeviceD0,
3634 	PowerDeviceD1,
3635 	PowerDeviceD2,
3636 	PowerDeviceD3,
3637 	PowerDeviceMaximum
3638 } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
3639 
3640 typedef struct {
3641 	DWORD  Granularity;
3642 	DWORD  Capacity;
3643 } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
3644 
3645 typedef struct _POWER_ACTION_POLICY {
3646 	POWER_ACTION  Action;
3647 	ULONG  Flags;
3648 	ULONG  EventCode;
3649 } POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
3650 
3651 /* POWER_ACTION_POLICY.Flags constants */
3652 #define POWER_ACTION_QUERY_ALLOWED        0x00000001
3653 #define POWER_ACTION_UI_ALLOWED           0x00000002
3654 #define POWER_ACTION_OVERRIDE_APPS        0x00000004
3655 #define POWER_ACTION_LIGHTEST_FIRST       0x10000000
3656 #define POWER_ACTION_LOCK_CONSOLE         0x20000000
3657 #define POWER_ACTION_DISABLE_WAKES        0x40000000
3658 #define POWER_ACTION_CRITICAL             0x80000000
3659 
3660 /* POWER_ACTION_POLICY.EventCode constants */
3661 #define POWER_LEVEL_USER_NOTIFY_TEXT      0x00000001
3662 #define POWER_LEVEL_USER_NOTIFY_SOUND     0x00000002
3663 #define POWER_LEVEL_USER_NOTIFY_EXEC      0x00000004
3664 #define POWER_USER_NOTIFY_BUTTON          0x00000008
3665 #define POWER_USER_NOTIFY_SHUTDOWN        0x00000010
3666 #define POWER_FORCE_TRIGGER_RESET         0x80000000
3667 
3668 #define DISCHARGE_POLICY_CRITICAL	0
3669 #define DISCHARGE_POLICY_LOW		1
3670 #define NUM_DISCHARGE_POLICIES		4
3671 
3672 #define PO_THROTTLE_NONE	0
3673 #define PO_THROTTLE_CONSTANT	1
3674 #define PO_THROTTLE_DEGRADE	2
3675 #define PO_THROTTLE_ADAPTIVE	3
3676 #define PO_THROTTLE_MAXIMUM	4
3677 
3678 typedef struct _SYSTEM_POWER_LEVEL {
3679 	BOOLEAN  Enable;
3680 	UCHAR  Spare[3];
3681 	ULONG  BatteryLevel;
3682 	POWER_ACTION_POLICY  PowerPolicy;
3683 	SYSTEM_POWER_STATE  MinSystemState;
3684 } SYSTEM_POWER_LEVEL, *PSYSTEM_POWER_LEVEL;
3685 
3686 typedef struct _SYSTEM_POWER_POLICY {
3687 	ULONG  Revision;
3688 	POWER_ACTION_POLICY  PowerButton;
3689 	POWER_ACTION_POLICY  SleepButton;
3690 	POWER_ACTION_POLICY  LidClose;
3691 	SYSTEM_POWER_STATE  LidOpenWake;
3692 	ULONG  Reserved;
3693 	POWER_ACTION_POLICY  Idle;
3694 	ULONG  IdleTimeout;
3695 	UCHAR  IdleSensitivity;
3696 	UCHAR  DynamicThrottle;
3697 	UCHAR  Spare2[2];
3698 	SYSTEM_POWER_STATE  MinSleep;
3699 	SYSTEM_POWER_STATE  MaxSleep;
3700 	SYSTEM_POWER_STATE  ReducedLatencySleep;
3701 	ULONG  WinLogonFlags;
3702 	ULONG  Spare3;
3703 	ULONG  DozeS4Timeout;
3704 	ULONG  BroadcastCapacityResolution;
3705 	SYSTEM_POWER_LEVEL  DischargePolicy[NUM_DISCHARGE_POLICIES];
3706 	ULONG  VideoTimeout;
3707 	BOOLEAN  VideoDimDisplay;
3708 	ULONG  VideoReserved[3];
3709 	ULONG  SpindownTimeout;
3710 	BOOLEAN  OptimizeForPower;
3711 	UCHAR  FanThrottleTolerance;
3712 	UCHAR  ForcedThrottle;
3713 	UCHAR  MinThrottle;
3714 	POWER_ACTION_POLICY  OverThrottled;
3715 } SYSTEM_POWER_POLICY, *PSYSTEM_POWER_POLICY;
3716 
3717 typedef struct _SYSTEM_POWER_CAPABILITIES {
3718 	BOOLEAN  PowerButtonPresent;
3719 	BOOLEAN  SleepButtonPresent;
3720 	BOOLEAN  LidPresent;
3721 	BOOLEAN  SystemS1;
3722 	BOOLEAN  SystemS2;
3723 	BOOLEAN  SystemS3;
3724 	BOOLEAN  SystemS4;
3725 	BOOLEAN  SystemS5;
3726 	BOOLEAN  HiberFilePresent;
3727 	BOOLEAN  FullWake;
3728 	BOOLEAN  VideoDimPresent;
3729 	BOOLEAN  ApmPresent;
3730 	BOOLEAN  UpsPresent;
3731 	BOOLEAN  ThermalControl;
3732 	BOOLEAN  ProcessorThrottle;
3733 	UCHAR  ProcessorMinThrottle;
3734 	UCHAR  ProcessorMaxThrottle;
3735 	BOOLEAN  FastSystemS4;
3736 	UCHAR  spare2[3];
3737 	BOOLEAN  DiskSpinDown;
3738 	UCHAR  spare3[8];
3739 	BOOLEAN  SystemBatteriesPresent;
3740 	BOOLEAN  BatteriesAreShortTerm;
3741 	BATTERY_REPORTING_SCALE  BatteryScale[3];
3742 	SYSTEM_POWER_STATE  AcOnLineWake;
3743 	SYSTEM_POWER_STATE  SoftLidWake;
3744 	SYSTEM_POWER_STATE  RtcWake;
3745 	SYSTEM_POWER_STATE  MinDeviceWakeState;
3746 	SYSTEM_POWER_STATE  DefaultLowLatencyWake;
3747 } SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
3748 
3749 typedef struct _SYSTEM_BATTERY_STATE {
3750 	BOOLEAN  AcOnLine;
3751 	BOOLEAN  BatteryPresent;
3752 	BOOLEAN  Charging;
3753 	BOOLEAN  Discharging;
3754 	BOOLEAN  Spare1[4];
3755 	ULONG  MaxCapacity;
3756 	ULONG  RemainingCapacity;
3757 	ULONG  Rate;
3758 	ULONG  EstimatedTime;
3759 	ULONG  DefaultAlert1;
3760 	ULONG  DefaultAlert2;
3761 } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
3762 
3763 typedef enum _POWER_INFORMATION_LEVEL {
3764 	SystemPowerPolicyAc,
3765 	SystemPowerPolicyDc,
3766 	VerifySystemPolicyAc,
3767 	VerifySystemPolicyDc,
3768 	SystemPowerCapabilities,
3769 	SystemBatteryState,
3770 	SystemPowerStateHandler,
3771 	ProcessorStateHandler,
3772 	SystemPowerPolicyCurrent,
3773 	AdministratorPowerPolicy,
3774 	SystemReserveHiberFile,
3775 	ProcessorInformation,
3776 	SystemPowerInformation,
3777 	ProcessorStateHandler2,
3778 	LastWakeTime,
3779 	LastSleepTime,
3780 	SystemExecutionState,
3781 	SystemPowerStateNotifyHandler,
3782 	ProcessorPowerPolicyAc,
3783 	ProcessorPowerPolicyDc,
3784 	VerifyProcessorPowerPolicyAc,
3785 	VerifyProcessorPowerPolicyDc,
3786 	ProcessorPowerPolicyCurrent
3787 } POWER_INFORMATION_LEVEL;
3788 
3789 typedef struct _PROCESSOR_POWER_POLICY_INFO {
3790 	ULONG  TimeCheck;
3791 	ULONG  DemoteLimit;
3792 	ULONG  PromoteLimit;
3793 	UCHAR  DemotePercent;
3794 	UCHAR  PromotePercent;
3795 	UCHAR  Spare[2];
3796 	ULONG  AllowDemotion : 1;
3797 	ULONG  AllowPromotion : 1;
3798 	ULONG  Reserved : 30;
3799 } PROCESSOR_POWER_POLICY_INFO, *PPROCESSOR_POWER_POLICY_INFO;
3800 typedef struct _PROCESSOR_POWER_POLICY {
3801 	ULONG  Revision;
3802 	UCHAR  DynamicThrottle;
3803 	UCHAR  Spare[3];
3804 	ULONG  Reserved;
3805 	ULONG  PolicyCount;
3806 	PROCESSOR_POWER_POLICY_INFO  Policy[3];
3807 } PROCESSOR_POWER_POLICY, *PPROCESSOR_POWER_POLICY;
3808 typedef struct _ADMINISTRATOR_POWER_POLICY {
3809 	SYSTEM_POWER_STATE  MinSleep;
3810 	SYSTEM_POWER_STATE  MaxSleep;
3811 	ULONG  MinVideoTimeout;
3812 	ULONG  MaxVideoTimeout;
3813 	ULONG  MinSpindownTimeout;
3814 	ULONG  MaxSpindownTimeout;
3815 } ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
3816 #include <poppack.h>
3817 #endif /* WINVER >= _WIN32_WINNT_WIN2K */
3818 
3819 typedef __AW(OSVERSIONINFO) OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
3820 typedef __AW(OSVERSIONINFOEX) OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
3821 
3822 #ifdef _X86_
3823 /* Support -masm=intel.  */
GetCurrentFiber(void)3824 static __inline__ PVOID GetCurrentFiber(void)
3825 {
3826     void* ret;
3827     __asm__ __volatile__ (
3828 	"mov{l}	{%%fs:0x10,%0|%0,%%fs:0x10}"
3829 	: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
3830 	);
3831     return ret;
3832 }
3833 
GetFiberData(void)3834 static __inline__ PVOID GetFiberData(void)
3835 {
3836     void* ret;
3837     __asm__ __volatile__ (
3838 	"mov{l}	{%%fs:0x10,%0|%0,%%fs:0x10}\n\t"
3839 	"mov{l}	{(%0),%0|%0,[%0]}"
3840 	: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
3841 	);
3842     return ret;
3843 }
3844 
NtCurrentTeb(void)3845 static __inline__ struct _TEB * NtCurrentTeb(void)
3846 {
3847     struct _TEB *ret;
3848 
3849     __asm__ __volatile__ (
3850         "mov{l} {%%fs:0x18,%0|%0,%%fs:0x18}\n"
3851         : "=r" (ret)
3852         : /* no inputs */
3853     );
3854 
3855     return ret;
3856 }
3857 
3858 #else /* ! _X86_ */
3859 
3860 PVOID GetCurrentFiber(void);
3861 #pragma aux GetCurrentFiber = \
3862         "mov	eax, dword ptr fs:0x10" \
3863         value [eax] \
3864         modify [eax];
3865 
3866 PVOID GetFiberData(void);
3867 #pragma aux GetFiberData = \
3868 	"mov	eax, dword ptr fs:0x10" \
3869 	"mov	eax, [eax]" \
3870         value [eax] \
3871         modify [eax];
3872 
3873 struct _TEB * NtCurrentTeb(void);
3874 #pragma aux NtCurrentTeb = \
3875         "mov	eax, dword ptr fs:0x18" \
3876         value [eax] \
3877         modify [eax];
3878 
3879 #endif /* _X86_ */
3880 
3881 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
3882 # if defined(_AMD64_) || defined(__X86_64)
3883 #  define MemoryBarrier __faststorefence
3884 
3885 # elif defined(_IA64_)
3886 
3887 #  define MemoryBarrier __mf
3888 # else
3889 
3890    void __mingworg_MemoryBarrier(void);
3891 #  define MemoryBarrier __mingworg_MemoryBarrier
3892 # endif
3893 
3894 #else
3895 
3896 # define MemoryBarrier
3897 #endif
3898 
3899 #endif /* RC_INVOKED */
3900 
3901 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
3902 #define KEY_WOW64_64KEY 0x0100
3903 #define KEY_WOW64_32KEY 0x0200
3904 #define VER_MINORVERSION 0x0000001
3905 #define VER_MAJORVERSION 0x0000002
3906 #define VER_BUILDNUMBER 0x0000004
3907 #define VER_PLATFORMID 0x0000008
3908 #define VER_SERVICEPACKMINOR 0x0000010
3909 #define VER_SERVICEPACKMAJOR 0x0000020
3910 #define VER_SUITENAME 0x0000040
3911 #define VER_PRODUCT_TYPE 0x0000080
3912 #define VER_EQUAL 1
3913 #define VER_GREATER 2
3914 #define VER_GREATER_EQUAL 3
3915 #define VER_LESS 4
3916 #define VER_LESS_EQUAL 5
3917 #define VER_AND 6
3918 #define VER_OR 7
3919 
3920 #ifndef RC_INVOKED
3921 typedef LONG (WINAPI *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS);
3922 typedef VOID (NTAPI *WAITORTIMERCALLBACKFUNC)(PVOID,BOOLEAN);
3923 ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
3924 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType)  \
3925 	((ConditionMask) = VerSetConditionMask((ConditionMask), \
3926 	(TypeBitMask), (ComparisonType)))
3927 #endif /* ! RC_INVOKED */
3928 
3929 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN2K) */
3930 
3931 #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
3932 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
3933 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
3934 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
3935 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
3936 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
3937 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
3938 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
3939 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
3940 
3941 #ifndef RC_INVOKED
3942 typedef struct _SYSTEM_POWER_INFORMATION {
3943 	ULONG  MaxIdlenessAllowed;
3944 	ULONG  Idleness;
3945 	ULONG  TimeRemaining;
3946 	UCHAR  CoolingMode;
3947 } SYSTEM_POWER_INFORMATION,*PSYSTEM_POWER_INFORMATION;
3948 typedef enum _HEAP_INFORMATION_CLASS {
3949 	HeapCompatibilityInformation
3950 } HEAP_INFORMATION_CLASS;
3951 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
3952 	ActivationContextBasicInformation = 1,
3953 	ActivationContextDetailedInformation,
3954 	AssemblyDetailedInformationInActivationContext,
3955 	FileInformationInAssemblyOfAssemblyInActivationContext
3956 } ACTIVATION_CONTEXT_INFO_CLASS;
3957 typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
3958 	DWORD ulFlags;
3959 	DWORD ulEncodedAssemblyIdentityLength;
3960 	DWORD ulManifestPathType;
3961 	DWORD ulManifestPathLength;
3962 	LARGE_INTEGER liManifestLastWriteTime;
3963 	DWORD ulPolicyPathType;
3964 	DWORD ulPolicyPathLength;
3965 	LARGE_INTEGER liPolicyLastWriteTime;
3966 	DWORD ulMetadataSatelliteRosterIndex;
3967 	DWORD ulManifestVersionMajor;
3968 	DWORD ulManifestVersionMinor;
3969 	DWORD ulPolicyVersionMajor;
3970 	DWORD ulPolicyVersionMinor;
3971 	DWORD ulAssemblyDirectoryNameLength;
3972 	PCWSTR lpAssemblyEncodedAssemblyIdentity;
3973 	PCWSTR lpAssemblyManifestPath;
3974 	PCWSTR lpAssemblyPolicyPath;
3975 	PCWSTR lpAssemblyDirectoryName;
3976 } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
3977 typedef const ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
3978 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
3979 	DWORD dwFlags;
3980 	DWORD ulFormatVersion;
3981 	DWORD ulAssemblyCount;
3982 	DWORD ulRootManifestPathType;
3983 	DWORD ulRootManifestPathChars;
3984 	DWORD ulRootConfigurationPathType;
3985 	DWORD ulRootConfigurationPathChars;
3986 	DWORD ulAppDirPathType;
3987 	DWORD ulAppDirPathChars;
3988 	PCWSTR lpRootManifestPath;
3989 	PCWSTR lpRootConfigurationPath;
3990 	PCWSTR lpAppDirPath;
3991 } ACTIVATION_CONTEXT_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_DETAILED_INFORMATION;
3992 typedef const ACTIVATION_CONTEXT_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_DETAILED_INFORMATION;
3993 typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
3994 	ULONG ulAssemblyIndex;
3995 	ULONG ulFileIndexInAssembly;
3996 } ACTIVATION_CONTEXT_QUERY_INDEX,*PACTIVATION_CONTEXT_QUERY_INDEX;
3997 typedef const ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
3998 typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
3999 	DWORD ulFlags;
4000 	DWORD ulFilenameLength;
4001 	DWORD ulPathLength;
4002 	PCWSTR lpFileName;
4003 	PCWSTR lpFilePath;
4004 } ASSEMBLY_FILE_DETAILED_INFORMATION,*PASSEMBLY_FILE_DETAILED_INFORMATION;
4005 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
4006 #endif /* ! RC_INVOKED */
4007 
4008 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINXP) */
4009 
4010 #if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
4011 #define SID_HASH_SIZE 32
4012 #define SUBLANG_ENGLISH_IRELAND	0x06
4013 #define SUBLANG_LITHUANIAN_LITHUANIA	0x01
4014 #define SUBLANG_PORTUGUESE_PORTUGAL	0x02
4015 #define SUBLANG_SWEDISH_SWEDEN	0x01
4016 #define TOKEN_MANDATORY_POLICY_OFF 0
4017 #define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 1
4018 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 2
4019 #define TOKEN_MANDATORY_POLICY_VALID_MASK 3
4020 
4021 #ifndef RC_INVOKED
4022 typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
4023 typedef struct _SID_AND_ATTRIBUTES_HASH {
4024 	DWORD SidCount;
4025 	PSID_AND_ATTRIBUTES SidAttr;
4026 	SID_HASH_ENTRY Hash[SID_HASH_SIZE];
4027 } SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
4028 typedef struct _TOKEN_LINKED_TOKEN {
4029 	HANDLE LinkedToken;
4030 } TOKEN_LINKED_TOKEN, *PTOKEN_LINKED_TOKEN;
4031 typedef struct _TOKEN_MANDATORY_LABEL {
4032 	SID_AND_ATTRIBUTES Label;
4033 } TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
4034 typedef struct _TOKEN_MANDATORY_POLICY {
4035 	DWORD Policy;
4036 } TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY;
4037 typedef struct _TOKEN_ELEVATION {
4038 	DWORD TokenIsElevated;
4039 } TOKEN_ELEVATION, *PTOKEN_ELEVATION;
4040 typedef struct _TOKEN_ACCESS_INFORMATION {
4041 	PSID_AND_ATTRIBUTES_HASH SidHash;
4042 	PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
4043 	PTOKEN_PRIVILEGES Privileges;
4044 	LUID AuthenticationId;
4045 	TOKEN_TYPE TokenType;
4046 	SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
4047 	TOKEN_MANDATORY_POLICY MandatoryPolicy;
4048 	DWORD Flags;
4049 } TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION;
4050 typedef enum {
4051 	PoAc = 0,
4052 	PoDc = 1,
4053 	PoHot = 2,
4054 	PoConditionMaximum = 3
4055 } SYSTEM_POWER_CONDITION, *PSYSTEM_POWER_CONDITION;
4056 #endif /* ! RC_INVOKED */
4057 
4058 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_VISTA) */
4059 
4060 #ifdef __cplusplus
4061 }
4062 #endif
4063 
4064 #endif
4065