用途之一:从内核层保护文件不被删除
IoCallDriver:一个内核例程,过滤所有的系统请求
NTSTATUS IoCallDriver(IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp
);
IofCallDriver:在IoCallDriver中调用的一个例程,几乎所有的内核驱动都调用了IofCallDriver
NTSTATUS FASTCALL IofCallDriver(IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp)
{
if(pIofCallDriver != NULL)
{
// This routine will either jump immediately to IovCallDriver or
// IoPerfCallDriver.
return pIofCallDriver(DeviceObject, Irp, _ReturnAddress());
}
return IopfCallDriver(DeviceObject, Irp);
}
几乎所有的系统调用都是如此,进入之后,立刻出现一个jmp,跳到真实的调用处,这就形成了一个系统调用跳转表,只要修改这个地址,就能构成一个hook,现在安全软件能够很容易的检测到它。