zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit b05a5a3e52a0b14396d94c0d659edc980c1d79ce (tree)
parent 78c0d33eb75ed7985df39607cf0e0d2ae94ef98a
Author: daurnimator <quae@daurnimator.com>
Date:   Tue, 19 Nov 2019 16:38:23 +1100

std: add CreateEvent for windows

Diffstat:
Mlib/std/os/windows.zig | 16++++++++++++++++
Mlib/std/os/windows/bits.zig | 7+++++++
Mlib/std/os/windows/kernel32.zig | 7+++++++
3 files changed, 30 insertions(+), 0 deletions(-)

diff --git 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 @@ -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 @@ -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,