基于 x64 的 Microsoft Windows Server 2003 版本、Windows XP Professional x64 Edition 和更高版本的基于 x64 Windows 操作系统都不允许修补内核,除非是通过经过授权的 Microsoft 创建的补丁。(在本文中,x64 指 AMD64 或 Intel 扩展内存 64 技术系统中使用的 64 位体系结构。)通过为编档方式(比如与系统服务表挂钩)扩展或替换内核服务的内核模式驱动程序会妨碍其他软件和影响操作系统的稳定性。对于基于 x86 的系统,Microsoft 不鼓励这类实践,但也未通过编程方式阻止它们,因为这样做会破坏已经发布的大量软件的兼容性。基于 x64 的系统不存在类似的已发布软件集合,因此可以在对兼容性影响很小的情况下添加此保护级别。
在基于 x64 的系统上,许多系统结构都受到了保护,包括系统服务调度表、中断描述符表 (IDT) 和全局描述符表 (GDT)。操作系统也不允许第三方软件进行内存分配并将该软件用作内核堆栈。如果操作系统检测到这类修改或任何其他未授权的修补操作,那么它将生成错误检查并关闭系统。
要与基于 x64 的 Windows 操作系统兼容,驱动程序必须避免以下实践:
| • | 修改系统服务表,例如,与 KeServiceDescriptorTable 挂钩 |
| • | 修改中断描述符表 (IDT) |
| • | 修改全局描述符表 (GDT) |
| • | 使用未经内核分配的内核堆栈 |
| • | 修补内核的任何部分(只能在 AMD64 系统上检测到) |
其他平台的驱动程序应当避免这些实践,以帮助确保操作系统的稳定性和可靠性,提供更好的客户体验。
如果您的驱动程序必须执行一个任务,并且您认为必须对内核进行修补才能完成,那么请联系KPPinput@Microsoft.com 获得帮助,找到编档和支持的替代方案。用于评估将要开发的 API 类型并评定其优先级的标准,以及这些 API 的交付时间可以在此处 的白皮书(内核修补保护标准评估文档)中获得。
另请参见:
| • |