/*++ Module Name: flush.c Environment: Kernel mode Revision History : --*/ #include "precomp.h" NTSTATUS MoxaFlush( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { PMOXA_DEVICE_EXTENSION extension = DeviceObject->DeviceExtension; MoxaKdPrint(MX_DBG_TRACE,("Leaving MoxaFlush\n")); if ((extension->ControlDevice == TRUE)||(extension->DeviceIsOpened == FALSE)) { Irp->IoStatus.Status = STATUS_CANCELLED; Irp->IoStatus.Information=0L; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_CANCELLED; } if (MoxaIRPPrologue(Irp, extension) != STATUS_SUCCESS) { MoxaCompleteRequest(extension, Irp, IO_NO_INCREMENT); return STATUS_CANCELLED; } if (MoxaCompleteIfError( DeviceObject, Irp ) != STATUS_SUCCESS) { return STATUS_CANCELLED; } Irp->IoStatus.Information = 0L; return MoxaStartOrQueue( extension, Irp, &extension->WriteQueue, &extension->CurrentWriteIrp, MoxaStartFlush ); } NTSTATUS MoxaStartFlush( IN PMOXA_DEVICE_EXTENSION Extension ) { PIRP newIrp; Extension->CurrentWriteIrp->IoStatus.Status = STATUS_SUCCESS; MoxaGetNextWrite( &Extension->CurrentWriteIrp, &Extension->WriteQueue, &newIrp, TRUE, Extension ); if (newIrp) MoxaStartWrite(Extension); return STATUS_SUCCESS; }