ViThunkFindAllSpecialTables

_DRIVER_SPECIFIED_SPECIAL_VERIFIER_THUNKS **__stdcall ViThunkFindAllSpecialTables(
        UINT64 *ImportThunk,
        UINT64 ImportSize){
  unsigned int v2; 
  _LIST_ENTRY **NextSpecialTable; 
  VOID **PoolWithTag; 
  _DRIVER_SPECIFIED_SPECIAL_VERIFIER_THUNKS **v6; 
  __int64 v7; 

  v2 = ImportSize;
  NextSpecialTable = (_LIST_ENTRY **)ViThunkFindNextSpecialTable(ImportThunk, ImportSize, 0i64);
  if( !NextSpecialTable )
    return 0i64;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, 8i64 * (unsigned int)(ViVerifierSpecialThunkTables + 1), 1951821133i64);
  v6 = (_DRIVER_SPECIFIED_SPECIAL_VERIFIER_THUNKS **)PoolWithTag;
  if( !PoolWithTag )
    return 0i64;
  memset(PoolWithTag, 0i64, 8 * (ViVerifierSpecialThunkTables + 1));
  v7 = 0i64;
  do
  {
    v6[v7] = (_DRIVER_SPECIFIED_SPECIAL_VERIFIER_THUNKS *)NextSpecialTable;
    v7 = (unsigned int)(v7 + 1);
    NextSpecialTable = (_LIST_ENTRY **)ViThunkFindNextSpecialTable(ImportThunk, v2, *NextSpecialTable);
  }
  while( NextSpecialTable );
  return v6;
}

Referenced by:

VfThunkApplyDriverAddedThunks
ViThunkReplaceAllThunkedImports