Windows 内核模式和驱动程序的差异

Windows 内核模式和驱动程序的差异,windows,kernel,drivers,Windows,Kernel,Drivers,我只是想了解修补内核和编写驱动程序的区别 据我所知,内核模式驱动程序可以做内核可以做的任何事情,在某些方面与linux模块类似 那么,为什么当微软阻止AV制造商修补Windows内核时,他们会这么做呢 在这种情况下,修补内核意味着修改其(未记录的)内部结构以实现某些功能,通常是挂接各种功能(例如打开文件)。你不应该去搞乱不属于你的内部内核结构。在过去,微软没有为某些东西提供官方的钩子,所以安全公司对内部进行反向工程,并直接钩子内核。最近微软已经为一些东西提供了官方的钩子,因此直接钩子内核的需求没

我只是想了解修补内核和编写驱动程序的区别

据我所知,内核模式驱动程序可以做内核可以做的任何事情,在某些方面与linux模块类似

那么,为什么当微软阻止AV制造商修补Windows内核时,他们会这么做呢


在这种情况下,修补内核意味着修改其(未记录的)内部结构以实现某些功能,通常是挂接各种功能(例如打开文件)。你不应该去搞乱不属于你的内部内核结构。在过去,微软没有为某些东西提供官方的钩子,所以安全公司对内部进行反向工程,并直接钩子内核。最近微软已经为一些东西提供了官方的钩子,因此直接钩子内核的需求没有那么强烈。

在这种情况下,修补内核意味着修改其(未记录的?)内部结构以实现某些功能,通常是钩子各种功能(例如打开文件)。你不应该去搞乱不属于你的内部内核结构。在过去,微软没有为某些东西提供官方的钩子,所以安全公司对内部进行反向工程,并直接钩子内核。最近微软已经为一些事情提供了官方的钩子,所以直接钩子内核的需求并没有那么强烈。

的确,内核模式驱动程序可以做内核可以做的任何事情——毕竟,它们都在环0中运行。这里的关键问题是:有多困难?修补依赖于不同内核版本之间可能发生变化的内部细节。例如,
NtTerminateProcess
的系统调用号在版本之间会发生变化,因此钩住SSDT的驱动程序会在版本之间中断(尽管可以通过其他方式获得系统调用号)。读取或修改内部结构的字段(如
EPROCESS
ETHREAD
)也有风险,因为这些结构在版本之间也会发生变化。所有这些对一个司机来说都不是不可能做到的,但这很难做到


如果为挂钩提供了官方界面,Microsoft可以保证版本之间的兼容性,并能够控制谁可以做什么(例如,只有签名的驱动程序才能使用对象管理器回调)。然而,微软不能做到这一点,因为有些事情只是驱动程序不应该知道的实现细节。

的确,内核模式驱动程序可以做内核可以做的任何事情——毕竟,它们都在环0中运行。这里的关键问题是:有多困难?修补依赖于不同内核版本之间可能发生变化的内部细节。例如,
NtTerminateProcess
的系统调用号在版本之间会发生变化,因此钩住SSDT的驱动程序会在版本之间中断(尽管可以通过其他方式获得系统调用号)。读取或修改内部结构的字段(如
EPROCESS
ETHREAD
)也有风险,因为这些结构在版本之间也会发生变化。所有这些对一个司机来说都不是不可能做到的,但这很难做到


如果为挂钩提供了官方界面,Microsoft可以保证版本之间的兼容性,并能够控制谁可以做什么(例如,只有签名的驱动程序才能使用对象管理器回调)。然而,微软无法做到这一点,因为有些事情只是驱动程序不应该知道的实现细节。

那么,为什么赛门铁克和McAfee设置为无法连接到内核?那么为什么赛门铁克和McAfee设置为无法连接到内核?