49d1a4c562
also start prefering NtDll API. so far: * NtQueryInformationFile * NtClose adds a performance workaround for windows unicode conversion. but that should probably be removed before merging
236 lines
8.7 KiB
C
236 lines
8.7 KiB
C
/**
|
|
* This file has no copyright assigned and is placed in the Public Domain.
|
|
* This file is part of the mingw-w64 runtime package.
|
|
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
|
*/
|
|
#ifndef _PSAPI_H_
|
|
#define _PSAPI_H_
|
|
|
|
#include <_mingw_unicode.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef PSAPI_VERSION
|
|
#if NTDDI_VERSION >= NTDDI_WIN7
|
|
#define PSAPI_VERSION 2
|
|
#else
|
|
#define PSAPI_VERSION 1
|
|
#endif
|
|
#endif
|
|
|
|
#if PSAPI_VERSION > 1
|
|
#define EnumProcesses K32EnumProcesses
|
|
#define EnumProcessModules K32EnumProcessModules
|
|
#define EnumProcessModulesEx K32EnumProcessModulesEx
|
|
#define GetModuleBaseNameA K32GetModuleBaseNameA
|
|
#define GetModuleBaseNameW K32GetModuleBaseNameW
|
|
#define GetModuleFileNameExA K32GetModuleFileNameExA
|
|
#define GetModuleFileNameExW K32GetModuleFileNameExW
|
|
#define GetModuleInformation K32GetModuleInformation
|
|
#define EmptyWorkingSet K32EmptyWorkingSet
|
|
#define QueryWorkingSet K32QueryWorkingSet
|
|
#define QueryWorkingSetEx K32QueryWorkingSetEx
|
|
#define InitializeProcessForWsWatch K32InitializeProcessForWsWatch
|
|
#define GetWsChanges K32GetWsChanges
|
|
#define GetWsChangesEx K32GetWsChangesEx
|
|
#define GetMappedFileNameW K32GetMappedFileNameW
|
|
#define GetMappedFileNameA K32GetMappedFileNameA
|
|
#define EnumDeviceDrivers K32EnumDeviceDrivers
|
|
#define GetDeviceDriverBaseNameA K32GetDeviceDriverBaseNameA
|
|
#define GetDeviceDriverBaseNameW K32GetDeviceDriverBaseNameW
|
|
#define GetDeviceDriverFileNameA K32GetDeviceDriverFileNameA
|
|
#define GetDeviceDriverFileNameW K32GetDeviceDriverFileNameW
|
|
#define GetProcessMemoryInfo K32GetProcessMemoryInfo
|
|
#define GetPerformanceInfo K32GetPerformanceInfo
|
|
#define EnumPageFilesW K32EnumPageFilesW
|
|
#define EnumPageFilesA K32EnumPageFilesA
|
|
#define GetProcessImageFileNameA K32GetProcessImageFileNameA
|
|
#define GetProcessImageFileNameW K32GetProcessImageFileNameW
|
|
#endif
|
|
|
|
#define GetModuleBaseName __MINGW_NAME_AW(GetModuleBaseName)
|
|
#define GetModuleFileNameEx __MINGW_NAME_AW(GetModuleFileNameEx)
|
|
#define GetMappedFileName __MINGW_NAME_AW(GetMappedFileName)
|
|
#define GetDeviceDriverBaseName __MINGW_NAME_AW(GetDeviceDriverBaseName)
|
|
#define GetDeviceDriverFileName __MINGW_NAME_AW(GetDeviceDriverFileName)
|
|
#define PENUM_PAGE_FILE_CALLBACK __MINGW_NAME_AW(PENUM_PAGE_FILE_CALLBACK)
|
|
#define EnumPageFiles __MINGW_NAME_AW(EnumPageFiles)
|
|
#define GetProcessImageFileName __MINGW_NAME_AW(GetProcessImageFileName)
|
|
|
|
#ifndef LIST_MODULES_DEFAULT
|
|
#define LIST_MODULES_DEFAULT 0x0
|
|
#endif
|
|
#ifndef LIST_MODULES_32BIT
|
|
#define LIST_MODULES_32BIT 0x01
|
|
#endif
|
|
#ifndef LIST_MODULES_64BIT
|
|
#define LIST_MODULES_64BIT 0x02
|
|
#endif
|
|
#ifndef LIST_MODULES_ALL
|
|
#define LIST_MODULES_ALL (LIST_MODULES_32BIT|LIST_MODULES_64BIT)
|
|
#endif
|
|
|
|
WINBOOL WINAPI EnumProcesses(DWORD *lpidProcess,DWORD cb,DWORD *cbNeeded);
|
|
WINBOOL WINAPI EnumProcessModules(HANDLE hProcess,HMODULE *lphModule,DWORD cb,LPDWORD lpcbNeeded);
|
|
DWORD WINAPI GetModuleBaseNameA(HANDLE hProcess,HMODULE hModule,LPSTR lpBaseName,DWORD nSize);
|
|
DWORD WINAPI GetModuleBaseNameW(HANDLE hProcess,HMODULE hModule,LPWSTR lpBaseName,DWORD nSize);
|
|
DWORD WINAPI GetModuleFileNameExA(HANDLE hProcess,HMODULE hModule,LPSTR lpFilename,DWORD nSize);
|
|
DWORD WINAPI GetModuleFileNameExW(HANDLE hProcess,HMODULE hModule,LPWSTR lpFilename,DWORD nSize);
|
|
|
|
typedef struct _MODULEINFO {
|
|
LPVOID lpBaseOfDll;
|
|
DWORD SizeOfImage;
|
|
LPVOID EntryPoint;
|
|
} MODULEINFO,*LPMODULEINFO;
|
|
|
|
WINBOOL WINAPI GetModuleInformation(HANDLE hProcess,HMODULE hModule,LPMODULEINFO lpmodinfo,DWORD cb);
|
|
WINBOOL WINAPI EmptyWorkingSet(HANDLE hProcess);
|
|
WINBOOL WINAPI QueryWorkingSet(HANDLE hProcess,PVOID pv,DWORD cb);
|
|
WINBOOL WINAPI QueryWorkingSetEx(HANDLE hProcess,PVOID pv,DWORD cb);
|
|
WINBOOL WINAPI InitializeProcessForWsWatch(HANDLE hProcess);
|
|
|
|
typedef struct _PSAPI_WS_WATCH_INFORMATION {
|
|
LPVOID FaultingPc;
|
|
LPVOID FaultingVa;
|
|
} PSAPI_WS_WATCH_INFORMATION,*PPSAPI_WS_WATCH_INFORMATION;
|
|
|
|
WINBOOL WINAPI GetWsChanges(HANDLE hProcess,PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,DWORD cb);
|
|
DWORD WINAPI GetMappedFileNameW(HANDLE hProcess,LPVOID lpv,LPWSTR lpFilename,DWORD nSize);
|
|
DWORD WINAPI GetMappedFileNameA(HANDLE hProcess,LPVOID lpv,LPSTR lpFilename,DWORD nSize);
|
|
WINBOOL WINAPI EnumDeviceDrivers(LPVOID *lpImageBase,DWORD cb,LPDWORD lpcbNeeded);
|
|
DWORD WINAPI GetDeviceDriverBaseNameA(LPVOID ImageBase,LPSTR lpBaseName,DWORD nSize);
|
|
DWORD WINAPI GetDeviceDriverBaseNameW(LPVOID ImageBase,LPWSTR lpBaseName,DWORD nSize);
|
|
DWORD WINAPI GetDeviceDriverFileNameA(LPVOID ImageBase,LPSTR lpFilename,DWORD nSize);
|
|
DWORD WINAPI GetDeviceDriverFileNameW(LPVOID ImageBase,LPWSTR lpFilename,DWORD nSize);
|
|
|
|
typedef struct _PROCESS_MEMORY_COUNTERS {
|
|
DWORD cb;
|
|
DWORD PageFaultCount;
|
|
SIZE_T PeakWorkingSetSize;
|
|
SIZE_T WorkingSetSize;
|
|
SIZE_T QuotaPeakPagedPoolUsage;
|
|
SIZE_T QuotaPagedPoolUsage;
|
|
SIZE_T QuotaPeakNonPagedPoolUsage;
|
|
SIZE_T QuotaNonPagedPoolUsage;
|
|
SIZE_T PagefileUsage;
|
|
SIZE_T PeakPagefileUsage;
|
|
} PROCESS_MEMORY_COUNTERS;
|
|
typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
|
|
|
|
typedef struct _PROCESS_MEMORY_COUNTERS_EX {
|
|
DWORD cb;
|
|
DWORD PageFaultCount;
|
|
SIZE_T PeakWorkingSetSize;
|
|
SIZE_T WorkingSetSize;
|
|
SIZE_T QuotaPeakPagedPoolUsage;
|
|
SIZE_T QuotaPagedPoolUsage;
|
|
SIZE_T QuotaPeakNonPagedPoolUsage;
|
|
SIZE_T QuotaNonPagedPoolUsage;
|
|
SIZE_T PagefileUsage;
|
|
SIZE_T PeakPagefileUsage;
|
|
SIZE_T PrivateUsage;
|
|
} PROCESS_MEMORY_COUNTERS_EX;
|
|
typedef PROCESS_MEMORY_COUNTERS_EX *PPROCESS_MEMORY_COUNTERS_EX;
|
|
|
|
WINBOOL WINAPI GetProcessMemoryInfo(HANDLE Process,PPROCESS_MEMORY_COUNTERS ppsmemCounters,DWORD cb);
|
|
|
|
typedef struct _PERFORMANCE_INFORMATION {
|
|
DWORD cb;
|
|
SIZE_T CommitTotal;
|
|
SIZE_T CommitLimit;
|
|
SIZE_T CommitPeak;
|
|
SIZE_T PhysicalTotal;
|
|
SIZE_T PhysicalAvailable;
|
|
SIZE_T SystemCache;
|
|
SIZE_T KernelTotal;
|
|
SIZE_T KernelPaged;
|
|
SIZE_T KernelNonpaged;
|
|
SIZE_T PageSize;
|
|
DWORD HandleCount;
|
|
DWORD ProcessCount;
|
|
DWORD ThreadCount;
|
|
} PERFORMANCE_INFORMATION,*PPERFORMANCE_INFORMATION,PERFORMACE_INFORMATION,*PPERFORMACE_INFORMATION;
|
|
|
|
WINBOOL WINAPI GetPerformanceInfo (PPERFORMACE_INFORMATION pPerformanceInformation,DWORD cb);
|
|
|
|
typedef struct _ENUM_PAGE_FILE_INFORMATION {
|
|
DWORD cb;
|
|
DWORD Reserved;
|
|
SIZE_T TotalSize;
|
|
SIZE_T TotalInUse;
|
|
SIZE_T PeakUsage;
|
|
} ENUM_PAGE_FILE_INFORMATION,*PENUM_PAGE_FILE_INFORMATION;
|
|
|
|
typedef WINBOOL (*PENUM_PAGE_FILE_CALLBACKW) (LPVOID pContext,PENUM_PAGE_FILE_INFORMATION pPageFileInfo,LPCWSTR lpFilename);
|
|
typedef WINBOOL (*PENUM_PAGE_FILE_CALLBACKA) (LPVOID pContext,PENUM_PAGE_FILE_INFORMATION pPageFileInfo,LPCSTR lpFilename);
|
|
|
|
WINBOOL WINAPI EnumPageFilesW (PENUM_PAGE_FILE_CALLBACKW pCallBackRoutine,LPVOID pContext);
|
|
WINBOOL WINAPI EnumPageFilesA (PENUM_PAGE_FILE_CALLBACKA pCallBackRoutine,LPVOID pContext);
|
|
DWORD WINAPI GetProcessImageFileNameA(HANDLE hProcess,LPSTR lpImageFileName,DWORD nSize);
|
|
DWORD WINAPI GetProcessImageFileNameW(HANDLE hProcess,LPWSTR lpImageFileName,DWORD nSize);
|
|
|
|
typedef struct _PSAPI_WS_WATCH_INFORMATION_EX {
|
|
PSAPI_WS_WATCH_INFORMATION BasicInfo;
|
|
ULONG_PTR FaultingThreadId;
|
|
ULONG_PTR Flags;
|
|
} PSAPI_WS_WATCH_INFORMATION_EX, *PPSAPI_WS_WATCH_INFORMATION_EX;
|
|
|
|
WINBOOL WINAPI GetWsChangesEx(
|
|
HANDLE hProcess,
|
|
PPSAPI_WS_WATCH_INFORMATION_EX lpWatchInfoEx,
|
|
DWORD cb
|
|
);
|
|
|
|
WINBOOL WINAPI EnumProcessModulesEx(
|
|
HANDLE hProcess,
|
|
HMODULE *lphModule,
|
|
DWORD cb,
|
|
LPDWORD lpcbNeeded,
|
|
DWORD dwFilterFlag
|
|
);
|
|
|
|
typedef union _PSAPI_WORKING_SET_BLOCK {
|
|
ULONG_PTR Flags;
|
|
__C89_NAMELESS struct {
|
|
ULONG_PTR Protection :5;
|
|
ULONG_PTR ShareCount :3;
|
|
ULONG_PTR Shared :1;
|
|
ULONG_PTR Reserved :3;
|
|
#ifdef _WIN64
|
|
ULONG_PTR VirtualPage :52;
|
|
#else
|
|
ULONG_PTR VirtualPage :20;
|
|
#endif
|
|
} ;
|
|
} PSAPI_WORKING_SET_BLOCK, *PPSAPI_WORKING_SET_BLOCK;
|
|
|
|
typedef struct _PSAPI_WORKING_SET_INFORMATION {
|
|
ULONG_PTR NumberOfEntries;
|
|
PSAPI_WORKING_SET_BLOCK WorkingSetInfo[1];
|
|
} PSAPI_WORKING_SET_INFORMATION, *PPSAPI_WORKING_SET_INFORMATION;
|
|
|
|
typedef union _PSAPI_WORKING_SET_EX_BLOCK {
|
|
ULONG_PTR Flags;
|
|
__C89_NAMELESS struct {
|
|
ULONG_PTR Valid :1;
|
|
ULONG_PTR ShareCount :3;
|
|
ULONG_PTR Win32Protection :11;
|
|
ULONG_PTR Shared :1;
|
|
ULONG_PTR Node :6;
|
|
ULONG_PTR Locked :1;
|
|
ULONG_PTR LargePage :1;
|
|
} DUMMYSTRUCTNAME;
|
|
} PSAPI_WORKING_SET_EX_BLOCK, *PPSAPI_WORKING_SET_EX_BLOCK;
|
|
|
|
typedef struct _PSAPI_WORKING_SET_EX_INFORMATION {
|
|
PVOID VirtualAddress;
|
|
PSAPI_WORKING_SET_EX_BLOCK VirtualAttributes;
|
|
} PSAPI_WORKING_SET_EX_INFORMATION, *PPSAPI_WORKING_SET_EX_INFORMATION;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|