MiLockUnlockCommon

NTSTATUS __stdcall MiLockUnlockCommon(
        VOID *ProcessHandle,
        VOID **BaseAddress,
        VOID **RegionSize,
        UINT64 MapType,
        VOID **OutCapturedBase,
        UINT64 *OutCapturedRegionSize,
        VOID **OutTargetProcess){
  char v7; 
  char PreviousMode; 
  __int64 v10; 
  __int64 v11; 
  void *v12; 
  VOID *v13; 
  NTSTATUS result; 
  UINT64 Tag; 
  PVOID Object[5]; 

  v7 = MapType;
  Object[0] = 0i64;
  if( (MapType & 0xFFFFFFFC) != 0 || (MapType & 3) == 0 )
    return -1073741811;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  if( PreviousMode )
  {
    v10 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)BaseAddress < 0x7FFFFFFF0000i64 )
      v10 = (__int64)BaseAddress;
    *(_QWORD *)v10 = *(_QWORD *)v10;
    v11 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)RegionSize < 0x7FFFFFFF0000i64 )
      v11 = (__int64)RegionSize;
    *(_QWORD *)v11 = *(_QWORD *)v11;
  }
  v12 = *BaseAddress;
  Object[2] = v12;
  v13 = *RegionSize;
  Object[3] = *RegionSize;
  if( (unsigned __int64)v12 > 0x7FFFFFFEFFFFi64 || 0x7FFFFFFF0000i64 - (__int64)v12 < (unsigned __int64)v13 || !v13 )
    return -1073741811;
  LODWORD(Tag) = 1834380621;
  result = ObReferenceObjectByHandleWithTag(
             ProcessHandle,
             8ui64,
             (_OBJECT_TYPE *)PsProcessType,
             PreviousMode,
             Tag,
             Object,
             0i64);
  if( result >= 0 )
  {
    if( (v7 & 2) == 0 || SeSinglePrivilegeCheck(*(_QWORD *)&SeLockMemoryPrivilege, PreviousMode) )
    {
      *OutCapturedBase = v12;
      *OutCapturedRegionSize = (UINT64)v13;
      *OutTargetProcess = Object[0];
      return 0;
    }
    else
    {
      ObfDereferenceObjectWithTag(Object[0], 0x6D566D4Dui64);
      return -1073741727;
    }
  }
  return result;
}

Referenced by:

NtLockVirtualMemory
NtUnlockVirtualMemory