sys: FspCompleteRequest

This commit is contained in:
Bill Zissimopoulos 2015-11-23 16:59:44 -08:00
parent 8bc5809dca
commit 50f2ba8cee
3 changed files with 26 additions and 16 deletions

View File

@ -80,14 +80,13 @@
NtStatusSym(Result), \
!NT_SUCCESS(Result) ? 0 : Irp->IoStatus.Information);\
if (STATUS_PENDING == Result) \
IoMarkIrpPending(Irp); \
else \
{\
if (!NT_SUCCESS(Result)) \
Irp->IoStatus.Information = 0;\
Irp->IoStatus.Status = Result;\
IoCompleteRequest(Irp, FSP_IO_INCREMENT);\
ASSERT(FspFsvrtDeviceExtensionKind == FspDeviceExtension(DeviceObject)->Kind);\
FspIoqPostIrp(&FspFsvrtDeviceExtension(DeviceObject)->Ioq, Irp);\
/* also marks the IRP pending */\
}\
else \
FspCompleteRequest(Irp, Result);\
); \
return Result
#define FSP_ENTER_BOOL(...) \
@ -208,6 +207,7 @@ FSP_FSVOL_DEVICE_EXTENSION *FspFsvolDeviceExtension(PDEVICE_OBJECT DeviceObject)
}
/* misc */
VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result);
NTSTATUS FspCreateGuid(GUID *Guid);
NTSTATUS FspSecuritySubjectContextAccessCheck(
PSECURITY_DESCRIPTOR SecurityDescriptor, ACCESS_MASK DesiredAccess, KPROCESSOR_MODE AccessMode);

View File

@ -144,9 +144,7 @@ static VOID FspIoqProcessReleaseLock(PIO_CSQ IoCsq, KIRQL Irql)
static VOID FspIoqCompleteCanceledIrp(PIO_CSQ IoCsq, PIRP Irp)
{
Irp->IoStatus.Status = STATUS_CANCELLED;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, FSP_IO_INCREMENT);
FspCompleteRequest(Irp, STATUS_CANCELLED);
}
VOID FspIoqInitialize(FSP_IOQ *Ioq)
@ -203,7 +201,7 @@ VOID FspIoqCancelAll(FSP_IOQ *Ioq)
{
PIRP Irp;
while (0 != (Irp = IoCsqRemoveNextIrp(&Ioq->PendingIoCsq, 0)))
FspIoqCompleteCanceledIrp(&Ioq->PendingIoCsq, Irp);
FspCompleteRequest(Irp, STATUS_CANCELLED);
while (0 != (Irp = IoCsqRemoveNextIrp(&Ioq->ProcessIoCsq, 0)))
FspIoqCompleteCanceledIrp(&Ioq->ProcessIoCsq, Irp);
FspCompleteRequest(Irp, STATUS_CANCELLED);
}

View File

@ -6,15 +6,27 @@
#include <sys/driver.h>
NTSTATUS CreateGuid(GUID *Guid);
NTSTATUS SecuritySubjectContextAccessCheck(
NTSTATUS FspCreateGuid(GUID *Guid);
NTSTATUS FspSecuritySubjectContextAccessCheck(
PSECURITY_DESCRIPTOR SecurityDescriptor, ACCESS_MASK DesiredAccess, KPROCESSOR_MODE AccessMode);
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, CreateGuid)
#pragma alloc_text(PAGE, SecuritySubjectContextAccessCheck)
#pragma alloc_text(PAGE, FspCreateGuid)
#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();