mirror of
https://github.com/ziglang/zig.git
synced 2026-01-21 06:45:24 +00:00
Merge pull request #15565 from xEgoist/spawnWindows
child_process: Add write and inheritable access to the null handle
This commit is contained in:
commit
a338c279f8
@ -650,7 +650,7 @@ pub const ChildProcess = struct {
|
||||
}
|
||||
|
||||
fn spawnWindows(self: *ChildProcess) SpawnError!void {
|
||||
const saAttr = windows.SECURITY_ATTRIBUTES{
|
||||
var saAttr = windows.SECURITY_ATTRIBUTES{
|
||||
.nLength = @sizeOf(windows.SECURITY_ATTRIBUTES),
|
||||
.bInheritHandle = windows.TRUE,
|
||||
.lpSecurityDescriptor = null,
|
||||
@ -661,8 +661,9 @@ 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,
|
||||
.sa = &saAttr,
|
||||
.creation = windows.OPEN_EXISTING,
|
||||
.io_mode = .blocking,
|
||||
}) catch |err| switch (err) {
|
||||
@ -680,9 +681,6 @@ pub const ChildProcess = struct {
|
||||
defer {
|
||||
if (any_ignore) os.close(nul_handle);
|
||||
}
|
||||
if (any_ignore) {
|
||||
try windows.SetHandleInformation(nul_handle, windows.HANDLE_FLAG_INHERIT, 0);
|
||||
}
|
||||
|
||||
var g_hChildStd_IN_Rd: ?windows.HANDLE = null;
|
||||
var g_hChildStd_IN_Wr: ?windows.HANDLE = null;
|
||||
|
||||
@ -86,7 +86,10 @@ pub fn OpenFile(sub_path_w: []const u16, options: OpenFileOptions) OpenError!HAN
|
||||
var attr = OBJECT_ATTRIBUTES{
|
||||
.Length = @sizeOf(OBJECT_ATTRIBUTES),
|
||||
.RootDirectory = if (std.fs.path.isAbsoluteWindowsWTF16(sub_path_w)) null else options.dir,
|
||||
.Attributes = 0, // Note we do not use OBJ_CASE_INSENSITIVE here.
|
||||
.Attributes = if (options.sa) |ptr| blk: { // Note we do not use OBJ_CASE_INSENSITIVE here.
|
||||
const inherit: ULONG = if (ptr.bInheritHandle == TRUE) OBJ_INHERIT else 0;
|
||||
break :blk inherit;
|
||||
} else 0,
|
||||
.ObjectName = &nt_name,
|
||||
.SecurityDescriptor = if (options.sa) |ptr| ptr.lpSecurityDescriptor else null,
|
||||
.SecurityQualityOfService = null,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user