VfAfterCallDriver
VOID __stdcall VfAfterCallDriver(_IOFCALLDRIVER_STACKDATA *CallDriverData, INT64 *Status, UINT64 PagingIrp){
__int64 v3;
unsigned int v4;
char v7;
UINT32 *v8;
__int64 v9;
__int64 v10;
void *CombinedApcDisable;
_IOFCALLDRIVER_STACKDATA v12;
v3 = 0i64;
v4 = PagingIrp;
if( CallDriverData )
{
KeAreInterruptsEnabled((CHAR)CallDriverData, Status);
if( !v7 && (MmVerifierData & 0x400000) == 0 )
{
*((_BYTE *)CallDriverData + 157) = KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock);
BugCheckParameter1 = (PVOID)193;
*(_QWORD *)&VfBugcheckTmpData = 196i64;
qword_140D49038 = (PVOID)*((_QWORD *)CallDriverData + 6);
*(_OWORD *)&xmmword_140D49040 = 0i64;
VfBugCheckNoStackUsage();
}
VfDeadlockAfterCallDriver(v4);
if( *((_BYTE *)CallDriverData + 156) != KeGetCurrentIrql() && (MmVerifierData & 0x400000) == 0 )
{
*((_BYTE *)CallDriverData + 157) = KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock);
qword_140D49038 = (PVOID)*((_QWORD *)CallDriverData + 6);
*(_QWORD *)&VfBugcheckTmpData = 201i64;
BugCheckParameter1 = (PVOID)18;
do
{
*((_QWORD *)&VfBugcheckTmpData + v3 + 3) = *((unsigned __int8 *)CallDriverData + v3 + 156);
++v3;
}
while( v3 < 2 );
VfBugCheckNoStackUsage();
}
if( CallDriverData[47] != KeGetCurrentThread()->WaitBlock[3].SpareLong && (MmVerifierData & 0x400000) == 0 )
{
*((_BYTE *)CallDriverData + 157) = KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock);
v8 = &VfBugcheckTmpData;
v9 = 196i64;
v10 = 2i64;
do
{
*(_QWORD *)v8 = v9++;
v8 += 2;
--v10;
}
while( v10 );
qword_140D49038 = (PVOID)*((_QWORD *)CallDriverData + 6);
CombinedApcDisable = (void *)KeGetCurrentThread()->CombinedApcDisable;
*(&xmmword_140D49040 + 1) = (PVOID)(unsigned int)CallDriverData[47];
xmmword_140D49040 = CombinedApcDisable;
VfBugCheckNoStackUsage();
}
v12 = CallDriverData[38];
if( (MmVerifierData & 0x10) != 0 && (v12 & 2) != 0 && *(_DWORD *)Status == 259 )
{
ViErrorReport1(775, *((VOID **)CallDriverData + 22), *((const VOID **)CallDriverData + 21));
}
else if( (v12 & 1) != 0 )
{
IovpCallDriver2((INT64)CallDriverData, Status);
}
}
else
{
VfDeadlockAfterCallDriver((unsigned int)PagingIrp);
}
}Referenced by:
IovCallDriver
IovpCallDriverNoIrpTracking
IovpCallDriverWithStackBuffer