ViLookasideAdd

VOID __fastcall ViLookasideAdd(_GENERAL_LOOKASIDE *Lookaside){
  CHAR *v2; 
  void *v3; 
  UINT64 v4; 
  __int128 v5; 
  v5 = 0i64;
  if( ViLookasideInitialized )
  {
    v2 = VfAvlReserveNode((INT64)&ViLookasideAvl, (INT64)Lookaside, 0i64);
    if( v2 )
    {
      v3 = 0i64;
      VfAvlInitializeLockContext((INT64)&v5, 0i64);
      if( VfAvlLookupTreeNode(&ViLookasideAvl, (INT64)&v5, (UINT64)Lookaside, 0i64) )
      {
        if( !ViLookasideAllocationFailures && !ViLookasideAlreadyLoadedDrivers && (MmVerifierData & 0x800) != 0 )
          VerifierBugCheckIfAppropriate(0xC4ui64, 0xCAui64, (UINT64)Lookaside, 0i64, 0i64, v4);
        v3 = (void *)VfAvlDeleteTreeNode((INT64)&ViLookasideAvl, (INT64)&v5, (UINT64)Lookaside, 0i64);
      }
      VfAvlInsertReservedTreeNode((INT64)&ViLookasideAvl, (INT64)&v5, (UINT64 *)v2);
      VfAvlCleanupLockContext((INT64)&v5);
      if( v3 )
      {
        if( dword_140D4A4F8 == 1 )
          ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)ViAvlNodeLookaside, v3);
        else
          VfUtilFreePoolCheckIRQL(v3);
      }
    }
    else
    {
      _InterlockedExchange(&ViLookasideAllocationFailures, 1);
    }
  }
}

Referenced by:

VerifierExInitializeLookasideListEx
ViLookasideTrackList