Grrr..it's getting late or something. CORRECT fix. Modified: trunk/reactos/ntoskrnl/io/file.c _____
Modified: trunk/reactos/ntoskrnl/io/file.c --- trunk/reactos/ntoskrnl/io/file.c 2005-05-09 00:41:55 UTC (rev 15160) +++ trunk/reactos/ntoskrnl/io/file.c 2005-05-09 01:01:18 UTC (rev 15161) @@ -2435,21 +2435,20 @@
IN PLARGE_INTEGER ByteOffset OPTIONAL, /* NOT optional for asynch. operations! */ IN PULONG Key OPTIONAL) { - NTSTATUS Status; - PFILE_OBJECT FileObject; - PIRP Irp = NULL; - PDEVICE_OBJECT DeviceObject; - PIO_STACK_LOCATION StackPtr; - KPROCESSOR_MODE PreviousMode; - BOOLEAN LocalEvent = FALSE; - PKEVENT EventObject = NULL; + NTSTATUS Status; + PFILE_OBJECT FileObject; + PIRP Irp = NULL; + PDEVICE_OBJECT DeviceObject; + PIO_STACK_LOCATION StackPtr; + KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); + BOOLEAN LocalEvent = FALSE; + PKEVENT EventObject = NULL;
DPRINT("NtReadFile(FileHandle %x Buffer %x Length %x ByteOffset %x, " "IoStatusBlock %x)\n", FileHandle, Buffer, Length, ByteOffset, IoStatusBlock); PAGED_CODE();
- #if 0 /* Validate User-Mode Buffers */ if(PreviousMode != KernelMode) { @@ -2470,7 +2469,6 @@
if(!NT_SUCCESS(Status)) return Status; } - #endif
/* Get File Object */ Status = ObReferenceObjectByHandle(FileHandle, @@ -2573,15 +2571,20 @@ Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext; Irp->Flags |= IRP_READ_OPERATION;
- /* FIXME: Somethign weird is going on when I enable this. */ - //if (FileObject->Flags & FO_NO_INTERMEDIATE_BUFFERING) Irp->Flags |= IRP_NOCACHE; +#if 0 + /* FIXME: KDBG is using this flag and not reading from cluster-aligned. Investigate */ + if (FileObject->Flags & FO_NO_INTERMEDIATE_BUFFERING) + { + DbgBreakPoint(); + Irp->Flags |= IRP_NOCACHE; + DPRINT1("It's us: %p\n", FileObject); + } +#endif
/* Setup Stack Data */ StackPtr = IoGetNextIrpStackLocation(Irp); StackPtr->FileObject = FileObject; StackPtr->Parameters.Read.Key = Key ? *Key : 0; - StackPtr->Parameters.Read.Length = Length; - StackPtr->Parameters.Read.ByteOffset = *ByteOffset;
/* Call the Driver */ Status = IoCallDriver(DeviceObject, Irp);