OSDN Git Service

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