Windows CE下流驱动的动态加载


Windows CE下流驱动的动态加载

    

    闲话少说,进入正题。查找EVC的帮助,发现函数ActivateDevice()可用来加载驱动程序。而这个函数的使用是相当简单的。我就不多说了,贴上一段帮助最能说明问题。当然,你也可以用ActivateDeviceEx()。

HANDLE ActivateDevice (

LPCWSTR lpszDevKey,

DWORD dwClientInfo

);

Parameters

lpszDevKey

[in] Pointer to the registry path string of thedevice's driver key underHKEY_LOCAL_MACHINE. A driver key contains theDLL name, the device prefix, friendly name, and other device information.

dwClientInfo

[in] Data that will be stored in the device'sActivekey in the ClientInfo value. The registry path to the driver'sActivekey is passed in as the context parameter to the device'sXXX_Initfunction. The value indwClientInfo is stored in the registry before XXX_Initis called.

Return Values

On success, ActivateDevicereturns a handle to the device that can be used in subsequent calls toDeactivateDevice.

Remarks

This function is superseded byActivateDeviceEx.

ActivateDevice loads a devicedriver. ActivateDevice reads the registry key specified in lpszDevKey to getthe DLL name, device prefix, index, and other values. Next it adds the deviceto the active device list in the registry branch HKEY_LOCAL_MACHINE\Drivers\Active,and stores the relevant values there. If no device index was specified in thekey named inlpszDevKey, then it assigns a free index. Then it loads thedevice driver DLL in the process space of the Device Manager. Then itbroadcasts a WM_DEVICECHANGE message for the new device and triggers aNOTIFICATION_EVENT_DEVICE_CHANGE event in the application notification systemto notify applications of the presence of the new device.

从上面的描述中可以看到,在使用该函数时,我们只要给出第一个参数就可以,而这个参数是注册表中的一个路径字符串。所以,要想很方便的动态加载任意一个驱动,我们还要了解一下有关注册表的内容。但其中最核心的就是一条,把你驱动的相关注册表信息放到HKEY_LOCAL_MACHINE下,主要内容包括PrefixDLLIndexOrder等信息。这里就不展开说明了。

    自己起初费了那么多冤枉时间,实在很郁闷。原理摸清后就做了一个小工具,实现动态加载流驱动,以提高开发效率,也能方便后来人。下面就详细介绍这个小工具的使用过程,让大家体验一下动态加载流驱动是多么畅快的一件事情。

    我们假设已经做好一个简单的流驱动DrvDemo.dll,其对应的注册表文件为DrvDemo.reg,用来测试驱动的应用程序DrvDemo.exe。我们把这三个文件和驱动调试助手(DM.exe)都拷贝到WinCE系统上,如下图所示。

     首先运行DrvDemo.exe,点击打开设备,或者其他按钮,我们发现打开设备失败,很正常,此时DrvDemo.dll还没有工作呢。

     运行驱动调试助手软件DM.exe,点击“驱动调试”菜单——选择“导入注册表”,浏览到我们准备好的注册表文件DrvDemo.reg,选中并点击OK按钮,这样,DrvDemo.reg中的内容就已经导入到系统中了,相应的信息能在“操作信息回显”中看到。

     此时你可以直接点击“驱动调试”菜单下的“激活驱动”,当然你也可以打开“驱动调试”——“驱动列表”,进而选择激活该驱动。正常情况下,操作回显中就会提示你“加载驱动成功”。

     这时,再到DrvDemo.exe点击打开设备,就完全没有问题了。

如果在测试时,发现驱动有问题,那么你可以选择“卸载驱动”,然后将修改好的新的驱动拷贝过来,再点击“激活驱动”菜单。如此往复,直至调试成功。

至此,我们采用了通过导入注册表文件的方法激活驱动。下面再说说在没有注册表文件时直接通过浏览DLL文件本身来加载驱动的方法。先把刚刚加载的驱动卸载了。

运行驱动调试助手软件,点击“驱动调试”菜单——选择“浏览DLL文件”,浏览到我们准备好的DrvDemo.dll文件。在弹出的对话框中设置正确的Prefix、Order、Index信息,点击“确定”。

同样,此时你可以直接通过“驱动调试”下的“激活驱动”直接激活该驱动,或者从“驱动列表”中激活.

其余的操作跟上面讲的完全一样了,不再重复。

     怎么样,这种方法就很类似于Linux下的Insmod和Rmmod了吧?^_^

     其实,如果在注册表中已经有了相应的键,你甚至可以直接选中它,然后在“驱动调试”中选择“激活驱动”,如果一切正常,也可以达到上面两种方法的效果,但这样就连导入文件都省了。有兴趣的同志可以自己试一下。

好了,我相信到这里,大家应该对动态加载流驱动的原理和方法都了解了,也能从此摆脱不断MakeImg和Download的梦魇,节省很多宝贵的开发时间。

    最后,针对驱动调试助手简单说明一下几个要注意的地方。

1.       在调试驱动时,加载完驱动后,千万不要关闭驱动调试助手,最小化就行,否则,它会在关闭时自动卸载掉你所加载的驱动。

2.       在WinCE4.2中,有关中断的驱动是无法直接用此方法来动态加载的,而在5.0和6.0中不会有此限制。这是因为WinCE4.2中的中断处理机制所致。

3.       驱动调试助手可以同时加载几个驱动,这时候建议将所有注册表信息写到一个文件中,并导入。剩下的工作就是从驱动列表中选择加载你所需要的驱动了。

4.       驱动调试助手中的注册表编辑功能经过几番修改,已基本完善,编辑、导入、导出都没有问题。如果系统支持HIVE-REG,在退出驱动调试助手时,可以选择保存此次的注册表修改。

5.      上面的截图是在WinCE6.0的模拟器上面做的,应该算是内核态的驱动,至于用户态的驱动也可以通过该方法加载,但是需要设定相应的注册表信息。

6.       做这样一个小工具,主要是想提高自己的工作效率。现在贴出来,希望也能为同道中人所用。在使用该程序时有任何问题,请发邮件到wince.he@gmail.com,我会尽力解决。本篇中的视频录像和最新版的驱动调试助手可以在http://files.cnblogs.com/we-hjb/WINCEDM.rar下载到。

上面所讲的并不是新鲜或者高深的技术,但相信对某些技术人员还是有一定的帮助。当然,文中有不尽如人意处,还请你见谅。以后争取多写一点东西,跟大家一起学习Windows Embedded。

最后,希望不要被认为是“广告性质的文章”。^_^

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理,美食推荐管理,酒店推荐管理,周边推荐管理,分享圈管理,我的收藏管理,系统管理。用户可以在微信小程序上注册登录,进行每日签到,防疫查询,可以在分享圈里面进行分享自己想要分享的内容,查看和收藏景点以及美食的推荐等操作。因而具有一定的实用性。 本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得旅游社交小程序管理工作系统化、规范化。 管理员可以管理用户信息,可以对用户信息添加修改删除。管理员可以对景点推荐信息进行添加修改删除操作。管理员可以对分享圈信息进行添加,修改,删除操作。管理员可以对美食推荐信息进行添加,修改,删除操作。管理员可以对酒店推荐信息进行添加,修改,删除操作。管理员可以对周边推荐信息进行添加,修改,删除操作。 小程序用户是需要注册才可以进行登录的,登录后在首页可以查看相关信息,并且下面导航可以点击到其他功能模块。在小程序里点击我的,会出现关于我的界面,在这里可以修改个人信息,以及可以点击其他功能模块。用户想要把一些信息分享到分享圈的时候,可以点击新增,然后输入自己想要分享的信息就可以进行分享圈的操作。用户可以在景点推荐里面进行收藏和评论等操作。用户可以在美食推荐模块搜索和查看美食推荐的相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值