RtlpHpGetOwnerHeap
NTSTATUS __stdcall RtlpHpGetOwnerHeap(INT64 a1, INT128 *a2){
int v4;
__int64 v5;
_RTL_RUN_ONCE *HeapManager;
__int64 v7;
__int128 v8;
__int128 v10;
int v11;
int v12;
_QWORD *v13;
if( (_WORD)a1 )
{
v4 = 0;
}
else
{
v10 = *(_OWORD *)a2;
HeapManager = RtlpHpEnvGetHeapManager(&v10);
LODWORD(v7) = RtlCSparseBitmapBitmaskRead((INT64)&HeapManager[2], 2 * ((a1 - HeapManager[1].Value) >> 20));
if( !v7 )
goto LABEL_7;
v4 = v7 - 1;
}
if( v4 == 2 )
{
LABEL_7:
v8 = *(_OWORD *)a2;
v13 = 0i64;
v10 = v8;
RtlpHpQueryVA(a1, &v10, &v13, &v11);
return *v13;
}
v11 = 0x100000;
v12 = 0x1000000;
LODWORD(v5) = (a1 & -*(&v11 + v4) ^ RtlpHpHeapGlobals ^ *(_DWORD *)((a1 & -(__int64)(unsigned int)*(&v11 + v4)) + 0x10) ^ 0xA2E64EAD)
- 192 * v4
- 256;
return v5;
}Referenced by:
ExGetHeapFromVA