OSDN Git Service

Redo the filters based on assumptions discussed in mingw-dvlpr list.
[mingw/mingw-org-wsl.git] / include / winnt.h
1 /**
2  * @file winnt.h
3  * @copy 2012 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.  */
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
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
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