1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifndef _PSAPI_H_ 7 #define _PSAPI_H_ 8 9 #include <_mingw_unicode.h> 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 #ifndef PSAPI_VERSION 16 #if NTDDI_VERSION >= NTDDI_WIN7 17 #define PSAPI_VERSION 2 18 #else 19 #define PSAPI_VERSION 1 20 #endif 21 #endif 22 23 #if PSAPI_VERSION > 1 24 #define EnumProcesses K32EnumProcesses 25 #define EnumProcessModules K32EnumProcessModules 26 #define EnumProcessModulesEx K32EnumProcessModulesEx 27 #define GetModuleBaseNameA K32GetModuleBaseNameA 28 #define GetModuleBaseNameW K32GetModuleBaseNameW 29 #define GetModuleFileNameExA K32GetModuleFileNameExA 30 #define GetModuleFileNameExW K32GetModuleFileNameExW 31 #define GetModuleInformation K32GetModuleInformation 32 #define EmptyWorkingSet K32EmptyWorkingSet 33 #define QueryWorkingSet K32QueryWorkingSet 34 #define QueryWorkingSetEx K32QueryWorkingSetEx 35 #define InitializeProcessForWsWatch K32InitializeProcessForWsWatch 36 #define GetWsChanges K32GetWsChanges 37 #define GetWsChangesEx K32GetWsChangesEx 38 #define GetMappedFileNameW K32GetMappedFileNameW 39 #define GetMappedFileNameA K32GetMappedFileNameA 40 #define EnumDeviceDrivers K32EnumDeviceDrivers 41 #define GetDeviceDriverBaseNameA K32GetDeviceDriverBaseNameA 42 #define GetDeviceDriverBaseNameW K32GetDeviceDriverBaseNameW 43 #define GetDeviceDriverFileNameA K32GetDeviceDriverFileNameA 44 #define GetDeviceDriverFileNameW K32GetDeviceDriverFileNameW 45 #define GetProcessMemoryInfo K32GetProcessMemoryInfo 46 #define GetPerformanceInfo K32GetPerformanceInfo 47 #define EnumPageFilesW K32EnumPageFilesW 48 #define EnumPageFilesA K32EnumPageFilesA 49 #define GetProcessImageFileNameA K32GetProcessImageFileNameA 50 #define GetProcessImageFileNameW K32GetProcessImageFileNameW 51 #endif 52 53 #define GetModuleBaseName __MINGW_NAME_AW(GetModuleBaseName) 54 #define GetModuleFileNameEx __MINGW_NAME_AW(GetModuleFileNameEx) 55 #define GetMappedFileName __MINGW_NAME_AW(GetMappedFileName) 56 #define GetDeviceDriverBaseName __MINGW_NAME_AW(GetDeviceDriverBaseName) 57 #define GetDeviceDriverFileName __MINGW_NAME_AW(GetDeviceDriverFileName) 58 #define PENUM_PAGE_FILE_CALLBACK __MINGW_NAME_AW(PENUM_PAGE_FILE_CALLBACK) 59 #define EnumPageFiles __MINGW_NAME_AW(EnumPageFiles) 60 #define GetProcessImageFileName __MINGW_NAME_AW(GetProcessImageFileName) 61 62 #ifndef LIST_MODULES_DEFAULT 63 #define LIST_MODULES_DEFAULT 0x0 64 #endif 65 #ifndef LIST_MODULES_32BIT 66 #define LIST_MODULES_32BIT 0x01 67 #endif 68 #ifndef LIST_MODULES_64BIT 69 #define LIST_MODULES_64BIT 0x02 70 #endif 71 #ifndef LIST_MODULES_ALL 72 #define LIST_MODULES_ALL (LIST_MODULES_32BIT|LIST_MODULES_64BIT) 73 #endif 74 75 WINBOOL WINAPI EnumProcesses(DWORD *lpidProcess,DWORD cb,DWORD *cbNeeded); 76 WINBOOL WINAPI EnumProcessModules(HANDLE hProcess,HMODULE *lphModule,DWORD cb,LPDWORD lpcbNeeded); 77 DWORD WINAPI GetModuleBaseNameA(HANDLE hProcess,HMODULE hModule,LPSTR lpBaseName,DWORD nSize); 78 DWORD WINAPI GetModuleBaseNameW(HANDLE hProcess,HMODULE hModule,LPWSTR lpBaseName,DWORD nSize); 79 DWORD WINAPI GetModuleFileNameExA(HANDLE hProcess,HMODULE hModule,LPSTR lpFilename,DWORD nSize); 80 DWORD WINAPI GetModuleFileNameExW(HANDLE hProcess,HMODULE hModule,LPWSTR lpFilename,DWORD nSize); 81 82 typedef struct _MODULEINFO { 83 LPVOID lpBaseOfDll; 84 DWORD SizeOfImage; 85 LPVOID EntryPoint; 86 } MODULEINFO,*LPMODULEINFO; 87 88 WINBOOL WINAPI GetModuleInformation(HANDLE hProcess,HMODULE hModule,LPMODULEINFO lpmodinfo,DWORD cb); 89 WINBOOL WINAPI EmptyWorkingSet(HANDLE hProcess); 90 WINBOOL WINAPI QueryWorkingSet(HANDLE hProcess,PVOID pv,DWORD cb); 91 WINBOOL WINAPI QueryWorkingSetEx(HANDLE hProcess,PVOID pv,DWORD cb); 92 WINBOOL WINAPI InitializeProcessForWsWatch(HANDLE hProcess); 93 94 typedef struct _PSAPI_WS_WATCH_INFORMATION { 95 LPVOID FaultingPc; 96 LPVOID FaultingVa; 97 } PSAPI_WS_WATCH_INFORMATION,*PPSAPI_WS_WATCH_INFORMATION; 98 99 WINBOOL WINAPI GetWsChanges(HANDLE hProcess,PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,DWORD cb); 100 DWORD WINAPI GetMappedFileNameW(HANDLE hProcess,LPVOID lpv,LPWSTR lpFilename,DWORD nSize); 101 DWORD WINAPI GetMappedFileNameA(HANDLE hProcess,LPVOID lpv,LPSTR lpFilename,DWORD nSize); 102 WINBOOL WINAPI EnumDeviceDrivers(LPVOID *lpImageBase,DWORD cb,LPDWORD lpcbNeeded); 103 DWORD WINAPI GetDeviceDriverBaseNameA(LPVOID ImageBase,LPSTR lpBaseName,DWORD nSize); 104 DWORD WINAPI GetDeviceDriverBaseNameW(LPVOID ImageBase,LPWSTR lpBaseName,DWORD nSize); 105 DWORD WINAPI GetDeviceDriverFileNameA(LPVOID ImageBase,LPSTR lpFilename,DWORD nSize); 106 DWORD WINAPI GetDeviceDriverFileNameW(LPVOID ImageBase,LPWSTR lpFilename,DWORD nSize); 107 108 typedef struct _PROCESS_MEMORY_COUNTERS { 109 DWORD cb; 110 DWORD PageFaultCount; 111 SIZE_T PeakWorkingSetSize; 112 SIZE_T WorkingSetSize; 113 SIZE_T QuotaPeakPagedPoolUsage; 114 SIZE_T QuotaPagedPoolUsage; 115 SIZE_T QuotaPeakNonPagedPoolUsage; 116 SIZE_T QuotaNonPagedPoolUsage; 117 SIZE_T PagefileUsage; 118 SIZE_T PeakPagefileUsage; 119 } PROCESS_MEMORY_COUNTERS; 120 typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS; 121 122 typedef struct _PROCESS_MEMORY_COUNTERS_EX { 123 DWORD cb; 124 DWORD PageFaultCount; 125 SIZE_T PeakWorkingSetSize; 126 SIZE_T WorkingSetSize; 127 SIZE_T QuotaPeakPagedPoolUsage; 128 SIZE_T QuotaPagedPoolUsage; 129 SIZE_T QuotaPeakNonPagedPoolUsage; 130 SIZE_T QuotaNonPagedPoolUsage; 131 SIZE_T PagefileUsage; 132 SIZE_T PeakPagefileUsage; 133 SIZE_T PrivateUsage; 134 } PROCESS_MEMORY_COUNTERS_EX; 135 typedef PROCESS_MEMORY_COUNTERS_EX *PPROCESS_MEMORY_COUNTERS_EX; 136 137 WINBOOL WINAPI GetProcessMemoryInfo(HANDLE Process,PPROCESS_MEMORY_COUNTERS ppsmemCounters,DWORD cb); 138 139 typedef struct _PERFORMANCE_INFORMATION { 140 DWORD cb; 141 SIZE_T CommitTotal; 142 SIZE_T CommitLimit; 143 SIZE_T CommitPeak; 144 SIZE_T PhysicalTotal; 145 SIZE_T PhysicalAvailable; 146 SIZE_T SystemCache; 147 SIZE_T KernelTotal; 148 SIZE_T KernelPaged; 149 SIZE_T KernelNonpaged; 150 SIZE_T PageSize; 151 DWORD HandleCount; 152 DWORD ProcessCount; 153 DWORD ThreadCount; 154 } PERFORMANCE_INFORMATION,*PPERFORMANCE_INFORMATION,PERFORMACE_INFORMATION,*PPERFORMACE_INFORMATION; 155 156 WINBOOL WINAPI GetPerformanceInfo (PPERFORMACE_INFORMATION pPerformanceInformation,DWORD cb); 157 158 typedef struct _ENUM_PAGE_FILE_INFORMATION { 159 DWORD cb; 160 DWORD Reserved; 161 SIZE_T TotalSize; 162 SIZE_T TotalInUse; 163 SIZE_T PeakUsage; 164 } ENUM_PAGE_FILE_INFORMATION,*PENUM_PAGE_FILE_INFORMATION; 165 166 typedef WINBOOL (*PENUM_PAGE_FILE_CALLBACKW) (LPVOID pContext,PENUM_PAGE_FILE_INFORMATION pPageFileInfo,LPCWSTR lpFilename); 167 typedef WINBOOL (*PENUM_PAGE_FILE_CALLBACKA) (LPVOID pContext,PENUM_PAGE_FILE_INFORMATION pPageFileInfo,LPCSTR lpFilename); 168 169 WINBOOL WINAPI EnumPageFilesW (PENUM_PAGE_FILE_CALLBACKW pCallBackRoutine,LPVOID pContext); 170 WINBOOL WINAPI EnumPageFilesA (PENUM_PAGE_FILE_CALLBACKA pCallBackRoutine,LPVOID pContext); 171 DWORD WINAPI GetProcessImageFileNameA(HANDLE hProcess,LPSTR lpImageFileName,DWORD nSize); 172 DWORD WINAPI GetProcessImageFileNameW(HANDLE hProcess,LPWSTR lpImageFileName,DWORD nSize); 173 174 typedef struct _PSAPI_WS_WATCH_INFORMATION_EX { 175 PSAPI_WS_WATCH_INFORMATION BasicInfo; 176 ULONG_PTR FaultingThreadId; 177 ULONG_PTR Flags; 178 } PSAPI_WS_WATCH_INFORMATION_EX, *PPSAPI_WS_WATCH_INFORMATION_EX; 179 180 WINBOOL WINAPI GetWsChangesEx( 181 HANDLE hProcess, 182 PPSAPI_WS_WATCH_INFORMATION_EX lpWatchInfoEx, 183 DWORD cb 184 ); 185 186 WINBOOL WINAPI EnumProcessModulesEx( 187 HANDLE hProcess, 188 HMODULE *lphModule, 189 DWORD cb, 190 LPDWORD lpcbNeeded, 191 DWORD dwFilterFlag 192 ); 193 194 typedef union _PSAPI_WORKING_SET_BLOCK { 195 ULONG_PTR Flags; 196 __C89_NAMELESS struct { 197 ULONG_PTR Protection :5; 198 ULONG_PTR ShareCount :3; 199 ULONG_PTR Shared :1; 200 ULONG_PTR Reserved :3; 201 #ifdef _WIN64 202 ULONG_PTR VirtualPage :52; 203 #else 204 ULONG_PTR VirtualPage :20; 205 #endif 206 } ; 207 } PSAPI_WORKING_SET_BLOCK, *PPSAPI_WORKING_SET_BLOCK; 208 209 typedef struct _PSAPI_WORKING_SET_INFORMATION { 210 ULONG_PTR NumberOfEntries; 211 PSAPI_WORKING_SET_BLOCK WorkingSetInfo[1]; 212 } PSAPI_WORKING_SET_INFORMATION, *PPSAPI_WORKING_SET_INFORMATION; 213 214 typedef union _PSAPI_WORKING_SET_EX_BLOCK { 215 ULONG_PTR Flags; 216 __C89_NAMELESS struct { 217 ULONG_PTR Valid :1; 218 ULONG_PTR ShareCount :3; 219 ULONG_PTR Win32Protection :11; 220 ULONG_PTR Shared :1; 221 ULONG_PTR Node :6; 222 ULONG_PTR Locked :1; 223 ULONG_PTR LargePage :1; 224 } DUMMYSTRUCTNAME; 225 } PSAPI_WORKING_SET_EX_BLOCK, *PPSAPI_WORKING_SET_EX_BLOCK; 226 227 typedef struct _PSAPI_WORKING_SET_EX_INFORMATION { 228 PVOID VirtualAddress; 229 PSAPI_WORKING_SET_EX_BLOCK VirtualAttributes; 230 } PSAPI_WORKING_SET_EX_INFORMATION, *PPSAPI_WORKING_SET_EX_INFORMATION; 231 232 #ifdef __cplusplus 233 } 234 #endif 235 #endif 236