阅读:1358回复:3
几个关于usb的迷惑的问题
我想做一个USB客户驱动程序,现在想根据自己的理解,向大家核实几个概念:
1. 插上USB外设以后,机器是不是自己列举总线,发现新的USB设备(通过usbhub.sys来做)?而不需要我来编程。(我用的WIN2K,DDK) 2. 机器发现USB设备后,是不是就马上给它分配一个PDO? 然后PnP管理器自动发出IRP_MN_QUERY_ID来请求设备的硬件ID和兼容ID,让总线驱动程序给这个设备加载正确的设备驱动程序到正确的驱动程序栈。这一步是不是机器自己做的,而不需要我来做? 3. 添加了新设备以后,找到新设备驱动程序的DriverEntry()入口,找到AddDevice()例程,给设备驱动程序分配一个FDO,注册并激活设备接口?然后将FDO和PDO挂接到设备栈上? 4. 客户驱动程序的I/O操作是不是通过发送IRP给驱动程序栈的下层驱动程序来做?我的工作只是构造这个IRP呢? 5. 加载了设备驱动程序以后,是不是就可以通过应用程序来调用驱动程序工作了?应用程序是不是通过win32函数来调用驱动程序,但是这些win32函数是什么,在哪找得到?怎么来带调用我的驱动程序? 6. 驱动程序栈和设备栈什么关系?是一对一的关系还是设备栈包含驱动程序栈? 一下子问了这么多问题,真不好意思。我是一个新手,好多地方不明白,感谢这个论坛让我可以向大家提出自己得迷惑,也感谢大家可以看看我的贴子,给我一些帮助,再次感谢 |
|
|
沙发#
发布于:2001-12-28 15:53
1 发现新设备不用你管,是系统作的。
2 发现这个东西后,系统加载相应的驱动程序(就是你写的),传一个PDO给你,你建立自己的FDO。QUERY_ID那些东西你不用理它。 4 对,你不用直接访问设备,做个IRP, 做个URB附在上面,把IRP传到下层驱动,它给你做。 5 加载了驱动,在调用AddDevice时,你应该提供一个接口(不要问我怎么提供,自己看书),然后应用就可以访问到你的驱动。 在应用层, 用 CreateFile WriteFile ReadFile DeviceIoControl CloseFile等和驱动大交道 6 一般说来,驱动程序对设备是一对多,即一个Driver可以管理好几个设备。所以,从层次的角度来说,是一一对应的。 另外,如门请先看 <programming Windows Driver Model>,不要看DDK, 免得一头雾水。 |
|
|
板凳#
发布于:2001-12-28 16:03
谢谢您的回复,帮了我的大忙了,不然我还要慢慢的来确认。
再次感谢。 |
|
|
地板#
发布于:2001-12-28 16:06
不用谢
|
|
|