VfTargetDriversAdd

INT64 __fastcall VfTargetDriversAdd(VOID *Start, UINT64 Size, _VF_SUSPECT_DRIVER_ENTRY *SuspectDriverEntry){
  _VF_SUSPECT_DRIVER_ENTRY *v3; 
  __int64 v4; 
  INT64 v5; 
  char v6; 
  unsigned int v8; 
  CHAR *v9; 
  _VF_TARGET_VERIFIED_DRIVER_DATA *VerifiedData; 
  int v12; 
  unsigned int v13; 
  INT64 v14[2]; 
  v4 = 0i64;
  v5 = (unsigned int)Size;
  v6 = (char)SuspectDriverEntry;
  v8 = 1;
  if( VfSafeMode || !ViTargetInitialized )
    return 0;
  if( !v3 )
    goto LABEL_4;
  VerifiedData = ViTargetDriversAllocateVerifiedData(v3);
  v4 = (__int64)VerifiedData;
  if( !VerifiedData )
    return 0;
  v12 = *((_DWORD *)VerifiedData + 8);
  if( *(_DWORD *)InitializationPhase )
    v13 = v12 & 0xFFFFFFFD;
  else
    v13 = v12 | 2;
  *(_DWORD *)(v4 + 32) = v13;
LABEL_4:
  v9 = VfAvlReserveNode((INT64)&ViTargetDriversAvl, (INT64)Start, v5);
  if( v9 )
  {
    if( v4 )
      VfNotifyDifPlugins(1, v4);
    *((_QWORD *)v9 + 7) = v4;
    *(_OWORD *)(v9 + 24) = 0i64;
    *(_OWORD *)(v9 + 40) = 0i64;
    VfThunkAddTargetNotify((INT64)v9);
    *(_OWORD *)v14 = 0i64;
    BYTE1(v14[1]) = 4;
    VfAvlInsertReservedTreeNode((INT64)&ViTargetDriversAvl, (INT64)v14, (UINT64 *)v9);
    if( v4 )
    {
      ++dword_140C1CEE8;
      *(_BYTE *)(v4 + 48) = v6;
    }
    VfAvlCleanupLockContext((INT64)v14);
  }
  else
  {
    _InterlockedExchange(&ViTargetAllocationFailures, 1);
    v8 = 0;
    if( v4 )
      ExFreePoolWithTag((PVOID)v4, 0x44566656u);
  }
  return v8;
}

Referenced by:

VfDriverLoadImage
VfSuspectDriversLoadCallback