SmHpChunkAlloc

VOID *__stdcall SmHpChunkAlloc(_SMHP_CHUNK_HEAP *Heap){
  unsigned int v1; 
  _WORD *v3; 
  int v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 

  v1 = Heap[71];
  v3 = 0i64;
  while( !_BitScanForward((unsigned int *)&v5, v1) )
  {
    if( !SmHpBufferAlloc(Heap) )
      return v3;
    v1 = Heap[71];
  }
  v6 = *(_QWORD *)&Heap[4 * v5 + 72];
  v7 = *(unsigned int *)(v6 + 16);
  _BitScanReverse((unsigned int *)&v8, v7);
  v9 = *(_QWORD *)&Heap[2 * v8] + 16 * (v7 ^ (unsigned int)(1 << v8));
  v3 = (_WORD *)(v6 + *(unsigned __int16 *)(v9 + 8));
  *(_WORD *)(v9 + 8) = *v3;
  SmHpBufferUpdateFullness(Heap, v9, 0xFFFFFFFFi64);
  ++Heap[141];
  return v3;
}

Referenced by:

ST_STORE::StDmpDummyPageRecordAllocate
ST_STORE::StDmpSinglePageAdd