我现在正在研究 Windows Native API,Nt*/Zw*
方法。我下载了 WDK,安装并成功编译了一个应用程序(x64,在 Win 8.1 x64 下,VS2013)。它唯一做的就是调用NtOpenFile()
.
为了成功编译/链接它,我必须对项目属性(驱动程序模板应用程序)进行以下更改:
- 从 WDK 添加包含文件夹
- 从 WDK 添加 Lib 文件夹
- 告诉链接器使用 ntoskrnl.lib
出乎意料的是,在运行调试器时,我收到错误消息“程序无法启动,因为您的计算机中缺少 C:\Windows\SYSTEM32\werkernel.sys。请尝试重新安装程序以解决此问题。” werkernel.sys 显然存在于 system32\drivers 中。
编辑:需要明确的是,通过双击图标启动应用程序时也会发生上述错误。
这种加载发生在我的任何代码之前,我在互联网上的任何地方都找不到任何东西,也无法在相关文件的项目属性中找到任何东西。因此,总而言之,到目前为止,我有以下问题:
- 为什么要为我的应用程序加载 werkernel.sys?
- 为什么它是从 System32 加载的?
我知道这是可能的mklink werkernel.sys drivers\werkernel.sys
,但感觉就像我在做一些非常错误的事情。