return STATUS_PENDING;
}
+static
+NTSTATUS
+CdfsLockControl(
+ IN PCDFS_IRP_CONTEXT IrpContext)
+{
+ PFCB Fcb;
+ NTSTATUS Status;
+
+ DPRINT("CdfsLockControl(IrpContext %p)\n", IrpContext);
+
+ if (IrpContext->DeviceObject == CdfsGlobalData->CdFsDeviceObject || IrpContext->DeviceObject == CdfsGlobalData->HddFsDeviceObject)
+ {
+ return STATUS_INVALID_DEVICE_REQUEST;
+ }
+
+ Fcb = IrpContext->FileObject->FsContext;
+ if (CdfsFCBIsDirectory(Fcb))
+ {
+ return STATUS_INVALID_PARAMETER;
+ }
+
+ IrpContext->Flags &= ~IRPCONTEXT_COMPLETE;
+ Status = FsRtlProcessFileLock(&Fcb->FileLock,
+ IrpContext->Irp,
+ NULL);
+ return Status;
+}
+
static
NTSTATUS
CdfsDispatch(PCDFS_IRP_CONTEXT IrpContext)
break;
case IRP_MJ_CREATE:
-// Status = CdfsCreate(IrpContext);
+ Status = CdfsCreate(IrpContext);
break;
case IRP_MJ_CLEANUP:
case IRP_MJ_FILE_SYSTEM_CONTROL:
Status = CdfsFileSystemControl(IrpContext);
break;
+
+ case IRP_MJ_LOCK_CONTROL:
+ Status = CdfsLockControl(IrpContext);
+ break;
}
ASSERT((!(IrpContext->Flags & IRPCONTEXT_COMPLETE) && !(IrpContext->Flags & IRPCONTEXT_QUEUE)) ||