JwaPsApi.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:27k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Process Status 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: psapi.h, released June 2000. The original Pascal       }
  9. { code is: PsApi.pas, released December 2000. The initial developer of the     }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.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 home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaPsApi;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include <psapi.h>'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaWinType;
  52. function EnumProcesses(lpidProcess: LPDWORD; cb: DWORD; var cbNeeded: DWORD): BOOL; stdcall;
  53. {$EXTERNALSYM EnumProcesses}
  54. function EnumProcessModules(hProcess: HANDLE; lphModule: PHMODULE; cb: DWORD;
  55.   var lpcbNeeded: DWORD): BOOL; stdcall;
  56. {$EXTERNALSYM EnumProcessModules}
  57. function GetModuleBaseNameA(hProcess: HANDLE; hModule: HMODULE; lpBaseName: LPSTR;
  58.   nSize: DWORD): DWORD; stdcall;
  59. {$EXTERNALSYM GetModuleBaseNameA}
  60. function GetModuleBaseNameW(hProcess: HANDLE; hModule: HMODULE; lpBaseName: LPWSTR;
  61.   nSize: DWORD): DWORD; stdcall;
  62. {$EXTERNALSYM GetModuleBaseNameW}
  63. {$IFDEF UNICODE}
  64. function GetModuleBaseName(hProcess: HANDLE; hModule: HMODULE; lpBaseName: LPWSTR;
  65.   nSize: DWORD): DWORD; stdcall;
  66. {$EXTERNALSYM GetModuleBaseName}
  67. {$ELSE}
  68. function GetModuleBaseName(hProcess: HANDLE; hModule: HMODULE; lpBaseName: LPSTR;
  69.   nSize: DWORD): DWORD; stdcall;
  70. {$EXTERNALSYM GetModuleBaseName}
  71. {$ENDIF}
  72. function GetModuleFileNameExA(hProcess: HANDLE; hModule: HMODULE; lpFilename: LPSTR;
  73.   nSize: DWORD): DWORD; stdcall;
  74. {$EXTERNALSYM GetModuleFileNameExA}
  75. function GetModuleFileNameExW(hProcess: HANDLE; hModule: HMODULE; lpFilename: LPWSTR;
  76.   nSize: DWORD): DWORD; stdcall;
  77. {$EXTERNALSYM GetModuleFileNameExW}
  78. {$IFDEF UNICODE}
  79. function GetModuleFileNameEx(hProcess: HANDLE; hModule: HMODULE; lpFilename: LPWSTR;
  80.   nSize: DWORD): DWORD; stdcall;
  81. {$EXTERNALSYM GetModuleFileNameEx}
  82. {$ELSE}
  83. function GetModuleFileNameEx(hProcess: HANDLE; hModule: HMODULE; lpFilename: LPSTR;
  84.   nSize: DWORD): DWORD; stdcall;
  85. {$EXTERNALSYM GetModuleFileNameEx}
  86. {$ENDIF}
  87. type
  88.   LPMODULEINFO = ^MODULEINFO;
  89.   {$EXTERNALSYM LPMODULEINFO}
  90.   _MODULEINFO = packed record
  91.     lpBaseOfDll: LPVOID;
  92.     SizeOfImage: DWORD;
  93.     EntryPoint: LPVOID;
  94.   end;
  95.   {$EXTERNALSYM _MODULEINFO}
  96.   MODULEINFO = _MODULEINFO;
  97.   {$EXTERNALSYM MODULEINFO}
  98.   TModuleInfo = MODULEINFO;
  99.   PModuleInfo = LPMODULEINFO;
  100. function GetModuleInformation(hProcess: HANDLE; hModule: HMODULE;
  101.   var lpmodinfo: MODULEINFO; cb: DWORD): BOOL; stdcall;
  102. {$EXTERNALSYM GetModuleInformation}
  103. function EmptyWorkingSet(hProcess: HANDLE): BOOL; stdcall;
  104. {$EXTERNALSYM EmptyWorkingSet}
  105. function QueryWorkingSet(hProcess: HANDLE; pv: PVOID; cb: DWORD): BOOL; stdcall;
  106. {$EXTERNALSYM QueryWorkingSet}
  107. function InitializeProcessForWsWatch(hProcess: HANDLE): BOOL; stdcall;
  108. {$EXTERNALSYM InitializeProcessForWsWatch}
  109. type
  110.   PPSAPI_WS_WATCH_INFORMATION = ^PSAPI_WS_WATCH_INFORMATION;
  111.   {$EXTERNALSYM PPSAPI_WS_WATCH_INFORMATION}
  112.   _PSAPI_WS_WATCH_INFORMATION = packed record
  113.     FaultingPc: LPVOID;
  114.     FaultingVa: LPVOID;
  115.   end;
  116.   {$EXTERNALSYM _PSAPI_WS_WATCH_INFORMATION}
  117.   PSAPI_WS_WATCH_INFORMATION = _PSAPI_WS_WATCH_INFORMATION;
  118.   {$EXTERNALSYM PSAPI_WS_WATCH_INFORMATION}
  119.   TPsApiWsWatchInformation = PSAPI_WS_WATCH_INFORMATION;
  120.   PPsApiWsWatchInformation = PPSAPI_WS_WATCH_INFORMATION;
  121. function GetWsChanges(hProcess: HANDLE; var lpWatchInfo: PSAPI_WS_WATCH_INFORMATION;
  122.   cb: DWORD): BOOL; stdcall;
  123. {$EXTERNALSYM GetWsChanges}
  124. function GetMappedFileNameW(hProcess: HANDLE; lpv: LPVOID; lpFilename: LPWSTR;
  125.   nSize: DWORD): DWORD; stdcall;
  126. {$EXTERNALSYM GetMappedFileNameW}
  127. function GetMappedFileNameA(hProcess: HANDLE; lpv: LPVOID; lpFilename: LPSTR;
  128.   nSize: DWORD): DWORD; stdcall;
  129. {$EXTERNALSYM GetMappedFileNameA}
  130. {$IFDEF UNICODE}
  131. function GetMappedFileName(hProcess: HANDLE; lpv: LPVOID; lpFilename: LPWSTR;
  132.   nSize: DWORD): DWORD; stdcall;
  133. {$EXTERNALSYM GetMappedFileName}
  134. {$ELSE}
  135. function GetMappedFileName(hProcess: HANDLE; lpv: LPVOID; lpFilename: LPSTR;
  136.   nSize: DWORD): DWORD; stdcall;
  137. {$EXTERNALSYM GetMappedFileName}
  138. {$ENDIF}
  139. function EnumDeviceDrivers(lpImageBase: LPLPVOID; cb: DWORD; var lpcbNeeded: DWORD): BOOL; stdcall;
  140. {$EXTERNALSYM EnumDeviceDrivers}
  141. function GetDeviceDriverBaseNameA(ImageBase: LPVOID; lpBaseName: LPSTR;
  142.   nSize: DWORD): DWORD; stdcall;
  143. {$EXTERNALSYM GetDeviceDriverBaseNameA}
  144. function GetDeviceDriverBaseNameW(ImageBase: LPVOID; lpBaseName: LPWSTR;
  145.   nSize: DWORD): DWORD; stdcall;
  146. {$EXTERNALSYM GetDeviceDriverBaseNameW}
  147. {$IFDEF UNICODE}
  148. function GetDeviceDriverBaseName(ImageBase: LPVOID; lpBaseName: LPWSTR;
  149.   nSize: DWORD): DWORD; stdcall;
  150. {$EXTERNALSYM GetDeviceDriverBaseName}
  151. {$ELSE}
  152. function GetDeviceDriverBaseName(ImageBase: LPVOID; lpBaseName: LPSTR;
  153.   nSize: DWORD): DWORD; stdcall;
  154. {$EXTERNALSYM GetDeviceDriverBaseName}
  155. {$ENDIF}
  156. function GetDeviceDriverFileNameA(ImageBase: LPVOID; lpFilename: LPSTR;
  157.   nSize: DWORD): DWORD; stdcall;
  158. {$EXTERNALSYM GetDeviceDriverFileNameA}
  159. function GetDeviceDriverFileNameW(ImageBase: LPVOID; lpFilename: LPWSTR;
  160.   nSize: DWORD): DWORD; stdcall;
  161. {$EXTERNALSYM GetDeviceDriverFileNameW}
  162. {$IFDEF UNICODE}
  163. function GetDeviceDriverFileName(ImageBase: LPVOID; lpFilename: LPWSTR;
  164.   nSize: DWORD): DWORD; stdcall;
  165. {$EXTERNALSYM GetDeviceDriverFileName}
  166. {$ELSE}
  167. function GetDeviceDriverFileName(ImageBase: LPVOID; lpFilename: LPSTR;
  168.   nSize: DWORD): DWORD; stdcall;
  169. {$EXTERNALSYM GetDeviceDriverFileName}
  170. {$ENDIF}
  171. // Structure for GetProcessMemoryInfo()
  172. type
  173.   PPROCESS_MEMORY_COUNTERS = ^PROCESS_MEMORY_COUNTERS;
  174.   {$EXTERNALSYM PPROCESS_MEMORY_COUNTERS}
  175.   _PROCESS_MEMORY_COUNTERS = packed record
  176.     cb: DWORD;
  177.     PageFaultCount: DWORD;
  178.     PeakWorkingSetSize: SIZE_T;
  179.     WorkingSetSize: SIZE_T;
  180.     QuotaPeakPagedPoolUsage: SIZE_T;
  181.     QuotaPagedPoolUsage: SIZE_T;
  182.     QuotaPeakNonPagedPoolUsage: SIZE_T;
  183.     QuotaNonPagedPoolUsage: SIZE_T;
  184.     PagefileUsage: SIZE_T;
  185.     PeakPagefileUsage: SIZE_T;
  186.   end;
  187.   {$EXTERNALSYM _PROCESS_MEMORY_COUNTERS}
  188.   PROCESS_MEMORY_COUNTERS = _PROCESS_MEMORY_COUNTERS;
  189.   {$EXTERNALSYM PROCESS_MEMORY_COUNTERS}
  190.   TProcessMemoryCounters = PROCESS_MEMORY_COUNTERS;
  191.   PProcessMemoryCounters = PPROCESS_MEMORY_COUNTERS;
  192. function GetProcessMemoryInfo(Process: HANDLE;
  193.   var ppsmemCounters: PROCESS_MEMORY_COUNTERS; cb: DWORD): BOOL; stdcall;
  194. {$EXTERNALSYM GetProcessMemoryInfo}
  195. type
  196.   _PERFORMANCE_INFORMATION = record
  197.     cb: DWORD;
  198.     CommitTotal: SIZE_T;
  199.     CommitLimit: SIZE_T;
  200.     CommitPeak: SIZE_T;
  201.     PhysicalTotal: SIZE_T;
  202.     PhysicalAvailable: SIZE_T;
  203.     SystemCache: SIZE_T;
  204.     KernelTotal: SIZE_T;
  205.     KernelPaged: SIZE_T;
  206.     KernelNonpaged: SIZE_T;
  207.     PageSize: SIZE_T;
  208.     HandleCount: DWORD;
  209.     ProcessCount: DWORD;
  210.     ThreadCount: DWORD;
  211.   end;
  212.   {$EXTERNALSYM _PERFORMANCE_INFORMATION}
  213.   PERFORMANCE_INFORMATION = _PERFORMANCE_INFORMATION;
  214.   {$EXTERNALSYM PERFORMANCE_INFORMATION}
  215.   PPERFORMANCE_INFORMATION = ^PERFORMANCE_INFORMATION;
  216.   {$EXTERNALSYM PPERFORMANCE_INFORMATION}
  217.   TPerformanceInformation = PERFORMANCE_INFORMATION;
  218.   PPerformanceInformation = PPERFORMANCE_INFORMATION;
  219. { MVB:
  220.   Please note that this function, unlike what the Platform SDK documents, is _not_ available for Windows 2000!!!
  221.   It is available starting with Windows XP and Windows.NET Server.
  222.   If needed, you can relatively easily clone the functionality of this function by using the performance monitor
  223.   API (either through the HKEY_PERFORMANCE_DATA registry interface or using the Performance Data Helper API)
  224. }
  225. function GetPerformanceInfo(pPerformanceInformation: PPERFORMANCE_INFORMATION;
  226.   cb: DWORD): BOOL; stdcall;
  227. {$EXTERNALSYM GetPerformanceInfo}
  228. type
  229.   _ENUM_PAGE_FILE_INFORMATION = record
  230.     cb: DWORD;
  231.     Reserved: DWORD;
  232.     TotalSize: SIZE_T;
  233.     TotalInUse: SIZE_T;
  234.     PeakUsage: SIZE_T;
  235.   end;
  236.   {$EXTERNALSYM _ENUM_PAGE_FILE_INFORMATION}
  237.   ENUM_PAGE_FILE_INFORMATION = _ENUM_PAGE_FILE_INFORMATION;
  238.   {$EXTERNALSYM ENUM_PAGE_FILE_INFORMATION}
  239.   PENUM_PAGE_FILE_INFORMATION = ^ENUM_PAGE_FILE_INFORMATION;
  240.   TEnumPageFileInformation = ENUM_PAGE_FILE_INFORMATION;
  241.   PEnumPageFileInformation = PENUM_PAGE_FILE_INFORMATION;
  242. type
  243.   PENUM_PAGE_FILE_CALLBACKW = function (pContext: LPVOID;
  244.     pPageFileInfo: PENUM_PAGE_FILE_INFORMATION; lpFilename: LPCWSTR): BOOL; stdcall;
  245.   {$EXTERNALSYM PENUM_PAGE_FILE_CALLBACKW}
  246.   PENUM_PAGE_FILE_CALLBACKA = function (pContext: LPVOID;
  247.     pPageFileInfo: PENUM_PAGE_FILE_INFORMATION; lpFilename: LPCSTR): BOOL; stdcall;
  248.   {$EXTERNALSYM PENUM_PAGE_FILE_CALLBACKA}
  249. function EnumPageFilesW(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW; pContext: LPVOID): BOOL; stdcall;
  250. {$EXTERNALSYM EnumPageFilesW}
  251. function EnumPageFilesA(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA; pContext: LPVOID): BOOL; stdcall;
  252. {$EXTERNALSYM EnumPageFilesA}
  253. {$IFDEF UNICODE}
  254. type
  255.   PENUM_PAGE_FILE_CALLBACK = PENUM_PAGE_FILE_CALLBACKW;
  256.   {$EXTERNALSYM PENUM_PAGE_FILE_CALLBACK}
  257. function EnumPageFiles(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW; pContext: LPVOID): BOOL; stdcall;
  258. {$EXTERNALSYM EnumPageFiles}
  259. {$ELSE}
  260. type
  261.   PENUM_PAGE_FILE_CALLBACK = PENUM_PAGE_FILE_CALLBACKA;
  262.   {$EXTERNALSYM PENUM_PAGE_FILE_CALLBACK}
  263. function EnumPageFiles(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA; pContext: LPVOID): BOOL; stdcall;
  264. {$EXTERNALSYM EnumPageFiles}
  265. {$ENDIF}
  266. function GetProcessImageFileNameA(hProcess: HANDLE; lpImageFileName: LPSTR;
  267.   nSize: DWORD): DWORD; stdcall;
  268. {$EXTERNALSYM GetProcessImageFileNameA}
  269. function GetProcessImageFileNameW(hProcess: HANDLE; lpImageFileName: LPWSTR;
  270.   nSize: DWORD): DWORD; stdcall;
  271. {$EXTERNALSYM GetProcessImageFileNameW}
  272. {$IFDEF UNICODE}
  273. function GetProcessImageFileName(hProcess: HANDLE; lpImageFileName: LPWSTR;
  274.   nSize: DWORD): DWORD; stdcall;
  275. {$EXTERNALSYM GetProcessImageFileName}
  276. {$ELSE}
  277. function GetProcessImageFileName(hProcess: HANDLE; lpImageFileName: LPSTR;
  278.   nSize: DWORD): DWORD; stdcall;
  279. {$EXTERNALSYM GetProcessImageFileName}
  280. {$ENDIF}
  281. implementation
  282. const
  283.   PsapiLib = 'psapi.dll';
  284. {$IFDEF DYNAMIC_LINK}
  285. var
  286.   _EnumProcesses: Pointer;
  287. function EnumProcesses;
  288. begin
  289.   GetProcedureAddress(_EnumProcesses, PsapiLib, 'EnumProcesses');
  290.   asm
  291.     mov esp, ebp
  292.     pop ebp
  293.     jmp [_EnumProcesses]
  294.   end;
  295. end;
  296. {$ELSE}
  297. function EnumProcesses; external PsapiLib name 'EnumProcesses';
  298. {$ENDIF DYNAMIC_LINK}
  299. {$IFDEF DYNAMIC_LINK}
  300. var
  301.   _EnumProcessModules: Pointer;
  302. function EnumProcessModules;
  303. begin
  304.   GetProcedureAddress(_EnumProcessModules, PsapiLib, 'EnumProcessModules');
  305.   asm
  306.     mov esp, ebp
  307.     pop ebp
  308.     jmp [_EnumProcessModules]
  309.   end;
  310. end;
  311. {$ELSE}
  312. function EnumProcessModules; external PsapiLib name 'EnumProcessModules';
  313. {$ENDIF DYNAMIC_LINK}
  314. {$IFDEF DYNAMIC_LINK}
  315. var
  316.   _GetModuleBaseNameA: Pointer;
  317. function GetModuleBaseNameA;
  318. begin
  319.   GetProcedureAddress(_GetModuleBaseNameA, PsapiLib, 'GetModuleBaseNameA');
  320.   asm
  321.     mov esp, ebp
  322.     pop ebp
  323.     jmp [_GetModuleBaseNameA]
  324.   end;
  325. end;
  326. {$ELSE}
  327. function GetModuleBaseNameA; external PsapiLib name 'GetModuleBaseNameA';
  328. {$ENDIF DYNAMIC_LINK}
  329. {$IFDEF DYNAMIC_LINK}
  330. var
  331.   _GetModuleBaseNameW: Pointer;
  332. function GetModuleBaseNameW;
  333. begin
  334.   GetProcedureAddress(_GetModuleBaseNameW, PsapiLib, 'GetModuleBaseNameW');
  335.   asm
  336.     mov esp, ebp
  337.     pop ebp
  338.     jmp [_GetModuleBaseNameW]
  339.   end;
  340. end;
  341. {$ELSE}
  342. function GetModuleBaseNameW; external PsapiLib name 'GetModuleBaseNameW';
  343. {$ENDIF DYNAMIC_LINK}
  344. {$IFDEF UNICODE}
  345. {$IFDEF DYNAMIC_LINK}
  346. var
  347.   _GetModuleBaseName: Pointer;
  348. function GetModuleBaseName;
  349. begin
  350.   GetProcedureAddress(_GetModuleBaseName, PsapiLib, 'GetModuleBaseNameW');
  351.   asm
  352.     mov esp, ebp
  353.     pop ebp
  354.     jmp [_GetModuleBaseName]
  355.   end;
  356. end;
  357. {$ELSE}
  358. function GetModuleBaseName; external PsapiLib name 'GetModuleBaseNameW';
  359. {$ENDIF DYNAMIC_LINK}
  360. {$ELSE}
  361. {$IFDEF DYNAMIC_LINK}
  362. var
  363.   _GetModuleBaseName: Pointer;
  364. function GetModuleBaseName;
  365. begin
  366.   GetProcedureAddress(_GetModuleBaseName, PsapiLib, 'GetModuleBaseNameA');
  367.   asm
  368.     mov esp, ebp
  369.     pop ebp
  370.     jmp [_GetModuleBaseName]
  371.   end;
  372. end;
  373. {$ELSE}
  374. function GetModuleBaseName; external PsapiLib name 'GetModuleBaseNameA';
  375. {$ENDIF DYNAMIC_LINK}
  376. {$ENDIF}
  377. {$IFDEF DYNAMIC_LINK}
  378. var
  379.   _GetModuleFileNameExA: Pointer;
  380. function GetModuleFileNameExA;
  381. begin
  382.   GetProcedureAddress(_GetModuleFileNameExA, PsapiLib, 'GetModuleFileNameExA');
  383.   asm
  384.     mov esp, ebp
  385.     pop ebp
  386.     jmp [_GetModuleFileNameExA]
  387.   end;
  388. end;
  389. {$ELSE}
  390. function GetModuleFileNameExA; external PsapiLib name 'GetModuleFileNameExA';
  391. {$ENDIF DYNAMIC_LINK}
  392. {$IFDEF DYNAMIC_LINK}
  393. var
  394.   _GetModuleFileNameExW: Pointer;
  395. function GetModuleFileNameExW;
  396. begin
  397.   GetProcedureAddress(_GetModuleFileNameExW, PsapiLib, 'GetModuleFileNameExW');
  398.   asm
  399.     mov esp, ebp
  400.     pop ebp
  401.     jmp [_GetModuleFileNameExW]
  402.   end;
  403. end;
  404. {$ELSE}
  405. function GetModuleFileNameExW; external PsapiLib name 'GetModuleFileNameExW';
  406. {$ENDIF DYNAMIC_LINK}
  407. {$IFDEF UNICODE}
  408. {$IFDEF DYNAMIC_LINK}
  409. var
  410.   _GetModuleFileNameEx: Pointer;
  411. function GetModuleFileNameEx;
  412. begin
  413.   GetProcedureAddress(_GetModuleFileNameEx, PsapiLib, 'GetModuleFileNameExW');
  414.   asm
  415.     mov esp, ebp
  416.     pop ebp
  417.     jmp [_GetModuleFileNameEx]
  418.   end;
  419. end;
  420. {$ELSE}
  421. function GetModuleFileNameEx; external PsapiLib name 'GetModuleFileNameExW';
  422. {$ENDIF DYNAMIC_LINK}
  423. {$ELSE}
  424. {$IFDEF DYNAMIC_LINK}
  425. var
  426.   _GetModuleFileNameEx: Pointer;
  427. function GetModuleFileNameEx;
  428. begin
  429.   GetProcedureAddress(_GetModuleFileNameEx, PsapiLib, 'GetModuleFileNameExA');
  430.   asm
  431.     mov esp, ebp
  432.     pop ebp
  433.     jmp [_GetModuleFileNameEx]
  434.   end;
  435. end;
  436. {$ELSE}
  437. function GetModuleFileNameEx; external PsapiLib name 'GetModuleFileNameExA';
  438. {$ENDIF DYNAMIC_LINK}
  439. {$ENDIF}
  440. {$IFDEF DYNAMIC_LINK}
  441. var
  442.   _GetModuleInformation: Pointer;
  443. function GetModuleInformation;
  444. begin
  445.   GetProcedureAddress(_GetModuleInformation, PsapiLib, 'GetModuleInformation');
  446.   asm
  447.     mov esp, ebp
  448.     pop ebp
  449.     jmp [_GetModuleInformation]
  450.   end;
  451. end;
  452. {$ELSE}
  453. function GetModuleInformation; external PsapiLib name 'GetModuleInformation';
  454. {$ENDIF DYNAMIC_LINK}
  455. {$IFDEF DYNAMIC_LINK}
  456. var
  457.   _EmptyWorkingSet: Pointer;
  458. function EmptyWorkingSet;
  459. begin
  460.   GetProcedureAddress(_EmptyWorkingSet, PsapiLib, 'EmptyWorkingSet');
  461.   asm
  462.     mov esp, ebp
  463.     pop ebp
  464.     jmp [_EmptyWorkingSet]
  465.   end;
  466. end;
  467. {$ELSE}
  468. function EmptyWorkingSet; external PsapiLib name 'EmptyWorkingSet';
  469. {$ENDIF DYNAMIC_LINK}
  470. {$IFDEF DYNAMIC_LINK}
  471. var
  472.   _QueryWorkingSet: Pointer;
  473. function QueryWorkingSet;
  474. begin
  475.   GetProcedureAddress(_QueryWorkingSet, PsapiLib, 'QueryWorkingSet');
  476.   asm
  477.     mov esp, ebp
  478.     pop ebp
  479.     jmp [_QueryWorkingSet]
  480.   end;
  481. end;
  482. {$ELSE}
  483. function QueryWorkingSet; external PsapiLib name 'QueryWorkingSet';
  484. {$ENDIF DYNAMIC_LINK}
  485. {$IFDEF DYNAMIC_LINK}
  486. var
  487.   _InitializeProcessForWsWatch: Pointer;
  488. function InitializeProcessForWsWatch;
  489. begin
  490.   GetProcedureAddress(_InitializeProcessForWsWatch, PsapiLib, 'InitializeProcessForWsWatch');
  491.   asm
  492.     mov esp, ebp
  493.     pop ebp
  494.     jmp [_InitializeProcessForWsWatch]
  495.   end;
  496. end;
  497. {$ELSE}
  498. function InitializeProcessForWsWatch; external PsapiLib name 'InitializeProcessForWsWatch';
  499. {$ENDIF DYNAMIC_LINK}
  500. {$IFDEF DYNAMIC_LINK}
  501. var
  502.   _GetWsChanges: Pointer;
  503. function GetWsChanges;
  504. begin
  505.   GetProcedureAddress(_GetWsChanges, PsapiLib, 'GetWsChanges');
  506.   asm
  507.     mov esp, ebp
  508.     pop ebp
  509.     jmp [_GetWsChanges]
  510.   end;
  511. end;
  512. {$ELSE}
  513. function GetWsChanges; external PsapiLib name 'GetWsChanges';
  514. {$ENDIF DYNAMIC_LINK}
  515. {$IFDEF DYNAMIC_LINK}
  516. var
  517.   _GetMappedFileNameW: Pointer;
  518. function GetMappedFileNameW;
  519. begin
  520.   GetProcedureAddress(_GetMappedFileNameW, PsapiLib, 'GetMappedFileNameW');
  521.   asm
  522.     mov esp, ebp
  523.     pop ebp
  524.     jmp [_GetMappedFileNameW]
  525.   end;
  526. end;
  527. {$ELSE}
  528. function GetMappedFileNameW; external PsapiLib name 'GetMappedFileNameW';
  529. {$ENDIF DYNAMIC_LINK}
  530. {$IFDEF DYNAMIC_LINK}
  531. var
  532.   _GetMappedFileNameA: Pointer;
  533. function GetMappedFileNameA;
  534. begin
  535.   GetProcedureAddress(_GetMappedFileNameA, PsapiLib, 'GetMappedFileNameA');
  536.   asm
  537.     mov esp, ebp
  538.     pop ebp
  539.     jmp [_GetMappedFileNameA]
  540.   end;
  541. end;
  542. {$ELSE}
  543. function GetMappedFileNameA; external PsapiLib name 'GetMappedFileNameA';
  544. {$ENDIF DYNAMIC_LINK}
  545. {$IFDEF UNICODE}
  546. {$IFDEF DYNAMIC_LINK}
  547. var
  548.   _GetMappedFileName: Pointer;
  549. function GetMappedFileName;
  550. begin
  551.   GetProcedureAddress(_GetMappedFileName, PsapiLib, 'GetMappedFileNameW');
  552.   asm
  553.     mov esp, ebp
  554.     pop ebp
  555.     jmp [_GetMappedFileName]
  556.   end;
  557. end;
  558. {$ELSE}
  559. function GetMappedFileName; external PsapiLib name 'GetMappedFileNameW';
  560. {$ENDIF DYNAMIC_LINK}
  561. {$ELSE}
  562. {$IFDEF DYNAMIC_LINK}
  563. var
  564.   _GetMappedFileName: Pointer;
  565. function GetMappedFileName;
  566. begin
  567.   GetProcedureAddress(_GetMappedFileName, PsapiLib, 'GetMappedFileNameA');
  568.   asm
  569.     mov esp, ebp
  570.     pop ebp
  571.     jmp [_GetMappedFileName]
  572.   end;
  573. end;
  574. {$ELSE}
  575. function GetMappedFileName; external PsapiLib name 'GetMappedFileNameA';
  576. {$ENDIF DYNAMIC_LINK}
  577. {$ENDIF}
  578. {$IFDEF DYNAMIC_LINK}
  579. var
  580.   _EnumDeviceDrivers: Pointer;
  581. function EnumDeviceDrivers;
  582. begin
  583.   GetProcedureAddress(_EnumDeviceDrivers, PsapiLib, 'EnumDeviceDrivers');
  584.   asm
  585.     mov esp, ebp
  586.     pop ebp
  587.     jmp [_EnumDeviceDrivers]
  588.   end;
  589. end;
  590. {$ELSE}
  591. function EnumDeviceDrivers; external PsapiLib name 'EnumDeviceDrivers';
  592. {$ENDIF DYNAMIC_LINK}
  593. {$IFDEF DYNAMIC_LINK}
  594. var
  595.   _GetDeviceDriverBaseNameA: Pointer;
  596. function GetDeviceDriverBaseNameA;
  597. begin
  598.   GetProcedureAddress(_GetDeviceDriverBaseNameA, PsapiLib, 'GetDeviceDriverBaseNameA');
  599.   asm
  600.     mov esp, ebp
  601.     pop ebp
  602.     jmp [_GetDeviceDriverBaseNameA]
  603.   end;
  604. end;
  605. {$ELSE}
  606. function GetDeviceDriverBaseNameA; external PsapiLib name 'GetDeviceDriverBaseNameA';
  607. {$ENDIF DYNAMIC_LINK}
  608. {$IFDEF DYNAMIC_LINK}
  609. var
  610.   _GetDeviceDriverBaseNameW: Pointer;
  611. function GetDeviceDriverBaseNameW;
  612. begin
  613.   GetProcedureAddress(_GetDeviceDriverBaseNameW, PsapiLib, 'GetDeviceDriverBaseNameW');
  614.   asm
  615.     mov esp, ebp
  616.     pop ebp
  617.     jmp [_GetDeviceDriverBaseNameW]
  618.   end;
  619. end;
  620. {$ELSE}
  621. function GetDeviceDriverBaseNameW; external PsapiLib name 'GetDeviceDriverBaseNameW';
  622. {$ENDIF DYNAMIC_LINK}
  623. {$IFDEF UNICODE}
  624. {$IFDEF DYNAMIC_LINK}
  625. var
  626.   _GetDeviceDriverBaseName: Pointer;
  627. function GetDeviceDriverBaseName;
  628. begin
  629.   GetProcedureAddress(_GetDeviceDriverBaseName, PsapiLib, 'GetDeviceDriverBaseNameW');
  630.   asm
  631.     mov esp, ebp
  632.     pop ebp
  633.     jmp [_GetDeviceDriverBaseName]
  634.   end;
  635. end;
  636. {$ELSE}
  637. function GetDeviceDriverBaseName; external PsapiLib name 'GetDeviceDriverBaseNameW';
  638. {$ENDIF DYNAMIC_LINK}
  639. {$ELSE}
  640. {$IFDEF DYNAMIC_LINK}
  641. var
  642.   _GetDeviceDriverBaseName: Pointer;
  643. function GetDeviceDriverBaseName;
  644. begin
  645.   GetProcedureAddress(_GetDeviceDriverBaseName, PsapiLib, 'GetDeviceDriverBaseNameA');
  646.   asm
  647.     mov esp, ebp
  648.     pop ebp
  649.     jmp [_GetDeviceDriverBaseName]
  650.   end;
  651. end;
  652. {$ELSE}
  653. function GetDeviceDriverBaseName; external PsapiLib name 'GetDeviceDriverBaseNameA';
  654. {$ENDIF DYNAMIC_LINK}
  655. {$ENDIF}
  656. {$IFDEF DYNAMIC_LINK}
  657. var
  658.   _GetDeviceDriverFileNameA: Pointer;
  659. function GetDeviceDriverFileNameA;
  660. begin
  661.   GetProcedureAddress(_GetDeviceDriverFileNameA, PsapiLib, 'GetDeviceDriverFileNameA');
  662.   asm
  663.     mov esp, ebp
  664.     pop ebp
  665.     jmp [_GetDeviceDriverFileNameA]
  666.   end;
  667. end;
  668. {$ELSE}
  669. function GetDeviceDriverFileNameA; external PsapiLib name 'GetDeviceDriverFileNameA';
  670. {$ENDIF DYNAMIC_LINK}
  671. {$IFDEF DYNAMIC_LINK}
  672. var
  673.   _GetDeviceDriverFileNameW: Pointer;
  674. function GetDeviceDriverFileNameW;
  675. begin
  676.   GetProcedureAddress(_GetDeviceDriverFileNameW, PsapiLib, 'GetDeviceDriverFileNameW');
  677.   asm
  678.     mov esp, ebp
  679.     pop ebp
  680.     jmp [_GetDeviceDriverFileNameW]
  681.   end;
  682. end;
  683. {$ELSE}
  684. function GetDeviceDriverFileNameW; external PsapiLib name 'GetDeviceDriverFileNameW';
  685. {$ENDIF DYNAMIC_LINK}
  686. {$IFDEF UNICODE}
  687. {$IFDEF DYNAMIC_LINK}
  688. var
  689.   _GetDeviceDriverFileName: Pointer;
  690. function GetDeviceDriverFileName;
  691. begin
  692.   GetProcedureAddress(_GetDeviceDriverFileName, PsapiLib, 'GetDeviceDriverFileNameW');
  693.   asm
  694.     mov esp, ebp
  695.     pop ebp
  696.     jmp [_GetDeviceDriverFileName]
  697.   end;
  698. end;
  699. {$ELSE}
  700. function GetDeviceDriverFileName; external PsapiLib name 'GetDeviceDriverFileNameW';
  701. {$ENDIF DYNAMIC_LINK}
  702. {$ELSE}
  703. {$IFDEF DYNAMIC_LINK}
  704. var
  705.   _GetDeviceDriverFileName: Pointer;
  706. function GetDeviceDriverFileName;
  707. begin
  708.   GetProcedureAddress(_GetDeviceDriverFileName, PsapiLib, 'GetDeviceDriverFileNameA');
  709.   asm
  710.     mov esp, ebp
  711.     pop ebp
  712.     jmp [_GetDeviceDriverFileName]
  713.   end;
  714. end;
  715. {$ELSE}
  716. function GetDeviceDriverFileName; external PsapiLib name 'GetDeviceDriverFileNameA';
  717. {$ENDIF DYNAMIC_LINK}
  718. {$ENDIF}
  719. {$IFDEF DYNAMIC_LINK}
  720. var
  721.   _GetProcessMemoryInfo: Pointer;
  722. function GetProcessMemoryInfo;
  723. begin
  724.   GetProcedureAddress(_GetProcessMemoryInfo, PsapiLib, 'GetProcessMemoryInfo');
  725.   asm
  726.     mov esp, ebp
  727.     pop ebp
  728.     jmp [_GetProcessMemoryInfo]
  729.   end;
  730. end;
  731. {$ELSE}
  732. function GetProcessMemoryInfo; external PsapiLib name 'GetProcessMemoryInfo';
  733. {$ENDIF DYNAMIC_LINK}
  734. {$IFDEF DYNAMIC_LINK}
  735. var
  736.   _GetPerformanceInfo: Pointer;
  737. function GetPerformanceInfo;
  738. begin
  739.   GetProcedureAddress(_GetPerformanceInfo, PsapiLib, 'GetPerformanceInfo');
  740.   asm
  741.     mov esp, ebp
  742.     pop ebp
  743.     jmp [_GetPerformanceInfo]
  744.   end;
  745. end;
  746. {$ELSE}
  747. function GetPerformanceInfo; external PsapiLib name 'GetPerformanceInfo';
  748. {$ENDIF DYNAMIC_LINK}
  749. {$IFDEF DYNAMIC_LINK}
  750. var
  751.   _EnumPageFilesW: Pointer;
  752. function EnumPageFilesW;
  753. begin
  754.   GetProcedureAddress(_EnumPageFilesW, PsapiLib, 'EnumPageFilesA');
  755.   asm
  756.     mov esp, ebp
  757.     pop ebp
  758.     jmp [_EnumPageFilesW]
  759.   end;
  760. end;
  761. {$ELSE}
  762. function EnumPageFilesW; external PsapiLib name 'EnumPageFilesA';
  763. {$ENDIF DYNAMIC_LINK}
  764. {$IFDEF DYNAMIC_LINK}
  765. var
  766.   _EnumPageFilesA: Pointer;
  767. function EnumPageFilesA;
  768. begin
  769.   GetProcedureAddress(_EnumPageFilesA, PsapiLib, 'EnumPageFilesW');
  770.   asm
  771.     mov esp, ebp
  772.     pop ebp
  773.     jmp [_EnumPageFilesA]
  774.   end;
  775. end;
  776. {$ELSE}
  777. function EnumPageFilesA; external PsapiLib name 'EnumPageFilesW';
  778. {$ENDIF DYNAMIC_LINK}
  779. {$IFDEF UNICODE}
  780. {$IFDEF DYNAMIC_LINK}
  781. var
  782.   _EnumPageFiles: Pointer;
  783. function EnumPageFiles;
  784. begin
  785.   GetProcedureAddress(_EnumPageFiles, PsapiLib, 'EnumPageFilesW');
  786.   asm
  787.     mov esp, ebp
  788.     pop ebp
  789.     jmp [_EnumPageFiles]
  790.   end;
  791. end;
  792. {$ELSE}
  793. function EnumPageFiles; external PsapiLib name 'EnumPageFilesW';
  794. {$ENDIF DYNAMIC_LINK}
  795. {$ELSE}
  796. {$IFDEF DYNAMIC_LINK}
  797. var
  798.   _EnumPageFiles: Pointer;
  799. function EnumPageFiles;
  800. begin
  801.   GetProcedureAddress(_EnumPageFiles, PsapiLib, 'EnumPageFilesA');
  802.   asm
  803.     mov esp, ebp
  804.     pop ebp
  805.     jmp [_EnumPageFiles]
  806.   end;
  807. end;
  808. {$ELSE}
  809. function EnumPageFiles; external PsapiLib name 'EnumPageFilesA';
  810. {$ENDIF DYNAMIC_LINK}
  811. {$ENDIF}
  812. {$IFDEF DYNAMIC_LINK}
  813. var
  814.   _GetProcessImageFileNameA: Pointer;
  815. function GetProcessImageFileNameA;
  816. begin
  817.   GetProcedureAddress(_GetProcessImageFileNameA, PsapiLib, 'GetProcessImageFileNameA');
  818.   asm
  819.     mov esp, ebp
  820.     pop ebp
  821.     jmp [_GetProcessImageFileNameA]
  822.   end;
  823. end;
  824. {$ELSE}
  825. function GetProcessImageFileNameA; external PsapiLib name 'GetProcessImageFileNameA';
  826. {$ENDIF DYNAMIC_LINK}
  827. {$IFDEF DYNAMIC_LINK}
  828. var
  829.   _GetProcessImageFileNameW: Pointer;
  830. function GetProcessImageFileNameW;
  831. begin
  832.   GetProcedureAddress(_GetProcessImageFileNameW, PsapiLib, 'GetProcessImageFileNameW');
  833.   asm
  834.     mov esp, ebp
  835.     pop ebp
  836.     jmp [_GetProcessImageFileNameW]
  837.   end;
  838. end;
  839. {$ELSE}
  840. function GetProcessImageFileNameW; external PsapiLib name 'GetProcessImageFileNameW';
  841. {$ENDIF DYNAMIC_LINK}
  842. {$IFDEF UNICODE}
  843. {$IFDEF DYNAMIC_LINK}
  844. var
  845.   _GetProcessImageFileName: Pointer;
  846. function GetProcessImageFileName;
  847. begin
  848.   GetProcedureAddress(_GetProcessImageFileName, PsapiLib, 'GetProcessImageFileNameW');
  849.   asm
  850.     mov esp, ebp
  851.     pop ebp
  852.     jmp [_GetProcessImageFileName]
  853.   end;
  854. end;
  855. {$ELSE}
  856. function GetProcessImageFileName; external PsapiLib name 'GetProcessImageFileNameW';
  857. {$ENDIF DYNAMIC_LINK}
  858. {$ELSE}
  859. {$IFDEF DYNAMIC_LINK}
  860. var
  861.   _GetProcessImageFileName: Pointer;
  862. function GetProcessImageFileName;
  863. begin
  864.   GetProcedureAddress(_GetProcessImageFileName, PsapiLib, 'GetProcessImageFileNameA');
  865.   asm
  866.     mov esp, ebp
  867.     pop ebp
  868.     jmp [_GetProcessImageFileName]
  869.   end;
  870. end;
  871. {$ELSE}
  872. function GetProcessImageFileName; external PsapiLib name 'GetProcessImageFileNameA';
  873. {$ENDIF DYNAMIC_LINK}
  874. {$ENDIF}
  875. end.