Author: ekohl Date: Sat Dec 4 08:54:16 2010 New Revision: 49945
URL: http://svn.reactos.org/svn/reactos?rev=49945&view=rev Log: [NPFS] Read and write IRPs must fail if the caller is not a pipe but a directory or a device.
Modified: trunk/reactos/drivers/filesystems/npfs/rw.c
Modified: trunk/reactos/drivers/filesystems/npfs/rw.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/npfs/rw... ============================================================================== --- trunk/reactos/drivers/filesystems/npfs/rw.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/npfs/rw.c [iso-8859-1] Sat Dec 4 08:54:16 2010 @@ -307,6 +307,20 @@
DPRINT("NpfsRead(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
+ FileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject; + DPRINT("FileObject %p\n", FileObject); + DPRINT("Pipe name %wZ\n", &FileObject->FileName); + Ccb = FileObject->FsContext2; + + /* Fail, if the CCB is not a pipe CCB */ + if (Ccb->Type != CCB_PIPE) + { + DPRINT("Not a pipe!\n"); + Status = STATUS_INVALID_PARAMETER; + Irp->IoStatus.Information = 0; + goto done; + } + if (Irp->MdlAddress == NULL) { DPRINT("Irp->MdlAddress == NULL\n"); @@ -315,10 +329,6 @@ goto done; }
- FileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject; - DPRINT("FileObject %p\n", FileObject); - DPRINT("Pipe name %wZ\n", &FileObject->FileName); - Ccb = FileObject->FsContext2; Context = (PNPFS_CONTEXT)&Irp->Tail.Overlay.DriverContext;
if ((Ccb->OtherSide) && (Ccb->OtherSide->PipeState == FILE_PIPE_DISCONNECTED_STATE) && (Ccb->PipeState == FILE_PIPE_DISCONNECTED_STATE)) @@ -736,7 +746,7 @@ NTSTATUS Status = STATUS_SUCCESS; ULONG Length; ULONG Offset; - ULONG Information; + ULONG Information = 0; ULONG CopyLength; ULONG TempLength;
@@ -748,12 +758,21 @@ DPRINT("Pipe name %wZ\n", &FileObject->FileName);
Ccb = FileObject->FsContext2; + + /* Fail, if the CCB is not a pipe CCB */ + if (Ccb->Type != CCB_PIPE) + { + DPRINT("Not a pipe!\n"); + Status = STATUS_INVALID_PARAMETER; + Length = 0; + goto done; + } + ReaderCcb = Ccb->OtherSide; Fcb = Ccb->Fcb;
Length = IoStack->Parameters.Write.Length; Offset = IoStack->Parameters.Write.ByteOffset.u.LowPart; - Information = 0;
if (Irp->MdlAddress == NULL) {