1

我需要使用ntddk.hZwLoadDriver中的函数。我为 Windows 8 安装了 Windows 软件开发工具包 (SDK)。设置所有包括 ( )。而且我有很多错误,例如, 。我认为我来自 SDK 的标头与来自 DDK 的标头混合在一起。如何解决这个问题?#include <ntddk.h>type/sruct redefinition... already has a body

4

2 回答 2

2

DDK 只能用于开发驱动程序。用户模式下水火不容,许多声明与 SDK 标头重叠。

从用户模式使用 NtLoadDriver() 未记录,没有头文件可用于获取声明,也没有可用于 ntdll.dll 的导入库。它是一个原生的操作系统 api 函数,即使它的参数使用非标准格式的注册表项。本机操作系统与 Win32 api 非常不同。如果您真的非常想这样做,那么您必须编写自己的声明并使用 GetProcAddress() 来获取 ntdll.dll 中的入口点

但是 Windows 已经很好地支持从用户模式代码加载驱动程序。最好使用文档化和支持的方式,OpenSCManager + CreateService。此处提供了一个示例项目。

于 2013-05-14T22:46:45.093 回答
2

你不应该这样做。DDK头文件专门用于驱动程序开发,不应包含在应用程序源代码中。如果您需要加载驱动程序,您应该使用NtLoadDriver用户模式版本的功能ZwLoadDriver在此处此处阅读更多信息。

也从这里

"用户模式应用程序通过调用 Ntdll.dll 动态链接库中的入口点来使用本机系统服务例程。这些入口点将对 Nt 和 Zw 例程的调用转换为陷入内核模式的系统调用。访问这些入口点,用户模式应用程序静态链接到 WDK 中可用的 Ntdll.lib 库。在 Ntdll.lib 中实现的例程是在运行时动态链接到 Ntdll.dll 中的入口点的存根

于 2013-05-14T18:23:26.673 回答