MiMakeProtoPrivate

NTSTATUS __stdcall MiMakeProtoPrivate(PFnIoInitializeTimer *a1, CHAR a2, UINT64 a3){
  NTSTATUS v4; 
  __int64 v5; 
  INT64 v8; 
  unsigned __int64 v9; 
  _MMPFN *v10; 
  _MMCLONE_DESCRIPTOR *CloneAddress; 
  __int64 v12; 
  _MMPTE *PteBase; 
  NTSTATUS v14; 
  UINT64 v15; 
  INT64 v17; 

  v4 = 0;
  v5 = 0i64;
  LODWORD(v8) = MI_READ_PTE_LOCK_FREE(a3);
  v17 = v8;
  LODWORD(v9) = MI_READ_PTE_LOCK_FREE((INT64)&v17);
  v10 = &MmGetPfnDb()[(v9 >> 12) & 0xFFFFFFFFFi64];
  if( (v10->u4._bf_0 & 0x1000000000i64) != 0 || (__int64)v10->ListEntry.Blink <= 0 )
  {
    CloneAddress = MiLocateCloneAddress(
                     KeGetCurrentThread()->ApcState.Process,
                     (VOID *)(v10->PteLong | 0x8000000000000000ui64));
    v5 = (unsigned __int64)CloneAddress & -(__int64)(CloneAddress->NestingLevel < *(_QWORD *)(*(_QWORD *)(v12 + 1680)
                                                                                            + 360i64));
  }
  PteBase = MmGetPteBase();
  v14 = MiCopyOnWrite((__int64)((a3 << 25) - ((_QWORD)PteBase << 25)) >> 16, (INT64 *)a3, 0xFFFFFFFFFFFFFFFFui64, 0i64);
  if( v14 >= 0 )
  {
    LOBYTE(v4) = v5 != 0;
    return v4;
  }
  else
  {
    MiUnlockPageTableInternal((INT64)a1, (UINT64)PteBase + ((a3 >> 9) & 0x7FFFFFFFF8i64));
    LOBYTE(v15) = a2;
    MiUnlockWorkingSetShared((_MMSUPPORT_INSTANCE *)a1, v15);
    MiCopyOnWriteCheckConditions((INT64)a1, (unsigned int)v14);
    return 2;
  }
}

Referenced by:

MiProtectPrivateMemory