I have been trying to understand the difference between these two process creation flags. The msdn documentation is not clear about the distinction.
If CreateProcess succeeds, it returns a PROCESS_INFORMATION structure containing handles and identifiers for the new process and its primary thread. The thread and process handles are created with full access rights, although access can be restricted if you specify security descriptors.
The fundamental Windows process management function is CreateProcess, which creates a process with a single thread. Specify the name of an executable program file as part of the CreateProcess call. It is common to speak of parent and child processes, but Windows does not actually maintain these relationships.
The difference is in what the started process can do. In both cases it won't have a console. But with the CREATE_NO_WINDOW
option it can call AttachConsole(ATTACH_PARENT_PROCESS)
and get access to the parent's console window (if available). That explicitly will not work when you specify DETACH_PROCESS
. The only option then is for the started process to use AllocConsole()
to create its own console.
Or in other words, you can be sure that the started process will never be able to chatter into your own console by using DETACH_PROCESS
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With