ekohl@cvs.reactos.com wrote:
CVSROOT: /CVS/ReactOS Module name: reactos Repository: reactos/drivers/fs/np/ Changes by: ekohl@mok.osexperts.com 04/12/30 04:34:27
Modified files: reactos/drivers/fs/np/: create.c fsctrl.c
Log message: Use a new passive pipe state (0) to ensure that client ends don't connect to server ends in calls to WaitNamed Pipe().
This change breaks services.exe. Now it stops loading auto-start drivers because it ends up waiting in ConnectNamedPipe call.
Trace w/ old version (CVS 29/12):
(database.c:729) Group 'Event log' (database.c:532) ScmStartService() called (database.c:535) Service->Type: 16 (database.c:568) ImagePath: 'C:\ReactOS\system32\eventlog.exe' (database.c:569) Type: 10 (create.c:224) NpfsCreateNamedPipe(DeviceObject c03ac950 Irp c04cb228) (create.c:229) FileObject c04cb038 (create.c:230) Pipe name \net\NtControlPipe (database.c:580) CreateNamedPipeW() done (database.c:621) Process Id: 7 Handle 8c (database.c:624) Thread Id: 44 Handle 90 database.c:633 (fsctrl.c:391) NpfsFileSystemContol(DeviceObject c03ac950 Irp c04cf870) (fsctrl.c:395) IoStack: c04cf8e0 (fsctrl.c:397) FileObject: c04cb038 (fsctrl.c:399) Fcb: c04cbe70 (fsctrl.c:401) Pipe: c04cbef0 (fsctrl.c:402) PipeName: \net\NtControlPipe (fsctrl.c:417) Connecting pipe \net\NtControlPipe (fsctrl.c:29) NpfsConnectPipe() (fsctrl.c:40) Waiting for connection... (fsctrl.c:84) No listening client fcb found -- waiting for client (create.c:81) NpfsCreate(DeviceObject c03ac950 Irp c05e3528) (create.c:87) FileObject c05e3440 (create.c:88) FileName \net\NtControlPipe (create.c:36) <\net\NtControlPipe> = <\net\NtControlPipe> (create.c:59) Server found! Fcb c04cbe70 (create.c:195) Setting the ConnectEvent for c04cbe70 (create.c:206) Success! (fsctrl.c:391) NpfsFileSystemContol(DeviceObject c03ac950 Irp c05e3528) (fsctrl.c:395) IoStack: c05e3598 (fsctrl.c:397) FileObject: c05e3440 (fsctrl.c:399) Fcb: c05dc788 (fsctrl.c:401) Pipe: c04cbef0 (fsctrl.c:402) PipeName: \net\NtControlPipe (fsctrl.c:437) Waitin(fsctrl.c:101) Client Fcb: c05dc788 (database.c:638) Control pipe connected!
Trace w/ new version (CVS frozen):
(database.c:729) Group 'Event log' (database.c:532) ScmStartService() called (database.c:535) Service->Type: 16 (database.c:568) ImagePath: 'C:\ReactOS\system32\eventlog.exe' (database.c:569) Type: 10 (create.c:237) NpfsCreateNamedPipe(DeviceObject c03aa9b0 Irp c04cb098) (create.c:242) FileObject c04caef8 (create.c:243) Pipe name \net\NtControlPipe (database.c:580) CreateNamedPipeW() done (database.c:621) Process Id: 7 Handle 8c (database.c:624) Thread Id: 44 Handle 90 database.c:633 (fsctrl.c:406) NpfsFileSystemContol(DeviceObject c03aa9b0 Irp c04cf870) (fsctrl.c:410) IoStack: c04cf8e0 (fsctrl.c:412) FileObject: c04caef8 (fsctrl.c:414) Fcb: c04cb158 (fsctrl.c:416) Pipe: c04cbe38 (fsctrl.c:417) PipeName: \net\NtControlPipe (fsctrl.c:432) Connecting pipe \net\NtControlPipe (fsctrl.c:29) NpfsConnectPipe() (fsctrl.c:40) Waiting for connection... (fsctrl.c:95) No listening client fcb found -- waiting for client (create.c:81) NpfsCreate(DeviceObject c03aa9b0 Irp c05e3728) (create.c:86) FileObject c05e3640 (create.c:87) FileName \net\NtControlPipe (create.c:94) NpfsCreate() open client end for special use! (create.c:36) <\net\NtControlPipe> = <\net\NtControlPipe>
<<-- Here is doesn't connect because the server pipe is not in listening state.
(create.c:219) Success! (fsctrl.c:406) NpfsFileSystemContol(DeviceObject c03aa9b0 Irp c05e3728) (fsctrl.c:410) IoStack: c05e3798 (fsctrl.c:412) FileObject: c05e3640 (fsctrl.c:414) Fcb: c05e77a0 (fsctrl.c:416) Pipe: c04cbe38 (fsctrl.c:417) PipeName: \net\NtControlPipe (fsctrl.c:452) Waiting for pipe \net\NtControlPipe (fsctrl.c:166) NpfsWaitPipe (fsctrl.c:188) Listening server fcb found -- connecting (create.c:451) NpfsClose(DeviceObject c03aa9b0 Irp c05e3728) (create.c:466) Fcb c05e77a0 (create.c:469) Closing pipe \net\NtControlPipe (create.c:483) Client (create.c:81) NpfsCreate(DeviceObject c03aa9b0 Irp c05e3618) (create.c:86) FileObject c05e7ef0 (create.c:87) FileName \net\NtControlPipe (create.c:94) NpfsCreate() open client end for special use! (create.c:36) <\net\NtControlPipe> = <\net\NtControlPipe> (create.c:219) Success! (fsctrl.c:406) NpfsFileSystemContol(DeviceObject c03aa9b0 Irp c05e3618) (fsctrl.c:410) IoStack: c05e3688 (fsctrl.c:412) FileObject: c05e7ef0 (fsctrl.c:414) Fcb: c05e9070 (fsctrl.c:416) Pipe: c04cbe38 (fsctrl.c:417) PipeName: \net\NtControlPipe (fsctrl.c:472) Get state (fsctrl.c:276) Status (0x0). (fsctrl.c:406) NpfsFileSystemContol(DeviceObject c03aa9b0 Irp c05e3618) (fsctrl.c:410) IoStack: c05e3688 (fsctrl.c:412) FileObject: c05e7ef0 (fsctrl.c:414) Fcb: c05e9070 (fsctrl.c:416) Pipe: c04cbe38 (fsctrl.c:417) PipeName: \net\NtControlPipe (fsctrl.c:477) Set state (fsctrl.c:349) Status (0x0). (rw.c:278) NpfsWrite() (rw.c:282) FileObject c05e7ef0 (rw.c:283) Pipe name \net\NtControlPipe (rw.c:302) Pipe is NOT connected!
(rw.c:432) NpfsWrite done (Status c0000001)
Filip Navara schrieb:
ekohl@cvs.reactos.com wrote:
CVSROOT: /CVS/ReactOS Module name: reactos Repository: reactos/drivers/fs/np/ Changes by: ekohl@mok.osexperts.com 04/12/30 04:34:27
Modified files: reactos/drivers/fs/np/: create.c fsctrl.c Log message: Use a new passive pipe state (0) to ensure that client ends don't connect to server ends in calls to WaitNamed Pipe().
This change breaks services.exe. Now it stops loading auto-start drivers because it ends up waiting in ConnectNamedPipe call.
I have heavily modified advapi32.dll and services.exe in my (CVS) source tree that fix this bug. The good thing is that a service and the SCM can now communicate with one-another via the pipe.
I'll commit the modifications as soon as possible.
Regards, Eric