RtlpHpLfhSubsegmentSizeBlockInternal

NTSTATUS __stdcall RtlpHpLfhSubsegmentSizeBlockInternal(INT64 a1, INT64 a2, INT64 a3, INT64 *a4){
  int v4; 
  unsigned __int64 v5; 
  unsigned int v6; 
  __int16 v7; 
  int v8; 
  void *retaddr; 

  v4 = WORD4(RtlpHpHeapGlobals) ^ (unsigned __int16)(*(_WORD *)(a1 + 40) ^ ((unsigned int)a1 >> 12));
  if( ((*(_QWORD *)(a1 + 8 * ((unsigned __int64)(unsigned int)(2 * a3) >> 6) + 48) >> ((2 * a3) & 0x3F)) & 2) != 0 )
  {
    v5 = WORD4(RtlpHpHeapGlobals) ^ (unsigned __int64)(unsigned __int16)(*(_WORD *)(a1 + 40) ^ ((unsigned int)a1 >> 12));
    v6 = *(unsigned __int16 *)(v5 + a2 - 2);
    v7 = *(_WORD *)(v5 + a2 - 2);
    if( (v6 & 0x4000) != 0 )
    {
      _InterlockedOr((volatile signed __int32 *)&retaddr, 0);
      v7 = *(_WORD *)(v5 + a2 - 2);
    }
    v8 = (v6 >> 14) & 1;
    if( v7 >= 0 )
      v4 -= v7 & 0x3FFF;
    else
      --v4;
  }
  else
  {
    v8 = 0;
  }
  if( a4 )
    *(_DWORD *)a4 = v8;
  return v4;
}

Referenced by:

RtlpHpLfhSubsegmentSizeBlock