master
  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
 12extern "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 (CALLBACK *PENUM_PAGE_FILE_CALLBACKW) (LPVOID pContext,PENUM_PAGE_FILE_INFORMATION pPageFileInfo,LPCWSTR lpFilename);
167  typedef WINBOOL (CALLBACK *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  
174typedef 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
180WINBOOL WINAPI GetWsChangesEx(
181  HANDLE hProcess,
182  PPSAPI_WS_WATCH_INFORMATION_EX lpWatchInfoEx,
183  DWORD cb
184);
185
186WINBOOL WINAPI EnumProcessModulesEx(
187  HANDLE hProcess,
188  HMODULE *lphModule,
189  DWORD cb,
190  LPDWORD lpcbNeeded,
191  DWORD dwFilterFlag
192);
193
194typedef 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
209typedef 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
214typedef union _PSAPI_WORKING_SET_EX_BLOCK {
215  ULONG_PTR Flags;
216  __C89_NAMELESS union {
217    __C89_NAMELESS struct {
218      ULONG_PTR Valid : 1;
219      ULONG_PTR ShareCount : 3;
220      ULONG_PTR Win32Protection : 11;
221      ULONG_PTR Shared : 1;
222      ULONG_PTR Node : 6;
223      ULONG_PTR Locked : 1;
224      ULONG_PTR LargePage : 1;
225      ULONG_PTR Reserved : 7;
226      ULONG_PTR Bad : 1;
227#ifdef _WIN64
228      ULONG_PTR ReservedUlong : 32;
229#endif
230    };
231    struct {
232      ULONG_PTR Valid : 1;
233      ULONG_PTR Reserved0 : 14;
234      ULONG_PTR Shared : 1;
235      ULONG_PTR Reserved1 : 15;
236      ULONG_PTR Bad : 1;
237#ifdef _WIN64
238      ULONG_PTR ReservedUlong : 32;
239#endif
240    } Invalid;
241  };
242} PSAPI_WORKING_SET_EX_BLOCK, *PPSAPI_WORKING_SET_EX_BLOCK;
243
244typedef struct _PSAPI_WORKING_SET_EX_INFORMATION {
245  PVOID                      VirtualAddress;
246  PSAPI_WORKING_SET_EX_BLOCK VirtualAttributes;
247} PSAPI_WORKING_SET_EX_INFORMATION, *PPSAPI_WORKING_SET_EX_INFORMATION;
248
249#ifdef __cplusplus
250}
251#endif
252#endif