VfBeforeCallDriver

__int64 __fastcall VfBeforeCallDriver(__int64 a1, ULONG_PTR a2, __int64 a3){
  ULONG_PTR v7; 
  unsigned int v8; 
  UINT64 v9; 
  char v10; 
  char v11; 
  __int64 v12; 
  __int64 v13; 
  if( *(_BYTE *)(a2 + 64) != 1 && (MmVerifierData & 0x100) != 0 && !*(_QWORD *)(a2 + 8) )
  {
    if( (*(_DWORD *)(a2 + 16) & 0x10) != 0 )
      v7 = *(_QWORD *)(a2 + 24);
    else
      v7 = *(_QWORD *)(a2 + 112);
    ViIrpCheckKernelAddressForIrp(a2, v7, a3);
  }
  if( a3 )
  {
    KeAreInterruptsEnabled(a1, (_BYTE *)a2);
    if( !v10 && (MmVerifierData & 0x400000) == 0 )
    {
      KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock, v9);
      *(_BYTE *)(a3 + 157) = v11;
      *(_OWORD *)&xmmword_140D49040 = 0i64;
      *(_QWORD *)&VfBugcheckTmpData = 196i64;
      BugCheckParameter1 = 192i64;
      qword_140D49038 = a2;
      VfBugCheckNoStackUsage();
    }
    LODWORD(v12) = VfGetPristineDispatchRoutine(
                     *(DRIVER_OBJECT **)(a1 + 8),
                     *(unsigned __int8 *)(*(_QWORD *)(a2 + 184) - 72i64));
    *(_QWORD *)(a3 + 48) = v12;
    LOBYTE(v12) = KeGetCurrentIrql();
    *(_BYTE *)(a3 + 156) = v12;
    *(_DWORD *)(a3 + 188) = *((_DWORD *)KeGetCurrentThread() + 121);
    if( *(char *)(a2 + 67) == *(char *)(a2 + 66) + 1 )
    {
      v13 = *(_QWORD *)(a2 + 80);
      if( v13 )
      {
        if( !*(_BYTE *)(a2 + 64) && *(_DWORD *)(v13 + 4) )
          *(_DWORD *)(a3 + 152) |= 2u;
      }
    }
    v8 = VfDeadlockBeforeCallDriver((_IRP *)a2);
    if( !VfIoDisabled )
    {
      *(_DWORD *)(a3 + 152) |= 1u;
      IovpCallDriver1(a3);
    }
  }
  else
  {
    return(unsigned int)VfDeadlockBeforeCallDriver((_IRP *)a2);
  }
  return v8;
}

Referenced by:

IovCallDriver
IovpCallDriverNoIrpTracking
IovpCallDriverWithStackBuffer