当应用程序与设备的通信结束时,对于此设备驱动程序的句柄就必须通过CloseHandle API释放出来。当其中的一个应用程序调用CloseHandle函数,驱动程序首先收到“清除”IRP,驱动程序应当在“清除”例程中清除和此设备有关的待处理的IRP。然后收到“关闭”设备对象。到此,一个完整的通信过程就完成了。
4、应用程序的工作过程
应用程序在工作前首先要获得设备的内部名,按内部名打开其驱动程序,然后发送控制代码。如图1所示。

图1 应用程序的工作过程
设备的内部名是操作系统为设备分配的全局唯一的标识符,需要用操作系统的API来获得。具体的过程如下:
a.通过GUID号获得设备信息句柄;
b.通过设备信息句柄获得设备接口句柄;
c.用设备接口句柄获取设备详细信息;
d.在设备详细信息中取得设备内部名;
e.释放所用的内存资源。
获得设备的内部名后,调用CreateFile函数就可打开设备的驱动程序,该函数返回一个指向驱动程序的句柄。
取得了驱动程序的句柄后,调用函数DeviceIoControl就可发送控制代码对设备进行通信。
5、开发工具
应用程序是用Visual C++6.0来编写的。Visual C++6.0是Microsoft公司在1998年推出的基于Windows9x和WindowsNT的优秀集成开发环境。它的主要优点如下:
(1) Visual C++的最大特色就是提供面向对象技术的支持,它利用类把大部分与用户界面设计有关的函数封装起来,通过MFC(Microsoft Foundation Class)类库的方式提供给开发人员使用,大大提高了程序代码的重用性。
(2) Visual C++提供一个功能强大的应用程序生成向导------AppWizard。AppWizard将帮助MFC类库的用户自动生成一个运行程序框架------一个空的不能做任何事情的应用程序,而用户只需要在该框架的适当部分扩充代码就可以得到一个满意的应用程序。
(3) Visual C++利用“所见即所得”的方式完成程序界面的设计,大大减轻了程序设计人员的劳动强度,提高了开发效率。
(4) Visual C++的功能强大,用途广泛,不仅可以编写普通的应用程序,还能很好地进行系统软件及通信软件的开发。
结束语:功能强大的USB规格已经成为PC的众多标准之一,钻研计算机科技的种种发展,都离不开USB的相关知识。本文创新点:使用USB通信方面的具体协议,设计相应的应用程序完成USB设备与PC主机的具体通信,设计出适合用户需求的USB设备。研制出此检测系统,不仅能快速检测出雷达的多种性能参数,而且使用方便、体积小、便于携带、稳定性好,极大地改善了检测手段和方法,提高了效率,在装备检测和维修上产生了极大的军事效益和经济效益(50万元)。
参考文献:
1. 许永和,健莲科技改编 USB外围设备设计与应用 北京:中国电力出版社,2002.
2. 朱玉军等,基于USB和目标识别的图像采集系统的设计实现,微计算机信息,2006年1-1期,P89-91。
3. USB interface device with parallel bus http:www.semiconductors.Philips.com
4. 林勇、宋征 著,“VC++6.0应用指南”,人民邮电出版社,1999
5. PDIUSBD12 Data sheet, http://www.Philip.com, 2000。
6. 王朔 李刚,USB 接口器件PDIUSBD12 的接口应用设计[J],单片机与嵌入式系统应用2002年4月
7. 王洪 顾本斗 ,USB 设备的开发 [J],计算机工程与设计,2002年,第3期:61。
8.武安河、周利莉著,“Windows设备驱动程序开发实务”,电子工业出版社,2001