authorgravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2019-11-19 16:38:23+11:00
committergravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2019-11-27 13:01:03+11:00
logb05a5a3e52a0b14396d94c0d659edc980c1d79ce
tree7933c07abf1da9954006d4aa6d3ee121c0e0e508
parent78c0d33eb75ed7985df39607cf0e0d2ae94ef98a
signature Commit is signed but in an unrecognized format.

std: add CreateEvent for windows


3 files changed, 30 insertions(+), 0 deletions(-)

lib/std/os/windows.zig+16
......@@ -97,6 +97,22 @@ pub fn CreatePipe(rd: *HANDLE, wr: *HANDLE, sattr: *const SECURITY_ATTRIBUTES) C
9797 }
9898}
9999
100pub fn CreateEventEx(attributes: ?*SECURITY_ATTRIBUTES, name: []const u8, flags: DWORD, desired_access: DWORD) !HANDLE {
101 const nameW = try sliceToPrefixedFileW(name);
102 return CreateEventExW(attributes, &nameW, flags, desired_access);
103}
104
105pub fn CreateEventExW(attributes: ?*SECURITY_ATTRIBUTES, nameW: [*:0]const u16, flags: DWORD, desired_access: DWORD) !HANDLE {
106 const handle = kernel32.CreateEventExW(attributes, nameW, flags, desired_access);
107 if (handle) |h| {
108 return h;
109 } else {
110 switch (kernel32.GetLastError()) {
111 else => |err| return unexpectedError(err),
112 }
113 }
114}
115
100116pub fn DeviceIoControl(
101117 h: HANDLE,
102118 ioControlCode: DWORD,
lib/std/os/windows/bits.zig+7
......@@ -489,6 +489,13 @@ pub const FILE_ATTRIBUTE_SYSTEM = 0x4;
489489pub const FILE_ATTRIBUTE_TEMPORARY = 0x100;
490490pub const FILE_ATTRIBUTE_VIRTUAL = 0x10000;
491491
492// flags for CreateEvent
493pub const CREATE_EVENT_INITIAL_SET = 0x00000002;
494pub const CREATE_EVENT_MANUAL_RESET = 0x00000001;
495
496pub const EVENT_ALL_ACCESS = 0x1F0003;
497pub const EVENT_MODIFY_STATE = 0x0002;
498
492499pub const PROCESS_INFORMATION = extern struct {
493500 hProcess: HANDLE,
494501 hThread: HANDLE,
lib/std/os/windows/kernel32.zig+7
......@@ -9,6 +9,13 @@ pub extern "kernel32" stdcallcc fn CloseHandle(hObject: HANDLE) BOOL;
99
1010pub extern "kernel32" stdcallcc fn CreateDirectoryW(lpPathName: [*]const u16, lpSecurityAttributes: ?*SECURITY_ATTRIBUTES) BOOL;
1111
12pub extern "kernel32" stdcallcc fn CreateEventExW(
13 lpEventAttributes: ?*SECURITY_ATTRIBUTES,
14 lpName: [*:0]const u16,
15 dwFlags: DWORD,
16 dwDesiredAccess: DWORD,
17) ?HANDLE;
18
1219pub extern "kernel32" stdcallcc fn CreateFileW(
1320 lpFileName: [*]const u16, // TODO null terminated pointer type
1421 dwDesiredAccess: DWORD,