原创 WinCE流驱动的各函数的分析整理1

2014-1-1 14:13 1881 11 11 分类: MCU/ 嵌入式

先说明一下,以下的文字,并不全是本人自己写的,一大部分是Ctrl+c过来的,写这篇主要是做一下整理,由于写的匆忙,有不对的地方欢迎大家拍砖。

1DWORD XXX_Init(LPCTSTR pContext, LPCVOID lpvBusContext)

pContext:指向一个字符串,包含注册表中该流接口活动键值的路径,可以通过OpenDeviceKey(pContext)函数获得该驱动的注册表句柄,之后实用相关的API即可对其注册表进行操作;

lpvBusContext:此参数是被处理过的一个指针数据,由函数ActiveDeviceEx 的第四参数lpvParam传递而来(若该对应的驱动由外部ActiveDeviceEx 调用而加载则lpvBusContext被传递过来,否则一般为0)

功能:该函数是驱动挂载后第一个被执行的,一般会在系统初始化时被执行。主要负责完成对设备的初始化操作和驱动的安全性检查。由ActiveDeviceEx通过设备管理器调用。其返回值一般是一个数据指针,一般指向一个自己创建的类或结构体(注意:要使用new来创建,否则返回值会变成野指针。当然使用一个全局变量的指针也可以,但不推荐这么做。)作为函数参数传递给其他流接口函数,当然如不需要使用返回1即可。

2BOOL XXX_Deinit(DWORD hDeviceContext)

hDeviceContextXXX_Init的返回指针值。

功能:整个驱动中最后执行。用来停止和卸载设备。由DeactivateDevice触发设备管理器调用一般在关机时自动使用 。成功返回TRUE即可

3DWORD XXX_Open(DWORD hDeviceContext, DWORD AccessCode ,DWORD ShareMode)

hDeviceContextXXX_Init的返回指针值;

AccessCode访问模式标志,读、写或其他,该值为CreateFile的输入参数

ShareMode驱动的共享方式标志该,值为CreateFile的输入参数

功能:打开设备,为后面的操作初始化数据就够,准备相应的资源。应用程序通过CreateFile函数间接调用。返回一个指针,这个值还作为参数传递给其他接口函数XXX_ReadXXX_WriteXXX_SeekXXX_IOControl,如果XXX_Init返回的结构体数据需要这几个函数中使用,建议该指针指向的结构体或类是XXX_Init返回的结构体的继承或派生,当然也要使用new来创建同样如不需要使用返回1即可。

4BOOL XXX_Close(DWORD hOpenContext)

hOpenContextXXX_Open返回的指针值。

功能:关闭设备,释放资源。由CloseHandle函数关闭驱动时会间接调用该函数。

 

5DWORD XXX_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)

hOpenContextXXX_Open返回值。

pBuffer缓冲区指针,接收数据,由ReadFile传入

Count缓冲区长度,由ReadFile传入

功能:ReadFile函数间接调用,用来读取设备上的数据。返回读取的实际数据字节数。

 

6DWORD XXX_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD Count)

hOpenContextXXX_Open返回值。

pBuffer指针指向将写入的数据,由 WriteFile 传入

Count写入数据的长度,由 WriteFile 传入

功能:WriteFile函数间接调用,把数据写到设备上,返回实际写入的数据数,如返回-1则表示失败。

7BOOL XXX_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn,DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut)

hOpenContextXXX_Open返回值。

dwCode控制命令字,由DeviceIoControl传入。

pBufIn指向输入缓冲区,由DeviceIoControl传入

dwLenIn输入内容的长度,由DeviceIoControl传入。

pBufOut指向输出缓冲区,由DeviceIoControl传入。

dwLenOut输出缓冲区长度,由DeviceIoControl传入。

pdwActualOut实际输出数据长度,由DeviceIoControl传入。

功能:用于向设备发送命令,应用程序通过DeviceIoControl调用来实现该功能。要调用这个接口还需要在应用层和驱动之间建立一套相同的命令,通过宏定义CTL_CODE来实现,当然如果不喜欢用CTL_CODE来实现,也可以用一个常数来实现(其实CTL_CODE宏最终生成的也是一个常数,但更便于理解与维护,所以建议使用CTL_CODE)。 

后面的部分请看“WinCE流驱动的各函数的分析整理2


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /3 下一条