| # Gaudi Framework, version v20r2
Generated: 18 Jul 2008

- Main Page
- Namespaces
- Classes
- Files
- Directories
- Related Pages

- Search for |

- File List
- File Members

# Win32PsApi.h

Go to the documentation of this file.

    00001 //====================================================================
    00002 //      Win32PsApi.h
    00003 //--------------------------------------------------------------------
    00004 //
    00005 //      Package    : System (The LHCb System service)
    00006 //
    00007 //  Description: Definition of Systems internals for WIN32
    00008 //               This file is NOT meant to be used outside this
    00009 //               sub-package!
    00010 //
    00011 //      Author     : M.Frank
    00012 //  Created    : 13/11/00
    00013 //      Changes    :
    00014 //====================================================================
    00015 #ifndef GAUDI_SYSTEM_WIN32PSAPI_H
    00016 #define GAUDI_SYSTEM_WIN32PSAPI_H
    00017 #ifdef _WIN32
    00018     typedef struct _MODULEINFO {
    00019       LPVOID lpBaseOfDll;
    00020       DWORD SizeOfImage;
    00021       LPVOID EntryPoint;
    00022     } MODULEINFO, *LPMODULEINFO;
    00023     typedef struct _PSAPI_WS_WATCH_INFORMATION {
    00024       LPVOID FaultingPc;
    00025       LPVOID FaultingVa;
    00026     } PSAPI_WS_WATCH_INFORMATION, *PPSAPI_WS_WATCH_INFORMATION;
    00027     typedef struct _PROCESS_MEMORY_COUNTERS {
    00028         DWORD cb;
    00029         DWORD PageFaultCount;
    00030         DWORD PeakWorkingSetSize;
    00031         DWORD WorkingSetSize;
    00032         DWORD QuotaPeakPagedPoolUsage;
    00033         DWORD QuotaPagedPoolUsage;
    00034         DWORD QuotaPeakNonPagedPoolUsage;
    00035         DWORD QuotaNonPagedPoolUsage;
    00036         DWORD PagefileUsage;
    00037         DWORD PeakPagefileUsage;
    00038     } PROCESS_MEMORY_COUNTERS;
    00039     typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
    00040
    00041   class PsApiFunctions    {
    00042   public:
    00043     bool m_isValid;
    00044     BOOL  (WINAPI *EnumProcesses)           (DWORD* lpidProcess, DWORD   cb, DWORD * cbNeeded);
    00045     BOOL  (WINAPI *EnumProcessModules)      (HANDLE hProcess, HINSTANCE *lphModule, DWORD cb, LPDWORD lpcbNeeded);
    00046     DWORD (WINAPI *GetModuleBaseNameA)      (HANDLE hProcess, HINSTANCE hModule, LPSTR lpBaseName, DWORD nSize );
    00047     DWORD (WINAPI *GetModuleFileNameExA)    (HANDLE hProcess, HINSTANCE hModule, LPSTR lpFilename, DWORD nSize);
    00048     BOOL  (WINAPI *GetModuleInformation)    (HANDLE hProcess, HMODULE hModule, LPMODULEINFO lpmodinfo, DWORD cb );
    00049     BOOL  (WINAPI *EmptyWorkingSet)         (HANDLE hProcess);
    00050     BOOL  (WINAPI *QueryWorkingSet)         (HANDLE hProcess, PVOID pv, DWORD cb );
    00051     BOOL  (WINAPI *InitializeProcessForWsWatch)(HANDLE hProcess);
    00052     BOOL  (WINAPI *GetWsChanges)            (HANDLE hProcess, PPSAPI_WS_WATCH_INFORMATION lpWatchInfo, DWORD cb);
    00053     DWORD (WINAPI *GetMappedFileNameA)      (HANDLE hProcess, LPVOID lpv, LPSTR lpFilename, DWORD nSize );
    00054     BOOL  (WINAPI *EnumDeviceDrivers)       (LPVOID *lpImageBase, DWORD cb, LPDWORD lpcbNeeded );
    00055     DWORD (WINAPI *GetDeviceDriverBaseNameA)(LPVOID ImageBase, LPSTR lpBaseName, DWORD nSize );
    00056     DWORD (WINAPI *GetDeviceDriverFileNameA)(LPVOID ImageBase, LPSTR lpFilename, DWORD nSize );
    00057     BOOL  (WINAPI *GetProcessMemoryInfo)    (HANDLE Process,   PPROCESS_MEMORY_COUNTERS ppsmemCounters, DWORD cb );
    00058     void load(HINSTANCE handle, const char* name, void** pFunction)    {
    00059       *pFunction = (void*)::GetProcAddress(handle, name);
    00060       if ( 0 == *pFunction ) m_isValid = false;
    00061     }
    00062     bool isValid()    const   {
    00063       return m_isValid;
    00064     }
    00065     PsApiFunctions()    {
    00066       m_isValid = true;
    00067       HINSTANCE mh = ::LoadLibrary("PSAPI.DLL");
    00068       if ( 0 == mh )  {
    00069         m_isValid = false;
    00070       }
    00071       else  {
    00072         load( mh, "EnumProcesses",                (void**)&EnumProcesses );
    00073         load( mh, "EnumProcessModules",           (void**)&EnumProcessModules );
    00074         load( mh, "GetModuleBaseNameA",           (void**)&GetModuleBaseNameA );
    00075         load( mh, "GetModuleFileNameExA",         (void**)&GetModuleFileNameExA );
    00076         load( mh, "GetModuleInformation",         (void**)&GetModuleInformation );
    00077         load( mh, "EmptyWorkingSet",              (void**)&EmptyWorkingSet );
    00078         load( mh, "QueryWorkingSet",              (void**)&QueryWorkingSet );
    00079         load( mh, "InitializeProcessForWsWatch",  (void**)&InitializeProcessForWsWatch );
    00080         load( mh, "GetWsChanges",                 (void**)&GetWsChanges );
    00081         load( mh, "GetMappedFileNameA",           (void**)&GetMappedFileNameA );
    00082         load( mh, "EnumDeviceDrivers",            (void**)&EnumDeviceDrivers );
    00083         load( mh, "GetDeviceDriverBaseNameA",     (void**)&GetDeviceDriverBaseNameA );
    00084         load( mh, "GetDeviceDriverFileNameA",     (void**)&GetDeviceDriverFileNameA );
    00085         load( mh, "GetProcessMemoryInfo",         (void**)&GetProcessMemoryInfo );
    00086       }
    00087     }
    00088   };
    00089 #endif
    00090
    00091 #endif    // GAUDI_SYSTEM_WIN32PSAPI_H