如何在visual studio 2010中包含DDK标题?

时间:2013-05-14 18:11:51

标签: c++ visual-studio-2010 windows-8

我需要使用 ntddk.h 中的ZwLoadDriver函数。我安装了Windows Software Development Kit (SDK) for Windows 8。设置所有包含(#include <ntddk.h>)。我有很多错误,例如type/sruct redefinition... already has a body。我认为SDK中的标题与DDK中的标题混合在一起。如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

你不应该这样做。 DDK标头专门用于驱动程序开发,不应包含在应用程序源代码中。如果您需要加载驱动程序,则应使用NtLoadDriver函数,该函数是ZwLoadDriver的用户模式版本。阅读更多herehere

同样来自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