Выполнить инструкции RDMSR и WRMSR из кода C / C ++ - PullRequest
2 голосов
/ 04 мая 2011

Мне нужно контролировать конфигурацию 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 Все .

1 Ответ

3 голосов
/ 04 мая 2011

Скорее всего, вы запускаете этот код на процессоре x86 в Ring 3. У вас нет прав для выполнения этой команды.Период.Это аппаратное ограничение.Единственный способ выполнить эту инструкцию - войти в кольцо 0 и, скорее всего, ваша ОС не позволит вам это сделать.Для этого вам потребуется написать драйвер режима ядра.

Редактировать : http://faydoc.tripod.com/cpu/rdmsr.htm содержит дополнительную информацию.

...