From 45a0f97805d77f159d2eda8befb04a35d3951488 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Mon, 15 Feb 2016 16:12:19 -0800 Subject: [PATCH] sys: FspVolumeTransact: support both METHOD_BUFFERED and METHOD_OUT_DIRECT --- src/sys/volume.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/src/sys/volume.c b/src/sys/volume.c index c9ed1172..2dae5423 100644 --- a/src/sys/volume.c +++ b/src/sys/volume.c @@ -510,7 +510,7 @@ NTSTATUS FspVolumeTransact( ULONG InputBufferLength = IrpSp->Parameters.FileSystemControl.InputBufferLength; ULONG OutputBufferLength = IrpSp->Parameters.FileSystemControl.OutputBufferLength; PVOID InputBuffer = Irp->AssociatedIrp.SystemBuffer; - PVOID OutputBuffer; + PVOID OutputBuffer = 0; if (0 != InputBufferLength && FSP_FSCTL_DEFAULT_ALIGN_UP(sizeof(FSP_FSCTL_TRANSACT_RSP)) > InputBufferLength) return STATUS_INVALID_PARAMETER; @@ -589,30 +589,23 @@ NTSTATUS FspVolumeTransact( switch (ControlCode & 3) { case METHOD_OUT_DIRECT: - if (0 == Irp->MdlAddress) - { - Irp->IoStatus.Information = 0; - Result = STATUS_SUCCESS; - goto exit; - } - OutputBuffer = MmGetMdlVirtualAddress(Irp->MdlAddress); + if (0 != Irp->MdlAddress) + OutputBuffer = MmGetMdlVirtualAddress(Irp->MdlAddress); break; case METHOD_BUFFERED: - if (0 == OutputBufferLength) - { - Irp->IoStatus.Information = 0; - Result = STATUS_SUCCESS; - goto exit; - } - OutputBuffer = Irp->AssociatedIrp.SystemBuffer; + if (0 != OutputBufferLength) + OutputBuffer = Irp->AssociatedIrp.SystemBuffer; break; default: ASSERT(0); + break; + } + if (0 == OutputBuffer) + { Irp->IoStatus.Information = 0; - Result = STATUS_INVALID_PARAMETER; + Result = STATUS_SUCCESS; goto exit; } - ASSERT(0 != OutputBuffer); /* wait for an IRP to arrive */ KeQuerySystemTime(&Timeout);