Queue IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_CLOSE and IRP_MJ_CLEANUP IRPs.
svn path=/trunk/; revision=67994
/* Initialize driver data */
DeviceObject->Flags = DO_DIRECT_IO;
- DriverObject->MajorFunction[IRP_MJ_CLOSE] = CdfsClose;
- DriverObject->MajorFunction[IRP_MJ_CLEANUP] = CdfsCleanup;
+ DriverObject->MajorFunction[IRP_MJ_CLOSE] = CdfsFsdDispatch;
+ DriverObject->MajorFunction[IRP_MJ_CLEANUP] = CdfsFsdDispatch;
DriverObject->MajorFunction[IRP_MJ_CREATE] = CdfsCreate;
- DriverObject->MajorFunction[IRP_MJ_READ] = CdfsRead;
- DriverObject->MajorFunction[IRP_MJ_WRITE] = CdfsWrite;
+ DriverObject->MajorFunction[IRP_MJ_READ] = CdfsFsdDispatch;
+ DriverObject->MajorFunction[IRP_MJ_WRITE] = CdfsFsdDispatch;
DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = CdfsFsdDispatch;
DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = CdfsFsdDispatch;
DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] = CdfsFsdDispatch;
/* cleanup.c */
-DRIVER_DISPATCH CdfsCleanup;
-
NTSTATUS
NTAPI
-CdfsCleanup(PDEVICE_OBJECT DeviceObject,
- PIRP Irp);
+CdfsCleanup(
+ PCDFS_IRP_CONTEXT IrpContext);
/* close.c */
-DRIVER_DISPATCH CdfsClose;
-
NTSTATUS
NTAPI
-CdfsClose(PDEVICE_OBJECT DeviceObject,
- PIRP Irp);
+CdfsClose(
+ PCDFS_IRP_CONTEXT IrpContext);
NTSTATUS
CdfsCloseFile(PDEVICE_EXTENSION DeviceExt,
/* rw.c */
-DRIVER_DISPATCH CdfsRead;
-
NTSTATUS
NTAPI
-CdfsRead(PDEVICE_OBJECT DeviceObject,
- PIRP Irp);
-
-DRIVER_DISPATCH CdfsWrite;
+CdfsRead(
+ PCDFS_IRP_CONTEXT IrpContext);
NTSTATUS
NTAPI
-CdfsWrite(PDEVICE_OBJECT DeviceObject,
- PIRP Irp);
+CdfsWrite(
+ PCDFS_IRP_CONTEXT IrpContext);
/* volinfo.c */
}
NTSTATUS NTAPI
-CdfsCleanup(PDEVICE_OBJECT DeviceObject,
- PIRP Irp)
+CdfsCleanup(
+ PCDFS_IRP_CONTEXT IrpContext)
{
+ PIRP Irp;
+ PDEVICE_OBJECT DeviceObject;
PDEVICE_EXTENSION DeviceExtension;
PIO_STACK_LOCATION Stack;
PFILE_OBJECT FileObject;
DPRINT("CdfsCleanup() called\n");
+ ASSERT(IrpContext);
+
+ Irp = IrpContext->Irp;
+ DeviceObject = IrpContext->DeviceObject;
+ Stack = IrpContext->Stack;
+
if (DeviceObject == CdfsGlobalData->DeviceObject)
{
DPRINT("Closing file system\n");
goto ByeBye;
}
- Stack = IoGetCurrentIrpStackLocation(Irp);
FileObject = Stack->FileObject;
DeviceExtension = DeviceObject->DeviceExtension;
ExReleaseResourceLite(&DeviceExtension->DirResource);
KeLeaveCriticalRegion();
-
ByeBye:
- Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = 0;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
return(Status);
}
NTSTATUS NTAPI
-CdfsClose(PDEVICE_OBJECT DeviceObject,
- PIRP Irp)
+CdfsClose(
+ PCDFS_IRP_CONTEXT IrpContext)
{
+ PIRP Irp;
+ PDEVICE_OBJECT DeviceObject;
PDEVICE_EXTENSION DeviceExtension;
PIO_STACK_LOCATION Stack;
PFILE_OBJECT FileObject;
DPRINT("CdfsClose() called\n");
+ ASSERT(IrpContext);
+
+ Irp = IrpContext->Irp;
+ DeviceObject = IrpContext->DeviceObject;
+ Stack = IrpContext->Stack;
+
if (DeviceObject == CdfsGlobalData->DeviceObject)
{
DPRINT("Closing file system\n");
goto ByeBye;
}
- Stack = IoGetCurrentIrpStackLocation(Irp);
FileObject = Stack->FileObject;
DeviceExtension = DeviceObject->DeviceExtension;
Status = CdfsCloseFile(DeviceExtension,FileObject);
ByeBye:
- Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = 0;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
return(Status);
}
break;
case IRP_MJ_READ:
-// Status = CdfsRead(IrpContext);
+ Status = CdfsRead(IrpContext);
break;
case IRP_MJ_DEVICE_CONTROL:
break;
case IRP_MJ_WRITE:
-// Status = CdfsWrite(IrpContext);
+ Status = CdfsWrite(IrpContext);
break;
case IRP_MJ_CLOSE:
-// Status = CdfsClose(IrpContext);
+ Status = CdfsClose(IrpContext);
break;
case IRP_MJ_CREATE:
// Status = CdfsCreate(IrpContext);
break;
+ case IRP_MJ_CLEANUP:
+ Status = CdfsCleanup(IrpContext);
+ break;
+
case IRP_MJ_FILE_SYSTEM_CONTROL:
Status = CdfsFileSystemControl(IrpContext);
break;
NTSTATUS NTAPI
-CdfsRead(PDEVICE_OBJECT DeviceObject,
- PIRP Irp)
+CdfsRead(
+ PCDFS_IRP_CONTEXT IrpContext)
{
+ PIRP Irp;
+ PDEVICE_OBJECT DeviceObject;
PDEVICE_EXTENSION DeviceExt;
PIO_STACK_LOCATION Stack;
PFILE_OBJECT FileObject;
ULONG ReturnedReadLength = 0;
NTSTATUS Status = STATUS_SUCCESS;
- DPRINT("CdfsRead(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
+ DPRINT("CdfsRead(%p)\n", IrpContext);
+
+ ASSERT(IrpContext);
+
+ Irp = IrpContext->Irp;
+ DeviceObject = IrpContext->DeviceObject;
+ Stack = IrpContext->Stack;
DeviceExt = DeviceObject->DeviceExtension;
- Stack = IoGetCurrentIrpStackLocation(Irp);
FileObject = Stack->FileObject;
ReadLength = Stack->Parameters.Read.Length;
Irp->IoStatus.Information = 0;
}
- Irp->IoStatus.Status = Status;
- IoCompleteRequest(Irp,IO_NO_INCREMENT);
-
return(Status);
}
NTSTATUS NTAPI
-CdfsWrite(PDEVICE_OBJECT DeviceObject,
- PIRP Irp)
+CdfsWrite(
+ PCDFS_IRP_CONTEXT IrpContext)
{
- DPRINT("CdfsWrite(DeviceObject %p Irp %p)\n", DeviceObject, Irp);
+ PIRP Irp;
+
+ DPRINT("CdfsWrite(%p)\n", IrpContext);
+
+ ASSERT(IrpContext);
+ Irp = IrpContext->Irp;
Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
Irp->IoStatus.Information = 0;
return(STATUS_NOT_SUPPORTED);