Initial
This commit is contained in:
90
psapint/PROCID.HPP
Normal file
90
psapint/PROCID.HPP
Normal file
@@ -0,0 +1,90 @@
|
||||
#ifndef _PSAPINT_PROCESSID_HPP_
|
||||
#define _PSAPINT_PROCESSID_HPP_
|
||||
#ifndef _COMMON_STDIO_HPP_
|
||||
#include <common/stdio.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_WINDOWS_HPP_
|
||||
#include <common/windows.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_STRING_HPP_
|
||||
#include <common/string.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_ARRAY_HPP_
|
||||
#include <common/array.hpp>
|
||||
#endif
|
||||
|
||||
class ProcessID;
|
||||
typedef Array<ProcessID> ProcessIDList;
|
||||
|
||||
class ProcessID
|
||||
{
|
||||
public:
|
||||
ProcessID(void);
|
||||
ProcessID(const ProcessID &someProcessID);
|
||||
ProcessID(DWORD processID);
|
||||
virtual ~ProcessID();
|
||||
ProcessID &operator=(const ProcessID &someProcessID);
|
||||
bool operator==(const ProcessID &someProcessID)const;
|
||||
DWORD processID(void)const;
|
||||
void processID(DWORD processID);
|
||||
String toString(void)const;
|
||||
private:
|
||||
DWORD mProcessID;
|
||||
};
|
||||
|
||||
inline
|
||||
ProcessID::ProcessID(void)
|
||||
: mProcessID(0)
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ProcessID::ProcessID(const ProcessID &someProcessID)
|
||||
: mProcessID(someProcessID.mProcessID)
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ProcessID::ProcessID(DWORD processID)
|
||||
: mProcessID(processID)
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ProcessID::~ProcessID()
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ProcessID &ProcessID::operator=(const ProcessID &someProcessID)
|
||||
{
|
||||
processID(someProcessID.processID());
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline
|
||||
bool ProcessID::operator==(const ProcessID &someProcessID)const
|
||||
{
|
||||
return processID()==someProcessID.processID();
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessID::processID(void)const
|
||||
{
|
||||
return mProcessID;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessID::processID(DWORD processID)
|
||||
{
|
||||
mProcessID=processID;
|
||||
}
|
||||
|
||||
inline
|
||||
String ProcessID::toString(void)const
|
||||
{
|
||||
String strProcessID;
|
||||
::sprintf(strProcessID.str(),"%d(0x%08lx)",mProcessID,mProcessID);
|
||||
return strProcessID;
|
||||
}
|
||||
#endif
|
||||
82
psapint/PROCINFO.HPP
Normal file
82
psapint/PROCINFO.HPP
Normal file
@@ -0,0 +1,82 @@
|
||||
#ifndef _PSAPINT_PROCINFO_HPP_
|
||||
#define _PSAPINT_PROCINFO_HPP_
|
||||
#ifndef _COMMON_WINDOWS_HPP_
|
||||
#include <common/windows.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_ARRAY_HPP_
|
||||
#include <common/array.hpp>
|
||||
#endif
|
||||
#ifndef _PSAPINT_PROCESSID_HPP_
|
||||
#include <psapint/procid.hpp>
|
||||
#endif
|
||||
#ifndef _PSAPINT_MODULEINFO_HPP_
|
||||
#include <psapint/modinfo.hpp>
|
||||
#endif
|
||||
|
||||
class ProcessInfo;
|
||||
typedef Array<ProcessInfo> ProcessInfoList;
|
||||
|
||||
class ProcessInfo : public ModuleInfoList
|
||||
{
|
||||
public:
|
||||
ProcessInfo(void);
|
||||
ProcessInfo(const ProcessID &processID);
|
||||
ProcessInfo(const ProcessInfo &someProcessInfo);
|
||||
virtual ~ProcessInfo();
|
||||
ProcessInfo &operator=(const ProcessInfo &someProcessInfo);
|
||||
bool operator==(const ProcessInfo &someProcessInfo)const;
|
||||
const ProcessID &processID(void)const;
|
||||
void processID(const ProcessID &processID);
|
||||
private:
|
||||
ProcessID mProcessID;
|
||||
};
|
||||
|
||||
inline
|
||||
ProcessInfo::ProcessInfo(void)
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ProcessInfo::ProcessInfo(const ProcessInfo &someProcessInfo)
|
||||
: mProcessID(someProcessInfo.mProcessID), ModuleInfoList(someProcessInfo)
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ProcessInfo::ProcessInfo(const ProcessID &processID)
|
||||
: mProcessID(processID)
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ProcessInfo::~ProcessInfo()
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ProcessInfo &ProcessInfo::operator=(const ProcessInfo &someProcessInfo)
|
||||
{
|
||||
processID(someProcessInfo.processID());
|
||||
(ModuleInfoList &)*this=(ModuleInfoList &)someProcessInfo;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline
|
||||
bool ProcessInfo::operator==(const ProcessInfo &someProcessInfo)const
|
||||
{
|
||||
return (processID()==someProcessInfo.processID()&&
|
||||
(ModuleInfoList&)*this==(ModuleInfoList&)someProcessInfo);
|
||||
}
|
||||
|
||||
inline
|
||||
const ProcessID &ProcessInfo::processID(void)const
|
||||
{
|
||||
return mProcessID;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessInfo::processID(const ProcessID &processID)
|
||||
{
|
||||
mProcessID=processID;
|
||||
}
|
||||
#endif
|
||||
213
psapint/PSAPI.CPP
Normal file
213
psapint/PSAPI.CPP
Normal file
@@ -0,0 +1,213 @@
|
||||
#include <psapint/psapi.hpp>
|
||||
#include <common/process.hpp>
|
||||
|
||||
ProcessAPI::ProcessAPI(void)
|
||||
: mpfnEnumProcesses(0), mpfnEnumProcessModules(0), mpfnGetModuleBaseName(0), mpfnGetModuleFileNameEx(0),
|
||||
mpfnGetModuleInformation(0), mpfnEmptyWorkingSet(0), mpfnQueryWorkingSet(0),
|
||||
mpfnInitializeProcessForWsWatch(0), mpfnGetWsChanges(0), mpfnGetMappedFileName(0),
|
||||
mpfnEnumDeviceDrivers(0), mpfnGetDeviceDriverBaseName(0), mpfnGetDeviceDriverFileName(0),
|
||||
mpfnGetProcessMemoryInfo(0), mPSAPILib("PSAPI.DLL")
|
||||
{
|
||||
getEntryPoints();
|
||||
}
|
||||
|
||||
ProcessAPI::ProcessAPI(const ProcessAPI &someProcessAPI)
|
||||
{ // private implementation
|
||||
*this=someProcessAPI;
|
||||
}
|
||||
|
||||
ProcessAPI::~ProcessAPI()
|
||||
{
|
||||
}
|
||||
|
||||
ProcessAPI &ProcessAPI::operator=(const ProcessAPI &/*someProcessAPI*/)
|
||||
{ // private implementation
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool ProcessAPI::enumProcesses(ProcessInfoList &processInfoList)
|
||||
{
|
||||
ProcessIDList processIDList;
|
||||
String strModuleBaseName;
|
||||
String strModuleFileName;
|
||||
|
||||
processInfoList.size(0);
|
||||
enumProcesses(processIDList);
|
||||
processInfoList.size(processIDList.size());
|
||||
for(int procIndex=0;procIndex<processIDList.size();procIndex++)
|
||||
{
|
||||
processInfoList[procIndex]=processIDList[procIndex];
|
||||
ProcessInfo &processInfo=processInfoList[procIndex];
|
||||
enumProcessModules(processInfo.processID(),processInfo);
|
||||
ModuleInfoList &moduleInfoList=processInfo;
|
||||
for(int modIndex=0;modIndex<moduleInfoList.size();modIndex++)
|
||||
{
|
||||
ModuleInfo &moduleInfo=moduleInfoList[modIndex];
|
||||
getModuleBaseName(processInfo.processID(),moduleInfo.module(),strModuleBaseName);
|
||||
getModuleFileName(processInfo.processID(),moduleInfo.module(),strModuleFileName);
|
||||
moduleInfo.moduleBaseName(strModuleBaseName);
|
||||
moduleInfo.moduleFileName(strModuleFileName);
|
||||
}
|
||||
}
|
||||
return processInfoList.size();
|
||||
}
|
||||
|
||||
bool ProcessAPI::enumProcesses(ProcessIDList &processList)
|
||||
{
|
||||
DWORD cbNeeded(0);
|
||||
DWORD processListArray[1024];
|
||||
DWORD itemCount;
|
||||
|
||||
enumProcesses((unsigned long*)&processListArray,sizeof(processListArray),&cbNeeded);
|
||||
itemCount=cbNeeded/sizeof(DWORD);
|
||||
processList.size(itemCount);
|
||||
for(int index=0;index<itemCount;index++)processList[index]=processListArray[index];
|
||||
return processList.size()?true:false;
|
||||
}
|
||||
|
||||
bool ProcessAPI::enumProcessModules(const ProcessID &processID,ModuleInfoList &moduleInfoList)
|
||||
{
|
||||
Process process;
|
||||
DWORD cbNeeded(0);
|
||||
HMODULE moduleHandleArray[1024];
|
||||
DWORD itemCount;
|
||||
|
||||
moduleInfoList.size(0);
|
||||
if(!process.openProcess(processID.processID()))return false;
|
||||
enumProcessModules(process.getProcess(),(HMODULE*)&moduleHandleArray,sizeof(moduleHandleArray),&cbNeeded);
|
||||
itemCount=cbNeeded/sizeof(HANDLE);
|
||||
moduleInfoList.size(itemCount);
|
||||
for(int index=0;index<itemCount;index++)moduleInfoList[index]=ModuleInfo(moduleHandleArray[index]);
|
||||
return moduleInfoList.size()?true:false;
|
||||
}
|
||||
|
||||
DWORD ProcessAPI::getModuleBaseName(const ProcessID &processID,HMODULE hModule,String &strModuleBaseName)
|
||||
{
|
||||
Process process;
|
||||
|
||||
if(!process.openProcess(processID.processID()))return 0;
|
||||
strModuleBaseName.reserve(2048);
|
||||
return getModuleBaseName(process.getProcess(),hModule,strModuleBaseName,2048);
|
||||
}
|
||||
|
||||
DWORD ProcessAPI::getModuleFileName(const ProcessID &processID,HMODULE hModule,String &strModuleFileName)
|
||||
{
|
||||
Process process;
|
||||
|
||||
if(!process.openProcess(processID.processID()))return 0;
|
||||
strModuleFileName.reserve(2048);
|
||||
return getModuleFileNameEx(process.getProcess(),hModule,strModuleFileName,2048);
|
||||
}
|
||||
|
||||
bool ProcessAPI::getEntryPoints(void)
|
||||
{
|
||||
if(!mPSAPILib.isOkay())return FALSE;
|
||||
mpfnEnumProcesses=(PFNENUMPROCESSES)mPSAPILib.procAddress("EnumProcesses");
|
||||
mpfnEnumProcessModules=(PFNENUMPROCESSMODULES)mPSAPILib.procAddress("EnumProcessModules");
|
||||
mpfnGetModuleBaseName=(PFNGETMODULEBASENAME)mPSAPILib.procAddress("GetModuleBaseNameA");
|
||||
mpfnGetModuleFileNameEx=(PFNGETMODULEFILENAMEEX)mPSAPILib.procAddress("GetModuleFileNameExA");
|
||||
mpfnGetModuleInformation=(PFNGETMODULEINFORMATION)mPSAPILib.procAddress("GetModuleInformation");
|
||||
mpfnEmptyWorkingSet=(PFNEMPTYWORKINGSET)mPSAPILib.procAddress("EmptyWorkingSet");
|
||||
mpfnQueryWorkingSet=(PFNQUERYWORKINGSET)mPSAPILib.procAddress("QueryWorkingSet");
|
||||
mpfnInitializeProcessForWsWatch=(PFNINITIALIZEPROCESSFORWSWATCH)mPSAPILib.procAddress("InitializeProcessForWsWatch");
|
||||
mpfnGetWsChanges=(PFNGETWSCHANGES)mPSAPILib.procAddress("GetWsChanges");
|
||||
mpfnGetMappedFileName=(PFNGETMAPPEDFILENAME)mPSAPILib.procAddress("GetMappedFileNameA");
|
||||
mpfnEnumDeviceDrivers=(PFNENUMDEVICEDRIVERS)mPSAPILib.procAddress("EnumDeviceDrivers");
|
||||
mpfnGetDeviceDriverBaseName=(PFNGETDEVICEDRIVERBASENAME)mPSAPILib.procAddress("GetDeviceDriverBaseNameA");
|
||||
mpfnGetDeviceDriverFileName=(PFNGETDEVICEDRIVERFILENAME)mPSAPILib.procAddress("GetDeviceDriverFileNameA");
|
||||
mpfnGetProcessMemoryInfo=(PFNGETPROCESSMEMORYINFO)mPSAPILib.procAddress("GetProcessMemoryInfo");
|
||||
return isOkay();
|
||||
}
|
||||
|
||||
bool ProcessAPI::enumProcesses(DWORD *lpidProcess,DWORD cb,DWORD *cbNeeded)
|
||||
{
|
||||
if(!mpfnEnumProcesses){throw ProcessAPIInvalidEntryPoint();return false;}
|
||||
return mpfnEnumProcesses(lpidProcess,cb,cbNeeded);
|
||||
}
|
||||
|
||||
bool ProcessAPI::enumProcessModules(HANDLE hProcess,HMODULE *lphModule,DWORD cb,LPDWORD lpcbNeeded)
|
||||
{
|
||||
if(!mpfnEnumProcessModules){throw ProcessAPIInvalidEntryPoint();return false;}
|
||||
return mpfnEnumProcessModules(hProcess,lphModule,cb,lpcbNeeded);
|
||||
}
|
||||
|
||||
DWORD ProcessAPI::getModuleBaseName(HANDLE hProcess,HMODULE hModule,LPSTR lpBaseName,DWORD nSize)
|
||||
{
|
||||
if(!mpfnGetModuleBaseName){throw ProcessAPIInvalidEntryPoint();return 0;}
|
||||
return mpfnGetModuleBaseName(hProcess,hModule,lpBaseName,nSize);
|
||||
}
|
||||
|
||||
DWORD ProcessAPI::getModuleFileNameEx(HANDLE hProcess,HMODULE hModule,LPSTR lpFilename,DWORD nSize)
|
||||
{
|
||||
if(!mpfnGetModuleFileNameEx){throw ProcessAPIInvalidEntryPoint();return 0;}
|
||||
return mpfnGetModuleFileNameEx(hProcess,hModule,lpFilename,nSize);
|
||||
}
|
||||
|
||||
bool ProcessAPI::getModuleInformation(HANDLE hProcess,HMODULE hModule,LPMODULEINFO lpmodinfo,DWORD cb)
|
||||
{
|
||||
if(!mpfnGetModuleInformation){throw ProcessAPIInvalidEntryPoint();return false;}
|
||||
return mpfnGetModuleInformation(hProcess,hModule,lpmodinfo,cb);
|
||||
}
|
||||
|
||||
bool ProcessAPI::emptyWorkingSet(HANDLE hProcess)
|
||||
{
|
||||
if(!mpfnEmptyWorkingSet){throw ProcessAPIInvalidEntryPoint();return false;}
|
||||
return mpfnEmptyWorkingSet(hProcess);
|
||||
}
|
||||
|
||||
bool ProcessAPI::queryWorkingSet(HANDLE hProcess,PVOID pv,DWORD cb)
|
||||
{
|
||||
if(!mpfnQueryWorkingSet){throw ProcessAPIInvalidEntryPoint();return false;}
|
||||
return mpfnQueryWorkingSet(hProcess,pv,cb);
|
||||
}
|
||||
|
||||
bool ProcessAPI::initializeProcessForWsWatch(HANDLE hProcess)
|
||||
{
|
||||
if(!mpfnInitializeProcessForWsWatch){throw ProcessAPIInvalidEntryPoint();return false;}
|
||||
return mpfnInitializeProcessForWsWatch(hProcess);
|
||||
}
|
||||
|
||||
bool ProcessAPI::getWsChanges(HANDLE hProcess,PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,DWORD cb)
|
||||
{
|
||||
if(!mpfnGetWsChanges){throw ProcessAPIInvalidEntryPoint();return false;}
|
||||
return mpfnGetWsChanges(hProcess,lpWatchInfo,cb);
|
||||
}
|
||||
|
||||
DWORD ProcessAPI::getMappedFileName(HANDLE hProcess,LPVOID lpv,LPWSTR lpFilename,DWORD nSize)
|
||||
{
|
||||
if(!mpfnGetMappedFileName){throw ProcessAPIInvalidEntryPoint();return 0;}
|
||||
return mpfnGetMappedFileName(hProcess,lpv,lpFilename,nSize);
|
||||
}
|
||||
|
||||
DWORD ProcessAPI::enumDeviceDrivers(LPVOID *lpImageBase,DWORD cb,LPDWORD lpcbNeeded)
|
||||
{
|
||||
if(!mpfnEnumDeviceDrivers){throw ProcessAPIInvalidEntryPoint();return 0;}
|
||||
return mpfnEnumDeviceDrivers(lpImageBase,cb,lpcbNeeded);
|
||||
}
|
||||
|
||||
DWORD ProcessAPI::getDeviceDriverBaseName(LPVOID imageBase,LPSTR lpBaseName,DWORD nSize)
|
||||
{
|
||||
if(!mpfnGetDeviceDriverBaseName){throw ProcessAPIInvalidEntryPoint();return 0;}
|
||||
return mpfnGetDeviceDriverBaseName(imageBase,lpBaseName,nSize);
|
||||
}
|
||||
|
||||
DWORD ProcessAPI::getDeviceDriverFileName(LPVOID imageBase,LPSTR lpFilename,DWORD nSize)
|
||||
{
|
||||
if(!mpfnGetDeviceDriverFileName){throw ProcessAPIInvalidEntryPoint();return 0;}
|
||||
return mpfnGetDeviceDriverFileName(imageBase,lpFilename,nSize);
|
||||
}
|
||||
|
||||
bool ProcessAPI::getProcessMemoryInfo(HANDLE hProcess,PPROCESS_MEMORY_COUNTERS ppsmemCounters,DWORD cb)
|
||||
{
|
||||
if(!mpfnGetProcessMemoryInfo){throw ProcessAPIInvalidEntryPoint();return false;}
|
||||
return mpfnGetProcessMemoryInfo(hProcess,ppsmemCounters,cb);
|
||||
}
|
||||
|
||||
bool ProcessAPI::isOkay(void)const
|
||||
{
|
||||
if(!mPSAPILib.isOkay()||!mpfnEnumProcesses||!mpfnEnumProcessModules||!mpfnGetModuleBaseName||
|
||||
!mpfnGetModuleFileNameEx||!mpfnGetModuleInformation||!mpfnEmptyWorkingSet||!mpfnQueryWorkingSet||
|
||||
!mpfnInitializeProcessForWsWatch||!mpfnGetWsChanges||!mpfnGetMappedFileName||!mpfnEnumDeviceDrivers||
|
||||
!mpfnGetDeviceDriverBaseName||!mpfnGetDeviceDriverFileName||!mpfnGetProcessMemoryInfo)return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
88
psapint/PSAPI.HPP
Normal file
88
psapint/PSAPI.HPP
Normal file
@@ -0,0 +1,88 @@
|
||||
#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
|
||||
29
psapint/PSAPINT.DSW
Normal file
29
psapint/PSAPINT.DSW
Normal file
@@ -0,0 +1,29 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "psapint"=.\psapint.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
BIN
psapint/PSAPINT.OPT
Normal file
BIN
psapint/PSAPINT.OPT
Normal file
Binary file not shown.
29
psapint/PSAPINT.PLG
Normal file
29
psapint/PSAPINT.PLG
Normal file
@@ -0,0 +1,29 @@
|
||||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: psapint - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP2.tmp" with contents
|
||||
[
|
||||
/nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"msvcobj/psapint.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c
|
||||
"D:\work\psapint\psapi.cpp"
|
||||
"D:\work\psapint\psapi95.cpp"
|
||||
]
|
||||
Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP2.tmp"
|
||||
Creating command line "link.exe -lib /nologo /out:"..\exe\psapint.lib" .\msvcobj\psapi.obj .\msvcobj\psapi95.obj "
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
psapi.cpp
|
||||
psapi95.cpp
|
||||
Creating library...
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
psapint.lib - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
181
psapint/memcnt.hpp
Normal file
181
psapint/memcnt.hpp
Normal file
@@ -0,0 +1,181 @@
|
||||
#ifndef _PSAPINT_PROCESSMEMORYCOUNTERS_HPP_
|
||||
#define _PSAPINT_PROCESSMEMORYCOUNTERS_HPP_
|
||||
#ifndef _PSAPI_H_
|
||||
#include <psapi/psapi.h>
|
||||
#endif
|
||||
|
||||
class ProcessMemoryCounters : private PROCESS_MEMORY_COUNTERS
|
||||
{
|
||||
public:
|
||||
ProcessMemoryCounters(void);
|
||||
virtual ~ProcessMemoryCounters();
|
||||
DWORD pageFaultCount(void)const;
|
||||
void pageFaultCount(DWORD pageFaultCount);
|
||||
DWORD peakWorkingSetSize(void)const;
|
||||
void peakWorkingSetSize(DWORD peakWorkingSetSize);
|
||||
DWORD workingSetSize(void)const;
|
||||
void workingSetSize(DWORD workingSetSize);
|
||||
DWORD quotaPeakPagedPoolUsage(void)const;
|
||||
void quotaPeakPagedPoolUsage(DWORD quotaPeakPagedPoolUsage);
|
||||
DWORD quotaPagedPoolUsage(void)const;
|
||||
void quotaPagedPoolUsage(DWORD quotaPagedPoolUsage);
|
||||
DWORD quotaPeakedNonPagedPoolUsage(void)const;
|
||||
void quotaPeakedNonPagedPoolUsage(DWORD quotaPeakedNonPagedPoolUsage);
|
||||
DWORD quotaNonPagedPoolUsage(void)const;
|
||||
void quotaNonPagedPoolUsage(DWORD quotaNonPagedPoolUsage);
|
||||
DWORD pageFileUsage(void)const;
|
||||
void pageFileUsage(DWORD pageFileUsage);
|
||||
DWORD peakPageFileUsage(void)const;
|
||||
void peakPageFileUsage(DWORD peakPageFileUsage);
|
||||
PROCESS_MEMORY_COUNTERS &getPROCESSMEMORYCOUNTERS(void);
|
||||
static DWORD size(void);
|
||||
private:
|
||||
void zeroInit(void);
|
||||
};
|
||||
|
||||
inline
|
||||
ProcessMemoryCounters::ProcessMemoryCounters(void)
|
||||
{
|
||||
zeroInit();
|
||||
}
|
||||
|
||||
inline
|
||||
ProcessMemoryCounters::~ProcessMemoryCounters()
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessMemoryCounters::pageFaultCount(void)const
|
||||
{
|
||||
return PROCESS_MEMORY_COUNTERS::PageFaultCount;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessMemoryCounters::pageFaultCount(DWORD pageFaultCount)
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS::PageFaultCount=pageFaultCount;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessMemoryCounters::peakWorkingSetSize(void)const
|
||||
{
|
||||
return PROCESS_MEMORY_COUNTERS::PeakWorkingSetSize;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessMemoryCounters::peakWorkingSetSize(DWORD peakWorkingSetSize)
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS::PeakWorkingSetSize=peakWorkingSetSize;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessMemoryCounters::workingSetSize(void)const
|
||||
{
|
||||
return PROCESS_MEMORY_COUNTERS::WorkingSetSize;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessMemoryCounters::workingSetSize(DWORD workingSetSize)
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS::WorkingSetSize=workingSetSize;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessMemoryCounters::quotaPeakPagedPoolUsage(void)const
|
||||
{
|
||||
return PROCESS_MEMORY_COUNTERS::QuotaPeakPagedPoolUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessMemoryCounters::quotaPeakPagedPoolUsage(DWORD quotaPeakPagedPoolUsage)
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS::QuotaPeakPagedPoolUsage=quotaPeakPagedPoolUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessMemoryCounters::quotaPagedPoolUsage(void)const
|
||||
{
|
||||
return PROCESS_MEMORY_COUNTERS::QuotaPagedPoolUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessMemoryCounters::quotaPagedPoolUsage(DWORD quotaPagedPoolUsage)
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS::QuotaPagedPoolUsage=quotaPagedPoolUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessMemoryCounters::quotaPeakedNonPagedPoolUsage(void)const
|
||||
{
|
||||
return PROCESS_MEMORY_COUNTERS::QuotaPeakNonPagedPoolUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessMemoryCounters::quotaPeakedNonPagedPoolUsage(DWORD quotaPeakedNonPagedPoolUsage)
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS::QuotaPeakNonPagedPoolUsage=quotaPeakedNonPagedPoolUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessMemoryCounters::quotaNonPagedPoolUsage(void)const
|
||||
{
|
||||
return PROCESS_MEMORY_COUNTERS::QuotaNonPagedPoolUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessMemoryCounters::quotaNonPagedPoolUsage(DWORD quotaNonPagedPoolUsage)
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS::QuotaNonPagedPoolUsage=quotaNonPagedPoolUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessMemoryCounters::pageFileUsage(void)const
|
||||
{
|
||||
return PROCESS_MEMORY_COUNTERS::PagefileUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessMemoryCounters::pageFileUsage(DWORD pageFileUsage)
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS::PagefileUsage=pageFileUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessMemoryCounters::peakPageFileUsage(void)const
|
||||
{
|
||||
return PROCESS_MEMORY_COUNTERS::PeakPagefileUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessMemoryCounters::peakPageFileUsage(DWORD peakPageFileUsage)
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS::PeakPagefileUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessMemoryCounters::zeroInit(void)
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS::cb=size();
|
||||
PROCESS_MEMORY_COUNTERS::PageFaultCount=0;
|
||||
PROCESS_MEMORY_COUNTERS::PeakWorkingSetSize=0;
|
||||
PROCESS_MEMORY_COUNTERS::WorkingSetSize=0;
|
||||
PROCESS_MEMORY_COUNTERS::QuotaPeakPagedPoolUsage=0;
|
||||
PROCESS_MEMORY_COUNTERS::QuotaPagedPoolUsage=0;
|
||||
PROCESS_MEMORY_COUNTERS::QuotaPeakNonPagedPoolUsage=0;
|
||||
PROCESS_MEMORY_COUNTERS::QuotaNonPagedPoolUsage=0;
|
||||
PROCESS_MEMORY_COUNTERS::PagefileUsage=0;
|
||||
PROCESS_MEMORY_COUNTERS::PeakPagefileUsage=0;
|
||||
}
|
||||
|
||||
inline
|
||||
PROCESS_MEMORY_COUNTERS &ProcessMemoryCounters::getPROCESSMEMORYCOUNTERS(void)
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessMemoryCounters::size(void)
|
||||
{
|
||||
return sizeof(PROCESS_MEMORY_COUNTERS);
|
||||
}
|
||||
#endif
|
||||
174
psapint/modentry.hpp
Normal file
174
psapint/modentry.hpp
Normal file
@@ -0,0 +1,174 @@
|
||||
#ifndef _PSAPINT_MODENTRY_HPP_
|
||||
#define _PSAPINT_MODENTRY_HPP_
|
||||
#ifndef _COMMON_WINDOWS_HPP_
|
||||
#include <common/windows.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_TOOLHELP32_HPP_
|
||||
#include <common/tlhelp32.hpp>
|
||||
#endif
|
||||
|
||||
class ModuleEntry : private MODULEENTRY32
|
||||
{
|
||||
public:
|
||||
ModuleEntry(void);
|
||||
virtual ~ModuleEntry();
|
||||
DWORD moduleID(void)const;
|
||||
void moduleID(DWORD moduleID);
|
||||
DWORD processID(void)const;
|
||||
void processID(DWORD processID);
|
||||
DWORD globalCntUsage(void)const;
|
||||
void globalCntIUsage(DWORD globalCntUsage);
|
||||
DWORD procCntUsage(void)const;
|
||||
void procCntUsage(DWORD procCntUsage);
|
||||
DWORD modBaseAddress(void)const;
|
||||
void modBaseAddress(DWORD modBaseAddress);
|
||||
DWORD modBaseSize(void)const;
|
||||
void modBaseSize(DWORD modBaseSize);
|
||||
HMODULE module(void)const;
|
||||
void module(HMODULE hModule);
|
||||
String strModule(void)const;
|
||||
void szModule(const String &strModule);
|
||||
String strExePath(void)const;
|
||||
void strExePath(const String &strExePath);
|
||||
MODULEENTRY32 &getMODULEENTRY(void);
|
||||
private:
|
||||
void zeroInit(void);
|
||||
};
|
||||
|
||||
inline
|
||||
ModuleEntry::ModuleEntry(void)
|
||||
{
|
||||
zeroInit();
|
||||
}
|
||||
|
||||
inline
|
||||
ModuleEntry::~ModuleEntry()
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ModuleEntry::moduleID(void)const
|
||||
{
|
||||
return MODULEENTRY32::th32ModuleID;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleEntry::moduleID(DWORD moduleID)
|
||||
{
|
||||
MODULEENTRY32::th32ModuleID=moduleID;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ModuleEntry::processID(void)const
|
||||
{
|
||||
return MODULEENTRY32::th32ProcessID;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleEntry::processID(DWORD processID)
|
||||
{
|
||||
MODULEENTRY32::th32ProcessID=processID;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ModuleEntry::globalCntUsage(void)const
|
||||
{
|
||||
return MODULEENTRY32::GlblcntUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleEntry::globalCntIUsage(DWORD globalCntUsage)
|
||||
{
|
||||
MODULEENTRY32::GlblcntUsage=globalCntUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ModuleEntry::procCntUsage(void)const
|
||||
{
|
||||
return MODULEENTRY32::ProccntUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleEntry::procCntUsage(DWORD procCntUsage)
|
||||
{
|
||||
MODULEENTRY32::ProccntUsage=procCntUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ModuleEntry::modBaseAddress(void)const
|
||||
{
|
||||
return DWORD(MODULEENTRY32::modBaseAddr);
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleEntry::modBaseAddress(DWORD modBaseAddress)
|
||||
{
|
||||
MODULEENTRY32::modBaseAddr=(BYTE*)modBaseAddress;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ModuleEntry::modBaseSize(void)const
|
||||
{
|
||||
return MODULEENTRY32::modBaseSize;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleEntry::modBaseSize(DWORD modBaseSize)
|
||||
{
|
||||
MODULEENTRY32::modBaseSize=modBaseSize;
|
||||
}
|
||||
|
||||
inline
|
||||
HMODULE ModuleEntry::module(void)const
|
||||
{
|
||||
return MODULEENTRY32::hModule;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleEntry::module(HMODULE hModule)
|
||||
{
|
||||
MODULEENTRY32::hModule=hModule;
|
||||
}
|
||||
|
||||
inline
|
||||
String ModuleEntry::strModule(void)const
|
||||
{
|
||||
return MODULEENTRY32::szModule;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleEntry::szModule(const String &strModule)
|
||||
{
|
||||
int strLen(strModule.length());
|
||||
if(strLen<=MAX_MODULE_NAME32)::strcpy(MODULEENTRY32::szModule,(LPSTR)(String&)strModule);
|
||||
else {::strncpy(MODULEENTRY32::szModule,(LPSTR)(String&)strModule,MAX_MODULE_NAME32);MODULEENTRY32::szModule[MAX_MODULE_NAME32]=0;}
|
||||
}
|
||||
|
||||
inline
|
||||
String ModuleEntry::strExePath(void)const
|
||||
{
|
||||
return MODULEENTRY32::szExePath;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleEntry::strExePath(const String &strExePath)
|
||||
{
|
||||
int strLen(strExePath.length());
|
||||
if(strLen<MAX_PATH)::strcpy(MODULEENTRY32::szExePath,(LPSTR)(String&)strExePath);
|
||||
else {::strncpy(MODULEENTRY32::szExePath,(LPSTR)(String&)strExePath,MAX_PATH-1);MODULEENTRY32::szExePath[MAX_PATH-1]=0;}
|
||||
}
|
||||
|
||||
inline
|
||||
MODULEENTRY32 &ModuleEntry::getMODULEENTRY(void)
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleEntry::zeroInit(void)
|
||||
{
|
||||
::memset(&getMODULEENTRY(),0,sizeof(MODULEENTRY32));
|
||||
MODULEENTRY32::dwSize=sizeof(MODULEENTRY32);
|
||||
}
|
||||
#endif
|
||||
|
||||
111
psapint/modinfo.hpp
Normal file
111
psapint/modinfo.hpp
Normal file
@@ -0,0 +1,111 @@
|
||||
#ifndef _PSAPINT_MODULEINFO_HPP_
|
||||
#define _PSAPINT_MODULEINFO_HPP_
|
||||
#ifndef _COMMON_WINDOWS_HPP_
|
||||
#include <common/windows.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_ARRAY_HPP_
|
||||
#include <common/array.hpp>
|
||||
#endif
|
||||
|
||||
class ModuleInfo;
|
||||
typedef Array<ModuleInfo> ModuleInfoList;
|
||||
|
||||
class ModuleInfo
|
||||
{
|
||||
public:
|
||||
ModuleInfo(void);
|
||||
ModuleInfo(const ModuleInfo &someModuleInfo);
|
||||
ModuleInfo(HMODULE hModule,const String &strModuleBaseName=String(),const String &strModuleFileName=String());
|
||||
virtual ~ModuleInfo();
|
||||
ModuleInfo &operator=(const ModuleInfo &someModuleInfo);
|
||||
bool operator==(const ModuleInfo &someModuleInfo)const;
|
||||
HMODULE module(void)const;
|
||||
void module(HMODULE hModule);
|
||||
const String &moduleBaseName(void)const;
|
||||
void moduleBaseName(const String &strModuleBaseName);
|
||||
const String &moduleFileName(void)const;
|
||||
void moduleFileName(const String &strModuleFileName);
|
||||
private:
|
||||
HMODULE mhModule;
|
||||
String mModuleBaseName;
|
||||
String mModuleFileName;
|
||||
};
|
||||
|
||||
inline
|
||||
ModuleInfo::ModuleInfo(void)
|
||||
: mhModule(0)
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ModuleInfo::ModuleInfo(const ModuleInfo &someModuleInfo)
|
||||
: mhModule(someModuleInfo.mhModule), mModuleBaseName(someModuleInfo.mModuleBaseName),
|
||||
mModuleFileName(someModuleInfo.mModuleFileName)
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ModuleInfo::ModuleInfo(HMODULE hModule,const String &strModuleBaseName,const String &strModuleFileName)
|
||||
: mhModule(hModule), mModuleBaseName(strModuleBaseName), mModuleFileName(strModuleFileName)
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ModuleInfo::~ModuleInfo()
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ModuleInfo &ModuleInfo::operator=(const ModuleInfo &someModuleInfo)
|
||||
{
|
||||
module(someModuleInfo.module());
|
||||
moduleBaseName(someModuleInfo.moduleBaseName());
|
||||
moduleFileName(someModuleInfo.moduleFileName());
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline
|
||||
bool ModuleInfo::operator==(const ModuleInfo &someModuleInfo)const
|
||||
{
|
||||
return (module()==someModuleInfo.module()&&
|
||||
moduleBaseName()==someModuleInfo.moduleBaseName()&&
|
||||
moduleFileName()==someModuleInfo.moduleFileName());
|
||||
}
|
||||
|
||||
inline
|
||||
HMODULE ModuleInfo::module(void)const
|
||||
{
|
||||
return mhModule;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleInfo::module(HMODULE hModule)
|
||||
{
|
||||
mhModule=hModule;
|
||||
}
|
||||
|
||||
inline
|
||||
const String &ModuleInfo::moduleBaseName(void)const
|
||||
{
|
||||
return mModuleBaseName;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleInfo::moduleBaseName(const String &strModuleBaseName)
|
||||
{
|
||||
mModuleBaseName=strModuleBaseName;
|
||||
}
|
||||
|
||||
inline
|
||||
const String &ModuleInfo::moduleFileName(void)const
|
||||
{
|
||||
return mModuleFileName;
|
||||
}
|
||||
|
||||
inline
|
||||
void ModuleInfo::moduleFileName(const String &strModuleFileName)
|
||||
{
|
||||
mModuleFileName=strModuleFileName;
|
||||
}
|
||||
|
||||
#endif
|
||||
171
psapint/procentry.hpp
Normal file
171
psapint/procentry.hpp
Normal file
@@ -0,0 +1,171 @@
|
||||
#ifndef _PSAPINT_PROCESSENTRY_HPP_
|
||||
#define _PSAPINT_PROCESSENTRY_HPP_
|
||||
#ifndef _COMMON_WINDOWS_HPP_
|
||||
#include <common/windows.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_TOOLHELP32_HPP_
|
||||
#include <common/tlhelp32.hpp>
|
||||
#endif
|
||||
|
||||
class ProcessEntry : private PROCESSENTRY32
|
||||
{
|
||||
public:
|
||||
ProcessEntry(void);
|
||||
virtual ~ProcessEntry();
|
||||
DWORD cntUsage(void)const;
|
||||
void cntUsage(DWORD cntUsage);
|
||||
DWORD processID(void)const;
|
||||
void processID(DWORD processID);
|
||||
DWORD heapID(void)const;
|
||||
void heapID(DWORD heapID);
|
||||
DWORD moduleID(void)const;
|
||||
void moduleID(DWORD moduleID);
|
||||
DWORD cntThreads(void)const;
|
||||
void cntThreads(DWORD cntThreads);
|
||||
DWORD parentProcessID(void)const;
|
||||
void parentProcessID(DWORD parentProcessID);
|
||||
LONG priClassBase(void)const;
|
||||
void priClassBase(LONG priClassBase);
|
||||
DWORD flags(void)const;
|
||||
void flags(DWORD flags);
|
||||
String strExeFile(void)const;
|
||||
void strExeFile(const String &strExeFile);
|
||||
PROCESSENTRY32 &getPROCESSENTRY(void);
|
||||
private:
|
||||
void zeroInit(void);
|
||||
};
|
||||
|
||||
inline
|
||||
ProcessEntry::ProcessEntry(void)
|
||||
{
|
||||
zeroInit();
|
||||
}
|
||||
|
||||
inline
|
||||
ProcessEntry::~ProcessEntry()
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessEntry::cntUsage(void)const
|
||||
{
|
||||
return PROCESSENTRY32::cntUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessEntry::cntUsage(DWORD cntUsage)
|
||||
{
|
||||
PROCESSENTRY32::cntUsage=cntUsage;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessEntry::processID(void)const
|
||||
{
|
||||
return PROCESSENTRY32::th32ProcessID;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessEntry::processID(DWORD processID)
|
||||
{
|
||||
PROCESSENTRY32::th32ProcessID=processID;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessEntry::heapID(void)const
|
||||
{
|
||||
return PROCESSENTRY32::th32DefaultHeapID;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessEntry::heapID(DWORD heapID)
|
||||
{
|
||||
PROCESSENTRY32::th32DefaultHeapID=heapID;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessEntry::moduleID(void)const
|
||||
{
|
||||
return PROCESSENTRY32::th32ModuleID;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessEntry::moduleID(DWORD moduleID)
|
||||
{
|
||||
PROCESSENTRY32::th32ModuleID=moduleID;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessEntry::cntThreads(void)const
|
||||
{
|
||||
return PROCESSENTRY32::cntThreads;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessEntry::cntThreads(DWORD cntThreads)
|
||||
{
|
||||
PROCESSENTRY32::cntThreads=cntThreads;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessEntry::parentProcessID(void)const
|
||||
{
|
||||
return PROCESSENTRY32::th32ParentProcessID;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessEntry::parentProcessID(DWORD parentProcessID)
|
||||
{
|
||||
PROCESSENTRY32::th32ParentProcessID=parentProcessID;
|
||||
}
|
||||
|
||||
inline
|
||||
LONG ProcessEntry::priClassBase(void)const
|
||||
{
|
||||
return PROCESSENTRY32::pcPriClassBase;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessEntry::priClassBase(LONG priClassBase)
|
||||
{
|
||||
PROCESSENTRY32::pcPriClassBase=priClassBase;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ProcessEntry::flags(void)const
|
||||
{
|
||||
return PROCESSENTRY32::dwFlags;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessEntry::flags(DWORD flags)
|
||||
{
|
||||
PROCESSENTRY32::dwFlags=flags;
|
||||
}
|
||||
|
||||
inline
|
||||
String ProcessEntry::strExeFile(void)const
|
||||
{
|
||||
return PROCESSENTRY32::szExeFile;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessEntry::strExeFile(const String &strExeFile)
|
||||
{
|
||||
int strLen(strExeFile.length());
|
||||
if(strLen<MAX_PATH)::strcpy(PROCESSENTRY32::szExeFile,(LPSTR)(String&)strExeFile);
|
||||
else {::strncpy(PROCESSENTRY32::szExeFile,(LPSTR)(String&)strExeFile,MAX_PATH-1);PROCESSENTRY32::szExeFile[MAX_PATH-1]=0;}
|
||||
}
|
||||
|
||||
inline
|
||||
PROCESSENTRY32 &ProcessEntry::getPROCESSENTRY(void)
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline
|
||||
void ProcessEntry::zeroInit(void)
|
||||
{
|
||||
::memset(&getPROCESSENTRY(),0,sizeof(PROCESSENTRY32));
|
||||
PROCESSENTRY32::dwSize=sizeof(PROCESSENTRY32);
|
||||
}
|
||||
#endif
|
||||
104
psapint/psapi95.cpp
Normal file
104
psapint/psapi95.cpp
Normal file
@@ -0,0 +1,104 @@
|
||||
#include <psapint/psapi95.hpp>
|
||||
#include <psapint/procentry.hpp>
|
||||
#include <psapint/modentry.hpp>
|
||||
#include <common/block.hpp>
|
||||
|
||||
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<ProcessInfo> 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<processInfoBlock.size();index++)processInfoList[index]=processInfoBlock[index];
|
||||
return processInfoList.size()?true:false;
|
||||
}
|
||||
|
||||
bool ProcessAPI95::enumProcessModules(const ProcessID &processID,ProcessEntry &processEntry,ModuleInfoList &moduleInfoList)
|
||||
{
|
||||
ModuleEntry moduleEntry;
|
||||
Block<ModuleInfo> 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<moduleInfoBlock.size();index++)moduleInfoList[index]=moduleInfoBlock[index];
|
||||
return moduleInfoList.size()?true:false;
|
||||
}
|
||||
55
psapint/psapi95.hpp
Normal file
55
psapint/psapi95.hpp
Normal file
@@ -0,0 +1,55 @@
|
||||
#ifndef _PSAPINT_PSAPI95_HPP_
|
||||
#define _PSAPINT_PSAPI95_HPP_
|
||||
#ifndef _COMMON_WINDOWS_HPP_
|
||||
#include <common/windows.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_STRING_HPP_
|
||||
#include <common/string.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_LIBRARY_HPP_
|
||||
#include <common/library.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_TOOLHELP32_HPP_
|
||||
#include <common/tlhelp32.hpp>
|
||||
#endif
|
||||
#ifndef _PSAPINT_PROCESSID_HPP_
|
||||
#include <psapint/procid.hpp>
|
||||
#endif
|
||||
#ifndef _PSAPINT_PROCINFO_HPP_
|
||||
#include <psapint/procinfo.hpp>
|
||||
#endif
|
||||
|
||||
class ProcessEntry;
|
||||
|
||||
class ProcessAPI95
|
||||
{
|
||||
public:
|
||||
ProcessAPI95(void);
|
||||
virtual ~ProcessAPI95();
|
||||
bool enumProcesses(ProcessInfoList &processInfoList);
|
||||
bool isOkay(void)const;
|
||||
private:
|
||||
typedef BOOL (WINAPI *PFNPROCESS32FIRST)(HANDLE hSnapshot,PROCESSENTRY32 *lppe);
|
||||
typedef BOOL (WINAPI *PFNPROCESS32NEXT)(HANDLE hSnapshot,PROCESSENTRY32 *lppe);
|
||||
typedef BOOL (WINAPI *PFNMODULE32FIRST)(HANDLE hSnapshot,MODULEENTRY32 *lpme);
|
||||
typedef BOOL (WINAPI *PFNMODULE32NEXT)(HANDLE hSnapshot,MODULEENTRY32 *lpme);
|
||||
typedef HANDLE (WINAPI *PFNCREATETOOLHELP32SNAPSHOT)(DWORD dwFlags,DWORD thProcessID);
|
||||
ProcessAPI95(const ProcessAPI95 &someProcessAPI);
|
||||
ProcessAPI95 &operator=(const ProcessAPI95 &someProcessAPI);
|
||||
bool enumProcessModules(const ProcessID &processID,ProcessEntry &processEntry,ModuleInfoList &moduleInfoList);
|
||||
|
||||
PFNPROCESS32FIRST mpfnProcess32First;
|
||||
PFNPROCESS32NEXT mpfnProcess32Next;
|
||||
PFNMODULE32FIRST mpfnModule32First;
|
||||
PFNMODULE32NEXT mpfnModule32Next;
|
||||
PFNCREATETOOLHELP32SNAPSHOT mpfnCreateToolhelp32Snapshot;
|
||||
Library mLibrary;
|
||||
};
|
||||
|
||||
inline
|
||||
bool ProcessAPI95::isOkay(void)const
|
||||
{
|
||||
if(!mpfnProcess32First||!mpfnProcess32Next||!mpfnModule32First||!mpfnModule32Next||!mpfnCreateToolhelp32Snapshot)return false;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
86
psapint/psapint.001
Normal file
86
psapint/psapint.001
Normal file
@@ -0,0 +1,86 @@
|
||||
# Microsoft Developer Studio Project File - Name="psapint" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 5.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||
|
||||
CFG=psapint - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "psapint.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "psapint.mak" CFG="psapint - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "psapint - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "psapint - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
|
||||
!IF "$(CFG)" == "psapint - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "psapint - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "msvcobj"
|
||||
# PROP Intermediate_Dir "msvcobj"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
|
||||
# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo /out:"..\exe\psapint.lib"
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "psapint - Win32 Release"
|
||||
# Name "psapint - Win32 Debug"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\psapi.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\psapi95.cpp
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
||||
92
psapint/psapint.dsp
Normal file
92
psapint/psapint.dsp
Normal file
@@ -0,0 +1,92 @@
|
||||
# Microsoft Developer Studio Project File - Name="psapint" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||
|
||||
CFG=psapint - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "psapint.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "psapint.mak" CFG="psapint - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "psapint - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "psapint - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "psapint - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "psapint - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "msvcobj"
|
||||
# PROP Intermediate_Dir "msvcobj"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
|
||||
# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo /out:"..\exe\psapint.lib"
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "psapint - Win32 Release"
|
||||
# Name "psapint - Win32 Debug"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\psapi.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\psapi95.cpp
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
||||
Reference in New Issue
Block a user