Grrr..it's getting late or something. CORRECT fix.

svn path=/trunk/; revision=15161
This commit is contained in:
Alex Ionescu 2005-05-09 01:01:18 +00:00
parent 261e754d28
commit 4dbcb4368f

View file

@ -2435,21 +2435,20 @@ NtReadFile(IN HANDLE FileHandle,
IN PLARGE_INTEGER ByteOffset OPTIONAL, /* NOT optional for asynch. operations! */ IN PLARGE_INTEGER ByteOffset OPTIONAL, /* NOT optional for asynch. operations! */
IN PULONG Key OPTIONAL) IN PULONG Key OPTIONAL)
{ {
NTSTATUS Status; NTSTATUS Status;
PFILE_OBJECT FileObject; PFILE_OBJECT FileObject;
PIRP Irp = NULL; PIRP Irp = NULL;
PDEVICE_OBJECT DeviceObject; PDEVICE_OBJECT DeviceObject;
PIO_STACK_LOCATION StackPtr; PIO_STACK_LOCATION StackPtr;
KPROCESSOR_MODE PreviousMode; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
BOOLEAN LocalEvent = FALSE; BOOLEAN LocalEvent = FALSE;
PKEVENT EventObject = NULL; PKEVENT EventObject = NULL;
DPRINT("NtReadFile(FileHandle %x Buffer %x Length %x ByteOffset %x, " DPRINT("NtReadFile(FileHandle %x Buffer %x Length %x ByteOffset %x, "
"IoStatusBlock %x)\n", FileHandle, Buffer, Length, ByteOffset, "IoStatusBlock %x)\n", FileHandle, Buffer, Length, ByteOffset,
IoStatusBlock); IoStatusBlock);
PAGED_CODE(); PAGED_CODE();
#if 0
/* Validate User-Mode Buffers */ /* Validate User-Mode Buffers */
if(PreviousMode != KernelMode) if(PreviousMode != KernelMode)
{ {
@ -2470,7 +2469,6 @@ NtReadFile(IN HANDLE FileHandle,
if(!NT_SUCCESS(Status)) return Status; if(!NT_SUCCESS(Status)) return Status;
} }
#endif
/* Get File Object */ /* Get File Object */
Status = ObReferenceObjectByHandle(FileHandle, Status = ObReferenceObjectByHandle(FileHandle,
@ -2573,15 +2571,20 @@ NtReadFile(IN HANDLE FileHandle,
Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext; Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext;
Irp->Flags |= IRP_READ_OPERATION; Irp->Flags |= IRP_READ_OPERATION;
/* FIXME: Somethign weird is going on when I enable this. */ #if 0
//if (FileObject->Flags & FO_NO_INTERMEDIATE_BUFFERING) Irp->Flags |= IRP_NOCACHE; /* 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 */ /* Setup Stack Data */
StackPtr = IoGetNextIrpStackLocation(Irp); StackPtr = IoGetNextIrpStackLocation(Irp);
StackPtr->FileObject = FileObject; StackPtr->FileObject = FileObject;
StackPtr->Parameters.Read.Key = Key ? *Key : 0; StackPtr->Parameters.Read.Key = Key ? *Key : 0;
StackPtr->Parameters.Read.Length = Length;
StackPtr->Parameters.Read.ByteOffset = *ByteOffset;
/* Call the Driver */ /* Call the Driver */
Status = IoCallDriver(DeviceObject, Irp); Status = IoCallDriver(DeviceObject, Irp);