Files
Work/psapint/PSAPI.HPP
2024-08-07 09:16:27 -04:00

88 lines
4.4 KiB
C++

#ifndef _PSAPINT_PSAPI_HPP_
#define _PSAPINT_PSAPI_HPP_
#ifndef _COMMON_LIBRARY_HPP_
#include <common/library.hpp>
#endif
#ifndef _PSAPINT_PROCESSID_HPP_
#include <psapint/procid.hpp>
#endif
#ifndef _PSAPINT_PROCINFO_HPP_
#include <psapint/procinfo.hpp>
#endif
#ifndef _PSAPINT_PROCESSMEMORYCOUNTERS_HPP_
#include <psapint/memcnt.hpp>
#endif
#ifndef _PSAPI_H_
#include <psapi/psapi.h>
#endif
class ProcessAPI
{
public:
class ProcessAPIInvalidEntryPoint{};
ProcessAPI(void);
virtual ~ProcessAPI();
bool enumProcesses(ProcessInfoList &processInfoList);
bool enumProcesses(ProcessIDList &processList);
bool enumProcessModules(const ProcessID &processID,ModuleInfoList &moduleInfoList);
DWORD getModuleBaseName(const ProcessID &processID,HMODULE hModule,String &strModuleBaseName);
DWORD getModuleFileName(const ProcessID &processID,HMODULE hModule,String &strModuleFileName);
bool getProcessMemoryInfo(HANDLE hProcess,ProcessMemoryCounters &processMemoryCounters);
bool isOkay(void)const;
private:
typedef BOOL (WINAPI *PFNENUMPROCESSES)(DWORD *lpidProcess,DWORD cb,DWORD *cbNeeded);
typedef BOOL (WINAPI *PFNENUMPROCESSMODULES)(HANDLE hProcess,HMODULE *lphModule,DWORD cb,LPDWORD lpcbNeeded);
typedef DWORD (WINAPI *PFNGETMODULEBASENAME)(HANDLE hProcess,HMODULE hModule,LPSTR lpBaseName,DWORD nSize);
typedef DWORD (WINAPI *PFNGETMODULEFILENAMEEX)(HANDLE hProcess,HMODULE hModule,LPSTR lpFilename,DWORD nSize);
typedef BOOL (WINAPI *PFNGETMODULEINFORMATION)(HANDLE hProcess,HMODULE hModule,LPMODULEINFO lpmodinfo,DWORD cb);
typedef BOOL (WINAPI *PFNEMPTYWORKINGSET)(HANDLE hProcess);
typedef BOOL (WINAPI *PFNQUERYWORKINGSET)(HANDLE hProcess,PVOID pv,DWORD cb);
typedef BOOL (WINAPI *PFNINITIALIZEPROCESSFORWSWATCH)(HANDLE hProcess);
typedef BOOL (WINAPI *PFNGETWSCHANGES)(HANDLE hProcess,PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,DWORD cb);
typedef DWORD (WINAPI *PFNGETMAPPEDFILENAME)(HANDLE hProcess,LPVOID lpv,LPWSTR lpFilename,DWORD nSize);
typedef DWORD (WINAPI *PFNENUMDEVICEDRIVERS)(LPVOID *lpImageBase,DWORD cb,LPDWORD lpcbNeeded);
typedef DWORD (WINAPI *PFNGETDEVICEDRIVERBASENAME)(LPVOID imageBase,LPSTR lpBaseName,DWORD nSize);
typedef DWORD (WINAPI *PFNGETDEVICEDRIVERFILENAME)(LPVOID imageBase,LPSTR lpFilename,DWORD nSize);
typedef BOOL (WINAPI *PFNGETPROCESSMEMORYINFO)(HANDLE hProcess,PPROCESS_MEMORY_COUNTERS ppsmemCounters,DWORD cb);
ProcessAPI(const ProcessAPI &someProcessAPI);
ProcessAPI &operator=(const ProcessAPI &someProcessAPI);
bool getEntryPoints(void);
bool enumProcesses(DWORD *lpidProcess,DWORD cb,DWORD *cbNeeded);
bool enumProcessModules(HANDLE hProcess,HMODULE *lphModule,DWORD cb,LPDWORD lpcbNeeded);
DWORD getModuleBaseName(HANDLE hProcess,HMODULE hModule,LPSTR lpBaseName,DWORD nSize);
DWORD getModuleFileNameEx(HANDLE hProcess,HMODULE hModule,LPSTR lpFilename,DWORD nSize);
bool emptyWorkingSet(HANDLE hProcess);
bool queryWorkingSet(HANDLE hProcess,PVOID pv,DWORD cb);
bool initializeProcessForWsWatch(HANDLE hProcess);
bool getWsChanges(HANDLE hProcess,PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,DWORD cb);
DWORD getMappedFileName(HANDLE hProcess,LPVOID lpv,LPWSTR lpFilename,DWORD nSize);
DWORD enumDeviceDrivers(LPVOID *lpImageBase,DWORD cb,LPDWORD lpcbNeeded);
DWORD getDeviceDriverBaseName(LPVOID imageBase,LPSTR lpBaseName,DWORD nSize);
DWORD getDeviceDriverFileName(LPVOID imageBase,LPSTR lpFilename,DWORD nSize);
bool getProcessMemoryInfo(HANDLE hProcess,PPROCESS_MEMORY_COUNTERS ppsmemCounters,DWORD cb);
bool getModuleInformation(HANDLE hProcess,HMODULE hModule,LPMODULEINFO lpmodinfo,DWORD cb);
PFNENUMPROCESSES mpfnEnumProcesses;
PFNENUMPROCESSMODULES mpfnEnumProcessModules;
PFNGETMODULEBASENAME mpfnGetModuleBaseName;
PFNGETMODULEFILENAMEEX mpfnGetModuleFileNameEx;
PFNGETMODULEINFORMATION mpfnGetModuleInformation;
PFNEMPTYWORKINGSET mpfnEmptyWorkingSet;
PFNQUERYWORKINGSET mpfnQueryWorkingSet;
PFNINITIALIZEPROCESSFORWSWATCH mpfnInitializeProcessForWsWatch;
PFNGETWSCHANGES mpfnGetWsChanges;
PFNGETMAPPEDFILENAME mpfnGetMappedFileName;
PFNENUMDEVICEDRIVERS mpfnEnumDeviceDrivers;
PFNGETDEVICEDRIVERBASENAME mpfnGetDeviceDriverBaseName;
PFNGETDEVICEDRIVERFILENAME mpfnGetDeviceDriverFileName;
PFNGETPROCESSMEMORYINFO mpfnGetProcessMemoryInfo;
Library mPSAPILib;
};
inline
bool ProcessAPI::getProcessMemoryInfo(HANDLE hProcess,ProcessMemoryCounters &processMemoryCounters)
{
return getProcessMemoryInfo(hProcess,&processMemoryCounters.getPROCESSMEMORYCOUNTERS(),ProcessMemoryCounters::size());
}
#endif