DPRINT("IopCreateFile(ObjectBody %x, Parent %x, RemainingPath %w)\n",
ObjectBody,Parent,RemainingPath);
+ if (DeviceObject == NULL)
+ {
+ return(STATUS_SUCCESS);
+ }
+
Status = ObReferenceObjectByPointer(DeviceObject,
STANDARD_RIGHTS_REQUIRED,
IoDeviceType,
return(STATUS_SUCCESS);
}
+PFILE_OBJECT IoCreateStreamFileObject(PFILE_OBJECT FileObject,
+ PDEVICE_OBJECT DeviceObject)
+{
+ HANDLE FileHandle;
+ PFILE_OBJECT CreatedFileObject;
+
+ DbgPrint("IoCreateStreamFileObject(FileObject %x, DeviceObject %x)\n",
+ FileObject, DeviceObject);
+
+ assert_irql(PASSIVE_LEVEL);
+
+ CreatedFileObject = ObCreateObject(&FileHandle,
+ STANDARD_RIGHTS_REQUIRED,
+ NULL,
+ IoFileType);
+ if (CreatedFileObject == NULL)
+ {
+ return(NULL);
+ }
+
+ if (FileObject != NULL)
+ {
+ DeviceObject = FileObject->DeviceObject;
+ }
+ DeviceObject = IoGetAttachedDevice(DeviceObject);
+ CreatedFileObject->DeviceObject = DeviceObject;
+ CreatedFileObject->Vpb = DeviceObject->Vpb;
+ CreatedFileObject->Type = ID_FILE_OBJECT;
+ CreatedFileObject->Flags = CreatedFileObject->Flags | FO_DIRECT_DEVICE_OPEN;
+
+ ZwClose(FileHandle);
+
+ return(CreatedFileObject);
+}
+
NTSTATUS STDCALL ZwCreateFile(PHANDLE FileHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
if (!NT_SUCCESS(Status))
{
+ DPRINT("Failing create request with status %x\n",Status);
ZwClose(*FileHandle);
(*FileHandle) = 0;
}
+ assert_irql(PASSIVE_LEVEL);
DPRINT("Finished ZwCreateFile() (*FileHandle) %x\n",(*FileHandle));
return(Status);
}