MmStoreAllocateVirtualMemory
VOID *__stdcall MmStoreAllocateVirtualMemory(UINT64 Size){
VOID *v2;
UINT64 *v3;
_MMVAD_SHORT *v4;
_MMVAD_SHORT *v5;
VOID *v6;
_MMPTE *PteAddress;
unsigned __int64 v9;
unsigned __int64 v10;
UINT64 VadLockHeld;
UINT64 VadLockHelda;
_MI_DELETE_VA_INFO *DeleteInfo;
INT8 v14;
UINT64 v15;
_MMVAD_SHORT **ProcessHandle[16];
_MI_DELETE_VA_INFO v17;
__int128 v18;
__int128 v19;
UINT8 AddressSpaceHeldExclusve;
INT64 a2;
UINT64 ZeroBits;
VOID *SecureHandle;
ZeroBits = 0i64;
SecureHandle = 0i64;
v17 = 0i64;
v18 = 0i64;
v2 = 0i64;
v19 = 0i64;
memset(ProcessHandle, 0i64, sizeof(ProcessHandle));
ProcessHandle[12] = (_MMVAD_SHORT **)KeGetCurrentThread()->ApcState.Process;
ProcessHandle[11] = ProcessHandle[12];
ProcessHandle[2] = (_MMVAD_SHORT **)0x10000;
ProcessHandle[1] = (_MMVAD_SHORT **)0x7FFFFFFEFFFFi64;
ProcessHandle[10] = (_MMVAD_SHORT **)&SecureHandle;
ProcessHandle[3] = (_MMVAD_SHORT **)Size;
ProcessHandle[5] = (_MMVAD_SHORT **)0x200003000i64;
HIDWORD(ProcessHandle[7]) = 1;
HIDWORD(ProcessHandle[9]) = -2147483647;
LOBYTE(ProcessHandle[13]) = 0;
if( MiAllocateVirtualMemory(
ProcessHandle,
0i64,
(UINT64)&ZeroBits,
v3,
VadLockHeld,
(UINT64)DeleteInfo,
v14,
v15,
ProcessHandle[0]) < 0 )
return v2;
v4 = MiObtainReferencedSecureVad(
(PVOID)((unsigned __int64)SecureHandle ^ (__int64)ProcessHandle[12] ^ *(&stru_140C4DB30 + 12)),
&a2);
v5 = v4;
if( !v4 )
return v2;
if( MiMakeSecureExclusive((INT64)v4) )
{
v6 = (VOID *)(((v5->EndingVpn | ((unsigned __int64)v5->EndingVpnHigh << 32)) << 12) | 0xFFF);
PteAddress = MiGetPteAddress(v6);
LODWORD(VadLockHelda) = 1;
MiDecommitPages((VOID *)ZeroBits, PteAddress, (ULONG_PTR)ProcessHandle[12], v5, VadLockHelda, &v17);
if( MiLockPageTableRange((PVOID)ZeroBits, v6) >= 0 )
{
MiUnlockAndDereferenceVad(v5);
v2 = (VOID *)ZeroBits;
v5 = 0i64;
}
if( v5 )
{
v9 = v5->StartingVpn | ((unsigned __int64)v5->StartingVpnHigh << 32);
v10 = v5->EndingVpn | ((unsigned __int64)v5->EndingVpnHigh << 32);
AddressSpaceHeldExclusve = 0;
MiFreeVadRange(v5, &AddressSpaceHeldExclusve, v9, v10, (_EPROCESS *)ProcessHandle[12]);
}
return v2;
}
MiUnlockAndDereferenceVad(v5);
MmUnsecureVirtualMemory(SecureHandle);
return 0i64;
}Referenced by:
SmKmStoreHelperCommandProcess