From 902959017743399f1cede9ef75e2b8bc13fda362 Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Tue, 31 May 2005 14:56:55 +0000 Subject: [PATCH] Try always to open a file as named object first. This is necessary for the redirection to NUL which is used by the new build system. svn path=/trunk/; revision=15699 --- reactos/ntoskrnl/io/file.c | 65 ++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/reactos/ntoskrnl/io/file.c b/reactos/ntoskrnl/io/file.c index ee2a0a73976..b497214e09a 100644 --- a/reactos/ntoskrnl/io/file.c +++ b/reactos/ntoskrnl/io/file.c @@ -844,44 +844,39 @@ IoCreateFile(OUT PHANDLE FileHandle, DPRINT1("FIXME: IO_CHECK_CREATE_PARAMETERS not yet supported!\n"); } - if (CreateDisposition == FILE_OPEN || - CreateDisposition == FILE_OPEN_IF) + Status = ObOpenObjectByName(ObjectAttributes, + NULL, + NULL, + AccessMode, + DesiredAccess, + NULL, + &LocalHandle); + + if (NT_SUCCESS(Status)) { - - Status = ObOpenObjectByName(ObjectAttributes, - NULL, - NULL, - AccessMode, - DesiredAccess, - NULL, - &LocalHandle); - - if (NT_SUCCESS(Status)) + Status = ObReferenceObjectByHandle(LocalHandle, + DesiredAccess, + NULL, + AccessMode, + (PVOID*)&DeviceObject, + NULL); + ZwClose(LocalHandle); + if (!NT_SUCCESS(Status)) { - Status = ObReferenceObjectByHandle(LocalHandle, - DesiredAccess, - NULL, - AccessMode, - (PVOID*)&DeviceObject, - NULL); - ZwClose(LocalHandle); - if (!NT_SUCCESS(Status)) - { - return Status; - } - if (BODY_TO_HEADER(DeviceObject)->Type != IoDeviceObjectType) - { - ObDereferenceObject (DeviceObject); - return STATUS_OBJECT_NAME_COLLISION; - } - /* FIXME: wt... */ - FileObject = IoCreateStreamFileObject(NULL, DeviceObject); - /* HACK */ - FileObject->Flags |= FO_DIRECT_DEVICE_OPEN; - DPRINT("%wZ\n", ObjectAttributes->ObjectName); - - ObDereferenceObject (DeviceObject); + return Status; } + if (BODY_TO_HEADER(DeviceObject)->Type != IoDeviceObjectType) + { + ObDereferenceObject (DeviceObject); + return STATUS_OBJECT_NAME_COLLISION; + } + /* FIXME: wt... */ + FileObject = IoCreateStreamFileObject(NULL, DeviceObject); + /* HACK */ + FileObject->Flags |= FO_DIRECT_DEVICE_OPEN; + DPRINT("%wZ\n", ObjectAttributes->ObjectName); + + ObDereferenceObject (DeviceObject); }