阅读:3213回复:2
WDF 驱动入门级问题 — 加载 WDF 驱动,提示找不到文件。
我是一名驱动新手,以前是做应用开发的,以后想做驱动开发。所以最近在学习《竹林蹊径》。
看了第三章 WDF 概述之后很有感觉,就想写一个很简单的 WDF 驱动在 WINDBG 里调一调。结果碰上些麻烦。 本来这种小儿科的问题都不好意思拿出来问,但是小弟我在网上搜了好久,确实找不到有用信息。即使找到别人有问同样的问题,都没有人回答。 希望有经验的前辈不吝指教。 问题的环境大概如下: 代码就只是在 DriverEntry 里调用了 WdfDriverCreate,driverConfig.DriverInitFlags = WdfDriverInitNonPnpDriver。我的目的是想用 WDF 写一个 NT 式驱动或者说是非 PNP 驱动吧。编译时链接了这些库,ntoskrnl.lib、wdfdriverentry.lib、wdfldr.lib、msvcrtd.lib。 个人觉得最后那个 msvcrtd.lib 链的有些不可思议,如果不链这个库的话,链接时会提示 __security_init_cookie referenced in function _FxDriverEntry@8。所以才加了这个库。这是在 VS2008 中编译链接的。如果在 WDK x86 Check 环境下 build 的话,似乎情况有些不一样。 编译链接一切成功后,把生成的 wdf.sys 扔 VM 里测试。VM 里我是在 services 下建的一个 WDF 子键,子键内设置正常。.sys 路径也是正常的。 然后 CMD 里 net start 后就提示,错误代码 2,找不到指定文件。 先在网上找了下解决方法,无果。然后,我就看了下 VM 的OS 里是不是没有 wdf 驱动相关文件,结果还真没有。然后用 depends 看了下生成的 wdf.sys 依赖了 ntoskrnl.exe 和 wdfldr.sys,只是 wdfldr.sys 这项在 depends 的界面里是黄色疑问状态。暂时不管这个吧。我把 wdfldr.sys 扔 VM OS 的 system32\drivers 中后还是提示找不到指定文件。然后我再把 wdfldr.sys 扔 wdf.sys 同目录(自定义的驱动目录)。提示就变成了,找不到指定的程序。 接下来我看了一下 wdfldr.sys 的导出信息,发现与 wdf.sys 的引入函数相比缺少了两个函数,WdfVersionBindClass 与 WdfVersionUnbindClass 。 这个 wdfldr.sys 版本是 1.5.6000.0 。 到这里,我就在想了是我的 wdfldr.sys 版本不对?为啥会缺少那两个函数呢?或者是因为我弄的这个非 Pnp 程序才会导致关联性的调用这两个函数?如果换成典型的 Pnp 程序是不是就不会这样了。但是书上又明确说了 WDF 是支持非 Pnp 驱动的。所以我就想先在简单的环境里调试调试,一点一点理解 WDF 的各元素。就像弄一个典型的 NT 式驱动一样,不用去弄 INF 文件啦,反复加载卸载的测试方法感觉更方便些。 希望有经验的前辈给予指导。小弟先行谢过了。 |
|
沙发#
发布于:2013-01-11 14:58
小白帮忙顶贴,初学者无法回答
|
|
板凳#
发布于:2013-01-16 11:41
要安装wdf运行库, 在C:\WinDDK\7600.16385.1\redist\wdf
|
|