MiLockUnlockCommon

NTSTATUS __fastcall MiLockUnlockCommon(HANDLE Handle, void **a2, PVOID *a3, int a4, __int64 a5, __int64 a6, __int64 a7){
  char v7; 
  KPROCESSOR_MODE v9; 
  __int64 v10; 
  __int64 v11; 
  void *v12; 
  PVOID v13; 
  NTSTATUS result; 
  PVOID Object[5]; 
  v7 = a4;
  Object[0] = 0i64;
  if( (a4 & 0xFFFFFFFC) != 0 || (a4 & 3) == 0 )
    return -1073741811;
  v9 = *((_BYTE *)KeGetCurrentThread() + 562);
  if( v9 )
  {
    v10 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)a2 < 0x7FFFFFFF0000i64 )
      v10 = (__int64)a2;
    *(_QWORD *)v10 = *(_QWORD *)v10;
    v11 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)a3 < 0x7FFFFFFF0000i64 )
      v11 = (__int64)a3;
    *(_QWORD *)v11 = *(_QWORD *)v11;
  }
  v12 = *a2;
  Object[2] = v12;
  v13 = *a3;
  Object[3] = *a3;
  if( (unsigned __int64)v12 > 0x7FFFFFFEFFFFi64 || 0x7FFFFFFF0000i64 - (__int64)v12 < (unsigned __int64)v13 || !v13 )
    return -1073741811;
  result = ObReferenceObjectByHandleWithTag(Handle, 8u, (POBJECT_TYPE)PsProcessType, v9, 0x6D566D4Du, Object, 0i64);
  if( result >= 0 )
  {
    if( (v7 & 2) == 0 || SeSinglePrivilegeCheck(*(_QWORD *)&SeLockMemoryPrivilege, v9) )
    {
      *(_QWORD *)a5 = v12;
      *(_QWORD *)a6 = v13;
      *(PVOID *)a7 = Object[0];
      return 0;
    }
    else
    {
      ObfDereferenceObjectWithTag(Object[0], 0x6D566D4Dui64);
      return -1073741727;
    }
  }
  return result;
}

Referenced by:

NtLockVirtualMemory
NtUnlockVirtualMemory