Home | Info | Community | Development | myReactOS | Contact Us
[static]
Definition at line 198 of file create.c.
Referenced by CdfsCreate().
{ PDEVICE_EXTENSION DeviceExt; PIO_STACK_LOCATION Stack; PFILE_OBJECT FileObject; ULONG RequestedDisposition; ULONG RequestedOptions; PFCB Fcb; NTSTATUS Status; DPRINT("CdfsCreateFile() called\n"); DeviceExt = DeviceObject->DeviceExtension; ASSERT(DeviceExt); Stack = IoGetCurrentIrpStackLocation (Irp); ASSERT(Stack); RequestedDisposition = ((Stack->Parameters.Create.Options >> 24) & 0xff); RequestedOptions = Stack->Parameters.Create.Options & FILE_VALID_OPTION_FLAGS; DPRINT("RequestedDisposition %x, RequestedOptions %x\n", RequestedDisposition, RequestedOptions); FileObject = Stack->FileObject; if (RequestedDisposition == FILE_CREATE || RequestedDisposition == FILE_OVERWRITE_IF || RequestedDisposition == FILE_SUPERSEDE) { return STATUS_ACCESS_DENIED; } Status = CdfsOpenFile(DeviceExt, FileObject, &FileObject->FileName); if (NT_SUCCESS(Status)) { Fcb = FileObject->FsContext; /* Check whether the file has the requested attributes */ if (RequestedOptions & FILE_NON_DIRECTORY_FILE && CdfsFCBIsDirectory(Fcb)) { CdfsCloseFile (DeviceExt, FileObject); return STATUS_FILE_IS_A_DIRECTORY; } if (RequestedOptions & FILE_DIRECTORY_FILE && !CdfsFCBIsDirectory(Fcb)) { CdfsCloseFile (DeviceExt, FileObject); return STATUS_NOT_A_DIRECTORY; } } /* * If the directory containing the file to open doesn't exist then * fail immediately */ Irp->IoStatus.Information = (NT_SUCCESS(Status)) ? FILE_OPENED : 0; Irp->IoStatus.Status = Status; return Status; }