Author: sginsberg Date: Thu Oct 30 10:59:00 2008 New Revision: 37102
URL: http://svn.reactos.org/svn/reactos?rev=37102&view=rev Log: - NtWrite/ReadFile: Don't hardcode Irp->RequestorMode to KernelMode! Instead, use the PreviousMode we saved earlier. This caused user mode APCs to be called from kernel mode, which is a...very...bad... idea. - Spotted by bug 3607 and exposed by ntdll Winetests "file" See issue #3607 for more details.
Modified: trunk/reactos/ntoskrnl/io/iomgr/iofunc.c
Modified: trunk/reactos/ntoskrnl/io/iomgr/iofunc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/iofunc.c?... ============================================================================== --- trunk/reactos/ntoskrnl/io/iomgr/iofunc.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/io/iomgr/iofunc.c [iso-8859-1] Thu Oct 30 10:59:00 2008 @@ -2070,7 +2070,7 @@ /* Set the IRP */ Irp->Tail.Overlay.OriginalFileObject = FileObject; Irp->Tail.Overlay.Thread = PsGetCurrentThread(); - Irp->RequestorMode = KernelMode; + Irp->RequestorMode = PreviousMode; Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine; Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext; Irp->UserIosb = IoStatusBlock; @@ -2929,7 +2929,7 @@ /* Set the IRP */ Irp->Tail.Overlay.OriginalFileObject = FileObject; Irp->Tail.Overlay.Thread = PsGetCurrentThread(); - Irp->RequestorMode = KernelMode; + Irp->RequestorMode = PreviousMode; Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine; Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext; Irp->UserIosb = IoStatusBlock;