RtlpHpLfhSlotAllocate
INT64 __fastcall RtlpHpLfhSlotAllocate(UINT64 rcx0, INT64 a2, INT64 r8_0, UINT64 a4, UINT64 arg20){
INT64 v5;
UINT64 v6;
int v7;
INT64 v8;
unsigned int v9;
signed __int64 v10;
signed __int64 v11;
unsigned __int64 v12;
UINT64 v13;
INT64 v14;
unsigned __int64 v15;
__int64 v16;
unsigned int v17;
unsigned int v18;
unsigned int v19;
unsigned int v20;
unsigned int v21;
int v22;
unsigned __int16 v23;
unsigned int v24;
char v25;
__int64 v26;
__int64 v27;
__int64 v28;
int v29;
__int64 v30;
__int64 v31;
signed __int16 *v32;
signed __int16 *v33;
unsigned __int64 v34;
UINT8 v35;
signed __int16 v36;
signed __int16 v37;
int v38;
int v39;
UINT64 v40;
INT64 v41;
INT64 v42;
INT64 Subsegment;
INT64 v45;
unsigned __int16 v46;
INT64 v47;
unsigned __int16 v48;
unsigned __int16 v49;
unsigned __int16 v50;
unsigned __int16 v51;
unsigned int v52;
__int64 *v53;
_QWORD *v54;
__int64 **v55;
INT64 v56;
INT64 *v57;
INT64 *v58;
bool v59;
INT64 v60;
unsigned __int64 v61;
__int64 v62;
unsigned int v63;
unsigned int v64;
unsigned int v65;
unsigned int v66;
unsigned __int16 v67;
UINT64 v68;
unsigned int v69;
unsigned int v70;
char v71;
__int64 v72;
INT64 v73;
__int64 v74;
__int64 v75;
__int64 v76;
signed __int16 *v77;
signed __int16 *v78;
unsigned __int64 v79;
signed __int16 v80;
signed __int16 v81;
int v82;
unsigned int v83;
__int64 v84;
unsigned int v85;
UINT64 v86;
INT64 v87;
INT64 v88;
UINT8 v89;
_ETHREAD *v90;
ULONG_PTR v91;
UINT8 v92;
_ETHREAD *v93;
ULONG_PTR v94;
char v95;
int v96;
__int64 v97;
bool v98;
__int64 v99;
unsigned __int64 v100;
__int64 v101;
unsigned __int8 v102;
char v103;
int(__fastcall *v104)(__int64, unsigned __int64, _QWORD, __int64);
int v105;
unsigned int v106;
unsigned int v107;
__int64 v108;
ULONG_PTR v109;
int v110;
__int64 v111;
unsigned __int64 v112;
unsigned __int8 v113;
UINT64 v114;
INT64 *v115;
UINT8 v116;
_ETHREAD *v117;
unsigned int v118;
_ETHREAD *CurrentThread;
unsigned int SessionId;
int v121;
char v122;
int(__fastcall *v123)(__int64, INT64, _QWORD, __int64);
unsigned int v124;
unsigned int v125;
__int64 v126;
unsigned int v127;
__int16 v128;
_ETHREAD *v129;
ULONG_PTR v130;
char v131;
int v132;
__int64 v133;
unsigned __int64 v134;
unsigned __int8 v135;
char v136;
int v137;
__int64 v138;
unsigned __int64 v139;
unsigned __int8 v140;
char v141;
int v142;
__int64 v143;
unsigned __int64 v144;
unsigned __int8 v145;
UINT8 v146;
__int64 v147;
UINT8 v148;
UINT64 v149;
_ETHREAD *v150;
unsigned int v151;
char v152;
int v153;
__int64 v154;
unsigned __int64 v155;
__int64 v156;
unsigned __int8 v157;
UINT64 v158;
_ETHREAD *v159;
ULONG_PTR v160;
char v161;
int v162;
__int64 v163;
unsigned __int64 v164;
__int64 v165;
_ETHREAD *v166;
unsigned int v167;
char v168;
int v169;
__int64 v170;
unsigned __int64 v171;
unsigned __int8 v172;
INT64 a6;
UINT8 v174;
unsigned __int8 v175;
UINT8 v176;
char v177;
unsigned int v178;
UINT8 a7;
UINT8 v180;
int v181;
UINT64 a3;
UINT64 v183;
unsigned int v184;
unsigned int v185;
int v186;
UINT64 v187;
INT64 v188;
__int64 v189;
int v190;
int v191;
int a5;
int v193;
int v194;
int v195;
int v196;
int v197;
int v198;
int v199;
int v200;
int v201;
int v202;
int v203;
unsigned int v204;
int v205;
int v206;
int v207;
int v208;
UINT64 v209[2];
UINT64 v210[11];
unsigned int v214;
v214 = a4;
v5 = r8_0;
v6 = rcx0;
v174 = -1;
v7 = 0;
v181 = 0;
v186 = 0;
v8 = r8_0 + 16;
v188 = 0i64;
v9 = ((unsigned int)RtlpHpLfhPerfFlags >> 2) & 1;
while( 1 )
{
while( 1 )
{
if( v9 )
{
while( 1 )
{
_m_prefetchw((const void *)(v5 + 56));
v10 = *(_QWORD *)(v5 + 56);
if( (v10 & 0xFFF) != 0 )
{
while( 1 )
{
v11 = _InterlockedCompareExchange64((volatile signed __int64 *)(v5 + 56), v10 - 1, v10);
if( v10 == v11 )
break;
v186 = 1;
v10 = v11;
if( (v11 & 0xFFF) == 0 )
goto LABEL_38;
}
v12 = v10 & 0xFFFFFFFFFFFFF000ui64;
if( v12 )
break;
}
LABEL_38:
if( v7 == 2 )
goto LABEL_39;
v88 = *(unsigned __int8 *)(v6 + 57);
v7 = 2;
v181 = 2;
v89 = RtlpHpAcquireLockExclusive((INT64 *)(v5 + 16), v88);
v6 = rcx0;
v174 = v89;
}
if( v7 )
{
if( *(_BYTE *)(v6 + 57) )
{
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v5 + 16));
__writecr8(v174);
v13 = 0i64;
v181 = 0;
}
else
{
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(v5 + 16), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)(v5 + 16));
v208 = 0;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( (unsigned int)MiGetSystemRegionType(v5 + 16) == 1 )
SessionId = MmGetSessionIdEx(*((_QWORD *)CurrentThread + 23));
else
SessionId = -1;
--*((_WORD *)CurrentThread + 243);
v136 = ++*((_BYTE *)CurrentThread + 794);
v137 = (*((char *)CurrentThread + 792) | *((char *)CurrentThread + 870)) ^ 0x3F;
v98 = !_BitScanReverse((unsigned int *)&v138, v137);
v207 = v138;
if( v98 )
goto LABEL_222;
while( 1 )
{
v139 = *((_QWORD *)CurrentThread + 100) + 96 * v138;
v137 &= ~(1 << v138);
if( (*(_BYTE *)(v139 + 26) & 1) != 0
&& (*(_DWORD *)(v139 + 32) & 1) == 0
&& (*(_QWORD *)(v139 + 32) & 0x7FFFFFFFFFFFFFFCi64) == ((v5 + 16) & 0x7FFFFFFFFFFFFFFCi64)
&& *(_DWORD *)(v139 + 40) == SessionId )
{
*(_BYTE *)(v139 + 26) &= ~1u;
if( *(_QWORD *)(v139 + 32) )
break;
}
v98 = !_BitScanReverse((unsigned int *)&v138, v137);
v207 = v138;
if( v98 )
goto LABEL_222;
}
if( !v139 )
{
LABEL_222:
if( (*((_DWORD *)CurrentThread + 30) & 0x10000) == 0 )
KeBugCheckEx(0x162u, (ULONG_PTR)CurrentThread, v5 + 16, SessionId, 0i64);
}
else
{
*(_BYTE *)(v139 + 32) |= 2u;
if( *(__int64 *)(v139 + 32) < 0 )
KiAbEntryRemoveFromTree(v139);
v208 = *(_DWORD *)(v139 + 88) & 0x1FFFF;
*(_DWORD *)(v139 + 88) &= 0xFFFE0000;
*(_BYTE *)(v139 + 25) &= ~1u;
*(_QWORD *)(v139 + 32) = 0i64;
v140 = 1 << ((__int64)(v139 - *((_QWORD *)CurrentThread + 100)) / 96);
if( v136 == 1 )
*((_BYTE *)CurrentThread + 792) |= v140;
else
_InterlockedOr8((volatile signed __int8 *)CurrentThread + 870, v140);
}
--*((_BYTE *)CurrentThread + 794);
KiAbThreadRemoveBoosts((ULONG_PTR)CurrentThread, v5 + 16, (unsigned int *)&v208);
v98 = (*((_WORD *)CurrentThread + 243))++ == 0xFFFF;
if( v98 && *((_ETHREAD **)CurrentThread + 19) != (_ETHREAD *)((char *)CurrentThread + 152) )
KiCheckForKernelApcDelivery();
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
v13 = 0i64;
v181 = 0;
}
}
else
{
v13 = 0i64;
}
v14 = 3i64;
v15 = 2 * (*(unsigned __int16 *)(v12 + 34) + (unsigned __int64)*(unsigned __int8 *)(v12 + 39));
v209[1] = v12 + 48;
v16 = *(unsigned __int8 *)(v5 + 1);
v209[0] = v15;
LODWORD(v183) = *((unsigned __int8 *)RtlpSearchWidth + v16);
v178 = (unsigned int)v12 >> 12;
v17 = (unsigned __int16)(WORD4(RtlpHpHeapGlobals) ^ *(_WORD *)(v12 + 40) ^ ((unsigned int)v12 >> 12));
v18 = (DWORD2(RtlpHpHeapGlobals) ^ *(_DWORD *)(v12 + 40) ^ ((unsigned int)v12 >> 12)) >> 16;
v19 = v18;
v20 = v18;
v184 = v17;
if( v214 >= v17 )
v14 = 1i64;
if( (*(_BYTE *)(rcx0 + 62) & 2) != 0 )
{
v21 = v184;
v20 = v18;
if( v214 >= v17 )
v20 = v18;
}
else
{
v13 = *((unsigned __int8 *)RtlpLowFragHeapRandomData + (unsigned __int16)RtlpLfhIncrementDataSlot());
v21 = v184;
if( v214 >= v184 )
v20 = v19;
}
v22 = RtlpLfhBlockBitmapAllocate(v209, *(unsigned __int16 *)(v12 + 36), v13, (unsigned int)v183, v14);
v23 = v178;
LODWORD(v187) = v22;
*(_WORD *)(v12 + 36) = v22;
v24 = v20 + v22 * v21;
if( *(_BYTE *)(v12 + 45) > 1u )
{
v25 = *(_BYTE *)(v12 + 44);
v26 = *(unsigned __int16 *)(v12 + 46);
v27 = 0i64;
a5 = 0;
v28 = v24 >> v25;
v29 = *(unsigned __int16 *)(v12 + 40) ^ (unsigned __int16)v178;
a7 = -1;
v175 = -1;
v185 = WORD4(RtlpHpHeapGlobals) ^ v29;
v30 = 2 * v28;
v31 = ((v24 + v185 - 1) >> v25) - (unsigned int)v28 + 1;
v32 = (signed __int16 *)(2 * v28 + v12 + v26);
_m_prefetchw(v32);
v33 = &v32[v31];
LODWORD(v183) = 0;
v189 = 0i64;
LODWORD(a3) = -1;
if( v32 < v33 )
{
v34 = (unsigned __int64)v33;
do
{
v35 = v175;
while( 1 )
{
v36 = *v32;
while( v36 > 0 )
{
v37 = v36;
v36 = _InterlockedCompareExchange16(v32, v36 + 1, v36);
if( v37 == v36 )
{
v38 = v183;
v39 = a3;
goto LABEL_21;
}
}
if( (_DWORD)v27 )
break;
v204 = 1;
v92 = RtlpHpAcquireLockExclusive((INT64 *)(v12 + 24), *(unsigned __int8 *)(rcx0 + 57));
v27 = v204;
v35 = v92;
v175 = v92;
}
v39 = a3;
if( v36 )
{
v38 = v183 + 1;
LODWORD(v183) = v183 + 1;
v189 = v30 >> 1;
if( (_DWORD)a3 == -1 )
{
v39 = v30 >> 1;
LODWORD(a3) = v39;
}
}
else
{
v38 = v183 - 1;
LODWORD(v183) = v183 - 1;
}
*v32 = v36 + 1;
LABEL_21:
++v32;
v30 += 2i64;
}
while( (unsigned __int64)v32 < v34 );
v5 = r8_0;
v21 = v184;
if( v38 )
{
v40 = rcx0;
if( (RtlpHpLfhPerfFlags & 0x20) != 0 )
_InterlockedExchangeAdd64(
(volatile signed __int64 *)(*(__int16 *)(rcx0 + 58) + rcx0 + 24),
(v38 << *(_BYTE *)(v12 + 44)) / 4096);
}
else
{
v40 = rcx0;
}
if( v39 == -1 )
{
if( (_DWORD)v27 )
{
if( *(_BYTE *)(v40 + 57) )
{
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v12 + 24));
__writecr8(v175);
}
else
{
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(v12 + 24), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)(v12 + 24));
v196 = 0;
v93 = (_ETHREAD *)KeGetCurrentThread();
v187 = (UINT64)v93;
if( (unsigned int)MiGetSystemRegionType(v12 + 24) == 1 )
v94 = (unsigned int)MmGetSessionIdEx(*((_QWORD *)v93 + 23));
else
v94 = 0xFFFFFFFFi64;
--*((_WORD *)v93 + 243);
v109 = (ULONG_PTR)v93;
v177 = ++*((_BYTE *)v93 + 794);
v110 = (*((char *)v93 + 792) | *((char *)v93 + 870)) ^ 0x3F;
v98 = !_BitScanReverse((unsigned int *)&v111, v110);
v195 = v111;
if( v98 )
goto LABEL_139;
while( 1 )
{
v112 = *(_QWORD *)(v109 + 800) + 96 * v111;
v110 &= ~(1 << v111);
if( (*(_BYTE *)(v112 + 26) & 1) != 0
&& (*(_DWORD *)(v112 + 32) & 1) == 0
&& (*(_QWORD *)(v112 + 32) & 0x7FFFFFFFFFFFFFFCi64) == ((v12 + 24) & 0x7FFFFFFFFFFFFFFCi64)
&& *(_DWORD *)(v112 + 40) == (_DWORD)v94 )
{
*(_BYTE *)(v112 + 26) &= ~1u;
if( *(_QWORD *)(v112 + 32) )
break;
}
v98 = !_BitScanReverse((unsigned int *)&v111, v110);
v195 = v111;
if( v98 )
goto LABEL_139;
}
if( !v112 )
{
LABEL_139:
if( (*(_DWORD *)(v109 + 120) & 0x10000) == 0 )
KeBugCheckEx(0x162u, v109, v12 + 24, v94, 0i64);
}
else
{
*(_BYTE *)(v112 + 32) |= 2u;
if( *(__int64 *)(v112 + 32) < 0 )
{
KiAbEntryRemoveFromTree(v112);
v109 = v187;
}
v196 = *(_DWORD *)(v112 + 88) & 0x1FFFF;
*(_DWORD *)(v112 + 88) &= 0xFFFE0000;
*(_BYTE *)(v112 + 25) &= ~1u;
*(_QWORD *)(v112 + 32) = 0i64;
v113 = 1 << ((__int64)(v112 - *(_QWORD *)(v109 + 800)) / 96);
if( v177 == 1 )
*(_BYTE *)(v109 + 792) |= v113;
else
_InterlockedOr8((volatile signed __int8 *)(v109 + 870), v113);
}
--*(_BYTE *)(v109 + 794);
KiAbThreadRemoveBoosts(v109, v12 + 24, (unsigned int *)&v196);
v114 = v187;
v98 = (*(_WORD *)(v187 + 486))++ == 0xFFFF;
if( v98 && *(_QWORD *)(v114 + 152) != v114 + 152 )
KiCheckForKernelApcDelivery();
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}
}
v23 = v178;
}
else
{
v103 = *(_BYTE *)(v12 + 44);
v104 = (int(__fastcall *)(__int64, unsigned __int64, _QWORD, __int64))(v40 ^ RtlpHpHeapGlobals ^ *(_QWORD *)(v40 + 24));
v105 = v189 - v39;
a7 = v35;
v106 = v39 << v103;
a5 = v105 + 1;
v107 = (v105 + 1) << v103;
v108 = *(_QWORD *)v40;
LODWORD(a3) = v106;
if( v104(v108, v12 + v106, v107, v27) < 0 )
{
v149 = v24;
v42 = rcx0;
RtlpHpLfhSubsegmentDecBlockCounts(rcx0, v12, v149, v185);
if( *(_BYTE *)(rcx0 + 57) )
{
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v12 + 24));
__writecr8(v175);
}
else
{
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(v12 + 24), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)(v12 + 24));
v194 = 0;
v150 = (_ETHREAD *)KeGetCurrentThread();
if( (unsigned int)MiGetSystemRegionType(v12 + 24) == 1 )
v151 = MmGetSessionIdEx(*((_QWORD *)v150 + 23));
else
v151 = -1;
--*((_WORD *)v150 + 243);
v152 = ++*((_BYTE *)v150 + 794);
v153 = (*((char *)v150 + 792) | *((char *)v150 + 870)) ^ 0x3F;
v98 = !_BitScanReverse((unsigned int *)&v154, v153);
v193 = v154;
if( v98 )
{
LABEL_313:
if( (*((_DWORD *)v150 + 30) & 0x10000) == 0 )
KeBugCheckEx(0x162u, (ULONG_PTR)v150, v12 + 24, v151, 0i64);
}
else
{
while( 1 )
{
v155 = *((_QWORD *)v150 + 100) + 96 * v154;
v153 &= ~(1 << v154);
if( (*(_BYTE *)(v155 + 26) & 1) != 0
&& (*(_DWORD *)(v155 + 32) & 1) == 0
&& (*(_QWORD *)(v155 + 32) & 0x7FFFFFFFFFFFFFFCi64) == ((v12 + 24) & 0x7FFFFFFFFFFFFFFCi64)
&& *(_DWORD *)(v155 + 40) == v151 )
{
*(_BYTE *)(v155 + 26) &= ~1u;
if( *(_QWORD *)(v155 + 32) )
break;
}
v98 = !_BitScanReverse((unsigned int *)&v154, v153);
v193 = v154;
if( v98 )
goto LABEL_312;
}
if( !v155 )
{
LABEL_312:
v42 = rcx0;
goto LABEL_313;
}
*(_BYTE *)(v155 + 32) |= 2u;
if( *(__int64 *)(v155 + 32) < 0 )
KiAbEntryRemoveFromTree(v155);
v194 = *(_DWORD *)(v155 + 88) & 0x1FFFF;
*(_DWORD *)(v155 + 88) &= 0xFFFE0000;
*(_BYTE *)(v155 + 25) &= ~1u;
*(_QWORD *)(v155 + 32) = 0i64;
v156 = (unsigned __int128)((__int64)(v155 - *((_QWORD *)v150 + 100))
* (__int128)0x2AAAAAAAAAAAAAABi64) >> 64;
v42 = rcx0;
v157 = 1 << ((v156 >> 4) + (v156 < 0));
if( v152 == 1 )
*((_BYTE *)v150 + 792) |= v157;
else
_InterlockedOr8((volatile signed __int8 *)v150 + 870, v157);
}
--*((_BYTE *)v150 + 794);
KiAbThreadRemoveBoosts((ULONG_PTR)v150, v12 + 24, (unsigned int *)&v194);
v98 = (*((_WORD *)v150 + 243))++ == 0xFFFF;
if( v98 && *((_ETHREAD **)v150 + 19) != (_ETHREAD *)((char *)v150 + 152) )
KiCheckForKernelApcDelivery();
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}
v41 = 0i64;
if( (_DWORD)v187 != -1 )
_InterlockedAnd64(
(volatile signed __int64 *)(v12 + 8 * ((unsigned __int64)(unsigned int)(2 * v187) >> 6) + 48),
~(3i64 << ((2 * v187) & 0x3F)));
LABEL_29:
if( !v41 )
RtlpHpLfhSubsegmentFreeBlock(v42, v12, 0i64, arg20);
if( !v181 )
goto LABEL_32;
v158 = v5 + 16;
if( v181 == 2 )
{
if( !*(_BYTE *)(v42 + 57) )
{
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)v158, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)v158);
v198 = 0;
v159 = (_ETHREAD *)KeGetCurrentThread();
if( (unsigned int)MiGetSystemRegionType(v158) == 1 )
v160 = (unsigned int)MmGetSessionIdEx(*((_QWORD *)v159 + 23));
else
v160 = 0xFFFFFFFFi64;
--*((_WORD *)v159 + 243);
v161 = ++*((_BYTE *)v159 + 794);
v162 = (*((char *)v159 + 792) | *((char *)v159 + 870)) ^ 0x3F;
v98 = !_BitScanReverse((unsigned int *)&v163, v162);
v197 = v163;
if( v98 )
goto LABEL_343;
while( 1 )
{
v164 = *((_QWORD *)v159 + 100) + 96 * v163;
v162 &= ~(1 << v163);
if( (*(_BYTE *)(v164 + 26) & 1) != 0
&& (*(_DWORD *)(v164 + 32) & 1) == 0
&& (*(_QWORD *)(v164 + 32) & 0x7FFFFFFFFFFFFFFCi64) == (v158 & 0x7FFFFFFFFFFFFFFCi64)
&& *(_DWORD *)(v164 + 40) == (_DWORD)v160 )
{
*(_BYTE *)(v164 + 26) &= ~1u;
if( *(_QWORD *)(v164 + 32) )
break;
}
v98 = !_BitScanReverse((unsigned int *)&v163, v162);
v197 = v163;
if( v98 )
goto LABEL_343;
}
if( !v164 )
{
LABEL_343:
if( (*((_DWORD *)v159 + 30) & 0x10000) == 0 )
KeBugCheckEx(0x162u, (ULONG_PTR)v159, v158, v160, 0i64);
}
else
{
*(_BYTE *)(v164 + 32) |= 2u;
if( *(__int64 *)(v164 + 32) < 0 )
KiAbEntryRemoveFromTree(v164);
v198 = *(_DWORD *)(v164 + 88) & 0x1FFFF;
*(_DWORD *)(v164 + 88) &= 0xFFFE0000;
*(_BYTE *)(v164 + 25) &= ~1u;
*(_QWORD *)(v164 + 32) = 0i64;
v165 = (__int64)(v164 - *((_QWORD *)v159 + 100)) / 96;
if( v161 == 1 )
*((_BYTE *)v159 + 792) |= 1 << v165;
else
_InterlockedOr8((volatile signed __int8 *)v159 + 870, 1 << v165);
}
--*((_BYTE *)v159 + 794);
KiAbThreadRemoveBoosts((ULONG_PTR)v159, v158, (unsigned int *)&v198);
v98 = (*((_WORD *)v159 + 243))++ == 0xFFFF;
if( v98 && *((_ETHREAD **)v159 + 19) != (_ETHREAD *)((char *)v159 + 152) )
KiCheckForKernelApcDelivery();
goto LABEL_341;
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v158);
}
else
{
if( !*(_BYTE *)(v42 + 57) )
{
if( _InterlockedCompareExchange64((volatile signed __int64 *)v158, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)v158);
KeAbPostRelease((PVOID)v158);
LABEL_341:
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
goto LABEL_32;
}
ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)v158);
}
__writecr8(v174);
goto LABEL_32;
}
LODWORD(a6) = 1;
RtlpHpLfhSubsegmentIncBlockCounts(rcx0, v12, (unsigned int)a3, v107, &a5, a6, &a7);
v23 = v178;
}
}
}
v41 = v12 + v24;
if( v214 < v21 )
{
v127 = v21 - v214;
if( v127 == 1 )
v128 = 0x8000;
else
v128 = v127 & 0x3FFF;
*(_WORD *)((WORD4(RtlpHpHeapGlobals) ^ *(unsigned __int16 *)(v12 + 40) ^ (unsigned __int64)v23) + v41 - 2) = v128;
}
v42 = rcx0;
goto LABEL_29;
}
if( !v7 )
{
v7 = 1;
v146 = RtlpHpAcquireLockShared((INT64 *)v8, *(unsigned __int8 *)(v6 + 57));
v6 = rcx0;
v174 = v146;
}
LABEL_39:
if( *(_QWORD *)(v5 + 8) )
break;
if( v7 == 2 )
{
if( *(_BYTE *)(v6 + 57) )
{
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v8);
LABEL_157:
__writecr8(v174);
goto LABEL_158;
}
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)v8, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)v8);
v191 = 0;
v117 = (_ETHREAD *)KeGetCurrentThread();
if( (unsigned int)MiGetSystemRegionType(v5 + 16) == 1 )
v118 = MmGetSessionIdEx(*((_QWORD *)v117 + 23));
else
v118 = -1;
--*((_WORD *)v117 + 243);
v131 = ++*((_BYTE *)v117 + 794);
v132 = (*((char *)v117 + 792) | *((char *)v117 + 870)) ^ 0x3F;
v98 = !_BitScanReverse((unsigned int *)&v133, v132);
v206 = v133;
if( v98 )
goto LABEL_210;
while( 1 )
{
v134 = *((_QWORD *)v117 + 100) + 96 * v133;
v132 &= ~(1 << v133);
if( (*(_BYTE *)(v134 + 26) & 1) != 0
&& (*(_DWORD *)(v134 + 32) & 1) == 0
&& (*(_QWORD *)(v134 + 32) & 0x7FFFFFFFFFFFFFFCi64) == ((v5 + 16) & 0x7FFFFFFFFFFFFFFCi64)
&& *(_DWORD *)(v134 + 40) == v118 )
{
*(_BYTE *)(v134 + 26) &= ~1u;
if( *(_QWORD *)(v134 + 32) )
break;
}
v98 = !_BitScanReverse((unsigned int *)&v133, v132);
v206 = v133;
if( v98 )
goto LABEL_210;
}
if( !v134 )
{
LABEL_210:
if( (*((_DWORD *)v117 + 30) & 0x10000) == 0 )
KeBugCheckEx(0x162u, (ULONG_PTR)v117, v5 + 16, v118, 0i64);
}
else
{
*(_BYTE *)(v134 + 32) |= 2u;
if( *(__int64 *)(v134 + 32) < 0 )
KiAbEntryRemoveFromTree(v134);
v191 = 0;
v191 = *(_DWORD *)(v134 + 88) & 0x1FFFF;
*(_DWORD *)(v134 + 88) &= 0xFFFE0000;
*(_BYTE *)(v134 + 25) &= ~1u;
*(_QWORD *)(v134 + 32) = 0i64;
v135 = 1 << ((__int64)(v134 - *((_QWORD *)v117 + 100)) / 96);
if( v131 == 1 )
*((_BYTE *)v117 + 792) |= v135;
else
_InterlockedOr8((volatile signed __int8 *)v117 + 870, v135);
}
--*((_BYTE *)v117 + 794);
KiAbThreadRemoveBoosts((ULONG_PTR)v117, v5 + 16, (unsigned int *)&v191);
v98 = (*((_WORD *)v117 + 243))++ == 0xFFFF;
if( v98 && *((_ETHREAD **)v117 + 19) != (_ETHREAD *)((char *)v117 + 152) )
KiCheckForKernelApcDelivery();
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
v8 = v5 + 16;
}
else
{
if( *(_BYTE *)(v6 + 57) )
{
ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)v8);
goto LABEL_157;
}
if( _InterlockedCompareExchange64((volatile signed __int64 *)v8, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)v8);
KeAbPostRelease((PVOID)v8);
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}
LABEL_158:
Subsegment = (INT64)RtlpHpLfhBucketGetSubsegment(a2, *(unsigned __int8 *)(rcx0 + 57));
if( !Subsegment )
{
Subsegment = RtlpHpLfhSubsegmentCreate(rcx0, a2, (unsigned int)arg20);
if( !Subsegment )
{
v41 = 0i64;
goto LABEL_33;
}
}
v7 = 2;
v181 = 2;
v174 = RtlpHpAcquireLockExclusive((INT64 *)v8, *(unsigned __int8 *)(rcx0 + 57));
v115 = RtlpHpLfhSlotAddSubsegment(v5, Subsegment);
v6 = rcx0;
v188 = (INT64)v115;
}
v45 = v5 + 24;
v46 = 1;
v47 = *(_QWORD *)(v5 + 24);
if( v9 )
v46 = 4096;
if( v47 == v45 )
goto LABEL_268;
LABEL_43:
v48 = *(_WORD *)(v47 + 32);
v186 = 0;
while( 1 )
{
if( v46 < v48 )
{
v49 = v46;
}
else
{
v49 = v48;
if( v7 == 1 )
{
v47 = *(_QWORD *)v47;
if( v47 == v45 )
{
v8 = v5 + 16;
LABEL_268:
v47 = 0i64;
goto LABEL_64;
}
goto LABEL_43;
}
}
v50 = v48 - v49;
v48 = _InterlockedCompareExchange16((volatile signed __int16 *)(v47 + 32), v48 - v49, v48);
v51 = v49;
v52 = v49 + v50;
if( v48 == v52 )
break;
if( v48 < v52 )
v186 = 1;
}
if( *(_WORD *)(v47 + 32) )
goto LABEL_62;
v53 = (__int64 *)v47;
switch( *(_BYTE *)(v47 + 38) )
{
case 0:
v54 = (_QWORD *)(v5 + 8);
goto LABEL_50;
case 1:
v45 = v5 + 40;
v54 = 0i64;
LABEL_50:
v55 = (__int64 **)(v5 + 40);
if( v45 )
{
v56 = *(_QWORD *)v47;
v57 = *(INT64 **)(v47 + 8);
if( *(_QWORD *)(*(_QWORD *)v47 + 8i64) == v47 && *v57 == v47 )
{
*v57 = v56;
*(_QWORD *)(v56 + 8) = v57;
if( v54 )
--*v54;
goto LABEL_55;
}
LABEL_353:
__fastfail(3u);
}
LABEL_55:
*(_BYTE *)(v47 + 38) = 1;
if( v5 != -40 )
{
v58 = *(INT64 **)(v5 + 48);
if( (__int64 **)*v58 != v55 )
goto LABEL_353;
*(_QWORD *)v47 = v55;
*(_QWORD *)(v47 + 8) = v58;
v53 = 0i64;
*v58 = v47;
*(_QWORD *)(v5 + 48) = v47;
}
if( (*(_BYTE *)v5 & 1) == 0 && *(_QWORD *)(v5 + 8) > 8ui64 )
{
v53 = *v55;
v147 = **v55;
if( (__int64 **)(*v55)[1] != v55 || *(__int64 **)(v147 + 8) != v53 )
goto LABEL_353;
*v55 = (__int64 *)v147;
*(_QWORD *)(v147 + 8) = v55;
--MEMORY[0];
*((_BYTE *)v53 + 38) = 2;
}
if( v53 && *((_BYTE *)v53 + 38) == 2 )
v53[2] = 0i64;
break;
case 2:
v45 = 0i64;
v54 = 0i64;
goto LABEL_50;
}
v6 = rcx0;
LABEL_62:
v59 = v49 <= 1u;
v8 = v5 + 16;
if( !v59 )
*(_QWORD *)(v5 + 56) = v47 ^ ((unsigned __int16)(v51 - 1) ^ (unsigned __int16)v47) & 0xFFF;
LABEL_64:
if( v7 == 2 )
{
if( *(_BYTE *)(v6 + 57) )
{
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v8);
goto LABEL_67;
}
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)v8, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)v8);
v190 = 0;
v90 = (_ETHREAD *)KeGetCurrentThread();
v91 = (unsigned int)MiGetSystemRegionType(v8) == 1 ? (unsigned int)MmGetSessionIdEx(*((_QWORD *)v90 + 23)) : 0xFFFFFFFFi64;
--*((_WORD *)v90 + 243);
v95 = ++*((_BYTE *)v90 + 794);
v96 = (*((char *)v90 + 792) | *((char *)v90 + 870)) ^ 0x3F;
v97 = v8 & 0x7FFFFFFFFFFFFFFCi64;
v98 = !_BitScanReverse((unsigned int *)&v99, v96);
v205 = v99;
if( v98 )
{
LABEL_115:
if( (*((_DWORD *)v90 + 30) & 0x10000) == 0 )
KeBugCheckEx(0x162u, (ULONG_PTR)v90, v8, v91, 0i64);
}
else
{
while( 1 )
{
v100 = *((_QWORD *)v90 + 100) + 96 * v99;
v96 &= ~(1 << v99);
if( (*(_BYTE *)(v100 + 26) & 1) != 0
&& (*(_DWORD *)(v100 + 32) & 1) == 0
&& (*(_QWORD *)(v100 + 32) & 0x7FFFFFFFFFFFFFFCi64) == v97
&& *(_DWORD *)(v100 + 40) == (_DWORD)v91 )
{
*(_BYTE *)(v100 + 26) &= ~1u;
if( *(_QWORD *)(v100 + 32) )
break;
}
v98 = !_BitScanReverse((unsigned int *)&v99, v96);
v205 = v99;
if( v98 )
goto LABEL_114;
}
if( !v100 )
{
LABEL_114:
v8 = v5 + 16;
goto LABEL_115;
}
*(_BYTE *)(v100 + 32) |= 2u;
if( *(__int64 *)(v100 + 32) < 0 )
KiAbEntryRemoveFromTree(v100);
v190 = 0;
v190 = *(_DWORD *)(v100 + 88) & 0x1FFFF;
*(_DWORD *)(v100 + 88) &= 0xFFFE0000;
*(_BYTE *)(v100 + 25) &= ~1u;
*(_QWORD *)(v100 + 32) = 0i64;
v101 = (unsigned __int128)((__int64)(v100 - *((_QWORD *)v90 + 100)) * (__int128)0x2AAAAAAAAAAAAAABi64) >> 64;
v8 = v5 + 16;
v102 = 1 << ((v101 >> 4) + (v101 < 0));
if( v95 == 1 )
*((_BYTE *)v90 + 792) |= v102;
else
_InterlockedOr8((volatile signed __int8 *)v90 + 870, v102);
}
--*((_BYTE *)v90 + 794);
KiAbThreadRemoveBoosts((ULONG_PTR)v90, v8, (unsigned int *)&v190);
v98 = (*((_WORD *)v90 + 243))++ == 0xFFFF;
if( v98 && *((_ETHREAD **)v90 + 19) != (_ETHREAD *)((char *)v90 + 152) )
KiCheckForKernelApcDelivery();
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}
else if( *(_BYTE *)(v6 + 57) )
{
ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)v8);
LABEL_67:
__writecr8(v174);
}
else
{
if( _InterlockedCompareExchange64((volatile signed __int64 *)v8, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)v8);
KeAbPostRelease((PVOID)v8);
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}
if( v47 )
break;
v7 = 2;
v181 = 2;
v148 = RtlpHpAcquireLockExclusive((INT64 *)v8, *(unsigned __int8 *)(rcx0 + 57));
v6 = rcx0;
v174 = v148;
}
v60 = 3i64;
v61 = 2 * (*(unsigned __int16 *)(v47 + 34) + (unsigned __int64)*(unsigned __int8 *)(v47 + 39));
v210[1] = v47 + 48;
v62 = *(unsigned __int8 *)(v5 + 1);
v210[0] = v61;
v185 = (unsigned int)v47 >> 12;
LODWORD(v187) = *((unsigned __int8 *)RtlpSearchWidth + v62);
v63 = (unsigned __int16)(WORD4(RtlpHpHeapGlobals) ^ ((unsigned int)v47 >> 12) ^ *(_WORD *)(v47 + 40));
v64 = (DWORD2(RtlpHpHeapGlobals) ^ ((unsigned int)v47 >> 12) ^ *(_DWORD *)(v47 + 40)) >> 16;
v65 = v64;
v66 = v64;
v204 = v63;
if( v214 >= v63 )
v60 = 1i64;
if( (*(_BYTE *)(rcx0 + 62) & 2) != 0 )
{
v66 = v64;
v68 = 0i64;
if( v214 >= v63 )
v66 = v64;
}
else
{
v67 = RtlpLfhIncrementDataSlot();
if( v214 >= v63 )
v66 = v65;
v68 = *((unsigned __int8 *)RtlpLowFragHeapRandomData + v67);
}
v69 = RtlpLfhBlockBitmapAllocate(v210, *(unsigned __int16 *)(v47 + 36), v68, (unsigned int)v187, v60);
v184 = v69;
*(_WORD *)(v47 + 36) = v69;
v70 = v66 + v69 * v63;
if( *(_BYTE *)(v47 + 45) <= 1u )
goto LABEL_87;
v71 = *(_BYTE *)(v47 + 44);
v72 = 0i64;
v73 = v47 + *(unsigned __int16 *)(v47 + 46);
v74 = v70 >> v71;
v185 = WORD4(RtlpHpHeapGlobals) ^ (unsigned __int16)v185 ^ *(unsigned __int16 *)(v47 + 40);
v199 = 0;
v180 = -1;
v75 = ((v70 + v185 - 1) >> v71) - (unsigned int)v74 + 1;
v176 = -1;
v76 = 2 * v74;
v77 = (signed __int16 *)(2 * v74 + v73);
_m_prefetchw(v77);
v183 = 0i64;
v78 = &v77[v75];
v181 = 0;
v178 = -1;
if( v77 >= v78 )
goto LABEL_87;
v79 = (unsigned __int64)v78;
do
{
while( 1 )
{
v80 = *v77;
while( v80 > 0 )
{
v81 = v80;
v80 = _InterlockedCompareExchange16(v77, v80 + 1, v80);
if( v81 == v80 )
{
v82 = v181;
v83 = v178;
LODWORD(v84) = v183;
goto LABEL_82;
}
}
if( (_DWORD)v72 )
break;
LODWORD(v187) = 1;
v116 = RtlpHpAcquireLockExclusive((INT64 *)(v47 + 24), *(unsigned __int8 *)(rcx0 + 57));
v72 = 1i64;
v176 = v116;
}
v83 = v178;
if( v80 )
{
v82 = v181 + 1;
v84 = v76 >> 1;
++v181;
v183 = v76 >> 1;
if( v178 == -1 )
{
v83 = v76 >> 1;
v178 = v83;
}
}
else
{
LODWORD(v84) = v183;
v82 = --v181;
}
*v77 = v80 + 1;
LABEL_82:
++v77;
v76 += 2i64;
}
while( (unsigned __int64)v77 < v79 );
v63 = v204;
v85 = v184;
if( v82 )
{
v86 = rcx0;
if( (RtlpHpLfhPerfFlags & 0x20) != 0 )
_InterlockedExchangeAdd64(
(volatile signed __int64 *)(*(__int16 *)(rcx0 + 58) + rcx0 + 24),
(v82 << *(_BYTE *)(v47 + 44)) / 4096);
}
else
{
v86 = rcx0;
}
if( v83 == -1 )
{
if( (_DWORD)v72 )
{
if( *(_BYTE *)(v86 + 57) )
{
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v47 + 24));
__writecr8(v176);
}
else
{
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(v47 + 24), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)(v47 + 24));
v203 = 0;
v129 = (_ETHREAD *)KeGetCurrentThread();
if( (unsigned int)MiGetSystemRegionType(v47 + 24) == 1 )
v130 = (unsigned int)MmGetSessionIdEx(*((_QWORD *)v129 + 23));
else
v130 = 0xFFFFFFFFi64;
--*((_WORD *)v129 + 243);
v141 = ++*((_BYTE *)v129 + 794);
v142 = (*((char *)v129 + 792) | *((char *)v129 + 870)) ^ 0x3F;
v98 = !_BitScanReverse((unsigned int *)&v143, v142);
v202 = v143;
if( v98 )
goto LABEL_242;
while( 1 )
{
v144 = *((_QWORD *)v129 + 100) + 96 * v143;
v142 &= ~(1 << v143);
if( (*(_BYTE *)(v144 + 26) & 1) != 0
&& (*(_DWORD *)(v144 + 32) & 1) == 0
&& (*(_QWORD *)(v144 + 32) & 0x7FFFFFFFFFFFFFFCi64) == ((v47 + 24) & 0x7FFFFFFFFFFFFFFCi64)
&& *(_DWORD *)(v144 + 40) == (_DWORD)v130 )
{
*(_BYTE *)(v144 + 26) &= ~1u;
if( *(_QWORD *)(v144 + 32) )
break;
}
v98 = !_BitScanReverse((unsigned int *)&v143, v142);
v202 = v143;
if( v98 )
goto LABEL_242;
}
if( !v144 )
{
LABEL_242:
if( (*((_DWORD *)v129 + 30) & 0x10000) == 0 )
KeBugCheckEx(0x162u, (ULONG_PTR)v129, v47 + 24, v130, 0i64);
}
else
{
*(_BYTE *)(v144 + 32) |= 2u;
if( *(__int64 *)(v144 + 32) < 0 )
KiAbEntryRemoveFromTree(v144);
v203 = *(_DWORD *)(v144 + 88) & 0x1FFFF;
*(_DWORD *)(v144 + 88) &= 0xFFFE0000;
*(_BYTE *)(v144 + 25) &= ~1u;
*(_QWORD *)(v144 + 32) = 0i64;
v145 = 1 << ((__int64)(v144 - *((_QWORD *)v129 + 100)) / 96);
if( v141 == 1 )
*((_BYTE *)v129 + 792) |= v145;
else
_InterlockedOr8((volatile signed __int8 *)v129 + 870, v145);
}
--*((_BYTE *)v129 + 794);
KiAbThreadRemoveBoosts((ULONG_PTR)v129, v47 + 24, (unsigned int *)&v203);
v98 = (*((_WORD *)v129 + 243))++ == 0xFFFF;
if( v98 && *((_ETHREAD **)v129 + 19) != (_ETHREAD *)((char *)v129 + 152) )
KiCheckForKernelApcDelivery();
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}
}
LABEL_87:
v41 = v47 + v70;
if( v214 < v63 )
RtlpHpLfhSubsegmentSetUnusedBytes(v47, v47 + v70, v63 - v214);
v87 = rcx0;
}
else
{
v121 = v84 - v83;
v122 = *(_BYTE *)(v47 + 44);
v123 = (int(__fastcall *)(__int64, INT64, _QWORD, __int64))(v86 ^ RtlpHpHeapGlobals ^ *(_QWORD *)(v86 + 24));
v124 = v83 << v122;
v199 = v121 + 1;
v125 = (v121 + 1) << v122;
v126 = *(_QWORD *)v86;
v180 = v176;
v178 = v124;
if( v123(v126, v47 + v124, v125, v72) >= 0 )
{
LODWORD(a6) = 1;
RtlpHpLfhSubsegmentIncBlockCounts(rcx0, v47, v178, v125, &v199, a6, &v180);
goto LABEL_87;
}
v87 = rcx0;
RtlpHpLfhSubsegmentDecBlockCounts(rcx0, v47, v70, v185);
if( *(_BYTE *)(rcx0 + 57) )
{
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v47 + 24));
__writecr8(v176);
v41 = 0i64;
}
else
{
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(v47 + 24), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)(v47 + 24));
v41 = 0i64;
v201 = 0;
v166 = (_ETHREAD *)KeGetCurrentThread();
if( (unsigned int)MiGetSystemRegionType(v47 + 24) == 1 )
v167 = MmGetSessionIdEx(*((_QWORD *)v166 + 23));
else
v167 = -1;
--*((_WORD *)v166 + 243);
v168 = ++*((_BYTE *)v166 + 794);
v169 = (*((char *)v166 + 792) | *((char *)v166 + 870)) ^ 0x3F;
v98 = !_BitScanReverse((unsigned int *)&v170, v169);
v200 = v170;
if( v98 )
{
LABEL_378:
if( (*((_DWORD *)v166 + 30) & 0x10000) == 0 )
KeBugCheckEx(0x162u, (ULONG_PTR)v166, v47 + 24, v167, 0i64);
}
else
{
while( 1 )
{
v171 = *((_QWORD *)v166 + 100) + 96 * v170;
v169 &= ~(1 << v170);
if( (*(_BYTE *)(v171 + 26) & 1) != 0
&& (*(_DWORD *)(v171 + 32) & 1) == 0
&& (*(_QWORD *)(v171 + 32) & 0x7FFFFFFFFFFFFFFCi64) == ((v47 + 24) & 0x7FFFFFFFFFFFFFFCi64)
&& *(_DWORD *)(v171 + 40) == v167 )
{
*(_BYTE *)(v171 + 26) &= ~1u;
if( *(_QWORD *)(v171 + 32) )
break;
}
v98 = !_BitScanReverse((unsigned int *)&v170, v169);
v200 = v170;
if( v98 )
goto LABEL_377;
}
if( !v171 )
{
LABEL_377:
v41 = 0i64;
goto LABEL_378;
}
*(_BYTE *)(v171 + 32) |= 2u;
if( *(__int64 *)(v171 + 32) < 0 )
KiAbEntryRemoveFromTree(v171);
v201 = *(_DWORD *)(v171 + 88) & 0x1FFFF;
*(_DWORD *)(v171 + 88) &= 0xFFFE0000;
*(_BYTE *)(v171 + 25) &= ~1u;
*(_QWORD *)(v171 + 32) = 0i64;
v172 = 1 << ((char)(v171 - *((_BYTE *)v166 + 800)) / 96);
if( v168 == 1 )
*((_BYTE *)v166 + 792) |= v172;
else
_InterlockedOr8((volatile signed __int8 *)v166 + 870, v172);
v41 = 0i64;
}
--*((_BYTE *)v166 + 794);
KiAbThreadRemoveBoosts((ULONG_PTR)v166, v47 + 24, (unsigned int *)&v201);
v98 = (*((_WORD *)v166 + 243))++ == 0xFFFF;
if( v98 && *((_ETHREAD **)v166 + 19) != (_ETHREAD *)((char *)v166 + 152) )
KiCheckForKernelApcDelivery();
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
v87 = rcx0;
}
if( v85 != -1 )
_InterlockedAnd64(
(volatile signed __int64 *)(v47 + 8 * ((unsigned __int64)(2 * v85) >> 6) + 48),
~(3i64 << ((2 * v85) & 0x3F)));
}
if( !v41 )
RtlpHpLfhSubsegmentFreeBlock(v87, v47, 0i64, arg20);
LABEL_32:
Subsegment = v188;
LABEL_33:
if( v186 )
RtlpHpLfhBucketUpdateAffinityMapping(rcx0, a2);
if( Subsegment )
RtlpHpLfhBucketAddSubsegment(rcx0, a2, Subsegment, arg20);
return v41;
}Referenced by:
ExAllocateHeapPool
RtlpHpLfhBucketAllocate