VfAfterCallDriver
void __fastcall VfAfterCallDriver(__int64 a1, int *a2, int a3){
__int64 v3;
UINT64 v7;
char v8;
char v9;
UINT64 v10;
char v11;
char v12;
ULONG *v13;
__int64 v14;
__int64 v15;
ULONG_PTR v16;
int v17;
v3 = 0i64;
if( a1 )
{
KeAreInterruptsEnabled(a1, a2);
if( !v8 && (MmVerifierData & 0x400000) == 0 )
{
KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock, v7);
*(_BYTE *)(a1 + 157) = v9;
BugCheckParameter1 = 193i64;
*(_QWORD *)&VfBugcheckTmpData = 196i64;
qword_140D49038 = *(_QWORD *)(a1 + 48);
*(_OWORD *)&xmmword_140D49040 = 0i64;
VfBugCheckNoStackUsage();
}
VfDeadlockAfterCallDriver((unsigned int)a3);
if( *(_BYTE *)(a1 + 156) != KeGetCurrentIrql() && (MmVerifierData & 0x400000) == 0 )
{
KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock, v10);
*(_BYTE *)(a1 + 157) = v11;
qword_140D49038 = *(_QWORD *)(a1 + 48);
*(_QWORD *)&VfBugcheckTmpData = 201i64;
BugCheckParameter1 = 18i64;
do
{
*((_QWORD *)&VfBugcheckTmpData + v3 + 3) = *(unsigned __int8 *)(a1 + v3 + 156);
++v3;
}
while( v3 < 2 );
VfBugCheckNoStackUsage();
}
if( *(_DWORD *)(a1 + 188) != *((_DWORD *)KeGetCurrentThread() + 121) && (MmVerifierData & 0x400000) == 0 )
{
KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock, v10);
*(_BYTE *)(a1 + 157) = v12;
v13 = &VfBugcheckTmpData;
v14 = 196i64;
v15 = 2i64;
do
{
*(_QWORD *)v13 = v14++;
v13 += 2;
--v15;
}
while( v15 );
qword_140D49038 = *(_QWORD *)(a1 + 48);
v16 = *((unsigned int *)KeGetCurrentThread() + 121);
*(&xmmword_140D49040 + 1) = *(unsigned int *)(a1 + 188);
xmmword_140D49040 = v16;
VfBugCheckNoStackUsage();
}
v17 = *(_DWORD *)(a1 + 152);
if( (MmVerifierData & 0x10) != 0 && (v17 & 2) != 0 && *a2 == 259 )
{
ViErrorReport1(775i64, *(const VOID **)(a1 + 176), *(const VOID **)(a1 + 168));
}
else if( (v17 & 1) != 0 )
{
IovpCallDriver2(a1, a2);
}
}
else
{
VfDeadlockAfterCallDriver((unsigned int)a3);
}
}Referenced by:
IovCallDriver
IovpCallDriverNoIrpTracking
IovpCallDriverWithStackBuffer