IovpCompleteRequest1
INT64 __fastcall IovpCompleteRequest1(unsigned __int64 a1, char a2, __int64 a3){
unsigned __int8 CurrentIrql;
INT64 result;
__int64 v8;
_IOV_FORCED_PENDING_TRACE *started;
__int64 v10;
__int64 v11;
int v12;
__int64 v13;
CurrentIrql = KeGetCurrentIrql();
result = (INT64)VfIrpDatabaseEntryFindAndLock(a1);
v8 = result;
if( result )
{
*(_BYTE *)(result + 61) = CurrentIrql;
started = 0i64;
*(_BYTE *)(result + 60) = CurrentIrql;
v10 = *(_QWORD *)(result + 240);
*(_QWORD *)a3 = v10;
*(_QWORD *)(a3 + 8) = result;
v11 = *(_QWORD *)(a1 + 184);
if( v10 )
{
if( (*(_DWORD *)(result + 56) & 0x10) != 0 )
ViErrorReport1(521i64, *(const VOID **)(a3 + 32), (const VOID *)a1);
*(_BYTE *)(v8 + 185) = a2;
if( *(_QWORD *)(v8 + 216) && *(int *)(v8 + 56) >= 0 )
{
started = VfPendingStartLogging((_IRP *)a1);
*(_BYTE *)(*(_QWORD *)(a1 + 184) + 3i64) |= 1u;
}
*(_QWORD *)(v10 + 48) = 0i64;
v12 = *(unsigned __int8 *)(v8 + 186) - *(char *)(a1 + 67);
*(_DWORD *)(a3 + 20) = v12;
IovpAdvanceStackDownwards(v10 + 80, *(_BYTE *)(a1 + 67), v11, v11 + 72i64 * v12, v12, 0, 0, &v13);
result = VfIrpDatabaseEntryReleaseLock((_QWORD *)v8);
if( started )
return VfPendingFinishLogging((INT64)started);
}
else
{
return VfIrpDatabaseEntryReleaseLock((_QWORD *)result);
}
}
else
{
*(_QWORD *)a3 = 0i64;
}
return result;
}Referenced by:
IovCompleteRequest