VfTargetDriversAdd

UINT64 __stdcall VfTargetDriversAdd(VOID *Start, UINT64 Size, _VF_SUSPECT_DRIVER_ENTRY *SuspectDriverEntry){
  _VF_SUSPECT_DRIVER_ENTRY *v3; 
  __int64 v4; 
  UINT64 v5; 
  char v6; 
  unsigned int v8; 
  _VF_AVL_TREE_NODE *v9; 
  _VF_TARGET_VERIFIED_DRIVER_DATA *VerifiedData; 
  union {struct {unsigned __int32 MissedEtwRegistration : 1;unsigned __int32 IsBootDriver : 1;unsigned __int32 Spare : 30;} Flags;unsigned int Whole;} v12; 
  unsigned int v13; 
  _VF_AVL_LOCK_CONTEXT LockContext[4]; 

  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.Flags = (struct {unsigned __int32 MissedEtwRegistration : 1;unsigned __int32 IsBootDriver : 1;unsigned __int32 Spare : 30;})VerifiedData->u1;
  if( (_DWORD)InitializationPhase )
    v13 = v12.Whole & 0xFFFFFFFD;
  else
    v13 = v12.Whole | 2;
  *(_DWORD *)(v4 + 32) = v13;
LABEL_4:
  v9 = VfAvlReserveNode(&ViTargetDriversAvl, Start, v5);
  if( v9 )
  {
    if( v4 )
      VfNotifyDifPlugins(1, v4);
    v9[3].RangeSize = v4;
    *(_OWORD *)&v9[1].RangeSize = 0i64;
    *(_OWORD *)&v9[2].RangeSize = 0i64;
    VfThunkAddTargetNotify((_VF_TARGET_DRIVER *)v9);
    *(_OWORD *)LockContext = 0i64;
    BYTE1(LockContext[2]) = 4;
    VfAvlInsertReservedTreeNode(&ViTargetDriversAvl, LockContext, v9);
    if( v4 )
    {
      ++dword_140C1CEE8;
      *(_BYTE *)(v4 + 48) = v6;
    }
    VfAvlCleanupLockContext(LockContext);
  }
  else
  {
    _InterlockedExchange(&ViTargetAllocationFailures, 1);
    v8 = 0;
    if( v4 )
      ExFreePoolWithTag((PVOID)v4, 0x44566656u);
  }
  return v8;
}

Referenced by:

VfDriverLoadImage
VfSuspectDriversLoadCallback