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