mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 17:34:43 +00:00
203 lines
9.2 KiB
Nim
203 lines
9.2 KiB
Nim
#
|
|
#
|
|
# Nimrod's Runtime Library
|
|
# (c) Copyright 2009 Andreas Rumpf
|
|
#
|
|
# See the file "copying.txt", included in this
|
|
# distribution, for details about the copyright.
|
|
#
|
|
|
|
# PSAPI interface unit
|
|
|
|
# Contains the definitions for the APIs provided by PSAPI.DLL
|
|
|
|
import # Data structure templates
|
|
Windows
|
|
|
|
const
|
|
psapiDll = "psapi.dll"
|
|
|
|
proc EnumProcesses*(lpidProcess: ptr DWORD, cb: DWORD,
|
|
cbNeeded: ptr DWORD): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "EnumProcesses".}
|
|
proc EnumProcessModules*(hProcess: HANDLE, lphModule: ptr HMODULE, cb: DWORD, lpcbNeeded: LPDWORD): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "EnumProcessModules".}
|
|
|
|
proc GetModuleBaseNameA*(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetModuleBaseNameA".}
|
|
proc GetModuleBaseNameW*(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetModuleBaseNameW".}
|
|
when defined(winUnicode):
|
|
proc GetModuleBaseName*(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetModuleBaseNameW".}
|
|
else:
|
|
proc GetModuleBaseName*(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetModuleBaseNameA".}
|
|
|
|
proc GetModuleFileNameExA*(hProcess: HANDLE, hModule: HMODULE, lpFileNameEx: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetModuleFileNameExA".}
|
|
proc GetModuleFileNameExW*(hProcess: HANDLE, hModule: HMODULE, lpFileNameEx: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetModuleFileNameExW".}
|
|
when defined(winUnicode):
|
|
proc GetModuleFileNameEx*(hProcess: HANDLE, hModule: HMODULE, lpFileNameEx: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetModuleFileNameExW".}
|
|
else:
|
|
proc GetModuleFileNameEx*(hProcess: HANDLE, hModule: HMODULE, lpFileNameEx: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetModuleFileNameExA".}
|
|
|
|
type
|
|
MODULEINFO* {.final.} = object
|
|
lpBaseOfDll*: LPVOID
|
|
SizeOfImage*: DWORD
|
|
EntryPoint*: LPVOID
|
|
LPMODULEINFO* = ptr MODULEINFO
|
|
|
|
proc GetModuleInformation*(hProcess: HANDLE, hModule: HMODULE, lpmodinfo: LPMODULEINFO, cb: DWORD): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "GetModuleInformation".}
|
|
proc EmptyWorkingSet*(hProcess: HANDLE): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "EmptyWorkingSet".}
|
|
proc QueryWorkingSet*(hProcess: HANDLE, pv: PVOID, cb: DWORD): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "QueryWorkingSet".}
|
|
proc QueryWorkingSetEx*(hProcess: HANDLE, pv: PVOID, cb: DWORD): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "QueryWorkingSetEx".}
|
|
proc InitializeProcessForWsWatch*(hProcess: HANDLE): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "InitializeProcessForWsWatch".}
|
|
|
|
type
|
|
PSAPI_WS_WATCH_INFORMATION* {.final.} = object
|
|
FaultingPc*: LPVOID
|
|
FaultingVa*: LPVOID
|
|
PPSAPI_WS_WATCH_INFORMATION* = ptr PSAPI_WS_WATCH_INFORMATION
|
|
|
|
proc GetWsChanges*(hProcess: HANDLE, lpWatchInfo: PPSAPI_WS_WATCH_INFORMATION, cb: DWORD): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "GetWsChanges".}
|
|
|
|
proc GetMappedFileNameA*(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetMappedFileNameA".}
|
|
proc GetMappedFileNameW*(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetMappedFileNameW".}
|
|
when defined(winUnicode):
|
|
proc GetMappedFileName*(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetMappedFileNameW".}
|
|
else:
|
|
proc GetMappedFileName*(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetMappedFileNameA".}
|
|
|
|
proc EnumDeviceDrivers*(lpImageBase: LPVOID, cb: DWORD, lpcbNeeded: LPDWORD): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "EnumDeviceDrivers".}
|
|
|
|
proc GetDeviceDriverBaseNameA*(ImageBase: LPVOID, lpBaseName: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetDeviceDriverBaseNameA".}
|
|
proc GetDeviceDriverBaseNameW*(ImageBase: LPVOID, lpBaseName: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetDeviceDriverBaseNameW".}
|
|
when defined(winUnicode):
|
|
proc GetDeviceDriverBaseName*(ImageBase: LPVOID, lpBaseName: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetDeviceDriverBaseNameW".}
|
|
else:
|
|
proc GetDeviceDriverBaseName*(ImageBase: LPVOID, lpBaseName: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetDeviceDriverBaseNameA".}
|
|
|
|
proc GetDeviceDriverFileNameA*(ImageBase: LPVOID, lpFileName: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetDeviceDriverFileNameA".}
|
|
proc GetDeviceDriverFileNameW*(ImageBase: LPVOID, lpFileName: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetDeviceDriverFileNameW".}
|
|
when defined(winUnicode):
|
|
proc GetDeviceDriverFileName*(ImageBase: LPVOID, lpFileName: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetDeviceDriverFileNameW".}
|
|
else:
|
|
proc GetDeviceDriverFileName*(ImageBase: LPVOID, lpFileName: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetDeviceDriverFileNameA".}
|
|
|
|
type
|
|
PROCESS_MEMORY_COUNTERS* {.final.} = object
|
|
cb*: DWORD
|
|
PageFaultCount*: DWORD
|
|
PeakWorkingSetSize: SIZE_T
|
|
WorkingSetSize: SIZE_T
|
|
QuotaPeakPagedPoolUsage: SIZE_T
|
|
QuotaPagedPoolUsage: SIZE_T
|
|
QuotaPeakNonPagedPoolUsage: SIZE_T
|
|
QuotaNonPagedPoolUsage: SIZE_T
|
|
PagefileUsage: SIZE_T
|
|
PeakPagefileUsage: SIZE_T
|
|
PPROCESS_MEMORY_COUNTERS* = ptr PROCESS_MEMORY_COUNTERS
|
|
|
|
type
|
|
PROCESS_MEMORY_COUNTERS_EX* {.final.} = object
|
|
cb*: DWORD
|
|
PageFaultCount*: DWORD
|
|
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: SIZE_T
|
|
PPROCESS_MEMORY_COUNTERS_EX* = ptr PROCESS_MEMORY_COUNTERS_EX
|
|
|
|
proc GetProcessMemoryInfo*(hProcess: HANDLE, ppsmemCounters: PPROCESS_MEMORY_COUNTERS, cb: DWORD): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "GetProcessMemoryInfo".}
|
|
|
|
type
|
|
PERFORMANCE_INFORMATION* {.final.} = object
|
|
cb*: DWORD
|
|
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: SIZE_T
|
|
HandleCount*: DWORD
|
|
ProcessCount*: DWORD
|
|
ThreadCount*: DWORD
|
|
PPERFORMANCE_INFORMATION* = ptr PERFORMANCE_INFORMATION
|
|
# Skip definition of PERFORMACE_INFORMATION...
|
|
|
|
proc GetPerformanceInfo*(pPerformanceInformation: PPERFORMANCE_INFORMATION, cb: DWORD): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "GetPerformanceInfo".}
|
|
|
|
type
|
|
ENUM_PAGE_FILE_INFORMATION* {.final.} = object
|
|
cb*: DWORD
|
|
Reserved*: DWORD
|
|
TotalSize: SIZE_T
|
|
TotalInUse: SIZE_T
|
|
PeakUsage: SIZE_T
|
|
PENUM_PAGE_FILE_INFORMATION* = ptr ENUM_PAGE_FILE_INFORMATION
|
|
|
|
# Callback procedure
|
|
type
|
|
PENUM_PAGE_FILE_CALLBACKW* = proc (pContext: LPVOID, pPageFileInfo: PENUM_PAGE_FILE_INFORMATION, lpFilename: LPCWSTR): WINBOOL{.stdcall.}
|
|
PENUM_PAGE_FILE_CALLBACKA* = proc (pContext: LPVOID, pPageFileInfo: PENUM_PAGE_FILE_INFORMATION, lpFilename: LPCSTR): WINBOOL{.stdcall.}
|
|
|
|
#TODO
|
|
proc EnumPageFilesA*(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA, pContext: LPVOID): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "EnumPageFilesA".}
|
|
proc EnumPageFilesW*(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW, pContext: LPVOID): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "EnumPageFilesW".}
|
|
when defined(winUnicode):
|
|
proc EnumPageFiles*(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW, pContext: LPVOID): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "EnumPageFilesW".}
|
|
type PENUM_PAGE_FILE_CALLBACK* = proc (pContext: LPVOID, pPageFileInfo: PENUM_PAGE_FILE_INFORMATION, lpFilename: LPCWSTR): WINBOOL{.stdcall.}
|
|
else:
|
|
proc EnumPageFiles*(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA, pContext: LPVOID): WINBOOL {.stdcall,
|
|
dynlib: psapiDll, importc: "EnumPageFilesA".}
|
|
type PENUM_PAGE_FILE_CALLBACK* = proc (pContext: LPVOID, pPageFileInfo: PENUM_PAGE_FILE_INFORMATION, lpFilename: LPCSTR): WINBOOL{.stdcall.}
|
|
|
|
proc GetProcessImageFileNameA*(hProcess: HANDLE, lpImageFileName: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetProcessImageFileNameA".}
|
|
proc GetProcessImageFileNameW*(hProcess: HANDLE, lpImageFileName: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetProcessImageFileNameW".}
|
|
when defined(winUnicode):
|
|
proc GetProcessImageFileName*(hProcess: HANDLE, lpImageFileName: LPWSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetProcessImageFileNameW".}
|
|
else:
|
|
proc GetProcessImageFileName*(hProcess: HANDLE, lpImageFileName: LPSTR, nSize: DWORD): DWORD {.stdcall,
|
|
dynlib: psapiDll, importc: "GetProcessImageFileNameA".}
|