jwatlhelp32.pas 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. {******************************************************************************}
  2. { }
  3. { ToolHelp API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: tlhelp32.h, released June 2000. The original Pascal }
  9. { code is: TlHelp32.pas, released December 2000. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. unit JwaTlHelp32;
  43. {$WEAKPACKAGEUNIT}
  44. {$HPPEMIT ''}
  45. {$HPPEMIT '#include "tlhelp32.h"'}
  46. {$HPPEMIT ''}
  47. {$I jediapilib.inc}
  48. interface
  49. uses
  50. JwaWinType;
  51. const
  52. MAX_MODULE_NAME32 = 255;
  53. {$EXTERNALSYM MAX_MODULE_NAME32}
  54. // Snapshot function
  55. function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): HANDLE; stdcall;
  56. {$EXTERNALSYM CreateToolhelp32Snapshot}
  57. //
  58. // The th32ProcessID argument is only used if TH32CS_SNAPHEAPLIST or
  59. // TH32CS_SNAPMODULE is specified. th32ProcessID == 0 means the current
  60. // process.
  61. //
  62. // NOTE that all of the snapshots are global except for the heap and module
  63. // lists which are process specific. To enumerate the heap or module
  64. // state for all WIN32 processes call with TH32CS_SNAPALL and the
  65. // current process. Then for each process in the TH32CS_SNAPPROCESS
  66. // list that isn't the current process, do a call with just
  67. // TH32CS_SNAPHEAPLIST and/or TH32CS_SNAPMODULE.
  68. //
  69. // dwFlags
  70. //
  71. const
  72. TH32CS_SNAPHEAPLIST = $00000001;
  73. {$EXTERNALSYM TH32CS_SNAPHEAPLIST}
  74. TH32CS_SNAPPROCESS = $00000002;
  75. {$EXTERNALSYM TH32CS_SNAPPROCESS}
  76. TH32CS_SNAPTHREAD = $00000004;
  77. {$EXTERNALSYM TH32CS_SNAPTHREAD}
  78. TH32CS_SNAPMODULE = $00000008;
  79. {$EXTERNALSYM TH32CS_SNAPMODULE}
  80. TH32CS_SNAPMODULE32 = $00000010;
  81. {$EXTERNALSYM TH32CS_SNAPMODULE32}
  82. TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST or TH32CS_SNAPPROCESS or
  83. TH32CS_SNAPTHREAD or TH32CS_SNAPMODULE;
  84. {$EXTERNALSYM TH32CS_SNAPALL}
  85. TH32CS_INHERIT = $80000000;
  86. {$EXTERNALSYM TH32CS_INHERIT}
  87. //
  88. // Use CloseHandle to destroy the snapshot
  89. //
  90. // Heap walking
  91. type
  92. PHEAPLIST32 = ^HEAPLIST32;
  93. {$EXTERNALSYM PHEAPLIST32}
  94. tagHEAPLIST32 = record
  95. dwSize: SIZE_T;
  96. th32ProcessID: DWORD; // owning process
  97. th32HeapID: ULONG_PTR; // heap (in owning process's context!)
  98. dwFlags: DWORD;
  99. end;
  100. {$EXTERNALSYM tagHEAPLIST32}
  101. HEAPLIST32 = tagHEAPLIST32;
  102. {$EXTERNALSYM HEAPLIST32}
  103. LPHEAPLIST32 = ^HEAPLIST32;
  104. {$EXTERNALSYM LPHEAPLIST32}
  105. THeapList32 = HEAPLIST32;
  106. //
  107. // dwFlags
  108. //
  109. const
  110. HF32_DEFAULT = 1; // process's default heap
  111. {$EXTERNALSYM HF32_DEFAULT}
  112. HF32_SHARED = 2; // is shared heap
  113. {$EXTERNALSYM HF32_SHARED}
  114. function Heap32ListFirst(hSnapshot: HANDLE; var lphl: HEAPLIST32): BOOL; stdcall;
  115. {$EXTERNALSYM Heap32ListFirst}
  116. function Heap32ListNext(hSnapshot: HANDLE; var lphl: HEAPLIST32): BOOL; stdcall;
  117. {$EXTERNALSYM Heap32ListNext}
  118. type
  119. PHEAPENTRY32 = ^HEAPENTRY32;
  120. {$EXTERNALSYM PHEAPENTRY32}
  121. tagHEAPENTRY32 = record
  122. dwSize: SIZE_T;
  123. hHandle: HANDLE; // Handle of this heap block
  124. dwAddress: ULONG_PTR; // Linear address of start of block
  125. dwBlockSize: SIZE_T; // Size of block in bytes
  126. dwFlags: DWORD;
  127. dwLockCount: DWORD;
  128. dwResvd: DWORD;
  129. th32ProcessID: DWORD; // owning process
  130. th32HeapID: ULONG_PTR; // heap block is in
  131. end;
  132. {$EXTERNALSYM tagHEAPENTRY32}
  133. HEAPENTRY32 = tagHEAPENTRY32;
  134. {$EXTERNALSYM HEAPENTRY32}
  135. LPHEAPENTRY32 = ^HEAPENTRY32;
  136. {$EXTERNALSYM LPHEAPENTRY32}
  137. THeapEntry32 = HEAPENTRY32;
  138. //
  139. // dwFlags
  140. //
  141. const
  142. LF32_FIXED = $00000001;
  143. {$EXTERNALSYM LF32_FIXED}
  144. LF32_FREE = $00000002;
  145. {$EXTERNALSYM LF32_FREE}
  146. LF32_MOVEABLE = $00000004;
  147. {$EXTERNALSYM LF32_MOVEABLE}
  148. function Heap32First(var lphe: HEAPENTRY32; th32ProcessID: DWORD;
  149. th32HeapID: ULONG_PTR): BOOL; stdcall;
  150. {$EXTERNALSYM Heap32First}
  151. function Heap32Next(var lphe: HEAPENTRY32): BOOL; stdcall;
  152. {$EXTERNALSYM Heap32Next}
  153. function Toolhelp32ReadProcessMemory(th32ProcessID: DWORD; lpBaseAddress: LPCVOID;
  154. lpBuffer: LPVOID; cbRead: DWORD; lpNumberOfBytesRead: LPDWORD): BOOL; stdcall;
  155. {$EXTERNALSYM Toolhelp32ReadProcessMemory}
  156. // Process walking
  157. type
  158. PPROCESSENTRY32W = ^PROCESSENTRY32W;
  159. {$EXTERNALSYM PPROCESSENTRY32W}
  160. tagPROCESSENTRY32W = record
  161. dwSize: DWORD;
  162. cntUsage: DWORD;
  163. th32ProcessID: DWORD; // this process
  164. th32DefaultHeapID: ULONG_PTR;
  165. th32ModuleID:DWORD; // associated exe
  166. cntThreads: DWORD;
  167. th32ParentProcessID: DWORD; // this process's parent process
  168. pcPriClassBase: LONG; // Base priority of process's threads
  169. dwFlags: DWORD;
  170. szExeFile: array [0..MAX_PATH - 1] of WCHAR; // Path
  171. end;
  172. {$EXTERNALSYM tagPROCESSENTRY32W}
  173. PROCESSENTRY32W = tagPROCESSENTRY32W;
  174. {$EXTERNALSYM PROCESSENTRY32W}
  175. LPPROCESSENTRY32W = ^PROCESSENTRY32W;
  176. {$EXTERNALSYM LPPROCESSENTRY32W}
  177. TProcessEntry32W = PROCESSENTRY32W;
  178. {$IFDEF UNICODE}
  179. PROCESSENTRY32 = PROCESSENTRY32W;
  180. {$EXTERNALSYM PROCESSENTRY32}
  181. PPROCESSENTRY32 = PPROCESSENTRY32W;
  182. {$EXTERNALSYM PPROCESSENTRY32}
  183. LPPROCESSENTRY32 = LPPROCESSENTRY32W;
  184. {$EXTERNALSYM LPPROCESSENTRY32}
  185. TProcessEntry32 = TProcessEntry32W;
  186. {$ELSE}
  187. PPROCESSENTRY32 = ^PROCESSENTRY32;
  188. {$EXTERNALSYM PPROCESSENTRY32}
  189. tagPROCESSENTRY32 = record
  190. dwSize: DWORD;
  191. cntUsage: DWORD;
  192. th32ProcessID: DWORD; // this process
  193. th32DefaultHeapID: ULONG_PTR;
  194. th32ModuleID: DWORD; // associated exe
  195. cntThreads: DWORD;
  196. th32ParentProcessID: DWORD; // this process's parent process
  197. pcPriClassBase: LONG; // Base priority of process's threads
  198. dwFlags: DWORD;
  199. szExeFile: array [0..MAX_PATH - 1] of Char; // Path
  200. end;
  201. {$EXTERNALSYM tagPROCESSENTRY32}
  202. PROCESSENTRY32 = tagPROCESSENTRY32;
  203. {$EXTERNALSYM PROCESSENTRY32}
  204. LPPROCESSENTRY32 = ^PROCESSENTRY32;
  205. {$EXTERNALSYM LPPROCESSENTRY32}
  206. TProcessEntry32 = PROCESSENTRY32;
  207. {$ENDIF UNICODE}
  208. function Process32FirstW(hSnapshot: HANDLE; var lppe: PROCESSENTRY32W): BOOL; stdcall;
  209. {$EXTERNALSYM Process32FirstW}
  210. function Process32NextW(hSnapshot: HANDLE; var lppe: PROCESSENTRY32W): BOOL; stdcall;
  211. {$EXTERNALSYM Process32NextW}
  212. function Process32First(hSnapshot: HANDLE; var lppe: PROCESSENTRY32): BOOL; stdcall;
  213. {$EXTERNALSYM Process32First}
  214. function Process32Next(hSnapshot: HANDLE; var lppe: PROCESSENTRY32): BOOL; stdcall;
  215. {$EXTERNALSYM Process32Next}
  216. // Thread walking
  217. type
  218. PTHREADENTRY32 = ^THREADENTRY32;
  219. {$EXTERNALSYM PTHREADENTRY32}
  220. tagTHREADENTRY32 = record
  221. dwSize: DWORD;
  222. cntUsage: DWORD;
  223. th32ThreadID: DWORD; // this thread
  224. th32OwnerProcessID: DWORD; // Process this thread is associated with
  225. tpBasePri: LONG;
  226. tpDeltaPri: LONG;
  227. dwFlags: DWORD;
  228. end;
  229. {$EXTERNALSYM tagTHREADENTRY32}
  230. THREADENTRY32 = tagTHREADENTRY32;
  231. {$EXTERNALSYM THREADENTRY32}
  232. LPTHREADENTRY32 = ^THREADENTRY32;
  233. {$EXTERNALSYM LPTHREADENTRY32}
  234. TThreadEntry32 = THREADENTRY32;
  235. function Thread32First(hSnapshot: HANDLE; var lpte: THREADENTRY32): BOOL; stdcall;
  236. {$EXTERNALSYM Thread32First}
  237. function Thread32Next(hSnapshot: HANDLE; var lpte: THREADENTRY32): BOOL; stdcall;
  238. {$EXTERNALSYM Thread32Next}
  239. // Module walking
  240. type
  241. PMODULEENTRY32W = ^MODULEENTRY32W;
  242. {$EXTERNALSYM PMODULEENTRY32W}
  243. tagMODULEENTRY32W = record
  244. dwSize: DWORD;
  245. th32ModuleID: DWORD; // This module
  246. th32ProcessID: DWORD; // owning process
  247. GlblcntUsage: DWORD; // Global usage count on the module
  248. ProccntUsage: DWORD; // Module usage count in th32ProcessID's context
  249. modBaseAddr: LPBYTE; // Base address of module in th32ProcessID's context
  250. modBaseSize: DWORD; // Size in bytes of module starting at modBaseAddr
  251. hModule: HMODULE; // The hModule of this module in th32ProcessID's context
  252. szModule: array [0..MAX_MODULE_NAME32] of WCHAR;
  253. szExePath: array [0..MAX_PATH - 1] of WCHAR;
  254. end;
  255. {$EXTERNALSYM tagMODULEENTRY32W}
  256. MODULEENTRY32W = tagMODULEENTRY32W;
  257. {$EXTERNALSYM MODULEENTRY32W}
  258. LPMODULEENTRY32W = ^MODULEENTRY32W;
  259. {$EXTERNALSYM LPMODULEENTRY32W}
  260. TModuleEntry32W = MODULEENTRY32W;
  261. {$IFDEF UNICODE}
  262. MODULEENTRY32 = MODULEENTRY32W;
  263. {$EXTERNALSYM MODULEENTRY32}
  264. PMODULEENTRY32 = PMODULEENTRY32W;
  265. {$EXTERNALSYM PMODULEENTRY32}
  266. LPMODULEENTRY32 = LPMODULEENTRY32W;
  267. {$EXTERNALSYM LPMODULEENTRY32}
  268. TModuleEntry32 = TModuleEntry32W;
  269. {$ELSE}
  270. PMODULEENTRY32 = ^MODULEENTRY32;
  271. {$EXTERNALSYM PMODULEENTRY32}
  272. tagMODULEENTRY32 = record
  273. dwSize: DWORD;
  274. th32ModuleID: DWORD; // This module
  275. th32ProcessID: DWORD; // owning process
  276. GlblcntUsage: DWORD; // Global usage count on the module
  277. ProccntUsage: DWORD; // Module usage count in th32ProcessID's context
  278. modBaseAddr: LPBYTE; // Base address of module in th32ProcessID's context
  279. modBaseSize: DWORD; // Size in bytes of module starting at modBaseAddr
  280. hModule: HMODULE; // The hModule of this module in th32ProcessID's context
  281. szModule: array [0..MAX_MODULE_NAME32] of Char;
  282. szExePath: array [0..MAX_PATH - 1] of Char;
  283. end;
  284. {$EXTERNALSYM tagMODULEENTRY32}
  285. MODULEENTRY32 = tagMODULEENTRY32;
  286. {$EXTERNALSYM MODULEENTRY32}
  287. LPMODULEENTRY32 = ^MODULEENTRY32;
  288. {$EXTERNALSYM LPMODULEENTRY32}
  289. TModuleEntry32 = MODULEENTRY32;
  290. {$ENDIF UNICODE}
  291. function Module32FirstW(hSnapshot: HANDLE; var lpme: MODULEENTRY32W): BOOL; stdcall;
  292. {$EXTERNALSYM Module32FirstW}
  293. function Module32NextW(hSnapshot: HANDLE; var lpme: MODULEENTRY32W): BOOL; stdcall;
  294. {$EXTERNALSYM Module32NextW}
  295. //
  296. // NOTE CAREFULLY that the modBaseAddr and hModule fields are valid ONLY
  297. // in th32ProcessID's process context.
  298. //
  299. function Module32First(hSnapshot: HANDLE; var lpme: MODULEENTRY32): BOOL; stdcall;
  300. {$EXTERNALSYM Module32First}
  301. function Module32Next(hSnapshot: HANDLE; var lpme: MODULEENTRY32): BOOL; stdcall;
  302. {$EXTERNALSYM Module32Next}
  303. implementation
  304. const
  305. kernel32 = 'kernel32.dll';
  306. {$IFDEF UNICODE}
  307. AWSuffix = 'W';
  308. {$ELSE}
  309. AWSuffix = '';
  310. {$ENDIF UNICODE}
  311. {$IFDEF DYNAMIC_LINK}
  312. var
  313. _CreateToolhelp32Snapshot: Pointer;
  314. function CreateToolhelp32Snapshot;
  315. begin
  316. GetProcedureAddress(_CreateToolhelp32Snapshot, kernel32, 'CreateToolhelp32Snapshot');
  317. asm
  318. MOV ESP, EBP
  319. POP EBP
  320. JMP [_CreateToolhelp32Snapshot]
  321. end;
  322. end;
  323. var
  324. _Heap32ListFirst: Pointer;
  325. function Heap32ListFirst;
  326. begin
  327. GetProcedureAddress(_Heap32ListFirst, kernel32, 'Heap32ListFirst');
  328. asm
  329. MOV ESP, EBP
  330. POP EBP
  331. JMP [_Heap32ListFirst]
  332. end;
  333. end;
  334. var
  335. _Heap32ListNext: Pointer;
  336. function Heap32ListNext;
  337. begin
  338. GetProcedureAddress(_Heap32ListNext, kernel32, 'Heap32ListNext');
  339. asm
  340. MOV ESP, EBP
  341. POP EBP
  342. JMP [_Heap32ListNext]
  343. end;
  344. end;
  345. var
  346. _Heap32First: Pointer;
  347. function Heap32First;
  348. begin
  349. GetProcedureAddress(_Heap32First, kernel32, 'Heap32First');
  350. asm
  351. MOV ESP, EBP
  352. POP EBP
  353. JMP [_Heap32First]
  354. end;
  355. end;
  356. var
  357. _Heap32Next: Pointer;
  358. function Heap32Next;
  359. begin
  360. GetProcedureAddress(_Heap32Next, kernel32, 'Heap32Next');
  361. asm
  362. MOV ESP, EBP
  363. POP EBP
  364. JMP [_Heap32Next]
  365. end;
  366. end;
  367. var
  368. _Toolhelp32ReadProcessMemory: Pointer;
  369. function Toolhelp32ReadProcessMemory;
  370. begin
  371. GetProcedureAddress(_Toolhelp32ReadProcessMemory, kernel32, 'Toolhelp32ReadProcessMemory');
  372. asm
  373. MOV ESP, EBP
  374. POP EBP
  375. JMP [_Toolhelp32ReadProcessMemory]
  376. end;
  377. end;
  378. var
  379. _Process32FirstW: Pointer;
  380. function Process32FirstW;
  381. begin
  382. GetProcedureAddress(_Process32FirstW, kernel32, 'Process32FirstW');
  383. asm
  384. MOV ESP, EBP
  385. POP EBP
  386. JMP [_Process32FirstW]
  387. end;
  388. end;
  389. var
  390. _Process32NextW: Pointer;
  391. function Process32NextW;
  392. begin
  393. GetProcedureAddress(_Process32NextW, kernel32, 'Process32NextW');
  394. asm
  395. MOV ESP, EBP
  396. POP EBP
  397. JMP [_Process32NextW]
  398. end;
  399. end;
  400. var
  401. _Process32First: Pointer;
  402. function Process32First;
  403. begin
  404. GetProcedureAddress(_Process32First, kernel32, 'Process32First' + AWSuffix);
  405. asm
  406. MOV ESP, EBP
  407. POP EBP
  408. JMP [_Process32First]
  409. end;
  410. end;
  411. var
  412. _Process32Next: Pointer;
  413. function Process32Next;
  414. begin
  415. GetProcedureAddress(_Process32Next, kernel32, 'Process32Next' + AWSuffix);
  416. asm
  417. MOV ESP, EBP
  418. POP EBP
  419. JMP [_Process32Next]
  420. end;
  421. end;
  422. var
  423. _Thread32First: Pointer;
  424. function Thread32First;
  425. begin
  426. GetProcedureAddress(_Thread32First, kernel32, 'Thread32First');
  427. asm
  428. MOV ESP, EBP
  429. POP EBP
  430. JMP [_Thread32First]
  431. end;
  432. end;
  433. var
  434. _Thread32Next: Pointer;
  435. function Thread32Next;
  436. begin
  437. GetProcedureAddress(_Thread32Next, kernel32, 'Thread32Next');
  438. asm
  439. MOV ESP, EBP
  440. POP EBP
  441. JMP [_Thread32Next]
  442. end;
  443. end;
  444. var
  445. _Module32FirstW: Pointer;
  446. function Module32FirstW;
  447. begin
  448. GetProcedureAddress(_Module32FirstW, kernel32, 'Module32FirstW');
  449. asm
  450. MOV ESP, EBP
  451. POP EBP
  452. JMP [_Module32FirstW]
  453. end;
  454. end;
  455. var
  456. _Module32NextW: Pointer;
  457. function Module32NextW;
  458. begin
  459. GetProcedureAddress(_Module32NextW, kernel32, 'Module32NextW');
  460. asm
  461. MOV ESP, EBP
  462. POP EBP
  463. JMP [_Module32NextW]
  464. end;
  465. end;
  466. var
  467. _Module32First: Pointer;
  468. function Module32First;
  469. begin
  470. GetProcedureAddress(_Module32First, kernel32, 'Module32First' + AWSuffix);
  471. asm
  472. MOV ESP, EBP
  473. POP EBP
  474. JMP [_Module32First]
  475. end;
  476. end;
  477. var
  478. _Module32Next: Pointer;
  479. function Module32Next;
  480. begin
  481. GetProcedureAddress(_Module32Next, kernel32, 'Module32Next' + AWSuffix);
  482. asm
  483. MOV ESP, EBP
  484. POP EBP
  485. JMP [_Module32Next]
  486. end;
  487. end;
  488. {$ELSE}
  489. function CreateToolhelp32Snapshot; external kernel32 name 'CreateToolhelp32Snapshot';
  490. function Heap32ListFirst; external kernel32 name 'Heap32ListFirst';
  491. function Heap32ListNext; external kernel32 name 'Heap32ListNext';
  492. function Heap32First; external kernel32 name 'Heap32First';
  493. function Heap32Next; external kernel32 name 'Heap32Next';
  494. function Toolhelp32ReadProcessMemory; external kernel32 name 'Toolhelp32ReadProcessMemory';
  495. function Process32FirstW; external kernel32 name 'Process32FirstW';
  496. function Process32NextW; external kernel32 name 'Process32NextW';
  497. function Process32First; external kernel32 name 'Process32First' + AWSuffix;
  498. function Process32Next; external kernel32 name 'Process32Next' + AWSuffix;
  499. function Thread32First; external kernel32 name 'Thread32First';
  500. function Thread32Next; external kernel32 name 'Thread32Next';
  501. function Module32FirstW; external kernel32 name 'Module32FirstW';
  502. function Module32NextW; external kernel32 name 'Module32NextW';
  503. function Module32First; external kernel32 name 'Module32First' + AWSuffix;
  504. function Module32Next; external kernel32 name 'Module32Next' + AWSuffix;
  505. {$ENDIF DYNAMIC_LINK}
  506. end.