jwanative.pas 136 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992
  1. // Interface unit for the Windows NT Native API
  2. // Copyright (C) 1999, 2000 Marcel van Brakel
  3. unit JwaNative;
  4. interface
  5. uses
  6. JwaWinBase, JwaWinNT, JwaWinType;
  7. {$WEAKPACKAGEUNIT}
  8. {$I jediapilib.inc}
  9. const
  10. ntdll = 'ntdll.dll';
  11. //------------------------------------------------------------------------------
  12. // Temporaries from NTDDK.H to be removed when fully converted.
  13. type
  14. _CLIENT_ID = record
  15. UniqueProcess: HANDLE;
  16. UniqueThread: HANDLE;
  17. end;
  18. CLIENT_ID = _CLIENT_ID;
  19. PCLIENT_ID = ^CLIENT_ID;
  20. TClientID = CLIENT_ID;
  21. PClientID = ^TClientID;
  22. KPRIORITY = LONG;
  23. _KWAIT_REASON = (
  24. Executive,
  25. FreePage,
  26. PageIn,
  27. PoolAllocation,
  28. DelayExecution,
  29. Suspended,
  30. UserRequest,
  31. WrExecutive,
  32. WrFreePage,
  33. WrPageIn,
  34. WrPoolAllocation,
  35. WrDelayExecution,
  36. WrSuspended,
  37. WrUserRequest,
  38. WrEventPair,
  39. WrQueue,
  40. WrLpcReceive,
  41. WrLpcReply,
  42. WrVirtualMemory,
  43. WrPageOut,
  44. WrRendezvous,
  45. Spare2,
  46. Spare3,
  47. Spare4,
  48. Spare5,
  49. Spare6,
  50. WrKernel,
  51. MaximumWaitReason);
  52. KWAIT_REASON = _KWAIT_REASON;
  53. _VM_COUNTERS = record
  54. PeakVirtualSize: SIZE_T;
  55. VirtualSize: SIZE_T;
  56. PageFaultCount: ULONG;
  57. PeakWorkingSetSize: SIZE_T;
  58. WorkingSetSize: SIZE_T;
  59. QuotaPeakPagedPoolUsage: SIZE_T;
  60. QuotaPagedPoolUsage: SIZE_T;
  61. QuotaPeakNonPagedPoolUsage: SIZE_T;
  62. QuotaNonPagedPoolUsage: SIZE_T;
  63. PagefileUsage: SIZE_T;
  64. PeakPagefileUsage: SIZE_T;
  65. end;
  66. VM_COUNTERS = _VM_COUNTERS;
  67. PVM_COUNTERS = ^VM_COUNTERS;
  68. const
  69. NonPagedPool = 0;
  70. PagedPool = 1;
  71. NonPagedPoolMustSucceed = 2;
  72. DontUseThisType = 3;
  73. NonPagedPoolCacheAligned = 4;
  74. PagedPoolCacheAligned = 5;
  75. NonPagedPoolCacheAlignedMustS = 6;
  76. MaxPoolType = 7;
  77. NonPagedPoolSession = 32;
  78. PagedPoolSession = NonPagedPoolSession + 1;
  79. NonPagedPoolMustSucceedSession = PagedPoolSession + 1;
  80. DontUseThisTypeSession = NonPagedPoolMustSucceedSession + 1;
  81. NonPagedPoolCacheAlignedSession = DontUseThisTypeSession + 1;
  82. PagedPoolCacheAlignedSession = NonPagedPoolCacheAlignedSession + 1;
  83. NonPagedPoolCacheAlignedMustSSession = PagedPoolCacheAlignedSession + 1;
  84. type
  85. POOL_TYPE = NonPagedPool..NonPagedPoolCacheAlignedMustSSession;
  86. _IO_STATUS_BLOCK = record
  87. //union {
  88. Status: NTSTATUS;
  89. // PVOID Pointer;
  90. //}
  91. Information: ULONG_PTR;
  92. end;
  93. IO_STATUS_BLOCK = _IO_STATUS_BLOCK;
  94. PIO_STATUS_BLOCK = ^IO_STATUS_BLOCK;
  95. const
  96. ViewShare = 1;
  97. ViewUnmap = 2;
  98. type
  99. SECTION_INHERIT = ViewShare..ViewUnmap;
  100. _THREADINFOCLASS = (
  101. ThreadBasicInformation,
  102. ThreadTimes,
  103. ThreadPriority,
  104. ThreadBasePriority,
  105. ThreadAffinityMask,
  106. ThreadImpersonationToken,
  107. ThreadDescriptorTableEntry,
  108. ThreadEnableAlignmentFaultFixup,
  109. ThreadEventPair_Reusable,
  110. ThreadQuerySetWin32StartAddress,
  111. ThreadZeroTlsCell,
  112. ThreadPerformanceCount,
  113. ThreadAmILastThread,
  114. ThreadIdealProcessor,
  115. ThreadPriorityBoost,
  116. ThreadSetTlsArrayAddress,
  117. ThreadIsIoPending,
  118. ThreadHideFromDebugger,
  119. MaxThreadInfoClass);
  120. THREADINFOCLASS = _THREADINFOCLASS;
  121. KAFFINITY = ULONG;
  122. PKAFFINITY = ^KAFFINITY;
  123. PKNORMAL_ROUTINE = procedure(NormalContext, SystemArgument1, SystemArgument2: PVOID); stdcall;
  124. _PROCESSINFOCLASS = (
  125. ProcessBasicInformation,
  126. ProcessQuotaLimits,
  127. ProcessIoCounters,
  128. ProcessVmCounters,
  129. ProcessTimes,
  130. ProcessBasePriority,
  131. ProcessRaisePriority,
  132. ProcessDebugPort,
  133. ProcessExceptionPort,
  134. ProcessAccessToken,
  135. ProcessLdtInformation,
  136. ProcessLdtSize,
  137. ProcessDefaultHardErrorMode,
  138. ProcessIoPortHandlers, // Note: this is kernel mode only
  139. ProcessPooledUsageAndLimits,
  140. ProcessWorkingSetWatch,
  141. ProcessUserModeIOPL,
  142. ProcessEnableAlignmentFaultFixup,
  143. ProcessPriorityClass,
  144. ProcessWx86Information,
  145. ProcessHandleCount,
  146. ProcessAffinityMask,
  147. ProcessPriorityBoost,
  148. ProcessDeviceMap,
  149. ProcessSessionInformation,
  150. ProcessForegroundInformation,
  151. ProcessWow64Information,
  152. MaxProcessInfoClass);
  153. PROCESSINFOCLASS = _PROCESSINFOCLASS;
  154. _KPROFILE_SOURCE = (
  155. ProfileTime,
  156. ProfileAlignmentFixup,
  157. ProfileTotalIssues,
  158. ProfilePipelineDry,
  159. ProfileLoadInstructions,
  160. ProfilePipelineFrozen,
  161. ProfileBranchInstructions,
  162. ProfileTotalNonissues,
  163. ProfileDcacheMisses,
  164. ProfileIcacheMisses,
  165. ProfileCacheMisses,
  166. ProfileBranchMispredictions,
  167. ProfileStoreInstructions,
  168. ProfileFpInstructions,
  169. ProfileIntegerInstructions,
  170. Profile2Issue,
  171. Profile3Issue,
  172. Profile4Issue,
  173. ProfileSpecialInstructions,
  174. ProfileTotalCycles,
  175. ProfileIcacheIssues,
  176. ProfileDcacheAccesses,
  177. ProfileMemoryBarrierCycles,
  178. ProfileLoadLinkedIssues,
  179. ProfileMaximum);
  180. KPROFILE_SOURCE = _KPROFILE_SOURCE;
  181. PIO_APC_ROUTINE = procedure(ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; Reserved: ULONG); stdcall;
  182. _FILE_FULL_EA_INFORMATION = record
  183. NextEntryOffset: ULONG;
  184. Flags: UCHAR;
  185. EaNameLength: UCHAR;
  186. EaValueLength: USHORT;
  187. EaName: array [0..0] of CHAR;
  188. end;
  189. FILE_FULL_EA_INFORMATION = _FILE_FULL_EA_INFORMATION;
  190. PFILE_FULL_EA_INFORMATION = ^FILE_FULL_EA_INFORMATION;
  191. _FSINFOCLASS = (
  192. FileFsFiller0,
  193. FileFsVolumeInformation, // 1
  194. FileFsLabelInformation, // 2
  195. FileFsSizeInformation, // 3
  196. FileFsDeviceInformation, // 4
  197. FileFsAttributeInformation, // 5
  198. FileFsControlInformation, // 6
  199. FileFsFullSizeInformation, // 7
  200. FileFsObjectIdInformation, // 8
  201. FileFsMaximumInformation);
  202. FS_INFORMATION_CLASS = _FSINFOCLASS;
  203. PFS_INFORMATION_CLASS = ^FS_INFORMATION_CLASS;
  204. UUID = GUID;
  205. _FILE_BASIC_INFORMATION = record
  206. CreationTime: LARGE_INTEGER;
  207. LastAccessTime: LARGE_INTEGER;
  208. LastWriteTime: LARGE_INTEGER;
  209. ChangeTime: LARGE_INTEGER;
  210. FileAttributes: ULONG;
  211. end;
  212. FILE_BASIC_INFORMATION = _FILE_BASIC_INFORMATION;
  213. PFILE_BASIC_INFORMATION = ^FILE_BASIC_INFORMATION;
  214. _FILE_NETWORK_OPEN_INFORMATION = record
  215. CreationTime: LARGE_INTEGER;
  216. LastAccessTime: LARGE_INTEGER;
  217. LastWriteTime: LARGE_INTEGER;
  218. ChangeTime: LARGE_INTEGER;
  219. AllocationSize: LARGE_INTEGER;
  220. EndOfFile: LARGE_INTEGER;
  221. FileAttributes: ULONG;
  222. end;
  223. FILE_NETWORK_OPEN_INFORMATION = _FILE_NETWORK_OPEN_INFORMATION;
  224. PFILE_NETWORK_OPEN_INFORMATION = ^FILE_NETWORK_OPEN_INFORMATION;
  225. _FILE_INFORMATION_CLASS = (
  226. FileFiller0,
  227. FileDirectoryInformation, // 1
  228. FileFullDirectoryInformation, // 2
  229. FileBothDirectoryInformation, // 3
  230. FileBasicInformation, // 4 wdm
  231. FileStandardInformation, // 5 wdm
  232. FileInternalInformation, // 6
  233. FileEaInformation, // 7
  234. FileAccessInformation, // 8
  235. FileNameInformation, // 9
  236. FileRenameInformation, // 10
  237. FileLinkInformation, // 11
  238. FileNamesInformation, // 12
  239. FileDispositionInformation, // 13
  240. FilePositionInformation, // 14 wdm
  241. FileFullEaInformation, // 15
  242. FileModeInformation, // 16
  243. FileAlignmentInformation, // 17
  244. FileAllInformation, // 18
  245. FileAllocationInformation, // 19
  246. FileEndOfFileInformation, // 20 wdm
  247. FileAlternateNameInformation, // 21
  248. FileStreamInformation, // 22
  249. FilePipeInformation, // 23
  250. FilePipeLocalInformation, // 24
  251. FilePipeRemoteInformation, // 25
  252. FileMailslotQueryInformation, // 26
  253. FileMailslotSetInformation, // 27
  254. FileCompressionInformation, // 28
  255. FileObjectIdInformation, // 29
  256. FileCompletionInformation, // 30
  257. FileMoveClusterInformation, // 31
  258. FileQuotaInformation, // 32
  259. FileReparsePointInformation, // 33
  260. FileNetworkOpenInformation, // 34
  261. FileAttributeTagInformation, // 35
  262. FileTrackingInformation, // 36
  263. FileMaximumInformation);
  264. FILE_INFORMATION_CLASS = _FILE_INFORMATION_CLASS;
  265. PFILE_INFORMATION_CLASS = ^FILE_INFORMATION_CLASS;
  266. _FILE_STANDARD_INFORMATION = record
  267. AllocationSize: LARGE_INTEGER;
  268. EndOfFile: LARGE_INTEGER;
  269. NumberOfLinks: ULONG;
  270. DeletePending: ByteBool;
  271. Directory: ByteBool;
  272. end;
  273. FILE_STANDARD_INFORMATION = _FILE_STANDARD_INFORMATION;
  274. PFILE_STANDARD_INFORMATION = ^FILE_STANDARD_INFORMATION;
  275. _FILE_POSITION_INFORMATION = record
  276. CurrentByteOffset: LARGE_INTEGER;
  277. end;
  278. FILE_POSITION_INFORMATION = _FILE_POSITION_INFORMATION;
  279. PFILE_POSITION_INFORMATION = ^FILE_POSITION_INFORMATION;
  280. _FILE_ALIGNMENT_INFORMATION = record
  281. AlignmentRequirement: ULONG;
  282. end;
  283. FILE_ALIGNMENT_INFORMATION = _FILE_ALIGNMENT_INFORMATION;
  284. PFILE_ALIGNMENT_INFORMATION = ^FILE_ALIGNMENT_INFORMATION;
  285. _KEY_SET_INFORMATION_CLASS = (KeyWriteTimeInformation);
  286. KEY_SET_INFORMATION_CLASS = _KEY_SET_INFORMATION_CLASS;
  287. _KEY_INFORMATION_CLASS = (
  288. KeyBasicInformation,
  289. KeyNodeInformation,
  290. KeyFullInformation,
  291. KeyNameInformation);
  292. KEY_INFORMATION_CLASS = _KEY_INFORMATION_CLASS;
  293. _KEY_VALUE_INFORMATION_CLASS = (
  294. KeyValueBasicInformation,
  295. KeyValueFullInformation,
  296. KeyValuePartialInformation,
  297. KeyValueFullInformationAlign64,
  298. KeyValuePartialInformationAlign64);
  299. KEY_VALUE_INFORMATION_CLASS = _KEY_VALUE_INFORMATION_CLASS;
  300. _KEY_VALUE_ENTRY = record
  301. ValueName: PUNICODE_STRING;
  302. DataLength: ULONG;
  303. DataOffset: ULONG;
  304. Type_: ULONG;
  305. end;
  306. KEY_VALUE_ENTRY = _KEY_VALUE_ENTRY;
  307. PKEY_VALUE_ENTRY = ^KEY_VALUE_ENTRY;
  308. _DEVICE_POWER_STATE = (
  309. PowerDeviceUnspecified,
  310. PowerDeviceD0,
  311. PowerDeviceD1,
  312. PowerDeviceD2,
  313. PowerDeviceD3,
  314. PowerDeviceMaximum);
  315. DEVICE_POWER_STATE = _DEVICE_POWER_STATE;
  316. PDEVICE_POWER_STATE = ^DEVICE_POWER_STATE;
  317. POWER_ACTION =(
  318. PowerActionNone,
  319. PowerActionReserved,
  320. PowerActionSleep,
  321. PowerActionHibernate,
  322. PowerActionShutdown,
  323. PowerActionShutdownReset,
  324. PowerActionShutdownOff,
  325. PowerActionWarmEject);
  326. PPOWER_ACTION = ^POWER_ACTION;
  327. _SYSTEM_POWER_STATE = (
  328. PowerSystemUnspecified,
  329. PowerSystemWorking,
  330. PowerSystemSleeping1,
  331. PowerSystemSleeping2,
  332. PowerSystemSleeping3,
  333. PowerSystemHibernate,
  334. PowerSystemShutdown,
  335. PowerSystemMaximum);
  336. SYSTEM_POWER_STATE = _SYSTEM_POWER_STATE;
  337. PSYSTEM_POWER_STATE = ^SYSTEM_POWER_STATE;
  338. POWER_INFORMATION_LEVEL = (
  339. SystemPowerPolicyAc,
  340. SystemPowerPolicyDc,
  341. VerifySystemPolicyAc,
  342. VerifySystemPolicyDc,
  343. SystemPowerCapabilities,
  344. SystemBatteryState,
  345. SystemPowerStateHandler,
  346. ProcessorStateHandler,
  347. SystemPowerPolicyCurrent,
  348. AdministratorPowerPolicy,
  349. SystemReserveHiberFile,
  350. ProcessorInformation,
  351. SystemPowerInformation);
  352. _RTL_RANGE = record
  353. //
  354. // The start of the range
  355. //
  356. Start: ULONGLONG; // Read only
  357. //
  358. // The end of the range
  359. //
  360. End_: ULONGLONG; // Read only
  361. //
  362. // Data the user passed in when they created the range
  363. //
  364. UserData: PVOID; // Read/Write
  365. //
  366. // The owner of the range
  367. //
  368. Owner: PVOID; // Read/Write
  369. //
  370. // User defined flags the user specified when they created the range
  371. //
  372. Attributes: UCHAR; // Read/Write
  373. //
  374. // Flags (RTL_RANGE_*)
  375. //
  376. Flags: UCHAR; // Read only
  377. end;
  378. RTL_RANGE = _RTL_RANGE;
  379. PRTL_RANGE = ^RTL_RANGE;
  380. const
  381. RTL_RANGE_SHARED = $01;
  382. RTL_RANGE_CONFLICT = $02;
  383. type
  384. _RTL_RANGE_LIST = record
  385. //
  386. // The list of ranges
  387. //
  388. ListHead: LIST_ENTRY;
  389. //
  390. // These always come in useful
  391. //
  392. Flags: ULONG; // use RANGE_LIST_FLAG_*
  393. //
  394. // The number of entries in the list
  395. //
  396. Count: ULONG;
  397. //
  398. // Every time an add/delete operation is performed on the list this is
  399. // incremented. It is checked during iteration to ensure that the list
  400. // hasn't changed between GetFirst/GetNext or GetNext/GetNext calls
  401. //
  402. Stamp: ULONG;
  403. end;
  404. RTL_RANGE_LIST = _RTL_RANGE_LIST;
  405. PRTL_RANGE_LIST = ^RTL_RANGE_LIST;
  406. _RANGE_LIST_ITERATOR = record
  407. RangeListHead: PLIST_ENTRY;
  408. MergedHead: PLIST_ENTRY;
  409. Current: PVOID;
  410. Stamp: ULONG;
  411. end;
  412. RTL_RANGE_LIST_ITERATOR = _RANGE_LIST_ITERATOR;
  413. PRTL_RANGE_LIST_ITERATOR = ^RTL_RANGE_LIST_ITERATOR;
  414. // End of NTDDK.H
  415. //==============================================================================
  416. // NT System Services
  417. //==============================================================================
  418. type
  419. _SYSTEM_INFORMATION_CLASS = (
  420. SystemBasicInformation,
  421. SystemProcessorInformation,
  422. SystemPerformanceInformation,
  423. SystemTimeOfDayInformation,
  424. SystemNotImplemented1,
  425. SystemProcessesAndThreadsInformation,
  426. SystemCallCounts,
  427. SystemConfigurationInformation,
  428. SystemProcessorTimes,
  429. SystemGlobalFlag,
  430. SystemNotImplemented2,
  431. SystemModuleInformation,
  432. SystemLockInformation,
  433. SystemNotImplemented3,
  434. SystemNotImplemented4,
  435. SystemNotImplemented5,
  436. SystemHandleInformation,
  437. SystemObjectInformation,
  438. SystemPagefileInformation,
  439. SystemInstructionEmulationCounts,
  440. SystemInvalidInfoClass1,
  441. SystemCacheInformation,
  442. SystemPoolTagInformation,
  443. SystemProcessorStatistics,
  444. SystemDpcInformation,
  445. SystemNotImplemented6,
  446. SystemLoadImage,
  447. SystemUnloadImage,
  448. SystemTimeAdjustment,
  449. SystemNotImplemented7,
  450. SystemNotImplemented8,
  451. SystemNotImplemented9,
  452. SystemCrashDumpInformation,
  453. SystemExceptionInformation,
  454. SystemCrashDumpStateInformation,
  455. SystemKernelDebuggerInformation,
  456. SystemContextSwitchInformation,
  457. SystemRegistryQuotaInformation,
  458. SystemLoadAndCallImage,
  459. SystemPrioritySeparation,
  460. SystemNotImplemented10,
  461. SystemNotImplemented11,
  462. SystemInvalidInfoClass2,
  463. SystemInvalidInfoClass3,
  464. SystemTimeZoneInformation,
  465. SystemLookasideInformation,
  466. SystemSetTimeSlipEvent,
  467. SystemCreateSession,
  468. SystemDeleteSession,
  469. SystemInvalidInfoClass4,
  470. SystemRangeStartInformation,
  471. SystemVerifierInformation,
  472. SystemAddVerifier,
  473. SystemSessionProcessesInformation);
  474. SYSTEM_INFORMATION_CLASS = _SYSTEM_INFORMATION_CLASS;
  475. function NtQuerySystemInformation(SystemInformationClass: SYSTEM_INFORMATION_CLASS; SystemInformation: PVOID; SystemInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQuerySystemInformation';
  476. function NtSetSystemInformation(SystemInformationClass: SYSTEM_INFORMATION_CLASS; SystemInformation: PVOID; SystemInformationLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetSystemInformation';
  477. type
  478. _SYSTEM_BASIC_INFORMATION = record // Information Class 0
  479. Unknown: ULONG;
  480. MaximumIncrement: ULONG;
  481. PhysicalPageSize: ULONG;
  482. NumberOfPhysicalPages: ULONG;
  483. LowestPhysicalPage: ULONG;
  484. HighestPhysicalPage: ULONG;
  485. AllocationGranularity: ULONG;
  486. LowestUserAddress: ULONG;
  487. HighestUserAddress: ULONG;
  488. ActiveProcessors: ULONG;
  489. NumberProcessors: UCHAR;
  490. end;
  491. SYSTEM_BASIC_INFORMATION = _SYSTEM_BASIC_INFORMATION;
  492. PSYSTEM_BASIC_INFORMATION = ^SYSTEM_BASIC_INFORMATION;
  493. _SYSTEM_PROCESSOR_INFORMATION = record // Information Class 1
  494. ProcessorArchitecture: USHORT;
  495. ProcessorLevel: USHORT;
  496. ProcessorRevision: USHORT;
  497. Unknown: USHORT;
  498. FeatureBits: ULONG;
  499. end;
  500. SYSTEM_PROCESSOR_INFORMATION = _SYSTEM_PROCESSOR_INFORMATION;
  501. PSYSTEM_PROCESSOR_INFORMATION = ^SYSTEM_PROCESSOR_INFORMATION;
  502. _SYSTEM_PERFORMANCE_INFORMATION = record // Information Class 2
  503. IdleTime: LARGE_INTEGER;
  504. ReadTransferCount: LARGE_INTEGER;
  505. WriteTransferCount: LARGE_INTEGER;
  506. OtherTransferCount: LARGE_INTEGER;
  507. ReadOperationCount: ULONG;
  508. WriteOperationCount: ULONG;
  509. OtherOperationCount: ULONG;
  510. AvailablePages: ULONG;
  511. TotalCommittedPages: ULONG;
  512. TotalCommitLimit: ULONG;
  513. PeakCommitment: ULONG;
  514. PageFaults: ULONG;
  515. WriteCopyFaults: ULONG;
  516. TransistionFaults: ULONG;
  517. Reserved1: ULONG;
  518. DemandZeroFaults: ULONG;
  519. PagesRead: ULONG;
  520. PageReadIos: ULONG;
  521. Reserved2: array [0..1] of ULONG;
  522. PagefilePagesWritten: ULONG;
  523. PagefilePageWriteIos: ULONG;
  524. MappedFilePagesWritten: ULONG;
  525. MappedFilePageWriteIos: ULONG;
  526. PagedPoolUsage: ULONG;
  527. NonPagedPoolUsage: ULONG;
  528. PagedPoolAllocs: ULONG;
  529. PagedPoolFrees: ULONG;
  530. NonPagedPoolAllocs: ULONG;
  531. NonPagedPoolFrees: ULONG;
  532. TotalFreeSystemPtes: ULONG;
  533. SystemCodePage: ULONG;
  534. TotalSystemDriverPages: ULONG;
  535. TotalSystemCodePages: ULONG;
  536. SmallNonPagedLookasideListAllocateHits: ULONG;
  537. SmallPagedLookasideListAllocateHits: ULONG;
  538. Reserved3: ULONG;
  539. MmSystemCachePage: ULONG;
  540. PagedPoolPage: ULONG;
  541. SystemDriverPage: ULONG;
  542. FastReadNoWait: ULONG;
  543. FastReadWait: ULONG;
  544. FastReadResourceMiss: ULONG;
  545. FastReadNotPossible: ULONG;
  546. FastMdlReadNoWait: ULONG;
  547. FastMdlReadWait: ULONG;
  548. FastMdlReadResourceMiss: ULONG;
  549. FastMdlReadNotPossible: ULONG;
  550. MapDataNoWait: ULONG;
  551. MapDataWait: ULONG;
  552. MapDataNoWaitMiss: ULONG;
  553. MapDataWaitMiss: ULONG;
  554. PinMappedDataCount: ULONG;
  555. PinReadNoWait: ULONG;
  556. PinReadWait: ULONG;
  557. PinReadNoWaitMiss: ULONG;
  558. PinReadWaitMiss: ULONG;
  559. CopyReadNoWait: ULONG;
  560. CopyReadWait: ULONG;
  561. CopyReadNoWaitMiss: ULONG;
  562. CopyReadWaitMiss: ULONG;
  563. MdlReadNoWait: ULONG;
  564. MdlReadWait: ULONG;
  565. MdlReadNoWaitMiss: ULONG;
  566. MdlReadWaitMiss: ULONG;
  567. ReadAheadIos: ULONG;
  568. LazyWriteIos: ULONG;
  569. LazyWritePages: ULONG;
  570. DataFlushes: ULONG;
  571. DataPages: ULONG;
  572. ContextSwitches: ULONG;
  573. FirstLevelTbFills: ULONG;
  574. SecondLevelTbFills: ULONG;
  575. SystemCalls: ULONG;
  576. end;
  577. SYSTEM_PERFORMANCE_INFORMATION = _SYSTEM_PERFORMANCE_INFORMATION;
  578. PSYSTEM_PERFORMANCE_INFORMATION = ^SYSTEM_PERFORMANCE_INFORMATION;
  579. _SYSTEM_TIME_OF_DAY_INFORMATION = record // Information Class 3
  580. BootTime: LARGE_INTEGER;
  581. CurrentTime: LARGE_INTEGER;
  582. TimeZoneBias: LARGE_INTEGER;
  583. CurrentTimeZoneId: ULONG;
  584. end;
  585. SYSTEM_TIME_OF_DAY_INFORMATION = _SYSTEM_TIME_OF_DAY_INFORMATION;
  586. PSYSTEM_TIME_OF_DAY_INFORMATION = ^SYSTEM_TIME_OF_DAY_INFORMATION;
  587. _IO_COUNTERSEX = record
  588. ReadOperationCount: LARGE_INTEGER;
  589. WriteOperationCount: LARGE_INTEGER;
  590. OtherOperationCount: LARGE_INTEGER;
  591. ReadTransferCount: LARGE_INTEGER;
  592. WriteTransferCount: LARGE_INTEGER;
  593. OtherTransferCount: LARGE_INTEGER;
  594. end;
  595. IO_COUNTERSEX = _IO_COUNTERSEX;
  596. PIO_COUNTERSEX = ^IO_COUNTERSEX;
  597. THREAD_STATE = (
  598. StateInitialized,
  599. StateReady,
  600. StateRunning,
  601. StateStandby,
  602. StateTerminated,
  603. StateWait,
  604. StateTransition,
  605. StateUnknown);
  606. _SYSTEM_THREADS = record
  607. KernelTime: LARGE_INTEGER;
  608. UserTime: LARGE_INTEGER;
  609. CreateTime: LARGE_INTEGER;
  610. WaitTime: ULONG;
  611. StartAddress: PVOID;
  612. ClientId: CLIENT_ID;
  613. Priority: KPRIORITY;
  614. BasePriority: KPRIORITY;
  615. ContextSwitchCount: ULONG;
  616. State: THREAD_STATE;
  617. WaitReason: KWAIT_REASON;
  618. end;
  619. SYSTEM_THREADS = _SYSTEM_THREADS;
  620. PSYSTEM_THREADS = ^SYSTEM_THREADS;
  621. TSystemThreads = SYSTEM_THREADS;
  622. PSystemThreads = PSYSTEM_THREADS;
  623. _SYSTEM_PROCESSES = record // Information Class 5
  624. NextEntryDelta: ULONG;
  625. ThreadCount: ULONG;
  626. Reserved1: array [0..5] of ULONG;
  627. CreateTime: LARGE_INTEGER;
  628. UserTime: LARGE_INTEGER;
  629. KernelTime: LARGE_INTEGER;
  630. ProcessName: UNICODE_STRING;
  631. BasePriority: KPRIORITY;
  632. ProcessId: ULONG;
  633. InheritedFromProcessId: ULONG;
  634. HandleCount: ULONG;
  635. // next two were Reserved2: array [0..1] of ULONG; thanks to Nico Bendlin
  636. SessionId: ULONG;
  637. Reserved2: ULONG;
  638. VmCounters: VM_COUNTERS;
  639. PrivatePageCount : ULONG;
  640. IoCounters: IO_COUNTERSEX; // Windows 2000 only
  641. Threads: array [0..0] of SYSTEM_THREADS;
  642. end;
  643. SYSTEM_PROCESSES = _SYSTEM_PROCESSES;
  644. PSYSTEM_PROCESSES = ^SYSTEM_PROCESSES;
  645. TSystemProcesses = SYSTEM_PROCESSES;
  646. PSystemProcesses = PSYSTEM_PROCESSES;
  647. _SYSTEM_CALLS_INFORMATION = record // Information Class 6
  648. Size: ULONG;
  649. NumberOfDescriptorTables: ULONG;
  650. NumberOfRoutinesInTable: array [0..0] of ULONG;
  651. // ULONG CallCounts[];
  652. end;
  653. SYSTEM_CALLS_INFORMATION = _SYSTEM_CALLS_INFORMATION;
  654. PSYSTEM_CALLS_INFORMATION = ^SYSTEM_CALLS_INFORMATION;
  655. _SYSTEM_CONFIGURATION_INFORMATION = record // Information Class 7
  656. DiskCount: ULONG;
  657. FloppyCount: ULONG;
  658. CdRomCount: ULONG;
  659. TapeCount: ULONG;
  660. SerialCount: ULONG;
  661. ParallelCount: ULONG;
  662. end;
  663. SYSTEM_CONFIGURATION_INFORMATION = _SYSTEM_CONFIGURATION_INFORMATION;
  664. PSYSTEM_CONFIGURATION_INFORMATION = ^SYSTEM_CONFIGURATION_INFORMATION;
  665. _SYSTEM_PROCESSOR_TIMES = record // Information Class 8
  666. IdleTime: LARGE_INTEGER;
  667. KernelTime: LARGE_INTEGER;
  668. UserTime: LARGE_INTEGER;
  669. DpcTime: LARGE_INTEGER;
  670. InterruptTime: LARGE_INTEGER;
  671. InterruptCount: ULONG;
  672. end;
  673. SYSTEM_PROCESSOR_TIMES = _SYSTEM_PROCESSOR_TIMES;
  674. PSYSTEM_PROCESSOR_TIMES = ^SYSTEM_PROCESSOR_TIMES;
  675. _SYSTEM_GLOBAL_FLAG = record // Information Class 9
  676. GlobalFlag: ULONG;
  677. end;
  678. SYSTEM_GLOBAL_FLAG = _SYSTEM_GLOBAL_FLAG;
  679. PSYSTEM_GLOBAL_FLAG = ^SYSTEM_GLOBAL_FLAG;
  680. _SYSTEM_MODULE_INFORMATION = record // Information Class 11
  681. Reserved: array [0..1] of ULONG;
  682. Base: PVOID;
  683. Size: ULONG;
  684. Flags: ULONG;
  685. Index: USHORT;
  686. Unknown: USHORT;
  687. LoadCount: USHORT;
  688. ModuleNameOffset: USHORT;
  689. ImageName: array [0..255] of CHAR;
  690. end;
  691. SYSTEM_MODULE_INFORMATION = _SYSTEM_MODULE_INFORMATION;
  692. PSYSTEM_MODULE_INFORMATION = ^SYSTEM_MODULE_INFORMATION;
  693. TSystemModuleInformation = SYSTEM_MODULE_INFORMATION;
  694. PSystemModuleInformation = PSYSTEM_MODULE_INFORMATION;
  695. _SYSTEM_LOCK_INFORMATION = record // Information Class 12
  696. Address: PVOID;
  697. Type_: USHORT;
  698. Reserved1: USHORT;
  699. ExclusiveOwnerThreadId: ULONG;
  700. ActiveCount: ULONG;
  701. ContentionCount: ULONG;
  702. Reserved2: array [0..1] of ULONG;
  703. NumberOfSharedWaiters: ULONG;
  704. NumberOfExclusiveWaiters: ULONG;
  705. end;
  706. SYSTEM_LOCK_INFORMATION = _SYSTEM_LOCK_INFORMATION;
  707. PSYSTEM_LOCK_INFORMATION = ^SYSTEM_LOCK_INFORMATION;
  708. _SYSTEM_HANDLE_INFORMATION = record // Information Class 16
  709. ProcessId: ULONG;
  710. ObjectTypeNumber: UCHAR;
  711. Flags: UCHAR; // 0x01 = PROTECT_FROM_CLOSE, 0x02 = INHERIT
  712. Handle: USHORT;
  713. Object_: PVOID;
  714. GrantedAccess: ACCESS_MASK;
  715. end;
  716. SYSTEM_HANDLE_INFORMATION = _SYSTEM_HANDLE_INFORMATION;
  717. PSYSTEM_HANDLE_INFORMATION = ^SYSTEM_HANDLE_INFORMATION;
  718. _SYSTEM_OBJECT_TYPE_INFORMATION = record // Information Class 17
  719. NextEntryOffset: ULONG;
  720. ObjectCount: ULONG;
  721. HandleCount: ULONG;
  722. TypeNumber: ULONG;
  723. InvalidAttributes: ULONG;
  724. GenericMapping: GENERIC_MAPPING;
  725. ValidAccessMask: ACCESS_MASK;
  726. PoolType: POOL_TYPE;
  727. Unknown: UCHAR;
  728. Name: UNICODE_STRING;
  729. end;
  730. SYSTEM_OBJECT_TYPE_INFORMATION = _SYSTEM_OBJECT_TYPE_INFORMATION;
  731. PSYSTEM_OBJECT_TYPE_INFORMATION = ^SYSTEM_OBJECT_TYPE_INFORMATION;
  732. _SYSTEM_OBJECT_INFORMATION = record
  733. NextEntryOffset: ULONG;
  734. Object_: PVOID;
  735. CreatorProcessId: ULONG;
  736. Unknown: USHORT;
  737. Flags: USHORT;
  738. PointerCount: ULONG;
  739. HandleCount: ULONG;
  740. PagedPoolUsage: ULONG;
  741. NonPagedPoolUsage: ULONG;
  742. ExclusiveProcessId: ULONG;
  743. SecurityDescriptor: PSECURITY_DESCRIPTOR;
  744. Name: UNICODE_STRING;
  745. end;
  746. SYSTEM_OBJECT_INFORMATION = _SYSTEM_OBJECT_INFORMATION;
  747. PSYSTEM_OBJECT_INFORMATION = ^SYSTEM_OBJECT_INFORMATION;
  748. _SYSTEM_PAGEFILE_INFORMATION = record // Information Class 18
  749. NextEntryOffset: ULONG;
  750. CurrentSize: ULONG;
  751. TotalUsed: ULONG;
  752. PeakUsed: ULONG;
  753. FileName: UNICODE_STRING;
  754. end;
  755. SYSTEM_PAGEFILE_INFORMATION = _SYSTEM_PAGEFILE_INFORMATION;
  756. PSYSTEM_PAGEFILE_INFORMATION = ^SYSTEM_PAGEFILE_INFORMATION;
  757. TSystemPageFileInformation = SYSTEM_PAGEFILE_INFORMATION;
  758. PSystemPageFileInformation = PSYSTEM_PAGEFILE_INFORMATION;
  759. _SYSTEM_INSTRUCTION_EMULATION_INFORMATION = record // Info Class 19
  760. GenericInvalidOpcode: ULONG;
  761. TwoByteOpcode: ULONG;
  762. ESprefix: ULONG;
  763. CSprefix: ULONG;
  764. SSprefix: ULONG;
  765. DSprefix: ULONG;
  766. FSPrefix: ULONG;
  767. GSprefix: ULONG;
  768. OPER32prefix: ULONG;
  769. ADDR32prefix: ULONG;
  770. INSB: ULONG;
  771. INSW: ULONG;
  772. OUTSB: ULONG;
  773. OUTSW: ULONG;
  774. PUSHFD: ULONG;
  775. POPFD: ULONG;
  776. INTnn: ULONG;
  777. INTO: ULONG;
  778. IRETD: ULONG;
  779. FloatingPointOpcode: ULONG;
  780. INBimm: ULONG;
  781. INWimm: ULONG;
  782. OUTBimm: ULONG;
  783. OUTWimm: ULONG;
  784. INB: ULONG;
  785. INW: ULONG;
  786. OUTB: ULONG;
  787. OUTW: ULONG;
  788. LOCKprefix: ULONG;
  789. REPNEprefix: ULONG;
  790. REPprefix: ULONG;
  791. CLI: ULONG;
  792. STI: ULONG;
  793. HLT: ULONG;
  794. end;
  795. SYSTEM_INSTRUCTION_EMULATION_INFORMATION = _SYSTEM_INSTRUCTION_EMULATION_INFORMATION;
  796. PSYSTEM_INSTRUCTION_EMULATION_INFORMATION = ^SYSTEM_INSTRUCTION_EMULATION_INFORMATION;
  797. _SYSTEM_CACHE_INFORMATION = record // Information Class 21
  798. SystemCacheWsSize: ULONG;
  799. SystemCacheWsPeakSize: ULONG;
  800. SystemCacheWsFaults: ULONG;
  801. SystemCacheWsMinimum: ULONG;
  802. SystemCacheWsMaximum: ULONG;
  803. TransitionSharedPages: ULONG;
  804. TransitionSharedPagesPeak: ULONG;
  805. Reserved: array [0..1] of ULONG;
  806. end;
  807. SYSTEM_CACHE_INFORMATION = _SYSTEM_CACHE_INFORMATION;
  808. PSYSTEM_CACHE_INFORMATION = ^SYSTEM_CACHE_INFORMATION;
  809. _SYSTEM_POOL_TAG_INFORMATION = record // Information Class 22
  810. Tag: array [0..3] of CHAR;
  811. PagedPoolAllocs: ULONG;
  812. PagedPoolFrees: ULONG;
  813. PagedPoolUsage: ULONG;
  814. NonPagedPoolAllocs: ULONG;
  815. NonPagedPoolFrees: ULONG;
  816. NonPagedPoolUsage: ULONG;
  817. end;
  818. SYSTEM_POOL_TAG_INFORMATION = _SYSTEM_POOL_TAG_INFORMATION;
  819. PSYSTEM_POOL_TAG_INFORMATION = ^SYSTEM_POOL_TAG_INFORMATION;
  820. _SYSTEM_PROCESSOR_STATISTICS = record // Information Class 23
  821. ContextSwitches: ULONG;
  822. DpcCount: ULONG;
  823. DpcRequestRate: ULONG;
  824. TimeIncrement: ULONG;
  825. DpcBypassCount: ULONG;
  826. ApcBypassCount: ULONG;
  827. end;
  828. SYSTEM_PROCESSOR_STATISTICS = _SYSTEM_PROCESSOR_STATISTICS;
  829. PSYSTEM_PROCESSOR_STATISTICS = ^SYSTEM_PROCESSOR_STATISTICS;
  830. _SYSTEM_DPC_INFORMATION = record // Information Class 24
  831. Reserved: ULONG;
  832. MaximumDpcQueueDepth: ULONG;
  833. MinimumDpcRate: ULONG;
  834. AdjustDpcThreshold: ULONG;
  835. IdealDpcRate: ULONG;
  836. end;
  837. SYSTEM_DPC_INFORMATION = _SYSTEM_DPC_INFORMATION;
  838. PSYSTEM_DPC_INFORMATION = ^SYSTEM_DPC_INFORMATION;
  839. _SYSTEM_LOAD_IMAGE = record // Information Class 26
  840. ModuleName: UNICODE_STRING;
  841. ModuleBase: PVOID;
  842. Unknown: PVOID;
  843. EntryPoint: PVOID;
  844. ExportDirectory: PVOID;
  845. end;
  846. SYSTEM_LOAD_IMAGE = _SYSTEM_LOAD_IMAGE;
  847. PSYSTEM_LOAD_IMAGE = ^SYSTEM_LOAD_IMAGE;
  848. _SYSTEM_UNLOAD_IMAGE = record // Information Class 27
  849. ModuleBase: PVOID;
  850. end;
  851. SYSTEM_UNLOAD_IMAGE = _SYSTEM_UNLOAD_IMAGE;
  852. PSYSTEM_UNLOAD_IMAGE = ^SYSTEM_UNLOAD_IMAGE;
  853. _SYSTEM_QUERY_TIME_ADJUSTMENT = record // Information Class 28
  854. TimeAdjustment: ULONG;
  855. MaximumIncrement: ULONG;
  856. TimeSynchronization: ByteBool;
  857. end;
  858. SYSTEM_QUERY_TIME_ADJUSTMENT = _SYSTEM_QUERY_TIME_ADJUSTMENT;
  859. PSYSTEM_QUERY_TIME_ADJUSTMENT = ^SYSTEM_QUERY_TIME_ADJUSTMENT;
  860. _SYSTEM_SET_TIME_ADJUSTMENT = record // Information Class 28
  861. TimeAdjustment: ULONG;
  862. TimeSynchronization: ByteBool;
  863. end;
  864. SYSTEM_SET_TIME_ADJUSTMENT = _SYSTEM_SET_TIME_ADJUSTMENT;
  865. PSYSTEM_SET_TIME_ADJUSTMENT = ^SYSTEM_SET_TIME_ADJUSTMENT;
  866. _SYSTEM_CRASH_DUMP_INFORMATION = record // Information Class 32
  867. CrashDumpSectionHandle: HANDLE;
  868. Unknown: HANDLE; // Windows 2000 only
  869. end;
  870. SYSTEM_CRASH_DUMP_INFORMATION = _SYSTEM_CRASH_DUMP_INFORMATION;
  871. PSYSTEM_CRASH_DUMP_INFORMATION = ^SYSTEM_CRASH_DUMP_INFORMATION;
  872. _SYSTEM_EXCEPTION_INFORMATION = record // Information Class 33
  873. AlignmentFixupCount: ULONG;
  874. ExceptionDispatchCount: ULONG;
  875. FloatingEmulationCount: ULONG;
  876. Reserved: ULONG;
  877. end;
  878. SYSTEM_EXCEPTION_INFORMATION = _SYSTEM_EXCEPTION_INFORMATION;
  879. PSYSTEM_EXCEPTION_INFORMATION = ^SYSTEM_EXCEPTION_INFORMATION;
  880. _SYSTEM_CRASH_STATE_INFORMATION = record // Information Class 34
  881. ValidCrashDump: ULONG;
  882. Unknown: ULONG; // Windows 2000 only
  883. end;
  884. SYSTEM_CRASH_STATE_INFORMATION = _SYSTEM_CRASH_STATE_INFORMATION;
  885. PSYSTEM_CRASH_STATE_INFORMATION = ^SYSTEM_CRASH_STATE_INFORMATION;
  886. _SYSTEM_KERNEL_DEBUGGER_INFORMATION = record // Information Class 35
  887. DebuggerEnabled: ByteBool;
  888. DebuggerNotPresent: ByteBool;
  889. end;
  890. SYSTEM_KERNEL_DEBUGGER_INFORMATION = _SYSTEM_KERNEL_DEBUGGER_INFORMATION;
  891. PSYSTEM_KERNEL_DEBUGGER_INFORMATION = ^SYSTEM_KERNEL_DEBUGGER_INFORMATION;
  892. _SYSTEM_CONTEXT_SWITCH_INFORMATION = record // Information Class 36
  893. ContextSwitches: ULONG;
  894. ContextSwitchCounters: array [0..10] of ULONG;
  895. end;
  896. SYSTEM_CONTEXT_SWITCH_INFORMATION = _SYSTEM_CONTEXT_SWITCH_INFORMATION;
  897. PSYSTEM_CONTEXT_SWITCH_INFORMATION = ^SYSTEM_CONTEXT_SWITCH_INFORMATION;
  898. _SYSTEM_REGISTRY_QUOTA_INFORMATION = record // Information Class 37
  899. RegistryQuota: ULONG;
  900. RegistryQuotaInUse: ULONG;
  901. PagedPoolSize: ULONG;
  902. end;
  903. SYSTEM_REGISTRY_QUOTA_INFORMATION = _SYSTEM_REGISTRY_QUOTA_INFORMATION;
  904. PSYSTEM_REGISTRY_QUOTA_INFORMATION = ^SYSTEM_REGISTRY_QUOTA_INFORMATION;
  905. _SYSTEM_LOAD_AND_CALL_IMAGE = record // Information Class 38
  906. ModuleName: UNICODE_STRING;
  907. end;
  908. SYSTEM_LOAD_AND_CALL_IMAGE = _SYSTEM_LOAD_AND_CALL_IMAGE;
  909. PSYSTEM_LOAD_AND_CALL_IMAGE = ^SYSTEM_LOAD_AND_CALL_IMAGE;
  910. _SYSTEM_PRIORITY_SEPARATION = record // Information Class 39
  911. PrioritySeparation: ULONG;
  912. end;
  913. SYSTEM_PRIORITY_SEPARATION = _SYSTEM_PRIORITY_SEPARATION;
  914. PSYSTEM_PRIORITY_SEPARATION = ^SYSTEM_PRIORITY_SEPARATION;
  915. _SYSTEM_TIME_ZONE_INFORMATION = record // Information Class 44
  916. Bias: LONG;
  917. StandardName: array [0..31] of WCHAR;
  918. StandardDate: SYSTEMTIME;
  919. StandardBias: LONG;
  920. DaylightName: array [0..31] of WCHAR;
  921. DaylightDate: SYSTEMTIME;
  922. DaylightBias: LONG;
  923. end;
  924. SYSTEM_TIME_ZONE_INFORMATION = _SYSTEM_TIME_ZONE_INFORMATION;
  925. PSYSTEM_TIME_ZONE_INFORMATION = ^SYSTEM_TIME_ZONE_INFORMATION;
  926. _SYSTEM_LOOKASIDE_INFORMATION = record // Information Class 45
  927. Depth: USHORT;
  928. MaximumDepth: USHORT;
  929. TotalAllocates: ULONG;
  930. AllocateMisses: ULONG;
  931. TotalFrees: ULONG;
  932. FreeMisses: ULONG;
  933. Type_: POOL_TYPE;
  934. Tag: ULONG;
  935. Size: ULONG;
  936. end;
  937. SYSTEM_LOOKASIDE_INFORMATION = _SYSTEM_LOOKASIDE_INFORMATION;
  938. PSYSTEM_LOOKASIDE_INFORMATION = ^SYSTEM_LOOKASIDE_INFORMATION;
  939. _SYSTEM_SET_TIME_SLIP_EVENT = record // Information Class 46
  940. TimeSlipEvent: HANDLE;
  941. end;
  942. SYSTEM_SET_TIME_SLIP_EVENT = _SYSTEM_SET_TIME_SLIP_EVENT;
  943. PSYSTEM_SET_TIME_SLIP_EVENT = ^SYSTEM_SET_TIME_SLIP_EVENT;
  944. _SYSTEM_CREATE_SESSION = record // Information Class 47
  945. Session: ULONG;
  946. end;
  947. SYSTEM_CREATE_SESSION = _SYSTEM_CREATE_SESSION;
  948. PSYSTEM_CREATE_SESSION = ^SYSTEM_CREATE_SESSION;
  949. _SYSTEM_DELETE_SESSION = record // Information Class 48
  950. Session: ULONG;
  951. end;
  952. SYSTEM_DELETE_SESSION = _SYSTEM_DELETE_SESSION;
  953. PSYSTEM_DELETE_SESSION = ^SYSTEM_DELETE_SESSION;
  954. _SYSTEM_RANGE_START_INFORMATION = record // Information Class 50
  955. SystemRangeStart: PVOID;
  956. end;
  957. SYSTEM_RANGE_START_INFORMATION = _SYSTEM_RANGE_START_INFORMATION;
  958. PSYSTEM_RANGE_START_INFORMATION = ^SYSTEM_RANGE_START_INFORMATION;
  959. _SYSTEM_POOL_BLOCK = record
  960. Allocated: ByteBool;
  961. Unknown: USHORT;
  962. Size: ULONG;
  963. Tag: array [0..3] of CHAR;
  964. end;
  965. SYSTEM_POOL_BLOCK = _SYSTEM_POOL_BLOCK;
  966. PSYSTEM_POOL_BLOCK = ^SYSTEM_POOL_BLOCK;
  967. _SYSTEM_POOL_BLOCKS_INFORMATION = record // Info Classes 14 and 15
  968. PoolSize: ULONG;
  969. PoolBase: PVOID;
  970. Unknown: USHORT;
  971. NumberOfBlocks: ULONG;
  972. PoolBlocks: array [0..0] of SYSTEM_POOL_BLOCK;
  973. end;
  974. SYSTEM_POOL_BLOCKS_INFORMATION = _SYSTEM_POOL_BLOCKS_INFORMATION;
  975. PSYSTEM_POOL_BLOCKS_INFORMATION = ^SYSTEM_POOL_BLOCKS_INFORMATION;
  976. _SYSTEM_MEMORY_USAGE = record
  977. Name: PVOID;
  978. Valid: USHORT;
  979. Standby: USHORT;
  980. Modified: USHORT;
  981. PageTables: USHORT;
  982. end;
  983. SYSTEM_MEMORY_USAGE = _SYSTEM_MEMORY_USAGE;
  984. PSYSTEM_MEMORY_USAGE = ^SYSTEM_MEMORY_USAGE;
  985. _SYSTEM_MEMORY_USAGE_INFORMATION = record // Info Classes 25 and 29
  986. Reserved: ULONG;
  987. EndOfData: PVOID;
  988. MemoryUsage: array [0..0] of SYSTEM_MEMORY_USAGE;
  989. end;
  990. SYSTEM_MEMORY_USAGE_INFORMATION = _SYSTEM_MEMORY_USAGE_INFORMATION;
  991. PSYSTEM_MEMORY_USAGE_INFORMATION = ^SYSTEM_MEMORY_USAGE_INFORMATION;
  992. function NtQuerySystemEnvironmentValue(Name: PUNICODE_STRING; Value: PVOID; ValueLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQuerySystemEnvironmentValue';
  993. function NtSetSystemEnvironmentValue(Name: PUNICODE_STRING; Value: PUNICODE_STRING): NTSTATUS; stdcall;external ntdll name 'NtSetSystemEnvironmentValue';
  994. type
  995. _SHUTDOWN_ACTION = (
  996. ShutdownNoReboot,
  997. ShutdownReboot,
  998. ShutdownPowerOff);
  999. SHUTDOWN_ACTION = _SHUTDOWN_ACTION;
  1000. function NtShutdownSystem(Action: SHUTDOWN_ACTION): NTSTATUS; stdcall;external ntdll name 'NtShutdownSystem';
  1001. type
  1002. _DEBUG_CONTROL_CODE = (
  1003. DebugFiller0,
  1004. DebugGetTraceInformation,
  1005. DebugSetInternalBreakpoint,
  1006. DebugSetSpecialCall,
  1007. DebugClearSpecialCalls,
  1008. DebugQuerySpecialCalls,
  1009. DebugDbgBreakPoint);
  1010. DEBUG_CONTROL_CODE = _DEBUG_CONTROL_CODE;
  1011. function NtSystemDebugControl(ControlCode: DEBUG_CONTROL_CODE; InputBuffer: PVOID; InputBufferLength: ULONG; OutputBuffer: PVOID; OutputBufferLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall;external ntdll name 'NtSystemDebugControl';
  1012. type
  1013. _OBJECT_INFORMATION_CLASS = (
  1014. ObjectBasicInformation,
  1015. ObjectNameInformation,
  1016. ObjectTypeInformation,
  1017. ObjectAllTypesInformation,
  1018. ObjectHandleInformation);
  1019. OBJECT_INFORMATION_CLASS = _OBJECT_INFORMATION_CLASS;
  1020. function NtQueryObject(ObjectHandle: HANDLE; ObjectInformationClass: OBJECT_INFORMATION_CLASS; ObjectInformation: PVOID; ObjectInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryObject';
  1021. function NtSetInformationObject(ObjectHandle: HANDLE; ObjectInformationClass: OBJECT_INFORMATION_CLASS; ObjectInformation: PVOID; ObjectInformationLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetInformationObject';
  1022. type
  1023. _OBJECT_BASIC_INFORMATION = record // Information Class 0
  1024. Attributes: ULONG;
  1025. GrantedAccess: ACCESS_MASK;
  1026. HandleCount: ULONG;
  1027. PointerCount: ULONG;
  1028. PagedPoolUsage: ULONG;
  1029. NonPagedPoolUsage: ULONG;
  1030. Reserved: array [0..2] of ULONG;
  1031. NameInformationLength: ULONG;
  1032. TypeInformationLength: ULONG;
  1033. SecurityDescriptorLength: ULONG;
  1034. CreateTime: LARGE_INTEGER;
  1035. end;
  1036. OBJECT_BASIC_INFORMATION = _OBJECT_BASIC_INFORMATION;
  1037. POBJECT_BASIC_INFORMATION = ^OBJECT_BASIC_INFORMATION;
  1038. _OBJECT_TYPE_INFORMATION = record // Information Class 2
  1039. Name: UNICODE_STRING;
  1040. ObjectCount: ULONG;
  1041. HandleCount: ULONG;
  1042. Reserved1: array [0..3] of ULONG;
  1043. PeakObjectCount: ULONG;
  1044. PeakHandleCount: ULONG;
  1045. Reserved2: array [0..3] of ULONG;
  1046. InvalidAttributes: ULONG;
  1047. GenericMapping: GENERIC_MAPPING;
  1048. ValidAccess: ULONG;
  1049. Unknown: UCHAR;
  1050. MaintainHandleDatabase: ByteBool;
  1051. Reserved3: array [0..1] of UCHAR;
  1052. PoolType: POOL_TYPE;
  1053. PagedPoolUsage: ULONG;
  1054. NonPagedPoolUsage: ULONG;
  1055. end;
  1056. OBJECT_TYPE_INFORMATION = _OBJECT_TYPE_INFORMATION;
  1057. POBJECT_TYPE_INFORMATION = ^OBJECT_TYPE_INFORMATION;
  1058. _OBJECT_ALL_TYPES_INFORMATION = record // Information Class 3
  1059. NumberOfTypes: ULONG;
  1060. TypeInformation: OBJECT_TYPE_INFORMATION;
  1061. end;
  1062. OBJECT_ALL_TYPES_INFORMATION = _OBJECT_ALL_TYPES_INFORMATION;
  1063. POBJECT_ALL_TYPES_INFORMATION = ^OBJECT_ALL_TYPES_INFORMATION;
  1064. _OBJECT_HANDLE_ATTRIBUTE_INFORMATION = record // Information Class 4
  1065. Inherit: ByteBool;
  1066. ProtectFromClose: ByteBool;
  1067. end;
  1068. OBJECT_HANDLE_ATTRIBUTE_INFORMATION = _OBJECT_HANDLE_ATTRIBUTE_INFORMATION;
  1069. POBJECT_HANDLE_ATTRIBUTE_INFORMATION = ^OBJECT_HANDLE_ATTRIBUTE_INFORMATION;
  1070. function NtDuplicateObject(SourceProcessHandle: HANDLE; SourceHandle: HANDLE; TargetProcessHandle: HANDLE; TargetHandle: PHANDLE; DesiredAccess: ACCESS_MASK; Attributes: ULONG; Options: ULONG): NTSTATUS; stdcall; external ntdll name 'NtDuplicateObject';
  1071. function NtMakeTemporaryObject(Handle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtMakeTemporaryObject';
  1072. function NtClose(Handle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtClose';
  1073. function NtQuerySecurityObject(Handle: HANDLE; RequestedInformation: SECURITY_INFORMATION; SecurityDescriptor: PSECURITY_DESCRIPTOR; SecurityDescriptorLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQuerySecurityObject';
  1074. function NtSetSecurityObject(Handle: HANDLE; SecurityInformation: SECURITY_INFORMATION; SecurityDescriptor: PSECURITY_DESCRIPTOR): NTSTATUS; stdcall; external ntdll name 'NtSetSecurityObject';
  1075. function NtCreateDirectoryObject(DirectoryHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtCreateDirectoryObject';
  1076. function NtOpenDirectoryObject(DirectoryHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenDirectoryObject';
  1077. function NtQueryDirectoryObject(DirectoryHandle: HANDLE; Buffer: PVOID; BufferLength: ULONG; ReturnSingleEntry: ByteBool; RestartScan: ByteBool; Context: PULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryDirectoryObject';
  1078. type
  1079. _DIRECTORY_BASIC_INFORMATION = record
  1080. ObjectName: UNICODE_STRING;
  1081. ObjectTypeName: UNICODE_STRING;
  1082. end;
  1083. DIRECTORY_BASIC_INFORMATION = _DIRECTORY_BASIC_INFORMATION;
  1084. PDIRECTORY_BASIC_INFORMATION = ^DIRECTORY_BASIC_INFORMATION;
  1085. function NtCreateSymbolicLinkObject(SymbolicLinkHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; TargetName: PUNICODE_STRING): NTSTATUS; stdcall; external ntdll name 'NtCreateSymbolicLinkObject';
  1086. function NtOpenSymbolicLinkObject(SymbolicLinkHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenSymbolicLinkObject';
  1087. function NtQuerySymbolicLinkObject(SymbolicLinkHandle: HANDLE; TargetName: PUNICODE_STRING; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQuerySymbolicLinkObject';
  1088. function NtAllocateVirtualMemory(ProcessHandle: HANDLE; BaseAddress: PPVOID; ZeroBits: ULONG; AllocationSize: PULONG; AllocationType: ULONG; Protect: ULONG): NTSTATUS; stdcall; external ntdll name 'NtAllocateVirtualMemory';
  1089. function NtFreeVirtualMemory(ProcessHandle: HANDLE; BaseAddress: PPVOID; FreeSize: PULONG; FreeType: ULONG): NTSTATUS; stdcall; external ntdll name 'NtFreeVirtualMemory';
  1090. type
  1091. _MEMORY_INFORMATION_CLASS = (
  1092. MemoryBasicInformation,
  1093. MemoryWorkingSetList,
  1094. MemorySectionName,
  1095. MemoryBasicVlmInformation);
  1096. MEMORY_INFORMATION_CLASS = _MEMORY_INFORMATION_CLASS;
  1097. function NtQueryVirtualMemory(ProcessHandle: HANDLE; BaseAddress: PVOID; MemoryInformationClass: MEMORY_INFORMATION_CLASS; MemoryInformation: PVOID; MemoryInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryVirtualMemory';
  1098. type
  1099. _MEMORY_BASIC_INFORMATION = record // Information Class 0
  1100. BaseAddress: PVOID;
  1101. AllocationBase: PVOID;
  1102. AllocationProtect: ULONG;
  1103. RegionSize: ULONG;
  1104. State: ULONG;
  1105. Protect: ULONG;
  1106. Type_: ULONG;
  1107. end;
  1108. MEMORY_BASIC_INFORMATION = _MEMORY_BASIC_INFORMATION;
  1109. PMEMORY_BASIC_INFORMATION = ^MEMORY_BASIC_INFORMATION;
  1110. _MEMORY_WORKING_SET_LIST = record // Information Class 1
  1111. NumberOfPages: ULONG;
  1112. WorkingSetList: array [0..0] of ULONG;
  1113. end;
  1114. MEMORY_WORKING_SET_LIST = _MEMORY_WORKING_SET_LIST;
  1115. PMEMORY_WORKING_SET_LIST = ^MEMORY_WORKING_SET_LIST;
  1116. _MEMORY_SECTION_NAME = record // Information Class 2
  1117. SectionFileName: UNICODE_STRING;
  1118. end;
  1119. MEMORY_SECTION_NAME = _MEMORY_SECTION_NAME;
  1120. PMEMORY_SECTION_NAME = ^MEMORY_SECTION_NAME;
  1121. function NtLockVirtualMemory(ProcessHandle: HANDLE; BaseAddress: PPVOID; LockSize: PULONG; LockType: ULONG): NTSTATUS; stdcall; external ntdll name 'NtLockVirtualMemory';
  1122. function NtUnlockVirtualMemory(ProcessHandle: HANDLE; BaseAddress: PPVOID; LockSize: PULONG; LockType: ULONG): NTSTATUS; stdcall; external ntdll name 'NtUnlockVirtualMemory';
  1123. function NtReadVirtualMemory(ProcessHandle: HANDLE; BaseAddress: PVOID; Buffer: PVOID; BufferLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtReadVirtualMemory';
  1124. function NtWriteVirtualMemory(ProcessHandle: HANDLE; BaseAddress: PVOID; Buffer: PVOID; BufferLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtWriteVirtualMemory';
  1125. function NtProtectVirtualMemory(ProcessHandle: HANDLE; BaseAddress: PPVOID; ProtectSize: PULONG; NewProtect: ULONG; OldProtect: PULONG): NTSTATUS; stdcall; external ntdll name 'NtProtectVirtualMemory';
  1126. function NtFlushVirtualMemory(ProcessHandle: HANDLE; BaseAddress: PPVOID; FlushSize: PULONG; IoStatusBlock: PIO_STATUS_BLOCK): NTSTATUS; stdcall; external ntdll name 'NtFlushVirtualMemory';
  1127. function NtAllocateUserPhysicalPages(ProcessHandle: HANDLE; NumberOfPages: PULONG; PageFrameNumbers: PULONG): NTSTATUS; stdcall; external ntdll name 'NtAllocateUserPhysicalPages';
  1128. function NtFreeUserPhysicalPages(ProcessHandle: HANDLE; NumberOfPages: PULONG; PageFrameNumbers: PULONG): NTSTATUS; stdcall; external ntdll name 'NtFreeUserPhysicalPages';
  1129. function NtMapUserPhysicalPages(BaseAddress: PVOID; NumberOfPages: PULONG; PageFrameNumbers: PULONG): NTSTATUS; stdcall; external ntdll name 'NtMapUserPhysicalPages';
  1130. function NtMapUserPhysicalPagesScatter(BaseAddresses: PPVOID; NumberOfPages: PULONG; PageFrameNumbers: PULONG): NTSTATUS; stdcall; external ntdll name 'NtMapUserPhysicalPagesScatter';
  1131. function NtGetWriteWatch(ProcessHandle: HANDLE; Flags: ULONG; BaseAddress: PVOID; RegionSize: ULONG; Buffer: PULONG; BufferEntries: PULONG; Granularity: PULONG): NTSTATUS; stdcall; external ntdll name 'NtGetWriteWatch';
  1132. function NtResetWriteWatch(ProcessHandle: HANDLE; BaseAddress: PVOID; RegionSize: ULONG): NTSTATUS; stdcall; external ntdll name 'NtResetWriteWatch';
  1133. function NtCreateSection(SectionHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; SectionSize: PLARGE_INTEGER; Protect: ULONG; Attributes: ULONG; FileHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtCreateSection';
  1134. function NtOpenSection(SectionHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenSection';
  1135. type
  1136. _SECTION_INFORMATION_CLASS = (
  1137. SectionBasicInformation,
  1138. SectionImageInformation);
  1139. SECTION_INFORMATION_CLASS = _SECTION_INFORMATION_CLASS;
  1140. function NtQuerySection(SectionHandle: HANDLE; SectionInformationClass: SECTION_INFORMATION_CLASS; SectionInformation: PVOID; SectionInformationLength: ULONG; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQuerySection';
  1141. type
  1142. _SECTION_BASIC_INFORMATION = record // Information Class 0
  1143. BaseAddress: PVOID;
  1144. Attributes: ULONG;
  1145. Size: LARGE_INTEGER;
  1146. end;
  1147. SECTION_BASIC_INFORMATION = _SECTION_BASIC_INFORMATION;
  1148. PSECTION_BASIC_INFORMATION = ^SECTION_BASIC_INFORMATION;
  1149. _SECTION_IMAGE_INFORMATION = record // Information Class 1
  1150. EntryPoint: PVOID;
  1151. Unknown1: ULONG;
  1152. StackReserve: ULONG;
  1153. StackCommit: ULONG;
  1154. Subsystem: ULONG;
  1155. MinorSubsystemVersion: USHORT;
  1156. MajorSubsystemVersion: USHORT;
  1157. Unknown2: ULONG;
  1158. Characteristics: ULONG;
  1159. ImageNumber: USHORT;
  1160. Executable: ByteBool;
  1161. Unknown3: UCHAR;
  1162. Unknown4: array [0..2] of ULONG;
  1163. end;
  1164. SECTION_IMAGE_INFORMATION = _SECTION_IMAGE_INFORMATION;
  1165. PSECTION_IMAGE_INFORMATION = ^SECTION_IMAGE_INFORMATION;
  1166. function NtExtendSection(SectionHandle: HANDLE; SectionSize: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtExtendSection';
  1167. function NtMapViewOfSection(SectionHandle: HANDLE; ProcessHandle: HANDLE; BaseAddress: PPVOID; ZeroBits: ULONG; CommitSize: ULONG; SectionOffset: PLARGE_INTEGER; ViewSize: PULONG; InheritDisposition: SECTION_INHERIT; AllocationType: ULONG; Protect: ULONG): NTSTATUS; stdcall; external ntdll name 'NtMapViewOfSection';
  1168. function NtUnmapViewOfSection(ProcessHandle: HANDLE; BaseAddress: PVOID): NTSTATUS; stdcall; external ntdll name 'NtUnmapViewOfSection';
  1169. function NtAreMappedFilesTheSame(Address1: PVOID; Address2: PVOID): NTSTATUS; stdcall; external ntdll name 'NtAreMappedFilesTheSame';
  1170. type
  1171. _USER_STACK = record
  1172. FixedStackBase: PVOID;
  1173. FixedStackLimit: PVOID;
  1174. ExpandableStackBase: PVOID;
  1175. ExpandableStackLimit: PVOID;
  1176. ExpandableStackBottom: PVOID;
  1177. end;
  1178. USER_STACK = _USER_STACK;
  1179. PUSER_STACK = ^USER_STACK;
  1180. function NtCreateThread(ThreadHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; ProcessHandle: HANDLE; ClientId: PCLIENT_ID; ThreadContext: PCONTEXT; UserStack: PUSER_STACK; CreateSuspended: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtCreateThread';
  1181. function NtOpenThread(ThreadHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; ClientId: PCLIENT_ID): NTSTATUS; stdcall; external ntdll name 'NtOpenThread';
  1182. function NtTerminateThread(ThreadHandle: HANDLE; ExitStatus: NTSTATUS): NTSTATUS; stdcall; external ntdll name 'NtTerminateThread';
  1183. function NtQueryInformationThread(ThreadHandle: HANDLE; ThreadInformationClass: THREADINFOCLASS; ThreadInformation: PVOID; ThreadInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryInformationThread';
  1184. function NtSetInformationThread(ThreadHandle: HANDLE; ThreadInformationClass: THREADINFOCLASS; ThreadInformation: PVOID; ThreadInformationLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetInformationThread';
  1185. type
  1186. _THREAD_BASIC_INFORMATION = record // Information Class 0
  1187. ExitStatus: NTSTATUS;
  1188. TebBaseAddress: PNT_TIB;
  1189. ClientId: CLIENT_ID;
  1190. AffinityMask: KAFFINITY;
  1191. Priority: KPRIORITY;
  1192. BasePriority: KPRIORITY;
  1193. end;
  1194. THREAD_BASIC_INFORMATION = _THREAD_BASIC_INFORMATION;
  1195. PTHREAD_BASIC_INFORMATION = ^THREAD_BASIC_INFORMATION;
  1196. function NtSuspendThread(ThreadHandle: HANDLE; PreviousSuspendCount: PULONG): NTSTATUS; stdcall; external ntdll name 'NtSuspendThread';
  1197. function NtResumeThread(ThreadHandle: HANDLE; PreviousSuspendCount: PULONG): NTSTATUS; stdcall; external ntdll name 'NtResumeThread';
  1198. function NtGetContextThread(ThreadHandle: HANDLE; Context: PCONTEXT): NTSTATUS; stdcall; external ntdll name 'NtGetContextThread';
  1199. function NtSetContextThread(ThreadHandle: HANDLE; Context: PCONTEXT): NTSTATUS; stdcall; external ntdll name 'NtSetContextThread';
  1200. function NtQueueApcThread(ThreadHandle: HANDLE; ApcRoutine: PKNORMAL_ROUTINE; ApcContext: PVOID; Argument1: PVOID; Argument2: PVOID): NTSTATUS; stdcall; external ntdll name 'NtQueueApcThread';
  1201. function NtTestAlert: NTSTATUS; stdcall; external ntdll name 'NtTestAlert';
  1202. function NtAlertThread(ThreadHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtAlertThread';
  1203. function NtAlertResumeThread(ThreadHandle: HANDLE; PreviousSuspendCount: PULONG): NTSTATUS; stdcall; external ntdll name 'NtAlertResumeThread';
  1204. function NtRegisterThreadTerminatePort(PortHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtRegisterThreadTerminatePort';
  1205. function NtImpersonateThread(ThreadHandle: HANDLE; TargetThreadHandle: HANDLE; SecurityQos: PSECURITY_QUALITY_OF_SERVICE): NTSTATUS; stdcall; external ntdll name 'NtImpersonateThread';
  1206. function NtImpersonateAnonymousToken(ThreadHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtImpersonateAnonymousToken';
  1207. function NtCreateProcess(ProcessHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; InheritFromProcessHandle: HANDLE; InheritHandles: ByteBool; SectionHandle: HANDLE; DebugPort: HANDLE; ExceptionPort: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtCreateProcess';
  1208. function NtOpenProcess(ProcessHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; ClientId: PCLIENT_ID): NTSTATUS; stdcall; external ntdll name 'NtOpenProcess';
  1209. function NtTerminateProcess(ProcessHandle: HANDLE; ExitStatus: NTSTATUS): NTSTATUS; stdcall; external ntdll name 'NtTerminateProcess';
  1210. function NtQueryInformationProcess(ProcessHandle: HANDLE; ProcessInformationClass: PROCESSINFOCLASS; ProcessInformation: PVOID; ProcessInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryInformationProcess';
  1211. function NtSetInformationProcess(ProcessHandle: HANDLE; ProcessInformationClass: PROCESSINFOCLASS; ProcessInformation: PVOID; ProcessInformationLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetInformationProcess';
  1212. type
  1213. _PROCESS_PRIORITY_CLASS = record // Information Class 18
  1214. Foreground: ByteBool;
  1215. PriorityClass: UCHAR;
  1216. end;
  1217. PROCESS_PRIORITY_CLASS = _PROCESS_PRIORITY_CLASS;
  1218. PPROCESS_PRIORITY_CLASS = ^PROCESS_PRIORITY_CLASS;
  1219. _PROCESS_PARAMETERS = record
  1220. AllocationSize: ULONG;
  1221. Size: ULONG;
  1222. Flags: ULONG;
  1223. Zero: ULONG;
  1224. Console: LONG;
  1225. ProcessGroup: ULONG;
  1226. hStdInput: HANDLE;
  1227. hStdOutput: HANDLE;
  1228. hStdError: HANDLE;
  1229. CurrentDirectoryName: UNICODE_STRING;
  1230. CurrentDirectoryHandle: HANDLE;
  1231. DllPath: UNICODE_STRING;
  1232. ImageFile: UNICODE_STRING;
  1233. CommandLine: UNICODE_STRING;
  1234. Environment: PWSTR;
  1235. dwX: ULONG;
  1236. dwY: ULONG;
  1237. dwXSize: ULONG;
  1238. dwYSize: ULONG;
  1239. dwXCountChars: ULONG;
  1240. dwYCountChars: ULONG;
  1241. dwFillAttribute: ULONG;
  1242. dwFlags: ULONG;
  1243. wShowWindow: ULONG;
  1244. WindowTitle: UNICODE_STRING;
  1245. Desktop: UNICODE_STRING;
  1246. Reserved: UNICODE_STRING;
  1247. Reserved2: UNICODE_STRING;
  1248. end;
  1249. PROCESS_PARAMETERS = _PROCESS_PARAMETERS;
  1250. PPROCESS_PARAMETERS = ^PROCESS_PARAMETERS;
  1251. PPPROCESS_PARAMETERS = ^PPROCESS_PARAMETERS;
  1252. function RtlCreateProcessParameters(ProcessParameters: PPPROCESS_PARAMETERS; ImageFile: PUNICODE_STRING; DllPath: PUNICODE_STRING; CurrentDirectory: PUNICODE_STRING; CommandLine: PUNICODE_STRING; CreationFlags: ULONG; WindowTitle: PUNICODE_STRING; Desktop: PUNICODE_STRING; Reserved: PUNICODE_STRING; Reserved2: PUNICODE_STRING): NTSTATUS; stdcall; external ntdll name 'RtlCreateProcessParameters';
  1253. function RtlDestroyProcessParameters(ProcessParameters: PPROCESS_PARAMETERS): NTSTATUS; stdcall; external ntdll name 'RtlDestroyProcessParameters';
  1254. type
  1255. _DEBUG_BUFFER = record
  1256. SectionHandle: HANDLE;
  1257. SectionBase: PVOID;
  1258. RemoteSectionBase: PVOID;
  1259. SectionBaseDelta: ULONG;
  1260. EventPairHandle: HANDLE;
  1261. Unknown: array [0..1] of ULONG;
  1262. RemoteThreadHandle: HANDLE;
  1263. InfoClassMask: ULONG;
  1264. SizeOfInfo: ULONG;
  1265. AllocatedSize: ULONG;
  1266. SectionSize: ULONG;
  1267. ModuleInformation: PVOID;
  1268. BackTraceInformation: PVOID;
  1269. HeapInformation: PVOID;
  1270. LockInformation: PVOID;
  1271. Reserved: array [0..7] of PVOID;
  1272. end;
  1273. DEBUG_BUFFER = _DEBUG_BUFFER;
  1274. PDEBUG_BUFFER = ^DEBUG_BUFFER;
  1275. const
  1276. PDI_MODULES = $01;
  1277. PDI_BACKTRACE = $02;
  1278. PDI_HEAPS = $04;
  1279. PDI_HEAP_TAGS = $08;
  1280. PDI_HEAP_BLOCKS = $10;
  1281. PDI_LOCKS = $20;
  1282. type
  1283. _DEBUG_MODULE_INFORMATION = record // c.f. SYSTEM_MODULE_INFORMATION
  1284. Reserved: array [0..1] of ULONG;
  1285. Base: ULONG;
  1286. Size: ULONG;
  1287. Flags: ULONG;
  1288. Index: USHORT;
  1289. Unknown: USHORT;
  1290. LoadCount: USHORT;
  1291. ModuleNameOffset: USHORT;
  1292. ImageName: array [0..255] of CHAR;
  1293. end;
  1294. DEBUG_MODULE_INFORMATION = _DEBUG_MODULE_INFORMATION;
  1295. PDEBUG_MODULE_INFORMATION = ^DEBUG_MODULE_INFORMATION;
  1296. _DEBUG_HEAP_INFORMATION = record
  1297. Base: ULONG;
  1298. Flags: ULONG;
  1299. Granularity: USHORT;
  1300. Unknown: USHORT;
  1301. Allocated: ULONG;
  1302. Committed: ULONG;
  1303. TagCount: ULONG;
  1304. BlockCount: ULONG;
  1305. Reserved: array [0..6] of ULONG;
  1306. Tags: PVOID;
  1307. Blocks: PVOID;
  1308. end;
  1309. DEBUG_HEAP_INFORMATION = _DEBUG_HEAP_INFORMATION;
  1310. PDEBUG_HEAP_INFORMATION = ^DEBUG_HEAP_INFORMATION;
  1311. _DEBUG_LOCK_INFORMATION = record // c.f. SYSTEM_LOCK_INFORMATION
  1312. Address: PVOID;
  1313. Type_: USHORT;
  1314. CreatorBackTraceIndex: USHORT;
  1315. OwnerThreadId: ULONG;
  1316. ActiveCount: ULONG;
  1317. ContentionCount: ULONG;
  1318. EntryCount: ULONG;
  1319. RecursionCount: ULONG;
  1320. NumberOfSharedWaiters: ULONG;
  1321. NumberOfExclusiveWaiters: ULONG;
  1322. end;
  1323. DEBUG_LOCK_INFORMATION = _DEBUG_LOCK_INFORMATION;
  1324. PDEBUG_LOCK_INFORMATION = ^DEBUG_LOCK_INFORMATION;
  1325. function RtlCreateQueryDebugBuffer(Size: ULONG; EventPair: ByteBool): PDEBUG_BUFFER; stdcall; external ntdll name 'RtlCreateQueryDebugBuffer';
  1326. function RtlQueryProcessDebugInformation(ProcessId: ULONG; DebugInfoClassMask: ULONG; DebugBuffer: PDEBUG_BUFFER): NTSTATUS; stdcall; external ntdll name 'RtlQueryProcessDebugInformation';
  1327. function RtlDestroyQueryDebugBuffer(DebugBuffer: PDEBUG_BUFFER): NTSTATUS; stdcall; external ntdll name 'RtlDestroyQueryDebugBuffer';
  1328. function NtCreateJobObject(JobHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtCreateJobObject';
  1329. function NtOpenJobObject(JobHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenJobObject';
  1330. function NtTerminateJobObject(JobHandle: HANDLE; ExitStatus: NTSTATUS): NTSTATUS; stdcall; external ntdll name 'NtTerminateJobObject';
  1331. function NtAssignProcessToJobObject(JobHandle: HANDLE; ProcessHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtAssignProcessToJobObject';
  1332. function NtQueryInformationJobObject(JobHandle: HANDLE; JobInformationClass: JOBOBJECTINFOCLASS; JobInformation: PVOID; JobInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryInformationJobObject';
  1333. function NtSetInformationJobObject(JobHandle: HANDLE; JobInformationClass: JOBOBJECTINFOCLASS; JobInformation: PVOID; JobInformationLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetInformationJobObject';
  1334. function NtCreateToken(TokenHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; Type_: TOKEN_TYPE; AuthenticationId: PLUID; ExpirationTime: PLARGE_INTEGER; User: PTOKEN_USER; Groups: PTOKEN_GROUPS; Privileges: PTOKEN_PRIVILEGES; Owner: PTOKEN_OWNER; PrimaryGroup: PTOKEN_PRIMARY_GROUP; DefaultDacl: PTOKEN_DEFAULT_DACL; Source: PTOKEN_SOURCE): NTSTATUS; stdcall; external ntdll name 'NtCreateToken';
  1335. function NtOpenProcessToken(ProcessHandle: HANDLE; DesiredAccess: ACCESS_MASK; TokenHandle: PHANDLE): NTSTATUS; stdcall; external ntdll name 'NtOpenProcessToken';
  1336. function NtOpenThreadToken(ThreadHandle: HANDLE; DesiredAccess: ACCESS_MASK; OpenAsSelf: ByteBool; TokenHandle: PHANDLE): NTSTATUS; stdcall; external ntdll name 'NtOpenThreadToken';
  1337. function NtDuplicateToken(ExistingTokenHandle: HANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; EffectiveOnly: ByteBool; TokenType: TOKEN_TYPE; NewTokenHandle: PHANDLE): NTSTATUS; stdcall; external ntdll name 'NtDuplicateToken';
  1338. function NtFilterToken(ExistingTokenHandle: HANDLE; Flags: ULONG; SidsToDisable: PTOKEN_GROUPS; PrivilegesToDelete: PTOKEN_PRIVILEGES; SidsToRestricted: PTOKEN_GROUPS; NewTokenHandle: PHANDLE): NTSTATUS; stdcall; external ntdll name 'NtFilterToken';
  1339. function NtAdjustPrivilegesToken(TokenHandle: HANDLE; DisableAllPrivileges: ByteBool; NewState: PTOKEN_PRIVILEGES; BufferLength: ULONG; PreviousState: PTOKEN_PRIVILEGES; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtAdjustPrivilegesToken';
  1340. function NtAdjustGroupsToken(TokenHandle: HANDLE; ResetToDefault: ByteBool; NewState: PTOKEN_GROUPS; BufferLength: ULONG; PreviousState: PTOKEN_GROUPS; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtAdjustGroupsToken';
  1341. function NtQueryInformationToken(TokenHandle: HANDLE; TokenInformationClass: TOKEN_INFORMATION_CLASS; TokenInformation: PVOID; TokenInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryInformationToken';
  1342. function NtSetInformationToken(TokenHandle: HANDLE; TokenInformationClass: TOKEN_INFORMATION_CLASS; TokenInformation: PVOID; TokenInformationLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetInformationToken';
  1343. function NtWaitForSingleObject(Handle: HANDLE; Alertable: ByteBool; Timeout: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtWaitForSingleObject';
  1344. function NtSignalAndWaitForSingleObject(HandleToSignal: HANDLE; HandleToWait: HANDLE; Alertable: ByteBool; Timeout: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtSignalAndWaitForSingleObject';
  1345. function NtWaitForMultipleObjects(HandleCount: ULONG; Handles: PHANDLE; WaitType: WAIT_TYPE; Alertable: ByteBool; Timeout: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtWaitForMultipleObjects';
  1346. function NtCreateTimer(TimerHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; TimerType: TIMER_TYPE): NTSTATUS; stdcall; external ntdll name 'NtCreateTimer';
  1347. function NtOpenTimer(TimerHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenTimer';
  1348. function NtCancelTimer(TimerHandle: HANDLE; PreviousState: PBOOLEAN): NTSTATUS; stdcall; external ntdll name 'NtCancelTimer';
  1349. type
  1350. PTIMER_APC_ROUTINE = procedure(TimerContext: PVOID; TimerLowValue: ULONG; TimerHighValue: LONG); stdcall;
  1351. function NtSetTimer(TimerHandle: HANDLE; DueTime: PLARGE_INTEGER; TimerApcRoutine: PTIMER_APC_ROUTINE; TimerContext: PVOID; Resume: ByteBool; Period: LONG; PreviousState: PBOOLEAN): NTSTATUS; stdcall; external ntdll name 'NtSetTimer';
  1352. type
  1353. _TIMER_INFORMATION_CLASS = (TimerBasicInformation);
  1354. TIMER_INFORMATION_CLASS = _TIMER_INFORMATION_CLASS;
  1355. function NtQueryTimer(TimerHandle: HANDLE; TimerInformationClass: TIMER_INFORMATION_CLASS; TimerInformation: PVOID; TimerInformationLength: ULONG; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryTimer';
  1356. type
  1357. _TIMER_BASIC_INFORMATION = record
  1358. TimeRemaining: LARGE_INTEGER;
  1359. SignalState: ByteBool;
  1360. end;
  1361. TIMER_BASIC_INFORMATION = _TIMER_BASIC_INFORMATION;
  1362. PTIMER_BASIC_INFORMATION = ^TIMER_BASIC_INFORMATION;
  1363. function NtCreateEvent(EventHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; EventType: EVENT_TYPE; InitialState: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtCreateEvent';
  1364. function NtOpenEvent(EventHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenEvent';
  1365. function NtSetEvent(EventHandle: HANDLE; PreviousState: PULONG): NTSTATUS; stdcall; external ntdll name 'NtSetEvent';
  1366. function NtPulseEvent(EventHandle: HANDLE; PreviousState: PULONG): NTSTATUS; stdcall; external ntdll name 'NtPulseEvent';
  1367. function NtResetEvent(EventHandle: HANDLE; PreviousState: PULONG): NTSTATUS; stdcall; external ntdll name 'NtResetEvent';
  1368. function NtClearEvent(EventHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtClearEvent';
  1369. type
  1370. _EVENT_INFORMATION_CLASS = (EventBasicInformation);
  1371. EVENT_INFORMATION_CLASS = _EVENT_INFORMATION_CLASS;
  1372. function NtQueryEvent(EventHandle: HANDLE; EventInformationClass: EVENT_INFORMATION_CLASS; EventInformation: PVOID; EventInformationLength: ULONG; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryEvent';
  1373. type
  1374. _EVENT_BASIC_INFORMATION = record
  1375. EventType: EVENT_TYPE;
  1376. SignalState: LONG;
  1377. end;
  1378. EVENT_BASIC_INFORMATION = _EVENT_BASIC_INFORMATION;
  1379. PEVENT_BASIC_INFORMATION = ^EVENT_BASIC_INFORMATION;
  1380. function NtCreateSemaphore(SemaphoreHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; InitialCount: LONG; MaximumCount: LONG): NTSTATUS; stdcall; external ntdll name 'NtCreateSemaphore';
  1381. function NtOpenSemaphore(SemaphoreHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenSemaphore';
  1382. function NtReleaseSemaphore(SemaphoreHandle: HANDLE; ReleaseCount: LONG; PreviousCount: PLONG): NTSTATUS; stdcall; external ntdll name 'NtReleaseSemaphore';
  1383. type
  1384. _SEMAPHORE_INFORMATION_CLASS = (SemaphoreBasicInformation);
  1385. SEMAPHORE_INFORMATION_CLASS = _SEMAPHORE_INFORMATION_CLASS;
  1386. function NtQuerySemaphore(SemaphoreHandle: HANDLE; SemaphoreInformationClass: SEMAPHORE_INFORMATION_CLASS; SemaphoreInformation: PVOID; SemaphoreInformationLength: ULONG; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQuerySemaphore';
  1387. type
  1388. _SEMAPHORE_BASIC_INFORMATION = record
  1389. CurrentCount: LONG;
  1390. MaximumCount: LONG;
  1391. end;
  1392. SEMAPHORE_BASIC_INFORMATION = _SEMAPHORE_BASIC_INFORMATION;
  1393. PSEMAPHORE_BASIC_INFORMATION = ^SEMAPHORE_BASIC_INFORMATION;
  1394. function NtCreateMutant(MutantHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; InitialOwner: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtCreateMutant';
  1395. function NtOpenMutant(MutantHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenMutant';
  1396. function NtReleaseMutant(MutantHandle: HANDLE; PreviousState: PULONG): NTSTATUS; stdcall; external ntdll name 'NtReleaseMutant';
  1397. type
  1398. _MUTANT_INFORMATION_CLASS = (MutantBasicInformation);
  1399. MUTANT_INFORMATION_CLASS = _MUTANT_INFORMATION_CLASS;
  1400. function NtQueryMutant(MutantHandle: HANDLE; MutantInformationClass: MUTANT_INFORMATION_CLASS; MutantInformation: PVOID; MutantInformationLength: ULONG; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryMutant';
  1401. type
  1402. _MUTANT_BASIC_INFORMATION = record
  1403. SignalState: LONG;
  1404. Owned: ByteBool;
  1405. Abandoned: ByteBool;
  1406. end;
  1407. MUTANT_BASIC_INFORMATION = _MUTANT_BASIC_INFORMATION;
  1408. PMUTANT_BASIC_INFORMATION = ^MUTANT_BASIC_INFORMATION;
  1409. function NtCreateIoCompletion(IoCompletionHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; NumberOfConcurrentThreads: ULONG): NTSTATUS; stdcall; external ntdll name 'NtCreateIoCompletion';
  1410. function NtOpenIoCompletion(IoCompletionHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenIoCompletion';
  1411. function NtSetIoCompletion(IoCompletionHandle: HANDLE; CompletionKey: ULONG; CompletionValue: ULONG; Status: NTSTATUS; Information: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetIoCompletion';
  1412. function NtRemoveIoCompletion(IoCompletionHandle: HANDLE; CompletionKey: PULONG; CompletionValue: PULONG; IoStatusBlock: PIO_STATUS_BLOCK; Timeout: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtRemoveIoCompletion';
  1413. type
  1414. _IO_COMPLETION_INFORMATION_CLASS = (IoCompletionBasicInformation);
  1415. IO_COMPLETION_INFORMATION_CLASS = _IO_COMPLETION_INFORMATION_CLASS;
  1416. function NtQueryIoCompletion(IoCompletionHandle: HANDLE; IoCompletionInformationClass: IO_COMPLETION_INFORMATION_CLASS; IoCompletionInformation: PVOID; IoCompletionInformationLength: ULONG; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryIoCompletion';
  1417. type
  1418. _IO_COMPLETION_BASIC_INFORMATION = record
  1419. SignalState: LONG;
  1420. end;
  1421. IO_COMPLETION_BASIC_INFORMATION = _IO_COMPLETION_BASIC_INFORMATION;
  1422. PIO_COMPLETION_BASIC_INFORMATION = ^IO_COMPLETION_BASIC_INFORMATION;
  1423. function NtCreateEventPair(EventPairHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtCreateEventPair';
  1424. function NtOpenEventPair(EventPairHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenEventPair';
  1425. function NtWaitLowEventPair(EventPairHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtWaitLowEventPair';
  1426. function NtWaitHighEventPair(EventPairHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtWaitHighEventPair';
  1427. function NtSetLowWaitHighEventPair(EventPairHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtSetLowWaitHighEventPair';
  1428. function NtSetHighWaitLowEventPair(EventPairHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtSetHighWaitLowEventPair';
  1429. function NtSetLowEventPair(EventPairHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtSetLowEventPair';
  1430. function NtSetHighEventPair(EventPairHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtSetHighEventPair';
  1431. function NtQuerySystemTime(CurrentTime: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtQuerySystemTime';
  1432. function NtSetSystemTime(NewTime: PLARGE_INTEGER; OldTime: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtSetSystemTime';
  1433. function NtQueryPerformanceCounter(PerformanceCount: PLARGE_INTEGER; PerformanceFrequency: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtQueryPerformanceCounter';
  1434. function NtSetTimerResolution(RequestedResolution: ULONG; Set_: ByteBool; ActualResolution: PULONG): NTSTATUS; stdcall; external ntdll name 'NtSetTimerResolution';
  1435. function NtQueryTimerResolution(CoarsestResolution: PULONG; FinestResolution: PULONG; ActualResolution: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryTimerResolution';
  1436. function NtDelayExecution(Alertable: ByteBool; Interval: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtDelayExecution';
  1437. function NtYieldExecution: NTSTATUS; stdcall; external ntdll name 'NtYieldExecution';
  1438. function NtGetTickCount: ULONG; stdcall; external ntdll name 'NtGetTickCount';
  1439. function NtCreateProfile(ProfileHandle: PHANDLE; ProcessHandle: HANDLE; Base: PVOID; Size: ULONG; BucketShift: ULONG; Buffer: PULONG; BufferLength: ULONG; Source: KPROFILE_SOURCE; ProcessorMask: ULONG): NTSTATUS; stdcall; external ntdll name 'NtCreateProfile';
  1440. function NtSetIntervalProfile(Interval: ULONG; Source: KPROFILE_SOURCE): NTSTATUS; stdcall; external ntdll name 'NtSetIntervalProfile';
  1441. function NtQueryIntervalProfile(Source: KPROFILE_SOURCE; Interval: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryIntervalProfile';
  1442. function NtStartProfile(ProfileHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtStartProfile';
  1443. function NtStopProfile(ProfileHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtStopProfile';
  1444. type
  1445. _PORT_MESSAGE = record
  1446. DataSize: USHORT;
  1447. MessageSize: USHORT;
  1448. MessageType: USHORT;
  1449. VirtualRangesOffset: USHORT;
  1450. ClientId: CLIENT_ID;
  1451. MessageId: ULONG;
  1452. SectionSize: ULONG;
  1453. // UCHAR Data[];
  1454. end;
  1455. PORT_MESSAGE = _PORT_MESSAGE;
  1456. PPORT_MESSAGE = ^PORT_MESSAGE;
  1457. _LPC_TYPE = (
  1458. LPC_NEW_MESSAGE, // A new message
  1459. LPC_REQUEST, // A request message
  1460. LPC_REPLY, // A reply to a request message
  1461. LPC_DATAGRAM, //
  1462. LPC_LOST_REPLY, //
  1463. LPC_PORT_CLOSED, // Sent when port is deleted
  1464. LPC_CLIENT_DIED, // Messages to thread termination ports
  1465. LPC_EXCEPTION, // Messages to thread exception port
  1466. LPC_DEBUG_EVENT, // Messages to thread debug port
  1467. LPC_ERROR_EVENT, // Used by ZwRaiseHardError
  1468. LPC_CONNECTION_REQUEST); // Used by ZwConnectPort
  1469. LPC_TYPE = _LPC_TYPE;
  1470. _PORT_SECTION_WRITE = record
  1471. Length: ULONG;
  1472. SectionHandle: HANDLE;
  1473. SectionOffset: ULONG;
  1474. ViewSize: ULONG;
  1475. ViewBase: PVOID;
  1476. TargetViewBase: PVOID;
  1477. end;
  1478. PORT_SECTION_WRITE = _PORT_SECTION_WRITE;
  1479. PPORT_SECTION_WRITE = ^PORT_SECTION_WRITE;
  1480. _PORT_SECTION_READ = record
  1481. Length: ULONG;
  1482. ViewSize: ULONG;
  1483. ViewBase: ULONG;
  1484. end;
  1485. PORT_SECTION_READ = _PORT_SECTION_READ;
  1486. PPORT_SECTION_READ = ^PORT_SECTION_READ;
  1487. function NtCreatePort(PortHandle: PHANDLE; ObjectAttributes: POBJECT_ATTRIBUTES; MaxDataSize: ULONG; MaxMessageSize: ULONG; Reserved: ULONG): NTSTATUS; stdcall; external ntdll name 'NtCreatePort';
  1488. function NtCreateWaitablePort(PortHandle: PHANDLE; ObjectAttributes: POBJECT_ATTRIBUTES; MaxDataSize: ULONG; MaxMessageSize: ULONG; Reserved: ULONG): NTSTATUS; stdcall; external ntdll name 'NtCreateWaitablePort';
  1489. function NtConnectPort(PortHandle: PHANDLE; PortName: PUNICODE_STRING; SecurityQos: PSECURITY_QUALITY_OF_SERVICE; WriteSection: PPORT_SECTION_WRITE; ReadSection: PPORT_SECTION_READ; MaxMessageSize: PULONG; ConnectData: PVOID; ConnectDataLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtConnectPort';
  1490. function NtSecureConnectPort(PortHandle: PHANDLE; PortName: PUNICODE_STRING; SecurityQos: PSECURITY_QUALITY_OF_SERVICE; WriteSection: PPORT_SECTION_WRITE; ServerSid: PSID; ReadSection: PPORT_SECTION_READ; MaxMessageSize: PULONG; ConnectData: PVOID; ConnectDataLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtSecureConnectPort';
  1491. function NtListenPort(PortHandle: HANDLE; Message: PPORT_MESSAGE): NTSTATUS; stdcall; external ntdll name 'NtListenPort';
  1492. function NtAcceptConnectPort(PortHandle: PHANDLE; PortIdentifier: ULONG; Message: PPORT_MESSAGE; Accept: ByteBool; WriteSection: PPORT_SECTION_WRITE; ReadSection: PPORT_SECTION_READ): NTSTATUS; stdcall; external ntdll name 'NtAcceptConnectPort';
  1493. function NtCompleteConnectPort(PortHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtCompleteConnectPort';
  1494. function NtRequestPort(PortHandle: HANDLE; RequestMessage: PPORT_MESSAGE): NTSTATUS; stdcall; external ntdll name 'NtRequestPort';
  1495. function NtRequestWaitReplyPort(PortHandle: HANDLE; RequestMessage: PPORT_MESSAGE; ReplyMessage: PPORT_MESSAGE): NTSTATUS; stdcall; external ntdll name 'NtRequestWaitReplyPort';
  1496. function NtReplyPort(PortHandle: HANDLE; ReplyMessage: PPORT_MESSAGE): NTSTATUS; stdcall; external ntdll name 'NtReplyPort';
  1497. function NtReplyWaitReplyPort(PortHandle: HANDLE; ReplyMessage: PPORT_MESSAGE): NTSTATUS; stdcall; external ntdll name 'NtReplyWaitReplyPort';
  1498. function NtReplyWaitReceivePort(PortHandle: HANDLE; PortIdentifier: PULONG; ReplyMessage: PPORT_MESSAGE; Message: PPORT_MESSAGE): NTSTATUS; stdcall; external ntdll name 'NtReplyWaitReceivePort';
  1499. function NtReplyWaitReceivePortEx(PortHandle: HANDLE; PortIdentifier: PULONG; ReplyMessage: PPORT_MESSAGE; Message: PPORT_MESSAGE; Timeout: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtReplyWaitReceivePortEx';
  1500. function NtReadRequestData(PortHandle: HANDLE; Message: PPORT_MESSAGE; Index: ULONG; Buffer: PVOID; BufferLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtReadRequestData';
  1501. function NtWriteRequestData(PortHandle: HANDLE; Message: PPORT_MESSAGE; Index: ULONG; Buffer: PVOID; BufferLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtWriteRequestData';
  1502. type
  1503. _PORT_INFORMATION_CLASS = (PortBasicInformation);
  1504. PORT_INFORMATION_CLASS = _PORT_INFORMATION_CLASS;
  1505. function NtQueryInformationPort(PortHandle: HANDLE; PortInformationClass: PORT_INFORMATION_CLASS; PortInformation: PVOID; PortInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryInformationPort';
  1506. type
  1507. _PORT_BASIC_INFORMATION = record
  1508. end;
  1509. PORT_BASIC_INFORMATION = _PORT_BASIC_INFORMATION;
  1510. PPORT_BASIC_INFORMATION = ^PORT_BASIC_INFORMATION;
  1511. function NtImpersonateClientOfPort(PortHandle: HANDLE; Message: PPORT_MESSAGE): NTSTATUS; stdcall; external ntdll name 'NtImpersonateClientOfPort';
  1512. function NtCreateFile(FileHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; IoStatusBlock: PIO_STATUS_BLOCK; AllocationSize: PLARGE_INTEGER; FileAttributes: ULONG; ShareAccess: ULONG; CreateDisposition: ULONG; CreateOptions: ULONG; EaBuffer: PVOID; EaLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtCreateFile';
  1513. function NtOpenFile(FileHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; IoStatusBlock: PIO_STATUS_BLOCK; ShareAccess: ULONG; OpenOptions: ULONG): NTSTATUS; stdcall; external ntdll name 'NtOpenFile';
  1514. function NtDeleteFile(ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtDeleteFile';
  1515. function NtFlushBuffersFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK): NTSTATUS; stdcall; external ntdll name 'NtFlushBuffersFile';
  1516. function NtCancelIoFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK): NTSTATUS; stdcall; external ntdll name 'NtCancelIoFile';
  1517. function NtReadFile(FileHandle: HANDLE; Event: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; Buffer: PVOID; Length: ULONG; ByteOffset: PLARGE_INTEGER; Key: PULONG): NTSTATUS; stdcall; external ntdll name 'NtReadFile';
  1518. function NtWriteFile(FileHandle: HANDLE; Event: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; Buffer: PVOID; Length: ULONG; ByteOffset: PLARGE_INTEGER; Key: PULONG): NTSTATUS; stdcall; external ntdll name 'NtWriteFile';
  1519. function NtReadFileScatter(FileHandle: HANDLE; Event: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; Buffer: PFILE_SEGMENT_ELEMENT; Length: ULONG; ByteOffset: PLARGE_INTEGER; Key: PULONG): NTSTATUS; stdcall; external ntdll name 'NtReadFileScatter';
  1520. function NtWriteFileGather(FileHandle: HANDLE; Event: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; Buffer: PFILE_SEGMENT_ELEMENT; Length: ULONG; ByteOffset: PLARGE_INTEGER; Key: PULONG): NTSTATUS; stdcall; external ntdll name 'NtWriteFileGather';
  1521. function NtLockFile(FileHandle: HANDLE; Event: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; LockOffset: PULARGE_INTEGER; LockLength: PULARGE_INTEGER; Key: ULONG; FailImmediately: ByteBool; ExclusiveLock: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtLockFile';
  1522. function NtUnlockFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK; LockOffset: PULARGE_INTEGER; LockLength: PULARGE_INTEGER; Key: ULONG): NTSTATUS; stdcall; external ntdll name 'NtUnlockFile';
  1523. function NtDeviceIoControlFile(FileHandle: HANDLE; Event: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; IoControlCode: ULONG; InputBuffer: PVOID; InputBufferLength: ULONG; OutputBuffer: PVOID; OutputBufferLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtDeviceIoControlFile';
  1524. function NtFsControlFile(FileHandle: HANDLE; Event: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; FsControlCode: ULONG; InputBuffer: PVOID; InputBufferLength: ULONG; OutputBuffer: PVOID; OutputBufferLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtFsControlFile';
  1525. function NtNotifyChangeDirectoryFile(FileHandle: HANDLE; Event: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; Buffer: PFILE_NOTIFY_INFORMATION; BufferLength: ULONG; NotifyFilter: ULONG; WatchSubtree: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtNotifyChangeDirectoryFile';
  1526. type
  1527. _FILE_GET_EA_INFORMATION = record
  1528. NextEntryOffset: ULONG;
  1529. EaNameLength: UCHAR;
  1530. EaName: array [0..0] of CHAR;
  1531. end;
  1532. FILE_GET_EA_INFORMATION = _FILE_GET_EA_INFORMATION;
  1533. PFILE_GET_EA_INFORMATION = ^FILE_GET_EA_INFORMATION;
  1534. function NtQueryEaFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK; Buffer: PFILE_FULL_EA_INFORMATION; BufferLength: ULONG; ReturnSingleEntry: ByteBool; EaList: PFILE_GET_EA_INFORMATION; EaListLength: ULONG; EaIndex: PULONG; RestartScan: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtQueryEaFile';
  1535. function NtSetEaFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK; Buffer: PFILE_FULL_EA_INFORMATION; BufferLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetEaFile';
  1536. function NtCreateNamedPipeFile(FileHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; IoStatusBlock: PIO_STATUS_BLOCK; ShareAccess: ULONG; CreateDisposition: ULONG; CreateOptions: ULONG; TypeMessage: ByteBool; ReadmodeMessage: ByteBool; Nonblocking: ByteBool; MaxInstances: ULONG; InBufferSize: ULONG; OutBufferSize: ULONG; DefaultTimeout: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtCreateNamedPipeFile';
  1537. function NtCreateMailslotFile(FileHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; IoStatusBlock: PIO_STATUS_BLOCK; CreateOptions: ULONG; Unknown: ULONG; MaxMessageSize: ULONG; ReadTimeout: PLARGE_INTEGER): NTSTATUS; stdcall; external ntdll name 'NtCreateMailslotFile';
  1538. function NtQueryVolumeInformationFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK; VolumeInformation: PVOID; VolumeInformationLength: ULONG; VolumeInformationClass: FS_INFORMATION_CLASS): NTSTATUS; stdcall; external ntdll name 'NtQueryVolumeInformationFile';
  1539. function NtSetVolumeInformationFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK; Buffer: PVOID; BufferLength: ULONG; VolumeInformationClass: FS_INFORMATION_CLASS): NTSTATUS; stdcall; external ntdll name 'NtSetVolumeInformationFile';
  1540. type
  1541. _FILE_FS_VOLUME_INFORMATION = record
  1542. VolumeCreationTime: LARGE_INTEGER;
  1543. VolumeSerialNumber: ULONG;
  1544. VolumeLabelLength: ULONG;
  1545. Unknown: UCHAR;
  1546. VolumeLabel: array [0..0] of WCHAR;
  1547. end;
  1548. FILE_FS_VOLUME_INFORMATION = _FILE_FS_VOLUME_INFORMATION;
  1549. PFILE_FS_VOLUME_INFORMATION = ^FILE_FS_VOLUME_INFORMATION;
  1550. _FILE_FS_LABEL_INFORMATION = record
  1551. VolumeLabelLength: ULONG;
  1552. VolumeLabel: WCHAR;
  1553. end;
  1554. FILE_FS_LABEL_INFORMATION = _FILE_FS_LABEL_INFORMATION;
  1555. PFILE_FS_LABEL_INFORMATION = ^FILE_FS_LABEL_INFORMATION;
  1556. _FILE_FS_SIZE_INFORMATION = record
  1557. TotalAllocationUnits: LARGE_INTEGER;
  1558. AvailableAllocationUnits: LARGE_INTEGER;
  1559. SectorsPerAllocationUnit: ULONG;
  1560. BytesPerSector: ULONG;
  1561. end;
  1562. FILE_FS_SIZE_INFORMATION = _FILE_FS_SIZE_INFORMATION;
  1563. PFILE_FS_SIZE_INFORMATION = ^FILE_FS_SIZE_INFORMATION;
  1564. _FILE_FS_ATTRIBUTE_INFORMATION = record
  1565. FileSystemFlags: ULONG;
  1566. MaximumComponentNameLength: ULONG;
  1567. FileSystemNameLength: ULONG;
  1568. FileSystemName: array [0..0] of WCHAR
  1569. end;
  1570. FILE_FS_ATTRIBUTE_INFORMATION = _FILE_FS_ATTRIBUTE_INFORMATION;
  1571. PFILE_FS_ATTRIBUTE_INFORMATION = ^FILE_FS_ATTRIBUTE_INFORMATION;
  1572. _FILE_FS_CONTROL_INFORMATION = record
  1573. Reserved: array [0..2] of LARGE_INTEGER;
  1574. DefaultQuotaThreshold: LARGE_INTEGER;
  1575. DefaultQuotaLimit: LARGE_INTEGER;
  1576. QuotaFlags: ULONG;
  1577. end;
  1578. FILE_FS_CONTROL_INFORMATION = _FILE_FS_CONTROL_INFORMATION;
  1579. PFILE_FS_CONTROL_INFORMATION = ^FILE_FS_CONTROL_INFORMATION;
  1580. _FILE_FS_FULL_SIZE_INFORMATION = record
  1581. TotalQuotaAllocationUnits: LARGE_INTEGER;
  1582. AvailableQuotaAllocationUnits: LARGE_INTEGER;
  1583. AvailableAllocationUnits: LARGE_INTEGER;
  1584. SectorsPerAllocationUnit: ULONG;
  1585. BytesPerSector: ULONG;
  1586. end;
  1587. FILE_FS_FULL_SIZE_INFORMATION = _FILE_FS_FULL_SIZE_INFORMATION;
  1588. PFILE_FS_FULL_SIZE_INFORMATION = ^FILE_FS_FULL_SIZE_INFORMATION;
  1589. _FILE_FS_OBJECT_ID_INFORMATION = record
  1590. VolumeObjectId: UUID;
  1591. VolumeObjectIdExtendedInfo: array [0..11] of ULONG;
  1592. end;
  1593. FILE_FS_OBJECT_ID_INFORMATION = _FILE_FS_OBJECT_ID_INFORMATION;
  1594. PFILE_FS_OBJECT_ID_INFORMATION = ^FILE_FS_OBJECT_ID_INFORMATION;
  1595. _FILE_USER_QUOTA_INFORMATION = record
  1596. NextEntryOffset: ULONG;
  1597. SidLength: ULONG;
  1598. ChangeTime: LARGE_INTEGER;
  1599. QuotaUsed: LARGE_INTEGER;
  1600. QuotaThreshold: LARGE_INTEGER;
  1601. QuotaLimit: LARGE_INTEGER;
  1602. Sid: array [0..0] of SID;
  1603. end;
  1604. FILE_USER_QUOTA_INFORMATION = _FILE_USER_QUOTA_INFORMATION;
  1605. PFILE_USER_QUOTA_INFORMATION = ^FILE_USER_QUOTA_INFORMATION;
  1606. _FILE_QUOTA_LIST_INFORMATION = record
  1607. NextEntryOffset: ULONG;
  1608. SidLength: ULONG;
  1609. Sid: array [0..0] of SID;
  1610. end;
  1611. FILE_QUOTA_LIST_INFORMATION = _FILE_QUOTA_LIST_INFORMATION;
  1612. PFILE_QUOTA_LIST_INFORMATION = ^FILE_QUOTA_LIST_INFORMATION;
  1613. function NtQueryQuotaInformationFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK; Buffer: PFILE_USER_QUOTA_INFORMATION; BufferLength: ULONG; ReturnSingleEntry: ByteBool; QuotaList: PFILE_QUOTA_LIST_INFORMATION; QuotaListLength: ULONG; ResumeSid: PSID; RestartScan: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtQueryQuotaInformationFile';
  1614. function NtSetQuotaInformationFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK; Buffer: PFILE_USER_QUOTA_INFORMATION; BufferLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetQuotaInformationFile';
  1615. function NtQueryAttributesFile(ObjectAttributes: POBJECT_ATTRIBUTES; FileInformation: PFILE_BASIC_INFORMATION): NTSTATUS; stdcall; external ntdll name 'NtQueryAttributesFile';
  1616. function NtQueryFullAttributesFile(ObjectAttributes: POBJECT_ATTRIBUTES; FileInformation: PFILE_NETWORK_OPEN_INFORMATION): NTSTATUS; stdcall; external ntdll name 'NtQueryFullAttributesFile';
  1617. function NtQueryInformationFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK; FileInformation: PVOID; FileInformationLength: ULONG; FileInformationClass: FILE_INFORMATION_CLASS): NTSTATUS; stdcall; external ntdll name 'NtQueryInformationFile';
  1618. function NtSetInformationFile(FileHandle: HANDLE; IoStatusBlock: PIO_STATUS_BLOCK; FileInformation: PVOID; FileInformationLength: ULONG; FileInformationClass: FILE_INFORMATION_CLASS): NTSTATUS; stdcall; external ntdll name 'NtSetInformationFile';
  1619. function NtQueryDirectoryFile(FileHandle: HANDLE; Event: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; FileInformation: PVOID; FileInformationLength: ULONG; FileInformationClass: FILE_INFORMATION_CLASS; ReturnSingleEntry: ByteBool; FileName: PUNICODE_STRING; RestartScan: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtQueryDirectoryFile';
  1620. type
  1621. _FILE_DIRECTORY_INFORMATION = record // Information Class 1
  1622. NextEntryOffset: ULONG;
  1623. Unknown: ULONG;
  1624. CreationTime: LARGE_INTEGER;
  1625. LastAccessTime: LARGE_INTEGER;
  1626. LastWriteTime: LARGE_INTEGER;
  1627. ChangeTime: LARGE_INTEGER;
  1628. EndOfFile: LARGE_INTEGER;
  1629. AllocationSize: LARGE_INTEGER;
  1630. FileAttributes: ULONG;
  1631. FileNameLength: ULONG;
  1632. FileName: array [0..0] of WCHAR
  1633. end;
  1634. FILE_DIRECTORY_INFORMATION = _FILE_DIRECTORY_INFORMATION;
  1635. PFILE_DIRECTORY_INFORMATION = ^FILE_DIRECTORY_INFORMATION;
  1636. _FILE_FULL_DIRECTORY_INFORMATION = record // Information Class 2
  1637. NextEntryOffset: ULONG;
  1638. Unknown: ULONG;
  1639. CreationTime: LARGE_INTEGER;
  1640. LastAccessTime: LARGE_INTEGER;
  1641. LastWriteTime: LARGE_INTEGER;
  1642. ChangeTime: LARGE_INTEGER;
  1643. EndOfFile: LARGE_INTEGER;
  1644. AllocationSize: LARGE_INTEGER;
  1645. FileAttributes: ULONG;
  1646. FileNameLength: ULONG;
  1647. EaInformationLength: ULONG;
  1648. FileName: array [0..0] of WCHAR
  1649. end;
  1650. FILE_FULL_DIRECTORY_INFORMATION = _FILE_FULL_DIRECTORY_INFORMATION;
  1651. PFILE_FULL_DIRECTORY_INFORMATION = ^FILE_FULL_DIRECTORY_INFORMATION;
  1652. _FILE_BOTH_DIRECTORY_INFORMATION = record // Information Class 3
  1653. NextEntryOffset: ULONG;
  1654. Unknown: ULONG;
  1655. CreationTime: LARGE_INTEGER;
  1656. LastAccessTime: LARGE_INTEGER;
  1657. LastWriteTime: LARGE_INTEGER;
  1658. ChangeTime: LARGE_INTEGER;
  1659. EndOfFile: LARGE_INTEGER;
  1660. AllocationSize: LARGE_INTEGER;
  1661. FileAttributes: ULONG;
  1662. FileNameLength: ULONG;
  1663. EaInformationLength: ULONG;
  1664. AlternateNameLength: UCHAR;
  1665. AlternateName: array [0..11] of WCHAR;
  1666. FileName: array [0..0] of WCHAR;
  1667. end;
  1668. FILE_BOTH_DIRECTORY_INFORMATION = _FILE_BOTH_DIRECTORY_INFORMATION;
  1669. PFILE_BOTH_DIRECTORY_INFORMATION = ^FILE_BOTH_DIRECTORY_INFORMATION;
  1670. _FILE_INTERNAL_INFORMATION = record // Information Class 6
  1671. FileId: LARGE_INTEGER;
  1672. end;
  1673. FILE_INTERNAL_INFORMATION = _FILE_INTERNAL_INFORMATION;
  1674. PFILE_INTERNAL_INFORMATION = ^FILE_INTERNAL_INFORMATION;
  1675. _FILE_EA_INFORMATION = record // Information Class 7
  1676. EaInformationLength: ULONG;
  1677. end;
  1678. FILE_EA_INFORMATION = _FILE_EA_INFORMATION;
  1679. PFILE_EA_INFORMATION = ^FILE_EA_INFORMATION;
  1680. _FILE_ACCESS_INFORMATION = record // Information Class 8
  1681. GrantedAccess: ACCESS_MASK;
  1682. end;
  1683. FILE_ACCESS_INFORMATION = _FILE_ACCESS_INFORMATION;
  1684. PFILE_ACCESS_INFORMATION = ^FILE_ACCESS_INFORMATION;
  1685. _FILE_NAME_INFORMATION = record // Information Classes 9 and 21
  1686. FileNameLength: ULONG;
  1687. FileName: array [0..0] of WCHAR;
  1688. end;
  1689. FILE_NAME_INFORMATION = _FILE_NAME_INFORMATION;
  1690. PFILE_NAME_INFORMATION = ^FILE_NAME_INFORMATION;
  1691. FILE_ALTERNATE_NAME_INFORMATION = _FILE_NAME_INFORMATION;
  1692. PFILE_ALTERNATE_NAME_INFORMATION = ^FILE_ALTERNATE_NAME_INFORMATION;
  1693. _FILE_LINK_RENAME_INFORMATION = record // Info Classes 10 and 11
  1694. ReplaceIfExists: ByteBool;
  1695. RootDirectory: HANDLE;
  1696. FileNameLength: ULONG;
  1697. FileName: array [0..0] of WCHAR;
  1698. end;
  1699. FILE_LINK_INFORMATION = _FILE_LINK_RENAME_INFORMATION;
  1700. PFILE_LINK_INFORMATION = ^FILE_LINK_INFORMATION;
  1701. FILE_RENAME_INFORMATION = _FILE_LINK_RENAME_INFORMATION;
  1702. PFILE_RENAME_INFORMATION= ^FILE_RENAME_INFORMATION;
  1703. _FILE_NAMES_INFORMATION = record // Information Class 12
  1704. NextEntryOffset: ULONG;
  1705. Unknown: ULONG;
  1706. FileNameLength: ULONG;
  1707. FileName: array [0..0] of WCHAR;
  1708. end;
  1709. FILE_NAMES_INFORMATION = _FILE_NAMES_INFORMATION;
  1710. PFILE_NAMES_INFORMATION = ^FILE_NAMES_INFORMATION;
  1711. _FILE_MODE_INFORMATION = record // Information Class 16
  1712. Mode: ULONG;
  1713. end;
  1714. FILE_MODE_INFORMATION = _FILE_MODE_INFORMATION;
  1715. PFILE_MODE_INFORMATION = ^FILE_MODE_INFORMATION;
  1716. _FILE_ALL_INFORMATION = record // Information Class 18
  1717. BasicInformation: FILE_BASIC_INFORMATION;
  1718. StandardInformation: FILE_STANDARD_INFORMATION;
  1719. InternalInformation: FILE_INTERNAL_INFORMATION;
  1720. EaInformation: FILE_EA_INFORMATION;
  1721. AccessInformation: FILE_ACCESS_INFORMATION;
  1722. PositionInformation: FILE_POSITION_INFORMATION;
  1723. ModeInformation: FILE_MODE_INFORMATION;
  1724. AlignmentInformation: FILE_ALIGNMENT_INFORMATION;
  1725. NameInformation: FILE_NAME_INFORMATION;
  1726. end;
  1727. FILE_ALL_INFORMATION = _FILE_ALL_INFORMATION;
  1728. PFILE_ALL_INFORMATION = ^FILE_ALL_INFORMATION;
  1729. _FILE_ALLOCATION_INFORMATION = record // Information Class 19
  1730. AllocationSize: LARGE_INTEGER;
  1731. end;
  1732. FILE_ALLOCATION_INFORMATION = _FILE_ALLOCATION_INFORMATION;
  1733. PFILE_ALLOCATION_INFORMATION = ^FILE_ALLOCATION_INFORMATION;
  1734. _FILE_STREAM_INFORMATION = record // Information Class 22
  1735. NextEntryOffset: ULONG;
  1736. StreamNameLength: ULONG;
  1737. EndOfStream: LARGE_INTEGER;
  1738. AllocationSize: LARGE_INTEGER;
  1739. StreamName: array [0..0] of WCHAR;
  1740. end;
  1741. FILE_STREAM_INFORMATION = _FILE_STREAM_INFORMATION;
  1742. PFILE_STREAM_INFORMATION = ^FILE_STREAM_INFORMATION;
  1743. _FILE_PIPE_INFORMATION = record // Information Class 23
  1744. ReadModeMessage: ULONG;
  1745. WaitModeBlocking: ULONG;
  1746. end;
  1747. FILE_PIPE_INFORMATION = _FILE_PIPE_INFORMATION;
  1748. PFILE_PIPE_INFORMATION = ^FILE_PIPE_INFORMATION;
  1749. _FILE_PIPE_LOCAL_INFORMATION = record // Information Class 24
  1750. MessageType: ULONG;
  1751. Unknown1: ULONG;
  1752. MaxInstances: ULONG;
  1753. CurInstances: ULONG;
  1754. InBufferSize: ULONG;
  1755. Unknown2: ULONG;
  1756. OutBufferSize: ULONG;
  1757. Unknown3: array [0..1] of ULONG;
  1758. ServerEnd: ULONG;
  1759. end;
  1760. FILE_PIPE_LOCAL_INFORMATION = _FILE_PIPE_LOCAL_INFORMATION;
  1761. PFILE_PIPE_LOCAL_INFORMATION = ^FILE_PIPE_LOCAL_INFORMATION;
  1762. _FILE_PIPE_REMOTE_INFORMATION = record // Information Class 25
  1763. CollectDataTimeout: LARGE_INTEGER;
  1764. MaxCollectionCount: ULONG;
  1765. end;
  1766. FILE_PIPE_REMOTE_INFORMATION = _FILE_PIPE_REMOTE_INFORMATION;
  1767. PFILE_PIPE_REMOTE_INFORMATION = ^FILE_PIPE_REMOTE_INFORMATION;
  1768. _FILE_MAILSLOT_QUERY_INFORMATION = record // Information Class 26
  1769. MaxMessageSize: ULONG;
  1770. Unknown: ULONG;
  1771. NextSize: ULONG;
  1772. MessageCount: ULONG;
  1773. ReadTimeout: LARGE_INTEGER;
  1774. end;
  1775. FILE_MAILSLOT_QUERY_INFORMATION = _FILE_MAILSLOT_QUERY_INFORMATION;
  1776. PFILE_MAILSLOT_QUERY_INFORMATION = ^FILE_MAILSLOT_QUERY_INFORMATION;
  1777. _FILE_MAILSLOT_SET_INFORMATION = record // Information Class 27
  1778. ReadTimeout: LARGE_INTEGER;
  1779. end;
  1780. FILE_MAILSLOT_SET_INFORMATION = _FILE_MAILSLOT_SET_INFORMATION;
  1781. PFILE_MAILSLOT_SET_INFORMATION = ^FILE_MAILSLOT_SET_INFORMATION;
  1782. _FILE_COMPRESSION_INFORMATION = record // Information Class 28
  1783. CompressedSize: LARGE_INTEGER;
  1784. CompressionFormat: USHORT;
  1785. CompressionUnitShift: UCHAR;
  1786. Unknown: UCHAR;
  1787. ClusterSizeShift: UCHAR;
  1788. end;
  1789. FILE_COMPRESSION_INFORMATION = _FILE_COMPRESSION_INFORMATION;
  1790. PFILE_COMPRESSION_INFORMATION = ^FILE_COMPRESSION_INFORMATION;
  1791. _FILE_COMPLETION_INFORMATION = record // Information Class 30
  1792. IoCompletionHandle: HANDLE;
  1793. CompletionKey: ULONG;
  1794. end;
  1795. FILE_COMPLETION_INFORMATION = _FILE_COMPLETION_INFORMATION;
  1796. PFILE_COMPLETION_INFORMATION = ^FILE_COMPLETION_INFORMATION;
  1797. function NtCreateKey(KeyHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; TitleIndex: ULONG; Class_: PUNICODE_STRING; CreateOptions: ULONG; Disposition: PULONG): NTSTATUS; stdcall; external ntdll name 'NtCreateKey';
  1798. function NtOpenKey(KeyHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtOpenKey';
  1799. function NtDeleteKey(KeyHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtDeleteKey';
  1800. function NtFlushKey(KeyHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtFlushKey';
  1801. function NtSaveKey(KeyHandle: HANDLE; FileHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtSaveKey';
  1802. function NtSaveMergedKeys(KeyHandle1: HANDLE; KeyHandle2: HANDLE; FileHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtSaveMergedKeys';
  1803. function NtRestoreKey(KeyHandle: HANDLE; FileHandle: HANDLE; Flags: ULONG): NTSTATUS; stdcall; external ntdll name 'NtRestoreKey';
  1804. function NtLoadKey(KeyObjectAttributes: POBJECT_ATTRIBUTES; FileObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtLoadKey';
  1805. function NtLoadKey2(KeyObjectAttributes: POBJECT_ATTRIBUTES; FileObjectAttributes: POBJECT_ATTRIBUTES; Flags: ULONG): NTSTATUS; stdcall; external ntdll name 'NtLoadKey2';
  1806. function NtUnloadKey(KeyObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtUnloadKey';
  1807. function NtReplaceKey(NewFileObjectAttributes: POBJECT_ATTRIBUTES; KeyHandle: HANDLE; OldFileObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external ntdll name 'NtReplaceKey';
  1808. function NtSetInformationKey(KeyHandle: HANDLE; KeyInformationClass: KEY_SET_INFORMATION_CLASS; KeyInformation: PVOID; KeyInformationLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetInformationKey';
  1809. function NtQueryKey(KeyHandle: HANDLE; KeyInformationClass: KEY_INFORMATION_CLASS; KeyInformation: PVOID; KeyInformationLength: ULONG; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryKey';
  1810. function NtEnumerateKey(KeyHandle: HANDLE; Index: ULONG; KeyInformationClass: KEY_INFORMATION_CLASS; KeyInformation: PVOID; KeyInformationLength: ULONG; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtEnumerateKey';
  1811. function NtNotifyChangeKey(KeyHandle: HANDLE; EventHandle: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; NotifyFilter: ULONG; WatchSubtree: ByteBool; Buffer: PVOID; BufferLength: ULONG; Asynchronous: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtNotifyChangeKey';
  1812. function NtNotifyChangeMultipleKeys(KeyHandle: HANDLE; Flags: ULONG; KeyObjectAttributes: POBJECT_ATTRIBUTES; EventHandle: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; NotifyFilter: ULONG; WatchSubtree: ByteBool; Buffer: PVOID; BufferLength: ULONG; Asynchronous: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtNotifyChangeMultipleKeys';
  1813. function NtDeleteValueKey(KeyHandle: HANDLE; ValueName: PUNICODE_STRING): NTSTATUS; stdcall; external ntdll name 'NtDeleteValueKey';
  1814. function NtSetValueKey(KeyHandle: HANDLE; ValueName: PUNICODE_STRING; TitleIndex: ULONG; Type_: ULONG; Data: PVOID; DataSize: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetValueKey';
  1815. function NtQueryValueKey(KeyHandle: HANDLE; ValueName: PUNICODE_STRING; KeyValueInformationClass: KEY_VALUE_INFORMATION_CLASS; KeyValueInformation: PVOID; KeyValueInformationLength: ULONG; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryValueKey';
  1816. function NtEnumerateValueKey(KeyHandle: HANDLE; Index: ULONG; KeyValueInformationClass: KEY_VALUE_INFORMATION_CLASS; KeyValueInformation: PVOID; KeyValueInformationLength: ULONG; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtEnumerateValueKey';
  1817. function NtQueryMultipleValueKey(KeyHandle: HANDLE; ValueList: PKEY_VALUE_ENTRY; NumberOfValues: ULONG; Buffer: PVOID; Length: PULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryMultipleValueKey';
  1818. function NtPrivilegeCheck(TokenHandle: HANDLE; RequiredPrivileges: PPRIVILEGE_SET; Result: PBOOLEAN): NTSTATUS; stdcall; external ntdll name 'NtPrivilegeCheck';
  1819. function NtPrivilegeObjectAuditAlarm(SubsystemName: PUNICODE_STRING; HandleId: PVOID; TokenHandle: HANDLE; DesiredAccess: ACCESS_MASK; Privileges: PPRIVILEGE_SET; AccessGranted: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtPrivilegeObjectAuditAlarm';
  1820. function NtPrivilegedServiceAuditAlarm(SubsystemName: PUNICODE_STRING; ServiceName: PUNICODE_STRING; TokenHandle: HANDLE; Privileges: PPRIVILEGE_SET; AccessGranted: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtPrivilegedServiceAuditAlarm';
  1821. function NtAccessCheck(SecurityDescriptor: PSECURITY_DESCRIPTOR; TokenHandle: HANDLE; DesiredAccess: ACCESS_MASK; GenericMapping: PGENERIC_MAPPING; PrivilegeSet: PPRIVILEGE_SET; PrivilegeSetLength: PULONG; GrantedAccess: PACCESS_MASK; AccessStatus: PBOOLEAN): NTSTATUS; stdcall; external ntdll name 'NtAccessCheck';
  1822. function NtAccessCheckAndAuditAlarm(SubsystemName: PUNICODE_STRING; HandleId: PVOID; ObjectTypeName: PUNICODE_STRING; ObjectName: PUNICODE_STRING; SecurityDescriptor: PSECURITY_DESCRIPTOR; DesiredAccess: ACCESS_MASK; GenericMapping: PGENERIC_MAPPING; ObjectCreation: ByteBool; GrantedAccess: PACCESS_MASK; AccessStatus: PBOOLEAN; GenerateOnClose: PBOOLEAN): NTSTATUS; stdcall; external ntdll name 'NtAccessCheckAndAuditAlarm';
  1823. function NtAccessCheckByType(SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID; TokenHandle: HANDLE; DesiredAccess: ULONG; ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: ULONG; GenericMapping: PGENERIC_MAPPING; PrivilegeSet: PPRIVILEGE_SET; PrivilegeSetLength: PULONG; GrantedAccess: PACCESS_MASK; AccessStatus: PULONG): NTSTATUS; stdcall; external ntdll name 'NtAccessCheckByType';
  1824. function NtAccessCheckByTypeAndAuditAlarm(SubsystemName: PUNICODE_STRING; HandleId: PVOID; ObjectTypeName: PUNICODE_STRING; ObjectName: PUNICODE_STRING; SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID; DesiredAccess: ACCESS_MASK; AuditType: AUDIT_EVENT_TYPE; Flags: ULONG; ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: ULONG; GenericMapping: PGENERIC_MAPPING; ObjectCreation: ByteBool; GrantedAccess: PACCESS_MASK; AccessStatus: PULONG; GenerateOnClose: PBOOLEAN): NTSTATUS; stdcall; external ntdll name 'NtAccessCheckByTypeAndAuditAlarm';
  1825. function NtAccessCheckByTypeResultList(SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID; TokenHandle: HANDLE; DesiredAccess: ACCESS_MASK; ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: ULONG; GenericMapping: PGENERIC_MAPPING; PrivilegeSet: PPRIVILEGE_SET; PrivilegeSetLength: PULONG; GrantedAccessList: PACCESS_MASK; AccessStatusList: PULONG): NTSTATUS; stdcall; external ntdll name 'NtAccessCheckByTypeResultList';
  1826. function NtAccessCheckByTypeResultListAndAuditAlarm(SubsystemName: PUNICODE_STRING; HandleId: PVOID; ObjectTypeName: PUNICODE_STRING; ObjectName: PUNICODE_STRING; SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID; DesiredAccess: ACCESS_MASK; AuditType: AUDIT_EVENT_TYPE; Flags: ULONG; ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: ULONG; GenericMapping: PGENERIC_MAPPING; ObjectCreation: ByteBool; GrantedAccessList: PACCESS_MASK; AccessStatusList: PULONG; GenerateOnClose: PULONG): NTSTATUS; stdcall; external ntdll name 'NtAccessCheckByTypeResultListAndAuditAlarm';
  1827. function NtAccessCheckByTypeResultListAndAuditAlarmByHandle(SubsystemName: PUNICODE_STRING; HandleId: PVOID; TokenHandle: HANDLE; ObjectTypeName: PUNICODE_STRING; ObjectName: PUNICODE_STRING; SecurityDescriptor: PSECURITY_DESCRIPTOR; PrincipalSelfSid: PSID; DesiredAccess: ACCESS_MASK; AuditType: AUDIT_EVENT_TYPE; Flags: ULONG; ObjectTypeList: POBJECT_TYPE_LIST; ObjectTypeListLength: ULONG; GenericMapping: PGENERIC_MAPPING; ObjectCreation: ByteBool; GrantedAccessList: PACCESS_MASK; AccessStatusList: PULONG; GenerateOnClose: PULONG): NTSTATUS; stdcall; external ntdll name 'NtAccessCheckByTypeResultListAndAuditAlarmByHandle';
  1828. function NtOpenObjectAuditAlarm(SubsystemName: PUNICODE_STRING; HandleId: PPVOID; ObjectTypeName: PUNICODE_STRING; ObjectName: PUNICODE_STRING; SecurityDescriptor: PSECURITY_DESCRIPTOR; TokenHandle: HANDLE; DesiredAccess: ACCESS_MASK; GrantedAccess: ACCESS_MASK; Privileges: PPRIVILEGE_SET; ObjectCreation: ByteBool; AccessGranted: ByteBool; GenerateOnClose: PBOOLEAN): NTSTATUS; stdcall; external ntdll name 'NtOpenObjectAuditAlarm';
  1829. function NtCloseObjectAuditAlarm(SubsystemName: PUNICODE_STRING; HandleId: PVOID; GenerateOnClose: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtCloseObjectAuditAlarm';
  1830. function NtDeleteObjectAuditAlarm(SubsystemName: PUNICODE_STRING; HandleId: PVOID; GenerateOnClose: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtDeleteObjectAuditAlarm';
  1831. function NtRequestWakeupLatency(Latency: LATENCY_TIME): NTSTATUS; stdcall; external ntdll name 'NtRequestWakeupLatency';
  1832. function NtRequestDeviceWakeup(DeviceHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtRequestDeviceWakeup';
  1833. function NtCancelDeviceWakeupRequest(DeviceHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtCancelDeviceWakeupRequest';
  1834. function NtIsSystemResumeAutomatic: ByteBool; stdcall; external ntdll name 'NtIsSystemResumeAutomatic';
  1835. type
  1836. PEXECUTION_STATE = ^EXECUTION_STATE;
  1837. function NtSetThreadExecutionState(ExecutionState: EXECUTION_STATE; PreviousExecutionState: PEXECUTION_STATE): NTSTATUS; stdcall; external ntdll name 'NtSetThreadExecutionState';
  1838. function NtGetDevicePowerState(DeviceHandle: HANDLE; DevicePowerState: PDEVICE_POWER_STATE): NTSTATUS; stdcall; external ntdll name 'NtGetDevicePowerState';
  1839. function NtSetSystemPowerState(SystemAction: POWER_ACTION; MinSystemState: SYSTEM_POWER_STATE; Flags: ULONG): NTSTATUS; stdcall; external ntdll name 'NtSetSystemPowerState';
  1840. function NtInitiatePowerAction(SystemAction: POWER_ACTION; MinSystemState: SYSTEM_POWER_STATE; Flags: ULONG; Asynchronous: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtInitiatePowerAction';
  1841. function NtPowerInformation(PowerInformationLevel: POWER_INFORMATION_LEVEL; InputBuffer: PVOID; InputBufferLength: ULONG; OutputBuffer: PVOID; OutputBufferLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtPowerInformation';
  1842. function NtGetPlugPlayEvent(Reserved1: ULONG; Reserved2: ULONG; Buffer: PVOID; BufferLength: ULONG): NTSTATUS; stdcall; external ntdll name 'NtGetPlugPlayEvent';
  1843. function NtRaiseException(ExceptionRecord: PEXCEPTION_RECORD; Context: PCONTEXT; SearchFrames: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtRaiseException';
  1844. function NtContinue(Context: PCONTEXT; TestAlert: ByteBool): NTSTATUS; stdcall; external ntdll name 'NtContinue';
  1845. // TODO NOT EXPORTED FROM NTDLL
  1846. //function ZwW32Call(RoutineIndex: ULONG; Argument: PVOID; ArgumentLength: ULONG; Result: PPVOID; ResultLength: PULONG): NTSTATUS; stdcall; external ntdll name 'ZwW32Call';
  1847. function NtCallbackReturn(Result: PVOID; ResultLength: ULONG; Status: NTSTATUS): NTSTATUS; stdcall; external ntdll name 'NtCallbackReturn';
  1848. // TODO NOT EXPORTED FROM NTDLL
  1849. //function ZwSetLowWaitHighThread: NTSTATUS; stdcall; external ntdll name 'ZwSetLowWaitHighThread';
  1850. //function ZwSetHighWaitLowThread: NTSTATUS; stdcall; external ntdll name 'ZwSetHighWaitLowThread';
  1851. function NtLoadDriver(DriverServiceName: PUNICODE_STRING): NTSTATUS; stdcall; external ntdll name 'NtLoadDriver';
  1852. function NtUnloadDriver(DriverServiceName: PUNICODE_STRING): NTSTATUS; stdcall; external ntdll name 'NtUnloadDriver';
  1853. function NtFlushInstructionCache(ProcessHandle: HANDLE; BaseAddress: PVOID; FlushSize: ULONG): NTSTATUS; stdcall; external ntdll name 'NtFlushInstructionCache';
  1854. function NtFlushWriteBuffer: NTSTATUS; stdcall; external ntdll name 'NtFlushWriteBuffer';
  1855. function NtQueryDefaultLocale(ThreadOrSystem: ByteBool; Locale: PLCID): NTSTATUS; stdcall; external ntdll name 'NtQueryDefaultLocale';
  1856. function NtSetDefaultLocale(ThreadOrSystem: ByteBool; Locale: LCID): NTSTATUS; stdcall; external ntdll name 'NtSetDefaultLocale';
  1857. type
  1858. PLANGID = ^LANGID;
  1859. function NtQueryDefaultUILanguage(LanguageId: PLANGID): NTSTATUS; stdcall; external ntdll name 'NtQueryDefaultUILanguage';
  1860. function NtSetDefaultUILanguage(LanguageId: LANGID): NTSTATUS; stdcall; external ntdll name 'NtSetDefaultUILanguage';
  1861. function NtQueryInstallUILanguage(LanguageId: PLANGID): NTSTATUS; stdcall; external ntdll name 'NtQueryInstallUILanguage';
  1862. function NtAllocateLocallyUniqueId(Luid: PLUID): NTSTATUS; stdcall; external ntdll name 'NtAllocateLocallyUniqueId';
  1863. function NtAllocateUuids(UuidLastTimeAllocated: PLARGE_INTEGER; UuidDeltaTime: PULONG; UuidSequenceNumber: PULONG; UuidSeed: PUCHAR): NTSTATUS; stdcall; external ntdll name 'NtAllocateUuids';
  1864. function NtSetUuidSeed(UuidSeed: PUCHAR): NTSTATUS; stdcall; external ntdll name 'NtSetUuidSeed';
  1865. function NtRaiseHardError(Status: NTSTATUS; NumberOfArguments: ULONG; StringArgumentsMask: ULONG; Arguments: PULONG; MessageBoxType: ULONG; MessageBoxResult: PULONG): NTSTATUS; stdcall; external ntdll name 'NtRaiseHardError';
  1866. function NtSetDefaultHardErrorPort(PortHandle: HANDLE): NTSTATUS; stdcall; external ntdll name 'NtSetDefaultHardErrorPort';
  1867. function NtDisplayString(Str: PUNICODE_STRING): NTSTATUS; stdcall; external ntdll name 'NtDisplayString';
  1868. function NtCreatePagingFile(FileName: PUNICODE_STRING; InitialSize: PULARGE_INTEGER; MaximumSize: PULARGE_INTEGER; Reserved: ULONG): NTSTATUS; stdcall; external ntdll name 'NtCreatePagingFile';
  1869. function NtAddAtom(Str: PWSTR; StringLength: ULONG; Atom: PUSHORT): NTSTATUS; stdcall; external ntdll name 'NtAddAtom';
  1870. function NtFindAtom(Str: PWSTR; StringLength: ULONG; Atom: PUSHORT): NTSTATUS; stdcall; external ntdll name 'NtFindAtom';
  1871. function NtDeleteAtom(Atom: USHORT): NTSTATUS; stdcall; external ntdll name 'NtDeleteAtom';
  1872. type
  1873. _ATOM_INFORMATION_CLASS = (AtomBasicInformation, AtomListInformation);
  1874. ATOM_INFORMATION_CLASS = _ATOM_INFORMATION_CLASS;
  1875. function NtQueryInformationAtom(Atom: USHORT; AtomInformationClass: ATOM_INFORMATION_CLASS; AtomInformation: PVOID; AtomInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall; external ntdll name 'NtQueryInformationAtom';
  1876. type
  1877. _ATOM_BASIC_INFORMATION = record
  1878. ReferenceCount: USHORT;
  1879. Pinned: USHORT;
  1880. NameLength: USHORT;
  1881. Name: array [0..0] of WCHAR;
  1882. end;
  1883. ATOM_BASIC_INFORMATION = _ATOM_BASIC_INFORMATION;
  1884. PATOM_BASIC_INFORMATION = ^ATOM_BASIC_INFORMATION;
  1885. _ATOM_LIST_INFORMATION = record
  1886. NumberOfAtoms: ULONG;
  1887. Atoms: array [0..0] of ATOM;
  1888. end;
  1889. ATOM_LIST_INFORMATION = _ATOM_LIST_INFORMATION;
  1890. PATOM_LIST_INFORMATION = ^ATOM_LIST_INFORMATION;
  1891. function NtSetLdtEntries(Selector1: ULONG; LdtEntry1: LDT_ENTRY; Selector2: ULONG; LdtEntry2: LDT_ENTRY): NTSTATUS; stdcall; external ntdll name 'NtSetLdtEntries';
  1892. function NtVdmControl(ControlCode: ULONG; ControlData: PVOID): NTSTATUS; stdcall; external ntdll name 'NtVdmControl';
  1893. //==============================================================================
  1894. // NTFS on disk structure structures
  1895. //==============================================================================
  1896. type
  1897. _NTFS_RECORD_HEADER = record
  1898. Type_: ULONG;
  1899. UsaOffset: USHORT;
  1900. UsaCount: USHORT;
  1901. Usn: USN;
  1902. end;
  1903. NTFS_RECORD_HEADER = _NTFS_RECORD_HEADER;
  1904. PNTFS_RECORD_HEADER = ^NTFS_RECORD_HEADER;
  1905. _FILE_RECORD_HEADER = record
  1906. Ntfs: NTFS_RECORD_HEADER;
  1907. SequenceNumber: USHORT;
  1908. LinkCount: USHORT;
  1909. AttributesOffset: USHORT;
  1910. Flags: USHORT; // 0x0001 = InUse, 0x0002 = Directory
  1911. BytesInUse: ULONG;
  1912. BytesAllocated: ULONG;
  1913. BaseFileRecord: ULONGLONG;
  1914. NextAttributeNumber: USHORT;
  1915. end;
  1916. FILE_RECORD_HEADER = _FILE_RECORD_HEADER;
  1917. PFILE_RECORD_HEADER = ^FILE_RECORD_HEADER;
  1918. const
  1919. AttributeStandardInformation = $10;
  1920. AttributeAttributeList = $20;
  1921. AttributeFileName = $30;
  1922. AttributeObjectId = $40;
  1923. AttributeSecurityDescriptor = $50;
  1924. AttributeVolumeName = $60;
  1925. AttributeVolumeInformation = $70;
  1926. AttributeData = $80;
  1927. AttributeIndexRoot = $90;
  1928. AttributeIndexAllocation = $A0;
  1929. AttributeBitmap = $B0;
  1930. AttributeReparsePoint = $C0;
  1931. AttributeEAInformation = $D0;
  1932. AttributeEA = $E0;
  1933. AttributePropertySet = $F0;
  1934. AttributeLoggedUtilityStream = $100;
  1935. type
  1936. ATTRIBUTE_TYPE = AttributeStandardInformation..AttributeLoggedUtilityStream;
  1937. PATTRIBUTE_TYPE = ^ATTRIBUTE_TYPE;
  1938. _ATTRIBUTE = record
  1939. AttributeType: ATTRIBUTE_TYPE;
  1940. Length: ULONG;
  1941. Nonresident: ByteBool;
  1942. NameLength: UCHAR;
  1943. NameOffset: USHORT;
  1944. Flags: USHORT; // 0x0001 = Compressed
  1945. AttributeNumber: USHORT;
  1946. end;
  1947. ATTRIBUTE = _ATTRIBUTE;
  1948. PATTRIBUTE = ^ATTRIBUTE;
  1949. _RESIDENT_ATTRIBUTE = record
  1950. Attribute: ATTRIBUTE;
  1951. ValueLength: ULONG;
  1952. ValueOffset: USHORT;
  1953. Flags: USHORT; // 0x0001 = Indexed
  1954. end;
  1955. RESIDENT_ATTRIBUTE = _RESIDENT_ATTRIBUTE;
  1956. PRESIDENT_ATTRIBUTE = ^RESIDENT_ATTRIBUTE;
  1957. _NONRESIDENT_ATTRIBUTE = record
  1958. Attribute: ATTRIBUTE;
  1959. LowVcn: ULONGLONG;
  1960. HighVcn: ULONGLONG;
  1961. RunArrayOffset: USHORT;
  1962. CompressionUnit: UCHAR;
  1963. AlignmentOrReserved: array [0..4] of UCHAR;
  1964. AllocatedSize: ULONGLONG;
  1965. DataSize: ULONGLONG;
  1966. InitializedSize: ULONGLONG;
  1967. CompressedSize: ULONGLONG; // Only when compressed
  1968. end;
  1969. NONRESIDENT_ATTRIBUTE = _NONRESIDENT_ATTRIBUTE;
  1970. PNONRESIDENT_ATTRIBUTE = ^NONRESIDENT_ATTRIBUTE;
  1971. _STANDARD_INFORMATION = record
  1972. CreationTime: ULONGLONG;
  1973. ChangeTime: ULONGLONG;
  1974. LastWriteTime: ULONGLONG;
  1975. LastAccessTime: ULONGLONG;
  1976. FileAttributes: ULONG;
  1977. AlignmentOrReservedOrUnknown: array [0..2] of ULONG;
  1978. QuotaId: ULONG; // NTFS 3.0 only
  1979. SecurityId: ULONG; // NTFS 3.0 only
  1980. QuotaCharge: ULONGLONG; // NTFS 3.0 only
  1981. Usn: USN; // NTFS 3.0 only
  1982. end;
  1983. STANDARD_INFORMATION = _STANDARD_INFORMATION;
  1984. PSTANDARD_INFORMATION = ^STANDARD_INFORMATION;
  1985. _ATTRIBUTE_LIST = record
  1986. AttributeType: ATTRIBUTE_TYPE;
  1987. Length: USHORT;
  1988. NameLength: UCHAR;
  1989. NameOffset: UCHAR;
  1990. LowVcn: ULONGLONG;
  1991. FileReferenceNumber: ULONGLONG;
  1992. AttributeNumber: USHORT;
  1993. AlignmentOrReserved: array [0..2] of USHORT;
  1994. end;
  1995. ATTRIBUTE_LIST = _ATTRIBUTE_LIST;
  1996. PATTRIBUTE_LIST = ^ATTRIBUTE_LIST;
  1997. _FILENAME_ATTRIBUTE = record
  1998. DirectoryFileReferenceNumber: ULONGLONG;
  1999. CreationTime: ULONGLONG; // Saved when filename last changed
  2000. ChangeTime: ULONGLONG; // ditto
  2001. LastWriteTime: ULONGLONG; // ditto
  2002. LastAccessTime: ULONGLONG; // ditto
  2003. AllocatedSize: ULONGLONG; // ditto
  2004. DataSize: ULONGLONG; // ditto
  2005. FileAttributes: ULONG; // ditto
  2006. AlignmentOrReserved: ULONG;
  2007. NameLength: UCHAR;
  2008. NameType: UCHAR; // 0x01 = Long, 0x02 = Short
  2009. Name: array [0..0] of UCHAR;
  2010. end;
  2011. FILENAME_ATTRIBUTE = _FILENAME_ATTRIBUTE;
  2012. PFILENAME_ATTRIBUTE = ^FILENAME_ATTRIBUTE;
  2013. _OBJECTID_ATTRIBUTE = record
  2014. ObjectId: GUID;
  2015. case Integer of
  2016. 0: (
  2017. BirthVolumeId: GUID;
  2018. BirthObjectId: GUID;
  2019. DomainId: GUID);
  2020. 1: (
  2021. ExtendedInfo: array [0..47] of UCHAR);
  2022. end;
  2023. OBJECTID_ATTRIBUTE = _OBJECTID_ATTRIBUTE;
  2024. POBJECTID_ATTRIBUTE = ^OBJECTID_ATTRIBUTE;
  2025. _VOLUME_INFORMATION = record
  2026. Unknown: array [0..1] of ULONG;
  2027. MajorVersion: UCHAR;
  2028. MinorVersion: UCHAR;
  2029. Flags: USHORT;
  2030. end;
  2031. VOLUME_INFORMATION = _VOLUME_INFORMATION;
  2032. PVOLUME_INFORMATION = ^VOLUME_INFORMATION;
  2033. _DIRECTORY_INDEX = record
  2034. EntriesOffset: ULONG;
  2035. IndexBlockLength: ULONG;
  2036. AllocatedSize: ULONG;
  2037. Flags: ULONG; // 0x00 = Small directory, 0x01 = Large directory
  2038. end;
  2039. DIRECTORY_INDEX = _DIRECTORY_INDEX;
  2040. PDIRECTORY_INDEX = ^DIRECTORY_INDEX;
  2041. _DIRECTORY_ENTRY = record
  2042. FileReferenceNumber: ULONGLONG;
  2043. Length: USHORT;
  2044. AttributeLength: USHORT;
  2045. Flags: ULONG; // 0x01 = Has trailing VCN, 0x02 = Last entry
  2046. // FILENAME_ATTRIBUTE Name;
  2047. // ULONGLONG Vcn; // VCN in IndexAllocation of earlier entries
  2048. end;
  2049. DIRECTORY_ENTRY = _DIRECTORY_ENTRY;
  2050. PDIRECTORY_ENTRY = ^DIRECTORY_ENTRY;
  2051. _INDEX_ROOT = record
  2052. Type_: ATTRIBUTE_TYPE;
  2053. CollationRule: ULONG;
  2054. BytesPerIndexBlock: ULONG;
  2055. ClustersPerIndexBlock: ULONG;
  2056. DirectoryIndex: DIRECTORY_INDEX;
  2057. end;
  2058. INDEX_ROOT = _INDEX_ROOT;
  2059. PINDEX_ROOT = ^INDEX_ROOT;
  2060. _INDEX_BLOCK_HEADER = record
  2061. Ntfs: NTFS_RECORD_HEADER;
  2062. IndexBlockVcn: ULONGLONG;
  2063. DirectoryIndex: DIRECTORY_INDEX;
  2064. end;
  2065. INDEX_BLOCK_HEADER = _INDEX_BLOCK_HEADER;
  2066. PINDEX_BLOCK_HEADER = ^INDEX_BLOCK_HEADER;
  2067. _REPARSE_POINT = record
  2068. ReparseTag: ULONG;
  2069. ReparseDataLength: USHORT;
  2070. Reserved: USHORT;
  2071. ReparseData: array [0..0] of UCHAR;
  2072. end;
  2073. REPARSE_POINT = _REPARSE_POINT;
  2074. PREPARSE_POINT = ^REPARSE_POINT;
  2075. _EA_INFORMATION = record
  2076. EaLength: ULONG;
  2077. EaQueryLength: ULONG;
  2078. end;
  2079. EA_INFORMATION = _EA_INFORMATION;
  2080. PEA_INFORMATION = ^EA_INFORMATION;
  2081. _EA_ATTRIBUTE = record
  2082. NextEntryOffset: ULONG;
  2083. Flags: UCHAR;
  2084. EaNameLength: UCHAR;
  2085. EaValueLength: USHORT;
  2086. EaName: array [0..0] of CHAR;
  2087. // UCHAR EaData[];
  2088. end;
  2089. EA_ATTRIBUTE = _EA_ATTRIBUTE;
  2090. PEA_ATTRIBUTE = ^EA_ATTRIBUTE;
  2091. _ATTRIBUTE_DEFINITION = record
  2092. AttributeName: array [0..63] of WCHAR;
  2093. AttributeNumber: ULONG;
  2094. Unknown: array [0..1] of ULONG;
  2095. Flags: ULONG;
  2096. MinimumSize: ULONGLONG;
  2097. MaximumSize: ULONGLONG;
  2098. end;
  2099. ATTRIBUTE_DEFINITION = _ATTRIBUTE_DEFINITION;
  2100. PATTRIBUTE_DEFINITION = ^ATTRIBUTE_DEFINITION;
  2101. _BOOT_BLOCK = record
  2102. Jump: array [0..2] of UCHAR;
  2103. Format: array [0..7] of UCHAR;
  2104. BytesPerSector: USHORT;
  2105. SectorsPerCluster: UCHAR;
  2106. BootSectors: USHORT;
  2107. Mbz1: UCHAR;
  2108. Mbz2: USHORT;
  2109. Reserved1: USHORT;
  2110. MediaType: UCHAR;
  2111. Mbz3: USHORT;
  2112. SectorsPerTrack: USHORT;
  2113. NumberOfHeads: USHORT;
  2114. PartitionOffset: ULONG;
  2115. Reserved2: array [0..1] of ULONG;
  2116. TotalSectors: ULONGLONG;
  2117. MftStartLcn: ULONGLONG;
  2118. Mft2StartLcn: ULONGLONG;
  2119. ClustersPerFileRecord: ULONG;
  2120. ClustersPerIndexBlock: ULONG;
  2121. VolumeSerialNumber: ULONGLONG;
  2122. Code: array [0..$1AD] of UCHAR;
  2123. BootSignature: USHORT;
  2124. end;
  2125. BOOT_BLOCK = _BOOT_BLOCK;
  2126. PBOOT_BLOCK = ^BOOT_BLOCK;
  2127. //==============================================================================
  2128. // Loader API
  2129. //==============================================================================
  2130. function LdrDisableThreadCalloutsForDll(hModule: HANDLE): NTSTATUS; stdcall; external ntdll name 'LdrDisableThreadCalloutsForDll';
  2131. function LdrGetDllHandle(pwPath: PWORD; pReserved: PVOID; pusPath: PUNICODE_STRING; phModule: PHANDLE): NTSTATUS; stdcall; external ntdll name 'LdrGetDllHandle';
  2132. function LdrGetProcedureAddress(hModule: HANDLE; dOrdinal: DWORD; psName: PSTRING; ppProcedure: PPVOID): NTSTATUS; stdcall; external ntdll name 'LdrGetProcedureAddress';
  2133. function LdrLoadDll(pwPath: PWORD; pdFlags: PDWORD; pusPath: PUNICODE_STRING; phModule: PHANDLE): NTSTATUS; stdcall; external ntdll name 'LdrLoadDll';
  2134. function LdrQueryProcessModuleInformation(psmi: PSYSTEM_MODULE_INFORMATION; dSize: DWORD; pdSize: PDWORD): NTSTATUS; stdcall; external ntdll name 'LdrQueryProcessModuleInformation';
  2135. function LdrQueryImageFileExecutionOptions (pusImagePath: PUNICODE_STRING; pwOptionName: PWORD; dRequestedType: DWORD; pData: PVOID; dSize: DWORD; pdSize: PDWORD): NTSTATUS; stdcall; external ntdll name 'LdrQueryImageFileExecutionOptions ';
  2136. function LdrUnloadDll(hModule: HANDLE): NTSTATUS; stdcall; external ntdll name 'LdrUnloadDll';
  2137. //LdrAccessResource
  2138. //LdrAlternateResourcesEnabled
  2139. //LdrEnumResources
  2140. //LdrFindEntryForAddress
  2141. //LdrFindResourceDirectory_U
  2142. //LdrFindResource_U
  2143. //LdrFlushAlternateResourceModules
  2144. //LdrInitializeThunk
  2145. //LdrLoadAlternateResourceModule
  2146. //LdrProcessRelocationBlock
  2147. //LdrShutdownProcess
  2148. //LdrShutdownThread
  2149. //LdrUnloadAlternateResourceModule
  2150. //LdrVerifyImageMatchesChecksum
  2151. //==============================================================================
  2152. // CSR
  2153. //==============================================================================
  2154. //CsrAllocateCaptureBuffer
  2155. //CsrAllocateMessagePointer
  2156. //CsrCaptureMessageBuffer
  2157. //CsrCaptureMessageString
  2158. //CsrCaptureTimeout
  2159. //CsrClientCallServer
  2160. //CsrClientConnectToServer
  2161. //CsrFreeCaptureBuffer
  2162. //CsrIdentifyAlertableThread
  2163. //CsrNewThread
  2164. //CsrProbeForRead
  2165. //CsrProbeForWrite
  2166. //CsrSetPriorityClass
  2167. //==============================================================================
  2168. // Debug
  2169. //==============================================================================
  2170. //DbgPrompt
  2171. //DbgSsHandleKmApiMsg
  2172. //DbgSsInitialize
  2173. //DbgUiConnectToDbg
  2174. //DbgUiContinue
  2175. //DbgUiWaitStateChange
  2176. //DbgUserBreakPoint
  2177. //
  2178. // Define kernel debugger print prototypes and macros.
  2179. //
  2180. // N.B. The following function cannot be directly imported because there are
  2181. // a few places in the source tree where this function is redefined.
  2182. //
  2183. //procedure DbgBreakPoint;
  2184. //procedure DbgBreakPointWithStatus(Status: ULONG); stdcall; external ntdll name 'DbgBreakPointWithStatus';
  2185. const
  2186. DBG_STATUS_CONTROL_C = 1;
  2187. DBG_STATUS_SYSRQ = 2;
  2188. DBG_STATUS_BUGCHECK_FIRST = 3;
  2189. DBG_STATUS_BUGCHECK_SECOND = 4;
  2190. DBG_STATUS_FATAL = 5;
  2191. DBG_STATUS_DEBUG_CONTROL = 6;
  2192. //function DbgPrint(Format: PCH; ...): ULONG; cdecl;
  2193. //function DbgPrintReturnControlC(Format: PCH; ...): ULONG; cdecl;
  2194. //==============================================================================
  2195. // Runtime Library
  2196. //==============================================================================
  2197. const
  2198. RTL_RANGE_LIST_ADD_IF_CONFLICT = $00000001;
  2199. RTL_RANGE_LIST_ADD_SHARED = $00000002;
  2200. const
  2201. RTL_RANGE_LIST_SHARED_OK = $00000001;
  2202. RTL_RANGE_LIST_NULL_CONFLICT_OK = $00000002;
  2203. type
  2204. PRTL_CONFLICT_RANGE_CALLBACK = function(Context: PVOID; Range: PRTL_RANGE): ByteBool; stdcall;
  2205. type
  2206. _OSVERSIONINFOW = record
  2207. dwOSVersionInfoSize: ULONG;
  2208. dwMajorVersion: ULONG;
  2209. dwMinorVersion: ULONG;
  2210. dwBuildNumber: ULONG;
  2211. dwPlatformId: ULONG;
  2212. szCSDVersion: array [0..127] of WCHAR; // Maintenance string for PSS usage
  2213. end;
  2214. OSVERSIONINFOW = _OSVERSIONINFOW;
  2215. POSVERSIONINFOW = ^OSVERSIONINFOW;
  2216. LPOSVERSIONINFOW = ^OSVERSIONINFOW;
  2217. RTL_OSVERSIONINFOW = OSVERSIONINFOW;
  2218. PRTL_OSVERSIONINFOW = ^OSVERSIONINFOW;
  2219. OSVERSIONINFO = OSVERSIONINFOW;
  2220. POSVERSIONINFO = POSVERSIONINFOW;
  2221. LPOSVERSIONINFO = LPOSVERSIONINFOW;
  2222. const
  2223. VER_PLATFORM_WIN32s = 0;
  2224. VER_PLATFORM_WIN32_WINDOWS = 1;
  2225. VER_PLATFORM_WIN32_NT = 2;
  2226. type
  2227. _RTL_BITMAP = record
  2228. SizeOfBitMap: ULONG; // Number of bits in bit map
  2229. Buffer: PULONG; // Pointer to the bit map itself
  2230. end;
  2231. RTL_BITMAP = _RTL_BITMAP;
  2232. PRTL_BITMAP = ^RTL_BITMAP;
  2233. const
  2234. RTL_REGISTRY_ABSOLUTE = 0; // Path is a full path
  2235. RTL_REGISTRY_SERVICES = 1; // \Registry\Machine\System\CurrentControlSet\Services
  2236. RTL_REGISTRY_CONTROL = 2; // \Registry\Machine\System\CurrentControlSet\Control
  2237. RTL_REGISTRY_WINDOWS_NT = 3; // \Registry\Machine\Software\Microsoft\Windows NT\CurrentVersion
  2238. RTL_REGISTRY_DEVICEMAP = 4; // \Registry\Machine\Hardware\DeviceMap
  2239. RTL_REGISTRY_USER = 5; // \Registry\User\CurrentUser
  2240. RTL_REGISTRY_MAXIMUM = 6;
  2241. RTL_REGISTRY_HANDLE = $40000000; // Low order bits are registry handle
  2242. RTL_REGISTRY_OPTIONAL = $80000000; // Indicates the key node is optional
  2243. type
  2244. _TIME_FIELDS = record
  2245. Year: CSHORT; // range [1601...]
  2246. Month: CSHORT; // range [1..12]
  2247. Day: CSHORT; // range [1..31]
  2248. Hour: CSHORT; // range [0..23]
  2249. Minute: CSHORT; // range [0..59]
  2250. Second: CSHORT; // range [0..59]
  2251. Milliseconds: CSHORT; // range [0..999]
  2252. Weekday: CSHORT; // range [0..6] == [Sunday..Saturday]
  2253. end;
  2254. TIME_FIELDS = _TIME_FIELDS;
  2255. PTIME_FIELDS = ^TIME_FIELDS;
  2256. type
  2257. _OSVERSIONINFOEXW =record
  2258. dwOSVersionInfoSize: ULONG;
  2259. dwMajorVersion: ULONG;
  2260. dwMinorVersion: ULONG;
  2261. dwBuildNumber: ULONG;
  2262. dwPlatformId: ULONG;
  2263. szCSDVersion: array [0..127] of WCHAR; // Maintenance string for PSS usage
  2264. wServicePackMajor: USHORT;
  2265. wServicePackMinor: USHORT;
  2266. wSuiteMask: USHORT;
  2267. wProductType: UCHAR;
  2268. wReserved: UCHAR;
  2269. end;
  2270. OSVERSIONINFOEXW = _OSVERSIONINFOEXW;
  2271. POSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
  2272. LPOSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
  2273. RTL_OSVERSIONINFOEXW = OSVERSIONINFOEXW;
  2274. PRTL_OSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
  2275. OSVERSIONINFOEX = OSVERSIONINFOEXW;
  2276. POSVERSIONINFOEX = POSVERSIONINFOEXW;
  2277. LPOSVERSIONINFOEX = LPOSVERSIONINFOEXW;
  2278. //
  2279. // RtlVerifyVersionInfo() conditions
  2280. //
  2281. const
  2282. VER_EQUAL = 1;
  2283. VER_GREATER = 2;
  2284. VER_GREATER_EQUAL = 3;
  2285. VER_LESS = 4;
  2286. VER_LESS_EQUAL = 5;
  2287. VER_AND = 6;
  2288. VER_OR = 7;
  2289. VER_CONDITION_MASK = 7;
  2290. VER_NUM_BITS_PER_CONDITION_MASK = 3;
  2291. //
  2292. // RtlVerifyVersionInfo() type mask bits
  2293. //
  2294. VER_MINORVERSION = $0000001;
  2295. VER_MAJORVERSION = $0000002;
  2296. VER_BUILDNUMBER = $0000004;
  2297. VER_PLATFORMID = $0000008;
  2298. VER_SERVICEPACKMINOR = $0000010;
  2299. VER_SERVICEPACKMAJOR = $0000020;
  2300. VER_SUITENAME = $0000040;
  2301. VER_PRODUCT_TYPE = $0000080;
  2302. //
  2303. // RtlVerifyVersionInfo() os product type values
  2304. //
  2305. VER_NT_WORKSTATION = $0000001;
  2306. VER_NT_DOMAIN_CONTROLLER = $0000002;
  2307. VER_NT_SERVER = $0000003;
  2308. type
  2309. PRTL_QUERY_REGISTRY_ROUTINE = function(ValueName: PWSTR; ValueType: ULONG;
  2310. ValueData: PVOID; ValueLength: ULONG; Context, EntryContext: PVOID): NTSTATUS; stdcall;
  2311. _RTL_QUERY_REGISTRY_TABLE = record
  2312. QueryRoutine: PRTL_QUERY_REGISTRY_ROUTINE;
  2313. Flags: ULONG;
  2314. Name: PWSTR;
  2315. EntryContext: PVOID;
  2316. DefaultType: ULONG;
  2317. DefaultData: PVOID;
  2318. DefaultLength: ULONG;
  2319. end;
  2320. RTL_QUERY_REGISTRY_TABLE = _RTL_QUERY_REGISTRY_TABLE;
  2321. PRTL_QUERY_REGISTRY_TABLE = ^RTL_QUERY_REGISTRY_TABLE;
  2322. REFGUID = ^GUID;
  2323. function RtlAddRange(RangeList: PRTL_RANGE_LIST; Start, End_: ULONGLONG; Attributes: UCHAR; Flags: ULONG; UserData, Owner: PVOID): NTSTATUS; stdcall; external ntdll name 'RtlAddRange'; external;
  2324. function RtlAnsiStringToUnicodeString(DestinationString: PUNICODE_STRING; SourceString: PANSI_STRING; AllocateDestinationString: ByteBool): NTSTATUS; stdcall; external ntdll name 'RtlAnsiStringToUnicodeString'; external;
  2325. function RtlAppendUnicodeStringToString(Destination, Source: PUNICODE_STRING): NTSTATUS; stdcall; external ntdll name 'RtlAppendUnicodeStringToString'; external;
  2326. function RtlAppendUnicodeToString(Destination: PUNICODE_STRING; Source: LPCWSTR): NTSTATUS; stdcall; external ntdll name 'RtlAppendUnicodeToString';
  2327. function RtlAreBitsClear(BitMapHeader: PRTL_BITMAP; StartingIndex, Length: ULONG): ByteBool; stdcall; external ntdll name 'RtlAreBitsClear';
  2328. function RtlAreBitsSet(BitMapHeader: PRTL_BITMAP; StartingIndex, Length: ULONG): ByteBool; stdcall; external ntdll name 'RtlAreBitsSet';
  2329. procedure RtlAssert(FailedAssertion, FileName: PVOID; LineNumber: ULONG; Message: PCHAR); stdcall; external ntdll name 'RtlAssert';
  2330. function RtlCharToInteger(Str: PCSZ; Base: ULONG; Value: PULONG): NTSTATUS; stdcall; external ntdll name 'RtlCharToInteger';
  2331. function RtlCheckRegistryKey(RelativeTo: ULONG; Path: PWSTR): NTSTATUS; stdcall; external ntdll name 'RtlCheckRegistryKey';
  2332. procedure RtlClearAllBits(BitMapHeader: PRTL_BITMAP); stdcall; external ntdll name 'RtlClearAllBits';
  2333. procedure RtlClearBits(BitMapHeader: PRTL_BITMAP; StartingIndex, NumberToClear: ULONG); stdcall; external ntdll name 'RtlClearBits';
  2334. function RtlCompareMemory(Source1, Source2: LPVOID; Length: SIZE_T): SIZE_T; stdcall; external ntdll name 'RtlCompareMemory';
  2335. function RtlCompareString(String1, String2: PSTRING; CaseInSensitive: ByteBool): LONG; stdcall; external ntdll name 'RtlCompareString';
  2336. function RtlCompareUnicodeString(String1, String2: PUNICODE_STRING; CaseInSensitive: ByteBool): LONG; stdcall; external ntdll name 'RtlCompareUnicodeString';
  2337. function RtlConvertLongToLargeInteger(SignedInteger: LONG): LARGE_INTEGER; stdcall; external ntdll name 'RtlConvertLongToLargeInteger';
  2338. function RtlConvertUlongToLargeInteger(UnsignedInteger: ULONG): LARGE_INTEGER; stdcall; external ntdll name 'RtlConvertUlongToLargeInteger';
  2339. function RtlCopyRangeList(CopyRangeList: PRTL_RANGE_LIST; RangeList: PRTL_RANGE_LIST): NTSTATUS; stdcall; external ntdll name 'RtlCopyRangeList';
  2340. procedure RtlCopyString(DestinationString, SourceString: PSTRING); stdcall; external ntdll name 'RtlCopyString';
  2341. procedure RtlCopyUnicodeString(DestinationString, SourceString: PUNICODE_STRING); stdcall; external ntdll name 'RtlCopyUnicodeString';
  2342. function RtlCreateRegistryKey(RelativeTo: ULONG; Path: PWSTR): NTSTATUS; stdcall; external ntdll name 'RtlCreateRegistryKey';
  2343. function RtlCreateSecurityDescriptor(SecurityDescriptor: PSECURITY_DESCRIPTOR; Revision: ULONG): NTSTATUS; stdcall; external ntdll name 'RtlCreateSecurityDescriptor';
  2344. function RtlDeleteOwnersRanges(RangeList: PRTL_RANGE_LIST; Owner: PVOID): NTSTATUS; stdcall; external ntdll name 'RtlDeleteOwnersRanges';
  2345. function RtlDeleteRange(RangeList: PRTL_RANGE_LIST; Start, End_: ULONGLONG; Owner: PVOID): NTSTATUS; stdcall; external ntdll name 'RtlDeleteRange';
  2346. function RtlDeleteRegistryValue(RelativeTo: ULONG; Path, ValueName: LPCWSTR): NTSTATUS; stdcall; external ntdll name 'RtlDeleteRegistryValue';
  2347. function RtlEqualString(String1, String2: PSTRING; CaseInSensitive: ByteBool): ByteBool; stdcall; external ntdll name 'RtlEqualString';
  2348. function RtlEqualUnicodeString(String1, String2: PUNICODE_STRING; CaseInSensitive: ByteBool): ByteBool; stdcall; external ntdll name 'RtlEqualUnicodeString';
  2349. function RtlExtendedIntegerMultiply(Multiplicand: LARGE_INTEGER; Multiplier: LONG): LARGE_INTEGER; stdcall; external ntdll name 'RtlExtendedIntegerMultiply';
  2350. function RtlExtendedLargeIntegerDivide(Dividend: LARGE_INTEGER; Divisor: ULONG; Remainder: PULONG): LARGE_INTEGER; stdcall; external ntdll name 'RtlExtendedLargeIntegerDivide';
  2351. function RtlExtendedMagicDivide(Dividend, MagicDivisor: LARGE_INTEGER; ShiftCount: CCHAR): LARGE_INTEGER; stdcall; external ntdll name 'RtlExtendedMagicDivide';
  2352. procedure RtlFillMemory(Destination: LPVOID; Length: SIZE_T; Fill: UCHAR); stdcall; external ntdll name 'RtlFillMemory';
  2353. function RtlFindClearBits(BitMapHeader: PRTL_BITMAP; NumberToFind, HintIndex: ULONG): ULONG; stdcall; external ntdll name 'RtlFindClearBits';
  2354. function RtlFindClearBitsAndSet(BitMapHeader: PRTL_BITMAP; NumberToFind, HintIndex: ULONG): ULONG; stdcall; external ntdll name 'RtlFindClearBitsAndSet';
  2355. function RtlFindLastBackwardRunClear(BitMapHeader: PRTL_BITMAP; FromIndex: ULONG; StartingRunIndex: PULONG): ULONG; stdcall; external ntdll name 'RtlFindLastBackwardRunClear';
  2356. function RtlFindLeastSignificantBit(Set_: ULONGLONG): CCHAR; stdcall; external ntdll name 'RtlFindLeastSignificantBit';
  2357. function RtlFindLongestRunClear(BitMapHeader: PRTL_BITMAP; StartingIndex: PULONG): ULONG; stdcall; external ntdll name 'RtlFindLongestRunClear';
  2358. function RtlFindMostSignificantBit(Set_: ULONGLONG): CCHAR; stdcall; external ntdll name 'RtlFindMostSignificantBit';
  2359. function RtlFindNextForwardRunClear(BitMapHeader: PRTL_BITMAP; FromIndex: ULONG; StartingRunIndex: PULONG): ULONG; stdcall; external ntdll name 'RtlFindNextForwardRunClear';
  2360. function RtlFindRange(RangeList: PRTL_RANGE_LIST; Minimum, Maximum: ULONGLONG; Length, Alignment, Flags: ULONG; AttributeAvailableMask: UCHAR; Context: PVOID; Callback: PRTL_CONFLICT_RANGE_CALLBACK; Start: PULONGLONG): NTSTATUS; stdcall; external ntdll name 'RtlFindRange';
  2361. function RtlFindSetBits(BitMapHeader: PRTL_BITMAP; NumberToFind, HintIndex: ULONG): ULONG; stdcall; external ntdll name 'RtlFindSetBits';
  2362. function RtlFindSetBitsAndClear(BitMapHeader: PRTL_BITMAP; NumberToFind, HintIndex: ULONG): ULONG; stdcall; external ntdll name 'RtlFindSetBitsAndClear';
  2363. procedure RtlFreeAnsiString(AnsiString: PANSI_STRING); stdcall; external ntdll name 'RtlFreeAnsiString';
  2364. procedure RtlFreeRangeList(RangeList: PRTL_RANGE_LIST); stdcall; external ntdll name 'RtlFreeRangeList';
  2365. procedure RtlFreeUnicodeString(UnicodeString: PUNICODE_STRING); stdcall; external ntdll name 'RtlFreeUnicodeString';
  2366. function RtlGUIDFromString(GuidString: PUNICODE_STRING; Guid: LPGUID): NTSTATUS; stdcall; external ntdll name 'RtlGUIDFromString';
  2367. procedure RtlGetCallersAddress(CallersAddress, CallersCaller: PPVOID); stdcall; external ntdll name 'RtlGetCallersAddress';
  2368. function RtlGetFirstRange(RangeList: PRTL_RANGE_LIST; Iterator: PRTL_RANGE_LIST_ITERATOR; var Range: PRTL_RANGE): NTSTATUS; stdcall; external ntdll name 'RtlGetFirstRange';
  2369. function RtlGetNextRange(Iterator: PRTL_RANGE_LIST_ITERATOR; var Range: PRTL_RANGE; MoveForwards: ByteBool): NTSTATUS; stdcall; external ntdll name 'RtlGetNextRange';
  2370. function RtlGetVersion(lpVersionInformation: PRTL_OSVERSIONINFOW): NTSTATUS; stdcall; external ntdll name 'RtlGetVersion';
  2371. procedure RtlInitAnsiString(DestinationString: PANSI_STRING; SourceString: PCSZ); stdcall; external ntdll name 'RtlInitAnsiString';
  2372. procedure RtlInitString(DestinationString: PSTRING; SourceString: PCSZ); stdcall; external ntdll name 'RtlInitString';
  2373. procedure RtlInitUnicodeString(DestinationString: PUNICODE_STRING; SourceString: LPCWSTR); stdcall; external ntdll name 'RtlInitUnicodeString';
  2374. procedure RtlInitializeBitMap(BitMapHeader: PRTL_BITMAP; BitMapBuffer: PULONG; SizeOfBitMap: ULONG); stdcall; external ntdll name 'RtlInitializeBitMap';
  2375. procedure RtlInitializeRangeList(RangeList: PRTL_RANGE_LIST); stdcall; external ntdll name 'RtlInitializeRangeList';
  2376. function RtlInt64ToUnicodeString(Value: ULONGLONG; Base: ULONG; Str: PUNICODE_STRING): NTSTATUS; stdcall; external ntdll name 'RtlInt64ToUnicodeString';
  2377. function RtlIntegerToUnicodeString(Value, Base: ULONG; Str: PUNICODE_STRING): NTSTATUS; stdcall; external ntdll name 'RtlIntegerToUnicodeString';
  2378. function RtlInvertRangeList(InvertedRangeList: PRTL_RANGE_LIST; RangeList: PRTL_RANGE_LIST): NTSTATUS; stdcall; external ntdll name 'RtlInvertRangeList';
  2379. function RtlIsRangeAvailable(RangeList: PRTL_RANGE_LIST; Start, End_: ULONGLONG; Flags: ULONG; AttributeAvailableMask: UCHAR; Context: PVOID; Callback: PRTL_CONFLICT_RANGE_CALLBACK; Available: PBOOLEAN): NTSTATUS; stdcall; external ntdll name 'RtlIsRangeAvailable';
  2380. function RtlLargeIntegerArithmeticShift(LargeInteger: LARGE_INTEGER; ShiftCount: CCHAR): LARGE_INTEGER; stdcall; external ntdll name 'RtlLargeIntegerArithmeticShift';
  2381. function RtlLargeIntegerDivide(Dividend, Divisor: LARGE_INTEGER; Remainder: PLARGE_INTEGER): LARGE_INTEGER; stdcall; external ntdll name 'RtlLargeIntegerDivide';
  2382. function RtlLargeIntegerShiftLeft(LargeInteger: LARGE_INTEGER; ShiftCount: CCHAR): LARGE_INTEGER; stdcall; external ntdll name 'RtlLargeIntegerShiftLeft';
  2383. function RtlLargeIntegerShiftRight(LargeInteger: LARGE_INTEGER; ShiftCount: CCHAR): LARGE_INTEGER; stdcall; external ntdll name 'RtlLargeIntegerShiftRight';
  2384. function RtlLengthSecurityDescriptor(SecurityDescriptor: PSECURITY_DESCRIPTOR): ULONG; stdcall; external ntdll name 'RtlLengthSecurityDescriptor';
  2385. procedure RtlMapGenericMask(AccessMask: PACCESS_MASK; GenericMapping: PGENERIC_MAPPING); stdcall; external ntdll name 'RtlMapGenericMask';
  2386. function RtlMergeRangeLists(MergedRangeList: PRTL_RANGE_LIST; RangeList1, RangeList2: PRTL_RANGE_LIST; Flags: ULONG): NTSTATUS; stdcall; external ntdll name 'RtlMergeRangeLists';
  2387. procedure RtlMoveMemory(Destination, Source: LPVOID; Length: SIZE_T); stdcall; external ntdll name 'RtlMoveMemory';
  2388. function RtlNumberOfClearBits(BitMapHeader: PRTL_BITMAP): ULONG; stdcall; external ntdll name 'RtlNumberOfClearBits';
  2389. function RtlNumberOfSetBits(BitMapHeader: PRTL_BITMAP): ULONG; stdcall; external ntdll name 'RtlNumberOfSetBits';
  2390. function RtlPrefixUnicodeString(String1, String2: PUNICODE_STRING; CaseInSensitive: ByteBool): ByteBool; stdcall; external ntdll name 'RtlPrefixUnicodeString';
  2391. function RtlQueryRegistryValues(RelativeTo: ULONG; Path: LPCWSTR; QueryTable: PRTL_QUERY_REGISTRY_TABLE; Context, Environment: PVOID): NTSTATUS; stdcall; external ntdll name 'RtlQueryRegistryValues';
  2392. procedure RtlSetAllBits(BitMapHeader: PRTL_BITMAP); stdcall; external ntdll name 'RtlSetAllBits';
  2393. procedure RtlSetBits(BitMapHeader: PRTL_BITMAP; StartingIndex, NumberToSet: ULONG); stdcall; external ntdll name 'RtlSetBits';
  2394. function RtlSetDaclSecurityDescriptor(SecurityDescriptor: PSECURITY_DESCRIPTOR; DaclPresent: ByteBool; Dacl: PACL; DaclDefaulted: ByteBool): NTSTATUS; stdcall; external ntdll name 'RtlSetDaclSecurityDescriptor';
  2395. function RtlStringFromGUID(Guid: REFGUID; GuidString: PUNICODE_STRING): NTSTATUS; stdcall; external ntdll name 'RtlStringFromGUID';
  2396. function RtlTimeFieldsToTime(TimeFields: PTIME_FIELDS; Time: PLARGE_INTEGER): ByteBool; stdcall; external ntdll name 'RtlTimeFieldsToTime';
  2397. procedure RtlTimeToTimeFields(Time: PLARGE_INTEGER; TimeFields: PTIME_FIELDS); stdcall; external ntdll name 'RtlTimeToTimeFields';
  2398. function RtlUnicodeStringToAnsiString(DestinationString: PANSI_STRING; SourceString: PUNICODE_STRING; AllocateDestinationString: ByteBool): NTSTATUS; stdcall; external ntdll name 'RtlUnicodeStringToAnsiString';
  2399. function RtlUnicodeStringToInteger(Str: PUNICODE_STRING; Base: ULONG; Value: PULONG): NTSTATUS; stdcall; external ntdll name 'RtlUnicodeStringToInteger';
  2400. function RtlUpcaseUnicodeChar(SourceCharacter: WCHAR): WCHAR; stdcall; external ntdll name 'RtlUpcaseUnicodeChar';
  2401. function RtlUpcaseUnicodeString(DestinationString: PUNICODE_STRING; SourceString: PCUNICODE_STRING; AllocateDestinationString: ByteBool): NTSTATUS; stdcall; external ntdll name 'RtlUpcaseUnicodeString';
  2402. function RtlUpperChar(Character: CHAR): CHAR; stdcall; external ntdll name 'RtlUpperChar';
  2403. procedure RtlUpperString(DestinationString, SourceString: PSTRING); stdcall; external ntdll name 'RtlUpperString';
  2404. function RtlValidRelativeSecurityDescriptor(SecurityDescriptorInput: PSECURITY_DESCRIPTOR; SecurityDescriptorLength: ULONG; RequiredInformation: SECURITY_INFORMATION): ByteBool; stdcall; external ntdll name 'RtlValidRelativeSecurityDescriptor';
  2405. function RtlValidSecurityDescriptor(SecurityDescriptor: PSECURITY_DESCRIPTOR): ByteBool; stdcall; external ntdll name 'RtlValidSecurityDescriptor';
  2406. function RtlVerifyVersionInfo(VersionInfo: PRTL_OSVERSIONINFOEXW; TypeMask: ULONG; ConditionMask: ULONGLONG): NTSTATUS; stdcall; external ntdll name 'RtlVerifyVersionInfo';
  2407. function RtlWriteRegistryValue(RelativeTo: ULONG; Path: LPCWSTR; ValueName: LPCWSTR; ValueType: ULONG; ValueData: PVOID; ValueLength: ULONG): NTSTATUS; stdcall; external ntdll name 'RtlWriteRegistryValue';
  2408. procedure RtlZeroMemory(Destination: LPVOID; Length: SIZE_T); stdcall; external ntdll name 'RtlZeroMemory';
  2409. function RtlxAnsiStringToUnicodeSize(AnsiString: PANSI_STRING): ULONG; stdcall; external ntdll name 'RtlxAnsiStringToUnicodeSize';
  2410. implementation
  2411. { some 300 other RTL functions exported from ntdll but for which i don't have
  2412. a prototype yet. also interesting is ntoskrnl.exe
  2413. RtlAbortRXact
  2414. RtlAbsoluteToSelfRelativeSD
  2415. RtlAcquirePebLock
  2416. RtlAcquireResourceExclusive
  2417. RtlAcquireResourceShared
  2418. RtlAddAccessAllowedAce
  2419. RtlAddAccessAllowedAceEx
  2420. RtlAddAccessAllowedObjectAce
  2421. RtlAddAccessDeniedAce
  2422. RtlAddAccessDeniedAceEx
  2423. RtlAddAccessDeniedObjectAce
  2424. RtlAddAce
  2425. RtlAddActionToRXact
  2426. RtlAddAtomToAtomTable
  2427. RtlAddAttributeActionToRXact
  2428. RtlAddAuditAccessAce
  2429. RtlAddAuditAccessAceEx
  2430. RtlAddAuditAccessObjectAce
  2431. RtlAddCompoundAce
  2432. RtlAdjustPrivilege
  2433. RtlAllocateAndInitializeSid
  2434. RtlAllocateHandle
  2435. RtlAllocateHeap
  2436. RtlAnsiCharToUnicodeChar
  2437. RtlAnsiStringToUnicodeSize
  2438. RtlAppendAsciizToString
  2439. RtlAppendStringToString
  2440. RtlApplyRXact
  2441. RtlApplyRXactNoFlush
  2442. RtlAreAllAccessesGranted
  2443. RtlAreAnyAccessesGranted
  2444. RtlCallbackLpcClient
  2445. RtlCancelTimer
  2446. RtlCaptureStackBackTrace
  2447. RtlCheckForOrphanedCriticalSections
  2448. RtlCompactHeap
  2449. RtlCompareMemoryUlong
  2450. RtlCompressBuffer
  2451. RtlConsoleMultiByteToUnicodeN
  2452. RtlConvertExclusiveToShared
  2453. RtlConvertPropertyToVariant
  2454. RtlConvertSharedToExclusive
  2455. RtlConvertSidToUnicodeString
  2456. RtlConvertToAutoInheritSecurityObject
  2457. RtlConvertUiListToApiList
  2458. RtlConvertVariantToProperty
  2459. RtlCopyLuid
  2460. RtlCopyLuidAndAttributesArray
  2461. RtlCopySecurityDescriptor
  2462. RtlCopySid
  2463. RtlCopySidAndAttributesArray
  2464. RtlCreateAcl
  2465. RtlCreateAndSetSD
  2466. RtlCreateAtomTable
  2467. RtlCreateEnvironment
  2468. RtlCreateHeap
  2469. RtlCreateLpcServer
  2470. RtlCreateProcessParameters
  2471. RtlCreateQueryDebugBuffer
  2472. RtlCreateTagHeap
  2473. RtlCreateTimer
  2474. RtlCreateTimerQueue
  2475. RtlCreateUnicodeString
  2476. RtlCreateUnicodeStringFromAsciiz
  2477. RtlCreateUserProcess
  2478. RtlCreateUserSecurityObject
  2479. RtlCreateUserThread
  2480. RtlCustomCPToUnicodeN
  2481. RtlCutoverTimeToSystemTime
  2482. RtlDeNormalizeProcessParams
  2483. RtlDebugPrintTimes
  2484. RtlDecompressBuffer
  2485. RtlDecompressFragment
  2486. RtlDefaultNpAcl
  2487. RtlDelete
  2488. RtlDeleteAce
  2489. RtlDeleteAtomFromAtomTable
  2490. RtlDeleteCriticalSection
  2491. RtlDeleteElementGenericTable
  2492. RtlDeleteNoSplay
  2493. RtlDeleteResource
  2494. RtlDeleteSecurityObject
  2495. RtlDeleteTimer
  2496. RtlDeleteTimerQueue
  2497. RtlDeleteTimerQueueEx
  2498. RtlDeregisterWait
  2499. RtlDeregisterWaitEx
  2500. RtlDestroyAtomTable
  2501. RtlDestroyEnvironment
  2502. RtlDestroyHandleTable
  2503. RtlDestroyHeap
  2504. RtlDestroyProcessParameters
  2505. RtlDestroyQueryDebugBuffer
  2506. RtlDetermineDosPathNameType_U
  2507. RtlDnsHostNameToComputerName
  2508. RtlDoesFileExists_U
  2509. RtlDosPathNameToNtPathName_U
  2510. RtlDosSearchPath_U
  2511. RtlDowncaseUnicodeString
  2512. RtlDumpResource
  2513. RtlEmptyAtomTable
  2514. RtlEnableEarlyCriticalSectionEventCreation
  2515. RtlEnlargedIntegerMultiply
  2516. RtlEnlargedUnsignedDivide
  2517. RtlEnlargedUnsignedMultiply
  2518. RtlEnterCriticalSection
  2519. RtlEnumProcessHeaps
  2520. RtlEnumerateGenericTable
  2521. RtlEnumerateGenericTableWithoutSplaying
  2522. RtlEqualComputerName
  2523. RtlEqualDomainName
  2524. RtlEqualLuid
  2525. RtlEqualPrefixSid
  2526. RtlEqualSid
  2527. RtlEraseUnicodeString
  2528. RtlExpandEnvironmentStrings_U
  2529. RtlExtendHeap
  2530. RtlFillMemoryUlong
  2531. RtlFindMessage
  2532. RtlFirstFreeAce
  2533. RtlFormatCurrentUserKeyPath
  2534. RtlFormatMessage
  2535. RtlFreeHandle
  2536. RtlFreeHeap
  2537. RtlFreeOemString
  2538. RtlFreeSid
  2539. RtlFreeUserThreadStack
  2540. RtlGenerate8dot3Name
  2541. RtlGetAce
  2542. RtlGetCompressionWorkSpaceSize
  2543. RtlGetControlSecurityDescriptor
  2544. RtlGetCurrentDirectory_U
  2545. RtlGetDaclSecurityDescriptor
  2546. RtlGetElementGenericTable
  2547. RtlGetFullPathName_U
  2548. RtlGetGroupSecurityDescriptor
  2549. RtlGetLongestNtPathLength
  2550. RtlGetNtGlobalFlags
  2551. RtlGetNtProductType
  2552. RtlGetOwnerSecurityDescriptor
  2553. RtlGetProcessHeaps
  2554. RtlGetSaclSecurityDescriptor
  2555. RtlGetSecurityDescriptorRMControl
  2556. RtlGetUserInfoHeap
  2557. RtlIdentifierAuthoritySid
  2558. RtlImageDirectoryEntryToData
  2559. RtlImageNtHeader
  2560. RtlImageRvaToSection
  2561. RtlImageRvaToVa
  2562. RtlImpersonateLpcClient
  2563. RtlImpersonateSelf
  2564. RtlInitCodePageTable
  2565. RtlInitNlsTables
  2566. RtlInitializeAtomPackage
  2567. RtlInitializeContext
  2568. RtlInitializeCriticalSection
  2569. RtlInitializeCriticalSectionAndSpinCount
  2570. RtlInitializeGenericTable
  2571. RtlInitializeHandleTable
  2572. RtlInitializeRXact
  2573. RtlInitializeResource
  2574. RtlInitializeSid
  2575. RtlInsertElementGenericTable
  2576. RtlIntegerToChar
  2577. RtlIsDosDeviceName_U
  2578. RtlIsGenericTableEmpty
  2579. RtlIsNameLegalDOS8Dot3
  2580. RtlIsTextUnicode
  2581. RtlIsValidHandle
  2582. RtlIsValidIndexHandle
  2583. RtlLargeIntegerAdd
  2584. RtlLargeIntegerNegate
  2585. RtlLargeIntegerSubtract
  2586. RtlLargeIntegerToChar
  2587. RtlLeaveCriticalSection
  2588. RtlLengthRequiredSid
  2589. RtlLengthSid
  2590. RtlLocalTimeToSystemTime
  2591. RtlLockHeap
  2592. RtlLookupAtomInAtomTable
  2593. RtlLookupElementGenericTable
  2594. RtlMakeSelfRelativeSD
  2595. RtlMultiByteToUnicodeN
  2596. RtlMultiByteToUnicodeSize
  2597. RtlNewInstanceSecurityObject
  2598. RtlNewSecurityGrantedAccess
  2599. RtlNewSecurityObject
  2600. RtlNewSecurityObjectEx
  2601. RtlNormalizeProcessParams
  2602. RtlNtStatusToDosError
  2603. RtlNumberGenericTableElements
  2604. RtlOemStringToUnicodeSize
  2605. RtlOemStringToUnicodeString
  2606. RtlOemToUnicodeN
  2607. RtlOpenCurrentUser
  2608. RtlPcToFileHeader
  2609. RtlPinAtomInAtomTable
  2610. RtlPrefixString
  2611. RtlProtectHeap
  2612. RtlQueryAtomInAtomTable
  2613. RtlQueryEnvironmentVariable_U
  2614. RtlQueryInformationAcl
  2615. RtlQueryProcessBackTraceInformation
  2616. RtlQueryProcessDebugInformation
  2617. RtlQueryProcessHeapInformation
  2618. RtlQueryProcessLockInformation
  2619. RtlQuerySecurityObject
  2620. RtlQueryTagHeap
  2621. RtlQueryTimeZoneInformation
  2622. RtlQueueWorkItem
  2623. RtlRaiseException
  2624. RtlRaiseStatus
  2625. RtlRandom
  2626. RtlReAllocateHeap
  2627. RtlRealPredecessor
  2628. RtlRealSuccessor
  2629. RtlRegisterWait
  2630. RtlReleasePebLock
  2631. RtlReleaseResource
  2632. RtlRemoteCall
  2633. RtlResetRtlTranslations
  2634. RtlRunDecodeUnicodeString
  2635. RtlRunEncodeUnicodeString
  2636. RtlSecondsSince1970ToTime
  2637. RtlSecondsSince1980ToTime
  2638. RtlSelfRelativeToAbsoluteSD
  2639. RtlSelfRelativeToAbsoluteSD2
  2640. RtlSetAttributesSecurityDescriptor
  2641. RtlSetControlSecurityDescriptor
  2642. RtlSetCriticalSectionSpinCount
  2643. RtlSetCurrentDirectory_U
  2644. RtlSetCurrentEnvironment
  2645. RtlSetEnvironmentVariable
  2646. RtlSetGroupSecurityDescriptor
  2647. RtlSetInformationAcl
  2648. RtlSetIoCompletionCallback
  2649. RtlSetOwnerSecurityDescriptor
  2650. RtlSetSaclSecurityDescriptor
  2651. RtlSetSecurityDescriptorRMControl
  2652. RtlSetSecurityObject
  2653. RtlSetSecurityObjectEx
  2654. RtlSetThreadPoolStartFunc
  2655. RtlSetTimeZoneInformation
  2656. RtlSetTimer
  2657. RtlSetUnicodeCallouts
  2658. RtlSetUserFlagsHeap
  2659. RtlSetUserValueHeap
  2660. RtlShutdownLpcServer
  2661. RtlSizeHeap
  2662. RtlSplay
  2663. RtlStartRXact
  2664. RtlSubAuthorityCountSid
  2665. RtlSubAuthoritySid
  2666. RtlSubtreePredecessor
  2667. RtlSubtreeSuccessor
  2668. RtlSystemTimeToLocalTime
  2669. RtlTimeToElapsedTimeFields
  2670. RtlTimeToSecondsSince1970
  2671. RtlTimeToSecondsSince1980
  2672. RtlTryEnterCriticalSection
  2673. //ULONG FASTCALL RtlUlongByteSwap(IN ULONG Source);
  2674. //ULONGLONG FASTCALL RtlUlonglongByteSwap(IN ULONGLONG Source);
  2675. RtlUnicodeStringToAnsiSize
  2676. RtlUnicodeStringToCountedOemString
  2677. RtlUnicodeStringToOemSize
  2678. RtlUnicodeStringToOemString
  2679. RtlUnicodeToCustomCPN
  2680. RtlUnicodeToMultiByteN
  2681. RtlUnicodeToMultiByteSize
  2682. RtlUnicodeToOemN
  2683. RtlUniform
  2684. RtlUnlockHeap
  2685. RtlUnwind
  2686. RtlUpcaseUnicodeStringToAnsiString
  2687. RtlUpcaseUnicodeStringToCountedOemString
  2688. RtlUpcaseUnicodeStringToOemString
  2689. RtlUpcaseUnicodeToCustomCPN
  2690. RtlUpcaseUnicodeToMultiByteN
  2691. RtlUpcaseUnicodeToOemN
  2692. RtlUpdateTimer
  2693. RtlUsageHeap
  2694. //USHORT FASTCALL RtlUshortByteSwap(IN USHORT Source);
  2695. RtlValidAcl
  2696. RtlValidSid
  2697. RtlValidateHeap
  2698. RtlValidateProcessHeaps
  2699. RtlWalkFrameChain
  2700. RtlWalkHeap
  2701. RtlZeroHeap
  2702. RtlpNtCreateKey
  2703. RtlpNtEnumerateSubKey
  2704. RtlpNtMakeTemporaryKey
  2705. RtlpNtOpenKey
  2706. RtlpNtQueryValueKey
  2707. RtlpNtSetValueKey
  2708. RtlpUnWaitCriticalSection
  2709. RtlpWaitForCriticalSection
  2710. RtlxOemStringToUnicodeSize
  2711. RtlxUnicodeStringToAnsiSize
  2712. RtlxUnicodeStringToOemSize
  2713. }
  2714. end.