Daniel Berger
2009-Sep-02 10:55 UTC
[Win32utils-devel] Question on CreateProcess and handle inheritance
Hi, I just wanted to make sure that I''m not confused by Michael Buselli''s comment and patch. As far as I can tell, if you set the bInheritHandle in the SECURITY_ATTRIBUTES structure that''s passed to CreateProcess to true, it''s the same as calling SetHandleInformation(handle, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT) after the fact. CreateProcess: lpProcessAttributes [in, optional] A pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle to the new process object can be inherited by child processes. If lpProcessAttributes is NULL, the handle cannot be inherited. SetHandleInformation: HANDLE_FLAG_INHERIT If this flag is set, a child process created with the bInheritHandles parameter of CreateProcess set to TRUE will inherit the object handle. Or is this a case of "can" (i.e. it''s possible for the child to inherit the handle) vs "will" (i.e. the child process will definitely inherit the handle)? Regards, Dan
Heesob Park
2009-Sep-02 14:28 UTC
[Win32utils-devel] Question on CreateProcess and handle inheritance
Hi, 2009/9/2 Daniel Berger <djberg96 at gmail.com>:> Hi, > > I just wanted to make sure that I''m not confused by Michael Buselli''s > comment and patch. As far as I can tell, if you set the bInheritHandle > in the SECURITY_ATTRIBUTES structure that''s passed to CreateProcess to > true, it''s the same as calling SetHandleInformation(handle, > HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT) after the fact. > > CreateProcess: > > lpProcessAttributes [in, optional] > > ? ?A pointer to a SECURITY_ATTRIBUTES structure that determines > whether the returned handle to the new process object can be inherited > by child processes. If lpProcessAttributes is NULL, the handle cannot > be inherited. >You must notice that "the returned handle" has nothing to do with the handle of stdin, stdout, or stderr. The SECURITY_ATTRIBUTES structure provides security settings for objects created by various functions, such as CreateFile, CreatePipe, CreateProcess, RegCreateKeyEx, or RegSaveKeyEx. The returned handle can be a file handle, process handle or registry handle.> SetHandleInformation: > > HANDLE_FLAG_INHERIT > > ? If this flag is set, a child process created with the > bInheritHandles parameter of CreateProcess set to TRUE will inherit > the object handle. > > Or is this a case of "can" (i.e. it''s possible for the child to > inherit the handle) vs "will" (i.e. the child process will definitely > inherit the handle)? >I guess the child process will definitely inherit the handle when bInheritHandles flag is set and the handle was not set by SetHandleInformation(handle,HANDLE_FLAG_INHERIT, 0). I think Michael Buselli''s patch is acceptable. Regards, Park Heesob
Reasonably Related Threads
- clang-format sets executable permission on windows (openNativeFile ignores mode on Windows)
- problem usrmgr Version 3.2.4
- clang-format sets executable permission on windows (openNativeFile ignores mode on Windows)
- clang-format sets executable permission on windows (openNativeFile ignores mode on Windows)
- RE: Converting to 1.1.4, help please!