Commit 41bf816fa6

xEgoist <egoist@egoistic.dev>
2023-05-02 20:36:48
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`.
1 parent 7116b02
Changed files (1)
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;