ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

winnt.h
Go to the documentation of this file.
00001 #ifndef _WINNT_H
00002 #define _WINNT_H
00003 
00004 #if !defined(__ROS_LONG64__)
00005 #ifdef __WINESRC__
00006 #define __ROS_LONG64__
00007 #endif
00008 #endif
00009 
00010 #ifdef __GNUC__
00011 #include <msvctarget.h>
00012 #endif
00013 
00014 #ifndef __ANONYMOUS_DEFINED
00015 #define __ANONYMOUS_DEFINED
00016 #ifndef NONAMELESSUNION
00017 #ifdef __GNUC__
00018 #define _ANONYMOUS_UNION __extension__
00019 #define _ANONYMOUS_STRUCT __extension__
00020 #elif defined(__WATCOMC__) || defined(_MSC_VER)
00021 #define _ANONYMOUS_UNION
00022 #define _ANONYMOUS_STRUCT
00023 #endif /* __GNUC__/__WATCOMC__ */
00024 #endif /* NONAMELESSUNION */
00025 #ifndef _ANONYMOUS_UNION
00026 #define _ANONYMOUS_UNION
00027 #define _UNION_NAME(x) x
00028 #define DUMMYUNIONNAME  u
00029 #define DUMMYUNIONNAME1 u1
00030 #define DUMMYUNIONNAME2 u2
00031 #define DUMMYUNIONNAME3 u3
00032 #define DUMMYUNIONNAME4 u4
00033 #define DUMMYUNIONNAME5 u5
00034 #define DUMMYUNIONNAME6 u6
00035 #define DUMMYUNIONNAME7 u7
00036 #define DUMMYUNIONNAME8 u8
00037 #else
00038 #define _UNION_NAME(x)
00039 #define DUMMYUNIONNAME
00040 #define DUMMYUNIONNAME1
00041 #define DUMMYUNIONNAME2
00042 #define DUMMYUNIONNAME3
00043 #define DUMMYUNIONNAME4
00044 #define DUMMYUNIONNAME5
00045 #define DUMMYUNIONNAME6
00046 #define DUMMYUNIONNAME7
00047 #define DUMMYUNIONNAME8
00048 #endif
00049 #ifndef _ANONYMOUS_STRUCT
00050 #define _ANONYMOUS_STRUCT
00051 #define _STRUCT_NAME(x) x
00052 #define DUMMYSTRUCTNAME s
00053 #define DUMMYSTRUCTNAME1 s1
00054 #define DUMMYSTRUCTNAME2 s2
00055 #define DUMMYSTRUCTNAME3 s3
00056 #define DUMMYSTRUCTNAME4 s4
00057 #define DUMMYSTRUCTNAME5 s5
00058 #else
00059 #define _STRUCT_NAME(x)
00060 #define DUMMYSTRUCTNAME
00061 #define DUMMYSTRUCTNAME1
00062 #define DUMMYSTRUCTNAME2
00063 #define DUMMYSTRUCTNAME3
00064 #define DUMMYSTRUCTNAME4
00065 #define DUMMYSTRUCTNAME5
00066 #endif
00067 #endif /* __ANONYMOUS_DEFINED */
00068 
00069 #define UNREFERENCED_PARAMETER(P) {(P)=(P);}
00070 #define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}
00071 #define DBG_UNREFERENCED_PARAMETER(P)
00072 #define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
00073 
00074 #ifndef DECLSPEC_ALIGN
00075 # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
00076 #  define DECLSPEC_ALIGN(x) __declspec(align(x))
00077 # elif defined(__GNUC__)
00078 #  define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
00079 # else
00080 #  define DECLSPEC_ALIGN(x)
00081 # endif
00082 #endif
00083 
00084 #ifndef NOP_FUNCTION
00085 #if (_MSC_VER >= 1210)
00086 #define NOP_FUNCTION __noop
00087 #else
00088 #define NOP_FUNCTION (void)0
00089 #endif
00090 #endif
00091 
00092 # define DECLSPEC_HIDDEN
00093 
00094 #ifdef __cplusplus
00095 extern "C" {
00096 #endif
00097 
00098 #include <excpt.h>
00099 #include <basetsd.h>
00100 #include <guiddef.h>
00101 
00102 #include <ctype.h>
00103 #undef __need_wchar_t
00104 
00105 #include <winerror.h>
00106 #include <stddef.h>
00107 #include <sdkddkver.h>
00108 
00109 #ifndef RC_INVOKED
00110 #include <string.h>
00111 
00112 /* FIXME: add more architectures. Is there a way to specify this in GCC? */
00113 #if defined(_M_AMD64)
00114 #undef UNALIGNED
00115 #define UNALIGNED __unaligned
00116 #else
00117 #define UNALIGNED
00118 #endif
00119 
00120 #ifndef DECLSPEC_NOVTABLE
00121 # if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined(__cplusplus)
00122 #  define DECLSPEC_NOVTABLE __declspec(novtable)
00123 # else
00124 #  define DECLSPEC_NOVTABLE
00125 # endif
00126 #endif
00127 
00128 #ifndef DECLSPEC_ADDRSAFE
00129 #if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
00130 #define DECLSPEC_ADDRSAFE __declspec(address_safe)
00131 #else
00132 #define DECLSPEC_ADDRSAFE
00133 #endif
00134 #endif
00135 
00136 /*#ifdef _WINE*/
00137 #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
00138 #define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
00139 #else
00140 #define __WINE_ALLOC_SIZE(x)
00141 #endif
00142 /*#endif*/
00143 
00144 #ifndef FORCEINLINE
00145 #if (_MSC_VER >= 1200)
00146 #define FORCEINLINE __forceinline
00147 #elif (_MSC_VER)
00148 #define FORCEINLINE __inline
00149 #else
00150 #define FORCEINLINE extern __inline__ __attribute__((always_inline))
00151 #endif
00152 #endif
00153 
00154 #if !defined(_NTSYSTEM_)
00155 #define NTSYSAPI     DECLSPEC_IMPORT
00156 #define NTSYSCALLAPI DECLSPEC_IMPORT
00157 #else
00158 #define NTSYSAPI
00159 #if defined(_NTDLLBUILD_)
00160 #define NTSYSCALLAPI
00161 #else
00162 #define NTSYSCALLAPI DECLSPEC_ADDRSAFE
00163 #endif
00164 #endif
00165 
00166 #ifndef VOID
00167 #define VOID void
00168 #endif
00169 typedef char CHAR;
00170 typedef short SHORT;
00171 #if !defined(__ROS_LONG64__) || defined(_M_AMD64)
00172 typedef long LONG;
00173 #else
00174 typedef int LONG;
00175 #endif
00176 typedef char CCHAR, *PCCHAR;
00177 typedef void *PVOID;
00178 
00179 /* FIXME for __WIN64 */
00180 #ifndef  __ptr64
00181 #define __ptr64
00182 #endif
00183 typedef void* __ptr64 PVOID64;
00184 
00185 #ifdef __cplusplus
00186 # define EXTERN_C    extern "C"
00187 #else
00188 # define EXTERN_C    extern
00189 #endif
00190 
00191 #define STDMETHODCALLTYPE       __stdcall
00192 #define STDMETHODVCALLTYPE      __cdecl
00193 #define STDAPICALLTYPE          __stdcall
00194 #define STDAPIVCALLTYPE         __cdecl
00195 
00196 #define STDAPI                  EXTERN_C HRESULT STDAPICALLTYPE
00197 #define STDAPI_(type)           EXTERN_C type STDAPICALLTYPE
00198 #define STDMETHODIMP            HRESULT STDMETHODCALLTYPE
00199 #define STDMETHODIMP_(type)     type STDMETHODCALLTYPE
00200 #define STDAPIV                 EXTERN_C HRESULT STDAPIVCALLTYPE
00201 #define STDAPIV_(type)          EXTERN_C type STDAPIVCALLTYPE
00202 #define STDMETHODIMPV           HRESULT STDMETHODVCALLTYPE
00203 #define STDMETHODIMPV_(type)    type STDMETHODVCALLTYPE
00204 
00205 /* C99 restrict support */
00206 #if defined(ENABLE_RESTRICTED) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
00207   #if defined(_MSC_VER) && defined(_M_MRX000)
00208     #define RESTRICTED_POINTER __restrict
00209   #elif defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95)))
00210     #define RESTRICTED_POINTER __restrict
00211   #else
00212     #define RESTRICTED_POINTER
00213   #endif
00214 #else
00215   #define RESTRICTED_POINTER
00216 #endif
00217 
00218 typedef wchar_t WCHAR;
00219 typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR,*PZZWSTR;
00220 typedef CONST WCHAR *LPCWCH,*PCWCH,*LPCWSTR,*PCWSTR,*PCZZWSTR;
00221 typedef CHAR *PCHAR,*LPCH,*PCH,*NPSTR,*LPSTR,*PSTR;
00222 typedef CONST CHAR *LPCCH,*PCCH,*PCSTR,*LPCSTR;
00223 typedef PWSTR *PZPWSTR;
00224 typedef CONST PWSTR *PCZPWSTR;
00225 typedef WCHAR UNALIGNED *LPUWSTR,*PUWSTR;
00226 typedef PCWSTR *PZPCWSTR;
00227 typedef CONST WCHAR UNALIGNED *LPCUWSTR,*PCUWSTR;
00228 typedef PSTR *PZPSTR;
00229 typedef CONST PSTR *PCZPSTR;
00230 typedef PCSTR *PZPCSTR;
00231 
00232 
00233 #ifdef UNICODE
00234 #ifndef _TCHAR_DEFINED
00235 #define _TCHAR_DEFINED
00236   typedef WCHAR TCHAR,*PTCHAR;
00237   typedef WCHAR TBYTE ,*PTBYTE;
00238 #endif
00239   typedef LPWSTR LPTCH,PTCH,PTSTR,LPTSTR,LP;
00240   typedef LPCWSTR PCTSTR,LPCTSTR;
00241   typedef LPUWSTR PUTSTR,LPUTSTR;
00242   typedef LPCUWSTR PCUTSTR,LPCUTSTR;
00243 #define __TEXT(quote) L##quote
00244 #else
00245 #ifndef _TCHAR_DEFINED
00246 #define _TCHAR_DEFINED
00247   typedef char TCHAR,*PTCHAR;
00248   typedef unsigned char TBYTE ,*PTBYTE;
00249 #endif
00250   typedef LPSTR LPTCH,PTCH,PTSTR,LPTSTR,PUTSTR,LPUTSTR;
00251   typedef LPCSTR PCTSTR,LPCTSTR,PCUTSTR,LPCUTSTR;
00252 #define __TEXT(quote) quote
00253 #endif
00254 
00255 #define TEXT(quote) __TEXT(quote)
00256 
00257 typedef SHORT *PSHORT;
00258 typedef LONG *PLONG;
00259 #ifdef STRICT
00260 typedef void *HANDLE;
00261 #define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n
00262 #else
00263 typedef PVOID HANDLE;
00264 #define DECLARE_HANDLE(n) typedef HANDLE n
00265 #endif
00266 typedef HANDLE *PHANDLE;
00267 typedef DWORD LCID;
00268 typedef PDWORD PLCID;
00269 typedef WORD LANGID;
00270 #ifdef __GNUC__
00271 #define _HAVE_INT64
00272 #ifndef _INTEGRAL_MAX_BITS
00273 # define _INTEGRAL_MAX_BITS 64
00274 #endif
00275 #undef __int64
00276 #define __int64 long long
00277 #elif (defined(__WATCOMC__) || defined(_MSC_VER)) && (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64 )
00278 #define _HAVE_INT64
00279 #endif /* __GNUC__/__WATCOMC */
00280 #if defined(_HAVE_INT64) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)
00281 typedef __int64 LONGLONG;
00282 typedef unsigned __int64 DWORDLONG;
00283 #else
00284 typedef double LONGLONG,DWORDLONG;
00285 #endif
00286 typedef LONGLONG *PLONGLONG;
00287 typedef DWORDLONG *PDWORDLONG;
00288 typedef DWORDLONG ULONGLONG,*PULONGLONG;
00289 typedef LONGLONG USN;
00290 #ifdef _HAVE_INT64
00291 #define Int32x32To64(a,b) ((LONGLONG)(a)*(LONGLONG)(b))
00292 #define UInt32x32To64(a,b) ((DWORDLONG)(a)*(DWORDLONG)(b))
00293 #define Int64ShllMod32(a,b) ((DWORDLONG)(a)<<(b))
00294 #define Int64ShraMod32(a,b) ((LONGLONG)(a)>>(b))
00295 #define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b))
00296 #endif
00297 #define ANSI_NULL ((CHAR)0)
00298 #define UNICODE_NULL ((WCHAR)0)
00299 #define UNICODE_STRING_MAX_BYTES ((USHORT) 65534)
00300 #define UNICODE_STRING_MAX_CHARS (32767)
00301 typedef BYTE BOOLEAN,*PBOOLEAN;
00302 #endif
00303 typedef BYTE FCHAR;
00304 typedef WORD FSHORT;
00305 typedef DWORD FLONG;
00306 
00307 #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
00308 
00309 #include "intrin.h"
00310 
00311 #define NTAPI __stdcall
00312 #include <basetsd.h>
00313 
00314 #ifdef _MSC_VER
00315 #pragma warning(push)
00316 #pragma warning(disable:4201)
00317 #pragma warning(disable:4214)
00318 #pragma warning(disable:4820)
00319 #endif
00320 
00321 #define ACE_OBJECT_TYPE_PRESENT           0x00000001
00322 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x00000002
00323 #define APPLICATION_ERROR_MASK       0x20000000
00324 #define ERROR_SEVERITY_SUCCESS       0x00000000
00325 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
00326 #define ERROR_SEVERITY_WARNING       0x80000000
00327 #define ERROR_SEVERITY_ERROR         0xC0000000
00328 
00329 #ifdef __cplusplus
00330 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
00331 extern "C++" { \
00332     inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)|((int)b)); } \
00333     inline ENUMTYPE operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \
00334     inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)&((int)b)); } \
00335     inline ENUMTYPE operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \
00336     inline ENUMTYPE operator ~ (ENUMTYPE a) { return (ENUMTYPE)(~((int)a)); } \
00337     inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)^((int)b)); } \
00338     inline ENUMTYPE operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \
00339 }
00340 #else
00341 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */
00342 #endif
00343 
00344 /* also in ddk/ntifs.h */
00345 #define COMPRESSION_FORMAT_NONE         (0x0000)
00346 #define COMPRESSION_FORMAT_DEFAULT      (0x0001)
00347 #define COMPRESSION_FORMAT_LZNT1        (0x0002)
00348 #define COMPRESSION_ENGINE_STANDARD     (0x0000)
00349 #define COMPRESSION_ENGINE_MAXIMUM      (0x0100)
00350 #define COMPRESSION_ENGINE_HIBER        (0x0200)
00351 #define ACCESS_ALLOWED_ACE_TYPE         (0x0)
00352 #define ACCESS_DENIED_ACE_TYPE          (0x1)
00353 #define SYSTEM_AUDIT_ACE_TYPE           (0x2)
00354 #define SYSTEM_ALARM_ACE_TYPE           (0x3)
00355 /*end ntifs.h */
00356 #define ANYSIZE_ARRAY 1
00357 #define OBJECT_INHERIT_ACE  1
00358 #define CONTAINER_INHERIT_ACE   2
00359 #define NO_PROPAGATE_INHERIT_ACE    4
00360 #define INHERIT_ONLY_ACE    8
00361 #define INHERITED_ACE   10
00362 #define VALID_INHERIT_FLAGS 0x1F
00363 #define SUCCESSFUL_ACCESS_ACE_FLAG  64
00364 #define FAILED_ACCESS_ACE_FLAG  128
00365 #define DELETE  0x00010000L
00366 #define READ_CONTROL    0x20000L
00367 #define WRITE_DAC   0x40000L
00368 #define WRITE_OWNER 0x80000L
00369 #define SYNCHRONIZE 0x100000L
00370 #define STANDARD_RIGHTS_REQUIRED    0xF0000
00371 #define STANDARD_RIGHTS_READ    0x20000
00372 #define STANDARD_RIGHTS_WRITE   0x20000
00373 #define STANDARD_RIGHTS_EXECUTE 0x20000
00374 #define STANDARD_RIGHTS_ALL 0x1F0000
00375 #define SPECIFIC_RIGHTS_ALL 0xFFFF
00376 #define ACCESS_SYSTEM_SECURITY  0x1000000
00377 
00378 #define REG_STANDARD_FORMAT 1
00379 #define REG_LATEST_FORMAT   2
00380 #define REG_NO_COMPRESSION  4
00381 
00382 #ifndef WIN32_NO_STATUS
00383 
00384 #define STATUS_WAIT_0                    ((DWORD)0x00000000)
00385 #define STATUS_ABANDONED_WAIT_0          ((DWORD)0x00000080)
00386 #define STATUS_USER_APC                  ((DWORD)0x000000C0)
00387 #define STATUS_TIMEOUT                   ((DWORD)0x00000102)
00388 #define STATUS_PENDING                   ((DWORD)0x00000103)
00389 #define STATUS_SEGMENT_NOTIFICATION      ((DWORD)0x40000005)
00390 #define STATUS_GUARD_PAGE_VIOLATION      ((DWORD)0x80000001)
00391 #define STATUS_DATATYPE_MISALIGNMENT     ((DWORD)0x80000002)
00392 #define STATUS_BREAKPOINT                ((DWORD)0x80000003)
00393 #define STATUS_SINGLE_STEP               ((DWORD)0x80000004)
00394 #define STATUS_ACCESS_VIOLATION          ((DWORD)0xC0000005)
00395 #define STATUS_IN_PAGE_ERROR             ((DWORD)0xC0000006)
00396 #define STATUS_INVALID_HANDLE            ((DWORD)0xC0000008)
00397 #define STATUS_NO_MEMORY                 ((DWORD)0xC0000017)
00398 #define STATUS_ILLEGAL_INSTRUCTION       ((DWORD)0xC000001D)
00399 #define STATUS_NONCONTINUABLE_EXCEPTION  ((DWORD)0xC0000025)
00400 #define STATUS_INVALID_DISPOSITION       ((DWORD)0xC0000026)
00401 #define STATUS_ARRAY_BOUNDS_EXCEEDED     ((DWORD)0xC000008C)
00402 #define STATUS_FLOAT_DENORMAL_OPERAND    ((DWORD)0xC000008D)
00403 #define STATUS_FLOAT_DIVIDE_BY_ZERO      ((DWORD)0xC000008E)
00404 #define STATUS_FLOAT_INEXACT_RESULT      ((DWORD)0xC000008F)
00405 #define STATUS_FLOAT_INVALID_OPERATION   ((DWORD)0xC0000090)
00406 #define STATUS_FLOAT_OVERFLOW            ((DWORD)0xC0000091)
00407 #define STATUS_FLOAT_STACK_CHECK         ((DWORD)0xC0000092)
00408 #define STATUS_FLOAT_UNDERFLOW           ((DWORD)0xC0000093)
00409 #define STATUS_INTEGER_DIVIDE_BY_ZERO    ((DWORD)0xC0000094)
00410 #define STATUS_INTEGER_OVERFLOW          ((DWORD)0xC0000095)
00411 #define STATUS_PRIVILEGED_INSTRUCTION    ((DWORD)0xC0000096)
00412 #define STATUS_STACK_OVERFLOW            ((DWORD)0xC00000FD)
00413 #define STATUS_CONTROL_C_EXIT            ((DWORD)0xC000013A)
00414 #define STATUS_FLOAT_MULTIPLE_FAULTS     ((DWORD)0xC00002B4)
00415 #define STATUS_FLOAT_MULTIPLE_TRAPS      ((DWORD)0xC00002B5)
00416 #define STATUS_REG_NAT_CONSUMPTION       ((DWORD)0xC00002C9)
00417 #define STATUS_SXS_EARLY_DEACTIVATION    ((DWORD)0xC015000F)
00418 #define STATUS_SXS_INVALID_DEACTIVATION  ((DWORD)0xC0150010)
00419 
00420 #define DBG_EXCEPTION_HANDLED       ((DWORD)0x00010001)
00421 #define DBG_CONTINUE                ((DWORD)0x00010002)
00422 #define DBG_TERMINATE_THREAD        ((DWORD)0x40010003)
00423 #define DBG_TERMINATE_PROCESS       ((DWORD)0x40010004)
00424 #define DBG_CONTROL_C               ((DWORD)0x40010005)
00425 #define DBG_CONTROL_BREAK           ((DWORD)0x40010008)
00426 #define DBG_COMMAND_EXCEPTION       ((DWORD)0x40010009)
00427 #define DBG_EXCEPTION_NOT_HANDLED   ((DWORD)0x80010001)
00428 
00429 #endif /* WIN32_NO_STATUS */
00430 
00431 #define MAXIMUM_ALLOWED 0x2000000
00432 #define GENERIC_READ    0x80000000
00433 #define GENERIC_WRITE   0x40000000
00434 #define GENERIC_EXECUTE 0x20000000
00435 #define GENERIC_ALL 0x10000000
00436 
00437 #define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
00438 
00439 /* Also in ddk/winddk.h */
00440 #define FILE_LIST_DIRECTORY     0x00000001
00441 #define FILE_READ_DATA          0x00000001
00442 #define FILE_ADD_FILE           0x00000002
00443 #define FILE_WRITE_DATA         0x00000002
00444 #define FILE_ADD_SUBDIRECTORY       0x00000004
00445 #define FILE_APPEND_DATA        0x00000004
00446 #define FILE_CREATE_PIPE_INSTANCE   0x00000004
00447 #define FILE_READ_EA            0x00000008
00448 #define FILE_READ_PROPERTIES        0x00000008
00449 #define FILE_WRITE_EA           0x00000010
00450 #define FILE_WRITE_PROPERTIES       0x00000010
00451 #define FILE_EXECUTE            0x00000020
00452 #define FILE_TRAVERSE           0x00000020
00453 #define FILE_DELETE_CHILD       0x00000040
00454 #define FILE_READ_ATTRIBUTES        0x00000080
00455 #define FILE_WRITE_ATTRIBUTES       0x00000100
00456 
00457 #define FILE_SHARE_READ         0x00000001
00458 #define FILE_SHARE_WRITE        0x00000002
00459 #define FILE_SHARE_DELETE       0x00000004
00460 #define FILE_SHARE_VALID_FLAGS      0x00000007
00461 
00462 #define FILE_ATTRIBUTE_READONLY         0x00000001
00463 #define FILE_ATTRIBUTE_HIDDEN           0x00000002
00464 #define FILE_ATTRIBUTE_SYSTEM           0x00000004
00465 #define FILE_ATTRIBUTE_DIRECTORY        0x00000010
00466 #define FILE_ATTRIBUTE_ARCHIVE          0x00000020
00467 #define FILE_ATTRIBUTE_DEVICE           0x00000040
00468 #define FILE_ATTRIBUTE_NORMAL           0x00000080
00469 #define FILE_ATTRIBUTE_TEMPORARY        0x00000100
00470 #define FILE_ATTRIBUTE_SPARSE_FILE      0x00000200
00471 #define FILE_ATTRIBUTE_REPARSE_POINT        0x00000400
00472 #define FILE_ATTRIBUTE_COMPRESSED       0x00000800
00473 #define FILE_ATTRIBUTE_OFFLINE          0x00001000
00474 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  0x00002000
00475 #define FILE_ATTRIBUTE_ENCRYPTED        0x00004000
00476 #define FILE_ATTRIBUTE_VALID_FLAGS      0x00007fb7
00477 #define FILE_ATTRIBUTE_VALID_SET_FLAGS      0x000031a7
00478 
00479 #define FILE_COPY_STRUCTURED_STORAGE        0x00000041
00480 #define FILE_STRUCTURED_STORAGE         0x00000441
00481 
00482 #define FILE_VALID_OPTION_FLAGS         0x00ffffff
00483 #define FILE_VALID_PIPE_OPTION_FLAGS        0x00000032
00484 #define FILE_VALID_MAILSLOT_OPTION_FLAGS    0x00000032
00485 #define FILE_VALID_SET_FLAGS            0x00000036
00486 
00487 #define FILE_DIRECTORY_FILE     0x00000001
00488 #define FILE_WRITE_THROUGH      0x00000002
00489 #define FILE_SEQUENTIAL_ONLY        0x00000004
00490 #define FILE_NO_INTERMEDIATE_BUFFERING  0x00000008
00491 #define FILE_SYNCHRONOUS_IO_ALERT   0x00000010
00492 #define FILE_SYNCHRONOUS_IO_NONALERT    0x00000020
00493 #define FILE_NON_DIRECTORY_FILE     0x00000040
00494 #define FILE_CREATE_TREE_CONNECTION 0x00000080
00495 #define FILE_COMPLETE_IF_OPLOCKED   0x00000100
00496 #define FILE_NO_EA_KNOWLEDGE        0x00000200
00497 #define FILE_OPEN_REMOTE_INSTANCE   0x00000400
00498 #define FILE_RANDOM_ACCESS      0x00000800
00499 #define FILE_DELETE_ON_CLOSE        0x00001000
00500 #define FILE_OPEN_BY_FILE_ID        0x00002000
00501 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
00502 #define FILE_NO_COMPRESSION     0x00008000
00503 #define FILE_RESERVE_OPFILTER       0x00100000
00504 #define FILE_OPEN_REPARSE_POINT     0x00200000
00505 #define FILE_OPEN_NO_RECALL     0x00400000
00506 #define FILE_OPEN_FOR_FREE_SPACE_QUERY  0x00800000
00507 
00508 #define FILE_ALL_ACCESS \
00509   (STANDARD_RIGHTS_REQUIRED | \
00510    SYNCHRONIZE | \
00511    0x1FF)
00512 
00513 #define FILE_GENERIC_EXECUTE \
00514   (STANDARD_RIGHTS_EXECUTE | \
00515    FILE_READ_ATTRIBUTES | \
00516    FILE_EXECUTE | \
00517    SYNCHRONIZE)
00518 
00519 #define FILE_GENERIC_READ \
00520   (STANDARD_RIGHTS_READ | \
00521    FILE_READ_DATA | \
00522    FILE_READ_ATTRIBUTES | \
00523    FILE_READ_EA | \
00524    SYNCHRONIZE)
00525 
00526 #define FILE_GENERIC_WRITE \
00527   (STANDARD_RIGHTS_WRITE | \
00528    FILE_WRITE_DATA | \
00529    FILE_WRITE_ATTRIBUTES | \
00530    FILE_WRITE_EA | \
00531    FILE_APPEND_DATA | \
00532    SYNCHRONIZE)
00533 /* end winddk.h */
00534 /* also in ddk/ntifs.h */
00535 #define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001
00536 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
00537 #define FILE_NOTIFY_CHANGE_NAME     0x00000003
00538 #define FILE_NOTIFY_CHANGE_ATTRIBUTES   0x00000004
00539 #define FILE_NOTIFY_CHANGE_SIZE     0x00000008
00540 #define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010
00541 #define FILE_NOTIFY_CHANGE_LAST_ACCESS  0x00000020
00542 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
00543 #define FILE_NOTIFY_CHANGE_EA       0x00000080
00544 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
00545 #define FILE_NOTIFY_CHANGE_STREAM_NAME  0x00000200
00546 #define FILE_NOTIFY_CHANGE_STREAM_SIZE  0x00000400
00547 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
00548 #define FILE_NOTIFY_VALID_MASK      0x00000fff
00549 
00550 #define FILE_CASE_SENSITIVE_SEARCH      0x00000001
00551 #define FILE_CASE_PRESERVED_NAMES       0x00000002
00552 #define FILE_UNICODE_ON_DISK            0x00000004
00553 #define FILE_PERSISTENT_ACLS            0x00000008
00554 #define FILE_FILE_COMPRESSION           0x00000010
00555 #define FILE_VOLUME_QUOTAS              0x00000020
00556 #define FILE_SUPPORTS_SPARSE_FILES      0x00000040
00557 #define FILE_SUPPORTS_REPARSE_POINTS    0x00000080
00558 #define FILE_SUPPORTS_REMOTE_STORAGE    0x00000100
00559 #define FS_LFN_APIS                     0x00004000
00560 #define FILE_VOLUME_IS_COMPRESSED       0x00008000
00561 #define FILE_SUPPORTS_OBJECT_IDS        0x00010000
00562 #define FILE_SUPPORTS_ENCRYPTION        0x00020000
00563 #define FILE_NAMED_STREAMS              0x00040000
00564 
00565 #define IO_COMPLETION_QUERY_STATE       0x0001
00566 #define IO_COMPLETION_MODIFY_STATE      0x0002
00567 #define IO_COMPLETION_ALL_ACCESS        (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
00568 /* end ntifs.h */
00569 
00570 /* also in ddk/winddk.h */
00571 #define DUPLICATE_CLOSE_SOURCE      0x00000001
00572 #define DUPLICATE_SAME_ACCESS       0x00000002
00573 /* end winddk.k */
00574 
00575 #define MAILSLOT_NO_MESSAGE ((DWORD)-1)
00576 #define MAILSLOT_WAIT_FOREVER   ((DWORD)-1)
00577 #define PROCESS_TERMINATE   1
00578 #define PROCESS_CREATE_THREAD   2
00579 #define PROCESS_SET_SESSIONID   4
00580 #define PROCESS_VM_OPERATION    8
00581 #define PROCESS_VM_READ 16
00582 #define PROCESS_VM_WRITE    32
00583 #define PROCESS_CREATE_PROCESS  128
00584 #define PROCESS_SET_QUOTA   256
00585 #define PROCESS_SET_INFORMATION 512
00586 #define PROCESS_QUERY_INFORMATION   1024
00587 #define PROCESS_SUSPEND_RESUME  2048
00588 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
00589 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xFFF)
00590 #define PROCESS_DUP_HANDLE  64
00591 #define THREAD_TERMINATE    1
00592 #define THREAD_SUSPEND_RESUME   2
00593 #define THREAD_GET_CONTEXT  8
00594 #define THREAD_SET_CONTEXT  16
00595 #define THREAD_SET_INFORMATION  32
00596 #define THREAD_QUERY_INFORMATION    64
00597 #define THREAD_SET_THREAD_TOKEN 128
00598 #define THREAD_IMPERSONATE  256
00599 #define THREAD_DIRECT_IMPERSONATION 0x200
00600 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3FF)
00601 #define MUTANT_QUERY_STATE  0x0001
00602 #define MUTANT_ALL_ACCESS   (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
00603 #define TIMER_QUERY_STATE   0x0001
00604 #define TIMER_MODIFY_STATE  0x0002
00605 #define TIMER_ALL_ACCESS    (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|TIMER_QUERY_STATE|TIMER_MODIFY_STATE)
00606 #define THREAD_BASE_PRIORITY_LOWRT  15
00607 #define THREAD_BASE_PRIORITY_MAX    2
00608 #define THREAD_BASE_PRIORITY_MIN    (-2)
00609 #define THREAD_BASE_PRIORITY_IDLE   (-15)
00610 /*
00611  * To prevent gcc compiler warnings, bracket these defines when initialising
00612  * a  SID_IDENTIFIER_AUTHORITY, eg.
00613  * SID_IDENTIFIER_AUTHORITY aNullSidAuthority = {SECURITY_NULL_SID_AUTHORITY};
00614  */
00615 #define SID_MAX_SUB_AUTHORITIES     15
00616 
00617 /* security entities */
00618 #define SECURITY_NULL_RID           (0x00000000L)
00619 #define SECURITY_WORLD_RID          (0x00000000L)
00620 #define SECURITY_LOCAL_RID          (0X00000000L)
00621 
00622 #define SECURITY_NULL_SID_AUTHORITY     {0,0,0,0,0,0}
00623 
00624 /* S-1-1 */
00625 #define SECURITY_WORLD_SID_AUTHORITY        {0,0,0,0,0,1}
00626 
00627 /* S-1-2 */
00628 #define SECURITY_LOCAL_SID_AUTHORITY        {0,0,0,0,0,2}
00629 
00630 /* S-1-3 */
00631 #define SECURITY_CREATOR_SID_AUTHORITY      {0,0,0,0,0,3}
00632 #define SECURITY_CREATOR_OWNER_RID      (0x00000000L)
00633 #define SECURITY_CREATOR_GROUP_RID      (0x00000001L)
00634 #define SECURITY_CREATOR_OWNER_SERVER_RID   (0x00000002L)
00635 #define SECURITY_CREATOR_GROUP_SERVER_RID   (0x00000003L)
00636 
00637 /* S-1-4 */
00638 #define SECURITY_NON_UNIQUE_AUTHORITY       {0,0,0,0,0,4}
00639 
00640 /* S-1-5 */
00641 #define SECURITY_NT_AUTHORITY           {0,0,0,0,0,5}
00642 #define SECURITY_DIALUP_RID                     0x00000001L
00643 #define SECURITY_NETWORK_RID                    0x00000002L
00644 #define SECURITY_BATCH_RID                      0x00000003L
00645 #define SECURITY_INTERACTIVE_RID                0x00000004L
00646 #define SECURITY_LOGON_IDS_RID                  0x00000005L
00647 #define SECURITY_SERVICE_RID                    0x00000006L
00648 #define SECURITY_ANONYMOUS_LOGON_RID            0x00000007L
00649 #define SECURITY_PROXY_RID                      0x00000008L
00650 #define SECURITY_ENTERPRISE_CONTROLLERS_RID     0x00000009L
00651 #define SECURITY_SERVER_LOGON_RID               SECURITY_ENTERPRISE_CONTROLLERS_RID
00652 #define SECURITY_PRINCIPAL_SELF_RID             0x0000000AL
00653 #define SECURITY_AUTHENTICATED_USER_RID         0x0000000BL
00654 #define SECURITY_RESTRICTED_CODE_RID            0x0000000CL
00655 #define SECURITY_TERMINAL_SERVER_RID            0x0000000DL
00656 #define SECURITY_REMOTE_LOGON_RID               0x0000000EL
00657 #define SECURITY_THIS_ORGANIZATION_RID          0x0000000FL
00658 #define SECURITY_LOCAL_SYSTEM_RID               0x00000012L
00659 #define SECURITY_LOCAL_SERVICE_RID              0x00000013L
00660 #define SECURITY_NETWORK_SERVICE_RID            0x00000014L
00661 #define SECURITY_NT_NON_UNIQUE                  0x00000015L
00662 #define SECURITY_BUILTIN_DOMAIN_RID             0x00000020L
00663 
00664 #define SECURITY_PACKAGE_BASE_RID               0x00000040L
00665 #define SECURITY_PACKAGE_NTLM_RID               0x0000000AL
00666 #define SECURITY_PACKAGE_SCHANNEL_RID           0x0000000EL
00667 #define SECURITY_PACKAGE_DIGEST_RID             0x00000015L
00668 #define SECURITY_OTHER_ORGANIZATION_RID         0x000003E8L
00669 
00670 #define SECURITY_LOGON_IDS_RID_COUNT 0x3
00671 #define SID_REVISION 1
00672 
00673 #define FOREST_USER_RID_MAX                     0x000001F3L
00674 #define DOMAIN_USER_RID_ADMIN                   0x000001F4L
00675 #define DOMAIN_USER_RID_GUEST                   0x000001F5L
00676 #define DOMAIN_USER_RID_KRBTGT                  0x000001F6L
00677 #define DOMAIN_USER_RID_MAX                     0x000003E7L
00678 
00679 #define DOMAIN_GROUP_RID_ADMINS                 0x00000200L
00680 #define DOMAIN_GROUP_RID_USERS                  0x00000201L
00681 #define DOMAIN_GROUP_RID_GUESTS                 0x00000202L
00682 #define DOMAIN_GROUP_RID_COMPUTERS              0x00000203L
00683 #define DOMAIN_GROUP_RID_CONTROLLERS            0x00000204L
00684 #define DOMAIN_GROUP_RID_CERT_ADMINS            0x00000205L
00685 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS          0x00000206L
00686 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS      0x00000207L
00687 #define DOMAIN_GROUP_RID_POLICY_ADMINS          0x00000208L
00688 
00689 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
00690 #define SECURITY_MANDATORY_UNTRUSTED_RID        0x00000000L
00691 #define SECURITY_MANDATORY_LOW_RID              0x00001000L
00692 #define SECURITY_MANDATORY_MEDIUM_RID           0x00002000L
00693 #define SECURITY_MANDATORY_HIGH_RID             0x00003000L
00694 #define SECURITY_MANDATORY_SYSTEM_RID           0x00004000L
00695 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID 0x00005000L
00696 
00697 #define DOMAIN_ALIAS_RID_ADMINS                 0x00000220L
00698 #define DOMAIN_ALIAS_RID_USERS                  0x00000221L
00699 #define DOMAIN_ALIAS_RID_GUESTS                 0x00000222L
00700 #define DOMAIN_ALIAS_RID_POWER_USERS            0x00000223L
00701 
00702 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS            0x00000224L
00703 #define DOMAIN_ALIAS_RID_SYSTEM_OPS             0x00000225L
00704 #define DOMAIN_ALIAS_RID_PRINT_OPS              0x00000226L
00705 #define DOMAIN_ALIAS_RID_BACKUP_OPS             0x00000227L
00706 
00707 #define DOMAIN_ALIAS_RID_REPLICATOR             0x00000228L
00708 #define DOMAIN_ALIAS_RID_RAS_SERVERS            0x00000229L
00709 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS       0x0000022AL
00710 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS   0x0000022BL
00711 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS 0x0000022CL
00712 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS 0x0000022DL
00713 
00714 #define DOMAIN_ALIAS_RID_MONITORING_USERS       0x0000022EL
00715 #define DOMAIN_ALIAS_RID_LOGGING_USERS          0x0000022FL
00716 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS    0x00000230L
00717 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS     0x00000231L
00718 #define DOMAIN_ALIAS_RID_DCOM_USERS             0x00000232L
00719 
00720 #define SECURITY_MANDATORY_LABEL_AUTHORITY  {0,0,0,0,0,16}
00721 
00722 typedef enum {
00723   WinNullSid = 0,
00724   WinWorldSid = 1,
00725   WinLocalSid = 2,
00726   WinCreatorOwnerSid = 3,
00727   WinCreatorGroupSid = 4,
00728   WinCreatorOwnerServerSid = 5,
00729   WinCreatorGroupServerSid = 6,
00730   WinNtAuthoritySid = 7,
00731   WinDialupSid = 8,
00732   WinNetworkSid = 9,
00733   WinBatchSid = 10,
00734   WinInteractiveSid = 11,
00735   WinServiceSid = 12,
00736   WinAnonymousSid = 13,
00737   WinProxySid = 14,
00738   WinEnterpriseControllersSid = 15,
00739   WinSelfSid = 16,
00740   WinAuthenticatedUserSid = 17,
00741   WinRestrictedCodeSid = 18,
00742   WinTerminalServerSid = 19,
00743   WinRemoteLogonIdSid = 20,
00744   WinLogonIdsSid = 21,
00745   WinLocalSystemSid = 22,
00746   WinLocalServiceSid = 23,
00747   WinNetworkServiceSid = 24,
00748   WinBuiltinDomainSid = 25,
00749   WinBuiltinAdministratorsSid = 26,
00750   WinBuiltinUsersSid = 27,
00751   WinBuiltinGuestsSid = 28,
00752   WinBuiltinPowerUsersSid = 29,
00753   WinBuiltinAccountOperatorsSid = 30,
00754   WinBuiltinSystemOperatorsSid = 31,
00755   WinBuiltinPrintOperatorsSid = 32,
00756   WinBuiltinBackupOperatorsSid = 33,
00757   WinBuiltinReplicatorSid = 34,
00758   WinBuiltinPreWindows2000CompatibleAccessSid = 35,
00759   WinBuiltinRemoteDesktopUsersSid = 36,
00760   WinBuiltinNetworkConfigurationOperatorsSid = 37,
00761   WinAccountAdministratorSid = 38,
00762   WinAccountGuestSid = 39,
00763   WinAccountKrbtgtSid = 40,
00764   WinAccountDomainAdminsSid = 41,
00765   WinAccountDomainUsersSid = 42,
00766   WinAccountDomainGuestsSid = 43,
00767   WinAccountComputersSid = 44,
00768   WinAccountControllersSid = 45,
00769   WinAccountCertAdminsSid = 46,
00770   WinAccountSchemaAdminsSid = 47,
00771   WinAccountEnterpriseAdminsSid = 48,
00772   WinAccountPolicyAdminsSid = 49,
00773   WinAccountRasAndIasServersSid = 50,
00774   WinNTLMAuthenticationSid = 51,
00775   WinDigestAuthenticationSid = 52,
00776   WinSChannelAuthenticationSid = 53,
00777   WinThisOrganizationSid = 54,
00778   WinOtherOrganizationSid = 55,
00779   WinBuiltinIncomingForestTrustBuildersSid = 56,
00780   WinBuiltinPerfMonitoringUsersSid = 57,
00781   WinBuiltinPerfLoggingUsersSid = 58,
00782   WinBuiltinAuthorizationAccessSid = 59,
00783   WinBuiltinTerminalServerLicenseServersSid = 60,
00784   WinBuiltinDCOMUsersSid = 61,
00785   WinBuiltinIUsersSid = 62,
00786   WinIUserSid = 63,
00787   WinBuiltinCryptoOperatorsSid = 64,
00788   WinUntrustedLabelSid = 65,
00789   WinLowLabelSid = 66,
00790   WinMediumLabelSid = 67,
00791   WinHighLabelSid = 68,
00792   WinSystemLabelSid = 69,
00793   WinWriteRestrictedCodeSid = 70,
00794   WinCreatorOwnerRightsSid = 71,
00795   WinCacheablePrincipalsGroupSid = 72,
00796   WinNonCacheablePrincipalsGroupSid = 73,
00797   WinEnterpriseReadonlyControllersSid = 74,
00798   WinAccountReadonlyControllersSid = 75,
00799   WinBuiltinEventLogReadersGroup = 76,
00800   WinNewEnterpriseReadonlyControllersSid = 77,
00801   WinBuiltinCertSvcDComAccessGroup = 78,
00802   WinMediumPlusLabelSid = 79,
00803   WinLocalLogonSid = 80,
00804   WinConsoleLogonSid = 81,
00805   WinThisOrganizationCertificateSid = 82,
00806 } WELL_KNOWN_SID_TYPE;
00807 
00808 #define SE_CREATE_TOKEN_NAME    TEXT("SeCreateTokenPrivilege")
00809 #define SE_ASSIGNPRIMARYTOKEN_NAME  TEXT("SeAssignPrimaryTokenPrivilege")
00810 #define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
00811 #define SE_INCREASE_QUOTA_NAME  TEXT("SeIncreaseQuotaPrivilege")
00812 #define SE_UNSOLICITED_INPUT_NAME   TEXT("SeUnsolicitedInputPrivilege")
00813 #define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
00814 #define SE_TCB_NAME TEXT("SeTcbPrivilege")
00815 #define SE_SECURITY_NAME    TEXT("SeSecurityPrivilege")
00816 #define SE_TAKE_OWNERSHIP_NAME  TEXT("SeTakeOwnershipPrivilege")
00817 #define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
00818 #define SE_SYSTEM_PROFILE_NAME  TEXT("SeSystemProfilePrivilege")
00819 #define SE_SYSTEMTIME_NAME  TEXT("SeSystemtimePrivilege")
00820 #define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
00821 #define SE_INC_BASE_PRIORITY_NAME   TEXT("SeIncreaseBasePriorityPrivilege")
00822 #define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
00823 #define SE_CREATE_PERMANENT_NAME    TEXT("SeCreatePermanentPrivilege")
00824 #define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
00825 #define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
00826 #define SE_SHUTDOWN_NAME    TEXT("SeShutdownPrivilege")
00827 #define SE_DEBUG_NAME   TEXT("SeDebugPrivilege")
00828 #define SE_AUDIT_NAME   TEXT("SeAuditPrivilege")
00829 #define SE_SYSTEM_ENVIRONMENT_NAME  TEXT("SeSystemEnvironmentPrivilege")
00830 #define SE_CHANGE_NOTIFY_NAME   TEXT("SeChangeNotifyPrivilege")
00831 #define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
00832 #define SE_UNDOCK_NAME  TEXT("SeUndockPrivilege")
00833 #define SE_SYNC_AGENT_NAME  TEXT("SeSyncAgentPrivilege")
00834 #define SE_ENABLE_DELEGATION_NAME   TEXT("SeEnableDelegationPrivilege")
00835 #define SE_MANAGE_VOLUME_NAME   TEXT("SeManageVolumePrivilege")
00836 #define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
00837 #define SE_CREATE_GLOBAL_NAME   TEXT("SeCreateGlobalPrivilege")
00838 #define SE_GROUP_MANDATORY 1
00839 #define SE_GROUP_ENABLED_BY_DEFAULT 2
00840 #define SE_GROUP_ENABLED 4
00841 #define SE_GROUP_OWNER 8
00842 #define SE_GROUP_USE_FOR_DENY_ONLY 16
00843 #define SE_GROUP_LOGON_ID 3221225472U
00844 #define SE_GROUP_RESOURCE 536870912
00845 #define LANG_NEUTRAL   0x00
00846 #define LANG_INVARIANT   0x7f
00847 #define LANG_AFRIKAANS   0x36
00848 #define LANG_ALBANIAN   0x1c
00849 #define LANG_ALSATIAN   0x84
00850 #define LANG_AMHARIC   0x5e
00851 #define LANG_ARABIC   0x01
00852 #define LANG_ARMENIAN   0x2b
00853 #define LANG_ASSAMESE   0x4d
00854 #define LANG_AZERI   0x2c
00855 #define LANG_BASHKIR   0x6d
00856 #define LANG_BASQUE   0x2d
00857 #define LANG_BELARUSIAN   0x23
00858 #define LANG_BENGALI   0x45
00859 #define LANG_BOSNIAN   0x1a
00860 #define LANG_BRETON   0x7e
00861 #define LANG_BULGARIAN   0x02
00862 #define LANG_CATALAN   0x03
00863 #define LANG_CHINESE   0x04
00864 #define LANG_CHINESE_SIMPLIFIED   0x04
00865 #define LANG_CORSICAN   0x83
00866 #define LANG_CROATIAN   0x1a
00867 #define LANG_CROATIAN   0x1a
00868 #define LANG_CZECH   0x05
00869 #define LANG_DANISH   0x06
00870 #define LANG_DARI   0x8c
00871 #define LANG_DIVEHI   0x65
00872 #define LANG_DUTCH   0x13
00873 #define LANG_ENGLISH   0x09
00874 #define LANG_ESTONIAN   0x25
00875 #define LANG_FAEROESE   0x38
00876 #define LANG_FILIPINO   0x64
00877 #define LANG_FINNISH   0x0b
00878 #define LANG_FRENCH   0x0c
00879 #define LANG_FRISIAN   0x62
00880 #define LANG_GALICIAN   0x56
00881 #define LANG_GEORGIAN   0x37
00882 #define LANG_GERMAN   0x07
00883 #define LANG_GREEK   0x08
00884 #define LANG_GREENLANDIC   0x6f
00885 #define LANG_GUJARATI   0x47
00886 #define LANG_HAUSA   0x68
00887 #define LANG_HEBREW   0x0d
00888 #define LANG_HINDI   0x39
00889 #define LANG_HUNGARIAN   0x0e
00890 #define LANG_ICELANDIC   0x0f
00891 #define LANG_IGBO   0x70
00892 #define LANG_INDONESIAN   0x21
00893 #define LANG_INUKTITUT   0x5d
00894 #define LANG_IRISH   0x3c
00895 #define LANG_ITALIAN   0x10
00896 #define LANG_JAPANESE   0x11
00897 #define LANG_KANNADA   0x4b
00898 #define LANG_KASHMIRI   0x60
00899 #define LANG_KAZAK   0x3f
00900 #define LANG_KHMER   0x53
00901 #define LANG_KICHE   0x86
00902 #define LANG_KINYARWANDA   0x87
00903 #define LANG_KONKANI   0x57
00904 #define LANG_KOREAN   0x12
00905 #define LANG_KYRGYZ   0x40
00906 #define LANG_LAO   0x54
00907 #define LANG_LATVIAN   0x26
00908 #define LANG_LITHUANIAN   0x27
00909 #define LANG_LOWER_SORBIAN   0x2e
00910 #define LANG_LUXEMBOURGISH   0x6e
00911 #define LANG_MACEDONIAN   0x2f
00912 #define LANG_MALAY   0x3e
00913 #define LANG_MALAYALAM   0x4c
00914 #define LANG_MALTESE   0x3a
00915 #define LANG_MANIPURI   0x58
00916 #define LANG_MAORI   0x81
00917 #define LANG_MAPUDUNGUN   0x7a
00918 #define LANG_MARATHI   0x4e
00919 #define LANG_MOHAWK   0x7c
00920 #define LANG_MONGOLIAN   0x50
00921 #define LANG_NEPALI   0x61
00922 #define LANG_NORWEGIAN   0x14
00923 #define LANG_OCCITAN   0x82
00924 #define LANG_ORIYA   0x48
00925 #define LANG_PASHTO   0x63
00926 #define LANG_FARSI   0x29
00927 #define LANG_PERSIAN 0x29
00928 #define LANG_POLISH   0x15
00929 #define LANG_PORTUGUESE   0x16
00930 #define LANG_PUNJABI   0x46
00931 #define LANG_QUECHUA   0x6b
00932 #define LANG_ROMANIAN   0x18
00933 #define LANG_ROMANSH   0x17
00934 #define LANG_RUSSIAN   0x19
00935 #define LANG_SAMI   0x3b
00936 #define LANG_SANSKRIT   0x4f
00937 #define LANG_SERBIAN   0x1a
00938 #define LANG_SOTHO   0x6c
00939 #define LANG_TSWANA   0x32
00940 #define LANG_SINDHI   0x59
00941 #define LANG_SINHALESE   0x5b
00942 #define LANG_SLOVAK   0x1b
00943 #define LANG_SLOVENIAN   0x24
00944 #define LANG_SPANISH   0x0a
00945 #define LANG_SWAHILI   0x41
00946 #define LANG_SWEDISH   0x1d
00947 #define LANG_SYRIAC   0x5a
00948 #define LANG_TAJIK   0x28
00949 #define LANG_TAMAZIGHT   0x5f
00950 #define LANG_TAMIL   0x49
00951 #define LANG_TATAR   0x44
00952 #define LANG_TELUGU   0x4a
00953 #define LANG_THAI   0x1e
00954 #define LANG_TIBETAN   0x51
00955 #define LANG_TIGRIGNA   0x73
00956 #define LANG_TURKISH   0x1f
00957 #define LANG_TURKMEN   0x42
00958 #define LANG_UIGHUR   0x80
00959 #define LANG_UKRAINIAN   0x22
00960 #define LANG_UPPER_SORBIAN   0x2e
00961 #define LANG_URDU   0x20
00962 #define LANG_UZBEK   0x43
00963 #define LANG_VIETNAMESE   0x2a
00964 #define LANG_WELSH   0x52
00965 #define LANG_WOLOF   0x88
00966 #define LANG_XHOSA   0x34
00967 #define LANG_YAKUT   0x85
00968 #define LANG_YI   0x78
00969 #define LANG_YORUBA   0x6a
00970 #define LANG_ZULU   0x35
00971 
00972 /* FIXME: non-standard */
00973 #define LANG_ESPERANTO      0x8f
00974 #define LANG_WALON          0x90
00975 #define LANG_CORNISH        0x91
00976 
00977 /* FIXME: not present in the official headers */
00978 #define LANG_GAELIC         0x94
00979 #define LANG_SAAMI          0x3b
00980 #define LANG_SUTU           0x30
00981 #define LANG_TSONGA         0x31
00982 #define LANG_VENDA          0x33
00983 
00984 #define SUBLANG_CUSTOM_UNSPECIFIED   0x04
00985 #define SUBLANG_CUSTOM_DEFAULT   0x03
00986 #define SUBLANG_UI_CUSTOM_DEFAULT   0x05
00987 #define SUBLANG_NEUTRAL   0x00
00988 #define SUBLANG_SYS_DEFAULT   0x02
00989 #define SUBLANG_DEFAULT   0x01
00990 #define SUBLANG_AFRIKAANS_SOUTH_AFRICA   0x01
00991 #define SUBLANG_ALBANIAN_ALBANIA   0x01
00992 #define SUBLANG_ALSATIAN_FRANCE   0x01
00993 #define SUBLANG_AMHARIC_ETHIOPIA   0x01
00994 #define SUBLANG_ARABIC_ALGERIA   0x05
00995 #define SUBLANG_ARABIC_BAHRAIN   0x0f
00996 #define SUBLANG_ARABIC_EGYPT   0x03
00997 #define SUBLANG_ARABIC_IRAQ   0x02
00998 #define SUBLANG_ARABIC_JORDAN   0x0b
00999 #define SUBLANG_ARABIC_KUWAIT   0x0d
01000 #define SUBLANG_ARABIC_LEBANON   0x0c
01001 #define SUBLANG_ARABIC_LIBYA   0x04
01002 #define SUBLANG_ARABIC_MOROCCO   0x06
01003 #define SUBLANG_ARABIC_OMAN   0x08
01004 #define SUBLANG_ARABIC_QATAR   0x10
01005 #define SUBLANG_ARABIC_SAUDI_ARABIA   0x01
01006 #define SUBLANG_ARABIC_SYRIA   0x0a
01007 #define SUBLANG_ARABIC_TUNISIA   0x07
01008 #define SUBLANG_ARABIC_UAE   0x0e
01009 #define SUBLANG_ARABIC_YEMEN   0x09
01010 #define SUBLANG_ARMENIAN_ARMENIA   0x01
01011 #define SUBLANG_ASSAMESE_INDIA   0x01
01012 #define SUBLANG_AZERI_CYRILLIC   0x02
01013 #define SUBLANG_AZERI_LATIN   0x01
01014 #define SUBLANG_BASHKIR_RUSSIA   0x01
01015 #define SUBLANG_BASQUE_BASQUE   0x01
01016 #define SUBLANG_BELARUSIAN_BELARUS   0x01
01017 #define SUBLANG_BENGALI_BANGLADESH   0x02
01018 #define SUBLANG_BENGALI_INDIA   0x01
01019 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC   0x08
01020 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN   0x05
01021 #define SUBLANG_BRETON_FRANCE   0x01
01022 #define SUBLANG_BULGARIAN_BULGARIA   0x01
01023 #define SUBLANG_CATALAN_CATALAN   0x01
01024 #define SUBLANG_CHINESE_HONGKONG   0x03
01025 #define SUBLANG_CHINESE_MACAU   0x05
01026 #define SUBLANG_CHINESE_SINGAPORE   0x04
01027 #define SUBLANG_CHINESE_SIMPLIFIED   0x02
01028 #define SUBLANG_CHINESE_TRADITIONAL   0x01
01029 #define SUBLANG_CORSICAN_FRANCE   0x01
01030 #define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN   0x04
01031 #define SUBLANG_CROATIAN_CROATIA   0x01
01032 #define SUBLANG_CZECH_CZECH_REPUBLIC   0x01
01033 #define SUBLANG_DANISH_DENMARK   0x01
01034 #define SUBLANG_DARI_AFGHANISTAN   0x01
01035 #define SUBLANG_DIVEHI_MALDIVES   0x01
01036 #define SUBLANG_DUTCH_BELGIAN   0x02
01037 #define SUBLANG_DUTCH   0x01
01038 #define SUBLANG_ENGLISH_AUS   0x03
01039 #define SUBLANG_ENGLISH_BELIZE   0x0a
01040 #define SUBLANG_ENGLISH_CAN   0x04
01041 #define SUBLANG_ENGLISH_CARIBBEAN   0x09
01042 #define SUBLANG_ENGLISH_INDIA   0x10
01043 #define SUBLANG_ENGLISH_EIRE   0x06
01044 #define SUBLANG_ENGLISH_IRELAND   0x06
01045 #define SUBLANG_ENGLISH_JAMAICA   0x08
01046 #define SUBLANG_ENGLISH_MALAYSIA   0x11
01047 #define SUBLANG_ENGLISH_NZ   0x05
01048 #define SUBLANG_ENGLISH_PHILIPPINES   0x0d
01049 #define SUBLANG_ENGLISH_SINGAPORE   0x12
01050 #define SUBLANG_ENGLISH_SOUTH_AFRICA   0x07
01051 #define SUBLANG_ENGLISH_TRINIDAD   0x0b
01052 #define SUBLANG_ENGLISH_UK   0x02
01053 #define SUBLANG_ENGLISH_US   0x01
01054 #define SUBLANG_ENGLISH_ZIMBABWE   0x0c
01055 #define SUBLANG_ESTONIAN_ESTONIA   0x01
01056 #define SUBLANG_FAEROESE_FAROE_ISLANDS   0x01
01057 #define SUBLANG_FILIPINO_PHILIPPINES   0x01
01058 #define SUBLANG_FINNISH_FINLAND   0x01
01059 #define SUBLANG_FRENCH_BELGIAN   0x02
01060 #define SUBLANG_FRENCH_CANADIAN   0x03
01061 #define SUBLANG_FRENCH   0x01
01062 #define SUBLANG_FRENCH_LUXEMBOURG   0x05
01063 #define SUBLANG_FRENCH_MONACO   0x06
01064 #define SUBLANG_FRENCH_SWISS   0x04
01065 #define SUBLANG_FRISIAN_NETHERLANDS   0x01
01066 #define SUBLANG_GALICIAN_GALICIAN   0x01
01067 #define SUBLANG_GEORGIAN_GEORGIA   0x01
01068 #define SUBLANG_GERMAN_AUSTRIAN   0x03
01069 #define SUBLANG_GERMAN   0x01
01070 #define SUBLANG_GERMAN_LIECHTENSTEIN   0x05
01071 #define SUBLANG_GERMAN_LUXEMBOURG   0x04
01072 #define SUBLANG_GERMAN_SWISS   0x02
01073 #define SUBLANG_GREEK_GREECE   0x01
01074 #define SUBLANG_GREENLANDIC_GREENLAND   0x01
01075 #define SUBLANG_GUJARATI_INDIA   0x01
01076 #define SUBLANG_HAUSA_NIGERIA_LATIN   0x01
01077 #define SUBLANG_HAUSA_NIGERIA   0x01
01078 #define SUBLANG_HEBREW_ISRAEL   0x01
01079 #define SUBLANG_HINDI_INDIA   0x01
01080 #define SUBLANG_HUNGARIAN_HUNGARY   0x01
01081 #define SUBLANG_ICELANDIC_ICELAND   0x01
01082 #define SUBLANG_IGBO_NIGERIA   0x01
01083 #define SUBLANG_INDONESIAN_INDONESIA   0x01
01084 #define SUBLANG_INUKTITUT_CANADA_LATIN   0x02
01085 #define SUBLANG_INUKTITUT_CANADA   0x01
01086 #define SUBLANG_IRISH_IRELAND   0x02
01087 #define SUBLANG_ITALIAN   0x01
01088 #define SUBLANG_ITALIAN_SWISS   0x02
01089 #define SUBLANG_JAPANESE_JAPAN   0x01
01090 #define SUBLANG_KANNADA_INDIA   0x01
01091 #define SUBLANG_KASHMIRI_INDIA   0x02
01092 #define SUBLANG_KASHMIRI_SASIA   0x02
01093 #define SUBLANG_KAZAK_KAZAKHSTAN   0x01
01094 #define SUBLANG_KHMER_CAMBODIA   0x01
01095 #define SUBLANG_KICHE_GUATEMALA   0x01
01096 #define SUBLANG_KINYARWANDA_RWANDA   0x01
01097 #define SUBLANG_KONKANI_INDIA   0x01
01098 #define SUBLANG_KOREAN   0x01
01099 #define SUBLANG_KYRGYZ_KYRGYZSTAN   0x01
01100 #define SUBLANG_LAO_LAO   0x01
01101 #define SUBLANG_LAO_LAO_PDR  0x01
01102 #define SUBLANG_LATVIAN_LATVIA   0x01
01103 #define SUBLANG_LITHUANIAN_LITHUANIA   0x01
01104 #define SUBLANG_LITHUANIAN   0x01
01105 #define SUBLANG_LOWER_SORBIAN_GERMANY   0x02
01106 #define SUBLANG_LUXEMBOURGISH_LUXEMBOURG   0x01
01107 #define SUBLANG_MACEDONIAN_MACEDONIA   0x01
01108 #define SUBLANG_MALAY_BRUNEI_DARUSSALAM   0x02
01109 #define SUBLANG_MALAY_MALAYSIA   0x01
01110 #define SUBLANG_MALAYALAM_INDIA   0x01
01111 #define SUBLANG_MALTESE_MALTA   0x01
01112 #define SUBLANG_MAORI_NEW_ZEALAND   0x01
01113 #define SUBLANG_MAPUDUNGUN_CHILE   0x01
01114 #define SUBLANG_MARATHI_INDIA   0x01
01115 #define SUBLANG_MOHAWK_MOHAWK   0x01
01116 #define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA   0x01
01117 #define SUBLANG_MONGOLIAN_PRC   0x02
01118 #define SUBLANG_NEPALI_NEPAL   0x01
01119 #define SUBLANG_NEPALI_INDIA   0x02
01120 #define SUBLANG_NORWEGIAN_BOKMAL   0x01
01121 #define SUBLANG_NORWEGIAN_NYNORSK   0x02
01122 #define SUBLANG_OCCITAN_FRANCE   0x01
01123 #define SUBLANG_ORIYA_INDIA   0x01
01124 #define SUBLANG_PASHTO_AFGHANISTAN   0x01
01125 #define SUBLANG_PERSIAN_IRAN   0x01
01126 #define SUBLANG_POLISH_POLAND   0x01
01127 #define SUBLANG_PORTUGUESE_BRAZILIAN   0x01
01128 #define SUBLANG_PORTUGUESE   0x02
01129 #define SUBLANG_PORTUGUESE_PORTUGAL   0x02
01130 #define SUBLANG_PUNJABI_INDIA   0x01
01131 #define SUBLANG_QUECHUA_BOLIVIA   0x01
01132 #define SUBLANG_QUECHUA_ECUADOR   0x02
01133 #define SUBLANG_QUECHUA_PERU   0x03
01134 #define SUBLANG_ROMANIAN_ROMANIA   0x01
01135 #define SUBLANG_ROMANSH_SWITZERLAND   0x01
01136 #define SUBLANG_RUSSIAN_RUSSIA   0x01
01137 #define SUBLANG_SAMI_INARI_FINLAND   0x09
01138 #define SUBLANG_SAMI_LULE_NORWAY   0x04
01139 #define SUBLANG_SAMI_LULE_SWEDEN   0x05
01140 #define SUBLANG_SAMI_NORTHERN_FINLAND   0x03
01141 #define SUBLANG_SAMI_NORTHERN_NORWAY   0x01
01142 #define SUBLANG_SAMI_NORTHERN_SWEDEN   0x02
01143 #define SUBLANG_SAMI_SKOLT_FINLAND   0x08
01144 #define SUBLANG_SAMI_SOUTHERN_NORWAY   0x06
01145 #define SUBLANG_SAMI_SOUTHERN_SWEDEN   0x07
01146 #define SUBLANG_SANSKRIT_INDIA   0x01
01147 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC   0x07
01148 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN   0x06
01149 #define SUBLANG_SERBIAN_CROATIA   0x01
01150 #define SUBLANG_SERBIAN_CYRILLIC   0x03
01151 #define SUBLANG_SERBIAN_LATIN   0x02
01152 #define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA   0x01
01153 #define SUBLANG_TSWANA_SOUTH_AFRICA   0x01
01154 #define SUBLANG_SINDHI_AFGHANISTAN   0x02
01155 #define SUBLANG_SINDHI_PAKISTAN   0x01
01156 #define SUBLANG_SINHALESE_SRI_LANKA   0x01
01157 #define SUBLANG_SLOVAK_SLOVAKIA   0x01
01158 #define SUBLANG_SLOVENIAN_SLOVENIA   0x01
01159 #define SUBLANG_SPANISH_ARGENTINA   0x0b
01160 #define SUBLANG_SPANISH_BOLIVIA   0x10
01161 #define SUBLANG_SPANISH_CHILE   0x0d
01162 #define SUBLANG_SPANISH_COLOMBIA   0x09
01163 #define SUBLANG_SPANISH_COSTA_RICA   0x05
01164 #define SUBLANG_SPANISH_DOMINICAN_REPUBLIC   0x07
01165 #define SUBLANG_SPANISH_ECUADOR   0x0c
01166 #define SUBLANG_SPANISH_EL_SALVADOR   0x11
01167 #define SUBLANG_SPANISH_GUATEMALA   0x04
01168 #define SUBLANG_SPANISH_HONDURAS   0x12
01169 #define SUBLANG_SPANISH_MEXICAN   0x02
01170 #define SUBLANG_SPANISH_MODERN   0x03
01171 #define SUBLANG_SPANISH_NICARAGUA   0x13
01172 #define SUBLANG_SPANISH_PANAMA   0x06
01173 #define SUBLANG_SPANISH_PARAGUAY   0x0f
01174 #define SUBLANG_SPANISH_PERU   0x0a
01175 #define SUBLANG_SPANISH_PUERTO_RICO   0x14
01176 #define SUBLANG_SPANISH   0x01
01177 #define SUBLANG_SPANISH_US   0x15
01178 #define SUBLANG_SPANISH_URUGUAY   0x0e
01179 #define SUBLANG_SPANISH_VENEZUELA   0x08
01180 #define SUBLANG_SWAHILI   0x01
01181 #define SUBLANG_SWAHILI_KENYA   0x01
01182 #define SUBLANG_SWEDISH_FINLAND   0x02
01183 #define SUBLANG_SWEDISH   0x01
01184 #define SUBLANG_SWEDISH_SWEDEN   0x01
01185 #define SUBLANG_SYRIAC   0x01
01186 #define SUBLANG_TAJIK_TAJIKISTAN   0x01
01187 #define SUBLANG_TAMAZIGHT_ALGERIA_LATIN   0x02
01188 #define SUBLANG_TAMIL_INDIA   0x01
01189 #define SUBLANG_TATAR_RUSSIA   0x01
01190 #define SUBLANG_TELUGU_INDIA   0x01
01191 #define SUBLANG_THAI_THAILAND   0x01
01192 #define SUBLANG_TIBETAN_PRC   0x01
01193 #define SUBLANG_TIGRIGNA_ERITREA   0x02
01194 #define SUBLANG_TURKISH_TURKEY   0x01
01195 #define SUBLANG_TURKMEN_TURKMENISTAN   0x01
01196 #define SUBLANG_UIGHUR_PRC   0x01
01197 #define SUBLANG_UKRAINIAN_UKRAINE   0x01
01198 #define SUBLANG_UPPER_SORBIAN_GERMANY   0x01
01199 #define SUBLANG_URDU_INDIA   0x02
01200 #define SUBLANG_URDU_PAKISTAN   0x01
01201 #define SUBLANG_UZBEK_CYRILLIC   0x02
01202 #define SUBLANG_UZBEK_LATIN   0x01
01203 #define SUBLANG_VIETNAMESE_VIETNAM   0x01
01204 #define SUBLANG_WELSH_UNITED_KINGDOM   0x01
01205 #define SUBLANG_WOLOF_SENEGAL   0x01
01206 #define SUBLANG_XHOSA_SOUTH_AFRICA   0x01
01207 #define SUBLANG_YAKUT_RUSSIA   0x01
01208 #define SUBLANG_YI_PRC   0x01
01209 #define SUBLANG_YORUBA_NIGERIA   0x01
01210 #define SUBLANG_ZULU_SOUTH_AFRICA   0x01
01211 #define NLS_VALID_LOCALE_MASK   1048575
01212 #define SORT_DEFAULT    0
01213 #define SORT_JAPANESE_XJIS  0
01214 #define SORT_JAPANESE_UNICODE   1
01215 #define SORT_CHINESE_BIG5   0
01216 #define SORT_CHINESE_PRCP   0
01217 #define SORT_CHINESE_UNICODE    1
01218 #define SORT_CHINESE_PRC    2
01219 #define SORT_CHINESE_BOPOMOFO   3
01220 #define SORT_KOREAN_KSC 0
01221 #define SORT_KOREAN_UNICODE 1
01222 #define SORT_GERMAN_PHONE_BOOK  1
01223 #define SORT_HUNGARIAN_DEFAULT  0
01224 #define SORT_HUNGARIAN_TECHNICAL    1
01225 #define SORT_GEORGIAN_TRADITIONAL   0
01226 #define SORT_GEORGIAN_MODERN    1
01227 #define MAKELANGID(p,s) ((((WORD)(s))<<10)|(WORD)(p))
01228 #define MAKELCID(l,s) ((DWORD)((((DWORD)((WORD)(s)))<<16)|((DWORD)((WORD)(l)))))
01229 #define PRIMARYLANGID(l)    ((WORD)(l)&0x3ff)
01230 #define SORTIDFROMLCID(l)   ((WORD)((((DWORD)(l))&NLS_VALID_LOCALE_MASK)>>16))
01231 #define SORTVERSIONFROMLCID(l) ((WORD)((((DWORD)(l))>>20)&0xf))
01232 #define SUBLANGID(l)    ((WORD)(l)>>10)
01233 #define LANGIDFROMLCID(l)   ((WORD)(l))
01234 #define LANG_SYSTEM_DEFAULT MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT)
01235 #define LANG_USER_DEFAULT   MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT)
01236 #define LOCALE_NEUTRAL  MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT)
01237 #define LOCALE_INVARIANT MAKELCID(MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT)
01238 #define LOCALE_NAME_MAX_LENGTH 85
01239 #define ACL_REVISION    2
01240 #define ACL_REVISION_DS 4
01241 #define ACL_REVISION1 1
01242 #define ACL_REVISION2 2
01243 #define ACL_REVISION3 3
01244 #define ACL_REVISION4 4
01245 #define MIN_ACL_REVISION 2
01246 #define MAX_ACL_REVISION 4
01247 #define MINCHAR 0x80
01248 #define MAXCHAR 0x7f
01249 #define MINSHORT    0x8000
01250 #define MAXSHORT    0x7fff
01251 #define MINLONG 0x80000000
01252 #define MAXLONG 0x7fffffff
01253 #define MAXBYTE 0xff
01254 #define MAXWORD 0xffff
01255 #define MAXDWORD    0xffffffff
01256 #define PROCESSOR_INTEL_386 386
01257 #define PROCESSOR_INTEL_486 486
01258 #define PROCESSOR_INTEL_PENTIUM 586
01259 #define PROCESSOR_MIPS_R4000 4000
01260 #define PROCESSOR_ALPHA_21064 21064
01261 #define PROCESSOR_INTEL_IA64 2200
01262 #define PROCESSOR_PPC_601 601
01263 #define PROCESSOR_PPC_603 603
01264 #define PROCESSOR_PPC_604 604
01265 #define PROCESSOR_PPC_620 620
01266 #define PROCESSOR_INTEL_860 860
01267 #define PROCESSOR_AMD_X8664 8664
01268 #define PROCESSOR_MIPS_R2000 2000
01269 #define PROCESSOR_MIPS_R3000 3000
01270 #define PROCESSOR_HITACHI_SH3 10003
01271 #define PROCESSOR_HITACHI_SH3E 10004
01272 #define PROCESSOR_HITACHI_SH4 10005
01273 #define PROCESSOR_MOTOROLA_821 821
01274 #define PROCESSOR_SHx_SH3 103
01275 #define PROCESSOR_SHx_SH4 104
01276 #define PROCESSOR_STRONGARM 2577
01277 #define PROCESSOR_ARM720 1824
01278 #define PROCESSOR_ARM820 2080
01279 #define PROCESSOR_ARM920 2336
01280 #define PROCESSOR_ARM_7TDMI 70001
01281 #define PROCESSOR_ARCHITECTURE_INTEL 0
01282 #define PROCESSOR_ARCHITECTURE_MIPS 1
01283 #define PROCESSOR_ARCHITECTURE_ALPHA 2
01284 #define PROCESSOR_ARCHITECTURE_PPC 3
01285 #define PROCESSOR_ARCHITECTURE_SHX 4
01286 #define PROCESSOR_ARCHITECTURE_ARM 5
01287 #define PROCESSOR_ARCHITECTURE_IA64 6
01288 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
01289 #define PROCESSOR_ARCHITECTURE_MSIL 8
01290 #define PROCESSOR_ARCHITECTURE_AMD64 9
01291 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
01292 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
01293 #define PF_FLOATING_POINT_EMULATED 1
01294 #define PF_COMPARE_EXCHANGE_DOUBLE 2
01295 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
01296 #define PF_PPC_MOVEMEM_64BIT_OK 4
01297 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
01298 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
01299 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
01300 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
01301 #define PF_PAE_ENABLED 9
01302 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
01303 /* also in ddk/ntifs.h */
01304 #define FILE_ACTION_ADDED                   0x00000001
01305 #define FILE_ACTION_REMOVED                 0x00000002
01306 #define FILE_ACTION_MODIFIED                0x00000003
01307 #define FILE_ACTION_RENAMED_OLD_NAME        0x00000004
01308 #define FILE_ACTION_RENAMED_NEW_NAME        0x00000005
01309 #define FILE_ACTION_ADDED_STREAM            0x00000006
01310 #define FILE_ACTION_REMOVED_STREAM          0x00000007
01311 #define FILE_ACTION_MODIFIED_STREAM         0x00000008
01312 #define FILE_ACTION_REMOVED_BY_DELETE       0x00000009
01313 #define FILE_ACTION_ID_NOT_TUNNELLED        0x0000000A
01314 #define FILE_ACTION_TUNNELLED_ID_COLLISION  0x0000000B
01315 /* end ntifs.h */
01316 #define HEAP_NO_SERIALIZE 1
01317 #define HEAP_GROWABLE 2
01318 #define HEAP_GENERATE_EXCEPTIONS 4
01319 #define HEAP_ZERO_MEMORY 8
01320 #define HEAP_REALLOC_IN_PLACE_ONLY 16
01321 #define HEAP_TAIL_CHECKING_ENABLED 32
01322 #define HEAP_FREE_CHECKING_ENABLED 64
01323 #define HEAP_DISABLE_COALESCE_ON_FREE 128
01324 #define HEAP_CREATE_ALIGN_16 0x10000
01325 #define HEAP_CREATE_ENABLE_TRACING 0x20000
01326 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
01327 #define HEAP_MAXIMUM_TAG 0xFFF
01328 #define HEAP_PSEUDO_TAG_FLAG 0x8000
01329 #define HEAP_TAG_SHIFT 16
01330 #define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b)+(o)<<16)))
01331 
01332 #define KEY_QUERY_VALUE 1
01333 #define KEY_SET_VALUE 2
01334 #define KEY_CREATE_SUB_KEY 4
01335 #define KEY_ENUMERATE_SUB_KEYS 8
01336 #define KEY_NOTIFY 16
01337 #define KEY_CREATE_LINK 32
01338 #define KEY_WOW64_64KEY         0x00000100
01339 #define KEY_WOW64_32KEY         0x00000200
01340 #define KEY_WOW64_RES           0x00000300
01341 
01342 #define KEY_WRITE 0x20006
01343 #define KEY_EXECUTE 0x20019
01344 #define KEY_READ 0x20019
01345 #define KEY_ALL_ACCESS 0xf003f
01346 #define REG_WHOLE_HIVE_VOLATILE 1
01347 #define REG_REFRESH_HIVE    2
01348 #define REG_NO_LAZY_FLUSH   4
01349 #define REG_OPTION_RESERVED 0
01350 #define REG_OPTION_NON_VOLATILE 0
01351 #define REG_OPTION_VOLATILE 1
01352 #define REG_OPTION_CREATE_LINK  2
01353 #define REG_OPTION_BACKUP_RESTORE   4
01354 #define REG_OPTION_OPEN_LINK    8
01355 #define REG_LEGAL_OPTION    15
01356 #define OWNER_SECURITY_INFORMATION 1
01357 #define GROUP_SECURITY_INFORMATION 2
01358 #define DACL_SECURITY_INFORMATION 4
01359 #define SACL_SECURITY_INFORMATION 8
01360 #define PROTECTED_DACL_SECURITY_INFORMATION     0x80000000
01361 #define PROTECTED_SACL_SECURITY_INFORMATION     0x40000000
01362 #define UNPROTECTED_DACL_SECURITY_INFORMATION   0x20000000
01363 #define UNPROTECTED_SACL_SECURITY_INFORMATION   0x10000000
01364 #define MAXIMUM_PROCESSORS 32
01365 #define PAGE_NOACCESS   0x0001
01366 #define PAGE_READONLY   0x0002
01367 #define PAGE_READWRITE  0x0004
01368 #define PAGE_WRITECOPY  0x0008
01369 #define PAGE_EXECUTE    0x0010
01370 #define PAGE_EXECUTE_READ   0x0020
01371 #define PAGE_EXECUTE_READWRITE  0x0040
01372 #define PAGE_EXECUTE_WRITECOPY  0x0080
01373 #define PAGE_GUARD      0x0100
01374 #define PAGE_NOCACHE        0x0200
01375 #define PAGE_WRITECOMBINE   0x0400
01376 #define MEM_COMMIT           0x1000
01377 #define MEM_RESERVE          0x2000
01378 #define MEM_DECOMMIT         0x4000
01379 #define MEM_RELEASE          0x8000
01380 #define MEM_FREE            0x10000
01381 #define MEM_PRIVATE         0x20000
01382 #define MEM_MAPPED          0x40000
01383 #define MEM_RESET           0x80000
01384 #define MEM_TOP_DOWN       0x100000
01385 #define MEM_WRITE_WATCH    0x200000 /* 98/Me */
01386 #define MEM_PHYSICAL       0x400000
01387 #define MEM_4MB_PAGES    0x80000000
01388 #define MEM_IMAGE        SEC_IMAGE
01389 #define SEC_NO_CHANGE   0x00400000
01390 #define SEC_FILE    0x00800000
01391 #define SEC_IMAGE   0x01000000
01392 #define SEC_VLM     0x02000000
01393 #define SEC_RESERVE 0x04000000
01394 #define SEC_COMMIT  0x08000000
01395 #define SEC_NOCACHE 0x10000000
01396 #define SEC_WRITECOMBINE 0x40000000
01397 #define SEC_LARGE_PAGES  0x80000000
01398 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
01399 #define SECTION_EXTEND_SIZE 16
01400 #define SECTION_MAP_READ 4
01401 #define SECTION_MAP_WRITE 2
01402 #define SECTION_QUERY 1
01403 #define SECTION_MAP_EXECUTE 8
01404 #define SECTION_ALL_ACCESS 0xf001f
01405 #define WRITE_WATCH_FLAG_RESET 0x01
01406 #define MESSAGE_RESOURCE_UNICODE 1
01407 #define RTL_CRITSECT_TYPE 0
01408 #define RTL_RESOURCE_TYPE 1
01409 
01410 #define RTL_FIELD_TYPE(type, field)    (((type*)0)->field)
01411 #define RTL_BITS_OF(sizeOfArg)         (sizeof(sizeOfArg) * 8)
01412 #define RTL_BITS_OF_FIELD(type, field) (RTL_BITS_OF(RTL_FIELD_TYPE(type, field)))
01413 
01414 /* Also in winddk.h */
01415 #if !defined(__GNUC__)
01416 #define FIELD_OFFSET(t,f) ((LONG)(LONG_PTR)&(((t*) 0)->f))
01417 #else
01418 #define FIELD_OFFSET(t,f) ((LONG)__builtin_offsetof(t,f))
01419 #endif
01420 #ifndef CONTAINING_RECORD
01421 #define CONTAINING_RECORD(address, type, field) \
01422   ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
01423 #endif
01424 /* end winddk.h */
01425 #define IMAGE_SIZEOF_FILE_HEADER    20
01426 #define IMAGE_FILE_RELOCS_STRIPPED  1
01427 #define IMAGE_FILE_EXECUTABLE_IMAGE 2
01428 #define IMAGE_FILE_LINE_NUMS_STRIPPED   4
01429 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED  8
01430 #define IMAGE_FILE_AGGRESIVE_WS_TRIM    16
01431 #define IMAGE_FILE_LARGE_ADDRESS_AWARE  32
01432 #define IMAGE_FILE_BYTES_REVERSED_LO    128
01433 #define IMAGE_FILE_32BIT_MACHINE    256
01434 #define IMAGE_FILE_DEBUG_STRIPPED   512
01435 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP  1024
01436 #define IMAGE_FILE_NET_RUN_FROM_SWAP    2048
01437 #define IMAGE_FILE_SYSTEM   4096
01438 #define IMAGE_FILE_DLL  8192
01439 #define IMAGE_FILE_UP_SYSTEM_ONLY   16384
01440 #define IMAGE_FILE_BYTES_REVERSED_HI    32768
01441 #define IMAGE_FILE_MACHINE_UNKNOWN  0
01442 
01443 #define IMAGE_FILE_MACHINE_AM33       0x1d3
01444 #define IMAGE_FILE_MACHINE_AMD64      0x8664
01445 #define IMAGE_FILE_MACHINE_ARM        0x1c0
01446 #define IMAGE_FILE_MACHINE_ARMV7      0x1c4
01447 #define IMAGE_FILE_MACHINE_EBC        0xebc
01448 #define IMAGE_FILE_MACHINE_I386       0x14c
01449 #define IMAGE_FILE_MACHINE_IA64       0x200
01450 #define IMAGE_FILE_MACHINE_M32R       0x9041
01451 #define IMAGE_FILE_MACHINE_MIPS16     0x266
01452 #define IMAGE_FILE_MACHINE_MIPSFPU    0x366
01453 #define IMAGE_FILE_MACHINE_MIPSFPU16  0x466
01454 #define IMAGE_FILE_MACHINE_POWERPC    0x1f0
01455 #define IMAGE_FILE_MACHINE_POWERPCFP  0x1f1
01456 #define IMAGE_FILE_MACHINE_R4000      0x166
01457 #define IMAGE_FILE_MACHINE_SH3        0x1a2
01458 #define IMAGE_FILE_MACHINE_SH3E       0x01a4
01459 #define IMAGE_FILE_MACHINE_SH3DSP     0x1a3
01460 #define IMAGE_FILE_MACHINE_SH4        0x1a6
01461 #define IMAGE_FILE_MACHINE_SH5        0x1a8
01462 #define IMAGE_FILE_MACHINE_THUMB      0x1c2
01463 #define IMAGE_FILE_MACHINE_WCEMIPSV2  0x169
01464 #define IMAGE_FILE_MACHINE_R3000      0x162
01465 #define IMAGE_FILE_MACHINE_R10000     0x168
01466 #define IMAGE_FILE_MACHINE_ALPHA      0x184
01467 #define IMAGE_FILE_MACHINE_ALPHA64    0x0284
01468 #define IMAGE_FILE_MACHINE_AXP64      IMAGE_FILE_MACHINE_ALPHA64
01469 #define IMAGE_FILE_MACHINE_CEE        0xC0EE
01470 #define IMAGE_FILE_MACHINE_TRICORE    0x0520
01471 #define IMAGE_FILE_MACHINE_CEF        0x0CEF
01472 
01473 #define IMAGE_FILE_EXPORT_DIRECTORY     0
01474 #define IMAGE_FILE_IMPORT_DIRECTORY     1
01475 #define IMAGE_FILE_RESOURCE_DIRECTORY       2
01476 #define IMAGE_FILE_EXCEPTION_DIRECTORY      3
01477 #define IMAGE_FILE_SECURITY_DIRECTORY       4
01478 #define IMAGE_FILE_BASE_RELOCATION_TABLE    5
01479 #define IMAGE_FILE_DEBUG_DIRECTORY      6
01480 #define IMAGE_FILE_DESCRIPTION_STRING       7
01481 #define IMAGE_FILE_MACHINE_VALUE        8  /* Mips */
01482 #define IMAGE_FILE_THREAD_LOCAL_STORAGE     9
01483 #define IMAGE_FILE_CALLBACK_DIRECTORY       10
01484 
01485 #define IMAGE_DOS_SIGNATURE 0x5A4D
01486 #define IMAGE_OS2_SIGNATURE 0x454E
01487 #define IMAGE_OS2_SIGNATURE_LE 0x454C
01488 #define IMAGE_VXD_SIGNATURE 0x454C
01489 #define IMAGE_NT_SIGNATURE 0x00004550
01490 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
01491 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
01492 #ifdef _WIN64
01493 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
01494 #else
01495 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
01496 #endif
01497 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
01498 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
01499 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
01500 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
01501 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
01502 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER 224
01503 #define IMAGE_SIZEOF_SHORT_NAME 8
01504 #define IMAGE_SIZEOF_SECTION_HEADER 40
01505 #define IMAGE_SIZEOF_SYMBOL 18
01506 #define IMAGE_SIZEOF_AUX_SYMBOL 18
01507 #define IMAGE_SIZEOF_RELOCATION 10
01508 #define IMAGE_SIZEOF_BASE_RELOCATION 8
01509 #define IMAGE_SIZEOF_LINENUMBER 6
01510 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
01511 #define SIZEOF_RFPO_DATA 16
01512 
01513 #define IMAGE_SUBSYSTEM_UNKNOWN                      0
01514 #define IMAGE_SUBSYSTEM_NATIVE                       1
01515 #define IMAGE_SUBSYSTEM_WINDOWS_GUI                  2
01516 #define IMAGE_SUBSYSTEM_WINDOWS_CUI                  3
01517 #define IMAGE_SUBSYSTEM_OS2_CUI                      5
01518 #define IMAGE_SUBSYSTEM_POSIX_CUI                    7
01519 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS               8
01520 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI               9
01521 #define IMAGE_SUBSYSTEM_EFI_APPLICATION             10
01522 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER     11
01523 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER          12
01524 #define IMAGE_SUBSYSTEM_EFI_ROM                     13
01525 #define IMAGE_SUBSYSTEM_XBOX                        14
01526 
01527 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040
01528 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080
01529 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100
01530 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
01531 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
01532 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
01533 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
01534 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
01535 #define IMAGE_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) ((ULONG_PTR)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+((PIMAGE_NT_HEADERS)(h))->FileHeader.SizeOfOptionalHeader))
01536 #define IMAGE_DIRECTORY_ENTRY_EXPORT    0
01537 #define IMAGE_DIRECTORY_ENTRY_IMPORT    1
01538 #define IMAGE_DIRECTORY_ENTRY_RESOURCE  2
01539 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
01540 #define IMAGE_DIRECTORY_ENTRY_SECURITY  4
01541 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
01542 #define IMAGE_DIRECTORY_ENTRY_DEBUG 6
01543 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
01544 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
01545 #define IMAGE_DIRECTORY_ENTRY_TLS   9
01546 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG   10
01547 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT  11
01548 #define IMAGE_DIRECTORY_ENTRY_IAT   12
01549 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT  13
01550 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR    14
01551 #define IMAGE_SCN_TYPE_REG 0
01552 #define IMAGE_SCN_TYPE_DSECT 1
01553 //#define IMAGE_SCN_TYPE_NOLOAD 2
01554 #define IMAGE_SCN_TYPE_GROUP 4
01555 #define IMAGE_SCN_TYPE_NO_PAD 8
01556 #define IMAGE_SCN_CNT_CODE 32
01557 #define IMAGE_SCN_CNT_INITIALIZED_DATA 64
01558 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 128
01559 #define IMAGE_SCN_LNK_OTHER 256
01560 #define IMAGE_SCN_LNK_INFO 512
01561 #define IMAGE_SCN_LNK_REMOVE 2048
01562 #define IMAGE_SCN_LNK_COMDAT 4096
01563 #define IMAGE_SCN_MEM_FARDATA 0x8000
01564 #define IMAGE_SCN_MEM_PURGEABLE 0x20000
01565 #define IMAGE_SCN_MEM_16BIT 0x20000
01566 #define IMAGE_SCN_MEM_LOCKED  0x40000
01567 #define IMAGE_SCN_MEM_PRELOAD 0x80000
01568 #define IMAGE_SCN_ALIGN_1BYTES 0x100000
01569 #define IMAGE_SCN_ALIGN_2BYTES 0x200000
01570 #define IMAGE_SCN_ALIGN_4BYTES 0x300000
01571 #define IMAGE_SCN_ALIGN_8BYTES 0x400000
01572 #define IMAGE_SCN_ALIGN_16BYTES 0x500000
01573 #define IMAGE_SCN_ALIGN_32BYTES 0x600000
01574 #define IMAGE_SCN_ALIGN_64BYTES 0x700000
01575 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x1000000
01576 #define IMAGE_SCN_MEM_DISCARDABLE 0x2000000
01577 #define IMAGE_SCN_MEM_NOT_CACHED 0x4000000
01578 #define IMAGE_SCN_MEM_NOT_PAGED 0x8000000
01579 #define IMAGE_SCN_MEM_SHARED 0x10000000
01580 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
01581 #define IMAGE_SCN_MEM_READ 0x40000000
01582 #define IMAGE_SCN_MEM_WRITE 0x80000000
01583 #define IMAGE_SYM_UNDEFINED 0
01584 #define IMAGE_SYM_ABSOLUTE (-1)
01585 #define IMAGE_SYM_DEBUG (-2)
01586 #define IMAGE_SYM_TYPE_NULL 0
01587 #define IMAGE_SYM_TYPE_VOID 1
01588 #define IMAGE_SYM_TYPE_CHAR 2
01589 #define IMAGE_SYM_TYPE_SHORT 3
01590 #define IMAGE_SYM_TYPE_INT 4
01591 #define IMAGE_SYM_TYPE_LONG 5
01592 #define IMAGE_SYM_TYPE_FLOAT 6
01593 #define IMAGE_SYM_TYPE_DOUBLE 7
01594 #define IMAGE_SYM_TYPE_STRUCT 8
01595 #define IMAGE_SYM_TYPE_UNION 9
01596 #define IMAGE_SYM_TYPE_ENUM 10
01597 #define IMAGE_SYM_TYPE_MOE 11
01598 #define IMAGE_SYM_TYPE_BYTE 12
01599 #define IMAGE_SYM_TYPE_WORD 13
01600 #define IMAGE_SYM_TYPE_UINT 14
01601 #define IMAGE_SYM_TYPE_DWORD 15
01602 #define IMAGE_SYM_TYPE_PCODE 32768
01603 #define IMAGE_SYM_DTYPE_NULL 0
01604 #define IMAGE_SYM_DTYPE_POINTER 1
01605 #define IMAGE_SYM_DTYPE_FUNCTION 2
01606 #define IMAGE_SYM_DTYPE_ARRAY 3
01607 #define IMAGE_SYM_CLASS_END_OF_FUNCTION (-1)
01608 #define IMAGE_SYM_CLASS_NULL 0
01609 #define IMAGE_SYM_CLASS_AUTOMATIC 1
01610 #define IMAGE_SYM_CLASS_EXTERNAL 2
01611 #define IMAGE_SYM_CLASS_STATIC 3
01612 #define IMAGE_SYM_CLASS_REGISTER 4
01613 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 5
01614 #define IMAGE_SYM_CLASS_LABEL 6
01615 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 7
01616 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8
01617 #define IMAGE_SYM_CLASS_ARGUMENT 9
01618 #define IMAGE_SYM_CLASS_STRUCT_TAG 10
01619 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 11
01620 #define IMAGE_SYM_CLASS_UNION_TAG 12
01621 #define IMAGE_SYM_CLASS_TYPE_DEFINITION 13
01622 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 14
01623 #define IMAGE_SYM_CLASS_ENUM_TAG 15
01624 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16
01625 #define IMAGE_SYM_CLASS_REGISTER_PARAM 17
01626 #define IMAGE_SYM_CLASS_BIT_FIELD 18
01627 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 68
01628 #define IMAGE_SYM_CLASS_BLOCK 100
01629 #define IMAGE_SYM_CLASS_FUNCTION 101
01630 #define IMAGE_SYM_CLASS_END_OF_STRUCT 102
01631 #define IMAGE_SYM_CLASS_FILE 103
01632 #define IMAGE_SYM_CLASS_SECTION 104
01633 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 105
01634 #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
01635 #define IMAGE_COMDAT_SELECT_ANY 2
01636 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
01637 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
01638 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
01639 #define IMAGE_COMDAT_SELECT_LARGEST 6
01640 #define IMAGE_COMDAT_SELECT_NEWEST 7
01641 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
01642 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
01643 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
01644 #define IMAGE_REL_I386_ABSOLUTE 0
01645 #define IMAGE_REL_I386_DIR16 1
01646 #define IMAGE_REL_I386_REL16 2
01647 #define IMAGE_REL_I386_DIR32 6
01648 #define IMAGE_REL_I386_DIR32NB 7
01649 #define IMAGE_REL_I386_SEG12 9
01650 #define IMAGE_REL_I386_SECTION 10
01651 #define IMAGE_REL_I386_SECREL 11
01652 #define IMAGE_REL_I386_REL32 20
01653 #define IMAGE_REL_MIPS_ABSOLUTE 0
01654 #define IMAGE_REL_MIPS_REFHALF 1
01655 #define IMAGE_REL_MIPS_REFWORD 2
01656 #define IMAGE_REL_MIPS_JMPADDR 3
01657 #define IMAGE_REL_MIPS_REFHI 4
01658 #define IMAGE_REL_MIPS_REFLO 5
01659 #define IMAGE_REL_MIPS_GPREL 6
01660 #define IMAGE_REL_MIPS_LITERAL 7
01661 #define IMAGE_REL_MIPS_SECTION 10
01662 #define IMAGE_REL_MIPS_SECREL 11
01663 #define IMAGE_REL_MIPS_SECRELLO 12
01664 #define IMAGE_REL_MIPS_SECRELHI 13
01665 #define IMAGE_REL_MIPS_REFWORDNB 34
01666 #define IMAGE_REL_MIPS_PAIR 35
01667 #define IMAGE_REL_ALPHA_ABSOLUTE 0
01668 #define IMAGE_REL_ALPHA_REFLONG 1
01669 #define IMAGE_REL_ALPHA_REFQUAD 2
01670 #define IMAGE_REL_ALPHA_GPREL32 3
01671 #define IMAGE_REL_ALPHA_LITERAL 4
01672 #define IMAGE_REL_ALPHA_LITUSE 5
01673 #define IMAGE_REL_ALPHA_GPDISP 6
01674 #define IMAGE_REL_ALPHA_BRADDR 7
01675 #define IMAGE_REL_ALPHA_HINT 8
01676 #define IMAGE_REL_ALPHA_INLINE_REFLONG 9
01677 #define IMAGE_REL_ALPHA_REFHI 10
01678 #define IMAGE_REL_ALPHA_REFLO 11
01679 #define IMAGE_REL_ALPHA_PAIR 12
01680 #define IMAGE_REL_ALPHA_MATCH 13
01681 #define IMAGE_REL_ALPHA_SECTION 14
01682 #define IMAGE_REL_ALPHA_SECREL 15
01683 #define IMAGE_REL_ALPHA_REFLONGNB 16
01684 #define IMAGE_REL_ALPHA_SECRELLO 17
01685 #define IMAGE_REL_ALPHA_SECRELHI 18
01686 #define IMAGE_REL_PPC_ABSOLUTE 0
01687 #define IMAGE_REL_PPC_ADDR64 1
01688 #define IMAGE_REL_PPC_ADDR32 2
01689 #define IMAGE_REL_PPC_ADDR24 3
01690 #define IMAGE_REL_PPC_ADDR16 4
01691 #define IMAGE_REL_PPC_ADDR14 5
01692 #define IMAGE_REL_PPC_REL24 6
01693 #define IMAGE_REL_PPC_REL14 7
01694 #define IMAGE_REL_PPC_TOCREL16 8
01695 #define IMAGE_REL_PPC_TOCREL14 9
01696 #define IMAGE_REL_PPC_ADDR32NB 10
01697 #define IMAGE_REL_PPC_SECREL 11
01698 #define IMAGE_REL_PPC_SECTION 12
01699 #define IMAGE_REL_PPC_IFGLUE 13
01700 #define IMAGE_REL_PPC_IMGLUE 14
01701 #define IMAGE_REL_PPC_SECREL16 15
01702 #define IMAGE_REL_PPC_REFHI 16
01703 #define IMAGE_REL_PPC_REFLO 17
01704 #define IMAGE_REL_PPC_PAIR 18
01705 #define IMAGE_REL_PPC_TYPEMASK 255
01706 #define IMAGE_REL_PPC_NEG 256
01707 #define IMAGE_REL_PPC_BRTAKEN 512
01708 #define IMAGE_REL_PPC_BRNTAKEN 1024
01709 #define IMAGE_REL_PPC_TOCDEFN 2048
01710 #define IMAGE_REL_BASED_ABSOLUTE 0
01711 #define IMAGE_REL_BASED_HIGH 1
01712 #define IMAGE_REL_BASED_LOW 2
01713 #define IMAGE_REL_BASED_HIGHLOW 3
01714 #define IMAGE_REL_BASED_HIGHADJ 4
01715 #define IMAGE_REL_BASED_MIPS_JMPADDR 5
01716 #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
01717 #define IMAGE_REL_BASED_IA64_IMM64 9
01718 #define IMAGE_REL_BASED_DIR64 10
01719 #define IMAGE_ARCHIVE_START_SIZE 8
01720 #define IMAGE_ARCHIVE_START "!<arch>\n"
01721 #define IMAGE_ARCHIVE_END "`\n"
01722 #define IMAGE_ARCHIVE_PAD "\n"
01723 #define IMAGE_ARCHIVE_LINKER_MEMBER "/               "
01724 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "//              "
01725 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
01726 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
01727 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
01728 #define IMAGE_DEBUG_TYPE_COFF 1
01729 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
01730 #define IMAGE_DEBUG_TYPE_FPO 3
01731 #define IMAGE_DEBUG_TYPE_MISC 4
01732 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
01733 #define IMAGE_DEBUG_TYPE_FIXUP 6
01734 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
01735 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
01736 #define FRAME_FPO 0
01737 #define FRAME_TRAP 1
01738 #define FRAME_TSS 2
01739 #define FRAME_NONFPO 3
01740 #define IMAGE_DEBUG_MISC_EXENAME 1
01741 #define N_BTMASK 0x000F
01742 #define N_TMASK 0x0030
01743 #define N_TMASK1 0x00C0
01744 #define N_TMASK2 0x00F0
01745 #define N_BTSHFT 4
01746 #define N_TSHIFT 2
01747 #define IS_TEXT_UNICODE_ASCII16 1
01748 #define IS_TEXT_UNICODE_REVERSE_ASCII16 16
01749 #define IS_TEXT_UNICODE_STATISTICS 2
01750 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 32
01751 #define IS_TEXT_UNICODE_CONTROLS 4
01752 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 64
01753 #define IS_TEXT_UNICODE_SIGNATURE 8
01754 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 128
01755 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 256
01756 #define IS_TEXT_UNICODE_ODD_LENGTH 512
01757 #define IS_TEXT_UNICODE_NULL_BYTES 4096
01758 #define IS_TEXT_UNICODE_UNICODE_MASK 15
01759 #define IS_TEXT_UNICODE_REVERSE_MASK 240
01760 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 3840
01761 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 61440
01762 #define SERVICE_KERNEL_DRIVER 1
01763 #define SERVICE_FILE_SYSTEM_DRIVER 2
01764 #define SERVICE_ADAPTER 4
01765 #define SERVICE_RECOGNIZER_DRIVER 8
01766 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER|SERVICE_FILE_SYSTEM_DRIVER|SERVICE_RECOGNIZER_DRIVER)
01767 #define SERVICE_WIN32_OWN_PROCESS 16
01768 #define SERVICE_WIN32_SHARE_PROCESS 32
01769 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS|SERVICE_WIN32_SHARE_PROCESS)
01770 #define SERVICE_INTERACTIVE_PROCESS 256
01771 #define SERVICE_TYPE_ALL (SERVICE_WIN32|SERVICE_ADAPTER|SERVICE_DRIVER|SERVICE_INTERACTIVE_PROCESS)
01772 #define SERVICE_BOOT_START 0
01773 #define SERVICE_SYSTEM_START 1
01774 #define SERVICE_AUTO_START 2
01775 #define SERVICE_DEMAND_START 3
01776 #define SERVICE_DISABLED 4
01777 #define SERVICE_ERROR_IGNORE 0
01778 #define SERVICE_ERROR_NORMAL 1
01779 #define SERVICE_ERROR_SEVERE 2
01780 #define SERVICE_ERROR_CRITICAL 3
01781 #define SE_OWNER_DEFAULTED 1
01782 #define SE_GROUP_DEFAULTED 2
01783 #define SE_DACL_PRESENT 4
01784 #define SE_DACL_DEFAULTED 8
01785 #define SE_SACL_PRESENT 16
01786 #define SE_SACL_DEFAULTED 32
01787 #define SE_DACL_AUTO_INHERIT_REQ 256
01788 #define SE_SACL_AUTO_INHERIT_REQ 512
01789 #define SE_DACL_AUTO_INHERITED 1024
01790 #define SE_SACL_AUTO_INHERITED 2048
01791 #define SE_DACL_PROTECTED 4096
01792 #define SE_SACL_PROTECTED 8192
01793 #define SE_RM_CONTROL_VALID 0x4000
01794 #define SE_SELF_RELATIVE 0x8000
01795 #define SECURITY_DESCRIPTOR_MIN_LENGTH 20
01796 #define SECURITY_DESCRIPTOR_REVISION 1
01797 #define SECURITY_DESCRIPTOR_REVISION1 1
01798 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT 1
01799 #define SE_PRIVILEGE_ENABLED 2
01800 #define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
01801 #define PRIVILEGE_SET_ALL_NECESSARY 1
01802 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
01803 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
01804 #define SECURITY_DYNAMIC_TRACKING TRUE
01805 #define SECURITY_STATIC_TRACKING FALSE
01806 /* also in ddk/ntifs.h */
01807 #define TOKEN_ASSIGN_PRIMARY            (0x0001)
01808 #define TOKEN_DUPLICATE                 (0x0002)
01809 #define TOKEN_IMPERSONATE               (0x0004)
01810 #define TOKEN_QUERY                     (0x0008)
01811 #define TOKEN_QUERY_SOURCE              (0x0010)
01812 #define TOKEN_ADJUST_PRIVILEGES         (0x0020)
01813 #define TOKEN_ADJUST_GROUPS             (0x0040)
01814 #define TOKEN_ADJUST_DEFAULT            (0x0080)
01815 #define TOKEN_ADJUST_SESSIONID          (0x0100)
01816 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
01817                           TOKEN_ASSIGN_PRIMARY     |\
01818                           TOKEN_DUPLICATE          |\
01819                           TOKEN_IMPERSONATE        |\
01820                           TOKEN_QUERY              |\
01821                           TOKEN_QUERY_SOURCE       |\
01822                           TOKEN_ADJUST_PRIVILEGES  |\
01823                           TOKEN_ADJUST_GROUPS      |\
01824                           TOKEN_ADJUST_DEFAULT     |\
01825                           TOKEN_ADJUST_SESSIONID)
01826 #define TOKEN_READ       (STANDARD_RIGHTS_READ     |\
01827                           TOKEN_QUERY)
01828 #define TOKEN_WRITE      (STANDARD_RIGHTS_WRITE    |\
01829                           TOKEN_ADJUST_PRIVILEGES  |\
01830                           TOKEN_ADJUST_GROUPS      |\
01831                           TOKEN_ADJUST_DEFAULT)
01832 
01833 #define TOKEN_EXECUTE    (STANDARD_RIGHTS_EXECUTE)
01834 #define TOKEN_SOURCE_LENGTH 8
01835 /* end ddk/ntifs.h */
01836 #define DLL_PROCESS_DETACH  0
01837 #define DLL_PROCESS_ATTACH  1
01838 #define DLL_THREAD_ATTACH   2
01839 #define DLL_THREAD_DETACH   3
01840 #ifdef __WINESRC__
01841 #define DLL_WINE_PREATTACH  8 /* Never called, but defined for compatibility with Wine source */
01842 #endif
01843 #define TAPE_ABSOLUTE_POSITION 0
01844 #define TAPE_LOGICAL_POSITION 1
01845 #define TAPE_PSEUDO_LOGICAL_POSITION 2
01846 #define TAPE_REWIND 0
01847 #define TAPE_ABSOLUTE_BLOCK 1
01848 #define TAPE_LOGICAL_BLOCK 2
01849 #define TAPE_PSEUDO_LOGICAL_BLOCK 3
01850 #define TAPE_SPACE_END_OF_DATA 4
01851 #define TAPE_SPACE_RELATIVE_BLOCKS 5
01852 #define TAPE_SPACE_FILEMARKS 6
01853 #define TAPE_SPACE_SEQUENTIAL_FMKS 7
01854 #define TAPE_SPACE_SETMARKS 8
01855 #define TAPE_SPACE_SEQUENTIAL_SMKS 9
01856 #define TAPE_DRIVE_FIXED 1
01857 #define TAPE_DRIVE_SELECT 2
01858 #define TAPE_DRIVE_INITIATOR 4
01859 #define TAPE_DRIVE_ERASE_SHORT 16
01860 #define TAPE_DRIVE_ERASE_LONG 32
01861 #define TAPE_DRIVE_ERASE_BOP_ONLY 64
01862 #define TAPE_DRIVE_ERASE_IMMEDIATE 128
01863 #define TAPE_DRIVE_TAPE_CAPACITY 256
01864 #define TAPE_DRIVE_TAPE_REMAINING 512
01865 #define TAPE_DRIVE_FIXED_BLOCK 1024
01866 #define TAPE_DRIVE_VARIABLE_BLOCK 2048
01867 #define TAPE_DRIVE_WRITE_PROTECT 4096
01868 #define TAPE_DRIVE_EOT_WZ_SIZE 8192
01869 #define TAPE_DRIVE_ECC 0x10000
01870 #define TAPE_DRIVE_COMPRESSION 0x20000
01871 #define TAPE_DRIVE_PADDING 0x40000
01872 #define TAPE_DRIVE_REPORT_SMKS 0x80000
01873 #define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x100000
01874 #define TAPE_DRIVE_GET_LOGICAL_BLK 0x200000
01875 #define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x400000
01876 #define TAPE_DRIVE_EJECT_MEDIA 0x1000000
01877 #define TAPE_DRIVE_CLEAN_REQUESTS 0x2000000
01878 #define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x4000000
01879 #define TAPE_DRIVE_RESERVED_BIT 0x80000000
01880 #define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
01881 #define TAPE_DRIVE_TENSION 0x80000002
01882 #define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
01883 #define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
01884 #define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
01885 #define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
01886 #define TAPE_DRIVE_TENSION_IMMED 0x80000040
01887 #define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
01888 #define TAPE_DRIVE_SET_ECC 0x80000100
01889 #define TAPE_DRIVE_SET_COMPRESSION 0x80000200
01890 #define TAPE_DRIVE_SET_PADDING 0x80000400
01891 #define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
01892 #define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
01893 #define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
01894 #define TAPE_DRIVE_LOGICAL_BLK 0x80004000
01895 #define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
01896 #define TAPE_DRIVE_END_OF_DATA 0x80010000
01897 #define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
01898 #define TAPE_DRIVE_FILEMARKS 0x80040000
01899 #define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
01900 #define TAPE_DRIVE_SETMARKS 0x80100000
01901 #define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
01902 #define TAPE_DRIVE_REVERSE_POSITION 0x80400000
01903 #define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
01904 #define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
01905 #define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
01906 #define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
01907 #define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
01908 #define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
01909 #define TAPE_DRIVE_FORMAT 0xA0000000
01910 #define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
01911 #define TAPE_DRIVE_HIGH_FEATURES 0x80000000
01912 #define TAPE_FIXED_PARTITIONS   0
01913 #define TAPE_INITIATOR_PARTITIONS   2
01914 #define TAPE_SELECT_PARTITIONS  1
01915 #define TAPE_FILEMARKS  1
01916 #define TAPE_LONG_FILEMARKS 3
01917 #define TAPE_SETMARKS   0
01918 #define TAPE_SHORT_FILEMARKS    2
01919 #define TAPE_ERASE_LONG 1
01920 #define TAPE_ERASE_SHORT 0
01921 #define TAPE_LOAD 0
01922 #define TAPE_UNLOAD 1
01923 #define TAPE_TENSION 2
01924 #define TAPE_LOCK 3
01925 #define TAPE_UNLOCK 4
01926 #define TAPE_FORMAT 5
01927 #if (_WIN32_WINNT >= 0x0500)
01928 #define VER_MINORVERSION 0x0000001
01929 #define VER_MAJORVERSION 0x0000002
01930 #define VER_BUILDNUMBER 0x0000004
01931 #define VER_PLATFORMID 0x0000008
01932 #define VER_SERVICEPACKMINOR 0x0000010
01933 #define VER_SERVICEPACKMAJOR 0x0000020
01934 #define VER_SUITENAME 0x0000040
01935 #define VER_PRODUCT_TYPE 0x0000080
01936 #define VER_EQUAL 1
01937 #define VER_GREATER 2
01938 #define VER_GREATER_EQUAL 3
01939 #define VER_LESS 4
01940 #define VER_LESS_EQUAL 5
01941 #define VER_AND 6
01942 #define VER_OR 7
01943 #endif
01944 #define VER_SERVER_NT 0x80000000
01945 #define VER_WORKSTATION_NT 0x40000000
01946 #define VER_PLATFORM_WIN32s 0
01947 #define VER_PLATFORM_WIN32_WINDOWS 1
01948 #define VER_PLATFORM_WIN32_NT 2
01949 #define VER_NT_WORKSTATION 1
01950 #define VER_NT_DOMAIN_CONTROLLER 2
01951 #define VER_NT_SERVER 3
01952 #define VER_SUITE_SMALLBUSINESS 1
01953 #define VER_SUITE_ENTERPRISE 2
01954 #define VER_SUITE_BACKOFFICE 4
01955 #define VER_SUITE_COMMUNICATIONS 8
01956 #define VER_SUITE_TERMINAL 16
01957 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 32
01958 #define VER_SUITE_EMBEDDEDNT 64
01959 #define VER_SUITE_DATACENTER 128
01960 #define VER_SUITE_SINGLEUSERTS 256
01961 #define VER_SUITE_PERSONAL 512
01962 #define VER_SUITE_BLADE 1024
01963 #define VER_SUITE_EMBEDDED_RESTRICTED 2048
01964 #define VER_SUITE_SECURITY_APPLIANCE 4096
01965 #define VER_SUITE_STORAGE_SERVER 8192
01966 #define VER_SUITE_COMPUTE_SERVER 16384
01967 #define VER_SUITE_WH_SERVER 32768
01968 #define WT_EXECUTEDEFAULT 0x00000000
01969 #define WT_EXECUTEINIOTHREAD 0x00000001
01970 #define WT_EXECUTEINUITHREAD 0x00000002
01971 #define WT_EXECUTEINWAITTHREAD 0x00000004
01972 #define WT_EXECUTEONLYONCE 0x00000008
01973 #define WT_EXECUTELONGFUNCTION 0x00000010
01974 #define WT_EXECUTEINTIMERTHREAD 0x00000020
01975 #define WT_EXECUTEINPERSISTENTIOTHREAD 0x00000040
01976 #define WT_EXECUTEINPERSISTENTTHREAD 0x00000080
01977 #define WT_TRANSFER_IMPERSONATION 0x00000100
01978 #define WT_SET_MAX_THREADPOOL_THREADS(flags,limit) ((flags)|=(limit)<<16)
01979 typedef VOID (NTAPI *WORKERCALLBACKFUNC)(PVOID);
01980 #if (_WIN32_WINNT >= 0x0501)
01981 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
01982 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
01983 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
01984 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
01985 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
01986 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
01987 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
01988 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
01989 #endif /* (_WIN32_WINNT >= 0x0501) */
01990 #define BTYPE(x) ((x)&N_BTMASK)
01991 #define ISPTR(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT))
01992 #define ISFCN(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION<<N_BTSHFT))
01993 #define ISARY(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY<<N_BTSHFT))
01994 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG||(x)==IMAGE_SYM_CLASS_UNION_TAG||(x)==IMAGE_SYM_CLASS_ENUM_TAG)
01995 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
01996 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
01997 #define TLS_MINIMUM_AVAILABLE 64
01998 #define FLS_MAXIMUM_AVAILABLE 128
01999 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
02000 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE 16384
02001 #define IO_REPARSE_TAG_RESERVED_ZERO 0
02002 #define IO_REPARSE_TAG_RESERVED_ONE 1
02003 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
02004 #define IsReparseTagMicrosoft(x) ((x)&0x80000000)
02005 #define IsReparseTagHighLatency(x) ((x)&0x40000000)
02006 #define IsReparseTagNameSurrogate(x) ((x)&0x20000000)
02007 #define IO_REPARSE_TAG_VALID_VALUES 0xE000FFFF
02008 #define IsReparseTagValid(x) (!((x)&~IO_REPARSE_TAG_VALID_VALUES)&&((x)>IO_REPARSE_TAG_RESERVED_RANGE))
02009 #define IO_REPARSE_TAG_SYMBOLIC_LINK IO_REPARSE_TAG_RESERVED_ZERO
02010 #define IO_REPARSE_TAG_MOUNT_POINT 0xA0000003
02011 #define IO_REPARSE_TAG_SYMLINK 0xA000000CL
02012 #ifndef RC_INVOKED
02013 typedef DWORD ACCESS_MASK, *PACCESS_MASK;
02014 
02015 #ifdef _GUID_DEFINED
02016 # warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
02017 #endif
02018 
02019 #if ! (defined _GUID_DEFINED || defined GUID_DEFINED) /* also defined in basetyps.h */
02020 #define GUID_DEFINED
02021 typedef struct _GUID {
02022     unsigned long  Data1;
02023     unsigned short Data2;
02024     unsigned short Data3;
02025     unsigned char  Data4[8];
02026 } GUID, *REFGUID, *LPGUID;
02027 #endif /* GUID_DEFINED */
02028 
02029 #define SYSTEM_LUID { 0x3E7, 0x0 }
02030 
02031 /* ACE Access Types, also in ntifs.h */
02032 #define ACCESS_MIN_MS_ACE_TYPE                  (0x0)
02033 #define ACCESS_ALLOWED_ACE_TYPE                 (0x0)
02034 #define ACCESS_DENIED_ACE_TYPE                  (0x1)
02035 #define SYSTEM_AUDIT_ACE_TYPE                   (0x2)
02036 #define SYSTEM_ALARM_ACE_TYPE                   (0x3)
02037 #define ACCESS_MAX_MS_V2_ACE_TYPE               (0x3)
02038 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE        (0x4)
02039 #define ACCESS_MAX_MS_V3_ACE_TYPE               (0x4)
02040 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE           (0x5)
02041 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE          (0x5)
02042 #define ACCESS_DENIED_OBJECT_ACE_TYPE           (0x6)
02043 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE            (0x7)
02044 #define SYSTEM_ALARM_OBJECT_ACE_TYPE            (0x8)
02045 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE           (0x8)
02046 #define ACCESS_MAX_MS_V4_ACE_TYPE               (0x8)
02047 #define ACCESS_MAX_MS_ACE_TYPE                  (0x8)
02048 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE        (0x9)
02049 #define ACCESS_DENIED_CALLBACK_ACE_TYPE         (0xA)
02050 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
02051 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE  (0xC)
02052 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE          (0xD)
02053 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE          (0xE)
02054 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE   (0xF)
02055 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE   (0x10)
02056 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE         (0x11)
02057 #define ACCESS_MAX_MS_V5_ACE_TYPE               (0x11)
02058 /* end ntifs.h */
02059 
02060 typedef struct _GENERIC_MAPPING {
02061   ACCESS_MASK GenericRead;
02062   ACCESS_MASK GenericWrite;
02063   ACCESS_MASK GenericExecute;
02064   ACCESS_MASK GenericAll;
02065 } GENERIC_MAPPING, *PGENERIC_MAPPING;
02066 
02067 typedef struct _ACE_HEADER {
02068   BYTE AceType;
02069   BYTE AceFlags;
02070   WORD AceSize;
02071 } ACE_HEADER, *PACE_HEADER;
02072 
02073 typedef struct _ACCESS_ALLOWED_ACE {
02074   ACE_HEADER Header;
02075   ACCESS_MASK Mask;
02076   DWORD SidStart;
02077 } ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
02078 
02079 typedef struct _ACCESS_DENIED_ACE {
02080   ACE_HEADER Header;
02081   ACCESS_MASK Mask;
02082   DWORD SidStart;
02083 } ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
02084 
02085 typedef struct _SYSTEM_AUDIT_ACE {
02086   ACE_HEADER Header;
02087   ACCESS_MASK Mask;
02088   DWORD SidStart;
02089 } SYSTEM_AUDIT_ACE, *PSYSTEM_AUDIT_ACE;
02090 
02091 typedef struct _SYSTEM_ALARM_ACE {
02092   ACE_HEADER Header;
02093   ACCESS_MASK Mask;
02094   DWORD SidStart;
02095 } SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
02096 
02097 typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
02098   ACE_HEADER Header;
02099   ACCESS_MASK Mask;
02100   DWORD SidStart;
02101 } SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
02102 
02103 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP  0x1
02104 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP   0x2
02105 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP    0x4
02106 #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | SYSTEM_MANDATORY_LABEL_NO_READ_UP | SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
02107 
02108 typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
02109   ACE_HEADER Header;
02110   ACCESS_MASK Mask;
02111   DWORD Flags;
02112   GUID ObjectType;
02113   GUID InheritedObjectType;
02114   DWORD SidStart;
02115 } ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
02116 
02117 typedef struct _ACCESS_DENIED_OBJECT_ACE {
02118   ACE_HEADER Header;
02119   ACCESS_MASK Mask;
02120   DWORD Flags;
02121   GUID ObjectType;
02122   GUID InheritedObjectType;
02123   DWORD SidStart;
02124 } ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
02125 
02126 typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
02127   ACE_HEADER Header;
02128   ACCESS_MASK Mask;
02129   DWORD Flags;
02130   GUID ObjectType;
02131   GUID InheritedObjectType;
02132   DWORD SidStart;
02133 } SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
02134 
02135 typedef struct _SYSTEM_ALARM_OBJECT_ACE {
02136   ACE_HEADER Header;
02137   ACCESS_MASK Mask;
02138   DWORD Flags;
02139   GUID ObjectType;
02140   GUID InheritedObjectType;
02141   DWORD SidStart;
02142 } SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
02143 
02144 typedef struct _ACCESS_ALLOWED_CALLBACK_ACE {
02145   ACE_HEADER Header;
02146   ACCESS_MASK Mask;
02147   DWORD SidStart;
02148 } ACCESS_ALLOWED_CALLBACK_ACE, *PACCESS_ALLOWED_CALLBACK_ACE;
02149 
02150 typedef struct _ACCESS_DENIED_CALLBACK_ACE {
02151   ACE_HEADER Header;
02152   ACCESS_MASK Mask;
02153   DWORD SidStart;
02154 } ACCESS_DENIED_CALLBACK_ACE, *PACCESS_DENIED_CALLBACK_ACE;
02155 
02156 typedef struct _SYSTEM_AUDIT_CALLBACK_ACE {
02157   ACE_HEADER Header;
02158   ACCESS_MASK Mask;
02159   DWORD SidStart;
02160 } SYSTEM_AUDIT_CALLBACK_ACE, *PSYSTEM_AUDIT_CALLBACK_ACE;
02161 
02162 typedef struct _SYSTEM_ALARM_CALLBACK_ACE {
02163   ACE_HEADER Header;
02164   ACCESS_MASK Mask;
02165   DWORD SidStart;
02166 } SYSTEM_ALARM_CALLBACK_ACE, *PSYSTEM_ALARM_CALLBACK_ACE;
02167 
02168 typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
02169   ACE_HEADER Header;
02170   ACCESS_MASK Mask;
02171   DWORD Flags;
02172   GUID ObjectType;
02173   GUID InheritedObjectType;
02174   DWORD SidStart;
02175 } ACCESS_ALLOWED_CALLBACK_OBJECT_ACE, *PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
02176 
02177 typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE {
02178   ACE_HEADER Header;
02179   ACCESS_MASK Mask;
02180   DWORD Flags;
02181   GUID ObjectType;
02182   GUID InheritedObjectType;
02183   DWORD SidStart;
02184 } ACCESS_DENIED_CALLBACK_OBJECT_ACE, *PACCESS_DENIED_CALLBACK_OBJECT_ACE;
02185 
02186 typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
02187   ACE_HEADER Header;
02188   ACCESS_MASK Mask;
02189   DWORD Flags;
02190   GUID ObjectType;
02191   GUID InheritedObjectType;
02192   DWORD SidStart;
02193 } SYSTEM_AUDIT_CALLBACK_OBJECT_ACE, *PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
02194 
02195 typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
02196   ACE_HEADER Header;
02197   ACCESS_MASK Mask;
02198   DWORD Flags;
02199   GUID ObjectType;
02200   GUID InheritedObjectType;
02201   DWORD SidStart;
02202 } SYSTEM_ALARM_CALLBACK_OBJECT_ACE, *PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
02203 
02204 typedef struct _ACL {
02205   BYTE AclRevision;
02206   BYTE Sbz1;
02207   WORD AclSize;
02208   WORD AceCount;
02209   WORD Sbz2;
02210 } ACL,*PACL;
02211 
02212 typedef enum _ACL_INFORMATION_CLASS {
02213   AclRevisionInformation = 1,
02214   AclSizeInformation
02215 } ACL_INFORMATION_CLASS;
02216 
02217 typedef struct _ACL_REVISION_INFORMATION {
02218   DWORD AclRevision;
02219 } ACL_REVISION_INFORMATION, *PACL_REVISION_INFORMATION;
02220 
02221 typedef struct _ACL_SIZE_INFORMATION {
02222   DWORD AceCount;
02223   DWORD AclBytesInUse;
02224   DWORD AclBytesFree;
02225 } ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION;
02226 
02227 typedef
02228 EXCEPTION_DISPOSITION
02229 NTAPI
02230 EXCEPTION_ROUTINE(
02231     _Inout_ struct _EXCEPTION_RECORD *ExceptionRecord,
02232     _In_ PVOID EstablisherFrame,
02233     _Inout_ struct _CONTEXT *ContextRecord,
02234     _In_ PVOID DispatcherContext);
02235 
02236 typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
02237 
02238 #ifndef _LDT_ENTRY_DEFINED
02239 #define _LDT_ENTRY_DEFINED
02240 
02241 typedef struct _LDT_ENTRY {
02242   WORD LimitLow;
02243   WORD BaseLow;
02244   union {
02245     struct {
02246       BYTE BaseMid;
02247       BYTE Flags1;
02248       BYTE Flags2;
02249       BYTE BaseHi;
02250     } Bytes;
02251     struct {
02252       DWORD BaseMid:8;
02253       DWORD Type:5;
02254       DWORD Dpl:2;
02255       DWORD Pres:1;
02256       DWORD LimitHi:4;
02257       DWORD Sys:1;
02258       DWORD Reserved_0:1;
02259       DWORD Default_Big:1;
02260       DWORD Granularity:1;
02261       DWORD BaseHi:8;
02262     } Bits;
02263   } HighWord;
02264 } LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
02265 
02266 #endif /* _LDT_ENTRY_DEFINED */
02267 
02268 /* FIXME: add more machines */
02269 #if defined(_X86_) && !defined(__PowerPC__)
02270 #define SIZE_OF_80387_REGISTERS 80
02271 #define CONTEXT_i386    0x10000
02272 #define CONTEXT_i486    0x10000
02273 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
02274 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
02275 #define CONTEXT_SEGMENTS    (CONTEXT_i386|0x00000004L)
02276 #define CONTEXT_FLOATING_POINT  (CONTEXT_i386|0x00000008L)
02277 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
02278 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
02279 #define CONTEXT_FULL    (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
02280 #define MAXIMUM_SUPPORTED_EXTENSION  512
02281 
02282 #define EXCEPTION_READ_FAULT    0
02283 #define EXCEPTION_WRITE_FAULT   1
02284 #define EXCEPTION_EXECUTE_FAULT 8
02285 
02286 typedef struct _FLOATING_SAVE_AREA {
02287   DWORD ControlWord;
02288   DWORD StatusWord;
02289   DWORD TagWord;
02290   DWORD ErrorOffset;
02291   DWORD ErrorSelector;
02292   DWORD DataOffset;
02293   DWORD DataSelector;
02294   BYTE RegisterArea[80];
02295   DWORD Cr0NpxState;
02296 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
02297 
02298 typedef struct _CONTEXT {
02299   DWORD ContextFlags;
02300   DWORD Dr0;
02301   DWORD Dr1;
02302   DWORD Dr2;
02303   DWORD Dr3;
02304   DWORD Dr6;
02305   DWORD Dr7;
02306   FLOATING_SAVE_AREA FloatSave;
02307   DWORD SegGs;
02308   DWORD SegFs;
02309   DWORD SegEs;
02310   DWORD SegDs;
02311   DWORD Edi;
02312   DWORD Esi;
02313   DWORD Ebx;
02314   DWORD Edx;
02315   DWORD Ecx;
02316   DWORD Eax;
02317   DWORD Ebp;
02318   DWORD Eip;
02319   DWORD SegCs;
02320   DWORD EFlags;
02321   DWORD Esp;
02322   DWORD SegSs;
02323   BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
02324 } CONTEXT;
02325 #elif defined(__x86_64__)
02326 
02327 #define CONTEXT_AMD64 0x100000
02328 
02329 #if !defined(RC_INVOKED)
02330 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
02331 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
02332 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
02333 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
02334 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
02335 
02336 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
02337 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
02338 
02339 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
02340 #define CONTEXT_SERVICE_ACTIVE 0x10000000
02341 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
02342 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
02343 #endif
02344 
02345 #define INITIAL_MXCSR 0x1f80
02346 #define INITIAL_FPCSR 0x027f
02347 #define EXCEPTION_READ_FAULT    0
02348 #define EXCEPTION_WRITE_FAULT   1
02349 #define EXCEPTION_EXECUTE_FAULT 8
02350 
02351 typedef struct DECLSPEC_ALIGN(16) _M128A {
02352     ULONGLONG Low;
02353     LONGLONG High;
02354 } M128A, *PM128A;
02355 
02356 typedef struct _XMM_SAVE_AREA32 {
02357     WORD ControlWord;
02358     WORD StatusWord;
02359     BYTE TagWord;
02360     BYTE Reserved1;
02361     WORD ErrorOpcode;
02362     DWORD ErrorOffset;
02363     WORD ErrorSelector;
02364     WORD Reserved2;
02365     DWORD DataOffset;
02366     WORD DataSelector;
02367     WORD Reserved3;
02368     DWORD MxCsr;
02369     DWORD MxCsr_Mask;
02370     M128A FloatRegisters[8];
02371     M128A XmmRegisters[16];
02372     BYTE Reserved4[96];
02373 } XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
02374 
02375 typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
02376     DWORD64 P1Home;
02377     DWORD64 P2Home;
02378     DWORD64 P3Home;
02379     DWORD64 P4Home;
02380     DWORD64 P5Home;
02381     DWORD64 P6Home;
02382 
02383     /* Control flags */
02384     DWORD ContextFlags;
02385     DWORD MxCsr;
02386 
02387     /* Segment */
02388     WORD SegCs;
02389     WORD SegDs;
02390     WORD SegEs;
02391     WORD SegFs;
02392     WORD SegGs;
02393     WORD SegSs;
02394     DWORD EFlags;
02395 
02396     /* Debug */
02397     DWORD64 Dr0;
02398     DWORD64 Dr1;
02399     DWORD64 Dr2;
02400     DWORD64 Dr3;
02401     DWORD64 Dr6;
02402     DWORD64 Dr7;
02403 
02404     /* Integer */
02405     DWORD64 Rax;
02406     DWORD64 Rcx;
02407     DWORD64 Rdx;
02408     DWORD64 Rbx;
02409     DWORD64 Rsp;
02410     DWORD64 Rbp;
02411     DWORD64 Rsi;
02412     DWORD64 Rdi;
02413     DWORD64 R8;
02414     DWORD64 R9;
02415     DWORD64 R10;
02416     DWORD64 R11;
02417     DWORD64 R12;
02418     DWORD64 R13;
02419     DWORD64 R14;
02420     DWORD64 R15;
02421 
02422     /* Counter */
02423     DWORD64 Rip;
02424 
02425    /* Floating point */
02426    union {
02427        XMM_SAVE_AREA32 FltSave;
02428        struct {
02429            M128A Header[2];
02430            M128A Legacy[8];
02431            M128A Xmm0;
02432            M128A Xmm1;
02433            M128A Xmm2;
02434            M128A Xmm3;
02435            M128A Xmm4;
02436            M128A Xmm5;
02437            M128A Xmm6;
02438            M128A Xmm7;
02439            M128A Xmm8;
02440            M128A Xmm9;
02441            M128A Xmm10;
02442            M128A Xmm11;
02443            M128A Xmm12;
02444            M128A Xmm13;
02445            M128A Xmm14;
02446            M128A Xmm15;
02447       } DUMMYSTRUCTNAME;
02448     } DUMMYUNIONNAME;
02449 
02450      /* Vector */
02451     M128A VectorRegister[26];
02452     DWORD64 VectorControl;
02453 
02454     /* Debug control */
02455     DWORD64 DebugControl;
02456     DWORD64 LastBranchToRip;
02457     DWORD64 LastBranchFromRip;
02458     DWORD64 LastExceptionToRip;
02459     DWORD64 LastExceptionFromRip;
02460 } CONTEXT;
02461 
02462 
02463 typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
02464     union {
02465         PM128A FloatingContext[16];
02466         struct {
02467             PM128A Xmm0;
02468             PM128A Xmm1;
02469             PM128A Xmm2;
02470             PM128A Xmm3;
02471             PM128A Xmm4;
02472             PM128A Xmm5;
02473             PM128A Xmm6;
02474             PM128A Xmm7;
02475             PM128A Xmm8;
02476             PM128A Xmm9;
02477             PM128A Xmm10;
02478             PM128A Xmm11;
02479             PM128A Xmm12;
02480             PM128A Xmm13;
02481             PM128A Xmm14;
02482             PM128A Xmm15;
02483         } DUMMYSTRUCTNAME;
02484     } DUMMYUNIONNAME;
02485 
02486     union {
02487         PULONG64 IntegerContext[16];
02488         struct {
02489             PULONG64 Rax;
02490             PULONG64 Rcx;
02491             PULONG64 Rdx;
02492             PULONG64 Rbx;
02493             PULONG64 Rsp;
02494             PULONG64 Rbp;
02495             PULONG64 Rsi;
02496             PULONG64 Rdi;
02497             PULONG64 R8;
02498             PULONG64 R9;
02499             PULONG64 R10;
02500             PULONG64 R11;
02501             PULONG64 R12;
02502             PULONG64 R13;
02503             PULONG64 R14;
02504             PULONG64 R15;
02505         } DUMMYSTRUCTNAME;
02506     } DUMMYUNIONNAME2;
02507 } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
02508 
02509 #define RUNTIME_FUNCTION_INDIRECT 0x1
02510 
02511 typedef struct _RUNTIME_FUNCTION {
02512     DWORD BeginAddress;
02513     DWORD EndAddress;
02514     DWORD UnwindData;
02515 } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
02516 
02517 #define UNWIND_HISTORY_TABLE_SIZE 12
02518 
02519 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
02520 {
02521     ULONG64 ImageBase;
02522     PRUNTIME_FUNCTION FunctionEntry;
02523 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
02524 
02525 typedef struct _UNWIND_HISTORY_TABLE
02526 {
02527     ULONG Count;
02528     UCHAR Search;
02529     ULONG64 LowAddress;
02530     ULONG64 HighAddress;
02531     UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
02532 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
02533 
02534 typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
02535 typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions);
02536 
02537 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
02538 
02539 NTSYSAPI
02540 VOID
02541 __cdecl
02542 RtlRestoreContext(struct _CONTEXT *ContextRecord,
02543                   struct _EXCEPTION_RECORD *ExceptionRecord);
02544 
02545 NTSYSAPI
02546 BOOLEAN
02547 __cdecl
02548 RtlAddFunctionTable(PRUNTIME_FUNCTION FunctionTable,
02549                     DWORD EntryCount,
02550                     DWORD64 BaseAddress);
02551 
02552 NTSYSAPI
02553 BOOLEAN
02554 __cdecl
02555 RtlInstallFunctionTableCallback(DWORD64 TableIdentifier,
02556                                 DWORD64 BaseAddress,
02557                                 DWORD Length,
02558                                 PGET_RUNTIME_FUNCTION_CALLBACK Callback,
02559                                 PVOID Context,
02560                                 PCWSTR OutOfProcessCallbackDll);
02561 
02562 NTSYSAPI
02563 BOOLEAN
02564 __cdecl
02565 RtlDeleteFunctionTable(PRUNTIME_FUNCTION FunctionTable);
02566 
02567 NTSYSAPI
02568 PRUNTIME_FUNCTION
02569 NTAPI
02570 RtlLookupFunctionEntry(
02571     _In_ DWORD64 ControlPc,
02572     _Out_ PDWORD64 ImageBase,
02573     _Inout_opt_ PUNWIND_HISTORY_TABLE HistoryTable);
02574 
02575 NTSYSAPI
02576 PEXCEPTION_ROUTINE
02577 NTAPI
02578 RtlVirtualUnwind(
02579     _In_ DWORD HandlerType,
02580     _In_ DWORD64 ImageBase,
02581     _In_ DWORD64 ControlPc,
02582     _In_ PRUNTIME_FUNCTION FunctionEntry,
02583     _Inout_ struct _CONTEXT *ContextRecord,
02584     _Out_ PVOID *HandlerData,
02585     _Out_ PDWORD64 EstablisherFrame,
02586     _Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
02587 
02588 #elif defined(_PPC_)
02589 #define CONTEXT_CONTROL 1L
02590 #define CONTEXT_FLOATING_POINT  2L
02591 #define CONTEXT_INTEGER 4L
02592 #define CONTEXT_DEBUG_REGISTERS 8L
02593 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
02594 typedef struct _FLOATING_SAVE_AREA
02595 {
02596     double Fpr0;
02597     double Fpr1;
02598     double Fpr2;
02599     double Fpr3;
02600     double Fpr4;
02601     double Fpr5;
02602     double Fpr6;
02603     double Fpr7;
02604     double Fpr8;
02605     double Fpr9;
02606     double Fpr10;
02607     double Fpr11;
02608     double Fpr12;
02609     double Fpr13;
02610     double Fpr14;
02611     double Fpr15;
02612     double Fpr16;
02613     double Fpr17;
02614     double Fpr18;
02615     double Fpr19;
02616     double Fpr20;
02617     double Fpr21;
02618     double Fpr22;
02619     double Fpr23;
02620     double Fpr24;
02621     double Fpr25;
02622     double Fpr26;
02623     double Fpr27;
02624     double Fpr28;
02625     double Fpr29;
02626     double Fpr30;
02627     double Fpr31;
02628     double Fpscr;
02629 } FLOATING_SAVE_AREA;
02630 
02631 typedef struct _CONTEXT {
02632         FLOATING_SAVE_AREA FloatSave;
02633     DWORD Gpr0;
02634     DWORD Gpr1;
02635     DWORD Gpr2;
02636     DWORD Gpr3;
02637     DWORD Gpr4;
02638     DWORD Gpr5;
02639     DWORD Gpr6;
02640     DWORD Gpr7;
02641     DWORD Gpr8;
02642     DWORD Gpr9;
02643     DWORD Gpr10;
02644     DWORD Gpr11;
02645     DWORD Gpr12;
02646     DWORD Gpr13;
02647     DWORD Gpr14;
02648     DWORD Gpr15;
02649     DWORD Gpr16;
02650     DWORD Gpr17;
02651     DWORD Gpr18;
02652     DWORD Gpr19;
02653     DWORD Gpr20;
02654     DWORD Gpr21;
02655     DWORD Gpr22;
02656     DWORD Gpr23;
02657     DWORD Gpr24;
02658     DWORD Gpr25;
02659     DWORD Gpr26;
02660     DWORD Gpr27;
02661     DWORD Gpr28;
02662     DWORD Gpr29;
02663     DWORD Gpr30;
02664     DWORD Gpr31;
02665     DWORD Cr;
02666     DWORD Xer;
02667     DWORD Msr;
02668     DWORD Iar;
02669     DWORD Lr;
02670     DWORD Ctr;
02671     DWORD ContextFlags;
02672     DWORD Fill[3];
02673     DWORD Dr0;
02674     DWORD Dr1;
02675     DWORD Dr2;
02676     DWORD Dr3;
02677     DWORD Dr4;
02678     DWORD Dr5;
02679     DWORD Dr6;
02680     DWORD Dr7;
02681 } CONTEXT;
02682 #elif defined(_ALPHA_)
02683 #define CONTEXT_ALPHA   0x20000
02684 #define CONTEXT_CONTROL (CONTEXT_ALPHA|1L)
02685 #define CONTEXT_FLOATING_POINT  (CONTEXT_ALPHA|2L)
02686 #define CONTEXT_INTEGER (CONTEXT_ALPHA|4L)
02687 #define CONTEXT_FULL    (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
02688 typedef struct _CONTEXT {
02689     ULONGLONG FltF0;
02690     ULONGLONG FltF1;
02691     ULONGLONG FltF2;
02692     ULONGLONG FltF3;
02693     ULONGLONG FltF4;
02694     ULONGLONG FltF5;
02695     ULONGLONG FltF6;
02696     ULONGLONG FltF7;
02697     ULONGLONG FltF8;
02698     ULONGLONG FltF9;
02699     ULONGLONG FltF10;
02700     ULONGLONG FltF11;
02701     ULONGLONG FltF12;
02702     ULONGLONG FltF13;
02703     ULONGLONG FltF14;
02704     ULONGLONG FltF15;
02705     ULONGLONG FltF16;
02706     ULONGLONG FltF17;
02707     ULONGLONG FltF18;
02708     ULONGLONG FltF19;
02709     ULONGLONG FltF20;
02710     ULONGLONG FltF21;
02711     ULONGLONG FltF22;
02712     ULONGLONG FltF23;
02713     ULONGLONG FltF24;
02714     ULONGLONG FltF25;
02715     ULONGLONG FltF26;
02716     ULONGLONG FltF27;
02717     ULONGLONG FltF28;
02718     ULONGLONG FltF29;
02719     ULONGLONG FltF30;
02720     ULONGLONG FltF31;
02721     ULONGLONG IntV0;
02722     ULONGLONG IntT0;
02723     ULONGLONG IntT1;
02724     ULONGLONG IntT2;
02725     ULONGLONG IntT3;
02726     ULONGLONG IntT4;
02727     ULONGLONG IntT5;
02728     ULONGLONG IntT6;
02729     ULONGLONG IntT7;
02730     ULONGLONG IntS0;
02731     ULONGLONG IntS1;
02732     ULONGLONG IntS2;
02733     ULONGLONG IntS3;
02734     ULONGLONG IntS4;
02735     ULONGLONG IntS5;
02736     ULONGLONG IntFp;
02737     ULONGLONG IntA0;
02738     ULONGLONG IntA1;
02739     ULONGLONG IntA2;
02740     ULONGLONG IntA3;
02741     ULONGLONG IntA4;
02742     ULONGLONG IntA5;
02743     ULONGLONG IntT8;
02744     ULONGLONG IntT9;
02745     ULONGLONG IntT10;
02746     ULONGLONG IntT11;
02747     ULONGLONG IntRa;
02748     ULONGLONG IntT12;
02749     ULONGLONG IntAt;
02750     ULONGLONG IntGp;
02751     ULONGLONG IntSp;
02752     ULONGLONG IntZero;
02753     ULONGLONG Fpcr;
02754     ULONGLONG SoftFpcr;
02755     ULONGLONG Fir;
02756     DWORD Psr;
02757     DWORD ContextFlags;
02758     DWORD Fill[4];
02759 } CONTEXT;
02760 #elif defined(SHx)
02761 
02762 /* These are the debug or break registers on the SH3 */
02763 typedef struct _DEBUG_REGISTERS {
02764     ULONG  BarA;
02765     UCHAR  BasrA;
02766     UCHAR  BamrA;
02767     USHORT BbrA;
02768     ULONG  BarB;
02769     UCHAR  BasrB;
02770     UCHAR  BamrB;
02771     USHORT BbrB;
02772     ULONG  BdrB;
02773     ULONG  BdmrB;
02774     USHORT Brcr;
02775     USHORT Align;
02776 } DEBUG_REGISTERS, *PDEBUG_REGISTERS;
02777 
02778 /* The following flags control the contents of the CONTEXT structure. */
02779 
02780 #define CONTEXT_SH3     0x00000040
02781 #define CONTEXT_SH4     0x000000c0  /* CONTEXT_SH3 | 0x80 - must contain the SH3 bits */
02782 
02783 #ifdef SH3
02784 #define CONTEXT_CONTROL         (CONTEXT_SH3 | 0x00000001L)
02785 #define CONTEXT_INTEGER         (CONTEXT_SH3 | 0x00000002L)
02786 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH3 | 0x00000008L)
02787 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS)
02788 #else   /* SH4 */
02789 #define CONTEXT_CONTROL         (CONTEXT_SH4 | 0x00000001L)
02790 #define CONTEXT_INTEGER         (CONTEXT_SH4 | 0x00000002L)
02791 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH4 | 0x00000008L)
02792 #define CONTEXT_FLOATING_POINT  (CONTEXT_SH4 | 0x00000004L)
02793 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS | CONTEXT_FLOATING_POINT)
02794 #endif
02795 
02796 /* Context Frame */
02797 
02798 /*  This frame is used to store a limited processor context into the */
02799 /* Thread structure for CPUs which have no floating point support. */
02800 
02801 typedef struct _CONTEXT {
02802     /* The flags values within this flag control the contents of */
02803     /* a CONTEXT record. */
02804 
02805     /* If the context record is used as an input parameter, then */
02806     /* for each portion of the context record controlled by a flag */
02807     /* whose value is set, it is assumed that that portion of the */
02808     /* context record contains valid context. If the context record */
02809     /* is being used to modify a thread's context, then only that */
02810     /* portion of the threads context will be modified. */
02811 
02812     /* If the context record is used as an IN OUT parameter to capture */
02813     /* the context of a thread, then only those portions of the thread's */
02814     /* context corresponding to set flags will be returned. */
02815 
02816     /* The context record is never used as an OUT only parameter. */
02817 
02818 
02819     ULONG ContextFlags;
02820 
02821     /* This section is specified/returned if the ContextFlags word contains */
02822     /* the flag CONTEXT_INTEGER. */
02823 
02824     /* N.B. The registers RA and R15 are defined in this section, but are */
02825     /*  considered part of the control context rather than part of the integer */
02826     /*  context. */
02827 
02828     ULONG PR;
02829     ULONG MACH;
02830     ULONG MACL;
02831     ULONG GBR;
02832     ULONG R0;
02833     ULONG R1;
02834     ULONG R2;
02835     ULONG R3;
02836     ULONG R4;
02837     ULONG R5;
02838     ULONG R6;
02839     ULONG R7;
02840     ULONG R8;
02841     ULONG R9;
02842     ULONG R10;
02843     ULONG R11;
02844     ULONG R12;
02845     ULONG R13;
02846     ULONG R14;
02847     ULONG R15;
02848 
02849     /* This section is specified/returned if the ContextFlags word contains */
02850     /* the flag CONTEXT_CONTROL. */
02851 
02852     /* N.B. The registers r15 and ra are defined in the integer section, */
02853     /*   but are considered part of the control context rather than part of */
02854     /*   the integer context. */
02855 
02856     ULONG Fir;
02857     ULONG Psr;
02858 
02859 #if !defined(SH3e) && !defined(SH4)
02860     ULONG   OldStuff[2];
02861     DEBUG_REGISTERS DebugRegisters;
02862 #else
02863     ULONG   Fpscr;
02864     ULONG   Fpul;
02865     ULONG   FRegs[16];
02866 #if defined(SH4)
02867     ULONG   xFRegs[16];
02868 #endif
02869 #endif
02870 } CONTEXT;
02871 
02872 #elif defined(_MIPS_)
02873 
02874 /* The following flags control the contents of the CONTEXT structure. */
02875 
02876 #define CONTEXT_R4000   0x00010000    /* r4000 context */
02877 
02878 #define CONTEXT_CONTROL         (CONTEXT_R4000 | 0x00000001L)
02879 #define CONTEXT_FLOATING_POINT  (CONTEXT_R4000 | 0x00000002L)
02880 #define CONTEXT_INTEGER         (CONTEXT_R4000 | 0x00000004L)
02881 
02882 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
02883 
02884 /* Context Frame */
02885 
02886 /*  N.B. This frame must be exactly a multiple of 16 bytes in length. */
02887 
02888 /*  This frame has a several purposes: 1) it is used as an argument to */
02889 /*  NtContinue, 2) it is used to constuct a call frame for APC delivery, */
02890 /*  3) it is used to construct a call frame for exception dispatching */
02891 /*  in user mode, and 4) it is used in the user level thread creation */
02892 /*  routines. */
02893 
02894 /*  The layout of the record conforms to a standard call frame. */
02895 
02896 
02897 typedef struct _CONTEXT {
02898 
02899     /* This section is always present and is used as an argument build */
02900     /* area. */
02901 
02902     DWORD Argument[4];
02903 
02904     /* This section is specified/returned if the ContextFlags word contains */
02905     /* the flag CONTEXT_FLOATING_POINT. */
02906 
02907     DWORD FltF0;
02908     DWORD FltF1;
02909     DWORD FltF2;
02910     DWORD FltF3;
02911     DWORD FltF4;
02912     DWORD FltF5;
02913     DWORD FltF6;
02914     DWORD FltF7;
02915     DWORD FltF8;
02916     DWORD FltF9;
02917     DWORD FltF10;
02918     DWORD FltF11;
02919     DWORD FltF12;
02920     DWORD FltF13;
02921     DWORD FltF14;
02922     DWORD FltF15;
02923     DWORD FltF16;
02924     DWORD FltF17;
02925     DWORD FltF18;
02926     DWORD FltF19;
02927     DWORD FltF20;
02928     DWORD FltF21;
02929     DWORD FltF22;
02930     DWORD FltF23;
02931     DWORD FltF24;
02932     DWORD FltF25;
02933     DWORD FltF26;
02934     DWORD FltF27;
02935     DWORD FltF28;
02936     DWORD FltF29;
02937     DWORD FltF30;
02938     DWORD FltF31;
02939 
02940     /* This section is specified/returned if the ContextFlags word contains */
02941     /* the flag CONTEXT_INTEGER. */
02942 
02943     /* N.B. The registers gp, sp, and ra are defined in this section, but are */
02944     /*  considered part of the control context rather than part of the integer */
02945     /*  context. */
02946 
02947     /* N.B. Register zero is not stored in the frame. */
02948 
02949     DWORD IntZero;
02950     DWORD IntAt;
02951     DWORD IntV0;
02952     DWORD IntV1;
02953     DWORD IntA0;
02954     DWORD IntA1;
02955     DWORD IntA2;
02956     DWORD IntA3;
02957     DWORD IntT0;
02958     DWORD IntT1;
02959     DWORD IntT2;
02960     DWORD IntT3;
02961     DWORD IntT4;
02962     DWORD IntT5;
02963     DWORD IntT6;
02964     DWORD IntT7;
02965     DWORD IntS0;
02966     DWORD IntS1;
02967     DWORD IntS2;
02968     DWORD IntS3;
02969     DWORD IntS4;
02970     DWORD IntS5;
02971     DWORD IntS6;
02972     DWORD IntS7;
02973     DWORD IntT8;
02974     DWORD IntT9;
02975     DWORD IntK0;
02976     DWORD IntK1;
02977     DWORD IntGp;
02978     DWORD IntSp;
02979     DWORD IntS8;
02980     DWORD IntRa;
02981     DWORD IntLo;
02982     DWORD IntHi;
02983 
02984     /* This section is specified/returned if the ContextFlags word contains */
02985     /* the flag CONTEXT_FLOATING_POINT. */
02986 
02987     DWORD Fsr;
02988 
02989     /* This section is specified/returned if the ContextFlags word contains */
02990     /* the flag CONTEXT_CONTROL. */
02991 
02992     /* N.B. The registers gp, sp, and ra are defined in the integer section, */
02993     /*   but are considered part of the control context rather than part of */
02994     /*   the integer context. */
02995 
02996     DWORD Fir;
02997     DWORD Psr;
02998 
02999     /* The flags values within this flag control the contents of */
03000     /* a CONTEXT record. */
03001 
03002     /* If the context record is used as an input parameter, then */
03003     /* for each portion of the context record controlled by a flag */
03004     /* whose value is set, it is assumed that that portion of the */
03005     /* context record contains valid context. If the context record */
03006     /* is being used to modify a thread's context, then only that */
03007     /* portion of the threads context will be modified. */
03008 
03009     /* If the context record is used as an IN OUT parameter to capture */
03010     /* the context of a thread, then only those portions of the thread's */
03011     /* context corresponding to set flags will be returned. */
03012 
03013     /* The context record is never used as an OUT only parameter. */
03014 
03015     DWORD ContextFlags;
03016 
03017     DWORD Fill[2];
03018 
03019 } CONTEXT;
03020 #elif defined(ARM)
03021 
03022 #ifndef PAGE_SIZE
03023 #define PAGE_SIZE                         0x1000 // FIXME: This should probably go elsewhere
03024 #endif
03025 
03026 /* The following flags control the contents of the CONTEXT structure. */
03027 
03028 #define CONTEXT_ARM    0x0000040
03029 #define CONTEXT_CONTROL         (CONTEXT_ARM | 0x00000001L)
03030 #define CONTEXT_INTEGER         (CONTEXT_ARM | 0x00000002L)
03031 
03032 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
03033 
03034 typedef struct _CONTEXT {
03035     /* The flags values within this flag control the contents of
03036        a CONTEXT record.
03037 
03038        If the context record is used as an input parameter, then
03039        for each portion of the context record controlled by a flag
03040        whose value is set, it is assumed that that portion of the
03041        context record contains valid context. If the context record
03042        is being used to modify a thread's context, then only that
03043        portion of the threads context will be modified.
03044 
03045        If the context record is used as an IN OUT parameter to capture
03046        the context of a thread, then only those portions of the thread's
03047        context corresponding to set flags will be returned.
03048 
03049        The context record is never used as an OUT only parameter. */
03050 
03051     ULONG ContextFlags;
03052 
03053     /* This section is specified/returned if the ContextFlags word contains
03054        the flag CONTEXT_INTEGER. */
03055     ULONG R0;
03056     ULONG R1;
03057     ULONG R2;
03058     ULONG R3;
03059     ULONG R4;
03060     ULONG R5;
03061     ULONG R6;
03062     ULONG R7;
03063     ULONG R8;
03064     ULONG R9;
03065     ULONG R10;
03066     ULONG R11;
03067     ULONG R12;
03068 
03069     ULONG Sp;
03070     ULONG Lr;
03071     ULONG Pc;
03072     ULONG Psr;
03073 } CONTEXT;
03074 
03075 #else
03076 #error "undefined processor type"
03077 #endif
03078 typedef CONTEXT *PCONTEXT,*LPCONTEXT;
03079 
03080 #define EXCEPTION_NONCONTINUABLE    1
03081 #define EXCEPTION_MAXIMUM_PARAMETERS 15
03082 
03083 typedef struct _EXCEPTION_RECORD {
03084   DWORD ExceptionCode;
03085   DWORD ExceptionFlags;
03086   struct _EXCEPTION_RECORD *ExceptionRecord;
03087   PVOID ExceptionAddress;
03088   DWORD NumberParameters;
03089   ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
03090 } EXCEPTION_RECORD, *PEXCEPTION_RECORD;
03091 
03092 typedef struct _EXCEPTION_RECORD32 {
03093   DWORD ExceptionCode;
03094   DWORD ExceptionFlags;
03095   DWORD ExceptionRecord;
03096   DWORD ExceptionAddress;
03097   DWORD NumberParameters;
03098   DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
03099 } EXCEPTION_RECORD32,*PEXCEPTION_RECORD32;
03100 
03101 typedef struct _EXCEPTION_RECORD64 {
03102   DWORD ExceptionCode;
03103   DWORD ExceptionFlags;
03104   DWORD64 ExceptionRecord;
03105   DWORD64 ExceptionAddress;
03106   DWORD NumberParameters;
03107   DWORD __unusedAlignment;
03108   DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
03109 } EXCEPTION_RECORD64,*PEXCEPTION_RECORD64;
03110 
03111 typedef struct _EXCEPTION_POINTERS {
03112   PEXCEPTION_RECORD ExceptionRecord;
03113   PCONTEXT ContextRecord;
03114 } EXCEPTION_POINTERS,*PEXCEPTION_POINTERS, *LPEXCEPTION_POINTERS;
03115 
03116 #ifdef _M_PPC
03117 #define LARGE_INTEGER_ORDER(x) x HighPart; DWORD LowPart;
03118 #else
03119 #define LARGE_INTEGER_ORDER(x) DWORD LowPart; x HighPart;
03120 #endif
03121 
03122 typedef union _LARGE_INTEGER {
03123 #if ! defined(NONAMELESSUNION) || defined(__cplusplus)
03124   _ANONYMOUS_STRUCT struct {
03125       LARGE_INTEGER_ORDER(LONG)
03126   };
03127 #endif /* NONAMELESSUNION */
03128   struct {
03129       LARGE_INTEGER_ORDER(LONG)
03130   } u;
03131   LONGLONG QuadPart;
03132 } LARGE_INTEGER, *PLARGE_INTEGER;
03133 typedef union _ULARGE_INTEGER {
03134 #if ! defined(NONAMELESSUNION) || defined(__cplusplus)
03135   _ANONYMOUS_STRUCT struct {
03136       LARGE_INTEGER_ORDER(DWORD)
03137   };
03138 #endif /* NONAMELESSUNION */
03139   struct {
03140       LARGE_INTEGER_ORDER(DWORD)
03141   } u;
03142   ULONGLONG QuadPart;
03143 } ULARGE_INTEGER, *PULARGE_INTEGER;
03144 typedef struct _LUID {
03145     LARGE_INTEGER_ORDER(LONG)
03146 } LUID, *PLUID;
03147 
03148 #include <pshpack4.h>
03149 
03150 typedef struct _LUID_AND_ATTRIBUTES {
03151   LUID Luid;
03152   DWORD Attributes;
03153 } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
03154 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
03155 typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
03156 
03157 #include <poppack.h>
03158 
03159 typedef struct _PRIVILEGE_SET {
03160   DWORD PrivilegeCount;
03161   DWORD Control;
03162   LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
03163 } PRIVILEGE_SET,*PPRIVILEGE_SET;
03164 
03165 typedef struct _SECURITY_ATTRIBUTES {
03166     DWORD nLength;
03167     LPVOID lpSecurityDescriptor;
03168     BOOL bInheritHandle;
03169 } SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;
03170 
03171 typedef enum _SECURITY_IMPERSONATION_LEVEL {
03172   SecurityAnonymous,
03173   SecurityIdentification,
03174   SecurityImpersonation,
03175   SecurityDelegation
03176 } SECURITY_IMPERSONATION_LEVEL,*PSECURITY_IMPERSONATION_LEVEL;
03177 
03178 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,*PSECURITY_CONTEXT_TRACKING_MODE;
03179 
03180 typedef struct _SECURITY_QUALITY_OF_SERVICE {
03181   DWORD Length;
03182   SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
03183   SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
03184   BOOLEAN EffectiveOnly;
03185 } SECURITY_QUALITY_OF_SERVICE,*PSECURITY_QUALITY_OF_SERVICE;
03186 
03187 typedef PVOID PACCESS_TOKEN;
03188 
03189 typedef struct _SE_IMPERSONATION_STATE {
03190   PACCESS_TOKEN Token;
03191   BOOLEAN CopyOnOpen;
03192   BOOLEAN EffectiveOnly;
03193   SECURITY_IMPERSONATION_LEVEL Level;
03194 } SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
03195 
03196 typedef struct _SID_IDENTIFIER_AUTHORITY {
03197   BYTE Value[6];
03198 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
03199 
03200 typedef PVOID PSID;
03201 
03202 typedef struct _SID {
03203   BYTE Revision;
03204   BYTE SubAuthorityCount;
03205   SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
03206   DWORD SubAuthority[ANYSIZE_ARRAY];
03207 } SID, *PISID;
03208 
03209 #define SECURITY_MIN_SID_SIZE (sizeof(SID))
03210 #define SECURITY_MAX_SID_SIZE (FIELD_OFFSET(SID, SubAuthority) + SID_MAX_SUB_AUTHORITIES * sizeof(DWORD))
03211 
03212 typedef struct _SID_AND_ATTRIBUTES {
03213   PSID Sid;
03214   DWORD Attributes;
03215 } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
03216 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
03217 typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
03218 
03219 typedef struct _TOKEN_SOURCE {
03220   CHAR SourceName[TOKEN_SOURCE_LENGTH];
03221   LUID SourceIdentifier;
03222 } TOKEN_SOURCE,*PTOKEN_SOURCE;
03223 
03224 typedef struct _TOKEN_CONTROL {
03225   LUID TokenId;
03226   LUID AuthenticationId;
03227   LUID ModifiedId;
03228   TOKEN_SOURCE TokenSource;
03229 } TOKEN_CONTROL,*PTOKEN_CONTROL;
03230 
03231 typedef struct _TOKEN_DEFAULT_DACL {
03232   PACL DefaultDacl;
03233 } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
03234 
03235 typedef struct _TOKEN_GROUPS {
03236   DWORD GroupCount;
03237   SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
03238 } TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
03239 
03240 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
03241   DWORD SidCount;
03242   DWORD SidLength;
03243   PSID_AND_ATTRIBUTES Sids;
03244   DWORD RestrictedSidCount;
03245   DWORD RestrictedSidLength;
03246   PSID_AND_ATTRIBUTES RestrictedSids;
03247   DWORD PrivilegeCount;
03248   DWORD PrivilegeLength;
03249   PLUID_AND_ATTRIBUTES Privileges;
03250   LUID AuthenticationId;
03251 } TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
03252 
03253 typedef struct _TOKEN_ORIGIN {
03254   LUID OriginatingLogonSession;
03255 } TOKEN_ORIGIN, *PTOKEN_ORIGIN;
03256 
03257 typedef struct _TOKEN_OWNER {
03258   PSID Owner;
03259 } TOKEN_OWNER,*PTOKEN_OWNER;
03260 
03261 typedef struct _TOKEN_PRIMARY_GROUP {
03262   PSID PrimaryGroup;
03263 } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
03264 
03265 typedef struct _TOKEN_PRIVILEGES {
03266   DWORD PrivilegeCount;
03267   LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
03268 } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
03269 
03270 typedef enum tagTOKEN_TYPE {
03271     TokenPrimary = 1,
03272     TokenImpersonation
03273 } TOKEN_TYPE,*PTOKEN_TYPE;
03274 
03275 typedef enum _TOKEN_ELEVATION_TYPE {
03276     TokenElevationTypeDefault = 1,
03277     TokenElevationTypeFull,
03278     TokenElevationTypeLimited,
03279 } TOKEN_ELEVATION_TYPE, *PTOKEN_ELEVATION_TYPE;
03280 
03281 #include <pshpack4.h>
03282 typedef struct _TOKEN_STATISTICS {
03283   LUID TokenId;
03284   LUID AuthenticationId;
03285   LARGE_INTEGER ExpirationTime;
03286   TOKEN_TYPE TokenType;
03287   SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
03288   DWORD DynamicCharged;
03289   DWORD DynamicAvailable;
03290   DWORD GroupCount;
03291   DWORD PrivilegeCount;
03292   LUID ModifiedId;
03293 } TOKEN_STATISTICS, *PTOKEN_STATISTICS;
03294 #include <poppack.h>
03295 
03296 typedef struct _TOKEN_USER {
03297   SID_AND_ATTRIBUTES User;
03298 } TOKEN_USER, *PTOKEN_USER;
03299 
03300 typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
03301 typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
03302 
03303 #ifndef _SECURITY_ATTRIBUTES_
03304 #define _SECURITY_ATTRIBUTES_
03305 typedef struct _SECURITY_DESCRIPTOR {
03306   BYTE Revision;
03307   BYTE Sbz1;
03308   SECURITY_DESCRIPTOR_CONTROL Control;
03309   PSID Owner;
03310   PSID Group;
03311   PACL Sacl;
03312   PACL Dacl;
03313 } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
03314 typedef PVOID PSECURITY_DESCRIPTOR;
03315 #endif
03316 
03317 typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
03318   BYTE Revision;
03319   BYTE Sbz1;
03320   SECURITY_DESCRIPTOR_CONTROL Control;
03321   DWORD Owner;
03322   DWORD Group;
03323   DWORD Sacl;
03324   DWORD Dacl;
03325 } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
03326 
03327 typedef enum _TOKEN_INFORMATION_CLASS {
03328   TokenUser = 1,
03329   TokenGroups,
03330   TokenPrivileges,
03331   TokenOwner,
03332   TokenPrimaryGroup,
03333   TokenDefaultDacl,
03334   TokenSource,
03335   TokenType,
03336   TokenImpersonationLevel,
03337   TokenStatistics,
03338   TokenRestrictedSids,
03339   TokenSessionId,
03340   TokenGroupsAndPrivileges,
03341   TokenSessionReference,
03342   TokenSandBoxInert,
03343   TokenAuditPolicy,
03344   TokenOrigin,
03345   TokenElevationType,
03346   TokenLinkedToken,
03347   TokenElevation,
03348   TokenHasRestrictions,
03349   TokenAccessInformation,
03350   TokenVirtualizationAllowed,
03351   TokenVirtualizationEnabled,
03352   TokenIntegrityLevel,
03353   TokenUIAccess,
03354   TokenMandatoryPolicy,
03355   TokenLogonSid,
03356   MaxTokenInfoClass
03357 } TOKEN_INFORMATION_CLASS;
03358 
03359 typedef enum _SID_NAME_USE {
03360   SidTypeUser=1,
03361   SidTypeGroup,
03362   SidTypeDomain,
03363   SidTypeAlias,
03364   SidTypeWellKnownGroup,
03365   SidTypeDeletedAccount,
03366   SidTypeInvalid,
03367   SidTypeUnknown,
03368   SidTypeComputer,
03369   SidTypeLabel
03370 } SID_NAME_USE,*PSID_NAME_USE;
03371 
03372 typedef struct _QUOTA_LIMITS {
03373   SIZE_T PagedPoolLimit;
03374   SIZE_T NonPagedPoolLimit;
03375   SIZE_T MinimumWorkingSetSize;
03376   SIZE_T MaximumWorkingSetSize;
03377   SIZE_T PagefileLimit;
03378   LARGE_INTEGER TimeLimit;
03379 } QUOTA_LIMITS,*PQUOTA_LIMITS;
03380 
03381 typedef struct _QUOTA_LIMITS_EX {
03382   SIZE_T PagedPoolLimit;
03383   SIZE_T NonPagedPoolLimit;
03384   SIZE_T MinimumWorkingSetSize;
03385   SIZE_T MaximumWorkingSetSize;
03386   SIZE_T PagefileLimit;
03387   LARGE_INTEGER TimeLimit;
03388   SIZE_T Reserved1;
03389   SIZE_T Reserved2;
03390   SIZE_T Reserved3;
03391   SIZE_T Reserved4;
03392   ULONG Flags;
03393   ULONG Reserved5;
03394 } QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
03395 
03396 typedef struct _IO_COUNTERS {
03397   ULONGLONG ReadOperationCount;
03398   ULONGLONG WriteOperationCount;
03399   ULONGLONG OtherOperationCount;
03400   ULONGLONG ReadTransferCount;
03401   ULONGLONG WriteTransferCount;
03402   ULONGLONG OtherTransferCount;
03403 } IO_COUNTERS, *PIO_COUNTERS;
03404 
03405 typedef struct _FILE_NOTIFY_INFORMATION {
03406   DWORD NextEntryOffset;
03407   DWORD Action;
03408   DWORD FileNameLength;
03409   WCHAR FileName[1];
03410 } FILE_NOTIFY_INFORMATION,*PFILE_NOTIFY_INFORMATION;
03411 
03412 typedef struct _TAPE_ERASE {
03413   DWORD Type;
03414   BOOLEAN Immediate;
03415 } TAPE_ERASE, *PTAPE_ERASE;
03416 
03417 typedef struct _TAPE_GET_DRIVE_PARAMETERS {
03418   BOOLEAN ECC;
03419   BOOLEAN Compression;
03420   BOOLEAN DataPadding;
03421   BOOLEAN ReportSetmarks;
03422   DWORD DefaultBlockSize;
03423   DWORD MaximumBlockSize;
03424   DWORD MinimumBlockSize;
03425   DWORD MaximumPartitionCount;
03426   DWORD FeaturesLow;
03427   DWORD FeaturesHigh;
03428   DWORD EOTWarningZoneSize;
03429 } TAPE_GET_DRIVE_PARAMETERS, *PTAPE_GET_DRIVE_PARAMETERS;
03430 
03431 typedef struct _TAPE_GET_MEDIA_PARAMETERS {
03432   LARGE_INTEGER Capacity;
03433   LARGE_INTEGER Remaining;
03434   DWORD BlockSize;
03435   DWORD PartitionCount;
03436   BOOLEAN WriteProtected;
03437 } TAPE_GET_MEDIA_PARAMETERS, *PTAPE_GET_MEDIA_PARAMETERS;
03438 
03439 typedef struct _TAPE_GET_POSITION {
03440   ULONG Type;
03441   ULONG Partition;
03442   LARGE_INTEGER Offset;
03443 } TAPE_GET_POSITION, *PTAPE_GET_POSITION;
03444 
03445 typedef struct _TAPE_PREPARE {
03446   DWORD Operation;
03447   BOOLEAN Immediate;
03448 } TAPE_PREPARE, *PTAPE_PREPARE;
03449 
03450 typedef struct _TAPE_SET_DRIVE_PARAMETERS {
03451   BOOLEAN ECC;
03452   BOOLEAN Compression;
03453   BOOLEAN DataPadding;
03454   BOOLEAN ReportSetmarks;
03455   DWORD EOTWarningZoneSize;
03456 } TAPE_SET_DRIVE_PARAMETERS, *PTAPE_SET_DRIVE_PARAMETERS;
03457 
03458 typedef struct _TAPE_SET_MEDIA_PARAMETERS {
03459   DWORD BlockSize;
03460 } TAPE_SET_MEDIA_PARAMETERS,*PTAPE_SET_MEDIA_PARAMETERS;
03461 
03462 typedef struct _TAPE_SET_POSITION {
03463   DWORD Method;
03464   DWORD Partition;
03465   LARGE_INTEGER Offset;
03466   BOOLEAN Immediate;
03467 } TAPE_SET_POSITION, *PTAPE_SET_POSITION;
03468 
03469 typedef struct _TAPE_WRITE_MARKS {
03470   DWORD Type;
03471   DWORD Count;
03472   BOOLEAN Immediate;
03473 } TAPE_WRITE_MARKS, *PTAPE_WRITE_MARKS;
03474 
03475 typedef struct _TAPE_CREATE_PARTITION {
03476   DWORD Method;
03477   DWORD Count;
03478   DWORD Size;
03479 } TAPE_CREATE_PARTITION, *PTAPE_CREATE_PARTITION;
03480 
03481 typedef struct _MEMORY_BASIC_INFORMATION {
03482   PVOID BaseAddress;
03483   PVOID AllocationBase;
03484   DWORD AllocationProtect;
03485   SIZE_T RegionSize;
03486   DWORD State;
03487   DWORD Protect;
03488   DWORD Type;
03489 } MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
03490 
03491 typedef struct _MESSAGE_RESOURCE_ENTRY {
03492   WORD Length;
03493   WORD Flags;
03494   BYTE Text[1];
03495 } MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY;
03496 
03497 typedef struct _MESSAGE_RESOURCE_BLOCK {
03498   DWORD LowId;
03499   DWORD HighId;
03500   DWORD OffsetToEntries;
03501 } MESSAGE_RESOURCE_BLOCK, *PMESSAGE_RESOURCE_BLOCK;
03502 
03503 typedef struct _MESSAGE_RESOURCE_DATA {
03504   DWORD NumberOfBlocks;
03505   MESSAGE_RESOURCE_BLOCK Blocks[1];
03506 } MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
03507 
03508 typedef struct _LIST_ENTRY {
03509   struct _LIST_ENTRY *Flink;
03510   struct _LIST_ENTRY *Blink;
03511 } LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;
03512 
03513 typedef struct _LIST_ENTRY32 {
03514   DWORD Flink;
03515   DWORD Blink;
03516 } LIST_ENTRY32,*PLIST_ENTRY32;
03517 
03518 typedef struct _LIST_ENTRY64 {
03519   ULONGLONG Flink;
03520   ULONGLONG Blink;
03521 } LIST_ENTRY64,*PLIST_ENTRY64;
03522 
03523 typedef struct _SINGLE_LIST_ENTRY {
03524   struct _SINGLE_LIST_ENTRY *Next;
03525 } SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
03526 
03527 //
03528 // Slist Header
03529 //
03530 #ifndef _SLIST_HEADER_
03531 #define _SLIST_HEADER_
03532 
03533 #if defined(_WIN64)
03534 
03535 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
03536   struct _SLIST_ENTRY *Next;
03537 } SLIST_ENTRY, *PSLIST_ENTRY;
03538 
03539 typedef struct _SLIST_ENTRY32 {
03540   DWORD Next;
03541 } SLIST_ENTRY32, *PSLIST_ENTRY32;
03542 
03543 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {
03544   _ANONYMOUS_STRUCT struct {
03545     ULONGLONG Alignment;
03546     ULONGLONG Region;
03547   } DUMMYSTRUCTNAME;
03548   struct {
03549     ULONGLONG Depth:16;
03550     ULONGLONG Sequence:9;
03551     ULONGLONG NextEntry:39;
03552     ULONGLONG HeaderType:1;
03553     ULONGLONG Init:1;
03554     ULONGLONG Reserved:59;
03555     ULONGLONG Region:3;
03556   } Header8;
03557   struct {
03558     ULONGLONG Depth:16;
03559     ULONGLONG Sequence:48;
03560     ULONGLONG HeaderType:1;
03561     ULONGLONG Init:1;
03562     ULONGLONG Reserved:2;
03563     ULONGLONG NextEntry:60;
03564   } Header16;
03565   struct {
03566     ULONGLONG Depth:16;
03567     ULONGLONG Sequence:48;
03568     ULONGLONG HeaderType:1;
03569     ULONGLONG Reserved:3;
03570     ULONGLONG NextEntry:60;
03571   } HeaderX64;
03572 } SLIST_HEADER, *PSLIST_HEADER;
03573 
03574 typedef union _SLIST_HEADER32{
03575   ULONGLONG Alignment;
03576   _ANONYMOUS_STRUCT struct {
03577     SLIST_ENTRY32 Next;
03578     WORD Depth;
03579     WORD Sequence;
03580   } DUMMYSTRUCTNAME;
03581 } SLIST_HEADER32, *PSLIST_HEADER32;
03582 
03583 #else
03584 
03585 #define SLIST_ENTRY SINGLE_LIST_ENTRY
03586 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
03587 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
03588 
03589 typedef SLIST_ENTRY SLIST_ENTRY32, *PSLIST_ENTRY32;
03590 
03591 typedef union _SLIST_HEADER {
03592   ULONGLONG Alignment;
03593   _ANONYMOUS_STRUCT struct {
03594     SLIST_ENTRY Next;
03595     WORD Depth;
03596     WORD Sequence;
03597   } DUMMYSTRUCTNAME;
03598 } SLIST_HEADER, *PSLIST_HEADER;
03599 
03600 typedef SLIST_HEADER SLIST_HEADER32, *PSLIST_HEADER32;
03601 
03602 #endif /* defined(_WIN64) */
03603 
03604 #endif /* _SLIST_HEADER_ */
03605 
03606 NTSYSAPI
03607 VOID
03608 NTAPI
03609 RtlInitializeSListHead (
03610     IN PSLIST_HEADER ListHead
03611     );
03612 
03613 NTSYSAPI
03614 PSLIST_ENTRY
03615 NTAPI
03616 RtlFirstEntrySList (
03617     IN const SLIST_HEADER *ListHead
03618     );
03619 
03620 NTSYSAPI
03621 PSLIST_ENTRY
03622 NTAPI
03623 RtlInterlockedPopEntrySList (
03624     IN PSLIST_HEADER ListHead
03625     );
03626 
03627 NTSYSAPI
03628 PSLIST_ENTRY
03629 NTAPI
03630 RtlInterlockedPushEntrySList (
03631     IN PSLIST_HEADER ListHead,
03632     IN PSLIST_ENTRY ListEntry
03633     );
03634 
03635 NTSYSAPI
03636 PSLIST_ENTRY
03637 NTAPI
03638 RtlInterlockedFlushSList (
03639     IN PSLIST_HEADER ListHead
03640     );
03641 
03642 NTSYSAPI
03643 WORD
03644 NTAPI
03645 RtlQueryDepthSList (
03646     IN PSLIST_HEADER ListHead
03647     );
03648 
03649 typedef struct _RTL_CRITICAL_SECTION_DEBUG {
03650   WORD Type;
03651   WORD CreatorBackTraceIndex;
03652   struct _RTL_CRITICAL_SECTION *CriticalSection;
03653   LIST_ENTRY ProcessLocksList;
03654   DWORD EntryCount;
03655   DWORD ContentionCount;
03656   DWORD Flags;
03657   WORD CreatorBackTraceIndexHigh;
03658   WORD SpareWORD;
03659 } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
03660 
03661 #include "pshpack8.h"
03662 typedef struct _RTL_CRITICAL_SECTION {
03663   PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
03664   LONG LockCount;
03665   LONG RecursionCount;
03666   HANDLE OwningThread;
03667   HANDLE LockSemaphore;
03668   ULONG_PTR SpinCount;
03669 } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
03670 #include "poppack.h"
03671 
03672 NTSYSAPI
03673 WORD
03674 NTAPI
03675 RtlCaptureStackBackTrace(
03676     IN DWORD FramesToSkip,
03677     IN DWORD FramesToCapture,
03678     OUT PVOID *BackTrace,
03679     OUT PDWORD BackTraceHash OPTIONAL
03680 );
03681 
03682 NTSYSAPI
03683 VOID
03684 NTAPI
03685 RtlCaptureContext(
03686     PCONTEXT ContextRecord
03687 );
03688 
03689 NTSYSAPI
03690 PVOID
03691 NTAPI
03692 RtlPcToFileHeader(
03693     IN PVOID PcValue,
03694     PVOID* BaseOfImage
03695 );
03696 
03697 NTSYSAPI
03698 VOID
03699 NTAPI
03700 RtlUnwind (
03701     IN PVOID TargetFrame OPTIONAL,
03702     IN PVOID TargetIp OPTIONAL,
03703     IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
03704     IN PVOID ReturnValue
03705     );
03706 
03707 #define RTL_SRWLOCK_INIT {0}
03708 
03709 typedef struct _RTL_SRWLOCK {
03710   PVOID Ptr;
03711 } RTL_SRWLOCK, *PRTL_SRWLOCK;
03712 
03713 #define RTL_CONDITION_VARIABLE_INIT {0}
03714 #define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED  0x1
03715 
03716 typedef struct _RTL_CONDITION_VARIABLE {
03717   PVOID Ptr;
03718 } RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE;
03719 
03720 typedef LONG
03721 (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
03722     struct _EXCEPTION_POINTERS *ExceptionInfo
03723 );
03724 
03725 typedef struct _PROCESSOR_NUMBER {
03726   WORD Group;
03727   BYTE Number;
03728   BYTE Reserved;
03729 } PROCESSOR_NUMBER, *PPROCESSOR_NUMBER;
03730 
03731 typedef struct _GROUP_AFFINITY {
03732   KAFFINITY Mask;
03733   WORD Group;
03734   WORD Reserved[3];
03735 } GROUP_AFFINITY, *PGROUP_AFFINITY;
03736 
03737 typedef struct _EVENTLOGRECORD {
03738   DWORD Length;
03739   DWORD Reserved;
03740   DWORD RecordNumber;
03741   DWORD TimeGenerated;
03742   DWORD TimeWritten;
03743   DWORD EventID;
03744   WORD EventType;
03745   WORD NumStrings;
03746   WORD EventCategory;
03747   WORD ReservedFlags;
03748   DWORD ClosingRecordNumber;
03749   DWORD StringOffset;
03750   DWORD UserSidLength;
03751   DWORD UserSidOffset;
03752   DWORD DataLength;
03753   DWORD DataOffset;
03754 } EVENTLOGRECORD, *PEVENTLOGRECORD;
03755 
03756 typedef struct _OSVERSIONINFOA {
03757   DWORD dwOSVersionInfoSize;
03758   DWORD dwMajorVersion;
03759   DWORD dwMinorVersion;
03760   DWORD dwBuildNumber;
03761   DWORD dwPlatformId;
03762   CHAR szCSDVersion[128];
03763 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
03764 
03765 typedef struct _OSVERSIONINFOW {
03766   DWORD dwOSVersionInfoSize;
03767   DWORD dwMajorVersion;
03768   DWORD dwMinorVersion;
03769   DWORD dwBuildNumber;
03770   DWORD dwPlatformId;
03771   WCHAR szCSDVersion[128];
03772 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
03773 
03774 typedef struct _OSVERSIONINFOEXA {
03775   DWORD dwOSVersionInfoSize;
03776   DWORD dwMajorVersion;
03777   DWORD dwMinorVersion;
03778   DWORD dwBuildNumber;
03779   DWORD dwPlatformId;
03780   CHAR szCSDVersion[128];
03781   WORD wServicePackMajor;
03782   WORD wServicePackMinor;
03783   WORD wSuiteMask;
03784   BYTE wProductType;
03785   BYTE wReserved;
03786 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
03787 
03788 typedef struct _OSVERSIONINFOEXW {
03789   DWORD dwOSVersionInfoSize;
03790   DWORD dwMajorVersion;
03791   DWORD dwMinorVersion;
03792   DWORD dwBuildNumber;
03793   DWORD dwPlatformId;
03794   WCHAR szCSDVersion[128];
03795   WORD wServicePackMajor;
03796   WORD wServicePackMinor;
03797   WORD wSuiteMask;
03798   BYTE wProductType;
03799   BYTE wReserved;
03800 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
03801 
03802 #include <pshpack2.h>
03803 
03804 typedef struct _IMAGE_VXD_HEADER {
03805   WORD e32_magic;
03806   BYTE e32_border;
03807   BYTE e32_worder;
03808   DWORD e32_level;
03809   WORD e32_cpu;
03810   WORD e32_os;
03811   DWORD e32_ver;
03812   DWORD e32_mflags;
03813   DWORD e32_mpages;
03814   DWORD e32_startobj;
03815   DWORD e32_eip;
03816   DWORD e32_stackobj;
03817   DWORD e32_esp;
03818   DWORD e32_pagesize;
03819   DWORD e32_lastpagesize;
03820   DWORD e32_fixupsize;
03821   DWORD e32_fixupsum;
03822   DWORD e32_ldrsize;
03823   DWORD e32_ldrsum;
03824   DWORD e32_objtab;
03825   DWORD e32_objcnt;
03826   DWORD e32_objmap;
03827   DWORD e32_itermap;
03828   DWORD e32_rsrctab;
03829   DWORD e32_rsrccnt;
03830   DWORD e32_restab;
03831   DWORD e32_enttab;
03832   DWORD e32_dirtab;
03833   DWORD e32_dircnt;
03834   DWORD e32_fpagetab;
03835   DWORD e32_frectab;
03836   DWORD e32_impmod;
03837   DWORD e32_impmodcnt;
03838   DWORD e32_impproc;
03839   DWORD e32_pagesum;
03840   DWORD e32_datapage;
03841   DWORD e32_preload;
03842   DWORD e32_nrestab;
03843   DWORD e32_cbnrestab;
03844   DWORD e32_nressum;
03845   DWORD e32_autodata;
03846   DWORD e32_debuginfo;
03847   DWORD e32_debuglen;
03848   DWORD e32_instpreload;
03849   DWORD e32_instdemand;
03850   DWORD e32_heapsize;
03851   BYTE e32_res3[12];
03852   DWORD e32_winresoff;
03853   DWORD e32_winreslen;
03854   WORD e32_devid;
03855   WORD e32_ddkver;
03856 } IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER;
03857 
03858 typedef struct _IMAGE_DOS_HEADER {
03859   WORD e_magic;
03860   WORD e_cblp;
03861   WORD e_cp;
03862   WORD e_crlc;
03863   WORD e_cparhdr;
03864   WORD e_minalloc;
03865   WORD e_maxalloc;
03866   WORD e_ss;
03867   WORD e_sp;
03868   WORD e_csum;
03869   WORD e_ip;
03870   WORD e_cs;
03871   WORD e_lfarlc;
03872   WORD e_ovno;
03873   WORD e_res[4];
03874   WORD e_oemid;
03875   WORD e_oeminfo;
03876   WORD e_res2[10];
03877   LONG e_lfanew;
03878 } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
03879 
03880 typedef struct _IMAGE_OS2_HEADER {
03881   WORD ne_magic;
03882   CHAR ne_ver;
03883   CHAR ne_rev;
03884   WORD ne_enttab;
03885   WORD ne_cbenttab;
03886   LONG ne_crc;
03887   WORD ne_flags;
03888   WORD ne_autodata;
03889   WORD ne_heap;
03890   WORD ne_stack;
03891   LONG ne_csip;
03892   LONG ne_sssp;
03893   WORD ne_cseg;
03894   WORD ne_cmod;
03895   WORD ne_cbnrestab;
03896   WORD ne_segtab;
03897   WORD ne_rsrctab;
03898   WORD ne_restab;
03899   WORD ne_modtab;
03900   WORD ne_imptab;
03901   LONG ne_nrestab;
03902   WORD ne_cmovent;
03903   WORD ne_align;
03904   WORD ne_cres;
03905   BYTE ne_exetyp;
03906   BYTE ne_flagsothers;
03907   WORD ne_pretthunks;
03908   WORD ne_psegrefbytes;
03909   WORD ne_swaparea;
03910   WORD ne_expver;
03911 } IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER;
03912 
03913 #include <poppack.h>
03914 
03915 typedef struct _IMAGE_FILE_HEADER {
03916   WORD Machine;
03917   WORD NumberOfSections;
03918   DWORD TimeDateStamp;
03919   DWORD PointerToSymbolTable;
03920   DWORD NumberOfSymbols;
03921   WORD SizeOfOptionalHeader;
03922   WORD Characteristics;
03923 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
03924 
03925 typedef struct _IMAGE_DATA_DIRECTORY {
03926   DWORD VirtualAddress;
03927   DWORD Size;
03928 } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
03929 
03930 typedef struct _IMAGE_OPTIONAL_HEADER32 {
03931   WORD Magic;
03932   BYTE MajorLinkerVersion;
03933   BYTE MinorLinkerVersion;
03934   DWORD SizeOfCode;
03935   DWORD SizeOfInitializedData;
03936   DWORD SizeOfUninitializedData;
03937   DWORD AddressOfEntryPoint;
03938   DWORD BaseOfCode;
03939   DWORD BaseOfData;
03940   DWORD ImageBase;
03941   DWORD SectionAlignment;
03942   DWORD FileAlignment;
03943   WORD MajorOperatingSystemVersion;
03944   WORD MinorOperatingSystemVersion;
03945   WORD MajorImageVersion;
03946   WORD MinorImageVersion;
03947   WORD MajorSubsystemVersion;
03948   WORD MinorSubsystemVersion;
03949   DWORD Win32VersionValue;
03950   DWORD SizeOfImage;
03951   DWORD SizeOfHeaders;
03952   DWORD CheckSum;
03953   WORD Subsystem;
03954   WORD DllCharacteristics;
03955   DWORD SizeOfStackReserve;
03956   DWORD SizeOfStackCommit;
03957   DWORD SizeOfHeapReserve;
03958   DWORD SizeOfHeapCommit;
03959   DWORD LoaderFlags;
03960   DWORD NumberOfRvaAndSizes;
03961   IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
03962 } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
03963 
03964 typedef struct _IMAGE_OPTIONAL_HEADER64 {
03965   WORD Magic;
03966   BYTE MajorLinkerVersion;
03967   BYTE MinorLinkerVersion;
03968   DWORD SizeOfCode;
03969   DWORD SizeOfInitializedData;
03970   DWORD SizeOfUninitializedData;
03971   DWORD AddressOfEntryPoint;
03972   DWORD BaseOfCode;
03973   ULONGLONG ImageBase;
03974   DWORD SectionAlignment;
03975   DWORD FileAlignment;
03976   WORD MajorOperatingSystemVersion;
03977   WORD MinorOperatingSystemVersion;
03978   WORD MajorImageVersion;
03979   WORD MinorImageVersion;
03980   WORD MajorSubsystemVersion;
03981   WORD MinorSubsystemVersion;
03982   DWORD Win32VersionValue;
03983   DWORD SizeOfImage;
03984   DWORD SizeOfHeaders;
03985   DWORD CheckSum;
03986   WORD Subsystem;
03987   WORD DllCharacteristics;
03988   ULONGLONG SizeOfStackReserve;
03989   ULONGLONG SizeOfStackCommit;
03990   ULONGLONG SizeOfHeapReserve;
03991   ULONGLONG SizeOfHeapCommit;
03992   DWORD LoaderFlags;
03993   DWORD NumberOfRvaAndSizes;
03994   IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
03995 } IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
03996 
03997 typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
03998   WORD Magic;
03999   BYTE MajorLinkerVersion;
04000   BYTE MinorLinkerVersion;
04001   DWORD SizeOfCode;
04002   DWORD SizeOfInitializedData;
04003   DWORD SizeOfUninitializedData;
04004   DWORD AddressOfEntryPoint;
04005   DWORD BaseOfCode;
04006   DWORD BaseOfData;
04007   DWORD BaseOfBss;
04008   DWORD GprMask;
04009   DWORD CprMask[4];
04010   DWORD GpValue;
04011 } IMAGE_ROM_OPTIONAL_HEADER, *PIMAGE_ROM_OPTIONAL_HEADER;
04012 
04013 typedef struct _IMAGE_NT_HEADERS32 {
04014   DWORD Signature;
04015   IMAGE_FILE_HEADER FileHeader;
04016   IMAGE_OPTIONAL_HEADER32 OptionalHeader;
04017 } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
04018 
04019 typedef struct _IMAGE_NT_HEADERS64 {
04020   DWORD Signature;
04021   IMAGE_FILE_HEADER FileHeader;
04022   IMAGE_OPTIONAL_HEADER64 OptionalHeader;
04023 } IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
04024 
04025 #ifdef _WIN64
04026 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
04027 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
04028 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
04029 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
04030 #else
04031 typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
04032 typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
04033 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
04034 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
04035 #endif
04036 
04037 typedef struct _IMAGE_ROM_HEADERS {
04038   IMAGE_FILE_HEADER FileHeader;
04039   IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
04040 } IMAGE_ROM_HEADERS, *PIMAGE_ROM_HEADERS;
04041 
04042 typedef struct _IMAGE_SECTION_HEADER {
04043   BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
04044   union {
04045     DWORD PhysicalAddress;
04046     DWORD VirtualSize;
04047   } Misc;
04048   DWORD VirtualAddress;
04049   DWORD SizeOfRawData;
04050   DWORD PointerToRawData;
04051   DWORD PointerToRelocations;
04052   DWORD PointerToLinenumbers;
04053   WORD NumberOfRelocations;
04054   WORD NumberOfLinenumbers;
04055   DWORD Characteristics;
04056 } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
04057 
04058 #include <pshpack2.h>
04059 
04060 typedef struct _IMAGE_SYMBOL {
04061   union {
04062     BYTE ShortName[8];
04063     struct {
04064       DWORD Short;
04065       DWORD Long;
04066     } Name;
04067     PBYTE LongName[2];
04068   } N;
04069   DWORD Value;
04070   SHORT SectionNumber;
04071   WORD Type;
04072   BYTE StorageClass;
04073   BYTE NumberOfAuxSymbols;
04074 } IMAGE_SYMBOL, *PIMAGE_SYMBOL;
04075 
04076 typedef struct _IMAGE_LINENUMBER {
04077   union {
04078     DWORD SymbolTableIndex;
04079     DWORD VirtualAddress;
04080   } Type;
04081   WORD Linenumber;
04082 } IMAGE_LINENUMBER, UNALIGNED *PIMAGE_LINENUMBER;
04083 
04084 typedef struct IMAGE_AUX_SYMBOL_TOKEN_DEF {
04085   BYTE bAuxType;
04086   BYTE bReserved;
04087   DWORD SymbolTableIndex;
04088   BYTE rgbReserved[12];
04089 } IMAGE_AUX_SYMBOL_TOKEN_DEF, UNALIGNED *PIMAGE_AUX_SYMBOL_TOKEN_DEF;
04090 
04091 typedef union _IMAGE_AUX_SYMBOL {
04092   struct {
04093     DWORD TagIndex;
04094     union {
04095       struct {
04096         WORD Linenumber;
04097         WORD Size;
04098       } LnSz;
04099       DWORD TotalSize;
04100     } Misc;
04101     union {
04102       struct {
04103         DWORD PointerToLinenumber;
04104         DWORD PointerToNextFunction;
04105       } Function;
04106       struct {
04107         WORD Dimension[4];
04108       } Array;
04109     } FcnAry;
04110     WORD TvIndex;
04111   } Sym;
04112   struct {
04113     BYTE Name[IMAGE_SIZEOF_SYMBOL];
04114   } File;
04115   struct {
04116     DWORD Length;
04117     WORD NumberOfRelocations;
04118     WORD NumberOfLinenumbers;
04119     DWORD CheckSum;
04120     SHORT Number;
04121     BYTE Selection;
04122     BYTE bReserved;
04123     SHORT HighNumber;
04124   } Section;
04125   IMAGE_AUX_SYMBOL_TOKEN_DEF TokenDef;
04126   struct {
04127     DWORD crc;
04128     BYTE rgbReserved[14];
04129   } CRC;
04130 } IMAGE_AUX_SYMBOL, *PIMAGE_AUX_SYMBOL;
04131 
04132 typedef struct _IMAGE_RELOCATION {
04133   _ANONYMOUS_UNION union {
04134     DWORD VirtualAddress;
04135     DWORD RelocCount;
04136   } DUMMYUNIONNAME;
04137   DWORD SymbolTableIndex;
04138   WORD Type;
04139 } IMAGE_RELOCATION, UNALIGNED *PIMAGE_RELOCATION;
04140 
04141 #include <poppack.h>
04142 
04143 #ifndef __IMAGE_COR20_HEADER_DEFINED__
04144 #define __IMAGE_COR20_HEADER_DEFINED__
04145 
04146 typedef enum ReplacesCorHdrNumericDefines {
04147   COMIMAGE_FLAGS_ILONLY = 0x00000001,
04148   COMIMAGE_FLAGS_32BITREQUIRED = 0x00000002,
04149   COMIMAGE_FLAGS_IL_LIBRARY = 0x00000004,
04150   COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,
04151   COMIMAGE_FLAGS_NATIVE_ENTRYPOINT = 0x00000010,
04152   COMIMAGE_FLAGS_TRACKDEBUGDATA = 0x00010000,
04153   COR_VERSION_MAJOR_V2 = 2,
04154   COR_VERSION_MAJOR = COR_VERSION_MAJOR_V2,
04155   COR_VERSION_MINOR = 0,
04156   COR_DELETED_NAME_LENGTH = 8,
04157   COR_VTABLEGAP_NAME_LENGTH = 8,
04158   NATIVE_TYPE_MAX_CB = 1,
04159   COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE = 0xFF,
04160   IMAGE_COR_MIH_METHODRVA = 0x01,
04161   IMAGE_COR_MIH_EHRVA = 0x02,
04162   IMAGE_COR_MIH_BASICBLOCK = 0x08,
04163   COR_VTABLE_32BIT = 0x01,
04164   COR_VTABLE_64BIT = 0x02,
04165   COR_VTABLE_FROM_UNMANAGED = 0x04,
04166   COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN = 0x08,
04167   COR_VTABLE_CALL_MOST_DERIVED = 0x10,
04168   IMAGE_COR_EATJ_THUNK_SIZE = 32,
04169   MAX_CLASS_NAME = 1024,
04170   MAX_PACKAGE_NAME = 1024
04171 } ReplacesCorHdrNumericDefines;
04172 
04173 typedef struct IMAGE_COR20_HEADER {
04174   DWORD cb;
04175   WORD MajorRuntimeVersion;
04176   WORD MinorRuntimeVersion;
04177   IMAGE_DATA_DIRECTORY MetaData;
04178   DWORD Flags;
04179   _ANONYMOUS_UNION union {
04180     DWORD EntryPointToken;
04181     DWORD EntryPointRVA;
04182   } DUMMYUNIONNAME;
04183   IMAGE_DATA_DIRECTORY Resources;
04184   IMAGE_DATA_DIRECTORY StrongNameSignature;
04185   IMAGE_DATA_DIRECTORY CodeManagerTable;
04186   IMAGE_DATA_DIRECTORY VTableFixups;
04187   IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
04188   IMAGE_DATA_DIRECTORY ManagedNativeHeader;
04189 } IMAGE_COR20_HEADER, *PIMAGE_COR20_HEADER;
04190 
04191 #endif /* __IMAGE_COR20_HEADER_DEFINED__ */
04192 
04193 typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
04194   DWORD NumberOfSymbols;
04195   DWORD LvaToFirstSymbol;
04196   DWORD NumberOfLinenumbers;
04197   DWORD LvaToFirstLinenumber;
04198   DWORD RvaToFirstByteOfCode;
04199   DWORD RvaToLastByteOfCode;
04200   DWORD RvaToFirstByteOfData;
04201   DWORD RvaToLastByteOfData;
04202 } IMAGE_COFF_SYMBOLS_HEADER, *PIMAGE_COFF_SYMBOLS_HEADER;
04203 
04204 typedef struct _IMAGE_BASE_RELOCATION {
04205   DWORD VirtualAddress;
04206   DWORD SizeOfBlock;
04207 } IMAGE_BASE_RELOCATION, UNALIGNED *PIMAGE_BASE_RELOCATION;
04208 
04209 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
04210   BYTE Name[16];
04211   BYTE Date[12];
04212   BYTE UserID[6];
04213   BYTE GroupID[6];
04214   BYTE Mode[8];
04215   BYTE Size[10];
04216   BYTE EndHeader[2];
04217 } IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER;
04218 
04219 typedef struct _IMAGE_EXPORT_DIRECTORY {
04220   DWORD Characteristics;
04221   DWORD TimeDateStamp;
04222   WORD MajorVersion;
04223   WORD MinorVersion;
04224   DWORD Name;
04225   DWORD Base;
04226   DWORD NumberOfFunctions;
04227   DWORD NumberOfNames;
04228   DWORD AddressOfFunctions;
04229   DWORD AddressOfNames;
04230   DWORD AddressOfNameOrdinals;
04231 } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
04232 
04233 typedef struct _IMAGE_IMPORT_BY_NAME {
04234   WORD Hint;
04235   BYTE Name[1];
04236 } IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
04237 
04238 #include <pshpack8.h>
04239 typedef struct _IMAGE_THUNK_DATA64 {
04240   union {
04241     ULONGLONG ForwarderString;
04242     ULONGLONG Function;
04243     ULONGLONG Ordinal;
04244     ULONGLONG AddressOfData;
04245   } u1;
04246 } IMAGE_THUNK_DATA64, *PIMAGE_THUNK_DATA64;
04247 #include <poppack.h>
04248 
04249 typedef struct _IMAGE_THUNK_DATA32 {
04250   union {
04251     DWORD ForwarderString;
04252     DWORD Function;
04253     DWORD Ordinal;
04254     DWORD AddressOfData;
04255   } u1;
04256 } IMAGE_THUNK_DATA32, *PIMAGE_THUNK_DATA32;
04257 
04258 #define IMAGE_ORDINAL_FLAG64 0x8000000000000000ULL
04259 #define IMAGE_ORDINAL_FLAG32 0x80000000
04260 #define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffff)
04261 #define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff)
04262 #define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64)!=0)
04263 #define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32)!=0)
04264 
04265 typedef VOID
04266 (NTAPI *PIMAGE_TLS_CALLBACK)(PVOID DllHandle,DWORD Reason,PVOID Reserved);
04267 
04268 typedef struct _IMAGE_TLS_DIRECTORY64 {
04269   ULONGLONG StartAddressOfRawData;
04270   ULONGLONG EndAddressOfRawData;
04271   ULONGLONG AddressOfIndex;
04272   ULONGLONG AddressOfCallBacks;
04273   DWORD SizeOfZeroFill;
04274   DWORD Characteristics;
04275 } IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64;
04276 
04277 typedef struct _IMAGE_TLS_DIRECTORY32 {
04278   DWORD StartAddressOfRawData;
04279   DWORD EndAddressOfRawData;
04280   DWORD AddressOfIndex;
04281   DWORD AddressOfCallBacks;
04282   DWORD SizeOfZeroFill;
04283   DWORD Characteristics;
04284 } IMAGE_TLS_DIRECTORY32, *PIMAGE_TLS_DIRECTORY32;
04285 
04286 #ifdef _WIN64
04287 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
04288 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
04289 typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;
04290 typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;
04291 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
04292 typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY;
04293 typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY;
04294 #else
04295 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
04296 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
04297 typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA;
04298 typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA;
04299 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
04300 typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY;
04301 typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY;
04302 #endif
04303 
04304 typedef struct _IMAGE_IMPORT_DESCRIPTOR {
04305   _ANONYMOUS_UNION union {
04306     DWORD Characteristics;
04307     DWORD OriginalFirstThunk;
04308   } DUMMYUNIONNAME;
04309   DWORD TimeDateStamp;
04310   DWORD ForwarderChain;
04311   DWORD Name;
04312   DWORD FirstThunk;
04313 } IMAGE_IMPORT_DESCRIPTOR, UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR;
04314 
04315 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
04316   DWORD TimeDateStamp;
04317   WORD OffsetModuleName;
04318   WORD NumberOfModuleForwarderRefs;
04319 } IMAGE_BOUND_IMPORT_DESCRIPTOR, *PIMAGE_BOUND_IMPORT_DESCRIPTOR;
04320 
04321 typedef struct _IMAGE_BOUND_FORWARDER_REF {
04322   DWORD TimeDateStamp;
04323   WORD OffsetModuleName;
04324   WORD Reserved;
04325 } IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF;
04326 
04327 typedef struct _IMAGE_RESOURCE_DIRECTORY {
04328   DWORD Characteristics;
04329   DWORD TimeDateStamp;
04330   WORD MajorVersion;
04331   WORD MinorVersion;
04332   WORD NumberOfNamedEntries;
04333   WORD NumberOfIdEntries;
04334 } IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;
04335 
04336 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
04337   _ANONYMOUS_UNION union {
04338     _ANONYMOUS_STRUCT struct {
04339       DWORD NameOffset:31;
04340       DWORD NameIsString:1;
04341     } DUMMYSTRUCTNAME1;
04342     DWORD Name;
04343     WORD Id;
04344   } DUMMYUNIONNAME1;
04345   _ANONYMOUS_UNION union {
04346     DWORD OffsetToData;
04347     _ANONYMOUS_STRUCT struct {
04348       DWORD OffsetToDirectory:31;
04349       DWORD DataIsDirectory:1;
04350     } DUMMYSTRUCTNAME3;
04351   } DUMMYUNIONNAME2;
04352 } IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;
04353 
04354 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
04355   WORD Length;
04356   CHAR NameString[1];
04357 } IMAGE_RESOURCE_DIRECTORY_STRING, *PIMAGE_RESOURCE_DIRECTORY_STRING;
04358 
04359 typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
04360   WORD Length;
04361   WCHAR NameString[1];
04362 } IMAGE_RESOURCE_DIR_STRING_U, *PIMAGE_RESOURCE_DIR_STRING_U;
04363 
04364 typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
04365   DWORD OffsetToData;
04366   DWORD Size;
04367   DWORD CodePage;
04368   DWORD Reserved;
04369 } IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY;
04370 
04371 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 {
04372   DWORD Size;
04373   DWORD TimeDateStamp;
04374   WORD MajorVersion;
04375   WORD MinorVersion;
04376   DWORD GlobalFlagsClear;
04377   DWORD GlobalFlagsSet;
04378   DWORD CriticalSectionDefaultTimeout;
04379   DWORD DeCommitFreeBlockThreshold;
04380   DWORD DeCommitTotalFreeThreshold;
04381   DWORD LockPrefixTable;
04382   DWORD MaximumAllocationSize;
04383   DWORD VirtualMemoryThreshold;
04384   DWORD ProcessHeapFlags;
04385   DWORD ProcessAffinityMask;
04386   WORD CSDVersion;
04387   WORD Reserved1;
04388   DWORD EditList;
04389   DWORD SecurityCookie;
04390   DWORD SEHandlerTable;
04391   DWORD SEHandlerCount;
04392 } IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32;
04393 
04394 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64 {
04395   DWORD Size;
04396   DWORD TimeDateStamp;
04397   WORD MajorVersion;
04398   WORD MinorVersion;
04399   DWORD GlobalFlagsClear;
04400   DWORD GlobalFlagsSet;
04401   DWORD CriticalSectionDefaultTimeout;
04402   ULONGLONG DeCommitFreeBlockThreshold;
04403   ULONGLONG DeCommitTotalFreeThreshold;
04404   ULONGLONG LockPrefixTable;
04405   ULONGLONG MaximumAllocationSize;
04406   ULONGLONG VirtualMemoryThreshold;
04407   ULONGLONG ProcessAffinityMask;
04408   DWORD ProcessHeapFlags;
04409   WORD CSDVersion;
04410   WORD Reserved1;
04411   ULONGLONG EditList;
04412   ULONGLONG SecurityCookie;
04413   ULONGLONG SEHandlerTable;
04414   ULONGLONG SEHandlerCount;
04415 } IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64;
04416 
04417 #ifdef _WIN64
04418 typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY;
04419 typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY;
04420 #else
04421 typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY;
04422 typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY;
04423 #endif
04424 
04425 typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
04426   DWORD BeginAddress;
04427   DWORD EndAddress;
04428   DWORD UnwindInfoAddress;
04429 } IMAGE_RUNTIME_FUNCTION_ENTRY, *PIMAGE_RUNTIME_FUNCTION_ENTRY;
04430 
04431 typedef struct _IMAGE_DEBUG_DIRECTORY {
04432   DWORD Characteristics;
04433   DWORD TimeDateStamp;
04434   WORD MajorVersion;
04435   WORD MinorVersion;
04436   DWORD Type;
04437   DWORD SizeOfData;
04438   DWORD AddressOfRawData;
04439   DWORD PointerToRawData;
04440 } IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
04441 
04442 typedef struct _FPO_DATA {
04443   DWORD ulOffStart;
04444   DWORD cbProcSize;
04445   DWORD cdwLocals;
04446   WORD cdwParams;
04447   WORD cbProlog:8;
04448   WORD cbRegs:3;
04449   WORD fHasSEH:1;
04450   WORD fUseBP:1;
04451   WORD reserved:1;
04452   WORD cbFrame:2;
04453 } FPO_DATA, *PFPO_DATA;
04454 
04455 typedef struct _IMAGE_DEBUG_MISC {
04456   DWORD DataType;
04457   DWORD Length;
04458   BOOLEAN Unicode;
04459   BYTE Reserved[3];
04460   BYTE Data[1];
04461 } IMAGE_DEBUG_MISC, *PIMAGE_DEBUG_MISC;
04462 
04463 typedef struct _IMAGE_FUNCTION_ENTRY {
04464   DWORD StartingAddress;
04465   DWORD EndingAddress;
04466   DWORD EndOfPrologue;
04467 } IMAGE_FUNCTION_ENTRY, *PIMAGE_FUNCTION_ENTRY;
04468 
04469 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
04470   WORD Signature;
04471   WORD Flags;
04472   WORD Machine;
04473   WORD Characteristics;
04474   DWORD TimeDateStamp;
04475   DWORD CheckSum;
04476   DWORD ImageBase;
04477   DWORD SizeOfImage;
04478   DWORD NumberOfSections;
04479   DWORD ExportedNamesSize;
04480   DWORD DebugDirectorySize;
04481   DWORD SectionAlignment;
04482   DWORD Reserved[2];
04483 } IMAGE_SEPARATE_DEBUG_HEADER, *PIMAGE_SEPARATE_DEBUG_HEADER;
04484 
04485 typedef enum _CM_SERVICE_NODE_TYPE {
04486   DriverType = SERVICE_KERNEL_DRIVER,
04487   FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
04488   Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
04489   Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
04490   AdapterType = SERVICE_ADAPTER,
04491   RecognizerType = SERVICE_RECOGNIZER_DRIVER
04492 } SERVICE_NODE_TYPE;
04493 
04494 typedef enum _CM_SERVICE_LOAD_TYPE {
04495   BootLoad = SERVICE_BOOT_START,
04496   SystemLoad = SERVICE_SYSTEM_START,
04497   AutoLoad = SERVICE_AUTO_START,
04498   DemandLoad = SERVICE_DEMAND_START,
04499   DisableLoad = SERVICE_DISABLED
04500 } SERVICE_LOAD_TYPE;
04501 
04502 typedef enum _CM_ERROR_CONTROL_TYPE {
04503   IgnoreError = SERVICE_ERROR_IGNORE,
04504   NormalError = SERVICE_ERROR_NORMAL,
04505   SevereError = SERVICE_ERROR_SEVERE,
04506   CriticalError = SERVICE_ERROR_CRITICAL
04507 } SERVICE_ERROR_TYPE;
04508 
04509 typedef struct _NT_TIB {
04510   struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
04511   PVOID StackBase;
04512   PVOID StackLimit;
04513   PVOID SubSystemTib;
04514   _ANONYMOUS_UNION union {
04515     PVOID FiberData;
04516     DWORD Version;
04517   } DUMMYUNIONNAME;
04518   PVOID ArbitraryUserPointer;
04519   struct _NT_TIB *Self;
04520 } NT_TIB,*PNT_TIB;
04521 
04522 typedef struct _NT_TIB32 {
04523   DWORD ExceptionList;
04524   DWORD StackBase;
04525   DWORD StackLimit;
04526   DWORD SubSystemTib;
04527   _ANONYMOUS_UNION union {
04528     DWORD FiberData;
04529     DWORD Version;
04530   } DUMMYUNIONNAME;
04531   DWORD ArbitraryUserPointer;
04532   DWORD Self;
04533 } NT_TIB32,*PNT_TIB32;
04534 
04535 typedef struct _NT_TIB64 {
04536   DWORD64 ExceptionList;
04537   DWORD64 StackBase;
04538   DWORD64 StackLimit;
04539   DWORD64 SubSystemTib;
04540   _ANONYMOUS_UNION union {
04541     DWORD64 FiberData;
04542     DWORD Version;
04543   } DUMMYUNIONNAME;
04544   DWORD64 ArbitraryUserPointer;
04545   DWORD64 Self;
04546 } NT_TIB64,*PNT_TIB64;
04547 
04548 typedef struct _REPARSE_GUID_DATA_BUFFER {
04549   DWORD ReparseTag;
04550   WORD ReparseDataLength;
04551   WORD Reserved;
04552   GUID ReparseGuid;
04553   struct {
04554     BYTE DataBuffer[1];
04555   } GenericReparseBuffer;
04556 } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
04557 
04558 typedef struct _REPARSE_POINT_INFORMATION {
04559     WORD   ReparseDataLength;
04560     WORD   UnparsedNameLength;
04561 } REPARSE_POINT_INFORMATION, *PREPARSE_POINT_INFORMATION;
04562 
04563 typedef union _FILE_SEGMENT_ELEMENT {
04564   PVOID64 Buffer;
04565   ULONGLONG Alignment;
04566 } FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
04567 
04568 /* JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags constants */
04569 #define JOB_OBJECT_LIMIT_WORKINGSET                 0x0001
04570 #define JOB_OBJECT_LIMIT_PROCESS_TIME               0x0002
04571 #define JOB_OBJECT_LIMIT_JOB_TIME                   0x0004
04572 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS             0x0008
04573 #define JOB_OBJECT_LIMIT_AFFINITY                   0x0010
04574 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS             0x0020
04575 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME          0x0040
04576 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS           0x0080
04577 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY             0x0100
04578 #define JOB_OBJECT_LIMIT_JOB_MEMORY                 0x0200
04579 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x0400
04580 #define JOB_OBJECT_BREAKAWAY_OK                     0x0800
04581 #define JOB_OBJECT_SILENT_BREAKAWAY                 0x1000
04582 
04583 /* JOBOBJECT_BASIC_UI_RESTRICTIONS.UIRestrictionsClass constants */
04584 #define JOB_OBJECT_UILIMIT_HANDLES          0x0001
04585 #define JOB_OBJECT_UILIMIT_READCLIPBOARD    0x0002
04586 #define JOB_OBJECT_UILIMIT_WRITECLIPBOARD   0x0004
04587 #define JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x0008
04588 #define JOB_OBJECT_UILIMIT_DISPLAYSETTINGS  0x0010
04589 #define JOB_OBJECT_UILIMIT_GLOBALATOMS      0x0020
04590 #define JOB_OBJECT_UILIMIT_DESKTOP          0x0040
04591 #define JOB_OBJECT_UILIMIT_EXITWINDOWS      0x0080
04592 
04593 /* JOBOBJECT_SECURITY_LIMIT_INFORMATION.SecurityLimitFlags constants */
04594 #define JOB_OBJECT_SECURITY_NO_ADMIN          0x0001
04595 #define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN  0x0002
04596 #define JOB_OBJECT_SECURITY_ONLY_TOKEN        0x0004
04597 #define JOB_OBJECT_SECURITY_FILTER_TOKENS     0x0008
04598 
04599 /* JOBOBJECT_END_OF_JOB_TIME_INFORMATION.EndOfJobTimeAction constants */
04600 #define JOB_OBJECT_TERMINATE_AT_END_OF_JOB  0
04601 #define JOB_OBJECT_POST_AT_END_OF_JOB       1
04602 
04603 #define JOB_OBJECT_MSG_END_OF_JOB_TIME        1
04604 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME    2
04605 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT   3
04606 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO    4
04607 #define JOB_OBJECT_MSG_NEW_PROCESS            6
04608 #define JOB_OBJECT_MSG_EXIT_PROCESS           7
04609 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS  8
04610 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT   9
04611 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT       10
04612 
04613 #define JOB_OBJECT_ASSIGN_PROCESS           1
04614 #define JOB_OBJECT_SET_ATTRIBUTES           2
04615 #define JOB_OBJECT_QUERY                    4
04616 #define JOB_OBJECT_TERMINATE                8
04617 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES  16
04618 #define JOB_OBJECT_ALL_ACCESS               (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|31)
04619 
04620 typedef enum _JOBOBJECTINFOCLASS {
04621   JobObjectBasicAccountingInformation = 1,
04622   JobObjectBasicLimitInformation,
04623   JobObjectBasicProcessIdList,
04624   JobObjectBasicUIRestrictions,
04625   JobObjectSecurityLimitInformation,
04626   JobObjectEndOfJobTimeInformation,
04627   JobObjectAssociateCompletionPortInformation,
04628   JobObjectBasicAndIoAccountingInformation,
04629   JobObjectExtendedLimitInformation,
04630   JobObjectJobSetInformation,
04631   JobObjectGroupInformation,
04632   MaxJobObjectInfoClass
04633 } JOBOBJECTINFOCLASS;
04634 
04635 typedef struct _JOB_SET_ARRAY {
04636   HANDLE JobHandle;
04637   DWORD MemberLevel;
04638   DWORD Flags;
04639 } JOB_SET_ARRAY, *PJOB_SET_ARRAY;
04640 
04641 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
04642   LARGE_INTEGER TotalUserTime;
04643   LARGE_INTEGER TotalKernelTime;
04644   LARGE_INTEGER ThisPeriodTotalUserTime;
04645   LARGE_INTEGER ThisPeriodTotalKernelTime;
04646   DWORD TotalPageFaultCount;
04647   DWORD TotalProcesses;
04648   DWORD ActiveProcesses;
04649   DWORD TotalTerminatedProcesses;
04650 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
04651 
04652 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
04653   LARGE_INTEGER PerProcessUserTimeLimit;
04654   LARGE_INTEGER PerJobUserTimeLimit;
04655   DWORD LimitFlags;
04656   SIZE_T MinimumWorkingSetSize;
04657   SIZE_T MaximumWorkingSetSize;
04658   DWORD ActiveProcessLimit;
04659   ULONG_PTR Affinity;
04660   DWORD PriorityClass;
04661   DWORD SchedulingClass;
04662 } JOBOBJECT_BASIC_LIMIT_INFORMATION,*PJOBOBJECT_BASIC_LIMIT_INFORMATION;
04663 
04664 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {
04665   DWORD NumberOfAssignedProcesses;
04666   DWORD NumberOfProcessIdsInList;
04667   ULONG_PTR ProcessIdList[1];
04668 } JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST;
04669 
04670 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
04671   DWORD UIRestrictionsClass;
04672 } JOBOBJECT_BASIC_UI_RESTRICTIONS,*PJOBOBJECT_BASIC_UI_RESTRICTIONS;
04673 
04674 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
04675   DWORD SecurityLimitFlags;
04676   HANDLE JobToken;
04677   PTOKEN_GROUPS SidsToDisable;
04678   PTOKEN_PRIVILEGES PrivilegesToDelete;
04679   PTOKEN_GROUPS RestrictedSids;
04680 } JOBOBJECT_SECURITY_LIMIT_INFORMATION,*PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
04681 
04682 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
04683   DWORD EndOfJobTimeAction;
04684 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION,*PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
04685 
04686 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
04687   PVOID CompletionKey;
04688   HANDLE CompletionPort;
04689 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT,*PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
04690 
04691 typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
04692   JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
04693   IO_COUNTERS IoInfo;
04694 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
04695 
04696 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
04697   JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
04698   IO_COUNTERS IoInfo;
04699   SIZE_T ProcessMemoryLimit;
04700   SIZE_T JobMemoryLimit;
04701   SIZE_T PeakProcessMemoryUsed;
04702   SIZE_T PeakJobMemoryUsed;
04703 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION,*PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
04704 
04705 typedef struct _JOBOBJECT_JOBSET_INFORMATION {
04706   DWORD MemberLevel;
04707 } JOBOBJECT_JOBSET_INFORMATION,*PJOBOBJECT_JOBSET_INFORMATION;
04708 
04709 /* Fixme: Making these defines conditional on WINVER will break ddk includes */
04710 #if 1 /* (WINVER >= 0x0500) */
04711 
04712 #define ES_SYSTEM_REQUIRED                0x00000001
04713 #define ES_DISPLAY_REQUIRED               0x00000002
04714 #define ES_USER_PRESENT                   0x00000004
04715 #define ES_CONTINUOUS                     0x80000000
04716 
04717 typedef enum _LATENCY_TIME {
04718   LT_DONT_CARE,
04719   LT_LOWEST_LATENCY
04720 } LATENCY_TIME, *PLATENCY_TIME;
04721 
04722 typedef enum _SYSTEM_POWER_STATE {
04723   PowerSystemUnspecified = 0,
04724   PowerSystemWorking,
04725   PowerSystemSleeping1,
04726   PowerSystemSleeping2,
04727   PowerSystemSleeping3,
04728   PowerSystemHibernate,
04729   PowerSystemShutdown,
04730   PowerSystemMaximum
04731 } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
04732 
04733 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
04734 
04735 typedef enum {
04736   PowerActionNone = 0,
04737   PowerActionReserved,
04738   PowerActionSleep,
04739   PowerActionHibernate,
04740   PowerActionShutdown,
04741   PowerActionShutdownReset,
04742   PowerActionShutdownOff,
04743   PowerActionWarmEject
04744 } POWER_ACTION, *PPOWER_ACTION;
04745 
04746 typedef enum _DEVICE_POWER_STATE {
04747   PowerDeviceUnspecified = 0,
04748   PowerDeviceD0,
04749   PowerDeviceD1,
04750   PowerDeviceD2,
04751   PowerDeviceD3,
04752   PowerDeviceMaximum
04753 } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
04754 
04755 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
04756 typedef struct {
04757   DWORD Granularity;
04758   DWORD Capacity;
04759 } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
04760 #endif
04761 
04762 typedef struct _POWER_ACTION_POLICY {
04763   POWER_ACTION Action;
04764   DWORD Flags;
04765   DWORD EventCode;
04766 } POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
04767 
04768 /* POWER_ACTION_POLICY.Flags constants */
04769 #define POWER_ACTION_QUERY_ALLOWED        0x00000001
04770 #define POWER_ACTION_UI_ALLOWED           0x00000002
04771 #define POWER_ACTION_OVERRIDE_APPS        0x00000004
04772 #define POWER_ACTION_LIGHTEST_FIRST       0x10000000
04773 #define POWER_ACTION_LOCK_CONSOLE         0x20000000
04774 #define POWER_ACTION_DISABLE_WAKES        0x40000000
04775 #define POWER_ACTION_CRITICAL             0x80000000
04776 
04777 /* POWER_ACTION_POLICY.EventCode constants */
04778 #define POWER_LEVEL_USER_NOTIFY_TEXT      0x00000001
04779 #define POWER_LEVEL_USER_NOTIFY_SOUND     0x00000002
04780 #define POWER_LEVEL_USER_NOTIFY_EXEC      0x00000004
04781 #define POWER_USER_NOTIFY_BUTTON          0x00000008
04782 #define POWER_USER_NOTIFY_SHUTDOWN        0x00000010
04783 #define POWER_FORCE_TRIGGER_RESET         0x80000000
04784 
04785 #define DISCHARGE_POLICY_CRITICAL   0
04786 #define DISCHARGE_POLICY_LOW        1
04787 #define NUM_DISCHARGE_POLICIES      4
04788 
04789 #define PO_THROTTLE_NONE    0
04790 #define PO_THROTTLE_CONSTANT    1
04791 #define PO_THROTTLE_DEGRADE 2
04792 #define PO_THROTTLE_ADAPTIVE    3
04793 #define PO_THROTTLE_MAXIMUM 4
04794 
04795 typedef struct _SYSTEM_POWER_LEVEL {
04796   BOOLEAN Enable;
04797   BYTE Spare[3];
04798   DWORD BatteryLevel;
04799   POWER_ACTION_POLICY PowerPolicy;
04800   SYSTEM_POWER_STATE MinSystemState;
04801 } SYSTEM_POWER_LEVEL, *PSYSTEM_POWER_LEVEL;
04802 
04803 typedef struct _SYSTEM_POWER_POLICY {
04804   DWORD Revision;
04805   POWER_ACTION_POLICY PowerButton;
04806   POWER_ACTION_POLICY SleepButton;
04807   POWER_ACTION_POLICY LidClose;
04808   SYSTEM_POWER_STATE LidOpenWake;
04809   DWORD Reserved;
04810   POWER_ACTION_POLICY Idle;
04811   DWORD IdleTimeout;
04812   BYTE IdleSensitivity;
04813   BYTE DynamicThrottle;
04814   BYTE Spare2[2];
04815   SYSTEM_POWER_STATE MinSleep;
04816   SYSTEM_POWER_STATE MaxSleep;
04817   SYSTEM_POWER_STATE ReducedLatencySleep;
04818   DWORD WinLogonFlags;
04819   DWORD Spare3;
04820   DWORD DozeS4Timeout;
04821   DWORD BroadcastCapacityResolution;
04822   SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
04823   DWORD VideoTimeout;
04824   BOOLEAN VideoDimDisplay;
04825   DWORD VideoReserved[3];
04826   DWORD SpindownTimeout;
04827   BOOLEAN OptimizeForPower;
04828   BYTE FanThrottleTolerance;
04829   BYTE ForcedThrottle;
04830   BYTE MinThrottle;
04831   POWER_ACTION_POLICY OverThrottled;
04832 } SYSTEM_POWER_POLICY, *PSYSTEM_POWER_POLICY;
04833 
04834 typedef struct _SYSTEM_POWER_CAPABILITIES {
04835   BOOLEAN PowerButtonPresent;
04836   BOOLEAN SleepButtonPresent;
04837   BOOLEAN LidPresent;
04838   BOOLEAN SystemS1;
04839   BOOLEAN SystemS2;
04840   BOOLEAN SystemS3;
04841   BOOLEAN SystemS4;
04842   BOOLEAN SystemS5;
04843   BOOLEAN HiberFilePresent;
04844   BOOLEAN FullWake;
04845   BOOLEAN VideoDimPresent;
04846   BOOLEAN ApmPresent;
04847   BOOLEAN UpsPresent;
04848   BOOLEAN ThermalControl;
04849   BOOLEAN ProcessorThrottle;
04850   BYTE ProcessorMinThrottle;
04851 #if (NTDDI_VERSION < NTDDI_WINXP)
04852   BYTE ProcessorThrottleScale;
04853   BYTE spare2[4];
04854 #else
04855   BYTE ProcessorMaxThrottle;
04856   BOOLEAN FastSystemS4;
04857   BYTE spare2[3];
04858 #endif /* (NTDDI_VERSION < NTDDI_WINXP) */
04859   BOOLEAN DiskSpinDown;
04860   BYTE spare3[8];
04861   BOOLEAN SystemBatteriesPresent;
04862   BOOLEAN BatteriesAreShortTerm;
04863   BATTERY_REPORTING_SCALE BatteryScale[3];
04864   SYSTEM_POWER_STATE AcOnLineWake;
04865   SYSTEM_POWER_STATE SoftLidWake;
04866   SYSTEM_POWER_STATE RtcWake;
04867   SYSTEM_POWER_STATE MinDeviceWakeState;
04868   SYSTEM_POWER_STATE DefaultLowLatencyWake;
04869 } SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
04870 
04871 typedef struct _SYSTEM_BATTERY_STATE {
04872   BOOLEAN AcOnLine;
04873   BOOLEAN BatteryPresent;
04874   BOOLEAN Charging;
04875   BOOLEAN Discharging;
04876   BOOLEAN Spare1[4];
04877   DWORD MaxCapacity;
04878   DWORD RemainingCapacity;
04879   DWORD Rate;
04880   DWORD EstimatedTime;
04881   DWORD DefaultAlert1;
04882   DWORD DefaultAlert2;
04883 } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
04884 
04885 typedef struct _PROCESSOR_POWER_INFORMATION {
04886     ULONG Number;
04887     ULONG MaxMhz;
04888     ULONG CurrentMhz;
04889     ULONG MhzLimit;
04890     ULONG MaxIdleState;
04891     ULONG CurrentIdleState;
04892 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
04893 
04894 typedef DWORD EXECUTION_STATE;
04895 
04896 typedef enum _POWER_INFORMATION_LEVEL {
04897   SystemPowerPolicyAc,
04898   SystemPowerPolicyDc,
04899   VerifySystemPolicyAc,
04900   VerifySystemPolicyDc,
04901   SystemPowerCapabilities,
04902   SystemBatteryState,
04903   SystemPowerStateHandler,
04904   ProcessorStateHandler,
04905   SystemPowerPolicyCurrent,
04906   AdministratorPowerPolicy,
04907   SystemReserveHiberFile,
04908   ProcessorInformation,
04909   SystemPowerInformation,
04910   ProcessorStateHandler2,
04911   LastWakeTime,
04912   LastSleepTime,
04913   SystemExecutionState,
04914   SystemPowerStateNotifyHandler,
04915   ProcessorPowerPolicyAc,
04916   ProcessorPowerPolicyDc,
04917   VerifyProcessorPowerPolicyAc,
04918   VerifyProcessorPowerPolicyDc,
04919   ProcessorPowerPolicyCurrent,
04920   SystemPowerStateLogging,
04921   SystemPowerLoggingEntry,
04922   SetPowerSettingValue,
04923   NotifyUserPowerSetting,
04924   PowerInformationLevelUnused0,
04925   PowerInformationLevelUnused1,
04926   SystemVideoState,
04927   TraceApplicationPowerMessage,
04928   TraceApplicationPowerMessageEnd,
04929   ProcessorPerfStates,
04930   ProcessorIdleStates,
04931   ProcessorCap,
04932   SystemWakeSource,
04933   SystemHiberFileInformation,
04934   TraceServicePowerMessage,
04935   ProcessorLoad,
04936   PowerShutdownNotification,
04937   MonitorCapabilities,
04938   SessionPowerInit,
04939   SessionDisplayState,
04940   PowerRequestCreate,
04941   PowerRequestAction,
04942   GetPowerRequestList,
04943   ProcessorInformationEx,
04944   NotifyUserModeLegacyPowerEvent,
04945   GroupPark,
04946   ProcessorIdleDomains,
04947   WakeTimerList,
04948   SystemHiberFileSize,
04949   PowerInformationLevelMaximum
04950 } POWER_INFORMATION_LEVEL;
04951 
04952 #if 1 /* (WIN32_WINNT >= 0x0500) */
04953 typedef struct _SYSTEM_POWER_INFORMATION {
04954     ULONG  MaxIdlenessAllowed;
04955     ULONG  Idleness;
04956     ULONG  TimeRemaining;
04957     UCHAR  CoolingMode;
04958 } SYSTEM_POWER_INFORMATION,*PSYSTEM_POWER_INFORMATION;
04959 #endif
04960 
04961 #if (_WIN32_WINNT >= 0x0500)
04962 #define _AUDIT_EVENT_TYPE_HACK 1
04963 typedef enum _AUDIT_EVENT_TYPE {
04964   AuditEventObjectAccess,
04965   AuditEventDirectoryServiceAccess
04966 } AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
04967 #endif
04968 
04969 #if (_WIN32_WINNT >= 0x0501)
04970 
04971 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
04972   ActivationContextBasicInformation = 1,
04973   ActivationContextDetailedInformation = 2,
04974   AssemblyDetailedInformationInActivationContext = 3,
04975   FileInformationInAssemblyOfAssemblyInActivationContext = 4,
04976   RunlevelInformationInActivationContext = 5,
04977   CompatibilityInformationInActivationContext = 6,
04978   ActivationContextManifestResourceName = 7,
04979   MaxActivationContextInfoClass,
04980 /* For compatibility with the old names */
04981   AssemblyDetailedInformationInActivationContxt = 3,
04982   FileInformationInAssemblyOfAssemblyInActivationContxt = 4
04983 } ACTIVATION_CONTEXT_INFO_CLASS;
04984 
04985 typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
04986   DWORD ulFlags;
04987   DWORD ulEncodedAssemblyIdentityLength;
04988   DWORD ulManifestPathType;
04989   DWORD ulManifestPathLength;
04990   LARGE_INTEGER liManifestLastWriteTime;
04991   DWORD ulPolicyPathType;
04992   DWORD ulPolicyPathLength;
04993   LARGE_INTEGER liPolicyLastWriteTime;
04994   DWORD ulMetadataSatelliteRosterIndex;
04995   DWORD ulManifestVersionMajor;
04996   DWORD ulManifestVersionMinor;
04997   DWORD ulPolicyVersionMajor;
04998   DWORD ulPolicyVersionMinor;
04999   DWORD ulAssemblyDirectoryNameLength;
05000   PCWSTR lpAssemblyEncodedAssemblyIdentity;
05001   PCWSTR lpAssemblyManifestPath;
05002   PCWSTR lpAssemblyPolicyPath;
05003   PCWSTR lpAssemblyDirectoryName;
05004 } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
05005 typedef const ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
05006 
05007 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
05008   DWORD dwFlags;
05009   DWORD ulFormatVersion;
05010   DWORD ulAssemblyCount;
05011   DWORD ulRootManifestPathType;
05012   DWORD ulRootManifestPathChars;
05013   DWORD ulRootConfigurationPathType;
05014   DWORD ulRootConfigurationPathChars;
05015   DWORD ulAppDirPathType;
05016   DWORD ulAppDirPathChars;
05017   PCWSTR lpRootManifestPath;
05018   PCWSTR lpRootConfigurationPath;
05019   PCWSTR lpAppDirPath;
05020 } ACTIVATION_CONTEXT_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_DETAILED_INFORMATION;
05021 typedef const ACTIVATION_CONTEXT_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_DETAILED_INFORMATION;
05022 
05023 typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
05024   DWORD ulAssemblyIndex;
05025   DWORD ulFileIndexInAssembly;
05026 } ACTIVATION_CONTEXT_QUERY_INDEX,*PACTIVATION_CONTEXT_QUERY_INDEX;
05027 typedef const ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
05028 
05029 typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
05030   DWORD ulFlags;
05031   DWORD ulFilenameLength;
05032   DWORD ulPathLength;
05033   PCWSTR lpFileName;
05034   PCWSTR lpFilePath;
05035 } ASSEMBLY_FILE_DETAILED_INFORMATION,*PASSEMBLY_FILE_DETAILED_INFORMATION;
05036 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
05037 
05038 #define ACTIVATION_CONTEXT_PATH_TYPE_NONE         1
05039 #define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE   2
05040 #define ACTIVATION_CONTEXT_PATH_TYPE_URL          3
05041 #define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF  4
05042 
05043 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION          1
05044 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION               2
05045 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION      3
05046 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION        4
05047 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION     5
05048 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION  6
05049 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION        7
05050 #define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE    8
05051 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES                9
05052 
05053 #endif /* (WIN32_WINNT >= 0x0501) */
05054 
05055 typedef struct _PROCESSOR_POWER_POLICY_INFO {
05056   DWORD TimeCheck;
05057   DWORD DemoteLimit;
05058   DWORD PromoteLimit;
05059   BYTE DemotePercent;
05060   BYTE PromotePercent;
05061   BYTE Spare[2];
05062   DWORD AllowDemotion:1;
05063   DWORD AllowPromotion:1;
05064   DWORD Reserved:30;
05065 } PROCESSOR_POWER_POLICY_INFO, *PPROCESSOR_POWER_POLICY_INFO;
05066 
05067 typedef struct _PROCESSOR_POWER_POLICY {
05068   DWORD Revision;
05069   BYTE DynamicThrottle;
05070   BYTE Spare[3];
05071   DWORD DisableCStates:1;
05072   DWORD Reserved:31;
05073   DWORD PolicyCount;
05074   PROCESSOR_POWER_POLICY_INFO Policy[3];
05075 } PROCESSOR_POWER_POLICY, *PPROCESSOR_POWER_POLICY;
05076 
05077 typedef struct _ADMINISTRATOR_POWER_POLICY {
05078   SYSTEM_POWER_STATE MinSleep;
05079   SYSTEM_POWER_STATE MaxSleep;
05080   DWORD MinVideoTimeout;
05081   DWORD MaxVideoTimeout;
05082   DWORD MinSpindownTimeout;
05083   DWORD MaxSpindownTimeout;
05084 } ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
05085 
05086 #endif /* WINVER >= 0x0500 */
05087 
05088 typedef VOID (NTAPI *WAITORTIMERCALLBACKFUNC)(PVOID,BOOLEAN);
05089 
05090 #ifdef UNICODE
05091 typedef OSVERSIONINFOW OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
05092 typedef OSVERSIONINFOEXW OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
05093 #else
05094 typedef OSVERSIONINFOA OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
05095 typedef OSVERSIONINFOEXA OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
05096 #endif
05097 
05098 #define VER_SET_CONDITION(lc,t,c) ((lc) = VerSetConditionMask((lc),(t),(c)))
05099 
05100 #if (_WIN32_WINNT >= 0x0500)
05101 ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
05102 #endif
05103 
05104 typedef enum _HEAP_INFORMATION_CLASS {
05105   HeapCompatibilityInformation,
05106   HeapEnableTerminationOnCorruption
05107 } HEAP_INFORMATION_CLASS;
05108 
05109 typedef enum _PROCESSOR_CACHE_TYPE {
05110   CacheUnified,
05111   CacheInstruction,
05112   CacheData,
05113   CacheTrace
05114 } PROCESSOR_CACHE_TYPE;
05115 
05116 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
05117   RelationProcessorCore,
05118   RelationNumaNode,
05119   RelationCache,
05120   RelationProcessorPackage,
05121   RelationGroup,
05122   RelationAll = 0xffff
05123 } LOGICAL_PROCESSOR_RELATIONSHIP;
05124 
05125 #define CACHE_FULLY_ASSOCIATIVE 0xFF
05126 
05127 typedef struct _CACHE_DESCRIPTOR {
05128   BYTE Level;
05129   BYTE Associativity;
05130   WORD LineSize;
05131   DWORD Size;
05132   PROCESSOR_CACHE_TYPE Type;
05133 } CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;
05134 
05135 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
05136   ULONG_PTR ProcessorMask;
05137   LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
05138   _ANONYMOUS_UNION union {
05139     struct {
05140       BYTE Flags;
05141     } ProcessorCore;
05142     struct {
05143       DWORD NodeNumber;
05144     } NumaNode;
05145     CACHE_DESCRIPTOR Cache;
05146     ULONGLONG Reserved[2];
05147   } DUMMYUNIONNAME;
05148 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
05149 
05150 NTSYSAPI
05151 SIZE_T
05152 NTAPI
05153 RtlCompareMemory (
05154     const VOID *Source1,
05155     const VOID *Source2,
05156     SIZE_T Length
05157     );
05158 
05159 #define RtlMoveMemory memmove
05160 #define RtlCopyMemory memcpy
05161 #define RtlFillMemory(d,l,f) memset((d), (f), (l))
05162 #define RtlZeroMemory(d,l) RtlFillMemory((d),(l),0)
05163 
05164 FORCEINLINE
05165 PVOID
05166 RtlSecureZeroMemory(IN PVOID Buffer,
05167                     IN SIZE_T Length)
05168 {
05169     volatile char *VolatilePointer;
05170 
05171     /* Get a volatile pointer to prevent any compiler optimizations */
05172     VolatilePointer = (volatile char *)Buffer;
05173 
05174     /* Loop the whole buffer */
05175     while (Length)
05176     {
05177         /* Zero the current byte and move on */
05178         *VolatilePointer++ = 0;
05179         Length--;
05180     }
05181 
05182     /* Return the pointer to ensure the compiler won't optimize this away */
05183     return Buffer;
05184 }
05185 
05186 typedef struct _OBJECT_TYPE_LIST {
05187   WORD Level;
05188   WORD Sbz;
05189   GUID *ObjectType;
05190 } OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
05191 
05192 #if defined(_M_IX86)
05193 FORCEINLINE struct _TEB * NtCurrentTeb(void)
05194 {
05195     return (struct _TEB *)__readfsdword(0x18);
05196 }
05197 FORCEINLINE PVOID GetCurrentFiber(VOID)
05198 {
05199     return (PVOID)(ULONG_PTR)__readfsdword(0x10);
05200 }
05201 #elif defined (_M_AMD64)
05202 FORCEINLINE struct _TEB * NtCurrentTeb(void)
05203 {
05204     return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self));
05205 }
05206 FORCEINLINE PVOID GetCurrentFiber(VOID)
05207 {
05208   #ifdef NONAMELESSUNION
05209     return (PVOID)__readgsqword(FIELD_OFFSET(NT_TIB, DUMMYUNIONNAME.FiberData));
05210   #else
05211     return (PVOID)__readgsqword(FIELD_OFFSET(NT_TIB, FiberData));
05212   #endif
05213 }
05214 #elif defined (_M_ARM)
05215     PVOID WINAPI GetCurrentFiber(VOID);
05216 #elif defined(_M_PPC)
05217 FORCEINLINE unsigned long _read_teb_dword(const unsigned long Offset)
05218 {
05219     unsigned long result;
05220     __asm__("\tadd 7,13,%1\n"
05221             "\tlwz %0,0(7)\n"
05222             : "=r" (result)
05223             : "r" (Offset)
05224             : "r7");
05225     return result;
05226 }
05227 FORCEINLINE struct _TEB * NtCurrentTeb(void)
05228 {
05229     return (struct _TEB *)_read_teb_dword(0x18);
05230 }
05231 FORCEINLINE PVOID GetCurrentFiber(void)
05232 {
05233     return _read_teb_dword(0x10);
05234 }
05235 #else
05236 #error Unknown architecture
05237 #endif
05238 
05239 static __inline PVOID GetFiberData(void)
05240 {
05241     return *((PVOID *)GetCurrentFiber());
05242 }
05243 
05244 #if defined(__GNUC__)
05245 
05246 static __inline__ BOOLEAN
05247 InterlockedBitTestAndSet(IN LONG volatile *Base,
05248                          IN LONG Bit)
05249 {
05250 #if defined(_M_IX86)
05251     LONG OldBit;
05252     __asm__ __volatile__("lock "
05253                          "btsl %2,%1\n\t"
05254                          "sbbl %0,%0\n\t"
05255                          :"=r" (OldBit),"+m" (*Base)
05256                          :"Ir" (Bit)
05257                          : "memory");
05258     return OldBit;
05259 #else
05260     return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1;
05261 #endif
05262 }
05263 
05264 static __inline__ BOOLEAN
05265 InterlockedBitTestAndReset(IN LONG volatile *Base,
05266                            IN LONG Bit)
05267 {
05268 #if defined(_M_IX86)
05269     LONG OldBit;
05270     __asm__ __volatile__("lock "
05271                          "btrl %2,%1\n\t"
05272                          "sbbl %0,%0\n\t"
05273                          :"=r" (OldBit),"+m" (*Base)
05274                          :"Ir" (Bit)
05275                          : "memory");
05276     return OldBit;
05277 #else
05278     return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1;
05279 #endif
05280 }
05281 
05282 #endif
05283 
05284 #define BitScanForward _BitScanForward
05285 #define BitScanReverse _BitScanReverse
05286 
05287 /* TODO: Other architectures than X86 */
05288 #if defined(_M_IX86)
05289 #define PF_TEMPORAL_LEVEL_1
05290 #define PF_NON_TEMPORAL_LEVEL_ALL
05291 #define PreFetchCacheLine(l, a)
05292 #elif defined (_M_AMD64)
05293 #define PreFetchCacheLine(l, a)
05294 #elif defined(_M_PPC)
05295 #define PreFetchCacheLine(l, a)
05296 #elif defined(_M_ARM)
05297 #define PreFetchCacheLine(l, a)
05298 #else
05299 #error Unknown architecture
05300 #endif
05301 
05302 /* TODO: Other architectures than X86 */
05303 #if defined(_M_IX86)
05304 #if defined(_MSC_VER)
05305 FORCEINLINE
05306 VOID
05307 MemoryBarrier (VOID)
05308 {
05309     LONG Barrier;
05310     __asm { xchg Barrier, eax }
05311 }
05312 #else
05313 FORCEINLINE
05314 VOID
05315 MemoryBarrier(VOID)
05316 {
05317     LONG Barrier, *Dummy = &Barrier;
05318     UNREFERENCED_LOCAL_VARIABLE(Dummy);
05319     __asm__ __volatile__("xchgl %%eax, %[Barrier]" : : [Barrier] "m" (Barrier) : "memory");
05320 }
05321 #endif
05322 #elif defined (_M_AMD64)
05323 #define MemoryBarrier __faststorefence
05324 #elif defined(_M_PPC)
05325 #define MemoryBarrier()
05326 #elif defined(_M_ARM)
05327 #define MemoryBarrier()
05328 #else
05329 #error Unknown architecture
05330 #endif
05331 
05332 #if defined(_M_IX86) || defined(_M_AMD64)
05333 
05334 #define YieldProcessor _mm_pause
05335 
05336 FORCEINLINE
05337 VOID
05338 DbgRaiseAssertionFailure(VOID)
05339 {
05340     __int2c();
05341 }
05342 
05343 #elif defined(_M_PPC)
05344 #define YieldProcessor() __asm__ __volatile__("nop");
05345 #elif defined(_M_MIPS)
05346 #define YieldProcessor() __asm__ __volatile__("nop");
05347 #elif defined(_M_ARM)
05348 #define YieldProcessor __yield
05349 #else
05350 #error Unknown architecture
05351 #endif
05352 
05353 #if defined(_AMD64_)
05354 #if defined(_M_AMD64)
05355 
05356 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONG64 *)a, b)
05357 
05358 #define InterlockedAnd _InterlockedAnd
05359 #define InterlockedExchange _InterlockedExchange
05360 #define InterlockedOr _InterlockedOr
05361 
05362 #define InterlockedAnd64 _InterlockedAnd64
05363 #define InterlockedOr64 _InterlockedOr64
05364 
05365 #define InterlockedBitTestAndSet _interlockedbittestandset
05366 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
05367 #define InterlockedBitTestAndReset _interlockedbittestandreset
05368 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
05369 
05370 
05371 #endif
05372 
05373 #else
05374 
05375 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
05376 
05377 #endif
05378 
05379 #ifdef _MSC_VER
05380 #pragma warning(pop)
05381 #endif
05382 
05383 #endif /* RC_INVOKED */
05384 
05385 #ifdef __cplusplus
05386 }
05387 #endif
05388 #endif

Generated on Sun May 27 2012 04:32:47 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.