void HookIdtInt3()
{
KdPrint((
"->HookIDTInt3 !"
));
ULONG ulIdtInt3 = (ULONG)ReadIdtAddress(3);
if
(ulIdtInt3 == 0)
return
;
g_ulIdtInt3_9 = ulIdtInt3 + 0x9;
REMOVE_PROTECT
__try
{
RtlCopyMemory(&JmpIdtInt3,(PVOID)ulIdtInt3,0x9);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
KdPrint((
"->RtlCopyMemory Failed !"
));
}
__try
{
((PJmpCode)ulIdtInt3)->bE9 = 0xE9;
((PJmpCode)ulIdtInt3)->ulAddress = (ULONG)(&NewIdtInt3)-ulIdtInt3-0x5;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
KdPrint((
"->Write Jmp !"
));
}
RECOVER_PROTECT
}
void UnHookIdtInt3()
{
KdPrint((
"->UnHookIDTInt3 !"
));
ULONG ulIdtInt3 = (ULONG)ReadIdtAddress(3);
if
(ulIdtInt3 == 0)
return
;
REMOVE_PROTECT
__try
{
RtlCopyMemory((PVOID)ulIdtInt3,&JmpIdtInt3,0x9);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
KdPrint((
"->RtlCopyMemory Failed !"
));
}
}