| author | |
| committer | |
| log | d9d3268cc1fe6b581ccb44606346cb6847d557a5 |
| tree | 62beebf3c91dfc9f65c71c4651e881ff1d932893 |
| parent | f4c6cc3270db8f3557b3e7191eccc02098b4b2da |
| signature |
2 files changed, 47 insertions(+), 0 deletions(-)
lib/std/os/windows.zig+36| ... | ... | @@ -97,6 +97,42 @@ pub fn CreatePipe(rd: *HANDLE, wr: *HANDLE, sattr: *const SECURITY_ATTRIBUTES) C |
| 97 | 97 | } |
| 98 | 98 | } |
| 99 | 99 | |
| 100 | pub fn DeviceIoControl( | |
| 101 | h: HANDLE, | |
| 102 | ioControlCode: DWORD, | |
| 103 | in: ?[]const u8, | |
| 104 | out: ?[]u8, | |
| 105 | overlapped: ?*OVERLAPPED, | |
| 106 | ) !DWORD { | |
| 107 | var bytes: DWORD = undefined; | |
| 108 | if (kernel32.DeviceIoControl( | |
| 109 | h, | |
| 110 | ioControlCode, | |
| 111 | if (in) |i| i.ptr else null, | |
| 112 | if (in) |i| @intCast(u32, i.len) else 0, | |
| 113 | if (out) |o| o.ptr else null, | |
| 114 | if (out) |o| @intCast(u32, o.len) else 0, | |
| 115 | &bytes, | |
| 116 | overlapped, | |
| 117 | ) == 0) { | |
| 118 | switch (kernel32.GetLastError()) { | |
| 119 | else => |err| return unexpectedError(err), | |
| 120 | } | |
| 121 | } | |
| 122 | return bytes; | |
| 123 | } | |
| 124 | ||
| 125 | pub fn GetOverlappedResult(h: HANDLE, overlapped: *OVERLAPPED, wait: bool) !DWORD { | |
| 126 | var bytes: DWORD = undefined; | |
| 127 | if (kernel32.GetOverlappedResult(h, overlapped, &bytes, wait) == 0) { | |
| 128 | switch (kernel32.GetLastError()) { | |
| 129 | ERROR_IO_INCOMPLETE => if (!wait) return error.WouldBlock else unreachable, | |
| 130 | else => |err| return unexpectedError(err), | |
| 131 | } | |
| 132 | } | |
| 133 | return bytes; | |
| 134 | } | |
| 135 | ||
| 100 | 136 | pub const SetHandleInformationError = error{Unexpected}; |
| 101 | 137 | |
| 102 | 138 | pub fn SetHandleInformation(h: HANDLE, mask: DWORD, flags: DWORD) SetHandleInformationError!void { |
lib/std/os/windows/kernel32.zig+11| ... | ... | @@ -45,6 +45,17 @@ pub extern "kernel32" stdcallcc fn CreateIoCompletionPort(FileHandle: HANDLE, Ex |
| 45 | 45 | |
| 46 | 46 | pub extern "kernel32" stdcallcc fn CreateThread(lpThreadAttributes: ?LPSECURITY_ATTRIBUTES, dwStackSize: SIZE_T, lpStartAddress: LPTHREAD_START_ROUTINE, lpParameter: ?LPVOID, dwCreationFlags: DWORD, lpThreadId: ?LPDWORD) ?HANDLE; |
| 47 | 47 | |
| 48 | pub extern "kernel32" stdcallcc fn DeviceIoControl( | |
| 49 | h: HANDLE, | |
| 50 | dwIoControlCode: DWORD, | |
| 51 | lpInBuffer: ?*const c_void, | |
| 52 | nInBufferSize: DWORD, | |
| 53 | lpOutBuffer: ?LPVOID, | |
| 54 | nOutBufferSize: DWORD, | |
| 55 | lpBytesReturned: LPDWORD, | |
| 56 | lpOverlapped: ?*OVERLAPPED, | |
| 57 | ) BOOL; | |
| 58 | ||
| 48 | 59 | pub extern "kernel32" stdcallcc fn DeleteFileW(lpFileName: [*]const u16) BOOL; |
| 49 | 60 | |
| 50 | 61 | pub extern "kernel32" stdcallcc fn DuplicateHandle(hSourceProcessHandle: HANDLE, hSourceHandle: HANDLE, hTargetProcessHandle: HANDLE, lpTargetHandle: *HANDLE, dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwOptions: DWORD) BOOL; |