Windows驱动开发笔记(3)---应用程序和驱动程序之间通信

在Windows下,应用程序和驱动程序通信的过程是:

应用程序通过CreatFile函数打开设备
然后可以使用DeviceControl完成和KMDF的双向通信
使用ReadFile完成从KMDF读数据
使用WriteFile完成写数据给KMDF
应用程序退出时,使用CloseHandle关闭设备

1.打开设备
应用程序打开设备可以通过两种方式进行:使用GUID接口或者符号链接名。应用程序获得该设备的句柄后就可以完成和驱动通信。打开设备函数为CreateFile调用。
1.GUID接口
GetDevicePath(IN LPGUID InterfaceGuid)
2.符号链接名方式
KMDF驱动程序创建符号链接名的函数是WdfDeviceCreateSymbolicLink();

2.关闭设备
退出应用程序之前,调用CloseHandle函数关闭设备,系统调用EvtFileClose例程。

3.DeviceIoControl例程
如果CreateFile函数调用成功,应用程序就可以使用DeviceIoControl例程完成和KMDF之间的通信
DeviceIoControl函数原型如下:

BOOL   DeviceIoControl(
   HANDLE   hDevice,                      //CreateFlle返回的设备句柄
   DWORD    dwIoControlCode,              //应用程序调用驱动的控制命令
   LPVOID   lpInBuffer,                   //应用程序传给驱动的缓存地址
   DWORD    nInBufferSize,                //应用传给驱动的字节长度
   LPVOID   lpOutBuffer,                  //存放驱动返回数据的缓存地址
   DWORD   nOutBufferSize,                //驱动返回数据的字节数
   LPDWORD   lpBytesReturned,             //
   LPOVERLAPPED  lpOverLapped 	  
);

dwIoControlCode参数是应用程序调用驱动的控制命令

4.ReadFile和WriteFile

BOOL   ReadFile(
HANDLE        Hfile,                        //CreateFile返回句柄
LPVOID        lpInBuffer,                    //驱动返回数据缓冲区地址
DWORD         nNumberOfBytesToRead,         //返回字节数
LPDWORD       lpNumberOfBytesRead,          //
LPOVERLAPPED  lpOverLapped 
)
BOOL   WriteFile(
HANDLE        Hfile,                         //CreateFile返回句柄
LPCVOID        lpInBuffer,                    //应用传给驱动数据缓冲区地址
DWORD         nNumberOfBytesToRead, 
LPDWORD       lpNumberOfBytesWritten,
LPOVERLAPPED  lpOverLapped 
);




未完待续
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值