分享

WinCE流式接口驱动架构【转】

 lhzstudio 2012-05-09

1、流式接口驱动程序简介

       驱动程序是对底层硬件的抽象。应用程序开发者不需要真正理解底层驱动的工作原理,他们只需要通过Windows CE提供的API函数,就可以直接与硬件进行交互。

       WinCE的流式接口驱动程序以动态链接库的形式存在,由设备管理器(通常是device.exe或者gwes.exe)统一加载、管理和卸载。与具有单独目的的内部设备驱动程序相比,所有流式接口驱动程序都是用同一接口并调用同一个函数集。

       每个流式接口驱动程序必须实现一组标准的函数,用来完成标准的文件I/O函数和电源管理函数,这些函数提供给WinCE操作系统的内核使用。这些函数通常叫做流式接口驱动程序的DLL接口,如表3-1所示:

表3-1 流式接口驱动程序要实现的DLL接口:

函数名称

描述

XXX_Close

在驱动程序关闭时应用程序通过CloseHandle函数调用这个函数

XXX_Deinit

当设备管理器卸载一个驱动程序时调用这个函数

XXX_Init

当设备管理器初始化一个具体设备时调用这个函数.

XXX_IOControl

上层的软件通过DeviceIoControl函数可以调用这个函数

XXX_Open

在打开一个设备驱动程序时应用程序通过CreateFile函数调用这个函数

XXX_PowerDown

在系统调用前调用这个函数

XXX_PowerUp

在系统从新启动前调用这个函数

XXX_Read

在一个设备驱动程序处于打开状态时由应用程序通过ReadFile函数调用

XXX_Seek

对设备的数据指针进行操作,由应用程序通过SetFilePointer函数调用

XXX_Write

在一个设备驱动程序处于打开状态时由应用程序通过WriteFile函数调用.

       在实际开发中接口名称中的XXX三个字母由设备驱动的设备名前缀代替,例如,如果一个流式接口驱动程序的设备文件名前缀为“STR”,那么它相应要实现的DLL接口为STR_Close,STR_Deinit,STR_Init,STR_Read等。

       下面介绍几个主要的流式接口驱动接口函数:

(1)、DWORD XXX_Open ( DWORD hDeviceContext,

                        DWORD AccessCode,

                        DWORD ShareMode )

参数:DWORD hDeviceContext,设备驱动的句柄,由XXX_Init函数创建式返回;

       DWORD AccessCode,传给驱动程序使用的地址,这个地址跟读和写有关;

      DWORD ShareMode,共享模式,

返回值:返回驱动程序引用实例句柄。

描述:这个函数用于打开一个设备驱动程序,当应用程序准备对某个设备进行读或写操作时,系统必须先执行CreateFile()这个函数用于打开这个设备,这个函数执行后才能执行读和写操作;

(2)、BOOL XXX_Close(DWORD hOpenContext)

参数:DWORD hOpenContext,设备驱动的句柄,由XXX_Open创建。

返回值:调用成功返回TRUE,失败返回FALSE

描述:这个函数用于关闭一个驱动程序的引用实例,应用程序通过CloseHandle()函数来调用这个函数,当执行完这个函数后,hOpenContext将不再有效;

(3)、DWORD XXX_Read( DWORD hOpenContext,

                            LPVOID pBuffer,

                            DWORD Count)

参数:DWORD hOpenContext,由CreateFile()函数返回的句柄;

      LPVOID pBuffer,一个缓冲区地址,用于从驱动读数据;

       DWORD Count,需要读缓冲区的长度

返回值:实际读缓冲区的长度

描述:当一个流式接口驱动程序已经打开后,可以使用ReadFile()函数对这个设备进行 读操作。ReadFile()中的hFile参数对应设备的引用实例句柄hOpenContext,二参数lpBuffer将传给pBuffer,用于表 示要读缓冲区的地址,参数nNumberOfByteToRead将传给Count,表示读取缓冲区的长度。

(4)、DWORD XXX_Write( DWORD hOpenContext,

                            LPVOID pBuffer,

                            DWORD Count)

参数:DWORD hOpenContext,由CreateFile()函数返回的句柄;

      LPVOID pBuffer,一个缓冲区地址,用于从驱动写数据;

       DWORD Count,需要写缓冲区的长度

返回值:实际写缓冲区的长度

描述:当一个流式接口驱动程序已经打开后,可以使用WriteFile()函数对这个设备进行写操作。

(5)、BOOL XXX_IOControl(DWORD hOpenContext,

                           WORD dwCode,

                           PBYTE pBufIn,

                           DWORD dwLenIn,

                           PBYTE pBufOut,

                           DWORD dwLenOut,

                                             PDWORD pdwActualOut)

参数:DWORD hOpenContext,由CreateFile()函数返回的句柄;

   WORD dwCode,用于描述这次IOControl操作的语义,由用户自己定义;

   PBYTE pBufIn,缓冲区指针指向需要传送给驱动程序使用的数据;

   DWORD dwLenIn,要传送给驱动程序使用数据的长度;

   PBYTE pBufOu,缓冲区指针指向驱动程序传给应用程序使用的数据;

   DWORD dwLenOut,要传送给应用程序使用数据的长度;

   PDWORD pdwActualOut,返回实际处理数据的长度;

返回值:调用成功返回TRUE,失败返回FALSE

描述:这个函数通常用于向设备发送一个命令,应用程序使用DeviceIOControl函数来通知操作系统调用这个函数,通过参数dwCode来通知驱动程序要执行的操作。这个函数扩展了流式接口驱动程序的功能。

(6)、DWORD XXX_Init(DWORD dwContext)

参数:DWORD dwContext,指向字符串的指针,通常这个参数都为一个流式接口驱动在注册表内的设置。

返回值:如果调用成功返回一个驱动程序的句柄;

描述:当用户使用一个设备的时候,设备管理器调用这个函数来对设备进行初始化。这个函数并不是由应用程序调用的,而是通过设备管理器提供的ActiveDeviceEx()来调用。函数执行成功后返回一个设备的句柄。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多