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