X-Git-Url: http://git.jankratochvil.net/?a=blobdiff_plain;f=ntoskrnl%2Fio%2Fcreate.c;h=cf0553d61d393879696c4b3ae9ca3f9f387b55b3;hb=0e6151383411d7bb002280bcb1d3c366665e97fc;hp=7c49df49dba466f26b1f54f1a82d462bd8158f76;hpb=46a7ac8e8759d22cdf81c3a6acc3198e35dcc115;p=reactos.git diff --git a/ntoskrnl/io/create.c b/ntoskrnl/io/create.c index 7c49df4..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; @@ -334,6 +343,7 @@ IoCreateFile(OUT PHANDLE FileHandle, PIO_STACK_LOCATION StackLoc; IO_STATUS_BLOCK IoSB; IO_SECURITY_CONTEXT SecurityContext; + ACCESS_STATE AccessState; DPRINT("IoCreateFile(FileHandle %x, DesiredAccess %x, " "ObjectAttributes %x ObjectAttributes->ObjectName->Buffer %S)\n", @@ -366,8 +376,19 @@ IoCreateFile(OUT PHANDLE FileHandle, if( CreateOptions & FILE_NO_INTERMEDIATE_BUFFERING ) FileObject->Flags |= FO_NO_INTERMEDIATE_BUFFERING; + FileObject->FsContext=NULL; + FileObject->FsContext2=NULL; + + RtlZeroMemory(&AccessState, sizeof(AccessState)); + AccessState.RemainingDesiredAccess=0; /* FIXME: Meaning? */ + AccessState.PreviouslyGrantedAccess=DesiredAccess; /* FIXME: Meaning? */ + /* 'OriginalDesiredAccess' is required during file create by ntfs.sys of NT-5.1sp1 + * W32 undocumented. + */ + AccessState.OriginalDesiredAccess=DesiredAccess; /* FIXME: Meaning? */ + SecurityContext.SecurityQos = NULL; /* ?? */ - SecurityContext.AccessState = NULL; /* ?? */ + SecurityContext.AccessState = &AccessState; SecurityContext.DesiredAccess = DesiredAccess; SecurityContext.FullCreateOptions = 0; /* ?? */