This commit is contained in:
Bill Zissimopoulos
2015-11-27 10:29:29 -08:00
parent 8572bea55f
commit f9d300c738
8 changed files with 58 additions and 33 deletions

View File

@ -113,8 +113,8 @@ exit:
}
FSP_API NTSTATUS FspFsctlTransact(HANDLE VolumeHandle,
FSP_TRANSACT_RSP *ResponseBuf, SIZE_T ResponseBufSize,
FSP_TRANSACT_REQ *RequestBuf, SIZE_T *PRequestBufSize)
FSP_FSCTL_TRANSACT_RSP *ResponseBuf, SIZE_T ResponseBufSize,
FSP_FSCTL_TRANSACT_REQ *RequestBuf, SIZE_T *PRequestBufSize)
{
NTSTATUS Result = STATUS_SUCCESS;
DWORD Bytes;

View File

@ -220,6 +220,10 @@ FSP_FSVOL_DEVICE_EXTENSION *FspFsvolDeviceExtension(PDEVICE_OBJECT DeviceObject)
return DeviceObject->DeviceExtension;
}
/* I/O completion */
VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result);
VOID FspDispatchProcessedIrp(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response);
/* misc */
VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result);
NTSTATUS FspCreateGuid(GUID *Guid);

View File

@ -113,7 +113,7 @@ static NTSTATUS FspFsvrtTransact(
ULONG InputBufferLength = IrpSp->Parameters.FileSystemControl.InputBufferLength;
ULONG OutputBufferLength = IrpSp->Parameters.FileSystemControl.OutputBufferLength;
PVOID SystemBuffer = Irp->AssociatedIrp.SystemBuffer;
if (sizeof(FSP_TRANSACT_RSP) > InputBufferLength || 0 == SystemBuffer)
if (sizeof(FSP_FSCTL_TRANSACT_RSP) > InputBufferLength || 0 == SystemBuffer)
return STATUS_INVALID_PARAMETER;
if (FSP_FSCTL_TRANSACT_BUFFER_SIZE > OutputBufferLength)
return STATUS_BUFFER_TOO_SMALL;
@ -121,8 +121,8 @@ static NTSTATUS FspFsvrtTransact(
NTSTATUS Result;
FSP_FSVRT_DEVICE_EXTENSION *FsvrtDeviceExtension = FspFsvrtDeviceExtension(DeviceObject);
PUINT8 SystemBufferEnd;
const FSP_TRANSACT_RSP *Response, *NextResponse;
FSP_TRANSACT_REQ *Request, *NextRequest, *PendingIrpRequest;
const FSP_FSCTL_TRANSACT_RSP *Response, *NextResponse;
FSP_FSCTL_TRANSACT_REQ *Request, *NextRequest, *PendingIrpRequest;
PIRP ProcessIrp, PendingIrp;
/* access check */

29
src/sys/iocompl.c Normal file
View File

@ -0,0 +1,29 @@
/**
* @file sys/iocompl.c
*
* @copyright 2015 Bill Zissimopoulos
*/
#include <sys/driver.h>
#ifdef ALLOC_PRAGMA
#endif
VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result)
{
// !PAGED_CODE();
ASSERT(STATUS_PENDING != Result);
if (0 != Irp->Tail.Overlay.DriverContext[0])
ExFreePoolWithTag(Irp->Tail.Overlay.DriverContext[0], FSP_TAG);
if (!NT_SUCCESS(Result))
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = Result;
IoCompleteRequest(Irp, FSP_IO_INCREMENT);
}
VOID FspDispatchProcessedIrp(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
}

View File

@ -15,18 +15,6 @@ NTSTATUS FspSecuritySubjectContextAccessCheck(
#pragma alloc_text(PAGE, FspSecuritySubjectContextAccessCheck)
#endif
VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result)
{
// !PAGED_CODE();
ASSERT(STATUS_PENDING != Result);
if (!NT_SUCCESS(Result))
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = Result;
IoCompleteRequest(Irp, FSP_IO_INCREMENT);
}
NTSTATUS FspCreateGuid(GUID *Guid)
{
PAGED_CODE();