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