home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 November / PCWorld_2000-11_cd.bin / Software / Topware / devc40 / _SETUP.5 / Group3 / winnt.h < prev    next >
C/C++ Source or Header  |  1999-11-07  |  62KB  |  2,133 lines

  1. #ifndef _WINNT_H
  2. #define _WINNT_H
  3.  
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7.  
  8. #include <winerror.h>
  9.  
  10. #ifndef RC_INVOKED
  11. #include <string.h>
  12.  
  13. /* FIXME: add more architectures. Is there a way to specify this in GCC? */
  14. #ifdef _X86_
  15. #define UNALIGNED
  16. #else
  17. #define UNALIGNED
  18. #endif
  19.  
  20. #ifndef VOID
  21. #define VOID void
  22. typedef char CHAR;
  23. typedef short SHORT;
  24. typedef long LONG;
  25. #endif
  26. typedef CHAR CCHAR;
  27. typedef unsigned char UCHAR,*PUCHAR;
  28. typedef unsigned short USHORT,*PUSHORT;
  29. typedef unsigned long ULONG,*PULONG;
  30. typedef char *PSZ;
  31.  
  32. #ifndef _WCHAR_T_DEFINED
  33. #define _WCHAR_T_DEFINED
  34. #ifndef _WCHAR_T_
  35. #define _WCHAR_T_
  36. #undef __need_wchar_t
  37. #ifndef __cplusplus
  38. typedef unsigned short wchar_t;
  39. #endif
  40. #endif
  41. #endif
  42.  
  43. typedef wchar_t WCHAR;
  44. typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR;
  45. typedef CONST WCHAR *LPCWCH,*PCWCH,*LPCWSTR,*PCWSTR;
  46. typedef CHAR *PCHAR,*LPCH,*PCH,*NPSTR,*LPSTR,*PSTR;
  47. typedef CONST CHAR *LPCCH,*PCSTR,*LPCSTR;
  48. #ifndef _TCHAR_DEFINED
  49. #define _TCHAR_DEFINED
  50. #ifdef UNICODE
  51. typedef WCHAR TCHAR;
  52. #else
  53. typedef CHAR TCHAR;
  54. #endif
  55. #endif
  56. typedef TCHAR TBYTE,*PTCH,*PTBYTE;
  57. typedef TCHAR *LPTCH,*PTSTR,*LPTSTR,*LP,*PTCHAR;
  58. typedef const TCHAR *LPCTSTR;
  59. #ifdef UNICODE
  60. #define TEXT(q) L##q
  61. #else
  62. #define TEXT(q) q
  63. #endif
  64. #ifndef _T
  65. #define _T TEXT
  66. #endif
  67. typedef SHORT *PSHORT;
  68. typedef LONG *PLONG;
  69. typedef void *HANDLE;
  70. typedef HANDLE *PHANDLE,*LPHANDLE;
  71. #ifdef STRICT
  72. #define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n
  73. #else
  74. #define DECLARE_HANDLE(n) typedef HANDLE n
  75. #endif
  76. typedef DWORD LCID;
  77. typedef PDWORD PLCID;
  78. typedef WORD LANGID;
  79. #ifdef __GNUC__
  80. #define HAVE_INT64
  81. #define _INTEGRAL_MAX_BITS 64
  82. #undef __int64
  83. #define __int64 long long
  84. #endif
  85. #if defined(HAVE_INT64) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)
  86. typedef __int64 LONGLONG;
  87. typedef unsigned __int64 DWORDLONG;
  88. #else
  89. typedef double LONGLONG,DWORDLONG;
  90. #endif
  91. typedef LONGLONG *PLONGLONG;
  92. typedef DWORDLONG *PDWORDLONG;
  93. typedef DWORDLONG ULONGLONG,*PULONGLONG;
  94. typedef LONGLONG USN;
  95. #ifdef HAVE_INT64
  96. #define Int32x32To64(a,b) ((LONGLONG)(a)*(LONGLONG)(b))
  97. #define UInt32x32To64(a,b) ((DWORDLONG)(a)*(DWORDLONG)(b))
  98. #define Int64ShllMod32(a,b) ((DWORDLONG)(a)<<(b))
  99. #define Int64ShraMod32(a,b) ((LONGLONG)(a)>>(b))
  100. #define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b))
  101. #endif
  102. #define ANSI_NULL '\0'
  103. #define UNICODE_NULL L'\0'
  104. typedef BYTE BOOLEAN,*PBOOLEAN;
  105. #endif
  106.  
  107. #define NTAPI __stdcall
  108. #define APPLICATION_ERROR_MASK       0x20000000
  109. #define ERROR_SEVERITY_SUCCESS       0x00000000
  110. #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
  111. #define ERROR_SEVERITY_WARNING       0x80000000
  112. #define ERROR_SEVERITY_ERROR         0xC0000000
  113. #define COMPRESSION_FORMAT_NONE 0
  114. #define COMPRESSION_FORMAT_DEFAULT 1
  115. #define COMPRESSION_FORMAT_LZNT1 2
  116. #define COMPRESSION_ENGINE_STANDARD 0
  117. #define COMPRESSION_ENGINE_MAXIMUM 256
  118. #define ACCESS_ALLOWED_ACE_TYPE    0
  119. #define ACCESS_DENIED_ACE_TYPE    1
  120. #define ANYSIZE_ARRAY 1
  121. #define SYSTEM_AUDIT_ACE_TYPE    2
  122. #define SYSTEM_ALARM_ACE_TYPE    3
  123. #define OBJECT_INHERIT_ACE    1
  124. #define CONTAINER_INHERIT_ACE    2
  125. #define NO_PROPAGATE_INHERIT_ACE    4
  126. #define INHERIT_ONLY_ACE    8
  127. #define VALID_INHERIT_FLAGS    16
  128. #define SUCCESSFUL_ACCESS_ACE_FLAG    64
  129. #define FAILED_ACCESS_ACE_FLAG    128
  130. #define DELETE    0x00010000L
  131. #define READ_CONTROL    0x20000L
  132. #define WRITE_DAC    0x40000L
  133. #define WRITE_OWNER    0x80000L
  134. #define SYNCHRONIZE    0x100000L
  135. #define STANDARD_RIGHTS_REQUIRED    0xF0000
  136. #define STANDARD_RIGHTS_READ    0x20000
  137. #define STANDARD_RIGHTS_WRITE    0x20000
  138. #define STANDARD_RIGHTS_EXECUTE    0x20000
  139. #define STANDARD_RIGHTS_ALL    0x1F0000
  140. #define SPECIFIC_RIGHTS_ALL    0xFFFF
  141. #define ACCESS_SYSTEM_SECURITY    0x1000000
  142. #define MAXIMUM_ALLOWED    0x2000000
  143. #define GENERIC_READ    0x80000000
  144. #define GENERIC_WRITE    0x40000000
  145. #define GENERIC_EXECUTE    0x20000000
  146. #define GENERIC_ALL    0x10000000
  147. #define FILE_READ_DATA    1
  148. #define FILE_LIST_DIRECTORY    1
  149. #define FILE_WRITE_DATA    2
  150. #define FILE_ADD_FILE    2
  151. #define FILE_APPEND_DATA    4
  152. #define FILE_ADD_SUBDIRECTORY    4
  153. #define FILE_CREATE_PIPE_INSTANCE    4
  154. #define FILE_READ_EA    8
  155. #define FILE_READ_PROPERTIES    8
  156. #define FILE_WRITE_EA    16
  157. #define FILE_WRITE_PROPERTIES    16
  158. #define FILE_EXECUTE    32
  159. #define FILE_TRAVERSE    32
  160. #define FILE_DELETE_CHILD    64
  161. #define FILE_READ_ATTRIBUTES    128
  162. #define FILE_WRITE_ATTRIBUTES    256
  163. #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1FF)
  164. #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|SYNCHRONIZE)
  165. #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|FILE_WRITE_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|FILE_APPEND_DATA|SYNCHRONIZE)
  166. #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|FILE_READ_ATTRIBUTES|FILE_EXECUTE|SYNCHRONIZE)
  167. #define FILE_SHARE_READ    1
  168. #define FILE_SHARE_WRITE 2
  169. #define FILE_SHARE_DELETE 4
  170. #define FILE_ATTRIBUTE_READONLY    1
  171. #define FILE_ATTRIBUTE_HIDDEN    2
  172. #define FILE_ATTRIBUTE_SYSTEM    4
  173. #define FILE_ATTRIBUTE_DIRECTORY    16
  174. #define FILE_ATTRIBUTE_ARCHIVE    32
  175. #define FILE_ATTRIBUTE_NORMAL    128
  176. #define FILE_ATTRIBUTE_TEMPORARY    256
  177. #define FILE_ATTRIBUTE_COMPRESSED    2048
  178. #define FILE_ATTRIBUTE_OFFLINE    0x1000
  179. #define FILE_NOTIFY_CHANGE_FILE_NAME    1
  180. #define FILE_NOTIFY_CHANGE_DIR_NAME    2
  181. #define FILE_NOTIFY_CHANGE_ATTRIBUTES    4
  182. #define FILE_NOTIFY_CHANGE_SIZE    8
  183. #define FILE_NOTIFY_CHANGE_LAST_WRITE    16
  184. #define FILE_NOTIFY_CHANGE_LAST_ACCESS  32
  185. #define FILE_NOTIFY_CHANGE_CREATION    64
  186. #define FILE_NOTIFY_CHANGE_SECURITY    256
  187. #define MAILSLOT_NO_MESSAGE    ((DWORD)-1)
  188. #define MAILSLOT_WAIT_FOREVER    ((DWORD)-1)
  189. #define FILE_CASE_SENSITIVE_SEARCH    1
  190. #define FILE_CASE_PRESERVED_NAMES    2
  191. #define FILE_UNICODE_ON_DISK    4
  192. #define FILE_PERSISTENT_ACLS    8
  193. #define FILE_FILE_COMPRESSION    16
  194. #define FILE_VOLUME_IS_COMPRESSED    0x8000
  195. #define IO_COMPLETION_MODIFY_STATE    2
  196. #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|3)
  197. #define DUPLICATE_CLOSE_SOURCE    1
  198. #define DUPLICATE_SAME_ACCESS    2
  199. #define PROCESS_TERMINATE    1
  200. #define PROCESS_CREATE_THREAD    2
  201. #define PROCESS_VM_OPERATION    8
  202. #define PROCESS_VM_READ    16
  203. #define PROCESS_VM_WRITE    32
  204. #define PROCESS_DUP_HANDLE    64
  205. #define PROCESS_CREATE_PROCESS    128
  206. #define PROCESS_SET_QUOTA    256
  207. #define PROCESS_SET_INFORMATION    512
  208. #define PROCESS_QUERY_INFORMATION    1024
  209. #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xFFF)
  210. #define THREAD_TERMINATE    1
  211. #define THREAD_SUSPEND_RESUME    2
  212. #define THREAD_GET_CONTEXT    8
  213. #define THREAD_SET_CONTEXT    16
  214. #define THREAD_SET_INFORMATION    32
  215. #define THREAD_QUERY_INFORMATION    64
  216. #define THREAD_SET_THREAD_TOKEN    128
  217. #define THREAD_IMPERSONATE    256
  218. #define THREAD_DIRECT_IMPERSONATION    0x200
  219. #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3FF)
  220. #define EXCEPTION_NONCONTINUABLE    1
  221. #define EXCEPTION_MAXIMUM_PARAMETERS 15
  222. #define SECURITY_NULL_SID_AUTHORITY    {0,0,0,0,0,0}
  223. #define SECURITY_WORLD_SID_AUTHORITY    {0,0,0,0,0,1}
  224. #define SECURITY_LOCAL_SID_AUTHORITY    {0,0,0,0,0,2}
  225. #define SECURITY_CREATOR_SID_AUTHORITY    {0,0,0,0,0,3}
  226. #define SECURITY_NON_UNIQUE_AUTHORITY    {0,0,0,0,0,4}
  227. #define SECURITY_NT_AUTHORITY    {0,0,0,0,0,5}
  228. #define SECURITY_NULL_RID    0
  229. #define SECURITY_WORLD_RID    0
  230. #define SECURITY_LOCAL_RID    0
  231. #define SECURITY_CREATOR_OWNER_RID    0
  232. #define SECURITY_CREATOR_GROUP_RID    1
  233. #define SECURITY_DIALUP_RID    1
  234. #define SECURITY_NETWORK_RID    2
  235. #define SECURITY_BATCH_RID    3
  236. #define SECURITY_INTERACTIVE_RID    4
  237. #define SECURITY_LOGON_IDS_RID    5
  238. #define SECURITY_SERVICE_RID    6
  239. #define SECURITY_LOCAL_SYSTEM_RID    18
  240. #define SECURITY_BUILTIN_DOMAIN_RID   32
  241. #define SECURITY_PRINCIPAL_SELF_RID   10
  242. #define DOMAIN_USER_RID_ADMIN 0x1F4L
  243. #define DOMAIN_USER_RID_GUEST 0x1F5L
  244. #define DOMAIN_GROUP_RID_ADMINS    0x200L
  245. #define DOMAIN_GROUP_RID_USERS    0x201L
  246. #define DOMAIN_ALIAS_RID_ADMINS    0x220L
  247. #define DOMAIN_ALIAS_RID_USERS    0x221L
  248. #define DOMAIN_ALIAS_RID_GUESTS    0x222L
  249. #define DOMAIN_ALIAS_RID_POWER_USERS    0x223L
  250. #define DOMAIN_ALIAS_RID_ACCOUNT_OPS    0x224L
  251. #define DOMAIN_ALIAS_RID_SYSTEM_OPS    0x225L
  252. #define DOMAIN_ALIAS_RID_PRINT_OPS    0x226L
  253. #define DOMAIN_ALIAS_RID_BACKUP_OPS    0x227L
  254. #define DOMAIN_ALIAS_RID_REPLICATOR    0x228L
  255. #define SE_CREATE_TOKEN_NAME    TEXT("SeCreateTokenPrivilege")
  256. #define SE_ASSIGNPRIMARYTOKEN_NAME    TEXT("SeAssignPrimaryTokenPrivilege")
  257. #define SE_LOCK_MEMORY_NAME    TEXT("SeLockMemoryPrivilege")
  258. #define SE_INCREASE_QUOTA_NAME    TEXT("SeIncreaseQuotaPrivilege")
  259. #define SE_UNSOLICITED_INPUT_NAME    TEXT("SeUnsolicitedInputPrivilege")
  260. #define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
  261. #define SE_TCB_NAME    TEXT("SeTcbPrivilege")
  262. #define SE_SECURITY_NAME    TEXT("SeSecurityPrivilege")
  263. #define SE_TAKE_OWNERSHIP_NAME    TEXT("SeTakeOwnershipPrivilege")
  264. #define SE_LOAD_DRIVER_NAME    TEXT("SeLoadDriverPrivilege")
  265. #define SE_SYSTEM_PROFILE_NAME    TEXT("SeSystemProfilePrivilege")
  266. #define SE_SYSTEMTIME_NAME    TEXT("SeSystemtimePrivilege")
  267. #define SE_PROF_SINGLE_PROCESS_NAME    TEXT("SeProfileSingleProcessPrivilege")
  268. #define SE_INC_BASE_PRIORITY_NAME    TEXT("SeIncreaseBasePriorityPrivilege")
  269. #define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
  270. #define SE_CREATE_PERMANENT_NAME    TEXT("SeCreatePermanentPrivilege")
  271. #define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
  272. #define SE_RESTORE_NAME    TEXT("SeRestorePrivilege")
  273. #define SE_SHUTDOWN_NAME    TEXT("SeShutdownPrivilege")
  274. #define SE_DEBUG_NAME    TEXT("SeDebugPrivilege")
  275. #define SE_AUDIT_NAME    TEXT("SeAuditPrivilege")
  276. #define SE_SYSTEM_ENVIRONMENT_NAME    TEXT("SeSystemEnvironmentPrivilege")
  277. #define SE_CHANGE_NOTIFY_NAME    TEXT("SeChangeNotifyPrivilege")
  278. #define SE_REMOTE_SHUTDOWN_NAME    TEXT("SeRemoteShutdownPrivilege")
  279. #define LANG_BULGARIAN     2
  280. #define LANG_CHINESE    4
  281. #define LANG_CROATIAN    26
  282. #define LANG_CZECH    5
  283. #define LANG_DANISH    6
  284. #define LANG_DUTCH    19
  285. #define LANG_ENGLISH    9
  286. #define LANG_FINNISH    11
  287. #define LANG_FRENCH    12
  288. #define LANG_GERMAN    7
  289. #define LANG_GREEK    8
  290. #define LANG_HUNGARIAN    14
  291. #define LANG_ICELANDIC    15
  292. #define LANG_ITALIAN    16
  293. #define LANG_JAPANESE    17
  294. #define LANG_KOREAN    18
  295. #define LANG_NEUTRAL    0
  296. #define LANG_NORWEGIAN    20
  297. #define LANG_POLISH    21
  298. #define LANG_PORTUGUESE    22
  299. #define LANG_ROMANIAN    24
  300. #define LANG_RUSSIAN    25
  301. #define LANG_SLOVAK    27
  302. #define LANG_SLOVENIAN    36
  303. #define LANG_SPANISH    10
  304. #define LANG_SWEDISH    29
  305. #define LANG_TURKISH    31
  306. #define SUBLANG_CHINESE_SIMPLIFIED    2
  307. #define SUBLANG_CHINESE_TRADITIONAL    1
  308. #define SUBLANG_CHINESE_HONGKONG    3
  309. #define SUBLANG_CHINESE_SINGAPORE    4
  310. #define SUBLANG_DEFAULT    1
  311. #define SUBLANG_DUTCH    1
  312. #define SUBLANG_DUTCH_BELGIAN    2
  313. #define SUBLANG_ENGLISH_AUS    3
  314. #define SUBLANG_ENGLISH_CAN    4
  315. #define SUBLANG_ENGLISH_EIRE    6
  316. #define SUBLANG_ENGLISH_NZ    5
  317. #define SUBLANG_ENGLISH_UK    2
  318. #define SUBLANG_ENGLISH_US    1
  319. #define SUBLANG_FRENCH    1
  320. #define SUBLANG_FRENCH_BELGIAN    2
  321. #define SUBLANG_FRENCH_CANADIAN    3
  322. #define SUBLANG_FRENCH_SWISS    4
  323. #define SUBLANG_GERMAN    1
  324. #define SUBLANG_GERMAN_AUSTRIAN    3
  325. #define SUBLANG_GERMAN_SWISS    2
  326. #define SUBLANG_ITALIAN    1
  327. #define SUBLANG_ITALIAN_SWISS    2
  328. #define SUBLANG_NEUTRAL    0
  329. #define SUBLANG_NORWEGIAN_BOKMAL    1
  330. #define SUBLANG_NORWEGIAN_NYNORSK    2
  331. #define SUBLANG_PORTUGUESE    2
  332. #define SUBLANG_PORTUGUESE_BRAZILIAN    1
  333. #define SUBLANG_SPANISH    1
  334. #define SUBLANG_SPANISH_MEXICAN    2
  335. #define SUBLANG_SPANISH_MODERN    3
  336. #define SUBLANG_SYS_DEFAULT    2
  337. #define NLS_VALID_LOCALE_MASK    1048575
  338. #define SORT_DEFAULT    0
  339. #define SORT_JAPANESE_XJIS    0
  340. #define SORT_JAPANESE_UNICODE    1
  341. #define SORT_CHINESE_BIG5    0
  342. #define SORT_CHINESE_UNICODE    1
  343. #define SORT_KOREAN_KSC    0
  344. #define SORT_KOREAN_UNICODE    1
  345. #define MAKELANGID(p,s)    ((((WORD)(s))<<10)|(WORD)(p))
  346. #define MAKELCID(l,s) ((DWORD)((((DWORD)((WORD)(s)))<<16)|((DWORD)((WORD)(l)))))
  347. #define PRIMARYLANGID(l)    ((WORD)(l)&0x3ff)
  348. #define SORTIDFROMLCID(l)    ((WORD)((((DWORD)(l))&NLS_VALID_LOCALE_MASK)>>16))
  349. #define SORTVERSIONFROMLCID(l) ((WORD)((((DWORD)(l))>>20)&0xf))
  350. #define SUBLANGID(l)    ((WORD)(l)>>10)
  351. #define LANGIDFROMLCID(l)    ((WORD)(l))
  352. #define LANG_SYSTEM_DEFAULT    MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT)
  353. #define LANG_USER_DEFAULT    MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT)
  354. #define LOCALE_NEUTRAL    MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT)
  355. #define ACL_REVISION    2
  356. #define ACL_REVISION_DS 4
  357. #define ACL_REVISION1 1
  358. #define ACL_REVISION2 2
  359. #define ACL_REVISION3 3
  360. #define ACL_REVISION4 4
  361. #define MIN_ACL_REVISION 2
  362. #define MAX_ACL_REVISION 4
  363. #define MINCHAR    0x80
  364. #define MAXCHAR    0x7f
  365. #define MINSHORT    0x8000
  366. #define MAXSHORT    0x7fff
  367. #define MINLONG    0x80000000
  368. #define MAXLONG    0x7fffffff
  369. #define MAXBYTE    0xff
  370. #define MAXWORD    0xffff
  371. #define MAXDWORD    0xffffffff
  372. #define PROCESSOR_INTEL_386 386
  373. #define PROCESSOR_INTEL_486 486
  374. #define PROCESSOR_INTEL_PENTIUM 586
  375. #define PROCESSOR_MIPS_R4000 4000
  376. #define PROCESSOR_ALPHA_21064 21064
  377. #define PROCESSOR_ARCHITECTURE_INTEL 0
  378. #define PROCESSOR_ARCHITECTURE_MIPS 1
  379. #define PROCESSOR_ARCHITECTURE_ALPHA 2
  380. #define PROCESSOR_ARCHITECTURE_PPC 3
  381. #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
  382. #define PAGE_READONLY 2
  383. #define PAGE_READWRITE 4
  384. #define PAGE_WRITECOPY 8
  385. #define FILE_ACTION_ADDED    1
  386. #define FILE_ACTION_REMOVED    2
  387. #define FILE_ACTION_MODIFIED    3
  388. #define FILE_ACTION_RENAMED_OLD_NAME    4
  389. #define FILE_ACTION_RENAMED_NEW_NAME    5
  390. #define HEAP_NO_SERIALIZE 1
  391. #define HEAP_GROWABLE 2
  392. #define HEAP_GENERATE_EXCEPTIONS 4
  393. #define HEAP_ZERO_MEMORY 8
  394. #define HEAP_REALLOC_IN_PLACE_ONLY 16
  395. #define HEAP_TAIL_CHECKING_ENABLED 32
  396. #define HEAP_FREE_CHECKING_ENABLED 64
  397. #define HEAP_DISABLE_COALESCE_ON_FREE 128
  398. #define HEAP_CREATE_ALIGN_16 0x0000
  399. #define HEAP_CREATE_ENABLE_TRACING 0x20000
  400. #define HEAP_MAXIMUM_TAG 0xFFF
  401. #define HEAP_PSEUDO_TAG_FLAG 0x8000
  402. #define HEAP_TAG_SHIFT 16
  403. #define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b)+(o)<<16)))
  404. #define KEY_QUERY_VALUE 1
  405. #define KEY_SET_VALUE 2
  406. #define KEY_CREATE_SUB_KEY 4
  407. #define KEY_ENUMERATE_SUB_KEYS 8
  408. #define KEY_NOTIFY 16
  409. #define KEY_CREATE_LINK 32
  410. #define KEY_WRITE 0x20006
  411. #define KEY_EXECUTE 0x20019
  412. #define KEY_READ 0x20019
  413. #define KEY_ALL_ACCESS 0xf003f
  414. #define REG_WHOLE_HIVE_VOLATILE    1
  415. #define REG_REFRESH_HIVE    2
  416. #define REG_NO_LAZY_FLUSH    4
  417. #define REG_OPTION_RESERVED    0
  418. #define REG_OPTION_NON_VOLATILE    0
  419. #define REG_OPTION_VOLATILE    1
  420. #define REG_OPTION_CREATE_LINK    2
  421. #define REG_OPTION_BACKUP_RESTORE    4
  422. #define REG_OPTION_OPEN_LINK    8
  423. #define REG_LEGAL_OPTION    15
  424. #define OWNER_SECURITY_INFORMATION 1
  425. #define GROUP_SECURITY_INFORMATION 2
  426. #define DACL_SECURITY_INFORMATION 4
  427. #define SACL_SECURITY_INFORMATION 8
  428. #define MAXIMUM_PROCESSORS 32
  429. #define PAGE_EXECUTE 16
  430. #define PAGE_EXECUTE_READ 32
  431. #define PAGE_EXECUTE_READWRITE 64
  432. #define PAGE_GUARD 256
  433. #define PAGE_NOACCESS 1
  434. #define PAGE_NOCACHE 512
  435. #define MEM_COMMIT 4096
  436. #define MEM_FREE 65536
  437. #define MEM_RESERVE 8192
  438. #define MEM_IMAGE 16777216
  439. #define MEM_MAPPED 262144
  440. #define MEM_PRIVATE 131072
  441. #define MEM_DECOMMIT 16384
  442. #define MEM_RELEASE 32768
  443. #define PAGE_EXECUTE_WRITECOPY 128
  444. #define SECTION_EXTEND_SIZE 16
  445. #define SECTION_MAP_READ 4
  446. #define SECTION_MAP_WRITE 2
  447. #define SECTION_QUERY 1
  448. #define SECTION_ALL_ACCESS 0xf001f
  449. #define MESSAGE_RESOURCE_UNICODE 1
  450. #define RTL_CRITSECT_TYPE 0
  451. #define RTL_RESOURCE_TYPE 1
  452. #define FIELD_OFFSET(t,f) ((LONG)&(((t*)0)->f))
  453. #define IMAGE_SIZEOF_FILE_HEADER    20
  454. #define IMAGE_FILE_RELOCS_STRIPPED    1
  455. #define IMAGE_FILE_EXECUTABLE_IMAGE    2
  456. #define IMAGE_FILE_LINE_NUMS_STRIPPED    4
  457. #define IMAGE_FILE_LOCAL_SYMS_STRIPPED    8
  458. #define IMAGE_FILE_BYTES_REVERSED_LO    128
  459. #define IMAGE_FILE_32BIT_MACHINE    256
  460. #define IMAGE_FILE_DEBUG_STRIPPED    512
  461. #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP    1024
  462. #define IMAGE_FILE_NET_RUN_FROM_SWAP    2048
  463. #define IMAGE_FILE_SYSTEM    4096
  464. #define IMAGE_FILE_DLL    8192
  465. #define IMAGE_FILE_UP_SYSTEM_ONLY    16384
  466. #define IMAGE_FILE_BYTES_REVERSED_HI    32768
  467. #define IMAGE_FILE_MACHINE_UNKNOWN    0
  468. #define IMAGE_FILE_MACHINE_I386    332
  469. #define IMAGE_FILE_MACHINE_R3000    354
  470. #define IMAGE_FILE_MACHINE_R4000    358
  471. #define IMAGE_FILE_MACHINE_R10000    360
  472. #define IMAGE_FILE_MACHINE_ALPHA    388
  473. #define IMAGE_FILE_MACHINE_POWERPC    496
  474. #define IMAGE_DOS_SIGNATURE 0x5A4D
  475. #define IMAGE_OS2_SIGNATURE 0x454E
  476. #define IMAGE_OS2_SIGNATURE_LE 0x454C
  477. #define IMAGE_VXD_SIGNATURE 0x454C
  478. #define IMAGE_NT_SIGNATURE 0x00004550
  479. #define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b
  480. #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
  481. #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
  482. #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
  483. #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
  484. #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
  485. #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER 224
  486. #define IMAGE_SIZEOF_SHORT_NAME 8
  487. #define IMAGE_SIZEOF_SECTION_HEADER 40
  488. #define IMAGE_SIZEOF_SYMBOL 18
  489. #define IMAGE_SIZEOF_AUX_SYMBOL 18
  490. #define IMAGE_SIZEOF_RELOCATION 10
  491. #define IMAGE_SIZEOF_BASE_RELOCATION 8
  492. #define IMAGE_SIZEOF_LINENUMBER 6
  493. #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
  494. #define SIZEOF_RFPO_DATA 16
  495. #define IMAGE_SUBSYSTEM_UNKNOWN    0
  496. #define IMAGE_SUBSYSTEM_NATIVE    1
  497. #define IMAGE_SUBSYSTEM_WINDOWS_GUI    2
  498. #define IMAGE_SUBSYSTEM_WINDOWS_CUI    3
  499. #define IMAGE_SUBSYSTEM_OS2_CUI    5
  500. #define IMAGE_SUBSYSTEM_POSIX_CUI    7
  501. #define IMAGE_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) ((DWORD)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+((PIMAGE_NT_HEADERS)(h))->FileHeader.SizeOfOptionalHeader))
  502. #define IMAGE_DIRECTORY_ENTRY_EXPORT    0
  503. #define IMAGE_DIRECTORY_ENTRY_IMPORT    1
  504. #define IMAGE_DIRECTORY_ENTRY_RESOURCE    2
  505. #define IMAGE_DIRECTORY_ENTRY_EXCEPTION    3
  506. #define IMAGE_DIRECTORY_ENTRY_SECURITY    4
  507. #define IMAGE_DIRECTORY_ENTRY_BASERELOC    5
  508. #define IMAGE_DIRECTORY_ENTRY_DEBUG    6
  509. #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT    7
  510. #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR    8
  511. #define IMAGE_DIRECTORY_ENTRY_TLS    9
  512. #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG    10
  513. #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT    11
  514. #define IMAGE_DIRECTORY_ENTRY_IAT    12
  515. #define IMAGE_SCN_TYPE_NO_PAD 8
  516. #define IMAGE_SCN_CNT_CODE 32
  517. #define IMAGE_SCN_CNT_INITIALIZED_DATA 64
  518. #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 128
  519. #define IMAGE_SCN_LNK_OTHER 256
  520. #define IMAGE_SCN_LNK_INFO 512
  521. #define IMAGE_SCN_LNK_REMOVE 2048
  522. #define IMAGE_SCN_LNK_COMDAT 4096
  523. #define IMAGE_SCN_MEM_FARDATA 0x8000
  524. #define IMAGE_SCN_MEM_PURGEABLE 0x20000
  525. #define IMAGE_SCN_MEM_16BIT 0x20000
  526. #define IMAGE_SCN_MEM_LOCKED  0x40000
  527. #define IMAGE_SCN_MEM_PRELOAD 0x80000
  528. #define IMAGE_SCN_ALIGN_1BYTES 0x100000
  529. #define IMAGE_SCN_ALIGN_2BYTES 0x200000
  530. #define IMAGE_SCN_ALIGN_4BYTES 0x300000
  531. #define IMAGE_SCN_ALIGN_8BYTES 0x400000
  532. #define IMAGE_SCN_ALIGN_16BYTES 0x500000
  533. #define IMAGE_SCN_ALIGN_32BYTES 0x600000
  534. #define IMAGE_SCN_ALIGN_64BYTES 0x700000
  535. #define IMAGE_SCN_LNK_NRELOC_OVFL 0x1000000
  536. #define IMAGE_SCN_MEM_DISCARDABLE 0x2000000
  537. #define IMAGE_SCN_MEM_NOT_CACHED 0x4000000
  538. #define IMAGE_SCN_MEM_NOT_PAGED 0x8000000
  539. #define IMAGE_SCN_MEM_SHARED 0x10000000
  540. #define IMAGE_SCN_MEM_EXECUTE 0x20000000
  541. #define IMAGE_SCN_MEM_READ 0x40000000
  542. #define IMAGE_SCN_MEM_WRITE 0x80000000
  543. #define IMAGE_SYM_UNDEFINED    0
  544. #define IMAGE_SYM_ABSOLUTE (-1)
  545. #define IMAGE_SYM_DEBUG    (-2)
  546. #define IMAGE_SYM_TYPE_NULL 0
  547. #define IMAGE_SYM_TYPE_VOID 1
  548. #define IMAGE_SYM_TYPE_CHAR 2
  549. #define IMAGE_SYM_TYPE_SHORT 3
  550. #define IMAGE_SYM_TYPE_INT 4
  551. #define IMAGE_SYM_TYPE_LONG 5
  552. #define IMAGE_SYM_TYPE_FLOAT 6
  553. #define IMAGE_SYM_TYPE_DOUBLE 7
  554. #define IMAGE_SYM_TYPE_STRUCT 8
  555. #define IMAGE_SYM_TYPE_UNION 9
  556. #define IMAGE_SYM_TYPE_ENUM 10
  557. #define IMAGE_SYM_TYPE_MOE 11
  558. #define IMAGE_SYM_TYPE_BYTE 12
  559. #define IMAGE_SYM_TYPE_WORD 13
  560. #define IMAGE_SYM_TYPE_UINT 14
  561. #define IMAGE_SYM_TYPE_DWORD 15
  562. #define IMAGE_SYM_TYPE_PCODE 32768
  563. #define IMAGE_SYM_DTYPE_NULL 0
  564. #define IMAGE_SYM_DTYPE_POINTER 1
  565. #define IMAGE_SYM_DTYPE_FUNCTION 2
  566. #define IMAGE_SYM_DTYPE_ARRAY 3
  567. #define IMAGE_SYM_CLASS_END_OF_FUNCTION    (-1)
  568. #define IMAGE_SYM_CLASS_NULL 0
  569. #define IMAGE_SYM_CLASS_AUTOMATIC 1
  570. #define IMAGE_SYM_CLASS_EXTERNAL 2
  571. #define IMAGE_SYM_CLASS_STATIC 3
  572. #define IMAGE_SYM_CLASS_REGISTER 4
  573. #define IMAGE_SYM_CLASS_EXTERNAL_DEF 5
  574. #define IMAGE_SYM_CLASS_LABEL 6
  575. #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 7
  576. #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8
  577. #define IMAGE_SYM_CLASS_ARGUMENT 9
  578. #define IMAGE_SYM_CLASS_STRUCT_TAG 10
  579. #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 11
  580. #define IMAGE_SYM_CLASS_UNION_TAG 12
  581. #define IMAGE_SYM_CLASS_TYPE_DEFINITION 13
  582. #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 14
  583. #define IMAGE_SYM_CLASS_ENUM_TAG 15
  584. #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16
  585. #define IMAGE_SYM_CLASS_REGISTER_PARAM 17
  586. #define IMAGE_SYM_CLASS_BIT_FIELD 18
  587. #define IMAGE_SYM_CLASS_FAR_EXTERNAL 68
  588. #define IMAGE_SYM_CLASS_BLOCK 100
  589. #define IMAGE_SYM_CLASS_FUNCTION 101
  590. #define IMAGE_SYM_CLASS_END_OF_STRUCT 102
  591. #define IMAGE_SYM_CLASS_FILE 103
  592. #define IMAGE_SYM_CLASS_SECTION 104
  593. #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 105
  594. #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
  595. #define IMAGE_COMDAT_SELECT_ANY 2
  596. #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
  597. #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
  598. #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
  599. #define IMAGE_COMDAT_SELECT_LARGEST 6
  600. #define IMAGE_COMDAT_SELECT_NEWEST 7
  601. #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
  602. #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
  603. #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
  604. #define IMAGE_REL_I386_ABSOLUTE 0
  605. #define IMAGE_REL_I386_DIR16 1
  606. #define IMAGE_REL_I386_REL16 2
  607. #define IMAGE_REL_I386_DIR32 6
  608. #define IMAGE_REL_I386_DIR32NB 7
  609. #define IMAGE_REL_I386_SEG12 9
  610. #define IMAGE_REL_I386_SECTION 10
  611. #define IMAGE_REL_I386_SECREL 11
  612. #define IMAGE_REL_I386_REL32 20
  613. #define IMAGE_REL_MIPS_ABSOLUTE 0
  614. #define IMAGE_REL_MIPS_REFHALF 1
  615. #define IMAGE_REL_MIPS_REFWORD 2
  616. #define IMAGE_REL_MIPS_JMPADDR 3
  617. #define IMAGE_REL_MIPS_REFHI 4
  618. #define IMAGE_REL_MIPS_REFLO 5
  619. #define IMAGE_REL_MIPS_GPREL 6
  620. #define IMAGE_REL_MIPS_LITERAL 7
  621. #define IMAGE_REL_MIPS_SECTION 10
  622. #define IMAGE_REL_MIPS_SECREL 11
  623. #define IMAGE_REL_MIPS_SECRELLO 12
  624. #define IMAGE_REL_MIPS_SECRELHI 13
  625. #define IMAGE_REL_MIPS_REFWORDNB 34
  626. #define IMAGE_REL_MIPS_PAIR 35
  627. #define IMAGE_REL_ALPHA_ABSOLUTE 0
  628. #define IMAGE_REL_ALPHA_REFLONG 1
  629. #define IMAGE_REL_ALPHA_REFQUAD 2
  630. #define IMAGE_REL_ALPHA_GPREL32 3
  631. #define IMAGE_REL_ALPHA_LITERAL 4
  632. #define IMAGE_REL_ALPHA_LITUSE 5
  633. #define IMAGE_REL_ALPHA_GPDISP 6
  634. #define IMAGE_REL_ALPHA_BRADDR 7
  635. #define IMAGE_REL_ALPHA_HINT 8
  636. #define IMAGE_REL_ALPHA_INLINE_REFLONG 9
  637. #define IMAGE_REL_ALPHA_REFHI 10
  638. #define IMAGE_REL_ALPHA_REFLO 11
  639. #define IMAGE_REL_ALPHA_PAIR 12
  640. #define IMAGE_REL_ALPHA_MATCH 13
  641. #define IMAGE_REL_ALPHA_SECTION 14
  642. #define IMAGE_REL_ALPHA_SECREL 15
  643. #define IMAGE_REL_ALPHA_REFLONGNB 16
  644. #define IMAGE_REL_ALPHA_SECRELLO 17
  645. #define IMAGE_REL_ALPHA_SECRELHI 18
  646. #define IMAGE_REL_PPC_ABSOLUTE 0
  647. #define IMAGE_REL_PPC_ADDR64 1
  648. #define IMAGE_REL_PPC_ADDR32 2
  649. #define IMAGE_REL_PPC_ADDR24 3
  650. #define IMAGE_REL_PPC_ADDR16 4
  651. #define IMAGE_REL_PPC_ADDR14 5
  652. #define IMAGE_REL_PPC_REL24 6
  653. #define IMAGE_REL_PPC_REL14 7
  654. #define IMAGE_REL_PPC_TOCREL16 8
  655. #define IMAGE_REL_PPC_TOCREL14 9
  656. #define IMAGE_REL_PPC_ADDR32NB 10
  657. #define IMAGE_REL_PPC_SECREL 11
  658. #define IMAGE_REL_PPC_SECTION 12
  659. #define IMAGE_REL_PPC_IFGLUE 13
  660. #define IMAGE_REL_PPC_IMGLUE 14
  661. #define IMAGE_REL_PPC_SECREL16 15
  662. #define IMAGE_REL_PPC_REFHI 16
  663. #define IMAGE_REL_PPC_REFLO 17
  664. #define IMAGE_REL_PPC_PAIR 18
  665. #define IMAGE_REL_PPC_TYPEMASK 255
  666. #define IMAGE_REL_PPC_NEG 256
  667. #define IMAGE_REL_PPC_BRTAKEN 512
  668. #define IMAGE_REL_PPC_BRNTAKEN 1024
  669. #define IMAGE_REL_PPC_TOCDEFN 2048
  670. #define IMAGE_REL_BASED_ABSOLUTE 0
  671. #define IMAGE_REL_BASED_HIGH 1
  672. #define IMAGE_REL_BASED_LOW 2
  673. #define IMAGE_REL_BASED_HIGHLOW 3
  674. #define IMAGE_REL_BASED_HIGHADJ 4
  675. #define IMAGE_REL_BASED_MIPS_JMPADDR 5
  676. #define IMAGE_ARCHIVE_START_SIZE 8
  677. #define IMAGE_ARCHIVE_START "!<arch>\n"
  678. #define IMAGE_ARCHIVE_END "`\n"
  679. #define IMAGE_ARCHIVE_PAD "\n"
  680. #define IMAGE_ARCHIVE_LINKER_MEMBER "/               "
  681. #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "//              "
  682. #define IMAGE_ORDINAL_FLAG 0x80000000
  683. #define IMAGE_SNAP_BY_ORDINAL(o) ((o&IMAGE_ORDINAL_FLAG)!=0)
  684. #define IMAGE_ORDINAL(o) (o&0xffff)
  685. #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
  686. #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
  687. #define IMAGE_DEBUG_TYPE_UNKNOWN 0
  688. #define IMAGE_DEBUG_TYPE_COFF 1
  689. #define IMAGE_DEBUG_TYPE_CODEVIEW 2
  690. #define IMAGE_DEBUG_TYPE_FPO 3
  691. #define IMAGE_DEBUG_TYPE_MISC 4
  692. #define IMAGE_DEBUG_TYPE_EXCEPTION 5
  693. #define IMAGE_DEBUG_TYPE_FIXUP 6
  694. #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
  695. #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
  696. #define FRAME_FPO 0
  697. #define FRAME_TRAP 1
  698. #define FRAME_TSS 2
  699. #define FRAME_NONFPO 3
  700. #define IMAGE_DEBUG_MISC_EXENAME 1
  701. #define N_BTMASK 0x000F
  702. #define N_TMASK 0x0030
  703. #define N_TMASK1 0x00C0
  704. #define N_TMASK2 0x00F0
  705. #define N_BTSHFT 4
  706. #define N_TSHIFT 2
  707. #define IS_TEXT_UNICODE_ASCII16 1
  708. #define IS_TEXT_UNICODE_REVERSE_ASCII16 16
  709. #define IS_TEXT_UNICODE_STATISTICS 2
  710. #define IS_TEXT_UNICODE_REVERSE_STATISTICS 32
  711. #define IS_TEXT_UNICODE_CONTROLS 4
  712. #define IS_TEXT_UNICODE_REVERSE_CONTROLS 64
  713. #define IS_TEXT_UNICODE_SIGNATURE 8
  714. #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 128
  715. #define IS_TEXT_UNICODE_ILLEGAL_CHARS 256
  716. #define IS_TEXT_UNICODE_ODD_LENGTH 512
  717. #define IS_TEXT_UNICODE_NULL_BYTES 4096
  718. #define IS_TEXT_UNICODE_UNICODE_MASK 15
  719. #define IS_TEXT_UNICODE_REVERSE_MASK 240
  720. #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 3840
  721. #define IS_TEXT_UNICODE_NOT_ASCII_MASK 61440
  722. #define SERVICE_KERNEL_DRIVER 1
  723. #define SERVICE_FILE_SYSTEM_DRIVER 2
  724. #define SERVICE_ADAPTER 4
  725. #define SERVICE_RECOGNIZER_DRIVER 8
  726. #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER|SERVICE_FILE_SYSTEM_DRIVER|SERVICE_RECOGNIZER_DRIVER)
  727. #define SERVICE_WIN32_OWN_PROCESS 16
  728. #define SERVICE_WIN32_SHARE_PROCESS 32
  729. #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS|SERVICE_WIN32_SHARE_PROCESS)
  730. #define SERVICE_INTERACTIVE_PROCESS 256
  731. #define SERVICE_TYPE_ALL (SERVICE_WIN32|SERVICE_ADAPTER|SERVICE_DRIVER|SERVICE_INTERACTIVE_PROCESS)
  732. #define SERVICE_BOOT_START 0
  733. #define SERVICE_SYSTEM_START 1
  734. #define SERVICE_AUTO_START 2
  735. #define SERVICE_DEMAND_START 3
  736. #define SERVICE_DISABLED 4
  737. #define SERVICE_ERROR_IGNORE 0
  738. #define SERVICE_ERROR_NORMAL 1
  739. #define SERVICE_ERROR_SEVERE 2
  740. #define SERVICE_ERROR_CRITICAL 3
  741. #define SE_OWNER_DEFAULTED 1
  742. #define SE_GROUP_DEFAULTED 2
  743. #define SE_DACL_PRESENT 4
  744. #define SE_DACL_DEFAULTED 8
  745. #define SE_SACL_PRESENT 16
  746. #define SE_SACL_DEFAULTED 32
  747. #define SE_SELF_RELATIVE 0x8000
  748. #define SECURITY_DESCRIPTOR_MIN_LENGTH 20
  749. #define SECURITY_DESCRIPTOR_REVISION 1
  750. #define SECURITY_DESCRIPTOR_REVISION1 1
  751. #define SE_PRIVILEGE_ENABLED_BY_DEFAULT 1
  752. #define SE_PRIVILEGE_ENABLED 2
  753. #define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
  754. #define PRIVILEGE_SET_ALL_NECESSARY 1
  755. #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
  756. #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
  757. #define SECURITY_DYNAMIC_TRACKING TRUE
  758. #define SECURITY_STATIC_TRACKING FALSE
  759. #define TOKEN_SOURCE_LENGTH 8
  760. #define TOKEN_ADJUST_DEFAULT    128
  761. #define TOKEN_ADJUST_GROUPS    64
  762. #define TOKEN_ADJUST_PRIVILEGES    32
  763. #define TOKEN_ALL_ACCESS    0xf00ff
  764. #define TOKEN_ASSIGN_PRIMARY    1
  765. #define TOKEN_DUPLICATE    2
  766. #define TOKEN_EXECUTE    0x20000
  767. #define TOKEN_IMPERSONATE    4
  768. #define TOKEN_QUERY    8
  769. #define TOKEN_QUERY_SOURCE    16
  770. #define TOKEN_READ    0x20008
  771. #define TOKEN_WRITE    0x200e0
  772. #define DLL_PROCESS_DETACH    0
  773. #define DLL_PROCESS_ATTACH    1
  774. #define DLL_THREAD_ATTACH    2
  775. #define DLL_THREAD_DETACH    3
  776. #define DBG_CONTINUE 0x10002
  777. #define DBG_TERMINATE_THREAD 0x40010003
  778. #define DBG_TERMINATE_PROCESS 0x40010004
  779. #define DBG_CONTROL_C 0x40010005
  780. #define DBG_CONTROL_BREAK 0x40010008
  781. #define DBG_EXCEPTION_NOT_HANDLED 0x80010001
  782. #define TAPE_ABSOLUTE_POSITION 0
  783. #define TAPE_LOGICAL_POSITION 1
  784. #define TAPE_PSEUDO_LOGICAL_POSITION 2
  785. #define TAPE_REWIND 0
  786. #define TAPE_ABSOLUTE_BLOCK 1
  787. #define TAPE_LOGICAL_BLOCK 2
  788. #define TAPE_PSEUDO_LOGICAL_BLOCK 3
  789. #define TAPE_SPACE_END_OF_DATA 4
  790. #define TAPE_SPACE_RELATIVE_BLOCKS 5
  791. #define TAPE_SPACE_FILEMARKS 6
  792. #define TAPE_SPACE_SEQUENTIAL_FMKS 7
  793. #define TAPE_SPACE_SETMARKS 8
  794. #define TAPE_SPACE_SEQUENTIAL_SMKS 9
  795. #define TAPE_DRIVE_FIXED 1
  796. #define TAPE_DRIVE_SELECT 2
  797. #define TAPE_DRIVE_INITIATOR 4
  798. #define TAPE_DRIVE_ERASE_SHORT 16
  799. #define TAPE_DRIVE_ERASE_LONG 32
  800. #define TAPE_DRIVE_ERASE_BOP_ONLY 64
  801. #define TAPE_DRIVE_ERASE_IMMEDIATE 128
  802. #define TAPE_DRIVE_TAPE_CAPACITY 256
  803. #define TAPE_DRIVE_TAPE_REMAINING 512
  804. #define TAPE_DRIVE_FIXED_BLOCK 1024
  805. #define TAPE_DRIVE_VARIABLE_BLOCK 2048
  806. #define TAPE_DRIVE_WRITE_PROTECT 4096
  807. #define TAPE_DRIVE_EOT_WZ_SIZE 8192
  808. #define TAPE_DRIVE_ECC 0x10000
  809. #define TAPE_DRIVE_COMPRESSION 0x20000
  810. #define TAPE_DRIVE_PADDING 0x40000
  811. #define TAPE_DRIVE_REPORT_SMKS 0x80000
  812. #define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x100000
  813. #define TAPE_DRIVE_GET_LOGICAL_BLK 0x200000
  814. #define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x400000
  815. #define TAPE_DRIVE_RESERVED_BIT 0x80000000
  816. #define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
  817. #define TAPE_DRIVE_TENSION 0x80000002
  818. #define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
  819. #define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
  820. #define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
  821. #define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
  822. #define TAPE_DRIVE_TENSION_IMMED 0x80000040
  823. #define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
  824. #define TAPE_DRIVE_SET_ECC 0x80000100
  825. #define TAPE_DRIVE_SET_COMPRESSION 0x80000200
  826. #define TAPE_DRIVE_SET_PADDING 0x80000400
  827. #define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
  828. #define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
  829. #define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
  830. #define TAPE_DRIVE_LOGICAL_BLK 0x80004000
  831. #define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
  832. #define TAPE_DRIVE_END_OF_DATA 0x80010000
  833. #define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
  834. #define TAPE_DRIVE_FILEMARKS 0x80040000
  835. #define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
  836. #define TAPE_DRIVE_SETMARKS 0x80100000
  837. #define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
  838. #define TAPE_DRIVE_REVERSE_POSITION 0x80400000
  839. #define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
  840. #define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
  841. #define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
  842. #define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
  843. #define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
  844. #define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
  845. #define TAPE_DRIVE_FORMAT 0xA0000000
  846. #define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
  847. #define TAPE_DRIVE_HIGH_FEATURES 0x80000000
  848. #define TAPE_FIXED_PARTITIONS    0
  849. #define TAPE_INITIATOR_PARTITIONS    2
  850. #define TAPE_SELECT_PARTITIONS    1
  851. #define TAPE_FILEMARKS    1
  852. #define TAPE_LONG_FILEMARKS    3
  853. #define TAPE_SETMARKS    0
  854. #define TAPE_SHORT_FILEMARKS    2
  855. #define TAPE_ERASE_LONG 1
  856. #define TAPE_ERASE_SHORT 0
  857. #define TAPE_LOAD 0
  858. #define TAPE_UNLOAD 1
  859. #define TAPE_TENSION 2
  860. #define TAPE_LOCK 3
  861. #define TAPE_UNLOCK 4
  862. #define TAPE_FORMAT 5
  863. #define BTYPE(x) ((x)&N_BTMASK)
  864. #define ISPTR(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT))
  865. #define ISFCN(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION<<N_BTSHFT))
  866. #define ISARY(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY<<N_BTSHFT))
  867. #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG||(x)==IMAGE_SYM_CLASS_UNION_TAG||(x)==IMAGE_SYM_CLASS_ENUM_TAG)
  868. #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
  869. #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
  870.  
  871. #ifndef RC_INVOKED
  872. typedef DWORD ACCESS_MASK;
  873. typedef struct _GENERIC_MAPPING {
  874.     ACCESS_MASK GenericRead;
  875.     ACCESS_MASK GenericWrite;
  876.     ACCESS_MASK GenericExecute;
  877.     ACCESS_MASK GenericAll;
  878. } GENERIC_MAPPING, *PGENERIC_MAPPING;
  879. typedef struct _ACE_HEADER {
  880.     BYTE AceType;
  881.     BYTE AceFlags;
  882.     WORD AceSize;
  883. } ACE_HEADER;
  884. typedef struct _ACCESS_ALLOWED_ACE {
  885.     ACE_HEADER Header;
  886.     ACCESS_MASK Mask;
  887.     DWORD SidStart;
  888. } ACCESS_ALLOWED_ACE;
  889. typedef struct _ACCESS_DENIED_ACE {
  890.     ACE_HEADER Header;
  891.     ACCESS_MASK Mask;
  892.     DWORD SidStart;
  893. } ACCESS_DENIED_ACE;
  894. typedef struct _ACL {
  895.     BYTE AclRevision;
  896.     BYTE Sbz1;
  897.     WORD AclSize;
  898.     WORD AceCount;
  899.     WORD Sbz2;
  900. } ACL,*PACL;
  901. typedef struct _ACL_REVISION_INFORMATION {
  902.     DWORD AclRevision;
  903. } ACL_REVISION_INFORMATION;
  904. typedef struct _ACL_SIZE_INFORMATION {
  905.     DWORD   AceCount;
  906.     DWORD   AclBytesInUse;
  907.     DWORD   AclBytesFree;
  908. } ACL_SIZE_INFORMATION;
  909.  
  910. /* FIXME: add more machines */
  911. #ifdef _X86_
  912. #define SIZE_OF_80387_REGISTERS    80
  913. #define CONTEXT_i386    0x10000
  914. #define CONTEXT_i486    0x10000
  915. #define CONTEXT_CONTROL    (CONTEXT_i386|0x00000001L)
  916. #define CONTEXT_INTEGER    (CONTEXT_i386|0x00000002L)
  917. #define CONTEXT_SEGMENTS    (CONTEXT_i386|0x00000004L)
  918. #define CONTEXT_FLOATING_POINT    (CONTEXT_i386|0x00000008L)
  919. #define CONTEXT_DEBUG_REGISTERS    (CONTEXT_i386|0x00000010L)
  920. #define CONTEXT_FULL    (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
  921. typedef struct _FLOATING_SAVE_AREA {
  922.     DWORD    ControlWord;
  923.     DWORD    StatusWord;
  924.     DWORD    TagWord;
  925.     DWORD    ErrorOffset;
  926.     DWORD    ErrorSelector;
  927.     DWORD    DataOffset;
  928.     DWORD    DataSelector;
  929.     BYTE    RegisterArea[80];
  930.     DWORD    Cr0NpxState;
  931. } FLOATING_SAVE_AREA;
  932. typedef struct _CONTEXT {
  933.     DWORD    ContextFlags;
  934.     DWORD    Dr0;
  935.     DWORD    Dr1;
  936.     DWORD    Dr2;
  937.     DWORD    Dr3;
  938.     DWORD    Dr6;
  939.     DWORD    Dr7;
  940.     FLOATING_SAVE_AREA FloatSave;
  941.     DWORD    SegGs;
  942.     DWORD    SegFs;
  943.     DWORD    SegEs;
  944.     DWORD    SegDs;
  945.     DWORD    Edi;
  946.     DWORD    Esi;
  947.     DWORD    Ebx;
  948.     DWORD    Edx;
  949.     DWORD    Ecx;
  950.     DWORD    Eax;
  951.     DWORD    Ebp;
  952.     DWORD    Eip;
  953.     DWORD    SegCs;
  954.     DWORD    EFlags;
  955.     DWORD    Esp;
  956.     DWORD    SegSs;
  957. } CONTEXT;
  958. #elif defined(_PPC_)
  959. #define CONTEXT_CONTROL    1L
  960. #define CONTEXT_FLOATING_POINT    2L
  961. #define CONTEXT_INTEGER    4L
  962. #define CONTEXT_DEBUG_REGISTERS    8L
  963. #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
  964. typedef struct {
  965.     double Fpr0;
  966.     double Fpr1;
  967.     double Fpr2;
  968.     double Fpr3;
  969.     double Fpr4;
  970.     double Fpr5;
  971.     double Fpr6;
  972.     double Fpr7;
  973.     double Fpr8;
  974.     double Fpr9;
  975.     double Fpr10;
  976.     double Fpr11;
  977.     double Fpr12;
  978.     double Fpr13;
  979.     double Fpr14;
  980.     double Fpr15;
  981.     double Fpr16;
  982.     double Fpr17;
  983.     double Fpr18;
  984.     double Fpr19;
  985.     double Fpr20;
  986.     double Fpr21;
  987.     double Fpr22;
  988.     double Fpr23;
  989.     double Fpr24;
  990.     double Fpr25;
  991.     double Fpr26;
  992.     double Fpr27;
  993.     double Fpr28;
  994.     double Fpr29;
  995.     double Fpr30;
  996.     double Fpr31;
  997.     double Fpscr;
  998.     DWORD Gpr0;
  999.     DWORD Gpr1;
  1000.     DWORD Gpr2;
  1001.     DWORD Gpr3;
  1002.     DWORD Gpr4;
  1003.     DWORD Gpr5;
  1004.     DWORD Gpr6;
  1005.     DWORD Gpr7;
  1006.     DWORD Gpr8;
  1007.     DWORD Gpr9;
  1008.     DWORD Gpr10;
  1009.     DWORD Gpr11;
  1010.     DWORD Gpr12;
  1011.     DWORD Gpr13;
  1012.     DWORD Gpr14;
  1013.     DWORD Gpr15;
  1014.     DWORD Gpr16;
  1015.     DWORD Gpr17;
  1016.     DWORD Gpr18;
  1017.     DWORD Gpr19;
  1018.     DWORD Gpr20;
  1019.     DWORD Gpr21;
  1020.     DWORD Gpr22;
  1021.     DWORD Gpr23;
  1022.     DWORD Gpr24;
  1023.     DWORD Gpr25;
  1024.     DWORD Gpr26;
  1025.     DWORD Gpr27;
  1026.     DWORD Gpr28;
  1027.     DWORD Gpr29;
  1028.     DWORD Gpr30;
  1029.     DWORD Gpr31;
  1030.     DWORD Cr;
  1031.     DWORD Xer;
  1032.     DWORD Msr;
  1033.     DWORD Iar;
  1034.     DWORD Lr;
  1035.     DWORD Ctr;
  1036.     DWORD ContextFlags;
  1037.     DWORD Fill[3];
  1038.     DWORD Dr0;
  1039.     DWORD Dr1;
  1040.     DWORD Dr2;
  1041.     DWORD Dr3;
  1042.     DWORD Dr4;
  1043.     DWORD Dr5;
  1044.     DWORD Dr6;
  1045.     DWORD Dr7;
  1046. } CONTEXT;
  1047. #elif defined(_ALPHA_)
  1048. #define CONTEXT_ALPHA    0x20000
  1049. #define CONTEXT_CONTROL    (CONTEXT_ALPHA|1L)
  1050. #define CONTEXT_FLOATING_POINT    (CONTEXT_ALPHA|2L)
  1051. #define CONTEXT_INTEGER    (CONTEXT_ALPHA|4L)
  1052. #define CONTEXT_FULL    (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
  1053. typedef struct _CONTEXT {
  1054.     ULONGLONG FltF0;
  1055.     ULONGLONG FltF1;
  1056.     ULONGLONG FltF2;
  1057.     ULONGLONG FltF3;
  1058.     ULONGLONG FltF4;
  1059.     ULONGLONG FltF5;
  1060.     ULONGLONG FltF6;
  1061.     ULONGLONG FltF7;
  1062.     ULONGLONG FltF8;
  1063.     ULONGLONG FltF9;
  1064.     ULONGLONG FltF10;
  1065.     ULONGLONG FltF11;
  1066.     ULONGLONG FltF12;
  1067.     ULONGLONG FltF13;
  1068.     ULONGLONG FltF14;
  1069.     ULONGLONG FltF15;
  1070.     ULONGLONG FltF16;
  1071.     ULONGLONG FltF17;
  1072.     ULONGLONG FltF18;
  1073.     ULONGLONG FltF19;
  1074.     ULONGLONG FltF20;
  1075.     ULONGLONG FltF21;
  1076.     ULONGLONG FltF22;
  1077.     ULONGLONG FltF23;
  1078.     ULONGLONG FltF24;
  1079.     ULONGLONG FltF25;
  1080.     ULONGLONG FltF26;
  1081.     ULONGLONG FltF27;
  1082.     ULONGLONG FltF28;
  1083.     ULONGLONG FltF29;
  1084.     ULONGLONG FltF30;
  1085.     ULONGLONG FltF31;
  1086.     ULONGLONG IntV0;
  1087.     ULONGLONG IntT0;
  1088.     ULONGLONG IntT1;
  1089.     ULONGLONG IntT2;
  1090.     ULONGLONG IntT3;
  1091.     ULONGLONG IntT4;
  1092.     ULONGLONG IntT5;
  1093.     ULONGLONG IntT6;
  1094.     ULONGLONG IntT7;
  1095.     ULONGLONG IntS0;
  1096.     ULONGLONG IntS1;
  1097.     ULONGLONG IntS2;
  1098.     ULONGLONG IntS3;
  1099.     ULONGLONG IntS4;
  1100.     ULONGLONG IntS5;
  1101.     ULONGLONG IntFp;
  1102.     ULONGLONG IntA0;
  1103.     ULONGLONG IntA1;
  1104.     ULONGLONG IntA2;
  1105.     ULONGLONG IntA3;
  1106.     ULONGLONG IntA4;
  1107.     ULONGLONG IntA5;
  1108.     ULONGLONG IntT8;
  1109.     ULONGLONG IntT9;
  1110.     ULONGLONG IntT10;
  1111.     ULONGLONG IntT11;
  1112.     ULONGLONG IntRa;
  1113.     ULONGLONG IntT12;
  1114.     ULONGLONG IntAt;
  1115.     ULONGLONG IntGp;
  1116.     ULONGLONG IntSp;
  1117.     ULONGLONG IntZero;
  1118.     ULONGLONG Fpcr;
  1119.     ULONGLONG SoftFpcr;
  1120.     ULONGLONG Fir;
  1121.     DWORD Psr;
  1122.     DWORD ContextFlags;
  1123.     DWORD Fill[4];
  1124. } CONTEXT, *PCONTEXT;
  1125. #elif defined(SHx)
  1126.  
  1127. /* These are the debug or break registers on the SH3 */
  1128. typedef struct _DEBUG_REGISTERS {
  1129.     ULONG  BarA;
  1130.     UCHAR  BasrA;
  1131.     UCHAR  BamrA;
  1132.     USHORT BbrA;
  1133.     ULONG  BarB;
  1134.     UCHAR  BasrB;
  1135.     UCHAR  BamrB;
  1136.     USHORT BbrB;
  1137.     ULONG  BdrB;
  1138.     ULONG  BdmrB;
  1139.     USHORT Brcr;
  1140.     USHORT Align;
  1141. } DEBUG_REGISTERS, *PDEBUG_REGISTERS;
  1142.  
  1143. /* The following flags control the contents of the CONTEXT structure. */
  1144.  
  1145. #define CONTEXT_SH3        0x00000040
  1146. #define CONTEXT_SH4        0x000000c0    /* CONTEXT_SH3 | 0x80 - must contain the SH3 bits */
  1147.  
  1148. #ifdef SH3
  1149. #define CONTEXT_CONTROL         (CONTEXT_SH3 | 0x00000001L)
  1150. #define CONTEXT_INTEGER         (CONTEXT_SH3 | 0x00000002L)
  1151. #define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH3 | 0x00000008L)
  1152. #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS)
  1153. #else    /* SH4 */
  1154. #define CONTEXT_CONTROL         (CONTEXT_SH4 | 0x00000001L)
  1155. #define CONTEXT_INTEGER         (CONTEXT_SH4 | 0x00000002L)
  1156. #define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH4 | 0x00000008L)
  1157. #define CONTEXT_FLOATING_POINT  (CONTEXT_SH4 | 0x00000004L)
  1158. #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS | CONTEXT_FLOATING_POINT)
  1159. #endif
  1160.  
  1161. /* Context Frame */
  1162.  
  1163. /*  This frame is used to store a limited processor context into the */
  1164. /* Thread structure for CPUs which have no floating point support. */
  1165.  
  1166. typedef struct _CONTEXT {
  1167.     /* The flags values within this flag control the contents of */
  1168.     /* a CONTEXT record. */
  1169.  
  1170.     /* If the context record is used as an input parameter, then */
  1171.     /* for each portion of the context record controlled by a flag */
  1172.     /* whose value is set, it is assumed that that portion of the */
  1173.     /* context record contains valid context. If the context record */
  1174.     /* is being used to modify a thread's context, then only that */
  1175.     /* portion of the threads context will be modified. */
  1176.  
  1177.     /* If the context record is used as an IN OUT parameter to capture */
  1178.     /* the context of a thread, then only those portions of the thread's */
  1179.     /* context corresponding to set flags will be returned. */
  1180.  
  1181.     /* The context record is never used as an OUT only parameter. */
  1182.  
  1183.  
  1184.     ULONG ContextFlags;
  1185.  
  1186.     /* This section is specified/returned if the ContextFlags word contains */
  1187.     /* the flag CONTEXT_INTEGER. */
  1188.  
  1189.     /* N.B. The registers RA and R15 are defined in this section, but are */
  1190.     /*  considered part of the control context rather than part of the integer */
  1191.     /*  context. */
  1192.  
  1193.     ULONG PR;
  1194.     ULONG MACH;
  1195.     ULONG MACL;
  1196.     ULONG GBR;
  1197.     ULONG R0;
  1198.     ULONG R1;
  1199.     ULONG R2;
  1200.     ULONG R3;
  1201.     ULONG R4;
  1202.     ULONG R5;
  1203.     ULONG R6;
  1204.     ULONG R7;
  1205.     ULONG R8;
  1206.     ULONG R9;
  1207.     ULONG R10;
  1208.     ULONG R11;
  1209.     ULONG R12;
  1210.     ULONG R13;
  1211.     ULONG R14;
  1212.     ULONG R15;
  1213.  
  1214.     /* This section is specified/returned if the ContextFlags word contains */
  1215.     /* the flag CONTEXT_CONTROL. */
  1216.  
  1217.     /* N.B. The registers r15 and ra are defined in the integer section, */
  1218.     /*   but are considered part of the control context rather than part of */
  1219.     /*   the integer context. */
  1220.  
  1221.     ULONG Fir;
  1222.     ULONG Psr;
  1223.  
  1224. #if !defined(SH3e) && !defined(SH4)
  1225.     ULONG    OldStuff[2];
  1226.     DEBUG_REGISTERS DebugRegisters;
  1227. #else
  1228.     ULONG    Fpscr;
  1229.     ULONG    Fpul;
  1230.     ULONG    FRegs[16];
  1231. #if defined(SH4)
  1232.     ULONG    xFRegs[16];
  1233. #endif
  1234. #endif
  1235. } CONTEXT,*PCONTEXT,*LPCONTEXT;
  1236.  
  1237. #elif defined(MIPS)
  1238.  
  1239. /* The following flags control the contents of the CONTEXT structure. */
  1240.  
  1241. #define CONTEXT_R4000   0x00010000    /* r4000 context */
  1242.  
  1243. #define CONTEXT_CONTROL         (CONTEXT_R4000 | 0x00000001L)
  1244. #define CONTEXT_FLOATING_POINT  (CONTEXT_R4000 | 0x00000002L)
  1245. #define CONTEXT_INTEGER         (CONTEXT_R4000 | 0x00000004L)
  1246.  
  1247. #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
  1248.  
  1249. /* Context Frame */
  1250.  
  1251. /*  N.B. This frame must be exactly a multiple of 16 bytes in length. */
  1252.  
  1253. /*  This frame has a several purposes: 1) it is used as an argument to */
  1254. /*  NtContinue, 2) it is used to constuct a call frame for APC delivery, */
  1255. /*  3) it is used to construct a call frame for exception dispatching */
  1256. /*  in user mode, and 4) it is used in the user level thread creation */
  1257. /*  routines. */
  1258.  
  1259. /*  The layout of the record conforms to a standard call frame. */
  1260.  
  1261.  
  1262. typedef struct _CONTEXT {
  1263.  
  1264.     /* This section is always present and is used as an argument build */
  1265.     /* area. */
  1266.  
  1267.     DWORD Argument[4];
  1268.  
  1269.     /* This section is specified/returned if the ContextFlags word contains */
  1270.     /* the flag CONTEXT_FLOATING_POINT. */
  1271.  
  1272.     DWORD FltF0;
  1273.     DWORD FltF1;
  1274.     DWORD FltF2;
  1275.     DWORD FltF3;
  1276.     DWORD FltF4;
  1277.     DWORD FltF5;
  1278.     DWORD FltF6;
  1279.     DWORD FltF7;
  1280.     DWORD FltF8;
  1281.     DWORD FltF9;
  1282.     DWORD FltF10;
  1283.     DWORD FltF11;
  1284.     DWORD FltF12;
  1285.     DWORD FltF13;
  1286.     DWORD FltF14;
  1287.     DWORD FltF15;
  1288.     DWORD FltF16;
  1289.     DWORD FltF17;
  1290.     DWORD FltF18;
  1291.     DWORD FltF19;
  1292.     DWORD FltF20;
  1293.     DWORD FltF21;
  1294.     DWORD FltF22;
  1295.     DWORD FltF23;
  1296.     DWORD FltF24;
  1297.     DWORD FltF25;
  1298.     DWORD FltF26;
  1299.     DWORD FltF27;
  1300.     DWORD FltF28;
  1301.     DWORD FltF29;
  1302.     DWORD FltF30;
  1303.     DWORD FltF31;
  1304.  
  1305.     /* This section is specified/returned if the ContextFlags word contains */
  1306.     /* the flag CONTEXT_INTEGER. */
  1307.  
  1308.     /* N.B. The registers gp, sp, and ra are defined in this section, but are */
  1309.     /*  considered part of the control context rather than part of the integer */
  1310.     /*  context. */
  1311.  
  1312.     /* N.B. Register zero is not stored in the frame. */
  1313.  
  1314.     DWORD IntZero;
  1315.     DWORD IntAt;
  1316.     DWORD IntV0;
  1317.     DWORD IntV1;
  1318.     DWORD IntA0;
  1319.     DWORD IntA1;
  1320.     DWORD IntA2;
  1321.     DWORD IntA3;
  1322.     DWORD IntT0;
  1323.     DWORD IntT1;
  1324.     DWORD IntT2;
  1325.     DWORD IntT3;
  1326.     DWORD IntT4;
  1327.     DWORD IntT5;
  1328.     DWORD IntT6;
  1329.     DWORD IntT7;
  1330.     DWORD IntS0;
  1331.     DWORD IntS1;
  1332.     DWORD IntS2;
  1333.     DWORD IntS3;
  1334.     DWORD IntS4;
  1335.     DWORD IntS5;
  1336.     DWORD IntS6;
  1337.     DWORD IntS7;
  1338.     DWORD IntT8;
  1339.     DWORD IntT9;
  1340.     DWORD IntK0;
  1341.     DWORD IntK1;
  1342.     DWORD IntGp;
  1343.     DWORD IntSp;
  1344.     DWORD IntS8;
  1345.     DWORD IntRa;
  1346.     DWORD IntLo;
  1347.     DWORD IntHi;
  1348.  
  1349.     /* This section is specified/returned if the ContextFlags word contains */
  1350.     /* the flag CONTEXT_FLOATING_POINT. */
  1351.  
  1352.     DWORD Fsr;
  1353.  
  1354.     /* This section is specified/returned if the ContextFlags word contains */
  1355.     /* the flag CONTEXT_CONTROL. */
  1356.  
  1357.     /* N.B. The registers gp, sp, and ra are defined in the integer section, */
  1358.     /*   but are considered part of the control context rather than part of */
  1359.     /*   the integer context. */
  1360.  
  1361.     DWORD Fir;
  1362.     DWORD Psr;
  1363.  
  1364.     /* The flags values within this flag control the contents of */
  1365.     /* a CONTEXT record. */
  1366.  
  1367.     /* If the context record is used as an input parameter, then */
  1368.     /* for each portion of the context record controlled by a flag */
  1369.     /* whose value is set, it is assumed that that portion of the */
  1370.     /* context record contains valid context. If the context record */
  1371.     /* is being used to modify a thread's context, then only that */
  1372.     /* portion of the threads context will be modified. */
  1373.  
  1374.     /* If the context record is used as an IN OUT parameter to capture */
  1375.     /* the context of a thread, then only those portions of the thread's */
  1376.     /* context corresponding to set flags will be returned. */
  1377.  
  1378.     /* The context record is never used as an OUT only parameter. */
  1379.  
  1380.     DWORD ContextFlags;
  1381.  
  1382.     DWORD Fill[2];
  1383.  
  1384. } CONTEXT,*PCONTEXT,*LPCONTEXT;
  1385. #else
  1386. #error "undefined processor type"
  1387. #endif
  1388. typedef CONTEXT *PCONTEXT,*LPCONTEXT;
  1389. typedef struct _EXCEPTION_RECORD {
  1390.     DWORD ExceptionCode;
  1391.     DWORD ExceptionFlags;
  1392.     struct _EXCEPTION_RECORD *ExceptionRecord;
  1393.     PVOID ExceptionAddress;
  1394.     DWORD NumberParameters;
  1395.     DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
  1396. } EXCEPTION_RECORD,*PEXCEPTION_RECORD;
  1397. typedef struct _EXCEPTION_POINTERS {
  1398.     PEXCEPTION_RECORD ExceptionRecord;
  1399.     PCONTEXT ContextRecord;
  1400. } EXCEPTION_POINTERS,*PEXCEPTION_POINTERS,*LPEXCEPTION_POINTERS;
  1401. typedef union _LARGE_INTEGER {
  1402.     struct {
  1403.         DWORD LowPart;
  1404.         LONG HighPart;
  1405.     }_STRUCT_NAME(u);
  1406.     LONGLONG QuadPart;
  1407. } LARGE_INTEGER;
  1408. typedef LARGE_INTEGER *PLARGE_INTEGER;
  1409. typedef union _ULARGE_INTEGER {
  1410.     struct {
  1411.         DWORD LowPart;
  1412.         DWORD HighPart;
  1413.     }_STRUCT_NAME(u);
  1414.     DWORDLONG QuadPart;
  1415. } ULARGE_INTEGER;
  1416. typedef ULARGE_INTEGER *PULARGE_INTEGER;
  1417. typedef LARGE_INTEGER LUID,*PLUID;
  1418. #pragma pack(push,4)
  1419. typedef struct _LUID_AND_ATTRIBUTES {
  1420.     LUID   Luid;
  1421.     DWORD  Attributes;
  1422. } LUID_AND_ATTRIBUTES;
  1423. #pragma pack(pop)
  1424. typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
  1425. typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
  1426. typedef struct _PRIVILEGE_SET {
  1427.     DWORD PrivilegeCount;
  1428.     DWORD Control;
  1429.     LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
  1430. } PRIVILEGE_SET,*PPRIVILEGE_SET;
  1431. typedef struct _SECURITY_ATTRIBUTES {
  1432.     DWORD nLength;
  1433.     LPVOID lpSecurityDescriptor;
  1434.     BOOL bInheritHandle;
  1435. } SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;
  1436. typedef enum _SECURITY_IMPERSONATION_LEVEL {
  1437.     SecurityAnonymous,
  1438.     SecurityIdentification,
  1439.     SecurityImpersonation,
  1440.     SecurityDelegation
  1441. } SECURITY_IMPERSONATION_LEVEL;
  1442. typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,*PSECURITY_CONTEXT_TRACKING_MODE;
  1443. typedef struct _SECURITY_QUALITY_OF_SERVICE {
  1444.     DWORD Length;
  1445.     SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
  1446.     SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
  1447.     BOOLEAN EffectiveOnly;
  1448. } SECURITY_QUALITY_OF_SERVICE,*PSECURITY_QUALITY_OF_SERVICE;
  1449. typedef PVOID PACCESS_TOKEN;
  1450. typedef struct _SE_IMPERSONATION_STATE {
  1451.     PACCESS_TOKEN Token;
  1452.     BOOLEAN CopyOnOpen;
  1453.     BOOLEAN EffectiveOnly;
  1454.     SECURITY_IMPERSONATION_LEVEL Level;
  1455. } SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
  1456.  
  1457. typedef struct _SID_IDENTIFIER_AUTHORITY {
  1458.     BYTE Value[6];
  1459. } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
  1460.  
  1461. typedef PVOID PSID;
  1462. typedef struct _SID {
  1463.    BYTE  Revision;
  1464.    BYTE  SubAuthorityCount;
  1465.    SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
  1466.    DWORD SubAuthority[ANYSIZE_ARRAY];
  1467. } SID, *PISID;
  1468.  
  1469. typedef struct _SID_AND_ATTRIBUTES {
  1470.     PSID Sid;
  1471.     DWORD Attributes;
  1472. } SID_AND_ATTRIBUTES;
  1473. typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
  1474. typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
  1475. typedef struct _TOKEN_SOURCE {
  1476.     CHAR SourceName[8];
  1477.     LUID SourceIdentifier;
  1478. } TOKEN_SOURCE;
  1479. typedef struct _TOKEN_CONTROL {
  1480.     LUID TokenId;
  1481.     LUID AuthenticationId;
  1482.     LUID ModifiedId;
  1483.     TOKEN_SOURCE TokenSource;
  1484. } TOKEN_CONTROL;
  1485. typedef struct _TOKEN_DEFAULT_DACL {
  1486.     PACL DefaultDacl;
  1487. } TOKEN_DEFAULT_DACL;
  1488. typedef struct _TOKEN_GROUPS {
  1489.     DWORD GroupCount;
  1490.     SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
  1491. } TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
  1492. typedef struct _TOKEN_OWNER {
  1493.     PSID Owner;
  1494. } TOKEN_OWNER;
  1495. typedef struct _TOKEN_PRIMARY_GROUP {
  1496.     PSID PrimaryGroup;
  1497. } TOKEN_PRIMARY_GROUP;
  1498. typedef struct _TOKEN_PRIVILEGES {
  1499.     DWORD PrivilegeCount;
  1500.     LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
  1501. } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
  1502. typedef enum tagTOKEN_TYPE { TokenPrimary=1,TokenImpersonation }TOKEN_TYPE;
  1503. typedef struct _TOKEN_STATISTICS {
  1504.     LUID TokenId;
  1505.     LUID AuthenticationId;
  1506.     LARGE_INTEGER ExpirationTime;
  1507.     TOKEN_TYPE TokenType;
  1508.     SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
  1509.     DWORD DynamicCharged;
  1510.     DWORD DynamicAvailable;
  1511.     DWORD GroupCount;
  1512.     DWORD PrivilegeCount;
  1513.     LUID ModifiedId;
  1514. } TOKEN_STATISTICS;
  1515. typedef struct _TOKEN_USER {
  1516.     SID_AND_ATTRIBUTES User;
  1517. } TOKEN_USER;
  1518. typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
  1519. typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
  1520. typedef struct _SECURITY_DESCRIPTOR {
  1521.     BYTE Revision;
  1522.     BYTE Sbz1;
  1523.     SECURITY_DESCRIPTOR_CONTROL Control;
  1524.     PSID Owner;
  1525.     PSID Group;
  1526.     PACL Sacl;
  1527.     PACL Dacl;
  1528. } SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
  1529. typedef enum _TOKEN_INFORMATION_CLASS {
  1530.     TokenUser=1,TokenGroups,TokenPrivileges,TokenOwner,
  1531.     TokenPrimaryGroup,TokenDefaultDacl,TokenSource,TokenType,
  1532.     TokenImpersonationLevel,TokenStatistics
  1533. } TOKEN_INFORMATION_CLASS;
  1534. typedef enum _SID_NAME_USE {
  1535.     SidTypeUser=1,SidTypeGroup,SidTypeDomain,SidTypeAlias,SidTypeWellKnownGroup,
  1536.     SidTypeDeletedAccount,SidTypeInvalid,SidTypeUnknown
  1537. } SID_NAME_USE,*PSID_NAME_USE;
  1538. typedef struct _FILE_NOTIFY_INFORMATION {
  1539.     DWORD NextEntryOffset;
  1540.     DWORD Action;
  1541.     DWORD FileNameLength;
  1542.     WCHAR FileName[1];
  1543. } FILE_NOTIFY_INFORMATION,*PFILE_NOTIFY_INFORMATION;
  1544. typedef struct _TAPE_ERASE {
  1545.     ULONG Type;
  1546. } TAPE_ERASE,*PTAPE_ERASE;
  1547. typedef struct _TAPE_GET_DRIVE_PARAMETERS {
  1548.     BOOLEAN ECC;
  1549.     BOOLEAN Compression;
  1550.     BOOLEAN DataPadding;
  1551.     BOOLEAN ReportSetmarks;
  1552.      DWORD DefaultBlockSize;
  1553.      DWORD MaximumBlockSize;
  1554.      DWORD MinimumBlockSize;
  1555.      DWORD MaximumPartitionCount;
  1556.      DWORD FeaturesLow;
  1557.      DWORD FeaturesHigh;
  1558.      DWORD EOTWarningZoneSize;
  1559. } TAPE_GET_DRIVE_PARAMETERS,*PTAPE_GET_DRIVE_PARAMETERS;
  1560. typedef struct _TAPE_GET_MEDIA_PARAMETERS {
  1561.     LARGE_INTEGER Capacity;
  1562.     LARGE_INTEGER Remaining;
  1563.     DWORD BlockSize;
  1564.     DWORD PartitionCount;
  1565.     BOOLEAN WriteProtected;
  1566. } TAPE_GET_MEDIA_PARAMETERS,*PTAPE_GET_MEDIA_PARAMETERS;
  1567. typedef struct _TAPE_GET_POSITION {
  1568.     ULONG Type;
  1569.     ULONG Partition;
  1570.     ULONG OffsetLow;
  1571.     ULONG OffsetHigh;
  1572. } TAPE_GET_POSITION,*PTAPE_GET_POSITION;
  1573. typedef struct _TAPE_PREPARE {
  1574.     ULONG Operation;
  1575. } TAPE_PREPARE,*PTAPE_PREPARE;
  1576. typedef struct _TAPE_SET_DRIVE_PARAMETERS {
  1577.     BOOLEAN ECC;
  1578.     BOOLEAN Compression;
  1579.     BOOLEAN DataPadding;
  1580.     BOOLEAN ReportSetmarks;
  1581.     ULONG EOTWarningZoneSize;
  1582. } TAPE_SET_DRIVE_PARAMETERS,*PTAPE_SET_DRIVE_PARAMETERS;
  1583. typedef struct _TAPE_SET_MEDIA_PARAMETERS {
  1584.     ULONG BlockSize;
  1585. } TAPE_SET_MEDIA_PARAMETERS,*PTAPE_SET_MEDIA_PARAMETERS;
  1586. typedef struct _TAPE_SET_POSITION {
  1587.     ULONG Method;
  1588.     ULONG Partition;
  1589.     ULONG OffsetLow;
  1590.     ULONG OffsetHigh;
  1591. } TAPE_SET_POSITION,*PTAPE_SET_POSITION;
  1592. typedef struct _TAPE_WRITE_MARKS {
  1593.     ULONG Type;
  1594.     ULONG Count;
  1595. } TAPE_WRITE_MARKS,*PTAPE_WRITE_MARKS;
  1596. typedef struct _TAPE_CREATE_PARTITION {
  1597.     DWORD Method;
  1598.     DWORD Count;
  1599.     DWORD Size;
  1600. } TAPE_CREATE_PARTITION,*PTAPE_CREATE_PARTITION;
  1601. typedef struct _MEMORY_BASIC_INFORMATION {
  1602.     PVOID BaseAddress;
  1603.     PVOID AllocationBase;
  1604.     DWORD AllocationProtect;
  1605.     DWORD RegionSize;
  1606.     DWORD State;
  1607.     DWORD Protect;
  1608.     DWORD Type;
  1609. } MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;
  1610. typedef struct _MESSAGE_RESOURCE_ENTRY {
  1611.     WORD Length;
  1612.     WORD Flags;
  1613.     BYTE Text[1];
  1614. } MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
  1615. typedef struct _MESSAGE_RESOURCE_BLOCK {
  1616.     DWORD LowId;
  1617.     DWORD HighId;
  1618.     DWORD OffsetToEntries;
  1619. } MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;
  1620. typedef struct _MESSAGE_RESOURCE_DATA {
  1621.     DWORD NumberOfBlocks;
  1622.     MESSAGE_RESOURCE_BLOCK Blocks[1];
  1623. } MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
  1624. typedef struct _LIST_ENTRY {
  1625.     struct _LIST_ENTRY *Flink;
  1626.     struct _LIST_ENTRY *Blink;
  1627. } LIST_ENTRY,*PLIST_ENTRY;
  1628. typedef struct _RTL_CRITICAL_SECTION_DEBUG {
  1629.     WORD Type;
  1630.     WORD CreatorBackTraceIndex;
  1631.     struct _RTL_CRITICAL_SECTION *CriticalSection;
  1632.     LIST_ENTRY ProcessLocksList;
  1633.     DWORD EntryCount;
  1634.     DWORD ContentionCount;
  1635.     DWORD Spare[2];
  1636. } RTL_CRITICAL_SECTION_DEBUG,*PRTL_CRITICAL_SECTION_DEBUG;
  1637. typedef struct _RTL_CRITICAL_SECTION {
  1638.     PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
  1639.     LONG LockCount;
  1640.     LONG RecursionCount;
  1641.     HANDLE OwningThread;
  1642.     HANDLE LockSemaphore;
  1643.     DWORD Reserved;
  1644. } RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;
  1645. typedef struct _EVENTLOGRECORD {
  1646.     DWORD Length;
  1647.     DWORD Reserved;
  1648.     DWORD RecordNumber;
  1649.     DWORD TimeGenerated;
  1650.     DWORD TimeWritten;
  1651.     DWORD EventID;
  1652.     WORD EventType;
  1653.     WORD NumStrings;
  1654.     WORD EventCategory;
  1655.     WORD ReservedFlags;
  1656.     DWORD ClosingRecordNumber;
  1657.     DWORD StringOffset;
  1658.     DWORD UserSidLength;
  1659.     DWORD UserSidOffset;
  1660.     DWORD DataLength;
  1661.     DWORD DataOffset;
  1662. } EVENTLOGRECORD,*PEVENTLOGRECORD;
  1663. typedef struct _IMAGE_VXD_HEADER {
  1664.     WORD e32_magic;
  1665.     BYTE e32_border;
  1666.     BYTE e32_worder;
  1667.     DWORD e32_level;
  1668.     WORD e32_cpu;
  1669.     WORD e32_os;
  1670.     DWORD e32_ver;
  1671.     DWORD e32_mflags;
  1672.     DWORD e32_mpages;
  1673.     DWORD e32_startobj;
  1674.     DWORD e32_eip;
  1675.     DWORD e32_stackobj;
  1676.     DWORD e32_esp;
  1677.     DWORD e32_pagesize;
  1678.     DWORD e32_lastpagesize;
  1679.     DWORD e32_fixupsize;
  1680.     DWORD e32_fixupsum;
  1681.     DWORD e32_ldrsize;
  1682.     DWORD e32_ldrsum;
  1683.     DWORD e32_objtab;
  1684.     DWORD e32_objcnt;
  1685.     DWORD e32_objmap;
  1686.     DWORD e32_itermap;
  1687.     DWORD e32_rsrctab;
  1688.     DWORD e32_rsrccnt;
  1689.     DWORD e32_restab;
  1690.     DWORD e32_enttab;
  1691.     DWORD e32_dirtab;
  1692.     DWORD e32_dircnt;
  1693.     DWORD e32_fpagetab;
  1694.     DWORD e32_frectab;
  1695.     DWORD e32_impmod;
  1696.     DWORD e32_impmodcnt;
  1697.     DWORD e32_impproc;
  1698.     DWORD e32_pagesum;
  1699.     DWORD e32_datapage;
  1700.     DWORD e32_preload;
  1701.     DWORD e32_nrestab;
  1702.     DWORD e32_cbnrestab;
  1703.     DWORD e32_nressum;
  1704.     DWORD e32_autodata;
  1705.     DWORD e32_debuginfo;
  1706.     DWORD e32_debuglen;
  1707.     DWORD e32_instpreload;
  1708.     DWORD e32_instdemand;
  1709.     DWORD e32_heapsize;
  1710.     BYTE e32_res3[12];
  1711.     DWORD e32_winresoff;
  1712.     DWORD e32_winreslen;
  1713.     WORD e32_devid;
  1714.     WORD e32_ddkver;
  1715. } IMAGE_VXD_HEADER,*PIMAGE_VXD_HEADER;
  1716. typedef struct _IMAGE_FILE_HEADER {
  1717.     WORD Machine;
  1718.     WORD NumberOfSections;
  1719.     DWORD TimeDateStamp;
  1720.     DWORD PointerToSymbolTable;
  1721.     DWORD NumberOfSymbols;
  1722.     WORD SizeOfOptionalHeader;
  1723.     WORD Characteristics;
  1724. } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
  1725. typedef struct _IMAGE_DATA_DIRECTORY {
  1726.     DWORD VirtualAddress;
  1727.     DWORD Size;
  1728. } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
  1729. typedef struct _IMAGE_OPTIONAL_HEADER {
  1730.     WORD Magic;
  1731.     BYTE MajorLinkerVersion;
  1732.     BYTE MinorLinkerVersion;
  1733.     DWORD SizeOfCode;
  1734.     DWORD SizeOfInitializedData;
  1735.     DWORD SizeOfUninitializedData;
  1736.     DWORD AddressOfEntryPoint;
  1737.     DWORD BaseOfCode;
  1738.     DWORD BaseOfData;
  1739.     DWORD ImageBase;
  1740.     DWORD SectionAlignment;
  1741.     DWORD FileAlignment;
  1742.     WORD MajorOperatingSystemVersion;
  1743.     WORD MinorOperatingSystemVersion;
  1744.     WORD MajorImageVersion;
  1745.     WORD MinorImageVersion;
  1746.     WORD MajorSubsystemVersion;
  1747.     WORD MinorSubsystemVersion;
  1748.     DWORD Reserved1;
  1749.     DWORD SizeOfImage;
  1750.     DWORD SizeOfHeaders;
  1751.     DWORD CheckSum;
  1752.     WORD Subsystem;
  1753.     WORD DllCharacteristics;
  1754.     DWORD SizeOfStackReserve;
  1755.     DWORD SizeOfStackCommit;
  1756.     DWORD SizeOfHeapReserve;
  1757.     DWORD SizeOfHeapCommit;
  1758.     DWORD LoaderFlags;
  1759.     DWORD NumberOfRvaAndSizes;
  1760.     IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
  1761. } IMAGE_OPTIONAL_HEADER,*PIMAGE_OPTIONAL_HEADER;
  1762. typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
  1763.     WORD Magic;
  1764.     BYTE MajorLinkerVersion;
  1765.     BYTE MinorLinkerVersion;
  1766.     DWORD SizeOfCode;
  1767.     DWORD SizeOfInitializedData;
  1768.     DWORD SizeOfUninitializedData;
  1769.     DWORD AddressOfEntryPoint;
  1770.     DWORD BaseOfCode;
  1771.     DWORD BaseOfData;
  1772.     DWORD BaseOfBss;
  1773.     DWORD GprMask;
  1774.     DWORD CprMask[4];
  1775.     DWORD GpValue;
  1776. } IMAGE_ROM_OPTIONAL_HEADER,*PIMAGE_ROM_OPTIONAL_HEADER;
  1777. typedef struct _IMAGE_DOS_HEADER {
  1778.     WORD e_magic;
  1779.     WORD e_cblp;
  1780.     WORD e_cp;
  1781.     WORD e_crlc;
  1782.     WORD e_cparhdr;
  1783.     WORD e_minalloc;
  1784.     WORD e_maxalloc;
  1785.     WORD e_ss;
  1786.     WORD e_sp;
  1787.     WORD e_csum;
  1788.     WORD e_ip;
  1789.     WORD e_cs;
  1790.     WORD e_lfarlc;
  1791.     WORD e_ovno;
  1792.     WORD e_res[4];
  1793.     WORD e_oemid;
  1794.     WORD e_oeminfo;
  1795.     WORD e_res2[10];
  1796.     LONG e_lfanew;
  1797. } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
  1798. typedef struct _IMAGE_OS2_HEADER {
  1799.     WORD ne_magic;
  1800.     CHAR ne_ver;
  1801.     CHAR ne_rev;
  1802.     WORD ne_enttab;
  1803.     WORD ne_cbenttab;
  1804.     LONG ne_crc;
  1805.     WORD ne_flags;
  1806.     WORD ne_autodata;
  1807.     WORD ne_heap;
  1808.     WORD ne_stack;
  1809.     LONG ne_csip;
  1810.     LONG ne_sssp;
  1811.     WORD ne_cseg;
  1812.     WORD ne_cmod;
  1813.     WORD ne_cbnrestab;
  1814.     WORD ne_segtab;
  1815.     WORD ne_rsrctab;
  1816.     WORD ne_restab;
  1817.     WORD ne_modtab;
  1818.     WORD ne_imptab;
  1819.     LONG ne_nrestab;
  1820.     WORD ne_cmovent;
  1821.     WORD ne_align;
  1822.     WORD ne_cres;
  1823.     BYTE ne_exetyp;
  1824.     BYTE ne_flagsothers;
  1825.     WORD ne_pretthunks;
  1826.     WORD ne_psegrefbytes;
  1827.     WORD ne_swaparea;
  1828.     WORD ne_expver;
  1829. } IMAGE_OS2_HEADER,*PIMAGE_OS2_HEADER;
  1830. typedef struct _IMAGE_NT_HEADERS {
  1831.     DWORD Signature;
  1832.     IMAGE_FILE_HEADER FileHeader;
  1833.     IMAGE_OPTIONAL_HEADER OptionalHeader;
  1834. } IMAGE_NT_HEADERS,*PIMAGE_NT_HEADERS;
  1835. typedef struct _IMAGE_ROM_HEADERS {
  1836.     IMAGE_FILE_HEADER FileHeader;
  1837.     IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
  1838. } IMAGE_ROM_HEADERS,*PIMAGE_ROM_HEADERS;
  1839. typedef struct _IMAGE_SECTION_HEADER {
  1840.     BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
  1841.     union {
  1842.         DWORD PhysicalAddress;
  1843.         DWORD VirtualSize;
  1844.     } Misc;
  1845.     DWORD VirtualAddress;
  1846.     DWORD SizeOfRawData;
  1847.     DWORD PointerToRawData;
  1848.     DWORD PointerToRelocations;
  1849.     DWORD PointerToLinenumbers;
  1850.     WORD NumberOfRelocations;
  1851.     WORD NumberOfLinenumbers;
  1852.     DWORD Characteristics;
  1853. } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
  1854. typedef struct _IMAGE_SYMBOL {
  1855.     union {
  1856.         BYTE ShortName[8];
  1857.         struct {
  1858.             DWORD Short;
  1859.             DWORD Long;
  1860.         } Name;
  1861.         PBYTE LongName[2];
  1862.     } N;
  1863.     DWORD Value;
  1864.     SHORT SectionNumber;
  1865.     WORD Type;
  1866.     BYTE StorageClass;
  1867.     BYTE NumberOfAuxSymbols;
  1868. } IMAGE_SYMBOL,*PIMAGE_SYMBOL;
  1869. typedef union _IMAGE_AUX_SYMBOL {
  1870.     struct {
  1871.         DWORD TagIndex;
  1872.         union {
  1873.             struct {
  1874.                 WORD Linenumber;
  1875.                 WORD Size;
  1876.             } LnSz;
  1877.             DWORD TotalSize;
  1878.         } Misc;
  1879.         union {
  1880.             struct {
  1881.                 DWORD PointerToLinenumber;
  1882.                 DWORD PointerToNextFunction;
  1883.             } Function;
  1884.             struct {
  1885.                 WORD Dimension[4];
  1886.             } Array;
  1887.         } FcnAry;
  1888.         WORD TvIndex;
  1889.     } Sym;
  1890.     struct {
  1891.         BYTE Name[IMAGE_SIZEOF_SYMBOL];
  1892.     } File;
  1893.     struct {
  1894.         DWORD Length;
  1895.         WORD NumberOfRelocations;
  1896.         WORD NumberOfLinenumbers;
  1897.         DWORD CheckSum;
  1898.         SHORT Number;
  1899.         BYTE Selection;
  1900.     } Section;
  1901. } IMAGE_AUX_SYMBOL,*PIMAGE_AUX_SYMBOL;
  1902. typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
  1903.     DWORD NumberOfSymbols;
  1904.     DWORD LvaToFirstSymbol;
  1905.     DWORD NumberOfLinenumbers;
  1906.     DWORD LvaToFirstLinenumber;
  1907.     DWORD RvaToFirstByteOfCode;
  1908.     DWORD RvaToLastByteOfCode;
  1909.     DWORD RvaToFirstByteOfData;
  1910.     DWORD RvaToLastByteOfData;
  1911. } IMAGE_COFF_SYMBOLS_HEADER,*PIMAGE_COFF_SYMBOLS_HEADER;
  1912. typedef struct _IMAGE_RELOCATION {
  1913.     union {
  1914.         DWORD VirtualAddress;
  1915.         DWORD RelocCount;
  1916.     } DUMMYUNIONNAME;
  1917.     DWORD SymbolTableIndex;
  1918.     WORD Type;
  1919. } IMAGE_RELOCATION,*PIMAGE_RELOCATION;
  1920. typedef struct _IMAGE_BASE_RELOCATION {
  1921.     DWORD VirtualAddress;
  1922.     DWORD SizeOfBlock;
  1923. } IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
  1924. typedef struct _IMAGE_LINENUMBER {
  1925.     union {
  1926.         DWORD SymbolTableIndex;
  1927.         DWORD VirtualAddress;
  1928.     } Type;
  1929.     WORD Linenumber;
  1930. } IMAGE_LINENUMBER,*PIMAGE_LINENUMBER;
  1931. typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
  1932.     BYTE Name[16];
  1933.     BYTE Date[12];
  1934.     BYTE UserID[6];
  1935.     BYTE GroupID[6];
  1936.     BYTE Mode[8];
  1937.     BYTE Size[10];
  1938.     BYTE EndHeader[2];
  1939. } IMAGE_ARCHIVE_MEMBER_HEADER,*PIMAGE_ARCHIVE_MEMBER_HEADER;
  1940. typedef struct _IMAGE_EXPORT_DIRECTORY {
  1941.     DWORD Characteristics;
  1942.     DWORD TimeDateStamp;
  1943.     WORD MajorVersion;
  1944.     WORD MinorVersion;
  1945.     DWORD Name;
  1946.     DWORD Base;
  1947.     DWORD NumberOfFunctions;
  1948.     DWORD NumberOfNames;
  1949.     PDWORD *AddressOfFunctions;
  1950.     PDWORD *AddressOfNames;
  1951.     PWORD *AddressOfNameOrdinals;
  1952. } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
  1953. typedef struct _IMAGE_IMPORT_BY_NAME {
  1954.     WORD Hint;
  1955.     BYTE Name[1];
  1956. } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
  1957. typedef struct _IMAGE_THUNK_DATA {
  1958.     union {
  1959.         PBYTE ForwarderString;
  1960.         PDWORD Function;
  1961.         DWORD Ordinal;
  1962.         PIMAGE_IMPORT_BY_NAME AddressOfData;
  1963.     } u1;
  1964. } IMAGE_THUNK_DATA,*PIMAGE_THUNK_DATA;
  1965. typedef struct _IMAGE_IMPORT_DESCRIPTOR {
  1966.     union {
  1967.         DWORD Characteristics;
  1968.         PIMAGE_THUNK_DATA OriginalFirstThunk;
  1969.     } DUMMYUNIONNAME;
  1970.     DWORD TimeDateStamp;
  1971.     DWORD ForwarderChain;
  1972.     DWORD Name;
  1973.     PIMAGE_THUNK_DATA FirstThunk;
  1974. } IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
  1975. typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
  1976.     DWORD TimeDateStamp;
  1977.     WORD OffsetModuleName;
  1978.     WORD NumberOfModuleForwarderRefs;
  1979. } IMAGE_BOUND_IMPORT_DESCRIPTOR,*PIMAGE_BOUND_IMPORT_DESCRIPTOR;
  1980. typedef struct _IMAGE_BOUND_FORWARDER_REF {
  1981.     DWORD TimeDateStamp;
  1982.     WORD OffsetModuleName;
  1983.     WORD Reserved;
  1984. } IMAGE_BOUND_FORWARDER_REF,*PIMAGE_BOUND_FORWARDER_REF;
  1985. typedef void(NTAPI *PIMAGE_TLS_CALLBACK)(PVOID,DWORD,PVOID);
  1986. typedef struct _IMAGE_TLS_DIRECTORY {
  1987.     DWORD StartAddressOfRawData;
  1988.     DWORD EndAddressOfRawData;
  1989.     PDWORD AddressOfIndex;
  1990.     PIMAGE_TLS_CALLBACK *AddressOfCallBacks;
  1991.     DWORD SizeOfZeroFill;
  1992.     DWORD Characteristics;
  1993. } IMAGE_TLS_DIRECTORY,*PIMAGE_TLS_DIRECTORY;
  1994. typedef struct _IMAGE_RESOURCE_DIRECTORY {
  1995.     DWORD Characteristics;
  1996.     DWORD TimeDateStamp;
  1997.     WORD MajorVersion;
  1998.     WORD MinorVersion;
  1999.     WORD NumberOfNamedEntries;
  2000.     WORD NumberOfIdEntries;
  2001. } IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
  2002. typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
  2003.     union {
  2004.         struct {
  2005.             DWORD NameOffset:31;
  2006.             DWORD NameIsString:1;
  2007.         }DUMMYSTRUCTNAME;
  2008.         DWORD Name;
  2009.         WORD Id;
  2010.     } DUMMYUNIONNAME;
  2011.     union {
  2012.         DWORD OffsetToData;
  2013.         struct {
  2014.             DWORD OffsetToDirectory:31;
  2015.             DWORD DataIsDirectory:1;
  2016.         } DUMMYSTRUCTNAME2;
  2017.     } DUMMYUNIONNAME2;
  2018. } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
  2019. typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
  2020.     WORD Length;
  2021.     CHAR NameString[1];
  2022. } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
  2023. typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
  2024.     WORD Length;
  2025.     WCHAR NameString[1];
  2026. } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
  2027. typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
  2028.     DWORD OffsetToData;
  2029.     DWORD Size;
  2030.     DWORD CodePage;
  2031.     DWORD Reserved;
  2032. } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
  2033. typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
  2034.     DWORD Characteristics;
  2035.     DWORD TimeDateStamp;
  2036.     WORD MajorVersion;
  2037.     WORD MinorVersion;
  2038.     DWORD GlobalFlagsClear;
  2039.     DWORD GlobalFlagsSet;
  2040.     DWORD CriticalSectionDefaultTimeout;
  2041.     DWORD DeCommitFreeBlockThreshold;
  2042.     DWORD DeCommitTotalFreeThreshold;
  2043.     PVOID LockPrefixTable;
  2044.     DWORD MaximumAllocationSize;
  2045.     DWORD VirtualMemoryThreshold;
  2046.     DWORD ProcessHeapFlags;
  2047.     DWORD Reserved[4];
  2048. } IMAGE_LOAD_CONFIG_DIRECTORY,*PIMAGE_LOAD_CONFIG_DIRECTORY;
  2049. typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
  2050.     DWORD BeginAddress;
  2051.     DWORD EndAddress;
  2052.     PVOID ExceptionHandler;
  2053.     PVOID HandlerData;
  2054.     DWORD PrologEndAddress;
  2055. } IMAGE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_RUNTIME_FUNCTION_ENTRY;
  2056. typedef struct _IMAGE_DEBUG_DIRECTORY {
  2057.     DWORD Characteristics;
  2058.     DWORD TimeDateStamp;
  2059.     WORD MajorVersion;
  2060.     WORD MinorVersion;
  2061.     DWORD Type;
  2062.     DWORD SizeOfData;
  2063.     DWORD AddressOfRawData;
  2064.     DWORD PointerToRawData;
  2065. } IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
  2066. typedef struct _FPO_DATA {
  2067.     DWORD ulOffStart;
  2068.     DWORD cbProcSize;
  2069.     DWORD cdwLocals;
  2070.     WORD cdwParams;
  2071.     WORD cbProlog:8;
  2072.     WORD cbRegs:3;
  2073.     WORD fHasSEH:1;
  2074.     WORD fUseBP:1;
  2075.     WORD reserved:1;
  2076.     WORD cbFrame:2;
  2077. } FPO_DATA,*PFPO_DATA;
  2078. typedef struct _IMAGE_DEBUG_MISC {
  2079.     DWORD DataType;
  2080.     DWORD Length;
  2081.     BOOLEAN Unicode;
  2082.     BYTE Reserved[3];
  2083.     BYTE Data[1];
  2084. } IMAGE_DEBUG_MISC,*PIMAGE_DEBUG_MISC;
  2085. typedef struct _IMAGE_FUNCTION_ENTRY {
  2086.     DWORD StartingAddress;
  2087.     DWORD EndingAddress;
  2088.     DWORD EndOfPrologue;
  2089. } IMAGE_FUNCTION_ENTRY,*PIMAGE_FUNCTION_ENTRY;
  2090. typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
  2091.     WORD Signature;
  2092.     WORD Flags;
  2093.     WORD Machine;
  2094.     WORD Characteristics;
  2095.     DWORD TimeDateStamp;
  2096.     DWORD CheckSum;
  2097.     DWORD ImageBase;
  2098.     DWORD SizeOfImage;
  2099.     DWORD NumberOfSections;
  2100.     DWORD ExportedNamesSize;
  2101.     DWORD DebugDirectorySize;
  2102.     DWORD Reserved[3];
  2103. } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
  2104. typedef enum _CM_SERVICE_NODE_TYPE {
  2105.     DriverType=SERVICE_KERNEL_DRIVER,
  2106.     FileSystemType=SERVICE_FILE_SYSTEM_DRIVER,
  2107.     Win32ServiceOwnProcess=SERVICE_WIN32_OWN_PROCESS,
  2108.     Win32ServiceShareProcess=SERVICE_WIN32_SHARE_PROCESS,
  2109.     AdapterType=SERVICE_ADAPTER,
  2110.     RecognizerType=SERVICE_RECOGNIZER_DRIVER
  2111. } SERVICE_NODE_TYPE;
  2112. typedef enum _CM_SERVICE_LOAD_TYPE {
  2113.     BootLoad=SERVICE_BOOT_START,
  2114.     SystemLoad=SERVICE_SYSTEM_START,
  2115.     AutoLoad=SERVICE_AUTO_START,
  2116.     DemandLoad=SERVICE_DEMAND_START,
  2117.     DisableLoad=SERVICE_DISABLED
  2118. } SERVICE_LOAD_TYPE;
  2119. typedef enum _CM_ERROR_CONTROL_TYPE {
  2120.     IgnoreError=SERVICE_ERROR_IGNORE,
  2121.     NormalError=SERVICE_ERROR_NORMAL,
  2122.     SevereError=SERVICE_ERROR_SEVERE,
  2123.     CriticalError=SERVICE_ERROR_CRITICAL
  2124. } SERVICE_ERROR_TYPE;
  2125.  
  2126. PVOID GetCurrentFiber(void);
  2127. PVOID GetFiberData(void);
  2128. #endif
  2129. #ifdef __cplusplus
  2130. }
  2131. #endif
  2132. #endif
  2133.