我需要使用ntddk.hZwLoadDriver
中的函数。我为 Windows 8 安装了 Windows 软件开发工具包 (SDK)。设置所有包括 ( )。而且我有很多错误,例如, 。我认为我来自 SDK 的标头与来自 DDK 的标头混合在一起。如何解决这个问题?#include <ntddk.h>
type/sruct redefinition
... already has a body
2 回答
DDK 只能用于开发驱动程序。用户模式下水火不容,许多声明与 SDK 标头重叠。
从用户模式使用 NtLoadDriver() 未记录,没有头文件可用于获取声明,也没有可用于 ntdll.dll 的导入库。它是一个原生的操作系统 api 函数,即使它的参数使用非标准格式的注册表项。本机操作系统与 Win32 api 非常不同。如果您真的非常想这样做,那么您必须编写自己的声明并使用 GetProcAddress() 来获取 ntdll.dll 中的入口点
但是 Windows 已经很好地支持从用户模式代码加载驱动程序。最好使用文档化和支持的方式,OpenSCManager + CreateService。此处提供了一个示例项目。
你不应该这样做。DDK
头文件专门用于驱动程序开发,不应包含在应用程序源代码中。如果您需要加载驱动程序,您应该使用NtLoadDriver
用户模式版本的功能ZwLoadDriver
。在此处和此处阅读更多信息。
也从这里:
"用户模式应用程序通过调用 Ntdll.dll 动态链接库中的入口点来使用本机系统服务例程。这些入口点将对 Nt 和 Zw 例程的调用转换为陷入内核模式的系统调用。访问这些入口点,用户模式应用程序静态链接到 WDK 中可用的 Ntdll.lib 库。在 Ntdll.lib 中实现的例程是在运行时动态链接到 Ntdll.dll 中的入口点的存根。