Description
API Change Proposal
Problem Statement
Currently, there is no mechanism in the Rust standard library to create a child process on Windows that does not inherit handles from the calling process.
Motivating Examples or Use Cases
Handle inheritance can be problematic in multi-threaded programs, as different command-spawning actions may require passing different files to the child process. In addition, improving security by preventing the child process from acquiring certain handles is essential.
Disabling handle inheritance when unnecessary is important for several reasons:
- Inheriting unnecessary handles is inefficient and prevents kernel objects from being cleaned up.
- In some cases, it might allow the child process to interfere with the inherited handles, although it would need to locate them first.
Solution Sketch
To address this issue, we propose adding a new flag to the CommandExt
trait in Rust's standard library. This flag will determine whether the child process should inherit handles from the calling process.
/// If this flag is set to `true`, each inheritable handle in the calling process is inherited by the new process.
/// If the flag is `false`, the handles are not inherited.
///
/// The default value for this flag is `true`.
///
/// **Note** that inherited handles have the same value and access rights as the original handles. For additional discussion of inheritable handles, see [Remarks][1].
///
/// [1]: <https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessw#remarks>
#[unstable(feature = "windows_process_extensions_inherit_handles", issue = "")]
fn inherit_handles(&mut self, inherit_handles: bool) -> &mut process::Command;
Additionally, the proposed change will affect the underlying CreateProcessW
function, as shown below:
cvt(c::CreateProcessW(
program.as_ptr(),
cmd_str.as_mut_ptr(),
ptr::null_mut(),
ptr::null_mut(),
inherit_handles,
flags,
envp,
dirp,
si_ptr,
&mut pi,
))
Alternatives
- currently non
Links and Related Work
For further reference, please consult the following resources: