authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-31 18:25:25-05:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-01-31 18:25:25-05:00
loga62b4f268a956d7b1571cf738f7b916d4e83ad05
treedf91dfea89c575788c5d2fcb64408d2768f85a7d
parentab46713fa6eb7603e604320b77a4d101d30a0998
parentc910aa8555879278802ef1f591f0523db64aee64
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #4347 from LemonBoy/psapi

windows: Add psapi API

6 files changed, 218 insertions(+), 7 deletions(-)

lib/libc/mingw/lib-common/psapi.def created+34
...@@ -0,0 +1,34 @@
1;
2; Definition file of PSAPI.DLL
3; Automatic generated by gendef
4; written by Kai Tietz 2008
5;
6LIBRARY "PSAPI.DLL"
7EXPORTS
8EmptyWorkingSet
9EnumDeviceDrivers
10EnumPageFilesA
11EnumPageFilesW
12EnumProcessModules
13EnumProcessModulesEx
14EnumProcesses
15GetDeviceDriverBaseNameA
16GetDeviceDriverBaseNameW
17GetDeviceDriverFileNameA
18GetDeviceDriverFileNameW
19GetMappedFileNameA
20GetMappedFileNameW
21GetModuleBaseNameA
22GetModuleBaseNameW
23GetModuleFileNameExA
24GetModuleFileNameExW
25GetModuleInformation
26GetPerformanceInfo
27GetProcessImageFileNameA
28GetProcessImageFileNameW
29GetProcessMemoryInfo
30GetWsChanges
31GetWsChangesEx
32InitializeProcessForWsWatch
33QueryWorkingSet
34QueryWorkingSetEx
lib/libc/mingw/lib32/psapi.def created+34
...@@ -0,0 +1,34 @@
1;
2; Definition file of PSAPI.DLL
3; Automatic generated by gendef
4; written by Kai Tietz 2008
5;
6LIBRARY "PSAPI.DLL"
7EXPORTS
8EmptyWorkingSet@4
9EnumDeviceDrivers@12
10EnumPageFilesA@8
11EnumPageFilesW@8
12EnumProcessModules@16
13EnumProcessModulesEx@20
14EnumProcesses@12
15GetDeviceDriverBaseNameA@12
16GetDeviceDriverBaseNameW@12
17GetDeviceDriverFileNameA@12
18GetDeviceDriverFileNameW@12
19GetMappedFileNameA@16
20GetMappedFileNameW@16
21GetModuleBaseNameA@16
22GetModuleBaseNameW@16
23GetModuleFileNameExA@16
24GetModuleFileNameExW@16
25GetModuleInformation@16
26GetPerformanceInfo@8
27GetProcessImageFileNameA@12
28GetProcessImageFileNameW@12
29GetProcessMemoryInfo@12
30GetWsChanges@12
31GetWsChangesEx@12
32InitializeProcessForWsWatch@4
33QueryWorkingSet@12
34QueryWorkingSetEx@12
lib/std/os/windows.zig+1
...@@ -15,6 +15,7 @@ pub const advapi32 = @import("windows/advapi32.zig");...@@ -15,6 +15,7 @@ pub const advapi32 = @import("windows/advapi32.zig");
15pub const kernel32 = @import("windows/kernel32.zig");15pub const kernel32 = @import("windows/kernel32.zig");
16pub const ntdll = @import("windows/ntdll.zig");16pub const ntdll = @import("windows/ntdll.zig");
17pub const ole32 = @import("windows/ole32.zig");17pub const ole32 = @import("windows/ole32.zig");
18pub const psapi = @import("windows/psapi.zig");
18pub const shell32 = @import("windows/shell32.zig");19pub const shell32 = @import("windows/shell32.zig");
19pub const ws2_32 = @import("windows/ws2_32.zig");20pub const ws2_32 = @import("windows/ws2_32.zig");
2021
lib/std/os/windows/bits.zig+90-7
...@@ -929,9 +929,12 @@ pub usingnamespace switch (builtin.arch) {...@@ -929,9 +929,12 @@ pub usingnamespace switch (builtin.arch) {
929 SegSs: DWORD,929 SegSs: DWORD,
930 ExtendedRegisters: [512]BYTE,930 ExtendedRegisters: [512]BYTE,
931931
932 pub fn getRegs(ctx: *const CONTEXT) struct {bp: usize, ip: usize} {932 pub fn getRegs(ctx: *const CONTEXT) struct {
933 return .{.bp = ctx.Ebp, .ip = ctx.Eip};933 bp: usize,
934 } 934 ip: usize,
935 } {
936 return .{ .bp = ctx.Ebp, .ip = ctx.Eip };
937 }
935 };938 };
936939
937 pub const PCONTEXT = *CONTEXT;940 pub const PCONTEXT = *CONTEXT;
...@@ -1032,8 +1035,11 @@ pub usingnamespace switch (builtin.arch) {...@@ -1032,8 +1035,11 @@ pub usingnamespace switch (builtin.arch) {
1032 LastExceptionToRip: DWORD64,1035 LastExceptionToRip: DWORD64,
1033 LastExceptionFromRip: DWORD64,1036 LastExceptionFromRip: DWORD64,
10341037
1035 pub fn getRegs(ctx: *const CONTEXT) struct {bp: usize, ip: usize} {1038 pub fn getRegs(ctx: *const CONTEXT) struct {
1036 return .{.bp = ctx.Rbp, .ip = ctx.Rip};1039 bp: usize,
1040 ip: usize,
1041 } {
1042 return .{ .bp = ctx.Rbp, .ip = ctx.Rip };
1037 }1043 }
1038 };1044 };
10391045
...@@ -1100,8 +1106,11 @@ pub usingnamespace switch (builtin.arch) {...@@ -1100,8 +1106,11 @@ pub usingnamespace switch (builtin.arch) {
1100 Wcr: [2]DWORD,1106 Wcr: [2]DWORD,
1101 Wvr: [2]DWORD64,1107 Wvr: [2]DWORD64,
11021108
1103 pub fn getRegs(ctx: *const CONTEXT) struct {bp: usize, ip: usize} {1109 pub fn getRegs(ctx: *const CONTEXT) struct {
1104 return .{.bp = ctx.DUMMYUNIONNAME.DUMMYSTRUCTNAME.Fp, .ip = ctx.Pc};1110 bp: usize,
1111 ip: usize,
1112 } {
1113 return .{ .bp = ctx.DUMMYUNIONNAME.DUMMYSTRUCTNAME.Fp, .ip = ctx.Pc };
1105 }1114 }
1106 };1115 };
11071116
...@@ -1237,3 +1246,77 @@ pub const CURDIR = extern struct {...@@ -1237,3 +1246,77 @@ pub const CURDIR = extern struct {
1237};1246};
12381247
1239pub const DUPLICATE_SAME_ACCESS = 2;1248pub const DUPLICATE_SAME_ACCESS = 2;
1249
1250pub const MODULEINFO = extern struct {
1251 lpBaseOfDll: LPVOID,
1252 SizeOfImage: DWORD,
1253 EntryPoint: LPVOID,
1254};
1255pub const LPMODULEINFO = [*c]MODULEINFO;
1256pub const PSAPI_WS_WATCH_INFORMATION = extern struct {
1257 FaultingPc: LPVOID,
1258 FaultingVa: LPVOID,
1259};
1260pub const PPSAPI_WS_WATCH_INFORMATION = [*c]PSAPI_WS_WATCH_INFORMATION;
1261pub const PROCESS_MEMORY_COUNTERS = extern struct {
1262 cb: DWORD,
1263 PageFaultCount: DWORD,
1264 PeakWorkingSetSize: SIZE_T,
1265 WorkingSetSize: SIZE_T,
1266 QuotaPeakPagedPoolUsage: SIZE_T,
1267 QuotaPagedPoolUsage: SIZE_T,
1268 QuotaPeakNonPagedPoolUsage: SIZE_T,
1269 QuotaNonPagedPoolUsage: SIZE_T,
1270 PagefileUsage: SIZE_T,
1271 PeakPagefileUsage: SIZE_T,
1272};
1273pub const PPROCESS_MEMORY_COUNTERS = [*c]PROCESS_MEMORY_COUNTERS;
1274pub const PROCESS_MEMORY_COUNTERS_EX = extern struct {
1275 cb: DWORD,
1276 PageFaultCount: DWORD,
1277 PeakWorkingSetSize: SIZE_T,
1278 WorkingSetSize: SIZE_T,
1279 QuotaPeakPagedPoolUsage: SIZE_T,
1280 QuotaPagedPoolUsage: SIZE_T,
1281 QuotaPeakNonPagedPoolUsage: SIZE_T,
1282 QuotaNonPagedPoolUsage: SIZE_T,
1283 PagefileUsage: SIZE_T,
1284 PeakPagefileUsage: SIZE_T,
1285 PrivateUsage: SIZE_T,
1286};
1287pub const PPROCESS_MEMORY_COUNTERS_EX = [*c]PROCESS_MEMORY_COUNTERS_EX;
1288pub const PERFORMANCE_INFORMATION = extern struct {
1289 cb: DWORD,
1290 CommitTotal: SIZE_T,
1291 CommitLimit: SIZE_T,
1292 CommitPeak: SIZE_T,
1293 PhysicalTotal: SIZE_T,
1294 PhysicalAvailable: SIZE_T,
1295 SystemCache: SIZE_T,
1296 KernelTotal: SIZE_T,
1297 KernelPaged: SIZE_T,
1298 KernelNonpaged: SIZE_T,
1299 PageSize: SIZE_T,
1300 HandleCount: DWORD,
1301 ProcessCount: DWORD,
1302 ThreadCount: DWORD,
1303};
1304pub const PPERFORMANCE_INFORMATION = [*c]PERFORMANCE_INFORMATION;
1305pub const PERFORMACE_INFORMATION = PERFORMANCE_INFORMATION;
1306pub const PPERFORMACE_INFORMATION = [*c]PERFORMANCE_INFORMATION;
1307pub const ENUM_PAGE_FILE_INFORMATION = extern struct {
1308 cb: DWORD,
1309 Reserved: DWORD,
1310 TotalSize: SIZE_T,
1311 TotalInUse: SIZE_T,
1312 PeakUsage: SIZE_T,
1313};
1314pub const PENUM_PAGE_FILE_INFORMATION = [*c]ENUM_PAGE_FILE_INFORMATION;
1315pub const PENUM_PAGE_FILE_CALLBACKW = ?fn (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCWSTR) callconv(.C) BOOL;
1316pub const PENUM_PAGE_FILE_CALLBACKA = ?fn (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCSTR) callconv(.C) BOOL;
1317pub const PSAPI_WS_WATCH_INFORMATION_EX = extern struct {
1318 BasicInfo: PSAPI_WS_WATCH_INFORMATION,
1319 FaultingThreadId: ULONG_PTR,
1320 Flags: ULONG_PTR,
1321};
1322pub const PPSAPI_WS_WATCH_INFORMATION_EX = [*c]PSAPI_WS_WATCH_INFORMATION_EX;
lib/std/os/windows/kernel32.zig+30
...@@ -88,6 +88,8 @@ pub extern "kernel32" fn GetCurrentDirectoryW(nBufferLength: DWORD, lpBuffer: ?[...@@ -88,6 +88,8 @@ pub extern "kernel32" fn GetCurrentDirectoryW(nBufferLength: DWORD, lpBuffer: ?[
88pub extern "kernel32" fn GetCurrentThread() callconv(.Stdcall) HANDLE;88pub extern "kernel32" fn GetCurrentThread() callconv(.Stdcall) HANDLE;
89pub extern "kernel32" fn GetCurrentThreadId() callconv(.Stdcall) DWORD;89pub extern "kernel32" fn GetCurrentThreadId() callconv(.Stdcall) DWORD;
9090
91pub extern "kernel32" fn GetCurrentProcess() callconv(.Stdcall) HANDLE;
92
91pub extern "kernel32" fn GetEnvironmentStringsW() callconv(.Stdcall) ?[*:0]u16;93pub extern "kernel32" fn GetEnvironmentStringsW() callconv(.Stdcall) ?[*:0]u16;
9294
93pub extern "kernel32" fn GetEnvironmentVariableW(lpName: LPWSTR, lpBuffer: [*]u16, nSize: DWORD) callconv(.Stdcall) DWORD;95pub 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...@@ -246,3 +248,31 @@ pub extern "kernel32" fn LeaveCriticalSection(lpCriticalSection: *CRITICAL_SECTI
246pub extern "kernel32" fn DeleteCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(.Stdcall) void;248pub extern "kernel32" fn DeleteCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(.Stdcall) void;
247249
248pub extern "kernel32" fn InitOnceExecuteOnce(InitOnce: *INIT_ONCE, InitFn: INIT_ONCE_FN, Parameter: ?*c_void, Context: ?*c_void) callconv(.Stdcall) BOOL;250pub extern "kernel32" fn InitOnceExecuteOnce(InitOnce: *INIT_ONCE, InitFn: INIT_ONCE_FN, Parameter: ?*c_void, Context: ?*c_void) callconv(.Stdcall) BOOL;
251
252pub extern "kernel32" fn K32EmptyWorkingSet(hProcess: HANDLE) callconv(.Stdcall) BOOL;
253pub extern "kernel32" fn K32EnumDeviceDrivers(lpImageBase: [*c]LPVOID, cb: DWORD, lpcbNeeded: LPDWORD) callconv(.Stdcall) BOOL;
254pub extern "kernel32" fn K32EnumPageFilesA(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA, pContext: LPVOID) callconv(.Stdcall) BOOL;
255pub extern "kernel32" fn K32EnumPageFilesW(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW, pContext: LPVOID) callconv(.Stdcall) BOOL;
256pub extern "kernel32" fn K32EnumProcessModules(hProcess: HANDLE, lphModule: [*c]HMODULE, cb: DWORD, lpcbNeeded: LPDWORD) callconv(.Stdcall) BOOL;
257pub extern "kernel32" fn K32EnumProcessModulesEx(hProcess: HANDLE, lphModule: [*c]HMODULE, cb: DWORD, lpcbNeeded: LPDWORD, dwFilterFlag: DWORD) callconv(.Stdcall) BOOL;
258pub extern "kernel32" fn K32EnumProcesses(lpidProcess: [*c]DWORD, cb: DWORD, cbNeeded: [*c]DWORD) callconv(.Stdcall) BOOL;
259pub extern "kernel32" fn K32GetDeviceDriverBaseNameA(ImageBase: LPVOID, lpBaseName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
260pub extern "kernel32" fn K32GetDeviceDriverBaseNameW(ImageBase: LPVOID, lpBaseName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
261pub extern "kernel32" fn K32GetDeviceDriverFileNameA(ImageBase: LPVOID, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
262pub extern "kernel32" fn K32GetDeviceDriverFileNameW(ImageBase: LPVOID, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
263pub extern "kernel32" fn K32GetMappedFileNameA(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
264pub extern "kernel32" fn K32GetMappedFileNameW(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
265pub extern "kernel32" fn K32GetModuleBaseNameA(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
266pub extern "kernel32" fn K32GetModuleBaseNameW(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
267pub extern "kernel32" fn K32GetModuleFileNameExA(hProcess: HANDLE, hModule: HMODULE, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
268pub extern "kernel32" fn K32GetModuleFileNameExW(hProcess: HANDLE, hModule: HMODULE, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
269pub extern "kernel32" fn K32GetModuleInformation(hProcess: HANDLE, hModule: HMODULE, lpmodinfo: LPMODULEINFO, cb: DWORD) callconv(.Stdcall) BOOL;
270pub extern "kernel32" fn K32GetPerformanceInfo(pPerformanceInformation: PPERFORMACE_INFORMATION, cb: DWORD) callconv(.Stdcall) BOOL;
271pub extern "kernel32" fn K32GetProcessImageFileNameA(hProcess: HANDLE, lpImageFileName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
272pub extern "kernel32" fn K32GetProcessImageFileNameW(hProcess: HANDLE, lpImageFileName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
273pub extern "kernel32" fn K32GetProcessMemoryInfo(Process: HANDLE, ppsmemCounters: PPROCESS_MEMORY_COUNTERS, cb: DWORD) callconv(.Stdcall) BOOL;
274pub extern "kernel32" fn K32GetWsChanges(hProcess: HANDLE, lpWatchInfo: PPSAPI_WS_WATCH_INFORMATION, cb: DWORD) callconv(.Stdcall) BOOL;
275pub extern "kernel32" fn K32GetWsChangesEx(hProcess: HANDLE, lpWatchInfoEx: PPSAPI_WS_WATCH_INFORMATION_EX, cb: DWORD) callconv(.Stdcall) BOOL;
276pub extern "kernel32" fn K32InitializeProcessForWsWatch(hProcess: HANDLE) callconv(.Stdcall) BOOL;
277pub extern "kernel32" fn K32QueryWorkingSet(hProcess: HANDLE, pv: PVOID, cb: DWORD) callconv(.Stdcall) BOOL;
278pub extern "kernel32" fn K32QueryWorkingSetEx(hProcess: HANDLE, pv: PVOID, cb: DWORD) callconv(.Stdcall) BOOL;
lib/std/os/windows/psapi.zig created+29
...@@ -0,0 +1,29 @@
1usingnamespace @import("bits.zig");
2
3pub extern "psapi" fn EmptyWorkingSet(hProcess: HANDLE) callconv(.Stdcall) BOOL;
4pub extern "psapi" fn EnumDeviceDrivers(lpImageBase: [*c]LPVOID, cb: DWORD, lpcbNeeded: LPDWORD) callconv(.Stdcall) BOOL;
5pub extern "psapi" fn EnumPageFilesA(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA, pContext: LPVOID) callconv(.Stdcall) BOOL;
6pub extern "psapi" fn EnumPageFilesW(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW, pContext: LPVOID) callconv(.Stdcall) BOOL;
7pub extern "psapi" fn EnumProcessModules(hProcess: HANDLE, lphModule: [*c]HMODULE, cb: DWORD, lpcbNeeded: LPDWORD) callconv(.Stdcall) BOOL;
8pub extern "psapi" fn EnumProcessModulesEx(hProcess: HANDLE, lphModule: [*c]HMODULE, cb: DWORD, lpcbNeeded: LPDWORD, dwFilterFlag: DWORD) callconv(.Stdcall) BOOL;
9pub extern "psapi" fn EnumProcesses(lpidProcess: [*c]DWORD, cb: DWORD, cbNeeded: [*c]DWORD) callconv(.Stdcall) BOOL;
10pub extern "psapi" fn GetDeviceDriverBaseNameA(ImageBase: LPVOID, lpBaseName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
11pub extern "psapi" fn GetDeviceDriverBaseNameW(ImageBase: LPVOID, lpBaseName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
12pub extern "psapi" fn GetDeviceDriverFileNameA(ImageBase: LPVOID, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
13pub extern "psapi" fn GetDeviceDriverFileNameW(ImageBase: LPVOID, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
14pub extern "psapi" fn GetMappedFileNameA(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
15pub extern "psapi" fn GetMappedFileNameW(hProcess: HANDLE, lpv: LPVOID, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
16pub extern "psapi" fn GetModuleBaseNameA(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
17pub extern "psapi" fn GetModuleBaseNameW(hProcess: HANDLE, hModule: HMODULE, lpBaseName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
18pub extern "psapi" fn GetModuleFileNameExA(hProcess: HANDLE, hModule: HMODULE, lpFilename: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
19pub extern "psapi" fn GetModuleFileNameExW(hProcess: HANDLE, hModule: HMODULE, lpFilename: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
20pub extern "psapi" fn GetModuleInformation(hProcess: HANDLE, hModule: HMODULE, lpmodinfo: LPMODULEINFO, cb: DWORD) callconv(.Stdcall) BOOL;
21pub extern "psapi" fn GetPerformanceInfo(pPerformanceInformation: PPERFORMACE_INFORMATION, cb: DWORD) callconv(.Stdcall) BOOL;
22pub extern "psapi" fn GetProcessImageFileNameA(hProcess: HANDLE, lpImageFileName: LPSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
23pub extern "psapi" fn GetProcessImageFileNameW(hProcess: HANDLE, lpImageFileName: LPWSTR, nSize: DWORD) callconv(.Stdcall) DWORD;
24pub extern "psapi" fn GetProcessMemoryInfo(Process: HANDLE, ppsmemCounters: PPROCESS_MEMORY_COUNTERS, cb: DWORD) callconv(.Stdcall) BOOL;
25pub extern "psapi" fn GetWsChanges(hProcess: HANDLE, lpWatchInfo: PPSAPI_WS_WATCH_INFORMATION, cb: DWORD) callconv(.Stdcall) BOOL;
26pub extern "psapi" fn GetWsChangesEx(hProcess: HANDLE, lpWatchInfoEx: PPSAPI_WS_WATCH_INFORMATION_EX, cb: DWORD) callconv(.Stdcall) BOOL;
27pub extern "psapi" fn InitializeProcessForWsWatch(hProcess: HANDLE) callconv(.Stdcall) BOOL;
28pub extern "psapi" fn QueryWorkingSet(hProcess: HANDLE, pv: PVOID, cb: DWORD) callconv(.Stdcall) BOOL;
29pub extern "psapi" fn QueryWorkingSetEx(hProcess: HANDLE, pv: PVOID, cb: DWORD) callconv(.Stdcall) BOOL;