static NTSTATUS FspFileNodeCompleteLockIrp(PVOID Context, PIRP Irp) { PAGED_CODE(); FSP_FILE_NODE *FileNode = Context; NTSTATUS Result = Irp->IoStatus.Status; FspFileNodeReleaseOwnerF(FileNode, FspIrpFlags(Irp), Irp); DEBUGLOGIRP(Irp, Result); FspIopCompleteIrp(Irp, Result); return Result; }
VOID FspIopCompleteCanceledIrp(PIRP Irp) { PAGED_CODE(); DEBUGLOGIRP(Irp, STATUS_CANCELLED); /* * An IRP cancel may happen at any time including when APC's are still enabled. * For this reason we execute FsRtlEnterFileSystem/FsRtlExitFileSystem here. * This will protect ERESOURCE operations during Request finalizations. */ FsRtlEnterFileSystem(); PIRP TopLevelIrp = IoGetTopLevelIrp(); IoSetTopLevelIrp(Irp); FspIopCompleteIrpEx(Irp, STATUS_CANCELLED, TRUE); IoSetTopLevelIrp(TopLevelIrp); FsRtlExitFileSystem(); }