方法一:
// Disable the write-protect feature.
VOID WPOFF(ULONG ulCr0)
{
ULONG ulVal;
_asm
{
push eax
mov eax, cr0
mov ulVal, eax
and eax, 0FFFEFFFFh
mov cr0, eax
pop eax
cli
}
ulCr0 = ulVal;
}
// Enable the write-protect feature.
VOID WPON(ULONG ulCr0)
{
_asm
{
sti
push eax
mov eax, ulCr0
mov cr0, eax
pop eax
}
}
方法二:
// Disable the write-protect feature.
VOID WPOFF()
{
_asm
{
mov eax, cr0
and eax, not 0x10000
mov cr0, eax
mov cr0, cr0 // 将 cr0 寄存器执行时序进行“屏障”操作,确保操作执行完成
mov cr0, eax
cli
}
}
// Enable the write-protect feature.
VOID WPON()
{
_asm
{
sti
mov eax, cr0
or eax, 0x10000
mov cr0, eax
mov cr0, cr0 // 将 cr0 寄存器执行时序进行“屏障”操作,确保操作执行完成
mov cr0, eax
}
}