[CDFS]
[reactos.git] / reactos / drivers / filesystems / cdfs / dispatch.c
index 024039b..4b14347 100644 (file)
@@ -53,6 +53,34 @@ CdfsQueueRequest(PCDFS_IRP_CONTEXT IrpContext)
     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)
@@ -105,7 +133,7 @@ CdfsDispatch(PCDFS_IRP_CONTEXT IrpContext)
             break;
 
         case IRP_MJ_CREATE:
-//            Status = CdfsCreate(IrpContext);
+            Status = CdfsCreate(IrpContext);
             break;
 
         case IRP_MJ_CLEANUP:
@@ -115,6 +143,10 @@ CdfsDispatch(PCDFS_IRP_CONTEXT IrpContext)
         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)) ||