MiInsertHugeRangeInList
UINT64 __fastcall MiInsertHugeRangeInList(INT64 a1, CHAR a2, _QWORD *a3){
unsigned __int64 v3;
unsigned __int64 *v6;
_QWORD *v7;
__int64 v8;
__int64 v9;
unsigned __int64 v10;
__int64 v11;
unsigned __int64 v12;
int v13;
__int64 v14;
__int64 v15;
unsigned __int64 *v16;
unsigned __int64 v17;
unsigned __int64 v18;
UINT64 result;
__int64 v20;
unsigned __int64 v21;
unsigned __int64 v22;
struct _KLOCK_QUEUE_HANDLE LockHandle;
v3 = a1 & 0x3FFFF;
memset(&LockHandle, 0, sizeof(LockHandle));
v6 = (unsigned __int64 *)(qword_140C4E3B0 + 8 * v3);
if( a3 )
v7 = a3;
else
v7 = (_QWORD *)MiHugePfnPartition((_QWORD *)(qword_140C4E3B0 + 8 * v3));
v8 = v7[770];
LODWORD(v9) = MiSearchNumaNodeTable((PVOID)(v3 << 18));
v10 = (unsigned int)dword_140C4DCC0[0];
v11 = *(unsigned int *)(v9 + 8);
if( a2 >= 0 )
KeAcquireInStackQueuedSpinLock(v7 + 516, &LockHandle);
v12 = *v6;
if( (*v6 & 0x10000000000i64) != 0 )
a2 = a2 & 0xDE | 0x20;
if( (a2 & 1) != 0 )
{
v13 = 0;
v14 = 0i64;
v15 = (unsigned int)(2 * v10 * v11);
LABEL_12:
v16 = (unsigned __int64 *)(v8 + 8 * (v15 + v3 % v10));
goto LABEL_14;
}
if( (a2 & 0x20) == 0 )
{
v13 = 1;
v14 = 1i64;
v15 = v10 + (unsigned int)(2 * v10 * v11);
goto LABEL_12;
}
v13 = 5;
v14 = 5i64;
v16 = (unsigned __int64 *)(v8 + 16i64 * (unsigned int)v10 * (unsigned __int16)KeNumberNodes);
LABEL_14:
if( a3 )
{
v12 ^= (v12 ^ ((unsigned __int64)*(unsigned __int16 *)v7 << 41)) & 0xFFE0000000000i64;
++v7[53];
}
if( v13 )
{
if( v13 == 1 )
v17 = v12 & 0xFFFFFFFFFFE3FFFFui64 | 0x80000;
else
v17 = v12 & 0xFFFFFFFFFFE3FFFFui64 | 0x100000;
}
else
{
v17 = v12 & 0xFFFFFFFFFFE3FFFFui64 | 0x40000;
}
v18 = *v16;
result = 0xFFFFFF80001C0000ui64;
v20 = *v16 & 0x3FFFF;
v21 = v3 << 21;
v22 = v17 & 0xFFFFFF80001C0000ui64;
if( v20 )
{
*v6 = v22 | v20;
result = v21 | *(_QWORD *)(qword_140C4E3B0 + 8 * v20) & 0xFFFFFF80001FFFFFui64;
*(_QWORD *)(qword_140C4E3B0 + 8 * v20) = result;
}
else
{
*v6 = v22;
v18 = v21 | v18 & 0xFFFFFF80001FFFFFui64;
}
*v16 = v3 | v18 & 0xFFFFFFFFFFFC0000ui64;
if( v13 != 5 )
{
++*(_QWORD *)(v7[2] + 4544 * v11 + 8 * v14 + 4192);
++v7[771];
}
if( a2 >= 0 )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
result = (unsigned int)KiIrqlFlags;
__writecr8(LockHandle.OldIrql);
}
return result;
}Referenced by:
MiAddPartitionHugeRange
MiAllocatePartitionPhysicalPages
MiFreePartitionPageRun
MiMarkHugePfnBad
MiMarkHugePfnGood