The Gaudi Framework  v40r0 (475e45c1)
Win32PsApi.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #pragma once
12 #ifdef _WIN32
13 typedef struct _MODULEINFO {
14  LPVOID lpBaseOfDll;
15  DWORD SizeOfImage;
16  LPVOID EntryPoint;
17 } MODULEINFO, *LPMODULEINFO;
18 typedef struct _PSAPI_WS_WATCH_INFORMATION {
19  LPVOID FaultingPc;
20  LPVOID FaultingVa;
21 } PSAPI_WS_WATCH_INFORMATION, *PPSAPI_WS_WATCH_INFORMATION;
22 typedef struct _PROCESS_MEMORY_COUNTERS {
23  DWORD cb;
24  DWORD PageFaultCount;
25  DWORD PeakWorkingSetSize;
26  DWORD WorkingSetSize;
27  DWORD QuotaPeakPagedPoolUsage;
28  DWORD QuotaPagedPoolUsage;
29  DWORD QuotaPeakNonPagedPoolUsage;
30  DWORD QuotaNonPagedPoolUsage;
31  DWORD PagefileUsage;
32  DWORD PeakPagefileUsage;
33 } PROCESS_MEMORY_COUNTERS;
34 typedef PROCESS_MEMORY_COUNTERS* PPROCESS_MEMORY_COUNTERS;
35 
36 class PsApiFunctions {
37 public:
38  bool m_isValid;
39  BOOL( WINAPI* EnumProcesses )( DWORD* lpidProcess, DWORD cb, DWORD* cbNeeded );
40  BOOL( WINAPI* EnumProcessModules )( HANDLE hProcess, HINSTANCE* lphModule, DWORD cb, LPDWORD lpcbNeeded );
41  DWORD( WINAPI* GetModuleBaseNameA )( HANDLE hProcess, HINSTANCE hModule, LPSTR lpBaseName, DWORD nSize );
42  DWORD( WINAPI* GetModuleFileNameExA )( HANDLE hProcess, HINSTANCE hModule, LPSTR lpFilename, DWORD nSize );
43  BOOL( WINAPI* GetModuleInformation )( HANDLE hProcess, HMODULE hModule, LPMODULEINFO lpmodinfo, DWORD cb );
44  BOOL( WINAPI* EmptyWorkingSet )( HANDLE hProcess );
45  BOOL( WINAPI* QueryWorkingSet )( HANDLE hProcess, PVOID pv, DWORD cb );
46  BOOL( WINAPI* InitializeProcessForWsWatch )( HANDLE hProcess );
47  BOOL( WINAPI* GetWsChanges )( HANDLE hProcess, PPSAPI_WS_WATCH_INFORMATION lpWatchInfo, DWORD cb );
48  DWORD( WINAPI* GetMappedFileNameA )( HANDLE hProcess, LPVOID lpv, LPSTR lpFilename, DWORD nSize );
49  BOOL( WINAPI* EnumDeviceDrivers )( LPVOID* lpImageBase, DWORD cb, LPDWORD lpcbNeeded );
50  DWORD( WINAPI* GetDeviceDriverBaseNameA )( LPVOID ImageBase, LPSTR lpBaseName, DWORD nSize );
51  DWORD( WINAPI* GetDeviceDriverFileNameA )( LPVOID ImageBase, LPSTR lpFilename, DWORD nSize );
52  BOOL( WINAPI* GetProcessMemoryInfo )( HANDLE Process, PPROCESS_MEMORY_COUNTERS ppsmemCounters, DWORD cb );
53  void load( HINSTANCE handle, const char* name, void** pFunction ) {
54  *pFunction = (void*)::GetProcAddress( handle, name );
55  if ( 0 == *pFunction ) m_isValid = false;
56  }
57  bool isValid() const { return m_isValid; }
58  PsApiFunctions() {
59  m_isValid = true;
60  HINSTANCE mh = ::LoadLibrary( "PSAPI.DLL" );
61  if ( 0 == mh ) {
62  m_isValid = false;
63  } else {
64  load( mh, "EnumProcesses", (void**)&EnumProcesses );
65  load( mh, "EnumProcessModules", (void**)&EnumProcessModules );
66  load( mh, "GetModuleBaseNameA", (void**)&GetModuleBaseNameA );
67  load( mh, "GetModuleFileNameExA", (void**)&GetModuleFileNameExA );
68  load( mh, "GetModuleInformation", (void**)&GetModuleInformation );
69  load( mh, "EmptyWorkingSet", (void**)&EmptyWorkingSet );
70  load( mh, "QueryWorkingSet", (void**)&QueryWorkingSet );
71  load( mh, "InitializeProcessForWsWatch", (void**)&InitializeProcessForWsWatch );
72  load( mh, "GetWsChanges", (void**)&GetWsChanges );
73  load( mh, "GetMappedFileNameA", (void**)&GetMappedFileNameA );
74  load( mh, "EnumDeviceDrivers", (void**)&EnumDeviceDrivers );
75  load( mh, "GetDeviceDriverBaseNameA", (void**)&GetDeviceDriverBaseNameA );
76  load( mh, "GetDeviceDriverFileNameA", (void**)&GetDeviceDriverFileNameA );
77  load( mh, "GetProcessMemoryInfo", (void**)&GetProcessMemoryInfo );
78  }
79  }
80 };
81 #endif
System::EntryPoint
unsigned long(* EntryPoint)(const unsigned long iid, void **ppvObject)
Definition of the "generic" DLL entry point function.
Definition: System.h:41
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:77