VfThunkApplyDriverAddedThunks

VOID __fastcall VfThunkApplyDriverAddedThunks(_KLDR_DATA_TABLE_ENTRY *DataTableEntry, UINT64 Length, UINT64 Alignment){
  void *v3; 
  __int64 v4; 
  UINT64 *v5; 
  UINT64 v6; 
  __int64 *AllSpecialTables; 
  __int64 v8; 
  __int64 v9; 
  int v10; 
  UINT64 v11; 
  v3 = (void *)*((_QWORD *)DataTableEntry + 6);
  LODWORD(v11) = 0;
  LODWORD(v4) = RtlImageDirectoryEntryToData(v3, 1u, 0xCu, &v11);
  v5 = (UINT64 *)v4;
  if( v4 )
  {
    v6 = (unsigned int)v11 >> 3;
    AllSpecialTables = ViThunkFindAllSpecialTables(v4, v6);
    if( (_DWORD)v6 )
    {
      do
      {
        if( !AllSpecialTables )
          goto LABEL_8;
        v8 = *AllSpecialTables;
        LODWORD(v9) = 0;
        if( !*AllSpecialTables )
          goto LABEL_8;
        do
        {
          v10 = ViThunkReplaceImportEntry((LIST_ENTRY *)(v8 + 24), v5);
          if( v10 == 1 )
            break;
          v9 = (unsigned int)(v9 + 1);
          v8 = AllSpecialTables[v9];
        }
        while( v8 );
        if( !v10 )
LABEL_8:
          ViThunkReplaceImportEntry(&ViVerifierDriverAddedThunkListHead, v5);
        ++v5;
        --v6;
      }
      while( v6 );
    }
    if( AllSpecialTables )
      ExFreePoolWithTag(AllSpecialTables, 0);
  }
}

Referenced by:

ViDriverReApplyVerifierForAll