From 7e4c875d507d1f8d72a7e23d4a3a121739093261 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sun, 20 Dec 2015 16:32:13 -0800 Subject: [PATCH] Major refactoring: WIP --- src/sys/fsctl.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/sys/fsctl.c b/src/sys/fsctl.c index bb73f98c..b18a7a93 100644 --- a/src/sys/fsctl.c +++ b/src/sys/fsctl.c @@ -375,7 +375,8 @@ static NTSTATUS FspFsctlTransact( if (0 != InputBufferLength && FSP_FSCTL_DEFAULT_ALIGN_UP(sizeof(FSP_FSCTL_TRANSACT_RSP)) > InputBufferLength) return STATUS_INVALID_PARAMETER; - if (FSP_FSCTL_TRANSACT_REQ_BUFFER_SIZEMIN > OutputBufferLength) + if (0 != OutputBufferLength && + FSP_FSCTL_TRANSACT_REQ_BUFFER_SIZEMIN > OutputBufferLength) return STATUS_BUFFER_TOO_SMALL; NTSTATUS Result; @@ -438,14 +439,15 @@ static NTSTATUS FspFsctlTransact( Response = NextResponse; } - /* try to get a pointer to the output buffer */ - MdlBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority); - if (0 == MdlBuffer) + /* were we sent an output buffer? */ + if (0 == Irp->MdlAddress) { Irp->IoStatus.Information = 0; Result = STATUS_SUCCESS; goto exit; } + MdlBuffer = MmGetMdlVirtualAddress(Irp->MdlAddress); + ASSERT(0 != MdlBuffer); /* wait for an IRP to arrive */ KeQuerySystemTime(&Timeout);