105032012008徐飞鸿实验三驱动程序实验.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WinCE中的驱动程序开发 一.实验目的 1、 熟悉WinCE中流式接口驱动程序的12个接口的功能。 2、 掌握流式驱动程序的工作过程。 3、 能够编写出流式接口的驱动程序。 二.实验内容 使用VS2005的智能设备应用程序开发方法,进行网络通信的编程,并通信多线程技术实现服务器与客户端之间的文件传输。 三.实验设备及工具 硬件:PC机一台; 软件:Windows XP操作系统,VS2005开发环境,WinCE 6.0开发环境,或Windows Mobile 5.0 SDK 四.实验步骤及说明 (1) 写出流式接口驱动程序的12个接口,及每个接口的功能。 答:见教材515页 (2) 写出流式驱动程序的工作过程。 答:第一步:加载驱动程序,主要有两种加载方式:(1)当系统启动时,设备管理器搜寻注册表的HKEY_LOCAL_MACHINE\Drivers\BuiltIn键下面的子键,并逐一加载该子键下的每一个驱动,此过程称为BusEnum;(2)应用程序可调用ActivateDeviceEx()函数动态地加载驱动程序。 第二步:设备管理器从注册表的dll键值中获取驱动程序所在的DLL文件名。 第三步:设备管理器调用LoadDriver()函数把该DLL加载到自己的虚拟地址空间中。 第四步:设备管理器在注册表的HKEY_LOCAL_MACHINE\Drivers\Active下,记录所有已经加载的驱动程序。 第五步:设备管理器调用驱动程序中的COM_Init函数,并把上一步中添加的注册表项的完整路径作为COM_Init函数的第1个参数传入驱动程序内。 第六步:在COM_Init中,通常须对硬件进行一些最基本的初始化操作。 通过以上的操作完成流式驱动程序的加载任务。 对驱动程序的操作: 第一步:应用程序使用该设备。首先,应用程序调用CreateFile(TEXT(“COM1”)?.)打开设备。然后,文件系统判断打开的是文件还是设备。最后,如果打开的是设备,就将控制权交回设备管理器。 第二步:设备管理器调用驱动程序的COM_Open()函数打开设备。 第三步:COM_Open()函数把打开设备的结果返回给设备管理器。 第四步:设备管理器把SMP_open()的返回结果,返回给应用程序的CreateFile()函数调用。 通过第七步到第十步,设备已被成功打开,接下来可对设备进行读/写和控制操作。下面将以从设备中读取数据为例。 第一步:应用程序使用CreateFile()调用返回的句柄,调用函数ReadFile(),向设备发送读请求。 第二步:设备管理器调用驱动程序的COM_Read()函数,读取设备的数据信息。在此过程中,COM_Read()函数可与硬件交互,从硬件中读取必要的信息。然后返回给设备管理器,再返回给应用程序。 最后,当应用程序不再使用该设备时,它可调用CloseHandle()将设备关闭。 (3)实验过程及主要代码分析: a. 写出两种导出动态链接库接口的方法 答:导出动态链接库接口的方法,主要有以下两种: 第一种,使用动态链接库的导出文件,即 .DEF文件 LIBRARY GenDriver EXPORTS GEN_Init GEN_Deinit GEN_PreDeinit GEN_Open GEN_Close GEN_PreClose GEN_Read GEN_Write GEN_Seek GEN_PowerDown GEN_PowerUp GEN_IOControl 第二种,使用__declspec(dllexport)关键字 __declspec(dllexport) DWORD GEN_Init (DWORD dwContext); __declspec(dllexport) BOOL GEN_PreDeinit (DWORD dwContext); __declspec(dllexport) BOOL GEN_Deinit (DWORD dwContext); __declspec(dllexport) DWORD GEN_Open (DWORD dwContext, DWORD dwAccess, DWORD dwShare); __declspec(dllexport) BOOL GEN_PreClose (DWORD dwOpen); __declspec(dllexport) BOOL GEN_Close (DWORD dwOpen); __declspec(dllexport) DWORD GEN_Read (DWORD dwOpen, LPVOID pBuffer, DWORD dwCount); __declspec(dllexport) DWORD GEN_Write (DWORD dwOpen,

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档