From 0e6151383411d7bb002280bcb1d3c366665e97fc Mon Sep 17 00:00:00 2001 From: short <> Date: Fri, 4 Apr 2003 21:36:07 +0000 Subject: [PATCH] IopCreateFile(): Fix semantics of volume mounting (Vpb vs. Device etc.) --- ntoskrnl/io/create.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ntoskrnl/io/create.c b/ntoskrnl/io/create.c index 83e1941..cf0553d 100644 --- a/ntoskrnl/io/create.c +++ b/ntoskrnl/io/create.c @@ -114,6 +114,7 @@ IopCreateFile(PVOID ObjectBody, FileObject->Flags = FileObject->Flags | FO_DIRECT_DEVICE_OPEN; FileObject->FileName.Buffer = 0; FileObject->FileName.Length = FileObject->FileName.MaximumLength = 0; + FileObject->Vpb = DeviceObject->Vpb; } else { @@ -126,6 +127,7 @@ IopCreateFile(PVOID ObjectBody, && (DeviceObject->DeviceType != FILE_DEVICE_MAILSLOT)) { CPRINT("Device was wrong type\n"); + KeBugCheck(0); return(STATUS_UNSUCCESSFUL); } @@ -144,12 +146,20 @@ IopCreateFile(PVOID ObjectBody, Status); return(Status); } + if (!DeviceObject->Vpb) + KeBugCheck(0); + if (DeviceObject->Vpb->DeviceObject->Vpb) + KeBugCheck(0); + DeviceObject->Vpb->DeviceObject->Vpb=DeviceObject->Vpb; + DeviceObject->Vpb->Flags |= VPB_MOUNTED; } + DeviceObject = DeviceObject->Vpb->DeviceObject; DPRINT("FsDeviceObject %lx\n", DeviceObject); } RtlCreateUnicodeString(&(FileObject->FileName), RemainingPath); + FileObject->Vpb = NULL; } DPRINT("FileObject->FileName %wZ\n", @@ -158,7 +168,6 @@ IopCreateFile(PVOID ObjectBody, DPRINT("FileObject %x DeviceObject %x\n", FileObject, DeviceObject); - FileObject->Vpb = DeviceObject->Vpb; FileObject->Type = InternalFileType; FileObject->RelatedFileObject = NULL; -- 1.8.3.1