不知道应用层怎么实现,如果你都能读了和虚拟化就没有什么关系了
应该是内存写保护属性,驱动层的话修改一下cr0寄存器的值就可以了
下面附个短代码
[C] 纯文本查看 复制代码
//关闭内存写保护
KIRQL CloseProtection() {
KIRQL irql = KeRaiseIrqlToDpcLevel();
UINT64 cr0 = __readcr0();
cr0 &= 0xfffffffffffeffff;
__writecr0(cr0);
_disable();
return irql;
}
//恢复内存写保护
void ResumeProtection(KIRQL irql) {
UINT64 cr0 = __readcr0();
cr0 |= 0x10000;
_enable();
__writecr0(cr0);
KeLowerIrql(irql);
}
这边建议调用完一定要恢复,不然你会寄的 |