mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-14 15:52:47 -05:00
sys: WIP
This commit is contained in:
@ -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);
|
||||
|
@ -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
29
src/sys/iocompl.c
Normal 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)
|
||||
{
|
||||
}
|
@ -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();
|
||||
|
Reference in New Issue
Block a user