MiFreeUltraMapping
NTSTATUS __stdcall MiFreeUltraMapping(UINT64 a1){
unsigned __int64 *v1;
unsigned __int64 v2;
unsigned __int64 Long;
int v4;
NTSTATUS result;
_KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
v1 = (unsigned __int64 *)((char *)&MmGetPdpteBase()->u.Long + ((a1 >> 27) & 0x1FFFF8));
v2 = (a1 - *(&stru_140C4DB30 + 449)) >> 30;
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C4DB30 + 448, &LockHandle);
_bittestandset64(*(&stru_140C4DB30 + 454), v2);
Long = ZeroPte.u.Long;
LOBYTE(v4) = MiPteInShadowRange((UINT64)v1);
if( v4 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
Long = ZeroPte.u.Long | 0x8000000000000000ui64;
*v1 = Long;
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
result = KiIrqlFlags;
__writecr8(LockHandle.OldIrql);
return result;
}Referenced by:
MiReleaseLargeZeroingVa
MiZeroPage