home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Plus! (NZ) 2001 June
/
HDC50.iso
/
Runimage
/
Delphi50
/
Source
/
Rtl
/
Win
/
PSAPI.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1999-08-11
|
17KB
|
429 lines
{*******************************************************}
{ }
{ Borland Delphi Run-time Library }
{ WinNT process API Interface Unit }
{ }
{ Copyright (c) 1985-1999, Microsoft Corporation }
{ }
{ Translator: Inprise Corporation }
{ }
{*******************************************************}
unit Psapi;
interface
{$WEAKPACKAGEUNIT}
uses Windows;
{$HPPEMIT '#include <psapi.h>'}
type
PPointer = ^Pointer;
TEnumProcesses = function (lpidProcess: LPDWORD; cb: DWORD; var cbNeeded: DWORD): BOOL stdcall;
TEnumProcessModules = function (hProcess: THandle; lphModule: LPDWORD; cb: DWORD;
var lpcbNeeded: DWORD): BOOL stdcall;
TGetModuleBaseNameA = function (hProcess: THandle; hModule: HMODULE;
lpBaseName: PAnsiChar; nSize: DWORD): DWORD stdcall;
TGetModuleBaseNameW = function (hProcess: THandle; hModule: HMODULE;
lpBaseName: PWideChar; nSize: DWORD): DWORD stdcall;
TGetModuleBaseName = TGetModuleBaseNameA;
TGetModuleFileNameExA = function (hProcess: THandle; hModule: HMODULE;
lpFilename: PAnsiChar; nSize: DWORD): DWORD stdcall;
TGetModuleFileNameExW = function (hProcess: THandle; hModule: HMODULE;
lpFilename: PWideChar; nSize: DWORD): DWORD stdcall;
TGetModuleFileNameEx = TGetModuleFileNameExA;
{$EXTERNALSYM _MODULEINFO}
_MODULEINFO = packed record
lpBaseOfDll: Pointer;
SizeOfImage: DWORD;
EntryPoint: Pointer;
end;
{$EXTERNALSYM MODULEINFO}
MODULEINFO = _MODULEINFO;
{$EXTERNALSYM LPMODULEINFO}
LPMODULEINFO = ^_MODULEINFO;
TModuleInfo = _MODULEINFO;
PModuleInfo = LPMODULEINFO;
TGetModuleInformation = function (hProcess: THandle; hModule: HMODULE;
lpmodinfo: LPMODULEINFO; cb: DWORD): BOOL stdcall;
TEmptyWorkingSet = function (hProcess: THandle): BOOL stdcall;
TQueryWorkingSet = function (hProcess: THandle; pv: Pointer; cb: DWORD): BOOL stdcall;
TInitializeProcessForWsWatch = function (hProcess: THandle): BOOL stdcall;
{$EXTERNALSYM _PSAPI_WS_WATCH_INFORMATION}
_PSAPI_WS_WATCH_INFORMATION = packed record
FaultingPc: Pointer;
FaultingVa: Pointer;
end;
{$EXTERNALSYM PSAPI_WS_WATCH_INFORMATION}
PSAPI_WS_WATCH_INFORMATION = _PSAPI_WS_WATCH_INFORMATION;
{$EXTERNALSYM PPSAPI_WS_WATCH_INFORMATION}
PPSAPI_WS_WATCH_INFORMATION = ^_PSAPI_WS_WATCH_INFORMATION;
TPSAPIWsWatchInformation = _PSAPI_WS_WATCH_INFORMATION;
PPSAPIWsWatchInformation = PPSAPI_WS_WATCH_INFORMATION;
TGetWsChanges = function (hProcess: THandle; lpWatchInfo: PPSAPI_WS_WATCH_INFORMATION;
cb: DWORD): BOOL stdcall;
TGetMappedFileNameA = function (hProcess: THandle; lpv: Pointer;
lpFilename: PAnsiChar; nSize: DWORD): DWORD stdcall;
TGetMappedFileNameW = function (hProcess: THandle; lpv: Pointer;
lpFilename: PWideChar; nSize: DWORD): DWORD stdcall;
TGetMappedFileName = TGetMappedFileNameA;
TGetDeviceDriverBaseNameA = function (ImageBase: Pointer; lpBaseName: PAnsiChar;
nSize: DWORD): DWORD stdcall;
TGetDeviceDriverBaseNameW = function (ImageBase: Pointer; lpBaseName: PWideChar;
nSize: DWORD): DWORD stdcall;
TGetDeviceDriverBaseName = TGetDeviceDriverBaseNameA;
TGetDeviceDriverFileNameA = function (ImageBase: Pointer; lpFileName: PAnsiChar;
nSize: DWORD): DWORD stdcall;
TGetDeviceDriverFileNameW = function (ImageBase: Pointer; lpFileName: PWideChar;
nSize: DWORD): DWORD stdcall;
TGetDeviceDriverFileName = TGetDeviceDriverFileNameA;
TEnumDeviceDrivers = function (lpImageBase: PPointer; cb: DWORD;
var lpcbNeeded: DWORD): BOOL stdcall;
{$EXTERNALSYM _PROCESS_MEMORY_COUNTERS}
_PROCESS_MEMORY_COUNTERS = packed record
cb: DWORD;
PageFaultCount: DWORD;
PeakWorkingSetSize: DWORD;
WorkingSetSize: DWORD;
QuotaPeakPagedPoolUsage: DWORD;
QuotaPagedPoolUsage: DWORD;
QuotaPeakNonPagedPoolUsage: DWORD;
QuotaNonPagedPoolUsage: DWORD;
PagefileUsage: DWORD;
PeakPagefileUsage: DWORD;
end;
{$EXTERNALSYM PROCESS_MEMORY_COUNTERS}
PROCESS_MEMORY_COUNTERS = _PROCESS_MEMORY_COUNTERS;
{$EXTERNALSYM PPROCESS_MEMORY_COUNTERS}
PPROCESS_MEMORY_COUNTERS = ^_PROCESS_MEMORY_COUNTERS;
TProcessMemoryCounters = _PROCESS_MEMORY_COUNTERS;
PProcessMemoryCounters = ^_PROCESS_MEMORY_COUNTERS;
TGetProcessMemoryInfo = function (Process: THandle;
ppsmemCounters: PPROCESS_MEMORY_COUNTERS; cb: DWORD): BOOL stdcall;
{$EXTERNALSYM EnumProcesses}
function EnumProcesses(lpidProcess: LPDWORD; cb: DWORD; var cbNeeded: DWORD): BOOL;
{$EXTERNALSYM EnumProcessModules}
function EnumProcessModules(hProcess: THandle; lphModule: LPDWORD; cb: DWORD;
var lpcbNeeded: DWORD): BOOL;
{$EXTERNALSYM GetModuleBaseNameA}
function GetModuleBaseNameA(hProcess: THandle; hModule: HMODULE;
lpBaseName: PAnsiChar; nSize: DWORD): DWORD;
{$EXTERNALSYM GetModuleBaseNameW}
function GetModuleBaseNameW(hProcess: THandle; hModule: HMODULE;
lpBaseName: PWideChar; nSize: DWORD): DWORD;
{$EXTERNALSYM GetModuleBaseName}
function GetModuleBaseName(hProcess: THandle; hModule: HMODULE;
lpBaseName: PChar; nSize: DWORD): DWORD;
{$EXTERNALSYM GetModuleFileNameExA}
function GetModuleFileNameExA(hProcess: THandle; hModule: HMODULE;
lpFilename: PAnsiChar; nSize: DWORD): DWORD;
{$EXTERNALSYM GetModuleFileNameExW}
function GetModuleFileNameExW(hProcess: THandle; hModule: HMODULE;
lpFilename: PWideChar; nSize: DWORD): DWORD;
{$EXTERNALSYM GetModuleFileNameEx}
function GetModuleFileNameEx(hProcess: THandle; hModule: HMODULE;
lpFilename: PChar; nSize: DWORD): DWORD;
{$EXTERNALSYM GetModuleInformation}
function GetModuleInformation(hProcess: THandle; hModule: HMODULE;
lpmodinfo: LPMODULEINFO; cb: DWORD): BOOL;
{$EXTERNALSYM EmptyWorkingSet}
function EmptyWorkingSet(hProcess: THandle): BOOL;
{$EXTERNALSYM QueryWorkingSet}
function QueryWorkingSet(hProcess: THandle; pv: Pointer; cb: DWORD): BOOL;
{$EXTERNALSYM InitializeProcessForWsWatch}
function InitializeProcessForWsWatch(hProcess: THandle): BOOL;
{$EXTERNALSYM GetMappedFileNameA}
function GetMappedFileNameA(hProcess: THandle; lpv: Pointer;
lpFilename: PAnsiChar; nSize: DWORD): DWORD;
{$EXTERNALSYM GetMappedFileNameW}
function GetMappedFileNameW(hProcess: THandle; lpv: Pointer;
lpFilename: PWideChar; nSize: DWORD): DWORD;
{$EXTERNALSYM GetMappedFileName}
function GetMappedFileName(hProcess: THandle; lpv: Pointer;
lpFilename: PChar; nSize: DWORD): DWORD;
{$EXTERNALSYM GetDeviceDriverBaseNameA}
function GetDeviceDriverBaseNameA(ImageBase: Pointer; lpBaseName: PAnsiChar;
nSize: DWORD): DWORD;
{$EXTERNALSYM GetDeviceDriverBaseNameW}
function GetDeviceDriverBaseNameW(ImageBase: Pointer; lpBaseName: PWideChar;
nSize: DWORD): DWORD;
{$EXTERNALSYM GetDeviceDriverBaseName}
function GetDeviceDriverBaseName(ImageBase: Pointer; lpBaseName: PChar;
nSize: DWORD): DWORD;
{$EXTERNALSYM GetDeviceDriverFileNameA}
function GetDeviceDriverFileNameA(ImageBase: Pointer; lpFileName: PAnsiChar;
nSize: DWORD): DWORD;
{$EXTERNALSYM GetDeviceDriverFileNameW}
function GetDeviceDriverFileNameW(ImageBase: Pointer; lpFileName: PWideChar;
nSize: DWORD): DWORD;
{$EXTERNALSYM GetDeviceDriverFileName}
function GetDeviceDriverFileName(ImageBase: Pointer; lpFileName: PChar;
nSize: DWORD): DWORD;
{$EXTERNALSYM EnumDeviceDrivers}
function EnumDeviceDrivers(lpImageBase: PPointer; cb: DWORD;
var lpcbNeeded: DWORD): BOOL;
{$EXTERNALSYM GetProcessMemoryInfo}
function GetProcessMemoryInfo(Process: THandle;
ppsmemCounters: PPROCESS_MEMORY_COUNTERS; cb: DWORD): BOOL;
implementation
var
hPSAPI: THandle;
_EnumProcesses: TEnumProcesses;
_EnumProcessModules: TEnumProcessModules;
{procedure}_GetModuleBaseNameA: TGetModuleBaseNameA;
{procedure}_GetModuleFileNameExA: TGetModuleFileNameExA;
{procedure}_GetModuleBaseNameW: TGetModuleBaseNameW;
{procedure}_GetModuleFileNameExW: TGetModuleFileNameExW;
{procedure}_GetModuleBaseName: TGetModuleBaseNameA;
{procedure}_GetModuleFileNameEx: TGetModuleFileNameExA;
_GetModuleInformation: TGetModuleInformation;
_EmptyWorkingSet: TEmptyWorkingSet;
_QueryWorkingSet: TQueryWorkingSet;
_InitializeProcessForWsWatch: TInitializeProcessForWsWatch;
{procedure}_GetMappedFileNameA: TGetMappedFileNameA;
{procedure}_GetDeviceDriverBaseNameA: TGetDeviceDriverBaseNameA;
{procedure}_GetDeviceDriverFileNameA: TGetDeviceDriverFileNameA;
{procedure}_GetMappedFileNameW: TGetMappedFileNameW;
{procedure}_GetDeviceDriverBaseNameW: TGetDeviceDriverBaseNameW;
{procedure}_GetDeviceDriverFileNameW: TGetDeviceDriverFileNameW;
{procedure}_GetMappedFileName: TGetMappedFileNameA;
{procedure}_GetDeviceDriverBaseName: TGetDeviceDriverBaseNameA;
{procedure}_GetDeviceDriverFileName: TGetDeviceDriverFileNameA;
_EnumDeviceDrivers: TEnumDeviceDrivers;
_GetProcessMemoryInfo: TGetProcessMemoryInfo;
function CheckPSAPILoaded: Boolean;
begin
if hPSAPI = 0 then
begin
hPSAPI := LoadLibrary('PSAPI.dll');
if hPSAPI < 32 then
begin
hPSAPI := 0;
Result := False;
Exit;
end;
@_EnumProcesses := GetProcAddress(hPSAPI, 'EnumProcesses');
@_EnumProcessModules := GetProcAddress(hPSAPI, 'EnumProcessModules');
{procedure}@_GetModuleBaseNameA := GetProcAddress(hPSAPI, 'GetModuleBaseNameA');
{procedure}@_GetModuleFileNameExA := GetProcAddress(hPSAPI, 'GetModuleFileNameExA');
{procedure}@_GetModuleBaseNameW := GetProcAddress(hPSAPI, 'GetModuleBaseNameW');
{procedure}@_GetModuleFileNameExW := GetProcAddress(hPSAPI, 'GetModuleFileNameExW');
{procedure}@_GetModuleBaseName := GetProcAddress(hPSAPI, 'GetModuleBaseNameA');
{procedure}@_GetModuleFileNameEx := GetProcAddress(hPSAPI, 'GetModuleFileNameExA');
@_GetModuleInformation := GetProcAddress(hPSAPI, 'GetModuleInformation');
@_EmptyWorkingSet := GetProcAddress(hPSAPI, 'EmptyWorkingSet');
@_QueryWorkingSet := GetProcAddress(hPSAPI, 'QueryWorkingSet');
@_InitializeProcessForWsWatch := GetProcAddress(hPSAPI, 'InitializeProcessForWsWatch');
{procedure}@_GetMappedFileNameA := GetProcAddress(hPSAPI, 'GetMappedFileNameA');
{procedure}@_GetDeviceDriverBaseNameA := GetProcAddress(hPSAPI, 'GetDeviceDriverBaseNameA');
{procedure}@_GetDeviceDriverFileNameA := GetProcAddress(hPSAPI, 'GetDeviceDriverFileNameA');
{procedure}@_GetMappedFileNameW := GetProcAddress(hPSAPI, 'GetMappedFileNameW');
{procedure}@_GetDeviceDriverBaseNameW := GetProcAddress(hPSAPI, 'GetDeviceDriverBaseNameW');
{procedure}@_GetDeviceDriverFileNameW := GetProcAddress(hPSAPI, 'GetDeviceDriverFileNameW');
{procedure}@_GetMappedFileName := GetProcAddress(hPSAPI, 'GetMappedFileNameA');
{procedure}@_GetDeviceDriverBaseName := GetProcAddress(hPSAPI, 'GetDeviceDriverBaseNameA');
{procedure}@_GetDeviceDriverFileName := GetProcAddress(hPSAPI, 'GetDeviceDriverFileNameA');
@_EnumDeviceDrivers := GetProcAddress(hPSAPI, 'EnumDeviceDrivers');
@_GetProcessMemoryInfo := GetProcAddress(hPSAPI, 'GetProcessMemoryInfo');
end;
Result := True;
end;
function EnumProcesses(lpidProcess: LPDWORD; cb: DWORD; var cbNeeded: DWORD): BOOL;
begin
if CheckPSAPILoaded then
Result := _EnumProcesses(lpidProcess, cb, cbNeeded)
else Result := False;
end;
function EnumProcessModules(hProcess: THandle; lphModule: LPDWORD; cb: DWORD;
var lpcbNeeded: DWORD): BOOL;
begin
if CheckPSAPILoaded then
Result := _EnumProcessModules(hProcess, lphModule, cb, lpcbNeeded)
else Result := False;
end;
function GetModuleBaseNameA(hProcess: THandle; hModule: HMODULE;
lpBaseName: PAnsiChar; nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetModuleBaseNameA(hProcess, hModule, lpBaseName, nSize)
else Result := 0;
end;
function GetModuleBaseNameW(hProcess: THandle; hModule: HMODULE;
lpBaseName: PWideChar; nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetModuleBaseNameW(hProcess, hModule, lpBaseName, nSize)
else Result := 0;
end;
function GetModuleBaseName(hProcess: THandle; hModule: HMODULE;
lpBaseName: PChar; nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetModuleBaseName(hProcess, hModule, lpBaseName, nSize)
else Result := 0;
end;
function GetModuleFileNameExA(hProcess: THandle; hModule: HMODULE;
lpFilename: PAnsiChar; nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetModuleFileNameExA(hProcess, hModule, lpFileName, nSize)
else Result := 0;
end;
function GetModuleFileNameExW(hProcess: THandle; hModule: HMODULE;
lpFilename: PWideChar; nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetModuleFileNameExW(hProcess, hModule, lpFileName, nSize)
else Result := 0;
end;
function GetModuleFileNameEx(hProcess: THandle; hModule: HMODULE;
lpFilename: PChar; nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetModuleFileNameEx(hProcess, hModule, lpFileName, nSize)
else Result := 0;
end;
function GetModuleInformation(hProcess: THandle; hModule: HMODULE;
lpmodinfo: LPMODULEINFO; cb: DWORD): BOOL;
begin
if CheckPSAPILoaded then
Result := _GetModuleInformation(hProcess, hModule, lpmodinfo, cb)
else Result := False;
end;
function EmptyWorkingSet(hProcess: THandle): BOOL;
begin
if CheckPSAPILoaded then
Result := _EmptyWorkingSet(hProcess)
else Result := False;
end;
function QueryWorkingSet(hProcess: THandle; pv: Pointer; cb: DWORD): BOOL;
begin
if CheckPSAPILoaded then
Result := _QueryWorkingSet(hProcess, pv, cb)
else Result := False;
end;
function InitializeProcessForWsWatch(hProcess: THandle): BOOL;
begin
if CheckPSAPILoaded then
Result := _InitializeProcessForWsWatch(hProcess)
else Result := False;
end;
function GetMappedFileNameA(hProcess: THandle; lpv: Pointer;
lpFilename: PAnsiChar; nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetMappedFileNameA(hProcess, lpv, lpFileName, nSize)
else Result := 0;
end;
function GetMappedFileNameW(hProcess: THandle; lpv: Pointer;
lpFilename: PWideChar; nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetMappedFileNameW(hProcess, lpv, lpFileName, nSize)
else Result := 0;
end;
function GetMappedFileName(hProcess: THandle; lpv: Pointer;
lpFilename: PChar; nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetMappedFileName(hProcess, lpv, lpFileName, nSize)
else Result := 0;
end;
function GetDeviceDriverBaseNameA(ImageBase: Pointer; lpBaseName: PAnsiChar;
nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetDeviceDriverBasenameA(ImageBase, lpBaseName, nSize)
else Result := 0;
end;
function GetDeviceDriverBaseNameW(ImageBase: Pointer; lpBaseName: PWideChar;
nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetDeviceDriverBasenameW(ImageBase, lpBaseName, nSize)
else Result := 0;
end;
function GetDeviceDriverBaseName(ImageBase: Pointer; lpBaseName: PChar;
nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetDeviceDriverBasename(ImageBase, lpBaseName, nSize)
else Result := 0;
end;
function GetDeviceDriverFileNameA(ImageBase: Pointer; lpFileName: PAnsiChar;
nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetDeviceDriverFileNameA(ImageBase, lpFileName, nSize)
else Result := 0;
end;
function GetDeviceDriverFileNameW(ImageBase: Pointer; lpFileName: PWideChar;
nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetDeviceDriverFileNameW(ImageBase, lpFileName, nSize)
else Result := 0;
end;
function GetDeviceDriverFileName(ImageBase: Pointer; lpFileName: PChar;
nSize: DWORD): DWORD;
begin
if CheckPSAPILoaded then
Result := _GetDeviceDriverFileName(ImageBase, lpFileName, nSize)
else Result := 0;
end;
function EnumDeviceDrivers(lpImageBase: PPointer; cb: DWORD;
var lpcbNeeded: DWORD): BOOL;
begin
if CheckPSAPILoaded then
Result := _EnumDeviceDrivers(lpImageBase, cb, lpcbNeeded)
else Result := False;
end;
function GetProcessMemoryInfo(Process: THandle;
ppsmemCounters: PPROCESS_MEMORY_COUNTERS; cb: DWORD): BOOL;
begin
if CheckPSAPILoaded then
Result := _GetProcessMemoryInfo(Process, ppsmemCounters, cb)
else Result := False;
end;
end.