阅读:3871回复:5
WINCE系统下USB设备驱动加载过程请教。
请哪位大虾帮忙介绍一下WINCE系统下USB设备驱动加载过程,从USB设备插入系统到驱动程序加载完成,谢谢。
|
|
|
沙发#
发布于:2009-09-14 09:05
USB加载主要看USBD文件夹下的两cpp文件
|
|
板凳#
发布于:2009-09-23 16:52
WINCE系统下USB设备驱动看哪个文件呢?感谢
|
|
地板#
发布于:2009-09-24 15:20
刷刷刷
|
|
地下室#
发布于:2009-09-24 15:23
回 1楼(coke) 的帖子
请问WINCE系统下USB设备驱动看哪个文件呢?感谢?这个usb设备不是U盘, printer,hid类的设备!!万分感谢 |
|
5楼#
发布于:2010-11-14 17:05
先说USBInstallDriver,这个函数在驱动程序DLL被加载的时候会被调用,但是不是任何情况下加载驱动都会调用这个函数入口,前面提到过USB驱动的注册表键值,当系统能够根据注册表定位到驱动程序dll并且成功加载的话,这个函数就不会被调用了。反之,当不能够找到匹配的驱动或者不能够成功加载驱动的时候,系统会弹出一个对话框,让用户输入一个驱动程序名称,这个时候,系统就会加载用户输入的这个驱动程序文件,并调用其中的USBInstallDriver函数了。USBUnInstallDriver函数呢,我很迷惑,《WindowCE驱动开发指南》有一句话说WinCE永远不会调用它,我也不明白,但是就我测试的结果来看,确实没发现这个函数被调用过。
USBInstallDriver函数里面作什么的呢?说白了,就是写注册表,让系统下次能够通过注册表信息匹配到这个驱动程序文件。其他文章都说了,怎么写注册表,就是用USBD.dll中的RegisterClientDriverID和RegisterClientSettings两个函数,少不了LoadLibrary,GetProcAddress,FreeLibrary。网上看到过一个问题,问驱动程序不是被USBD进程加载的么?为什么不能直接用这个两个函数,还要LoadLibrary和GetProcAddress来调用这些函数呢?我不知道怎么去解答这个问题,只觉得即使在一个进程里面,似乎不这样你也得不到这两个函数的地址吧。至于到处都说USBInstallDriver里面不要用Reg的API函数去操作注册表,却没有个所以然,这个应该是因为这些注册表主键可能会根据操作系统的变更而变更的,而不论你是哪个操作系统,RegisterClientDriverID和RegisterClientSettings都会找到对应的正确的注册表主键去添加值,所以建议不要用regAPI来操作,换句话说你用了RegAPI去操作注册表,写入信息,也不会有什么问题,除非你的wince系统中那些驱动信息不应该写在那几个主键下了。 要注意的一点是:在RegisterClientSettings的参数中,给的USB_DRIVER_SETTINGS(内有9个ID)如果和你的设备的ID对不上,结果就是系统仍然不能够通过注册表信息加载你的驱动程序,所以,那个提示你输入驱动程序的对话框还会继续弹出来,但是USBInstallDriver成功返回的话,其中写入注册表的信息是成功写入了的(如果不成功,也会继续弹出那个对话框)。 在USBInstallDriver函数调用完之后,驱动程序dll会被释放掉,然后系统再读取注册表信息去找匹配的驱动来加载,所以才会出现上述情况。因此如果你写入的USB_DRIVER_SETTINGS是和你的设备匹配的,系统就会加载你的驱动,去继续干活了。 |
|