psapi.h 9.1 KB

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