aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-01-31 18:25:25 -0500
committerGitHub <noreply@github.com>2020-01-31 18:25:25 -0500
commita62b4f268a956d7b1571cf738f7b916d4e83ad05 (patch)
treedf91dfea89c575788c5d2fcb64408d2768f85a7d /lib/std
parentab46713fa6eb7603e604320b77a4d101d30a0998 (diff)
parentc910aa8555879278802ef1f591f0523db64aee64 (diff)
downloadzig-a62b4f268a956d7b1571cf738f7b916d4e83ad05.tar.gz
zig-a62b4f268a956d7b1571cf738f7b916d4e83ad05.zip
Merge pull request #4347 from LemonBoy/psapi
windows: Add psapi API
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/os/windows.zig1
-rw-r--r--lib/std/os/windows/bits.zig97
-rw-r--r--lib/std/os/windows/kernel32.zig30
-rw-r--r--lib/std/os/windows/psapi.zig29
4 files changed, 150 insertions, 7 deletions
diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig
index 9254cb1f61..c6e145f11d 100644
--- a/lib/std/os/windows.zig
+++ b/lib/std/os/windows.zig
@@ -15,6 +15,7 @@ pub const advapi32 = @import("windows/advapi32.zig");
pub const kernel32 = @import("windows/kernel32.zig");
pub const ntdll = @import("windows/ntdll.zig");
pub const ole32 = @import("windows/ole32.zig");
+pub const psapi = @import("windows/psapi.zig");
pub const shell32 = @import("windows/shell32.zig");
pub const ws2_32 = @import("windows/ws2_32.zig");
diff --git a/lib/std/os/windows/bits.zig b/lib/std/os/windows/bits.zig
index b184e68f62..bc23cee7f8 100644
--- a/lib/std/os/windows/bits.zig
+++ b/lib/std/os/windows/bits.zig
@@ -929,9 +929,12 @@ pub usingnamespace switch (builtin.arch) {
SegSs: DWORD,
ExtendedRegisters: [512]BYTE,
- pub fn getRegs(ctx: *const CONTEXT) struct {bp: usize, ip: usize} {
- return .{.bp = ctx.Ebp, .ip = ctx.Eip};
- }
+ pub fn getRegs(ctx: *const CONTEXT) struct {
+ bp: usize,
+ ip: usize,
+ } {
+ return .{ .bp = ctx.Ebp, .ip = ctx.Eip };
+ }
};
pub const PCONTEXT = *CONTEXT;
@@ -1032,8 +1035,11 @@ pub usingnamespace switch (builtin.arch) {
LastExceptionToRip: DWORD64,
LastExceptionFromRip: DWORD64,
- pub fn getRegs(ctx: *const CONTEXT) struct {bp: usize, ip: usize} {
- return .{.bp = ctx.Rbp, .ip = ctx.Rip};
+ pub fn getRegs(ctx: *const CONTEXT) struct {
+ bp: usize,
+ ip: usize,
+ } {
+ return .{ .bp = ctx.Rbp, .ip = ctx.Rip };
}
};
@@ -1100,8 +1106,11 @@ pub usingnamespace switch (builtin.arch) {
Wcr: [2]DWORD,
Wvr: [2]DWORD64,
- pub fn getRegs(ctx: *const CONTEXT) struct {bp: usize, ip: usize} {
- return .{.bp = ctx.DUMMYUNIONNAME.DUMMYSTRUCTNAME.Fp, .ip = ctx.Pc};
+ pub fn getRegs(ctx: *const CONTEXT) struct {
+ bp: usize,
+ ip: usize,
+ } {
+ return .{ .bp = ctx.DUMMYUNIONNAME.DUMMYSTRUCTNAME.Fp, .ip = ctx.Pc };
}
};
@@ -1237,3 +1246,77 @@ pub const CURDIR = extern struct {
};
pub const DUPLICATE_SAME_ACCESS = 2;
+
+pub const MODULEINFO = extern struct {
+ lpBaseOfDll: LPVOID,
+ SizeOfImage: DWORD,
+ EntryPoint: LPVOID,
+};
+pub const LPMODULEINFO = [*c]MODULEINFO;
+pub const PSAPI_WS_WATCH_INFORMATION = extern struct {
+ FaultingPc: LPVOID,
+ FaultingVa: LPVOID,
+};
+pub const PPSAPI_WS_WATCH_INFORMATION = [*c]PSAPI_WS_WATCH_INFORMATION;
+pub const PROCESS_MEMORY_COUNTERS = extern struct {
+ 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,
+};
+pub const PPROCESS_MEMORY_COUNTERS = [*c]PROCESS_MEMORY_COUNTERS;
+pub const PROCESS_MEMORY_COUNTERS_EX = extern struct {
+ 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,
+};
+pub const PPROCESS_MEMORY_COUNTERS_EX = [*c]PROCESS_MEMORY_COUNTERS_EX;
+pub const PERFORMANCE_INFORMATION = extern struct {
+ 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,
+};
+pub const PPERFORMANCE_INFORMATION = [*c]PERFORMANCE_INFORMATION;
+pub const PERFORMACE_INFORMATION = PERFORMANCE_INFORMATION;
+pub const PPERFORMACE_INFORMATION = [*c]PERFORMANCE_INFORMATION;
+pub const ENUM_PAGE_FILE_INFORMATION = extern struct {
+ cb: DWORD,
+ Reserved: DWORD,
+ TotalSize: SIZE_T,
+ TotalInUse: SIZE_T,
+ PeakUsage: SIZE_T,
+};
+pub const PENUM_PAGE_FILE_INFORMATION = [*c]ENUM_PAGE_FILE_INFORMATION;
+pub const PENUM_PAGE_FILE_CALLBACKW = ?fn (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCWSTR) callconv(.C) BOOL;
+pub const PENUM_PAGE_FILE_CALLBACKA = ?fn (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCSTR) callconv(.C) BOOL;
+pub const PSAPI_WS_WATCH_INFORMATION_EX = extern struct {
+ BasicInfo: PSAPI_WS_WATCH_INFORMATION,
+ FaultingThreadId: ULONG_PTR,
+ Flags: ULONG_PTR,
+};
+pub const PPSAPI_WS_WATCH_INFORMATION_EX = [*c]PSAPI_WS_WATCH_INFORMATION_EX;
diff --git a/lib/std/os/windows/kernel32.zig b/lib/std/os/windows/kernel32.zig
index 9ec40240b6..7ee1d90b0d 100644
--- a/lib/std/os/windows/kernel32.zig
+++ b/lib/std/os/windows/kernel32.zig
@@ -88,6 +88,8 @@ pub extern "kernel32" fn GetCurrentDirectoryW(nBufferLength: DWORD, lpBuffer: ?[
pub extern "kernel32" fn GetCurrentThread() callconv(.Stdcall) HANDLE;
pub extern "kernel32" fn GetCurrentThreadId() callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn GetCurrentProcess() callconv(.Stdcall) HANDLE;
+
pub extern "kernel32" fn GetEnvironmentStringsW() callconv(.Stdcall) ?[*:0]u16;
pub extern "kernel32" fn GetEnvironmentVariableW(lpName: LPWSTR, lpBuffer: [*]u16, nSize: DWORD) callconv(.Stdcall) DWORD;
@@ -246,3 +248,31 @@ pub extern "kernel32" fn LeaveCriticalSection(lpCriticalSection: *CRITICAL_SECTI
pub extern "kernel32" fn DeleteCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(.Stdcall) void;
pub extern "kernel32" fn InitOnceExecuteOnce(InitOnce: *INIT_ONCE, InitFn: INIT_ONCE_FN, Parameter: ?*c_void, Context: ?*c_void) callconv(.Stdcall) BOOL;
+
+pub extern "kernel32" fn K32EmptyWorkingSet(hProcess: HANDLE) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32EnumDeviceDrivers(lpImageBase: [*c]LPVOID, cb: DWORD, lpcbNeeded: LPDWORD) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32EnumPageFilesA(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA, pContext: LPVOID) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32EnumPageFilesW(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW, pContext: LPVOID) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32EnumProcessModules(hProcess: HANDLE, lphModule: [*c]HMODULE, cb: DWORD, lpcbNeeded: LPDWORD) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32EnumProcessModulesEx(hProcess: HANDLE, lphModule: [*c]HMODULE, cb: DWORD, lpcbNeeded: LPDWORD, dwFilterFlag: DWORD) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32EnumProcesses(lpidProcess: [*c]DWORD, cb: DWORD, cbNeeded: [*c]DWORD) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32GetDeviceDriverBaseNameA(ImageBase: LPVOID, lpBaseName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetDeviceDriverBaseNameW(ImageBase: LPVOID, lpBaseName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetDeviceDriverFileNameA(ImageBase: LPVOID, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetDeviceDriverFileNameW(ImageBase: LPVOID, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetMappedFileNameA(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetMappedFileNameW(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetModuleBaseNameA(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetModuleBaseNameW(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetModuleFileNameExA(hProcess: HANDLE, hModule: HMODULE, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetModuleFileNameExW(hProcess: HANDLE, hModule: HMODULE, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetModuleInformation(hProcess: HANDLE, hModule: HMODULE, lpmodinfo: LPMODULEINFO, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32GetPerformanceInfo(pPerformanceInformation: PPERFORMACE_INFORMATION, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32GetProcessImageFileNameA(hProcess: HANDLE, lpImageFileName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetProcessImageFileNameW(hProcess: HANDLE, lpImageFileName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "kernel32" fn K32GetProcessMemoryInfo(Process: HANDLE, ppsmemCounters: PPROCESS_MEMORY_COUNTERS, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32GetWsChanges(hProcess: HANDLE, lpWatchInfo: PPSAPI_WS_WATCH_INFORMATION, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32GetWsChangesEx(hProcess: HANDLE, lpWatchInfoEx: PPSAPI_WS_WATCH_INFORMATION_EX, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32InitializeProcessForWsWatch(hProcess: HANDLE) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32QueryWorkingSet(hProcess: HANDLE, pv: PVOID, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "kernel32" fn K32QueryWorkingSetEx(hProcess: HANDLE, pv: PVOID, cb: DWORD) callconv(.Stdcall) BOOL;
diff --git a/lib/std/os/windows/psapi.zig b/lib/std/os/windows/psapi.zig
new file mode 100644
index 0000000000..73ac29e331
--- /dev/null
+++ b/lib/std/os/windows/psapi.zig
@@ -0,0 +1,29 @@
+usingnamespace @import("bits.zig");
+
+pub extern "psapi" fn EmptyWorkingSet(hProcess: HANDLE) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn EnumDeviceDrivers(lpImageBase: [*c]LPVOID, cb: DWORD, lpcbNeeded: LPDWORD) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn EnumPageFilesA(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA, pContext: LPVOID) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn EnumPageFilesW(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW, pContext: LPVOID) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn EnumProcessModules(hProcess: HANDLE, lphModule: [*c]HMODULE, cb: DWORD, lpcbNeeded: LPDWORD) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn EnumProcessModulesEx(hProcess: HANDLE, lphModule: [*c]HMODULE, cb: DWORD, lpcbNeeded: LPDWORD, dwFilterFlag: DWORD) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn EnumProcesses(lpidProcess: [*c]DWORD, cb: DWORD, cbNeeded: [*c]DWORD) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn GetDeviceDriverBaseNameA(ImageBase: LPVOID, lpBaseName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetDeviceDriverBaseNameW(ImageBase: LPVOID, lpBaseName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetDeviceDriverFileNameA(ImageBase: LPVOID, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetDeviceDriverFileNameW(ImageBase: LPVOID, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetMappedFileNameA(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetMappedFileNameW(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetModuleBaseNameA(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetModuleBaseNameW(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetModuleFileNameExA(hProcess: HANDLE, hModule: HMODULE, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetModuleFileNameExW(hProcess: HANDLE, hModule: HMODULE, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetModuleInformation(hProcess: HANDLE, hModule: HMODULE, lpmodinfo: LPMODULEINFO, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn GetPerformanceInfo(pPerformanceInformation: PPERFORMACE_INFORMATION, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn GetProcessImageFileNameA(hProcess: HANDLE, lpImageFileName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetProcessImageFileNameW(hProcess: HANDLE, lpImageFileName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
+pub extern "psapi" fn GetProcessMemoryInfo(Process: HANDLE, ppsmemCounters: PPROCESS_MEMORY_COUNTERS, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn GetWsChanges(hProcess: HANDLE, lpWatchInfo: PPSAPI_WS_WATCH_INFORMATION, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn GetWsChangesEx(hProcess: HANDLE, lpWatchInfoEx: PPSAPI_WS_WATCH_INFORMATION_EX, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn InitializeProcessForWsWatch(hProcess: HANDLE) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn QueryWorkingSet(hProcess: HANDLE, pv: PVOID, cb: DWORD) callconv(.Stdcall) BOOL;
+pub extern "psapi" fn QueryWorkingSetEx(hProcess: HANDLE, pv: PVOID, cb: DWORD) callconv(.Stdcall) BOOL;