From b05a5a3e52a0b14396d94c0d659edc980c1d79ce Mon Sep 17 00:00:00 2001 From: daurnimator Date: Tue, 19 Nov 2019 16:38:23 +1100 Subject: [PATCH] std: add CreateEvent for windows --- lib/std/os/windows.zig | 16 ++++++++++++++++ lib/std/os/windows/bits.zig | 7 +++++++ lib/std/os/windows/kernel32.zig | 7 +++++++ 3 files changed, 30 insertions(+) diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig index 593a9ec29f..4249205a34 100644 --- a/lib/std/os/windows.zig +++ b/lib/std/os/windows.zig @@ -97,6 +97,22 @@ pub fn CreatePipe(rd: *HANDLE, wr: *HANDLE, sattr: *const SECURITY_ATTRIBUTES) C } } +pub fn CreateEventEx(attributes: ?*SECURITY_ATTRIBUTES, name: []const u8, flags: DWORD, desired_access: DWORD) !HANDLE { + const nameW = try sliceToPrefixedFileW(name); + return CreateEventExW(attributes, &nameW, flags, desired_access); +} + +pub fn CreateEventExW(attributes: ?*SECURITY_ATTRIBUTES, nameW: [*:0]const u16, flags: DWORD, desired_access: DWORD) !HANDLE { + const handle = kernel32.CreateEventExW(attributes, nameW, flags, desired_access); + if (handle) |h| { + return h; + } else { + switch (kernel32.GetLastError()) { + else => |err| return unexpectedError(err), + } + } +} + pub fn DeviceIoControl( h: HANDLE, ioControlCode: DWORD, diff --git a/lib/std/os/windows/bits.zig b/lib/std/os/windows/bits.zig index 23dd80141a..80b0545dc4 100644 --- a/lib/std/os/windows/bits.zig +++ b/lib/std/os/windows/bits.zig @@ -489,6 +489,13 @@ pub const FILE_ATTRIBUTE_SYSTEM = 0x4; pub const FILE_ATTRIBUTE_TEMPORARY = 0x100; pub const FILE_ATTRIBUTE_VIRTUAL = 0x10000; +// flags for CreateEvent +pub const CREATE_EVENT_INITIAL_SET = 0x00000002; +pub const CREATE_EVENT_MANUAL_RESET = 0x00000001; + +pub const EVENT_ALL_ACCESS = 0x1F0003; +pub const EVENT_MODIFY_STATE = 0x0002; + pub const PROCESS_INFORMATION = extern struct { hProcess: HANDLE, hThread: HANDLE, diff --git a/lib/std/os/windows/kernel32.zig b/lib/std/os/windows/kernel32.zig index 748d9e25fa..82dd03b829 100644 --- a/lib/std/os/windows/kernel32.zig +++ b/lib/std/os/windows/kernel32.zig @@ -9,6 +9,13 @@ pub extern "kernel32" stdcallcc fn CloseHandle(hObject: HANDLE) BOOL; pub extern "kernel32" stdcallcc fn CreateDirectoryW(lpPathName: [*]const u16, lpSecurityAttributes: ?*SECURITY_ATTRIBUTES) BOOL; +pub extern "kernel32" stdcallcc fn CreateEventExW( + lpEventAttributes: ?*SECURITY_ATTRIBUTES, + lpName: [*:0]const u16, + dwFlags: DWORD, + dwDesiredAccess: DWORD, +) ?HANDLE; + pub extern "kernel32" stdcallcc fn CreateFileW( lpFileName: [*]const u16, // TODO null terminated pointer type dwDesiredAccess: DWORD,