RtlpPopulateContext

VOID __stdcall RtlpPopulateContext(
        _RTL_DYNAMIC_HASH_TABLE *HashTable,
        _RTL_DYNAMIC_HASH_TABLE_CONTEXT *Context,
        UINT64 Signature){
  unsigned int v3; 
  UINT64 v4; 
  _LIST_ENTRY *ChainHead; 
  _LIST_ENTRY **v6; 
  _LIST_ENTRY *v7; 
  _LIST_ENTRY *v8; 
  _LIST_ENTRY *i; 
  _LIST_ENTRY *Flink; 

  v3 = (69069 * ((unsigned int)Signature >> HashTable->Shift) + 1) & 0xFFFF0000 | ((1103515245
                                                                                  * ((unsigned int)Signature >> HashTable->Shift)
                                                                                  + 12345) >> 16);
  v4 = v3 & HashTable->DivisorMask;
  if( (unsigned int)v4 < HashTable->Pivot )
    v4 = v3 & ((2 * HashTable->DivisorMask) | 1);
  ChainHead = RtlpGetChainHead(HashTable, v4);
  v8 = ChainHead;
  for( i = ChainHead->Flink; i != ChainHead; i = i->Flink )
  {
    Flink = i[1].Flink;
    if( Flink && Flink >= v7 )
      break;
    v8 = i;
  }
  *v6 = ChainHead;
  v6[1] = v8;
  v6[2] = v7;
}

Referenced by:

RtlInitStrongEnumerationHashTable
RtlInsertEntryHashTable
RtlRemoveEntryHashTable