winternl.h 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifndef _WINTERNL_
  7. #define _WINTERNL_
  8. #include <windef.h>
  9. #ifndef NT_SUCCESS
  10. #define NT_SUCCESS(status) ((NTSTATUS) (status) >= 0)
  11. #endif
  12. #ifndef NT_INFORMATION
  13. #define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1)
  14. #endif
  15. #ifndef NT_WARNING
  16. #define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2)
  17. #endif
  18. #ifndef NT_ERROR
  19. #define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3)
  20. #endif
  21. #ifndef DEVICE_TYPE
  22. #define DEVICE_TYPE ULONG
  23. #endif
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. #ifndef __UNICODE_STRING_DEFINED
  28. #define __UNICODE_STRING_DEFINED
  29. typedef struct _UNICODE_STRING {
  30. USHORT Length;
  31. USHORT MaximumLength;
  32. PWSTR Buffer;
  33. } UNICODE_STRING;
  34. #endif
  35. typedef struct _PEB_LDR_DATA {
  36. BYTE Reserved1[8];
  37. PVOID Reserved2[3];
  38. LIST_ENTRY InMemoryOrderModuleList;
  39. } PEB_LDR_DATA,*PPEB_LDR_DATA;
  40. typedef struct _LDR_DATA_TABLE_ENTRY {
  41. PVOID Reserved1[2];
  42. LIST_ENTRY InMemoryOrderLinks;
  43. PVOID Reserved2[2];
  44. PVOID DllBase;
  45. PVOID Reserved3[2];
  46. UNICODE_STRING FullDllName;
  47. BYTE Reserved4[8];
  48. PVOID Reserved5[3];
  49. __C89_NAMELESS union {
  50. ULONG CheckSum;
  51. PVOID Reserved6;
  52. };
  53. ULONG TimeDateStamp;
  54. } LDR_DATA_TABLE_ENTRY,*PLDR_DATA_TABLE_ENTRY;
  55. typedef struct _RTL_USER_PROCESS_PARAMETERS {
  56. BYTE Reserved1[16];
  57. PVOID Reserved2[10];
  58. UNICODE_STRING ImagePathName;
  59. UNICODE_STRING CommandLine;
  60. } RTL_USER_PROCESS_PARAMETERS,*PRTL_USER_PROCESS_PARAMETERS;
  61. /* This function pointer is undocumented and just valid for windows 2000.
  62. Therefore I guess. */
  63. typedef VOID (NTAPI *PPS_POST_PROCESS_INIT_ROUTINE)(VOID);
  64. typedef struct _PEB {
  65. BYTE Reserved1[2];
  66. BYTE BeingDebugged;
  67. BYTE Reserved2[1];
  68. PVOID Reserved3[2];
  69. PPEB_LDR_DATA Ldr;
  70. PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
  71. PVOID Reserved4[3];
  72. PVOID AtlThunkSListPtr;
  73. PVOID Reserved5;
  74. ULONG Reserved6;
  75. PVOID Reserved7;
  76. ULONG Reserved8;
  77. ULONG AtlThunkSListPtr32;
  78. PVOID Reserved9[45];
  79. BYTE Reserved10[96];
  80. PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
  81. BYTE Reserved11[128];
  82. PVOID Reserved12[1];
  83. ULONG SessionId;
  84. } PEB,*PPEB;
  85. typedef struct _TEB {
  86. PVOID Reserved1[12];
  87. PPEB ProcessEnvironmentBlock;
  88. PVOID Reserved2[399];
  89. BYTE Reserved3[1952];
  90. PVOID TlsSlots[64];
  91. BYTE Reserved4[8];
  92. PVOID Reserved5[26];
  93. PVOID ReservedForOle;
  94. PVOID Reserved6[4];
  95. PVOID TlsExpansionSlots;
  96. } TEB;
  97. typedef TEB *PTEB;
  98. #if !defined (_NTDEF_) && !defined (_NTSTATUS_PSDK)
  99. #define _NTSTATUS_PSDK
  100. typedef LONG NTSTATUS, *PNTSTATUS;
  101. #endif
  102. typedef CONST char *PCSZ;
  103. #ifndef __STRING_DEFINED
  104. #define __STRING_DEFINED
  105. typedef struct _STRING {
  106. USHORT Length;
  107. USHORT MaximumLength;
  108. PCHAR Buffer;
  109. } STRING;
  110. #endif
  111. typedef STRING *PSTRING;
  112. typedef STRING ANSI_STRING;
  113. typedef PSTRING PANSI_STRING;
  114. typedef PSTRING PCANSI_STRING;
  115. typedef STRING OEM_STRING;
  116. typedef PSTRING POEM_STRING;
  117. typedef CONST STRING *PCOEM_STRING;
  118. typedef UNICODE_STRING *PUNICODE_STRING;
  119. typedef const UNICODE_STRING *PCUNICODE_STRING;
  120. #ifndef __OBJECT_ATTRIBUTES_DEFINED
  121. #define __OBJECT_ATTRIBUTES_DEFINED
  122. typedef struct _OBJECT_ATTRIBUTES {
  123. ULONG Length;
  124. #ifdef _WIN64
  125. ULONG pad1;
  126. #endif
  127. HANDLE RootDirectory;
  128. PUNICODE_STRING ObjectName;
  129. ULONG Attributes;
  130. #ifdef _WIN64
  131. ULONG pad2;
  132. #endif
  133. PVOID SecurityDescriptor;
  134. PVOID SecurityQualityOfService;
  135. } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
  136. #endif
  137. /* Values for the Attributes member */
  138. #define OBJ_INHERIT 0x00000002L
  139. #define OBJ_PERMANENT 0x00000010L
  140. #define OBJ_EXCLUSIVE 0x00000020L
  141. #define OBJ_CASE_INSENSITIVE 0x00000040L
  142. #define OBJ_OPENIF 0x00000080L
  143. #define OBJ_OPENLINK 0x00000100L
  144. #define OBJ_KERNEL_HANDLE 0x00000200L
  145. #define OBJ_FORCE_ACCESS_CHECK 0x00000400L
  146. #define OBJ_IGNORE_IMPERSONATED_DEVICEMAP 0x00000800L
  147. #define OBJ_DONT_REPARSE 0x00001000L
  148. #define OBJ_VALID_ATTRIBUTES 0x00001FF2L
  149. /* Define the create disposition values */
  150. #define FILE_SUPERSEDE 0x00000000
  151. #define FILE_OPEN 0x00000001
  152. #define FILE_CREATE 0x00000002
  153. #define FILE_OPEN_IF 0x00000003
  154. #define FILE_OVERWRITE 0x00000004
  155. #define FILE_OVERWRITE_IF 0x00000005
  156. #define FILE_MAXIMUM_DISPOSITION 0x00000005
  157. /* Define the create/open option flags */
  158. #define FILE_DIRECTORY_FILE 0x00000001
  159. #define FILE_WRITE_THROUGH 0x00000002
  160. #define FILE_SEQUENTIAL_ONLY 0x00000004
  161. #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
  162. #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
  163. #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
  164. #define FILE_NON_DIRECTORY_FILE 0x00000040
  165. #define FILE_CREATE_TREE_CONNECTION 0x00000080
  166. #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
  167. #define FILE_NO_EA_KNOWLEDGE 0x00000200
  168. #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
  169. #define FILE_RANDOM_ACCESS 0x00000800
  170. #define FILE_DELETE_ON_CLOSE 0x00001000
  171. #define FILE_OPEN_BY_FILE_ID 0x00002000
  172. #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
  173. #define FILE_NO_COMPRESSION 0x00008000
  174. #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
  175. #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
  176. #endif
  177. #define FILE_RESERVE_OPFILTER 0x00100000
  178. #define FILE_OPEN_REPARSE_POINT 0x00200000
  179. #define FILE_OPEN_NO_RECALL 0x00400000
  180. #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
  181. #define FILE_VALID_OPTION_FLAGS 0x00ffffff
  182. #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
  183. #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
  184. #define FILE_VALID_SET_FLAGS 0x00000036
  185. /* Define the I/O status information return values for NtCreateFile/NtOpenFile */
  186. #define FILE_SUPERSEDED 0x00000000
  187. #define FILE_OPENED 0x00000001
  188. #define FILE_CREATED 0x00000002
  189. #define FILE_OVERWRITTEN 0x00000003
  190. #define FILE_EXISTS 0x00000004
  191. #define FILE_DOES_NOT_EXIST 0x00000005
  192. /* Helper Macro */
  193. #ifndef InitializeObjectAttributes
  194. #define InitializeObjectAttributes(p,n,a,r,s) { \
  195. (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
  196. (p)->RootDirectory = (r); \
  197. (p)->Attributes = (a); \
  198. (p)->ObjectName = (n); \
  199. (p)->SecurityDescriptor = (s); \
  200. (p)->SecurityQualityOfService = NULL; \
  201. }
  202. #endif
  203. typedef struct _OBJECT_DATA_INFORMATION {
  204. BOOLEAN InheritHandle;
  205. BOOLEAN ProtectFromClose;
  206. } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
  207. typedef struct _OBJECT_BASIC_INFORMATION {
  208. ULONG Attributes;
  209. ACCESS_MASK GrantedAccess;
  210. ULONG HandleCount;
  211. ULONG PointerCount;
  212. ULONG PagedPoolUsage;
  213. ULONG NonPagedPoolUsage;
  214. ULONG Reserved[3];
  215. ULONG NameInformationLength;
  216. ULONG TypeInformationLength;
  217. ULONG SecurityDescriptorLength;
  218. LARGE_INTEGER CreateTime;
  219. } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
  220. typedef struct _OBJECT_NAME_INFORMATION {
  221. UNICODE_STRING Name;
  222. } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
  223. typedef struct _OBJECT_TYPE_INFORMATION {
  224. UNICODE_STRING TypeName;
  225. ULONG TotalNumberOfObjects;
  226. ULONG TotalNumberOfHandles;
  227. ULONG TotalPagedPoolUsage;
  228. ULONG TotalNonPagedPoolUsage;
  229. ULONG TotalNamePoolUsage;
  230. ULONG TotalHandleTableUsage;
  231. ULONG HighWaterNumberOfObjects;
  232. ULONG HighWaterNumberOfHandles;
  233. ULONG HighWaterPagedPoolUsage;
  234. ULONG HighWaterNonPagedPoolUsage;
  235. ULONG HighWaterNamePoolUsage;
  236. ULONG HighWaterHandleTableUsage;
  237. ULONG InvalidAttributes;
  238. GENERIC_MAPPING GenericMapping;
  239. ULONG ValidAccessMask;
  240. BOOLEAN SecurityRequired;
  241. BOOLEAN MaintainHandleCount;
  242. ULONG PoolType;
  243. ULONG DefaultPagedPoolCharge;
  244. ULONG DefaultNonPagedPoolCharge;
  245. } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
  246. typedef struct _OBJECT_ALL_INFORMATION {
  247. ULONG NumberOfObjects;
  248. OBJECT_TYPE_INFORMATION ObjectTypeInformation[1];
  249. }OBJECT_ALL_INFORMATION, *POBJECT_ALL_INFORMATION;
  250. typedef enum _FILE_INFORMATION_CLASS {
  251. FileDirectoryInformation = 1,
  252. FileFullDirectoryInformation,
  253. FileBothDirectoryInformation,
  254. FileBasicInformation,
  255. FileStandardInformation,
  256. FileInternalInformation,
  257. FileEaInformation,
  258. FileAccessInformation,
  259. FileNameInformation,
  260. FileRenameInformation,
  261. FileLinkInformation,
  262. FileNamesInformation,
  263. FileDispositionInformation,
  264. FilePositionInformation,
  265. FileFullEaInformation,
  266. FileModeInformation,
  267. FileAlignmentInformation,
  268. FileAllInformation,
  269. FileAllocationInformation,
  270. FileEndOfFileInformation,
  271. FileAlternateNameInformation,
  272. FileStreamInformation,
  273. FilePipeInformation,
  274. FilePipeLocalInformation,
  275. FilePipeRemoteInformation,
  276. FileMailslotQueryInformation,
  277. FileMailslotSetInformation,
  278. FileCompressionInformation,
  279. FileObjectIdInformation,
  280. FileCompletionInformation,
  281. FileMoveClusterInformation,
  282. FileQuotaInformation,
  283. FileReparsePointInformation,
  284. FileNetworkOpenInformation,
  285. FileAttributeTagInformation,
  286. FileTrackingInformation,
  287. FileIdBothDirectoryInformation,
  288. FileIdFullDirectoryInformation,
  289. FileValidDataLengthInformation,
  290. FileShortNameInformation = 40,
  291. FileSfioReserveInformation = 44,
  292. FileSfioVolumeInformation = 45,
  293. FileHardLinkInformation = 46,
  294. FileNormalizedNameInformation = 48,
  295. FileIdGlobalTxDirectoryInformation = 50,
  296. FileStandardLinkInformation = 54,
  297. FileMaximumInformation
  298. } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
  299. typedef struct _FILE_DIRECTORY_INFORMATION {
  300. ULONG NextEntryOffset;
  301. ULONG FileIndex;
  302. LARGE_INTEGER CreationTime;
  303. LARGE_INTEGER LastAccessTime;
  304. LARGE_INTEGER LastWriteTime;
  305. LARGE_INTEGER ChangeTime;
  306. LARGE_INTEGER EndOfFile;
  307. LARGE_INTEGER AllocationSize;
  308. ULONG FileAttributes;
  309. ULONG FileNameLength;
  310. WCHAR FileName[ANYSIZE_ARRAY];
  311. } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
  312. typedef struct _FILE_FULL_DIR_INFORMATION {
  313. ULONG NextEntryOffset;
  314. ULONG FileIndex;
  315. LARGE_INTEGER CreationTime;
  316. LARGE_INTEGER LastAccessTime;
  317. LARGE_INTEGER LastWriteTime;
  318. LARGE_INTEGER ChangeTime;
  319. LARGE_INTEGER EndOfFile;
  320. LARGE_INTEGER AllocationSize;
  321. ULONG FileAttributes;
  322. ULONG FileNameLength;
  323. ULONG EaSize;
  324. WCHAR FileName[ANYSIZE_ARRAY];
  325. } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
  326. typedef struct _FILE_ID_FULL_DIR_INFORMATION {
  327. ULONG NextEntryOffset;
  328. ULONG FileIndex;
  329. LARGE_INTEGER CreationTime;
  330. LARGE_INTEGER LastAccessTime;
  331. LARGE_INTEGER LastWriteTime;
  332. LARGE_INTEGER ChangeTime;
  333. LARGE_INTEGER EndOfFile;
  334. LARGE_INTEGER AllocationSize;
  335. ULONG FileAttributes;
  336. ULONG FileNameLength;
  337. ULONG EaSize;
  338. LARGE_INTEGER FileId;
  339. WCHAR FileName[ANYSIZE_ARRAY];
  340. } FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION;
  341. typedef struct _FILE_BOTH_DIR_INFORMATION {
  342. ULONG NextEntryOffset;
  343. ULONG FileIndex;
  344. LARGE_INTEGER CreationTime;
  345. LARGE_INTEGER LastAccessTime;
  346. LARGE_INTEGER LastWriteTime;
  347. LARGE_INTEGER ChangeTime;
  348. LARGE_INTEGER EndOfFile;
  349. LARGE_INTEGER AllocationSize;
  350. ULONG FileAttributes;
  351. ULONG FileNameLength;
  352. ULONG EaSize;
  353. CHAR ShortNameLength;
  354. WCHAR ShortName[12];
  355. WCHAR FileName[ANYSIZE_ARRAY];
  356. } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
  357. typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
  358. ULONG NextEntryOffset;
  359. ULONG FileIndex;
  360. LARGE_INTEGER CreationTime;
  361. LARGE_INTEGER LastAccessTime;
  362. LARGE_INTEGER LastWriteTime;
  363. LARGE_INTEGER ChangeTime;
  364. LARGE_INTEGER EndOfFile;
  365. LARGE_INTEGER AllocationSize;
  366. ULONG FileAttributes;
  367. ULONG FileNameLength;
  368. ULONG EaSize;
  369. CHAR ShortNameLength;
  370. WCHAR ShortName[12];
  371. LARGE_INTEGER FileId;
  372. WCHAR FileName[ANYSIZE_ARRAY];
  373. } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
  374. /* Old names of dir info structures as (partially) used in Nebbitt's
  375. Native API Reference. Keep for backward compatibility. */
  376. typedef struct _FILE_FULL_DIR_INFORMATION
  377. FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
  378. typedef struct _FILE_ID_FULL_DIR_INFORMATION
  379. FILE_ID_FULL_DIRECTORY_INFORMATION, *PFILE_ID_FULL_DIRECTORY_INFORMATION;
  380. typedef struct _FILE_BOTH_DIR_INFORMATION
  381. FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION;
  382. typedef struct _FILE_ID_BOTH_DIR_INFORMATION
  383. FILE_ID_BOTH_DIRECTORY_INFORMATION, *PFILE_ID_BOTH_DIRECTORY_INFORMATION;
  384. typedef struct _FILE_BASIC_INFORMATION {
  385. LARGE_INTEGER CreationTime;
  386. LARGE_INTEGER LastAccessTime;
  387. LARGE_INTEGER LastWriteTime;
  388. LARGE_INTEGER ChangeTime;
  389. ULONG FileAttributes;
  390. } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
  391. typedef struct _FILE_STANDARD_INFORMATION {
  392. LARGE_INTEGER AllocationSize;
  393. LARGE_INTEGER EndOfFile;
  394. ULONG NumberOfLinks;
  395. BOOLEAN DeletePending;
  396. BOOLEAN Directory;
  397. } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
  398. typedef struct _FILE_INTERNAL_INFORMATION {
  399. LARGE_INTEGER IndexNumber;
  400. } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
  401. typedef struct _FILE_EA_INFORMATION {
  402. ULONG EaSize;
  403. } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
  404. typedef struct _FILE_ACCESS_INFORMATION {
  405. ACCESS_MASK AccessFlags;
  406. } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
  407. typedef struct _FILE_LINK_INFORMATION {
  408. BOOLEAN ReplaceIfExists;
  409. HANDLE RootDirectory;
  410. ULONG FileNameLength;
  411. WCHAR FileName[1];
  412. } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
  413. typedef struct _FILE_NAME_INFORMATION {
  414. ULONG FileNameLength;
  415. WCHAR FileName[1];
  416. } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
  417. typedef struct _FILE_RENAME_INFORMATION {
  418. BOOLEAN ReplaceIfExists;
  419. HANDLE RootDirectory;
  420. ULONG FileNameLength;
  421. WCHAR FileName[1];
  422. } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
  423. typedef struct _FILE_NAMES_INFORMATION {
  424. ULONG NextEntryOffset;
  425. ULONG FileIndex;
  426. ULONG FileNameLength;
  427. WCHAR FileName[1];
  428. } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
  429. typedef struct _FILE_DISPOSITION_INFORMATION {
  430. BOOLEAN DoDeleteFile;
  431. } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
  432. typedef struct _FILE_POSITION_INFORMATION {
  433. LARGE_INTEGER CurrentByteOffset;
  434. } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
  435. typedef struct _FILE_ALIGNMENT_INFORMATION {
  436. ULONG AlignmentRequirement;
  437. } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
  438. typedef struct _FILE_ALLOCATION_INFORMATION {
  439. LARGE_INTEGER AllocationSize;
  440. } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
  441. typedef struct _FILE_END_OF_FILE_INFORMATION {
  442. LARGE_INTEGER EndOfFile;
  443. } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
  444. typedef struct _FILE_NETWORK_OPEN_INFORMATION {
  445. LARGE_INTEGER CreationTime;
  446. LARGE_INTEGER LastAccessTime;
  447. LARGE_INTEGER LastWriteTime;
  448. LARGE_INTEGER ChangeTime;
  449. LARGE_INTEGER AllocationSize;
  450. LARGE_INTEGER EndOfFile;
  451. ULONG FileAttributes;
  452. } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
  453. typedef struct _FILE_FULL_EA_INFORMATION {
  454. ULONG NextEntryOffset;
  455. UCHAR Flags;
  456. UCHAR EaNameLength;
  457. USHORT EaValueLength;
  458. CHAR EaName[1];
  459. } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
  460. typedef struct _FILE_MODE_INFORMATION {
  461. ULONG Mode;
  462. } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
  463. typedef struct _FILE_STREAM_INFORMATION {
  464. ULONG NextEntryOffset;
  465. ULONG StreamNameLength;
  466. LARGE_INTEGER StreamSize;
  467. LARGE_INTEGER StreamAllocationSize;
  468. WCHAR StreamName[1];
  469. } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
  470. typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
  471. ULONG FileAttributes;
  472. ULONG ReparseTag;
  473. } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
  474. typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
  475. ULONG MaximumMessageSize;
  476. ULONG MailslotQuota;
  477. ULONG NextMessageSize;
  478. ULONG MessagesAvailable;
  479. LARGE_INTEGER ReadTimeout;
  480. } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
  481. typedef struct _FILE_MAILSLOT_SET_INFORMATION {
  482. LARGE_INTEGER ReadTimeout;
  483. } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
  484. typedef struct _FILE_PIPE_LOCAL_INFORMATION {
  485. ULONG NamedPipeType;
  486. ULONG NamedPipeConfiguration;
  487. ULONG MaximumInstances;
  488. ULONG CurrentInstances;
  489. ULONG InboundQuota;
  490. ULONG ReadDataAvailable;
  491. ULONG OutboundQuota;
  492. ULONG WriteQuotaAvailable;
  493. ULONG NamedPipeState;
  494. ULONG NamedPipeEnd;
  495. } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
  496. typedef struct _FILE_ALL_INFORMATION {
  497. FILE_BASIC_INFORMATION BasicInformation;
  498. FILE_STANDARD_INFORMATION StandardInformation;
  499. FILE_INTERNAL_INFORMATION InternalInformation;
  500. FILE_EA_INFORMATION EaInformation;
  501. FILE_ACCESS_INFORMATION AccessInformation;
  502. FILE_POSITION_INFORMATION PositionInformation;
  503. FILE_MODE_INFORMATION ModeInformation;
  504. FILE_ALIGNMENT_INFORMATION AlignmentInformation;
  505. FILE_NAME_INFORMATION NameInformation;
  506. } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
  507. typedef enum _FSINFOCLASS {
  508. FileFsVolumeInformation = 1,
  509. FileFsLabelInformation,
  510. FileFsSizeInformation,
  511. FileFsDeviceInformation,
  512. FileFsAttributeInformation,
  513. FileFsControlInformation,
  514. FileFsFullSizeInformation,
  515. FileFsObjectIdInformation,
  516. FileFsDriverPathInformation,
  517. FileFsVolumeFlagsInformation,
  518. FileFsMaximumInformation
  519. } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
  520. typedef struct _FILE_FS_VOLUME_INFORMATION {
  521. LARGE_INTEGER VolumeCreationTime;
  522. ULONG VolumeSerialNumber;
  523. ULONG VolumeLabelLength;
  524. BOOLEAN SupportsObjects;
  525. WCHAR VolumeLabel[1];
  526. } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
  527. typedef struct _FILE_FS_LABEL_INFORMATION {
  528. ULONG VolumeLabelLength;
  529. WCHAR VolumeLabel[1];
  530. } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
  531. typedef struct _FILE_FS_SIZE_INFORMATION {
  532. LARGE_INTEGER TotalAllocationUnits;
  533. LARGE_INTEGER AvailableAllocationUnits;
  534. ULONG SectorsPerAllocationUnit;
  535. ULONG BytesPerSector;
  536. } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
  537. typedef struct _FILE_FS_DEVICE_INFORMATION {
  538. DEVICE_TYPE DeviceType;
  539. ULONG Characteristics;
  540. } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
  541. typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
  542. ULONG FileSystemAttributes;
  543. ULONG MaximumComponentNameLength;
  544. ULONG FileSystemNameLength;
  545. WCHAR FileSystemName[1];
  546. } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
  547. typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
  548. LARGE_INTEGER TotalAllocationUnits;
  549. LARGE_INTEGER CallerAvailableAllocationUnits;
  550. LARGE_INTEGER ActualAvailableAllocationUnits;
  551. ULONG SectorsPerAllocationUnit;
  552. ULONG BytesPerSector;
  553. } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
  554. typedef struct _FILE_FS_OBJECTID_INFORMATION {
  555. UCHAR ObjectId[16];
  556. UCHAR ExtendedInfo[48];
  557. } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
  558. typedef struct _IO_STATUS_BLOCK {
  559. __C89_NAMELESS union {
  560. NTSTATUS Status;
  561. PVOID Pointer;
  562. };
  563. ULONG_PTR Information;
  564. } IO_STATUS_BLOCK,*PIO_STATUS_BLOCK;
  565. typedef VOID (NTAPI *PIO_APC_ROUTINE)(PVOID ApcContext,PIO_STATUS_BLOCK IoStatusBlock,ULONG Reserved);
  566. #ifdef __ia64__
  567. typedef struct _FRAME_POINTERS {
  568. ULONGLONG MemoryStackFp;
  569. ULONGLONG BackingStoreFp;
  570. } FRAME_POINTERS,*PFRAME_POINTERS;
  571. #define UNWIND_HISTORY_TABLE_SIZE 12
  572. typedef struct _RUNTIME_FUNCTION {
  573. ULONG BeginAddress;
  574. ULONG EndAddress;
  575. ULONG UnwindInfoAddress;
  576. } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
  577. typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
  578. ULONG64 ImageBase;
  579. ULONG64 Gp;
  580. PRUNTIME_FUNCTION FunctionEntry;
  581. } UNWIND_HISTORY_TABLE_ENTRY,*PUNWIND_HISTORY_TABLE_ENTRY;
  582. typedef struct _UNWIND_HISTORY_TABLE {
  583. ULONG Count;
  584. UCHAR Search;
  585. ULONG64 LowAddress;
  586. ULONG64 HighAddress;
  587. UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
  588. } UNWIND_HISTORY_TABLE,*PUNWIND_HISTORY_TABLE;
  589. #endif
  590. typedef struct _VM_COUNTERS {
  591. SIZE_T PeakVirtualSize;
  592. SIZE_T VirtualSize;
  593. ULONG PageFaultCount;
  594. SIZE_T PeakWorkingSetSize;
  595. SIZE_T WorkingSetSize;
  596. SIZE_T QuotaPeakPagedPoolUsage;
  597. SIZE_T QuotaPagedPoolUsage;
  598. SIZE_T QuotaPeakNonPagedPoolUsage;
  599. SIZE_T QuotaNonPagedPoolUsage;
  600. SIZE_T PagefileUsage;
  601. SIZE_T PeakPagefileUsage;
  602. } VM_COUNTERS, *PVM_COUNTERS;
  603. typedef enum _THREAD_STATE {
  604. StateInitialized = 0,
  605. StateReady, StateRunning, StateStandby, StateTerminated,
  606. StateWait, StateTransition,
  607. StateUnknown
  608. } THREAD_STATE;
  609. typedef struct _CLIENT_ID {
  610. HANDLE UniqueProcess;
  611. HANDLE UniqueThread;
  612. } CLIENT_ID, *PCLIENT_ID;
  613. typedef LONG KPRIORITY;
  614. typedef enum _KWAIT_REASON {
  615. Executive = 0,
  616. FreePage, PageIn, PoolAllocation, DelayExecution,
  617. Suspended, UserRequest, WrExecutive, WrFreePage, WrPageIn,
  618. WrPoolAllocation, WrDelayExecution, WrSuspended,
  619. WrUserRequest, WrEventPair, WrQueue, WrLpcReceive,
  620. WrLpcReply, WrVirtualMemory, WrPageOut, WrRendezvous,
  621. Spare2, Spare3, Spare4, Spare5, Spare6, WrKernel,
  622. MaximumWaitReason
  623. } KWAIT_REASON;
  624. typedef struct _SYSTEM_THREADS
  625. {
  626. LARGE_INTEGER KernelTime;
  627. LARGE_INTEGER UserTime;
  628. LARGE_INTEGER CreateTime;
  629. ULONG WaitTime;
  630. PVOID StartAddress;
  631. CLIENT_ID ClientId;
  632. KPRIORITY Priority;
  633. KPRIORITY BasePriority;
  634. ULONG ContextSwitchCount;
  635. THREAD_STATE State;
  636. KWAIT_REASON WaitReason;
  637. } SYSTEM_THREADS, *PSYSTEM_THREADS;
  638. typedef struct _PROCESS_BASIC_INFORMATION {
  639. NTSTATUS ExitStatus;
  640. PPEB PebBaseAddress;
  641. KAFFINITY AffinityMask;
  642. KPRIORITY BasePriority;
  643. ULONG_PTR UniqueProcessId;
  644. ULONG_PTR InheritedFromUniqueProcessId;
  645. } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
  646. typedef struct _KERNEL_USER_TIMES {
  647. FILETIME CreateTime;
  648. FILETIME ExitTime;
  649. LARGE_INTEGER KernelTime;
  650. LARGE_INTEGER UserTime;
  651. } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
  652. typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
  653. LARGE_INTEGER IdleTime;
  654. LARGE_INTEGER KernelTime;
  655. LARGE_INTEGER UserTime;
  656. LARGE_INTEGER Reserved1[2];
  657. ULONG Reserved2;
  658. } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION,*PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
  659. typedef struct _SYSTEM_PROCESS_INFORMATION {
  660. ULONG NextEntryOffset;
  661. ULONG NumberOfThreads;
  662. LARGE_INTEGER Reserved[3];
  663. LARGE_INTEGER CreateTime;
  664. LARGE_INTEGER UserTime;
  665. LARGE_INTEGER KernelTime;
  666. UNICODE_STRING ImageName;
  667. KPRIORITY BasePriority;
  668. HANDLE UniqueProcessId;
  669. HANDLE InheritedFromUniqueProcessId;
  670. ULONG HandleCount;
  671. ULONG SessionId;
  672. ULONG PageDirectoryBase;
  673. VM_COUNTERS VirtualMemoryCounters;
  674. SIZE_T PrivatePageCount;
  675. IO_COUNTERS IoCounters;
  676. } SYSTEM_PROCESS_INFORMATION,*PSYSTEM_PROCESS_INFORMATION;
  677. typedef struct _SYSTEM_THREAD_INFORMATION {
  678. LARGE_INTEGER Reserved1[3];
  679. ULONG Reserved2;
  680. PVOID StartAddress;
  681. CLIENT_ID ClientId;
  682. KPRIORITY Priority;
  683. LONG BasePriority;
  684. ULONG Reserved3;
  685. ULONG ThreadState;
  686. ULONG WaitReason;
  687. } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
  688. typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
  689. ULONG RegistryQuotaAllowed;
  690. ULONG RegistryQuotaUsed;
  691. PVOID Reserved1;
  692. } SYSTEM_REGISTRY_QUOTA_INFORMATION,*PSYSTEM_REGISTRY_QUOTA_INFORMATION;
  693. typedef struct _SYSTEM_BASIC_INFORMATION {
  694. BYTE Reserved1[4];
  695. ULONG MaximumIncrement;
  696. ULONG PhysicalPageSize;
  697. ULONG NumberOfPhysicalPages;
  698. ULONG LowestPhysicalPage;
  699. ULONG HighestPhysicalPage;
  700. ULONG AllocationGranularity;
  701. ULONG_PTR LowestUserAddress;
  702. ULONG_PTR HighestUserAddress;
  703. ULONG_PTR ActiveProcessors;
  704. CCHAR NumberOfProcessors;
  705. } SYSTEM_BASIC_INFORMATION,*PSYSTEM_BASIC_INFORMATION;
  706. typedef struct _SYSTEM_PROCESSOR_INFORMATION {
  707. USHORT ProcessorArchitecture;
  708. USHORT ProcessorLevel;
  709. USHORT ProcessorRevision;
  710. USHORT Unknown;
  711. ULONG FeatureBits;
  712. } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
  713. typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
  714. LARGE_INTEGER BootTime;
  715. LARGE_INTEGER CurrentTime;
  716. LARGE_INTEGER TimeZoneBias;
  717. ULONG CurrentTimeZoneId;
  718. BYTE Reserved1[20];
  719. } SYSTEM_TIMEOFDAY_INFORMATION,*PSYSTEM_TIMEOFDAY_INFORMATION;
  720. typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
  721. LARGE_INTEGER IdleTime;
  722. LARGE_INTEGER ReadTransferCount;
  723. LARGE_INTEGER WriteTransferCount;
  724. LARGE_INTEGER OtherTransferCount;
  725. ULONG ReadOperationCount;
  726. ULONG WriteOperationCount;
  727. ULONG OtherOperationCount;
  728. ULONG AvailablePages;
  729. ULONG TotalCommittedPages;
  730. ULONG TotalCommitLimit;
  731. ULONG PeakCommitment;
  732. ULONG PageFaults;
  733. ULONG WriteCopyFaults;
  734. ULONG TransitionFaults;
  735. ULONG CacheTransitionFaults;
  736. ULONG DemandZeroFaults;
  737. ULONG PagesRead;
  738. ULONG PageReadIos;
  739. ULONG CacheReads;
  740. ULONG CacheIos;
  741. ULONG PagefilePagesWritten;
  742. ULONG PagefilePageWriteIos;
  743. ULONG MappedFilePagesWritten;
  744. ULONG MappedFilePageWriteIos;
  745. ULONG PagedPoolUsage;
  746. ULONG NonPagedPoolUsage;
  747. ULONG PagedPoolAllocs;
  748. ULONG PagedPoolFrees;
  749. ULONG NonPagedPoolAllocs;
  750. ULONG NonPagedPoolFrees;
  751. ULONG TotalFreeSystemPtes;
  752. ULONG SystemCodePage;
  753. ULONG TotalSystemDriverPages;
  754. ULONG TotalSystemCodePages;
  755. ULONG SmallNonPagedLookasideListAllocateHits;
  756. ULONG SmallPagedLookasideListAllocateHits;
  757. ULONG Reserved3;
  758. ULONG MmSystemCachePage;
  759. ULONG PagedPoolPage;
  760. ULONG SystemDriverPage;
  761. ULONG FastReadNoWait;
  762. ULONG FastReadWait;
  763. ULONG FastReadResourceMiss;
  764. ULONG FastReadNotPossible;
  765. ULONG FastMdlReadNoWait;
  766. ULONG FastMdlReadWait;
  767. ULONG FastMdlReadResourceMiss;
  768. ULONG FastMdlReadNotPossible;
  769. ULONG MapDataNoWait;
  770. ULONG MapDataWait;
  771. ULONG MapDataNoWaitMiss;
  772. ULONG MapDataWaitMiss;
  773. ULONG PinMappedDataCount;
  774. ULONG PinReadNoWait;
  775. ULONG PinReadWait;
  776. ULONG PinReadNoWaitMiss;
  777. ULONG PinReadWaitMiss;
  778. ULONG CopyReadNoWait;
  779. ULONG CopyReadWait;
  780. ULONG CopyReadNoWaitMiss;
  781. ULONG CopyReadWaitMiss;
  782. ULONG MdlReadNoWait;
  783. ULONG MdlReadWait;
  784. ULONG MdlReadNoWaitMiss;
  785. ULONG MdlReadWaitMiss;
  786. ULONG ReadAheadIos;
  787. ULONG LazyWriteIos;
  788. ULONG LazyWritePages;
  789. ULONG DataFlushes;
  790. ULONG DataPages;
  791. ULONG ContextSwitches;
  792. ULONG FirstLevelTbFills;
  793. ULONG SecondLevelTbFills;
  794. ULONG SystemCalls;
  795. } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
  796. typedef struct _SYSTEM_EXCEPTION_INFORMATION {
  797. BYTE Reserved1[16];
  798. } SYSTEM_EXCEPTION_INFORMATION,*PSYSTEM_EXCEPTION_INFORMATION;
  799. typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
  800. BYTE Reserved1[32];
  801. } SYSTEM_LOOKASIDE_INFORMATION,*PSYSTEM_LOOKASIDE_INFORMATION;
  802. typedef struct _SYSTEM_INTERRUPT_INFORMATION {
  803. BYTE Reserved1[24];
  804. } SYSTEM_INTERRUPT_INFORMATION,*PSYSTEM_INTERRUPT_INFORMATION;
  805. typedef struct _SYSTEM_POLICY_INFORMATION {
  806. PVOID Reserved1[2];
  807. ULONG Reserved2[3];
  808. } SYSTEM_POLICY_INFORMATION, *PSYSTEM_POLICY_INFORMATION;
  809. typedef struct _SYSTEM_HANDLE_ENTRY {
  810. ULONG OwnerPid;
  811. BYTE ObjectType;
  812. BYTE HandleFlags;
  813. USHORT HandleValue;
  814. PVOID ObjectPointer;
  815. ULONG AccessMask;
  816. } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
  817. typedef struct _SYSTEM_HANDLE_INFORMATION {
  818. ULONG Count;
  819. SYSTEM_HANDLE_ENTRY Handle[1];
  820. } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
  821. typedef struct _SYSTEM_PAGEFILE_INFORMATION {
  822. ULONG NextEntryOffset;
  823. ULONG CurrentSize;
  824. ULONG TotalUsed;
  825. ULONG PeakUsed;
  826. UNICODE_STRING FileName;
  827. } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
  828. typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
  829. ULONG Attributes;
  830. ACCESS_MASK GrantedAccess;
  831. ULONG HandleCount;
  832. ULONG PointerCount;
  833. ULONG Reserved[10];
  834. } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;
  835. typedef struct __PUBLIC_OBJECT_TYPE_INFORMATION {
  836. UNICODE_STRING TypeName;
  837. ULONG Reserved[22];
  838. } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
  839. typedef enum _PROCESSINFOCLASS {
  840. ProcessBasicInformation,
  841. ProcessQuotaLimits,
  842. ProcessIoCounters,
  843. ProcessVmCounters,
  844. ProcessTimes,
  845. ProcessBasePriority,
  846. ProcessRaisePriority,
  847. ProcessDebugPort,
  848. ProcessExceptionPort,
  849. ProcessAccessToken,
  850. ProcessLdtInformation,
  851. ProcessLdtSize,
  852. ProcessDefaultHardErrorMode,
  853. ProcessIoPortHandlers,
  854. ProcessPooledUsageAndLimits,
  855. ProcessWorkingSetWatch,
  856. ProcessUserModeIOPL,
  857. ProcessEnableAlignmentFaultFixup,
  858. ProcessPriorityClass,
  859. ProcessWx86Information,
  860. ProcessHandleCount,
  861. ProcessAffinityMask,
  862. ProcessPriorityBoost,
  863. ProcessDeviceMap,
  864. ProcessSessionInformation,
  865. ProcessForegroundInformation,
  866. ProcessWow64Information,
  867. ProcessImageFileName,
  868. ProcessLUIDDeviceMapsEnabled,
  869. ProcessBreakOnTermination,
  870. ProcessDebugObjectHandle,
  871. ProcessDebugFlags,
  872. ProcessHandleTracing,
  873. ProcessIoPriority,
  874. ProcessExecuteFlags,
  875. ProcessTlsInformation,
  876. ProcessCookie,
  877. ProcessImageInformation,
  878. ProcessCycleTime,
  879. ProcessPagePriority,
  880. ProcessInstrumentationCallback,
  881. ProcessThreadStackAllocation,
  882. ProcessWorkingSetWatchEx,
  883. ProcessImageFileNameWin32,
  884. ProcessImageFileMapping,
  885. ProcessAffinityUpdateMode,
  886. ProcessMemoryAllocationMode,
  887. ProcessGroupInformation,
  888. ProcessTokenVirtualizationEnabled,
  889. ProcessConsoleHostProcess,
  890. ProcessWindowInformation,
  891. MaxProcessInfoClass
  892. } PROCESSINFOCLASS;
  893. typedef enum _THREADINFOCLASS {
  894. ThreadBasicInformation,
  895. ThreadTimes,
  896. ThreadPriority,
  897. ThreadBasePriority,
  898. ThreadAffinityMask,
  899. ThreadImpersonationToken,
  900. ThreadDescriptorTableEntry,
  901. ThreadEnableAlignmentFaultFixup,
  902. ThreadEventPair,
  903. ThreadQuerySetWin32StartAddress,
  904. ThreadZeroTlsCell,
  905. ThreadPerformanceCount,
  906. ThreadAmILastThread,
  907. ThreadIdealProcessor,
  908. ThreadPriorityBoost,
  909. ThreadSetTlsArrayAddress,
  910. ThreadIsIoPending,
  911. ThreadHideFromDebugger
  912. } THREADINFOCLASS;
  913. typedef struct _THREAD_NAME_INFORMATION {
  914. UNICODE_STRING ThreadName;
  915. } THREAD_NAME_INFORMATION, *PTHREAD_NAME_INFORMATION;
  916. #define CODEINTEGRITY_OPTION_ENABLED 0x01
  917. #define CODEINTEGRITY_OPTION_TESTSIGN 0x02
  918. #define CODEINTEGRITY_OPTION_UMCI_ENABLED 0x04
  919. #define CODEINTEGRITY_OPTION_UMCI_AUDITMODE_ENABLED 0x08
  920. #define CODEINTEGRITY_OPTION_UMCI_EXCLUSIONPATHS_ENABLED 0x10
  921. #define CODEINTEGRITY_OPTION_TEST_BUILD 0x20
  922. #define CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD 0x40
  923. #define CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED 0x80
  924. #define CODEINTEGRITY_OPTION_FLIGHT_BUILD 0x100
  925. #define CODEINTEGRITY_OPTION_FLIGHTING_ENABLED 0x200
  926. #define CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED 0x400
  927. #define CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED 0x800
  928. #define CODEINTEGRITY_OPTION_HVCI_KMCI_STRICTMODE_ENABLED 0x1000
  929. #define CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED 0x2000
  930. typedef struct _SYSTEM_CODEINTEGRITY_INFORMATION {
  931. ULONG Length;
  932. ULONG CodeIntegrityOptions;
  933. } SYSTEM_CODEINTEGRITY_INFORMATION, *PSYSTEM_CODEINTEGRITY_INFORMATION;
  934. typedef enum _SYSTEM_INFORMATION_CLASS {
  935. SystemBasicInformation = 0,
  936. SystemProcessorInformation = 1,
  937. SystemPerformanceInformation = 2,
  938. SystemTimeOfDayInformation = 3,
  939. SystemProcessInformation = 5,
  940. SystemProcessorPerformanceInformation = 8,
  941. SystemHandleInformation = 16,
  942. SystemPagefileInformation = 18,
  943. SystemInterruptInformation = 23,
  944. SystemExceptionInformation = 33,
  945. SystemRegistryQuotaInformation = 37,
  946. SystemLookasideInformation = 45,
  947. SystemCodeIntegrityInformation = 103,
  948. SystemPolicyInformation = 134
  949. } SYSTEM_INFORMATION_CLASS;
  950. typedef enum _OBJECT_INFORMATION_CLASS {
  951. ObjectBasicInformation,
  952. ObjectNameInformation,
  953. ObjectTypeInformation,
  954. ObjectAllInformation,
  955. ObjectDataInformation
  956. } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
  957. #if (_WIN32_WINNT >= 0x0501)
  958. #define INTERNAL_TS_ACTIVE_CONSOLE_ID (*((volatile ULONG*)(0x7ffe02d8)))
  959. #endif
  960. #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
  961. #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
  962. #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
  963. typedef struct _KEY_VALUE_ENTRY {
  964. PUNICODE_STRING ValueName;
  965. ULONG DataLength;
  966. ULONG DataOffset;
  967. ULONG Type;
  968. } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
  969. typedef enum _KEY_SET_INFORMATION_CLASS {
  970. KeyWriteTimeInformation,
  971. KeyWow64FlagsInformation,
  972. KeyControlFlagsInformation,
  973. KeySetVirtualizationInformation,
  974. KeySetDebugInformation,
  975. KeySetHandleTagsInformation,
  976. MaxKeySetInfoClass
  977. } KEY_SET_INFORMATION_CLASS;
  978. NTSTATUS NTAPI NtClose(HANDLE Handle);
  979. NTSTATUS NTAPI NtCreateFile(PHANDLE FileHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK IoStatusBlock,PLARGE_INTEGER AllocationSize,ULONG FileAttributes,ULONG ShareAccess,ULONG CreateDisposition,ULONG CreateOptions,PVOID EaBuffer,ULONG EaLength);
  980. NTSTATUS NTAPI NtOpenFile(PHANDLE FileHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK IoStatusBlock,ULONG ShareAccess,ULONG OpenOptions);
  981. NTSTATUS NTAPI NtRenameKey(HANDLE KeyHandle, PUNICODE_STRING NewName);
  982. NTSTATUS NTAPI NtNotifyChangeMultipleKeys(HANDLE MasterKeyHandle, ULONG Count, OBJECT_ATTRIBUTES SubordinateObjects[], HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG CompletionFilter, BOOLEAN WatchTree, PVOID Buffer, ULONG BufferSize, BOOLEAN Asynchronous);
  983. NTSTATUS NTAPI NtQueryMultipleValueKey(HANDLE KeyHandle, PKEY_VALUE_ENTRY ValueEntries, ULONG EntryCount, PVOID ValueBuffer, PULONG BufferLength, PULONG RequiredBufferLength);
  984. NTSTATUS NTAPI NtSetInformationKey(HANDLE KeyHandle, KEY_SET_INFORMATION_CLASS KeySetInformationClass, PVOID KeySetInformation, ULONG KeySetInformationLength);
  985. NTSTATUS NTAPI NtFsControlFile(HANDLE FileHandle,HANDLE Event,PIO_APC_ROUTINE ApcRoutine,PVOID ApcContext,PIO_STATUS_BLOCK IoStatusBlock,ULONG IoControlCode,PVOID InputBuffer,ULONG InputBufferLength,PVOID OutputBuffer,ULONG OutputBufferLength);
  986. NTSTATUS NTAPI NtDeviceIoControlFile(HANDLE FileHandle,HANDLE Event,PIO_APC_ROUTINE ApcRoutine,PVOID ApcContext,PIO_STATUS_BLOCK IoStatusBlock,ULONG IoControlCode,PVOID InputBuffer,ULONG InputBufferLength,PVOID OutputBuffer,ULONG OutputBufferLength);
  987. NTSTATUS NTAPI NtWaitForSingleObject(HANDLE Handle,BOOLEAN Alertable,PLARGE_INTEGER Timeout);
  988. BOOLEAN NTAPI RtlIsNameLegalDOS8Dot3(PUNICODE_STRING Name,POEM_STRING OemName,PBOOLEAN NameContainsSpaces);
  989. ULONG NTAPI RtlNtStatusToDosError (NTSTATUS Status);
  990. NTSTATUS NTAPI NtQueryInformationProcess(HANDLE ProcessHandle,PROCESSINFOCLASS ProcessInformationClass,PVOID ProcessInformation,ULONG ProcessInformationLength,PULONG ReturnLength);
  991. NTSTATUS NTAPI NtQueryInformationThread(HANDLE ThreadHandle,THREADINFOCLASS ThreadInformationClass,PVOID ThreadInformation,ULONG ThreadInformationLength,PULONG ReturnLength);
  992. NTSTATUS NTAPI NtSetInformationThread(HANDLE ThreadHandle,THREADINFOCLASS ThreadInformationClass,PVOID ThreadInformation,ULONG ThreadInformationLength);
  993. NTSTATUS NTAPI NtQueryInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass);
  994. NTSTATUS NTAPI NtQueryObject(HANDLE Handle,OBJECT_INFORMATION_CLASS ObjectInformationClass,PVOID ObjectInformation,ULONG ObjectInformationLength,PULONG ReturnLength);
  995. NTSTATUS NTAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength,PULONG ReturnLength);
  996. NTSTATUS NTAPI NtQuerySystemTime(PLARGE_INTEGER SystemTime);
  997. NTSTATUS NTAPI NtQueryTimerResolution(PULONG MaximumTime,PULONG MinimumTime,PULONG CurrentTime);
  998. NTSTATUS NTAPI NtQueryVolumeInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FS_INFORMATION_CLASS FsInformationClass);
  999. NTSTATUS NTAPI NtSetInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass);
  1000. NTSTATUS NTAPI NtSetInformationProcess(HANDLE ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, PVOID ProcessInformation, ULONG ProcessInformationLength);
  1001. NTSTATUS NTAPI NtSetVolumeInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass);
  1002. NTSTATUS NTAPI RtlLocalTimeToSystemTime(PLARGE_INTEGER LocalTime,PLARGE_INTEGER SystemTime);
  1003. BOOLEAN NTAPI RtlTimeToSecondsSince1970(PLARGE_INTEGER Time,PULONG ElapsedSeconds);
  1004. VOID NTAPI RtlFreeAnsiString(PANSI_STRING AnsiString);
  1005. VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString);
  1006. VOID NTAPI RtlFreeOemString(POEM_STRING OemString);
  1007. VOID NTAPI RtlInitString (PSTRING DestinationString,PCSZ SourceString);
  1008. NTSTATUS NTAPI RtlInitStringEx(PSTRING DestinationString, PCSZ SourceString);
  1009. VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString,PCSZ SourceString);
  1010. NTSTATUS NTAPI RtlInitAnsiStringEx(PANSI_STRING DestinationString, PCSZ SourceString);
  1011. VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString,PCWSTR SourceString);
  1012. NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString,PCANSI_STRING SourceString,BOOLEAN AllocateDestinationString);
  1013. NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString,PCUNICODE_STRING SourceString,BOOLEAN AllocateDestinationString);
  1014. NTSTATUS NTAPI RtlUnicodeStringToOemString(POEM_STRING DestinationString,PCUNICODE_STRING SourceString,BOOLEAN AllocateDestinationString);
  1015. NTSTATUS NTAPI RtlUnicodeToMultiByteSize(PULONG BytesInMultiByteString,PWCH UnicodeString,ULONG BytesInUnicodeString);
  1016. NTSTATUS NTAPI RtlCharToInteger (PCSZ String,ULONG Base,PULONG Value);
  1017. NTSTATUS NTAPI RtlConvertSidToUnicodeString(PUNICODE_STRING UnicodeString,PSID Sid,BOOLEAN AllocateDestinationString);
  1018. ULONG NTAPI RtlUniform(PULONG Seed);
  1019. VOID NTAPI RtlUnwind (PVOID TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD ExceptionRecord,PVOID ReturnValue);
  1020. BOOL NTAPI RtlDosPathNameToNtPathName_U(PCWSTR DosPathName, PUNICODE_STRING NtPathName, PCWSTR *NtFileNamePart, VOID *DirectoryInfo);
  1021. BOOLEAN NTAPI RtlPrefixUnicodeString(PCUNICODE_STRING String1, PCUNICODE_STRING String2, BOOLEAN CaseInSensitive);
  1022. BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING target, LPCSTR src);
  1023. #ifdef __ia64__
  1024. VOID RtlUnwind2(FRAME_POINTERS TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD ExceptionRecord,PVOID ReturnValue,PCONTEXT ContextRecord);
  1025. VOID RtlUnwindEx(FRAME_POINTERS TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD ExceptionRecord,PVOID ReturnValue,PCONTEXT ContextRecord,PUNWIND_HISTORY_TABLE HistoryTable);
  1026. #endif
  1027. typedef NTSTATUS (NTAPI *PRTL_HEAP_COMMIT_ROUTINE) (PVOID Base, PVOID *CommitAddress, PSIZE_T CommitSize);
  1028. typedef struct _RTL_HEAP_PARAMETERS {
  1029. ULONG Length;
  1030. SIZE_T SegmentReserve;
  1031. SIZE_T SegmentCommit;
  1032. SIZE_T DeCommitFreeBlockThreshold;
  1033. SIZE_T DeCommitTotalFreeThreshold;
  1034. SIZE_T MaximumAllocationSize;
  1035. SIZE_T VirtualMemoryThreshold;
  1036. SIZE_T InitialCommit;
  1037. SIZE_T InitialReserve;
  1038. PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
  1039. SIZE_T Reserved[ 2 ];
  1040. } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
  1041. BOOLEAN NTAPI RtlFreeHeap(PVOID HeapHandle, ULONG Flags, PVOID HeapBase);
  1042. PVOID NTAPI RtlAllocateHeap(PVOID HeapHandle, ULONG Flags, SIZE_T Size);
  1043. PVOID NTAPI RtlCreateHeap(ULONG Flags, PVOID HeapBase, SIZE_T ReserveSize, SIZE_T CommitSize, PVOID Lock, PRTL_HEAP_PARAMETERS Parameters);
  1044. PVOID NTAPI RtlDestroyHeap(PVOID HeapHandle);
  1045. #define LOGONID_CURRENT ((ULONG)-1)
  1046. #define SERVERNAME_CURRENT ((HANDLE)NULL)
  1047. typedef enum _WINSTATIONINFOCLASS {
  1048. WinStationInformation = 8
  1049. } WINSTATIONINFOCLASS;
  1050. typedef struct _WINSTATIONINFORMATIONW {
  1051. BYTE Reserved2[70];
  1052. ULONG LogonId;
  1053. BYTE Reserved3[1140];
  1054. } WINSTATIONINFORMATIONW,*PWINSTATIONINFORMATIONW;
  1055. typedef BOOLEAN (NTAPI *PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
  1056. #ifdef __cplusplus
  1057. }
  1058. #endif
  1059. #endif