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