Search code examples
c++ccpumasmcpu-registers

Execute RDMSR and WRMSR instructions from C/C++ code


I need to control C-State configuration. Specifically, I'd probably like to execute the following asm code:

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

Currently, I got this exception on rdmsr line:

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

How can I (permanently) elevate priviliges of my app so it could execute the code above? I use VS 2010.

NOTE: It is possible without writing a kernel-mode driver. See R/W Everything.


Solution

  • Chances are, you are running this code on an x86 processor within Ring 3. You do not have the privileges to execute this command. Period. This is a hardware limitation. The only way to execute that instruction is to go into Ring 0 and chances are, your OS won't let you do that. You will need to write a kernel-mode driver to accomplish this.

    Edit: http://faydoc.tripod.com/cpu/rdmsr.htm has more info.