This is the mail archive of the
mailing list for the Cygwin project.
Re: A real fork() on NT
On Wed, Jan 30, 2002 at 01:14:16PM +0100, Corinna Vinschen wrote:
>On Wed, Jan 30, 2002 at 11:03:00AM +0000, Christopher January wrote:
>>>When looking at XP's CreateProcessW (or rather, CreateProcessInternalW)
>>>I noticed something strange about the way it creates a process. It
>>>seems that NT is sort of capable of a fork() command. The function
>>>NtCreateProcess appears to create a "blank" process, into which you can
>>>put anything you want. After NtCreateProcess, kernel32 maps the EXE
>>>into that new process's memory space, creates a thread, and finally
>>>calls NtResumeThread to start its execution.
>>>If this long, nasty, scattered function could be reverse engineered, it
>>>should be possible to create a true fork() for NT, instead of doing the
>>>normal cygwin "hack" method.
>>Coincidentally, I was looking into a similar thing myself. Windows NT
>>has a POSIX subsystem that's capable of doing fork()'s so it is
>>obviously possible. Have you any ideas of the arguments passed to the
>>function or what it returns?
>That isn't really new. I'd like to point you to the example 6.1,
>"Forking a Win32 Process" on p. 161ff of Gary Nebbett's excellent book
>"Windows NT/2000 Native API Reference", published by MTP, ISBN
>1-57870-199-6, which also describes the problem with kernel32.dll
>initialization of the child process.
Somehow everyone seems to forget the fact that cygwin has been around
forever. Although it would be refreshing to see new ideas, they really
are few and far between.
Actually, the last new idea (for me at least) that I can recall came
from Ralf Habacker when he suggested a new way of producing import
libs like libpthread.a.
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html