home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / Runimage / Cbuilder4 / Source / Vcl / PSAPI.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-01-26  |  16.3 KB  |  427 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Run-time Library                 }
  5. {       WinNT process API interface unit                }
  6. {                                                       }
  7. {       Copyright (c) 1998 Inprise Corporation          }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit Psapi;
  12.  
  13. interface
  14.  
  15. {$WEAKPACKAGEUNIT}
  16.  
  17. uses Windows;
  18.  
  19. {$HPPEMIT '#include <psapi.h>'}
  20.  
  21. type
  22.   PPointer = ^Pointer;
  23.  
  24.   TEnumProcesses = function (lpidProcess: LPDWORD; cb: DWORD; var cbNeeded: DWORD): BOOL stdcall;
  25.   TEnumProcessModules = function (hProcess: THandle; lphModule: LPDWORD; cb: DWORD;
  26.     var lpcbNeeded: DWORD): BOOL stdcall;
  27.   TGetModuleBaseNameA = function (hProcess: THandle; hModule: HMODULE;
  28.     lpBaseName: PAnsiChar; nSize: DWORD): DWORD stdcall;
  29.   TGetModuleBaseNameW = function (hProcess: THandle; hModule: HMODULE;
  30.     lpBaseName: PWideChar; nSize: DWORD): DWORD stdcall;
  31.   TGetModuleBaseName = TGetModuleBaseNameA;
  32.   TGetModuleFileNameExA = function (hProcess: THandle; hModule: HMODULE;
  33.     lpFilename: PAnsiChar; nSize: DWORD): DWORD stdcall;
  34.   TGetModuleFileNameExW = function (hProcess: THandle; hModule: HMODULE;
  35.     lpFilename: PWideChar; nSize: DWORD): DWORD stdcall;
  36.   TGetModuleFileNameEx = TGetModuleFileNameExA;
  37.  
  38.   {$EXTERNALSYM _MODULEINFO}
  39.   _MODULEINFO = packed record
  40.     lpBaseOfDll: Pointer;
  41.     SizeOfImage: DWORD;
  42.     EntryPoint: Pointer;
  43.   end;
  44.   {$EXTERNALSYM MODULEINFO}
  45.   MODULEINFO = _MODULEINFO;
  46.   {$EXTERNALSYM LPMODULEINFO}
  47.   LPMODULEINFO = ^_MODULEINFO;
  48.   TModuleInfo = _MODULEINFO;
  49.   PModuleInfo = LPMODULEINFO;
  50.  
  51.   TGetModuleInformation = function (hProcess: THandle; hModule: HMODULE;
  52.     lpmodinfo: LPMODULEINFO; cb: DWORD): BOOL stdcall;
  53.   TEmptyWorkingSet = function (hProcess: THandle): BOOL stdcall;
  54.   TQueryWorkingSet = function (hProcess: THandle; pv: Pointer; cb: DWORD): BOOL stdcall;
  55.   TInitializeProcessForWsWatch = function (hProcess: THandle): BOOL stdcall;
  56.  
  57.   {$EXTERNALSYM _PSAPI_WS_WATCH_INFORMATION}
  58.   _PSAPI_WS_WATCH_INFORMATION = packed record
  59.     FaultingPc: Pointer;
  60.     FaultingVa: Pointer;
  61.   end;
  62.   {$EXTERNALSYM PSAPI_WS_WATCH_INFORMATION}
  63.   PSAPI_WS_WATCH_INFORMATION = _PSAPI_WS_WATCH_INFORMATION;
  64.   {$EXTERNALSYM PPSAPI_WS_WATCH_INFORMATION}
  65.   PPSAPI_WS_WATCH_INFORMATION = ^_PSAPI_WS_WATCH_INFORMATION;
  66.   TPSAPIWsWatchInformation = _PSAPI_WS_WATCH_INFORMATION;
  67.   PPSAPIWsWatchInformation = PPSAPI_WS_WATCH_INFORMATION;
  68.  
  69.   TGetWsChanges = function (hProcess: THandle; lpWatchInfo: PPSAPI_WS_WATCH_INFORMATION;
  70.     cb: DWORD): BOOL stdcall;
  71.  
  72.   TGetMappedFileNameA = function (hProcess: THandle; lpv: Pointer;
  73.     lpFilename: PAnsiChar; nSize: DWORD): DWORD stdcall;
  74.   TGetMappedFileNameW = function (hProcess: THandle; lpv: Pointer;
  75.     lpFilename: PWideChar; nSize: DWORD): DWORD stdcall;
  76.   TGetMappedFileName = TGetMappedFileNameA;
  77.   TGetDeviceDriverBaseNameA = function (ImageBase: Pointer; lpBaseName: PAnsiChar;
  78.     nSize: DWORD): DWORD stdcall;
  79.   TGetDeviceDriverBaseNameW = function (ImageBase: Pointer; lpBaseName: PWideChar;
  80.     nSize: DWORD): DWORD stdcall;
  81.   TGetDeviceDriverBaseName = TGetDeviceDriverBaseNameA;
  82.   TGetDeviceDriverFileNameA = function (ImageBase: Pointer; lpFileName: PAnsiChar;
  83.     nSize: DWORD): DWORD stdcall;
  84.   TGetDeviceDriverFileNameW = function (ImageBase: Pointer; lpFileName: PWideChar;
  85.     nSize: DWORD): DWORD stdcall;
  86.   TGetDeviceDriverFileName = TGetDeviceDriverFileNameA;
  87.  
  88.   TEnumDeviceDrivers = function (lpImageBase: PPointer; cb: DWORD;
  89.     var lpcbNeeded: DWORD): BOOL stdcall;
  90.  
  91.   {$EXTERNALSYM _PROCESS_MEMORY_COUNTERS}
  92.   _PROCESS_MEMORY_COUNTERS = packed record
  93.     cb: DWORD;
  94.     PageFaultCount: DWORD;
  95.     PeakWorkingSetSize: DWORD;
  96.     WorkingSetSize: DWORD;
  97.     QuotaPeakPagedPoolUsage: DWORD;
  98.     QuotaPagedPoolUsage: DWORD;
  99.     QuotaPeakNonPagedPoolUsage: DWORD;
  100.     QuotaNonPagedPoolUsage: DWORD;
  101.     PagefileUsage: DWORD;
  102.     PeakPagefileUsage: DWORD;
  103.   end;
  104.   {$EXTERNALSYM PROCESS_MEMORY_COUNTERS}
  105.   PROCESS_MEMORY_COUNTERS = _PROCESS_MEMORY_COUNTERS;
  106.   {$EXTERNALSYM PPROCESS_MEMORY_COUNTERS}
  107.   PPROCESS_MEMORY_COUNTERS = ^_PROCESS_MEMORY_COUNTERS;
  108.   TProcessMemoryCounters = _PROCESS_MEMORY_COUNTERS;
  109.   PProcessMemoryCounters = ^_PROCESS_MEMORY_COUNTERS;
  110.  
  111.   TGetProcessMemoryInfo = function (Process: THandle;
  112.     ppsmemCounters: PPROCESS_MEMORY_COUNTERS; cb: DWORD): BOOL stdcall;
  113.  
  114. {$EXTERNALSYM EnumProcesses}
  115. function EnumProcesses(lpidProcess: LPDWORD; cb: DWORD; var cbNeeded: DWORD): BOOL;
  116. {$EXTERNALSYM EnumProcessModules}
  117. function EnumProcessModules(hProcess: THandle; lphModule: LPDWORD; cb: DWORD;
  118.   var lpcbNeeded: DWORD): BOOL;
  119. {$EXTERNALSYM GetModuleBaseNameA}
  120. function GetModuleBaseNameA(hProcess: THandle; hModule: HMODULE;
  121.   lpBaseName: PAnsiChar; nSize: DWORD): DWORD;
  122. {$EXTERNALSYM GetModuleBaseNameW}
  123. function GetModuleBaseNameW(hProcess: THandle; hModule: HMODULE;
  124.   lpBaseName: PWideChar; nSize: DWORD): DWORD;
  125. {$EXTERNALSYM GetModuleBaseName}
  126. function GetModuleBaseName(hProcess: THandle; hModule: HMODULE;
  127.   lpBaseName: PChar; nSize: DWORD): DWORD;
  128. {$EXTERNALSYM GetModuleFileNameExA}
  129. function GetModuleFileNameExA(hProcess: THandle; hModule: HMODULE;
  130.   lpFilename: PAnsiChar; nSize: DWORD): DWORD;
  131. {$EXTERNALSYM GetModuleFileNameExW}
  132. function GetModuleFileNameExW(hProcess: THandle; hModule: HMODULE;
  133.   lpFilename: PWideChar; nSize: DWORD): DWORD;
  134. {$EXTERNALSYM GetModuleFileNameEx}
  135. function GetModuleFileNameEx(hProcess: THandle; hModule: HMODULE;
  136.   lpFilename: PChar; nSize: DWORD): DWORD;
  137. {$EXTERNALSYM GetModuleInformation}
  138. function GetModuleInformation(hProcess: THandle; hModule: HMODULE;
  139.   lpmodinfo: LPMODULEINFO; cb: DWORD): BOOL;
  140. {$EXTERNALSYM EmptyWorkingSet}
  141. function EmptyWorkingSet(hProcess: THandle): BOOL;
  142. {$EXTERNALSYM QueryWorkingSet}
  143. function QueryWorkingSet(hProcess: THandle; pv: Pointer; cb: DWORD): BOOL;
  144. {$EXTERNALSYM InitializeProcessForWsWatch}
  145. function InitializeProcessForWsWatch(hProcess: THandle): BOOL;
  146. {$EXTERNALSYM GetMappedFileNameA}
  147. function GetMappedFileNameA(hProcess: THandle; lpv: Pointer;
  148.   lpFilename: PAnsiChar; nSize: DWORD): DWORD;
  149. {$EXTERNALSYM GetMappedFileNameW}
  150. function GetMappedFileNameW(hProcess: THandle; lpv: Pointer;
  151.   lpFilename: PWideChar; nSize: DWORD): DWORD;
  152. {$EXTERNALSYM GetMappedFileName}
  153. function GetMappedFileName(hProcess: THandle; lpv: Pointer;
  154.   lpFilename: PChar; nSize: DWORD): DWORD;
  155. {$EXTERNALSYM GetDeviceDriverBaseNameA}
  156. function GetDeviceDriverBaseNameA(ImageBase: Pointer; lpBaseName: PAnsiChar;
  157.   nSize: DWORD): DWORD;
  158. {$EXTERNALSYM GetDeviceDriverBaseNameW}
  159. function GetDeviceDriverBaseNameW(ImageBase: Pointer; lpBaseName: PWideChar;
  160.   nSize: DWORD): DWORD;
  161. {$EXTERNALSYM GetDeviceDriverBaseName}
  162. function GetDeviceDriverBaseName(ImageBase: Pointer; lpBaseName: PChar;
  163.   nSize: DWORD): DWORD;
  164. {$EXTERNALSYM GetDeviceDriverFileNameA}
  165. function GetDeviceDriverFileNameA(ImageBase: Pointer; lpFileName: PAnsiChar;
  166.   nSize: DWORD): DWORD;
  167. {$EXTERNALSYM GetDeviceDriverFileNameW}
  168. function GetDeviceDriverFileNameW(ImageBase: Pointer; lpFileName: PWideChar;
  169.   nSize: DWORD): DWORD;
  170. {$EXTERNALSYM GetDeviceDriverFileName}
  171. function GetDeviceDriverFileName(ImageBase: Pointer; lpFileName: PChar;
  172.   nSize: DWORD): DWORD;
  173. {$EXTERNALSYM EnumDeviceDrivers}
  174. function EnumDeviceDrivers(lpImageBase: PPointer; cb: DWORD;
  175.   var lpcbNeeded: DWORD): BOOL;
  176. {$EXTERNALSYM GetProcessMemoryInfo}
  177. function GetProcessMemoryInfo(Process: THandle;
  178.   ppsmemCounters: PPROCESS_MEMORY_COUNTERS; cb: DWORD): BOOL;
  179.  
  180. implementation
  181.  
  182. var
  183.   hPSAPI: THandle;
  184.   _EnumProcesses: TEnumProcesses;
  185.   _EnumProcessModules: TEnumProcessModules;
  186.   {procedure}_GetModuleBaseNameA: TGetModuleBaseNameA;
  187.   {procedure}_GetModuleFileNameExA: TGetModuleFileNameExA;
  188.   {procedure}_GetModuleBaseNameW: TGetModuleBaseNameW;
  189.   {procedure}_GetModuleFileNameExW: TGetModuleFileNameExW;
  190.   {procedure}_GetModuleBaseName: TGetModuleBaseNameA;
  191.   {procedure}_GetModuleFileNameEx: TGetModuleFileNameExA;
  192.   _GetModuleInformation: TGetModuleInformation;
  193.   _EmptyWorkingSet: TEmptyWorkingSet;
  194.   _QueryWorkingSet: TQueryWorkingSet;
  195.   _InitializeProcessForWsWatch: TInitializeProcessForWsWatch;
  196.   {procedure}_GetMappedFileNameA: TGetMappedFileNameA;
  197.   {procedure}_GetDeviceDriverBaseNameA: TGetDeviceDriverBaseNameA;
  198.   {procedure}_GetDeviceDriverFileNameA: TGetDeviceDriverFileNameA;
  199.   {procedure}_GetMappedFileNameW: TGetMappedFileNameW;
  200.   {procedure}_GetDeviceDriverBaseNameW: TGetDeviceDriverBaseNameW;
  201.   {procedure}_GetDeviceDriverFileNameW: TGetDeviceDriverFileNameW;
  202.   {procedure}_GetMappedFileName: TGetMappedFileNameA;
  203.   {procedure}_GetDeviceDriverBaseName: TGetDeviceDriverBaseNameA;
  204.   {procedure}_GetDeviceDriverFileName: TGetDeviceDriverFileNameA;
  205.   _EnumDeviceDrivers: TEnumDeviceDrivers;
  206.   _GetProcessMemoryInfo: TGetProcessMemoryInfo;
  207.  
  208. function CheckPSAPILoaded: Boolean;
  209. begin
  210.   if hPSAPI = 0 then
  211.   begin
  212.     hPSAPI := LoadLibrary('PSAPI.dll');
  213.     if hPSAPI < 32 then
  214.     begin
  215.       hPSAPI := 0;
  216.       Result := False;
  217.       Exit;
  218.     end;
  219.     @_EnumProcesses := GetProcAddress(hPSAPI, 'EnumProcesses');
  220.     @_EnumProcessModules := GetProcAddress(hPSAPI, 'EnumProcessModules');
  221.     {procedure}@_GetModuleBaseNameA := GetProcAddress(hPSAPI, 'GetModuleBaseNameA');
  222.     {procedure}@_GetModuleFileNameExA := GetProcAddress(hPSAPI, 'GetModuleFileNameExA');
  223.     {procedure}@_GetModuleBaseNameW := GetProcAddress(hPSAPI, 'GetModuleBaseNameW');
  224.     {procedure}@_GetModuleFileNameExW := GetProcAddress(hPSAPI, 'GetModuleFileNameExW');
  225.     {procedure}@_GetModuleBaseName := GetProcAddress(hPSAPI, 'GetModuleBaseNameA');
  226.     {procedure}@_GetModuleFileNameEx := GetProcAddress(hPSAPI, 'GetModuleFileNameExA');
  227.     @_GetModuleInformation := GetProcAddress(hPSAPI, 'GetModuleInformation');
  228.     @_EmptyWorkingSet := GetProcAddress(hPSAPI, 'EmptyWorkingSet');
  229.     @_QueryWorkingSet := GetProcAddress(hPSAPI, 'QueryWorkingSet');
  230.     @_InitializeProcessForWsWatch := GetProcAddress(hPSAPI, 'InitializeProcessForWsWatch');
  231.     {procedure}@_GetMappedFileNameA := GetProcAddress(hPSAPI, 'GetMappedFileNameA');
  232.     {procedure}@_GetDeviceDriverBaseNameA := GetProcAddress(hPSAPI, 'GetDeviceDriverBaseNameA');
  233.     {procedure}@_GetDeviceDriverFileNameA := GetProcAddress(hPSAPI, 'GetDeviceDriverFileNameA');
  234.     {procedure}@_GetMappedFileNameW := GetProcAddress(hPSAPI, 'GetMappedFileNameW');
  235.     {procedure}@_GetDeviceDriverBaseNameW := GetProcAddress(hPSAPI, 'GetDeviceDriverBaseNameW');
  236.     {procedure}@_GetDeviceDriverFileNameW := GetProcAddress(hPSAPI, 'GetDeviceDriverFileNameW');
  237.     {procedure}@_GetMappedFileName := GetProcAddress(hPSAPI, 'GetMappedFileNameA');
  238.     {procedure}@_GetDeviceDriverBaseName := GetProcAddress(hPSAPI, 'GetDeviceDriverBaseNameA');
  239.     {procedure}@_GetDeviceDriverFileName := GetProcAddress(hPSAPI, 'GetDeviceDriverFileNameA');
  240.     @_EnumDeviceDrivers := GetProcAddress(hPSAPI, 'EnumDeviceDrivers');
  241.     @_GetProcessMemoryInfo := GetProcAddress(hPSAPI, 'GetProcessMemoryInfo');
  242.   end;
  243.   Result := True;
  244. end;
  245.  
  246. function EnumProcesses(lpidProcess: LPDWORD; cb: DWORD; var cbNeeded: DWORD): BOOL;
  247. begin
  248.   if CheckPSAPILoaded then
  249.     Result := _EnumProcesses(lpidProcess, cb, cbNeeded)
  250.   else Result := False;
  251. end;
  252.  
  253. function EnumProcessModules(hProcess: THandle; lphModule: LPDWORD; cb: DWORD;
  254.   var lpcbNeeded: DWORD): BOOL;
  255. begin
  256.   if CheckPSAPILoaded then
  257.     Result := _EnumProcessModules(hProcess, lphModule, cb, lpcbNeeded)
  258.   else Result := False;
  259. end;
  260.  
  261. function GetModuleBaseNameA(hProcess: THandle; hModule: HMODULE;
  262.   lpBaseName: PAnsiChar; nSize: DWORD): DWORD;
  263. begin
  264.   if CheckPSAPILoaded then
  265.     Result := _GetModuleBaseNameA(hProcess, hModule, lpBaseName, nSize)
  266.   else Result := 0;
  267. end;
  268.  
  269. function GetModuleBaseNameW(hProcess: THandle; hModule: HMODULE;
  270.   lpBaseName: PWideChar; nSize: DWORD): DWORD;
  271. begin
  272.   if CheckPSAPILoaded then
  273.     Result := _GetModuleBaseNameW(hProcess, hModule, lpBaseName, nSize)
  274.   else Result := 0;
  275. end;
  276.  
  277. function GetModuleBaseName(hProcess: THandle; hModule: HMODULE;
  278.   lpBaseName: PChar; nSize: DWORD): DWORD;
  279. begin
  280.   if CheckPSAPILoaded then
  281.     Result := _GetModuleBaseName(hProcess, hModule, lpBaseName, nSize)
  282.   else Result := 0;
  283. end;
  284.  
  285. function GetModuleFileNameExA(hProcess: THandle; hModule: HMODULE;
  286.   lpFilename: PAnsiChar; nSize: DWORD): DWORD;
  287. begin
  288.   if CheckPSAPILoaded then
  289.     Result := _GetModuleFileNameExA(hProcess, hModule, lpFileName, nSize)
  290.   else Result := 0;
  291. end;
  292.  
  293. function GetModuleFileNameExW(hProcess: THandle; hModule: HMODULE;
  294.   lpFilename: PWideChar; nSize: DWORD): DWORD;
  295. begin
  296.   if CheckPSAPILoaded then
  297.     Result := _GetModuleFileNameExW(hProcess, hModule, lpFileName, nSize)
  298.   else Result := 0;
  299. end;
  300.  
  301. function GetModuleFileNameEx(hProcess: THandle; hModule: HMODULE;
  302.   lpFilename: PChar; nSize: DWORD): DWORD;
  303. begin
  304.   if CheckPSAPILoaded then
  305.     Result := _GetModuleFileNameEx(hProcess, hModule, lpFileName, nSize)
  306.   else Result := 0;
  307. end;
  308.  
  309. function GetModuleInformation(hProcess: THandle; hModule: HMODULE;
  310.   lpmodinfo: LPMODULEINFO; cb: DWORD): BOOL;
  311. begin
  312.   if CheckPSAPILoaded then
  313.     Result := _GetModuleInformation(hProcess, hModule, lpmodinfo, cb)
  314.   else Result := False;
  315. end;
  316.  
  317. function EmptyWorkingSet(hProcess: THandle): BOOL;
  318. begin
  319.   if CheckPSAPILoaded then
  320.     Result := _EmptyWorkingSet(hProcess)
  321.   else Result := False;
  322. end;
  323.  
  324. function QueryWorkingSet(hProcess: THandle; pv: Pointer; cb: DWORD): BOOL;
  325. begin
  326.   if CheckPSAPILoaded then
  327.     Result := _QueryWorkingSet(hProcess, pv, cb)
  328.   else Result := False;
  329. end;
  330.  
  331. function InitializeProcessForWsWatch(hProcess: THandle): BOOL;
  332. begin
  333.   if CheckPSAPILoaded then
  334.     Result := _InitializeProcessForWsWatch(hProcess)
  335.   else Result := False;
  336. end;
  337.  
  338. function GetMappedFileNameA(hProcess: THandle; lpv: Pointer;
  339.   lpFilename: PAnsiChar; nSize: DWORD): DWORD;
  340. begin
  341.   if CheckPSAPILoaded then
  342.     Result := _GetMappedFileNameA(hProcess, lpv, lpFileName, nSize)
  343.   else Result := 0;
  344. end;
  345.  
  346. function GetMappedFileNameW(hProcess: THandle; lpv: Pointer;
  347.   lpFilename: PWideChar; nSize: DWORD): DWORD;
  348. begin
  349.   if CheckPSAPILoaded then
  350.     Result := _GetMappedFileNameW(hProcess, lpv, lpFileName, nSize)
  351.   else Result := 0;
  352. end;
  353.  
  354. function GetMappedFileName(hProcess: THandle; lpv: Pointer;
  355.   lpFilename: PChar; nSize: DWORD): DWORD;
  356. begin
  357.   if CheckPSAPILoaded then
  358.     Result := _GetMappedFileName(hProcess, lpv, lpFileName, nSize)
  359.   else Result := 0;
  360. end;
  361.  
  362. function GetDeviceDriverBaseNameA(ImageBase: Pointer; lpBaseName: PAnsiChar;
  363.   nSize: DWORD): DWORD;
  364. begin
  365.   if CheckPSAPILoaded then
  366.     Result := _GetDeviceDriverBasenameA(ImageBase, lpBaseName, nSize)
  367.   else Result := 0;
  368. end;
  369.  
  370. function GetDeviceDriverBaseNameW(ImageBase: Pointer; lpBaseName: PWideChar;
  371.   nSize: DWORD): DWORD;
  372. begin
  373.   if CheckPSAPILoaded then
  374.     Result := _GetDeviceDriverBasenameW(ImageBase, lpBaseName, nSize)
  375.   else Result := 0;
  376. end;
  377.  
  378. function GetDeviceDriverBaseName(ImageBase: Pointer; lpBaseName: PChar;
  379.   nSize: DWORD): DWORD;
  380. begin
  381.   if CheckPSAPILoaded then
  382.     Result := _GetDeviceDriverBasename(ImageBase, lpBaseName, nSize)
  383.   else Result := 0;
  384. end;
  385.  
  386. function GetDeviceDriverFileNameA(ImageBase: Pointer; lpFileName: PAnsiChar;
  387.   nSize: DWORD): DWORD;
  388. begin
  389.   if CheckPSAPILoaded then
  390.     Result := _GetDeviceDriverFileNameA(ImageBase, lpFileName, nSize)
  391.   else Result := 0;
  392. end;
  393.  
  394. function GetDeviceDriverFileNameW(ImageBase: Pointer; lpFileName: PWideChar;
  395.   nSize: DWORD): DWORD;
  396. begin
  397.   if CheckPSAPILoaded then
  398.     Result := _GetDeviceDriverFileNameW(ImageBase, lpFileName, nSize)
  399.   else Result := 0;
  400. end;
  401.  
  402. function GetDeviceDriverFileName(ImageBase: Pointer; lpFileName: PChar;
  403.   nSize: DWORD): DWORD;
  404. begin
  405.   if CheckPSAPILoaded then
  406.     Result := _GetDeviceDriverFileName(ImageBase, lpFileName, nSize)
  407.   else Result := 0;
  408. end;
  409.  
  410. function EnumDeviceDrivers(lpImageBase: PPointer; cb: DWORD;
  411.   var lpcbNeeded: DWORD): BOOL;
  412. begin
  413.   if CheckPSAPILoaded then
  414.     Result := _EnumDeviceDrivers(lpImageBase, cb, lpcbNeeded)
  415.   else Result := False;
  416. end;
  417.  
  418. function GetProcessMemoryInfo(Process: THandle;
  419.   ppsmemCounters: PPROCESS_MEMORY_COUNTERS; cb: DWORD): BOOL;
  420. begin
  421.   if CheckPSAPILoaded then
  422.     Result := _GetProcessMemoryInfo(Process, ppsmemCounters, cb)
  423.   else Result := False;
  424. end;
  425.  
  426. end.
  427.