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