流驱动函数

1、流驱动固定有是个函数需要实现XXX_Init        XXX_Deinit     XXX_Open      XXX_Close       XXX_Read        XXX_Write     XXX_Seek        XXX_IOControl  XXX_PowerDown   XXX_PowerUp     

2、流接口驱动函数介绍:

1)DWORD XXX_Init(LPCTSTR pContext, LPCVOID lpvBusContext)

pContext:指向一个字符串,包含注册表中该流接口活动键值的路径

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

该函数是驱动挂载后第一个被执行的。主要负责完成对设备的初始化操作和驱动的安全性检查。由ActiveDeviceEx通过设备管理器调用。其返回值一般是一个数据结构指针,作为函数参数传递给其他流接口函数。

 

2)BOOL XXX_Deinit(DWORD hDeviceContext)

hDeviceContextXXX_Init的返回值。

整个驱动中最后执行。用来停止和卸载设备。由DeactivateDevice触发设备管理器调用。成功返回TRUE。

 

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

hDeviceContextXXX_Init的返回值。

AccessCode访问模式标志,读、写或其他。

ShareMode驱动的共享方式标志

打开设备,为后面的操作初始化数据就够,准备相应的资源。应用程序通过CreateFile函数间接调用之。返回一个结构指针,用于区分哪个应用程序调用了驱动,这个值还作为参数传递给其他接口函数XXX_Read、XXX_Write、XXX_Seek、XXX_IOControl。

4)BOOL XXX_Close(DWORD hOpenContext)

hOpenContextXXX_Open返回值。

关闭设备,释放资源。由CloseHandle函数间接调用。

 

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

hOpenContextXXX_Open返回值。

pBuffer缓冲区指针,接收数据。

Count缓冲区长度。

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

 

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

hOpenContextXXX_Open返回值。

pBuffer缓冲区指针,接收数据。

Count缓冲区长度。

WriteFile函数间接调用,把数据写到设备上,返回实际写入的数据数。

 

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

hOpenContextXXX_Open返回值。

dwCode控制命令字。

pdwActualOut实际输出数据长度。

用于向设备发送命令,应用程序通过DeviceIoControl调用来实现该功能。要调用这个接口还需要在应用层和驱动之间建立一套相同的命令,通过宏定义CTL_CODE(DeviceType, Function, Method, Access来实现。如:

#define IOCTL_INIT_PORTS / CTL_CODE(FILE_DEVICE_UNKNOWN,0X801,METHOD_BUFFERED,FILE_ANY_ACCESS)

 

8)void XXX_PowerDown(DWORD hDeviceContext)

hDeviceContextXXX_Init的返回值。

              负责设备的上电控制。

 

9)void XXX_PowerUp(DWORD hDeviceContext)

hDeviceContextXXX_Init的返回值。

       负责设备的断电控制

 

10)            DWORD IOC_Seek(DWORD hOpenContext, long Amount, WORD Type)

hOpenContextXXX_Open返回值。

              Amount指针的偏移量。

              Type指针的偏移方式。

将设备的数据指针指向特定的位置,应用程序通过SetFilePointer函数间接调用。不是所有设备的属性上都支持这项功能。

3、函数的执行时间如下

XXX_Init        加载驱动时调用

XXX_Deinit      卸装驱动时调用
XXX_Open        打开驱动CreateFile时调用
XXX_Close       关闭驱动CloseHandle时调用
XXX_Read        ReadFile时调用
XXX_Write       WriteFile时调用
XXX_Seek        SetFilePointer时调用
XXX_IOControl   DeviceControl时调用
XXX_PowerDown   系统进入休眠时调用
XXX_PowerUp     系统重新启动时调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值