windows驱动开发问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows驱动开发问题相关的知识,希望对你有一定的参考价值。

最近想学习下windows驱动编程,但有几个问题想问下
1.windows驱动分哪几类,该怎么分?平时碰到的驱动太乱了不知道该怎么分.. 声卡驱动,网卡驱动,usb蓝牙驱动,杀毒软件驱动,ndis 驱动,arp防护墙驱动,冰点还原驱动, 感觉驱动太多了 ,不知道分为哪几类
2.如果想学习驱动编程(不涉及硬件的),应该怎么学习,学习的大体步骤是

希望大侠们 能帮我下
windows驱动分哪几类,该怎么分????????????????

结构分大概NT 和 WDM 两类- -?
功能分的话,不涉及硬件。。。。恩。。。(我也初学0 0)
还是看书吧,楼上推荐的那本很不错《windows驱动开发技术详解》

我也是初学,不涉及硬件的话做做过滤驱动,网络的话就ndis驱动什么的。
参考技术A ...我以为你在说什么驱动...
你说的驱动实际上指的就是安装程序,英文是driver,其实就是软硬件的调试程序
驱动分软件驱动和硬件驱动,一般上狭义的驱动指的是硬件的驱动
一般在windows下硬件至少需要安装主板,显卡,声卡,网卡,usb等驱动,另外你还有什么硬件,一般都有配套的驱动,不是很乱,只要列好硬件清单就可以
软件就看你需要什么了,装机必备的应该有,像冰点还原的也可以装,因为需要嘛
如果你不涉及硬件驱动编程,那可以学一下MFC和windows API,如果是已有软件,那可以在网上找软件和教程,DIY一些软件的安装方法
硬件驱动需要你有汇编基础
参考技术B 看看这个吧,http://bbs.kanxue.com/showthread.php?t=94846&highlight=windows+%E9%A9%B1%E5%8A%A8+%E5%8A%A8
,我也是初学windows驱动开发的,网上的朋友推荐我看《windows驱动开发技术详解》,据说这本书是很经典的,看看或许对你有帮助,我也正在看,希望能对你又帮助!呵呵~~~~~~

参考资料:看雪学院

参考技术C 推荐你两本书:
《windows驱动开发技术详解》
《寒江独钓:Windows内核安全编程》

Windows 驱动程序开发本地调试问题。

【中文标题】Windows 驱动程序开发本地调试问题。【英文标题】:Windows Driver Developement Local debugging questions. 【发布时间】:2013-11-11 02:04:16 【问题描述】:

这里是场景。 我在 Windows 8 机器上/也在 Windows 7 机器上试过这个。

我正在开发一个驱动程序(镜像驱动程序/远程显示驱动程序)。我应该说我要开始工作了,因为我被困住了。

于是我就按照KmdfSmall的MSDN示例

http://msdn.microsoft.com/en-us/library/windows/hardware/hh439665(v=vs.85).aspx

我编译了驱动程序代码。远程调试也开始了。

我在主机上看不到任何调试消息(我已将寄存器 IHVDRIVER 设置为 0x8 我还将 DEFAULT 设置为 0xf 以便能够使用 DbgPrint

还有更多。我真正的目标是启动我的驱动程序即服务

http://www.codeproject.com/Articles/9504/Driver-Development-Part-1-Introduction-to-Drivers

我想在本地机器上测试它。我不想有一个目标和主机来调试。普通的老式单机。

问题

1) 当服务通过CreateServiceOpenService 启动驱动程序时,它是调用DriverEntry 函数还是等到有人用户级应用程序使用驱动程序。

2) 当我运行应用程序以将驱动程序加载为服务器时,DbgPrintEx 会在哪里打印 DebugView 或 WinDbg 或其他地方。

3) 如果我正在使用

CreateService

我的 sys 文件是否必须在 windows/system32/drivers 文件夹中?我在某处读到 64 位机器 CreateService 仅从系统文件夹加载。

4) 当我将它作为服务启动时,我想在任务管理器上看到它

5)如果调用DriverEntry 来初始化驱动程序,是否可以再次调用它或者必须等到它卸载?所以我加载了我的驱动程序而忘记优雅地卸载它并再次运行我的程序会调用DriverEntry 吗?

我知道这里有很多问题。提前致谢

【问题讨论】:

【参考方案1】:

无法使用旧式 API 安装 KMDF 驱动程序。检查来自 MSDN 的 this sample。

您还需要考虑它是哪种驱动程序,过滤器驱动程序或实际设备驱动程序等。

1) 当服务通过 CreateService 和 OpenService 启动驱动时, 它是调用 DriverEntry 函数还是等到有人 用户级应用使用驱动程序。

一旦驱动程序被加载,它的DriverEntry 例程就会被调用。

2) 当我运行应用程序以将驱动程序加载为服务器时 DbgPrintEx 假设打印 DebugView 或 WinDbg 或其他位置。

当 DebugView 或 WinDbg 均未运行时,输出将丢失并且不会在任何地方打印/记录。

3) 如果我使用CreateService,我的 sys 文件是否必须在 windows/system32/drivers 中 文件夹 ?我在某处读到仅在 64 位机器 CreateService 中 从系统文件夹加载。

较新的窗口有这种限制。

4) 当我将它作为服务启动时,我想在任务中看到它吗 经理

内核驱动程序未在任务管理器中列出,因为它们实际上是操作系统的一部分,而不是单独的应用程序。但是,如果您有用户级服务,它会在运行时列在任务管理器中。

5)如果调用DriverEntry来初始化一个驱动,是否可以再次调用或者 它必须等到它卸载?所以我加载我的驱动程序并忘记 优雅地卸载它并再次运行我的程序会调用 DriverEntry 吗?

每次加载驱动程序时都会调用DriverEntry。如果驱动程序是按需加载的,它将在每次加载/启动驱动程序时运行,即使驱动程序没有正常卸载(例如泄漏内存/锁等)。但是如果驱动程序没有很好地卸载,您可能会导致系统不稳定和蓝屏。

【讨论】:

以上是关于windows驱动开发问题的主要内容,如果未能解决你的问题,请参考以下文章

Windows驱动开发如何入门

适用于 Windows CE 和 Windows 桌面的 PCIe 驱动程序

关于windows下驱动程序开发

如何给开发好的Windows内核驱动签名?双证书。ssl证书.

Windows驱动开发如何入门

用于所有Windows驱动程序开发者的概念