MiSetHugeRangePartitionId
NTSTATUS __stdcall MiSetHugeRangePartitionId(UINT64 *a1, UINT64 a2, UINT64 a3, UINT64 a4){
__int16 v4;
unsigned __int64 *v5;
unsigned __int64 *v6;
UINT64 v7;
unsigned __int64 *v10;
NTSTATUS result;
_KLOCK_QUEUE_HANDLE LockQueue;
_KLOCK_QUEUE_HANDLE LockHandle;
v4 = *(_WORD *)a1;
v5 = (unsigned __int64 *)(a2 + 4128);
*(_QWORD *)&LockQueue.OldIrql = 0i64;
v6 = a1 + 516;
v7 = a4 >> 18;
v10 = (unsigned __int64 *)(*(&stru_140C4DB30 + 272) + 8 * ((a3 >> 18) & 0x3FFFF));
memset(&LockHandle, 0, sizeof(LockHandle));
if( (unsigned __int64)a1 >= a2 )
{
KeAcquireInStackQueuedSpinLock(v5, &LockHandle);
v5 = v6;
LockQueue.LockQueue.Lock = v6;
}
else
{
KeAcquireInStackQueuedSpinLock(a1 + 516, &LockHandle);
LockQueue.LockQueue.Lock = v5;
}
LockQueue.LockQueue.Next = 0i64;
KxAcquireQueuedSpinLock(&LockQueue.LockQueue, v5);
*(_QWORD *)(a2 + 424) -= v7;
for( a1[53] += v7; v7; --v7 )
{
*v10 = ((unsigned __int64)(v4 & 0x7FF) << 41) | *v10 & 0xFFF001FFFFEFFFFFui64 | 0xC0000;
++v10;
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
result = KiIrqlFlags;
__writecr8(LockHandle.OldIrql);
return result;
}Referenced by:
MiActOnPartitionNodePages