MiReadWriteAnyLevelShadowPte

UINT64 __fastcall MiReadWriteAnyLevelShadowPte(UINT64 a1, INT64 a2, INT64 a3, UINT64 a4){
  __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  UINT64 *v8; 
  UINT8 v9; 
  UINT64 *v10; 
  __int64 v11; 
  ULONG_PTR v12; 
  ULONG_PTR v13; 
  UINT64 *v14; 
  ULONG_PTR v15; 
  ULONG_PTR BugCheckParameter4; 
  __int64 v18; 
  ULONG_PTR BugCheckParameter2[2]; 
  __int128 v20; 
  UINT8 OldIrql; 
  int v22; 
  v22 = a3;
  *(_OWORD *)BugCheckParameter2 = 0i64;
  v5 = *((_QWORD *)KeGetCurrentThread() + 23);
  v6 = (int)a2;
  v18 = (int)a2;
  v7 = (int)a2;
  v20 = 0i64;
  v8 = *(UINT64 **)(v5 + 1928);
  if( (int)a2 < 4i64 )
  {
    LODWORD(a2) = 4;
    do
    {
      BugCheckParameter2[v6] = a1;
      a1 = (UINT64)MmGetPteBase() + ((a1 >> 9) & 0x7FFFFFFFF8i64);
      ++v6;
    }
    while( v6 < 4 );
  }
  BugCheckParameter4 = 0i64;
  v9 = 17;
  OldIrql = 17;
  v10 = v8;
  v11 = (int)a2;
  do
  {
    v12 = BugCheckParameter2[--v11];
    if( v11 == 3 )
    {
      v10 += (v12 >> 3) & 0x1FF;
    }
    else
    {
      if( v9 != 17 )
        MiUnmapPageInHyperSpaceWorker(v8, v9, 0x80000000ui64);
      v13 = BugCheckParameter4;
      MiPteInShadowRange((UINT64)&BugCheckParameter4);
      LODWORD(v14) = MiMapPageInHyperSpaceWorker((v13 >> 12) & 0xFFFFFFFFFi64, &OldIrql, 0x80000000ui64);
      v9 = OldIrql;
      v8 = v14;
      v7 = v18;
      v10 = &v14[(v12 >> 3) & 0x1FF];
    }
    if( v22 && v11 == v7 )
    {
      if( (a4 & 1) != 0 )
      {
        if( !v11 )
          a4 |= 0x100ui64;
        *v10 = a4;
      }
      else
      {
        *v10 = a4;
      }
    }
    else
    {
      v15 = MI_READ_PTE_LOCK_FREE((INT64)v10);
      BugCheckParameter4 = v15;
      if( v11 && (v15 & 1) != 0 && (v15 & 0x80u) != 0i64 )
        KeBugCheckEx(0x1Au, 0x3606ui64, v12, 0i64, BugCheckParameter4);
    }
    v7 = v18;
  }
  while( v11 != v18 );
  if( v9 != 17 )
    MiUnmapPageInHyperSpaceWorker(v8, v9, 0x80000000ui64);
  return BugCheckParameter4;
}

Referenced by:

MiCheckKernelShadow
MiInitializeShadowPageTable
MmDeleteShadowMapping