From 41bf816fa6dd6fde0264db885c2f00757aba74b0 Mon Sep 17 00:00:00 2001 From: xEgoist Date: Tue, 2 May 2023 13:36:48 -0500 Subject: [PATCH] child_process: Add write access to the null handle This commit allows write access to the `\\Device\\Null` Handle. Without a write access, it's not possible for the child process to write SdOut to Null. As a requirement `SetHandleInformation` was also changed to mark the handle as iheritable (by adding it to Flags) by the spawned process. This allows the child to access the NUL device that was opened. This also makes the Windows part to behave similarly to `spawnPosix`. --- lib/std/child_process.zig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/std/child_process.zig b/lib/std/child_process.zig index 444adebbdc..4be8b1cd83 100644 --- a/lib/std/child_process.zig +++ b/lib/std/child_process.zig @@ -661,8 +661,8 @@ pub const ChildProcess = struct { const nul_handle = if (any_ignore) // "\Device\Null" or "\??\NUL" windows.OpenFile(&[_]u16{ '\\', 'D', 'e', 'v', 'i', 'c', 'e', '\\', 'N', 'u', 'l', 'l' }, .{ - .access_mask = windows.GENERIC_READ | windows.SYNCHRONIZE, - .share_access = windows.FILE_SHARE_READ, + .access_mask = windows.GENERIC_READ | windows.GENERIC_WRITE | windows.SYNCHRONIZE, + .share_access = windows.FILE_SHARE_READ | windows.FILE_SHARE_WRITE, .creation = windows.OPEN_EXISTING, .io_mode = .blocking, }) catch |err| switch (err) { @@ -681,7 +681,7 @@ pub const ChildProcess = struct { if (any_ignore) os.close(nul_handle); } if (any_ignore) { - try windows.SetHandleInformation(nul_handle, windows.HANDLE_FLAG_INHERIT, 0); + try windows.SetHandleInformation(nul_handle, windows.HANDLE_FLAG_INHERIT, windows.HANDLE_FLAG_INHERIT); } var g_hChildStd_IN_Rd: ?windows.HANDLE = null;