' api_psapi.sbp

#ifndef _INC_PSAPI_
#define _INC_PSAPI_

#ifdef UNICODE
Const _FuncName_GetModuleBaseName = "GetModuleBaseNameW"
Const _FuncName_GetModuleFileNameEx = "GetModuleFileNameExW"
Const _FuncName_GetMappedFileName = "GetMappedFileNameW"
Const _FuncName_GetDeviceDriverBaseName = "GetDeviceDriverBaseNameW"
Const _FuncName_GetDeviceDriverFileName = "GetDeviceDriverFileNameW"
Const _FuncName_GetProcessImageFileName = "GetProcessImageFileNameW"
Const _FuncName_EnumPageFiles = "EnumPageFilesW"
#else
Const _FuncName_GetModuleBaseName = "GetModuleBaseNameA"
Const _FuncName_GetModuleFileNameEx = "GetModuleFileNameExA"
Const _FuncName_GetMappedFileName = "GetMappedFileNameA"
Const _FuncName_GetDeviceDriverBaseName = "GetDeviceDriverBaseNameA"
Const _FuncName_GetDeviceDriverFileName = "GetDeviceDriverFileNameA"
Const _FuncName_GetProcessImageFileName = "GetProcessImageFileNameA"
Const _FuncName_EnumPageFiles = "EnumPageFilesA"
#endif

Declare Function EnumProcesses Lib "psapi" (lpidProcess As *DWord, cb As DWord, ByRef cbNeeded As DWord) As BOOL
Declare Function EnumProcessModules Lib "psapi" (hProcess As HANDLE, lphModule As *HANDLE, cb As DWord, ByRef lpcbNeeded As DWord) As BOOL
Declare Function GetModuleBaseName Lib "psapi" Alias _FuncName_GetModuleBaseName (hProcess As HANDLE, hModule As HANDLE, lpBaseName As LPTSTR, nSize As DWord) As DWORD
Declare Function GetModuleFileNameEx Lib "psapi" Alias _FuncName_GetModuleFileNameEx (hProcess As HANDLE, hModule As HANDLE, lpFilename As LPTSTR, nSize As DWord) As DWORD

Type MODULEINFO
	lpBaseOfDll As VoidPtr
	SizeOfImage As DWORD
	EntryPoint As VoidPtr
End Type
TypeDef LPMODULEINFO = *MODULEINFO

Declare Function GetModuleInformation Lib "psapi" (hProcess As HANDLE, hModule As HANDLE, lpmodinfo As LPMODULEINFO, cb As DWord) As BOOL
Declare Function EmptyWorkingSet Lib "psapi" (hProcess As HANDLE) As BOOL
Declare Function QueryWorkingSet Lib "psapi" (hProcess As HANDLE, pv As VoidPtr, cb As DWord) As BOOL
Declare Function QueryWorkingSetEx Lib "psapi" (hProcess As HANDLE, pv As VoidPtr, cb As DWord) As BOOL
Declare Function InitializeProcessForWsWatch Lib "psapi" (hProcess As HANDLE) As BOOL

Type PSAPI_WS_WATCH_INFORMATION
	FaultingPc As VoidPtr
	FaultingVa As VoidPtr
End Type
TypeDef PPSAPI_WS_WATCH_INFORMATION = *PSAPI_WS_WATCH_INFORMATION

Declare Function GetWsChanges Lib "psapi" (hProcess As HANDLE, lpWatchInfo As PPSAPI_WS_WATCH_INFORMATION, cb As DWord) As BOOL
Declare Function GetMappedFileName Lib "psapi" Alias _FuncName_GetMappedFileName (hProcess As HANDLE, lpv As VoidPtr, lpFilename As LPTSTR, nSize As DWord) As DWORD
Declare Function EnumDeviceDrivers Lib "psapi" (ByRef lpImageBase As VoidPtr, cb As DWord, ByRef lpcbNeeded As DWord) As BOOL
Declare Function GetDeviceDriverBaseName Lib "psapi" Alias _FuncName_GetDeviceDriverBaseName (ImageBase As VoidPtr, lpBaseName As LPTSTR, nSize As DWord) As DWORD
Declare Function GetDeviceDriverFileName Lib "psapi" Alias _FuncName_GetDeviceDriverFileName (ImageBase As VoidPtr, lpFilename As LPTSTR, nSize As DWord) As DWORD

' Structure for GetProcessMemoryInfo()
Type PROCESS_MEMORY_COUNTERS
	cb As DWORD
	PageFaultCount As DWORD
	PeakWorkingSetSize As SIZE_T
	WorkingSetSize As SIZE_T
	QuotaPeakPagedPoolUsage As SIZE_T
	QuotaPagedPoolUsage As SIZE_T
	QuotaPeakNonPagedPoolUsage As SIZE_T
	QuotaNonPagedPoolUsage As SIZE_T
	PagefileUsage As SIZE_T
	PeakPagefileUsage As SIZE_T
End Type

TypeDef PPROCESS_MEMORY_COUNTERS = *PROCESS_MEMORY_COUNTERS

#ifdef _WIN32_WINNT
Type PROCESS_MEMORY_COUNTERS_EX
	cb As DWORD
	PageFaultCount As DWORD
	PeakWorkingSetSize As SIZE_T
	WorkingSetSize As SIZE_T
	QuotaPeakPagedPoolUsage As SIZE_T
	QuotaPagedPoolUsage As SIZE_T
	QuotaPeakNonPagedPoolUsage As SIZE_T
	QuotaNonPagedPoolUsage As SIZE_T
	PagefileUsage As SIZE_T
	PeakPagefileUsage As SIZE_T
	PrivateUsage As SIZE_T
End Type
TypeDef PPROCESS_MEMORY_COUNTERS_EX = *PROCESS_MEMORY_COUNTERS_EX
#endif

Declare Function GetProcessMemoryInfo Lib "psapi" (Process As HANDLE, ppsmemCounters As PPROCESS_MEMORY_COUNTERS, cb As DWord) As BOOL

Type PERFORMANCE_INFORMATION
	cb As DWORD
	CommitTotal As SIZE_T
	CommitLimit As SIZE_T
	CommitPeak As SIZE_T
	PhysicalTotal As SIZE_T
	PhysicalAvailable As SIZE_T
	SystemCache As SIZE_T
	KernelTotal As SIZE_T
	KernelPaged As SIZE_T
	KernelNonpaged As SIZE_T
	PageSize As SIZE_T
	HandleCount As DWORD
	ProcessCount As DWORD
	ThreadCount As DWORD
End Type
TypeDef PPERFORMANCE_INFORMATION = *PERFORMANCE_INFORMATION
TypeDef PERFORMACE_INFORMATION = PERFORMANCE_INFORMATION
TypeDef PPERFORMACE_INFORMATION = *PERFORMANCE_INFORMATION

Declare Function GetPerformanceInfo Lib "psapi" (pPerformanceInformation As PPERFORMACE_INFORMATION, cb As DWord) As BOOL

Type ENUM_PAGE_FILE_INFORMATION
	cb As DWORD
	Reserved As DWORD
	TotalSize As SIZE_T
	TotalInUse As SIZE_T
	PeakUsage As SIZE_T
End Type
TypeDef PENUM_PAGE_FILE_INFORMATION = *ENUM_PAGE_FILE_INFORMATION

TypeDef PENUM_PAGE_FILE_CALLBACKW = *Function(pContext As VoidPtr, pPageFileInfo As PENUM_PAGE_FILE_INFORMATION, lpFilename As LPCWSTR) As BOOL
TypeDef PENUM_PAGE_FILE_CALLBACKA = *Function(pContext As VoidPtr, pPageFileInfo As PENUM_PAGE_FILE_INFORMATION, lpFilename As LPCSTR) As BOOL
#ifdef UNICODE
TypeDef PENUM_PAGE_FILE_CALLBACK = PENUM_PAGE_FILE_CALLBACKW
#else
TypeDef PENUM_PAGE_FILE_CALLBACK = PENUM_PAGE_FILE_CALLBACKA
#endif

Declare Function EnumPageFiles Lib "psapi" Alias _FuncName_EnumPageFiles (pCallBackRoutine As PENUM_PAGE_FILE_CALLBACK, pContext As VoidPtr) As BOOL
Declare Function GetProcessImageFileName Lib "psapi" Alias _FuncName_GetProcessImageFileName (hProcess As HANDLE, lpImageFileName As LPTSTR, nSize As DWord) As DWORD

#endif '_INC_PSAPI
