VfBeforeCallDriver

NTSTATUS __stdcall VfBeforeCallDriver(
        _DEVICE_OBJECT *DeviceObject,
        ULONG_PTR Irp,
        _IOFCALLDRIVER_STACKDATA *CallDriverData){
  _IRP *v4; 
  _IRP *v6; 
  VOID *v7; 
  NTSTATUS v8; 
  char v9; 
  __int64 v10; 
  _KEVENT *UserEvent; 

  v4 = *(_IRP **)&Irp;
  if( *(_BYTE *)(*(_QWORD *)&Irp + 64i64) != 1 && (MmVerifierData & 0x100) != 0 && !*(_QWORD *)(*(_QWORD *)&Irp + 8i64) )
  {
    v6 = *(_IRP **)&Irp;
    if( (*(_DWORD *)(*(_QWORD *)&Irp + 16i64) & 0x10) != 0 )
      v7 = *(VOID **)(*(_QWORD *)&Irp + 24i64);
    else
      v7 = *(VOID **)(*(_QWORD *)&Irp + 112i64);
    ViIrpCheckKernelAddressForIrp(v6, v7, CallDriverData);
  }
  if( !CallDriverData )
    return VfDeadlockBeforeCallDriver(v4);
  KeAreInterruptsEnabled((CHAR)DeviceObject, *(_BYTE **)&Irp);
  if( !v9 && (MmVerifierData & 0x400000) == 0 )
  {
    *((_BYTE *)CallDriverData + 157) = KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock);
    *(_OWORD *)&xmmword_140D49040 = 0i64;
    *(_QWORD *)&VfBugcheckTmpData = 196i64;
    BugCheckParameter1 = (PVOID)192;
    qword_140D49038 = v4;
    VfBugCheckNoStackUsage();
  }
  LODWORD(v10) = VfGetPristineDispatchRoutine(
                   DeviceObject->DriverObject,
                   v4->Tail.CurrentStackLocation[-1].MajorFunction);
  *((_QWORD *)CallDriverData + 6) = v10;
  LOBYTE(v10) = KeGetCurrentIrql();
  *((_BYTE *)CallDriverData + 156) = v10;
  CallDriverData[47] = KeGetCurrentThread()->WaitBlock[3].SpareLong;
  if( v4->CurrentLocation == v4->StackCount + 1 )
  {
    UserEvent = v4->UserEvent;
    if( UserEvent )
    {
      if( !v4->RequestorMode && *((_DWORD *)UserEvent + 1) )
        CallDriverData[38] |= 2u;
    }
  }
  v8 = VfDeadlockBeforeCallDriver(v4);
  if( !VfIoDisabled )
  {
    CallDriverData[38] |= 1u;
    IovpCallDriver1(CallDriverData);
  }
  return v8;
}

Referenced by:

IovCallDriver
IovpCallDriverNoIrpTracking
IovpCallDriverWithStackBuffer