Вопрос
Делаю так:
typedef void asmfunc();
asmfunc* OldSysenterEntry;
void SysenterHook();
/* ... */
// Внутри DeviceControlRoutine
/* ... */
__asm
{
mov ecx, 0x176
rdmsr
mov OldSysenterEntry, eax
mov eax, SysenterHook
xor edx, edx
wrmsr
}
/* ... */
// Ну и наконец
void __declspec(naked) SysenterHook()
{
__asm
{
jmp OldSysenterEntry
}
}
Вроде бы все сделано в лучших русских традициях, но почему то при попытке переписать SYSENTER_MSR_EIP компьютер перезагружается... Ну вообщето трудно сказать, когд именно он перехагруэаеться, то ли на wrmsr то ли на jmp OldSysenterEntry... Но то что перехагружается это факт...
Вопрос, почему?