Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
1.5 KiB

  1. /*++
  2. Module Name:
  3. flush.c
  4. Environment:
  5. Kernel mode
  6. Revision History :
  7. --*/
  8. #include "precomp.h"
  9. NTSTATUS
  10. MoxaFlush(
  11. IN PDEVICE_OBJECT DeviceObject,
  12. IN PIRP Irp
  13. )
  14. {
  15. PMOXA_DEVICE_EXTENSION extension = DeviceObject->DeviceExtension;
  16. MoxaKdPrint(MX_DBG_TRACE,("Leaving MoxaFlush\n"));
  17. if ((extension->ControlDevice == TRUE)||(extension->DeviceIsOpened == FALSE)) {
  18. Irp->IoStatus.Status = STATUS_CANCELLED;
  19. Irp->IoStatus.Information=0L;
  20. IoCompleteRequest(Irp, IO_NO_INCREMENT);
  21. return STATUS_CANCELLED;
  22. }
  23. if (MoxaIRPPrologue(Irp, extension) != STATUS_SUCCESS) {
  24. MoxaCompleteRequest(extension, Irp, IO_NO_INCREMENT);
  25. return STATUS_CANCELLED;
  26. }
  27. if (MoxaCompleteIfError(
  28. DeviceObject,
  29. Irp
  30. ) != STATUS_SUCCESS) {
  31. return STATUS_CANCELLED;
  32. }
  33. Irp->IoStatus.Information = 0L;
  34. return MoxaStartOrQueue(
  35. extension,
  36. Irp,
  37. &extension->WriteQueue,
  38. &extension->CurrentWriteIrp,
  39. MoxaStartFlush
  40. );
  41. }
  42. NTSTATUS
  43. MoxaStartFlush(
  44. IN PMOXA_DEVICE_EXTENSION Extension
  45. )
  46. {
  47. PIRP newIrp;
  48. Extension->CurrentWriteIrp->IoStatus.Status = STATUS_SUCCESS;
  49. MoxaGetNextWrite(
  50. &Extension->CurrentWriteIrp,
  51. &Extension->WriteQueue,
  52. &newIrp,
  53. TRUE,
  54. Extension
  55. );
  56. if (newIrp)
  57. MoxaStartWrite(Extension);
  58. return STATUS_SUCCESS;
  59. }