IovpCompleteRequest1
VOID __stdcall IovpCompleteRequest1(_IRP *Irp, INT8 PriorityBoost, _IOFCOMPLETEREQUEST_STACKDATA *CompletionPacket){
unsigned __int8 CurrentIrql;
_IOV_DATABASE_HEADER *v7;
_IOV_DATABASE_HEADER *v8;
_IOV_FORCED_PENDING_TRACE *started;
__int64 v10;
_IO_STACK_LOCATION *CurrentStackLocation;
int v12;
INT64 LocationsAdvanced;
UINT64 v14;
UINT64 v15;
_IOV_STACK_LOCATION *StackLocationInfo;
CurrentIrql = KeGetCurrentIrql();
v7 = VfIrpDatabaseEntryFindAndLock(Irp);
v8 = v7;
if( v7 )
{
*((_BYTE *)v7 + 61) = CurrentIrql;
started = 0i64;
*((_BYTE *)v7 + 60) = CurrentIrql;
v10 = *((_QWORD *)v7 + 30);
*(_QWORD *)CompletionPacket = v10;
*((_QWORD *)CompletionPacket + 1) = v7;
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
if( v10 )
{
if( (v7[14] & 0x10) != 0 )
ViErrorReport1(521, *((VOID **)CompletionPacket + 4), Irp);
*((_BYTE *)v8 + 185) = PriorityBoost;
if( *((_QWORD *)v8 + 27) && v8[14] >= 0 )
{
started = VfPendingStartLogging(Irp);
Irp->Tail.CurrentStackLocation->Control |= 1u;
}
*(_QWORD *)(v10 + 48) = 0i64;
v12 = *((unsigned __int8 *)v8 + 186) - Irp->CurrentLocation;
LODWORD(v15) = 0;
LODWORD(v14) = 0;
CompletionPacket[5] = v12;
LODWORD(LocationsAdvanced) = v12;
IovpAdvanceStackDownwards(
(_IOV_STACK_LOCATION *)(v10 + 80),
Irp->CurrentLocation,
CurrentStackLocation,
&CurrentStackLocation[v12],
LocationsAdvanced,
v14,
v15,
&StackLocationInfo);
VfIrpDatabaseEntryReleaseLock(v8);
if( started )
VfPendingFinishLogging(started);
}
else
{
VfIrpDatabaseEntryReleaseLock(v7);
}
}
else
{
*(_QWORD *)CompletionPacket = 0i64;
}
}Referenced by:
IovCompleteRequest