ViThunkCreateThunkTable

_DRIVER_SPECIFIED_VERIFIER_THUNKS *__stdcall ViThunkCreateThunkTable(
        VOID *ThunkBuffer,
        UINT64 ThunkBufferSize,
        _KLDR_DATA_TABLE_ENTRY *DataTableEntry){
  __int64 v4; 
  unsigned int v6; 
  _DRIVER_SPECIFIED_VERIFIER_THUNKS *result; 
  _DRIVER_SPECIFIED_VERIFIER_THUNKS *v8; 

  v4 = (unsigned int)ThunkBufferSize >> 4;
  v6 = (unsigned int)ThunkBufferSize >> 4;
  result = (_DRIVER_SPECIFIED_VERIFIER_THUNKS *)ExAllocatePoolWithTag(1ui64, 16 * (v4 + 2), 1951821133i64);
  v8 = result;
  if( result )
  {
    memmove(result + 8, ThunkBuffer, 16 * v6);
    result = v8;
    *((_QWORD *)v8 + 2) = DataTableEntry;
    v8[6] = v4;
  }
  return result;
}

Referenced by:

VfThunkAddDriverThunks
VfThunkAddSpecialDriverThunks