#include #include #include #include ProcessAPI95::ProcessAPI95(void) : mpfnProcess32First(0), mpfnProcess32Next(0), mpfnModule32First(0), mpfnModule32Next(0), mpfnCreateToolhelp32Snapshot(0), mLibrary("KERNEL32.DLL") { if(!mLibrary.isOkay())return; mpfnProcess32First=(PFNPROCESS32FIRST)mLibrary.procAddress("Process32First"); mpfnProcess32Next=(PFNPROCESS32NEXT)mLibrary.procAddress("Process32Next"); mpfnModule32First=(PFNMODULE32FIRST)mLibrary.procAddress("Module32First"); mpfnModule32Next=(PFNMODULE32NEXT)mLibrary.procAddress("Module32Next"); mpfnCreateToolhelp32Snapshot=(PFNCREATETOOLHELP32SNAPSHOT)mLibrary.procAddress("CreateToolhelp32Snapshot"); } ProcessAPI95::ProcessAPI95(const ProcessAPI95 &/*someProcessAPI*/) { // private implementation } ProcessAPI95::~ProcessAPI95() { } ProcessAPI95 &ProcessAPI95::operator=(const ProcessAPI95 &/*someProcessAPI*/) { // private implementation return *this; } bool ProcessAPI95::enumProcesses(ProcessInfoList &processInfoList) { ProcessEntry processEntry; Block processInfoBlock; HANDLE hSnapshot; processInfoList.size(0); if(!isOkay())return false; hSnapshot=mpfnCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPMODULE,0); if(-1==(int)hSnapshot)return false; if(mpfnProcess32First(hSnapshot,&processEntry.getPROCESSENTRY())) { processInfoBlock.insert(&ProcessInfo()); ProcessInfo &processInfo=processInfoBlock[processInfoBlock.size()-1]; processInfo.processID(processEntry.processID()); enumProcessModules(processInfo.processID(),processEntry,processInfo); while(mpfnProcess32Next(hSnapshot,&processEntry.getPROCESSENTRY())) { processInfoBlock.insert(&ProcessInfo()); ProcessInfo &processInfo=processInfoBlock[processInfoBlock.size()-1]; processInfo.processID(processEntry.processID()); enumProcessModules(processInfo.processID(),processEntry,processInfo); } } ::CloseHandle(hSnapshot); processInfoList.size(processInfoBlock.size()); for(int index=0;index moduleInfoBlock; HANDLE hSnapshot; moduleInfoList.size(0); if(!isOkay())return false; hSnapshot=mpfnCreateToolhelp32Snapshot(TH32CS_SNAPMODULE,processID.processID()); moduleEntry.processID(processID.processID()); moduleInfoBlock.insert(&ModuleInfo()); ModuleInfo &moduleInfo=moduleInfoBlock[moduleInfoBlock.size()-1]; moduleInfo.module((HINSTANCE)processID.processID()); moduleInfo.moduleBaseName(processEntry.strExeFile()); moduleInfo.moduleFileName(processEntry.strExeFile()); if(mpfnModule32First(hSnapshot,&moduleEntry.getMODULEENTRY())) { if(!(moduleEntry.strExePath()==processEntry.strExeFile())) { moduleInfoBlock.insert(&ModuleInfo()); ModuleInfo &moduleInfo=moduleInfoBlock[moduleInfoBlock.size()-1]; moduleInfo.module(moduleEntry.module()); moduleInfo.moduleBaseName(moduleEntry.strModule()); moduleInfo.moduleFileName(moduleEntry.strExePath()); } moduleEntry.processID(processID.processID()); while(mpfnModule32Next(hSnapshot,&moduleEntry.getMODULEENTRY())) { if(!(moduleEntry.strExePath()==processEntry.strExeFile())) { moduleInfoBlock.insert(&ModuleInfo()); ModuleInfo &moduleInfo=moduleInfoBlock[moduleInfoBlock.size()-1]; moduleInfo.module(moduleEntry.module()); moduleInfo.moduleBaseName(moduleEntry.strModule()); moduleInfo.moduleFileName(moduleEntry.strExePath()); } moduleEntry.processID(processID.processID()); } } ::CloseHandle(hSnapshot); moduleInfoList.size(moduleInfoBlock.size()); for(int index=0;index