从C / C ++代码执行RDMSR和WRMSR指令

时间:2011-05-03 21:13:04

标签: c++ c cpu masm cpu-registers

我需要控制C-State配置。具体来说,我可能想执行以下asm代码:

__asm
{
    rdmsr
    and eax, 0x00
    or eax, 0x01
    wrmsr
}

目前,我在rdmsr行上收到了此例外:

Unhandled exception at 0x00e3139e in MessWithCStates.exe: 0xC0000096: Privileged instruction.

我如何(永久)提升我的应用程序的权限,以便它可以执行上面的代码?我使用VS 2010。

注意:无需编写内核模式驱动程序即可。请参阅 R / W Everything

1 个答案:

答案 0 :(得分:3)

有可能,您在Ring 3中的x86处理器上运行此代码。您没有执行此命令的权限。期。这是硬件限制。执行该指令的唯一方法是进入Ring 0,很可能,你的操作系统不会让你这样做。您需要编写内核模式驱动程序来完成此任务。

修改http://faydoc.tripod.com/cpu/rdmsr.htm有更多信息。