ViThunkFindAllSpecialTables

_QWORD *__fastcall ViThunkFindAllSpecialTables(__int64 a1, UINT64 a2){
  unsigned int v2; 
  VOID ***NextSpecialTable; 
  _QWORD *PoolWithTag; 
  _QWORD *v6; 
  __int64 v7; 
  v2 = a2;
  NextSpecialTable = (VOID ***)ViThunkFindNextSpecialTable(a1, a2, 0i64);
  if( !NextSpecialTable )
    return 0i64;
  PoolWithTag = ExAllocatePoolWithTag(
                  PagedPool,
                  8i64 * (unsigned int)(ViVerifierSpecialThunkTables + 1),
                  0x74566D4Dui64);
  v6 = PoolWithTag;
  if( !PoolWithTag )
    return 0i64;
  memset((INT64)PoolWithTag, 0i64);
  v7 = 0i64;
  do
  {
    v6[v7] = NextSpecialTable;
    v7 = (unsigned int)(v7 + 1);
    NextSpecialTable = (VOID ***)ViThunkFindNextSpecialTable(a1, v2, *NextSpecialTable);
  }
  while( NextSpecialTable );
  return v6;
}

Referenced by:

VfThunkApplyDriverAddedThunks
ViThunkReplaceAllThunkedImports