IovpCompleteRequest4
VOID __fastcall IovpCompleteRequest4(
_IRP *Irp,
INT64 ReturnedStatus,
INT64 a3,
INT64 *CompletionRoutine,
_DEVICE_OBJECT *a5,
_IRP *a6,
VOID *a7,
_IOFCOMPLETEREQUEST_STACKDATA *CompletionPacket){
int v9;
INT64 v11;
_IO_STACK_LOCATION *CurrentStackLocation;
v9 = ReturnedStatus;
if( *CompletionRoutine )
{
v11 = CompletionRoutine[1];
*(_BYTE *)(v11 + 16) = KeAcquireSpinLockRaiseToDpc((UINT64 *)(v11 + 8));
if( v9 != -1073741802 )
{
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
if( Irp->CurrentLocation <= Irp->StackCount
&& (unsigned __int8)(CurrentStackLocation->MajorFunction - 3) <= 1u
&& Irp->MdlAddress
&& (MmVerifierData & 0x6000) != 0 )
{
MdlInvariantPostDriverCompletion((_IOV_REQUEST_PACKET *)v11, Irp);
}
if( *(_QWORD *)(v11 + 216) && *(int *)(v11 + 56) >= 0 && (CurrentStackLocation->Control & 1) == 0 )
{
ViErrorReport1(552, (VOID *)a3, Irp);
Irp->Tail.CurrentStackLocation->Control |= 1u;
}
}
VfIrpDatabaseEntryReleaseLock((_IOV_DATABASE_HEADER *)v11);
}
}Referenced by:
IovpLocalCompletionRoutine