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