MiCopyKstack
VOID *__stdcall MiCopyKstack(_MMPFN *NewPfn, _MMPFN *OldPfn, _MMPTE *TargetPte){
unsigned __int64 v3;
__int64 v6;
__int64 v7;
__int64 v8;
char v9;
VOID *result;
v3 = OldPfn->PteLong | 0x8000000000000000ui64;
v6 = (_QWORD)MmGetPteBase() << 25;
v7 = (__int64)((v3 << 25) - v6) >> 16;
KeCopyPage((PVOID)((((_QWORD)TargetPte << 25) - v6) >> 16));
LODWORD(v8) = MI_READ_PTE_LOCK_FREE(v3);
MiWriteValidPteNewPage(
(INT64 *)v3,
v8 & 0xFFFF000000000FFFui64 | (((NewPfn - MmGetPfnDb()) & 0xFFFFFFFFFi64) << 12),
0i64);
v9 = *(_BYTE *)(&OldPfn->u3 + 1) & 0xF8 | 5;
OldPfn->u4._bf_0 &= 0x8FFFFFFFFFFFFFFFui64;
result = (VOID *)v7;
*((_BYTE *)&OldPfn->u3 + 2) = v9;
return result;
}Referenced by:
MiStackTheftIsr
MiSwapStackPage