如何建立应用程序和驱动程序间的通信
2006-07-20 11:39:30 来源:WEB开发网驱动程序是为设备的硬件层编程服务的,但同样需要提供和应用程序进行通信的能力,从而最终达到应用程序控制设备的目的。本文主要讨论应用程序与驱动程序的通信和驱动程序与应用程序的通信。
在Windows中,应用程序实现与WDM通信的过程是:应用程序先用CreateFile函数打开设备,然后用DeviceIoControl和WDM进行通信,包括从WDM读数据和写数据给WDM两种情况,也可用ReadFile从WDM中读数据或用WriteFile写数据给WDM。当应用程序退出时,用CloseHandle关闭设备。
以下是用DeviceIoControl写数据给WDM的源代码:
void Test_P9052_IOCTL_805_WriteBase3(void)
{
ULONG nOutput; // Count written to bufOutput
// 传给驱动程序要写入的参数和数据
// 数组的第一个元素为写入的偏移地址,第二个元素为数据的个数,其它元素为写入的数据
ULONG bufInput[IOCTL_INBUF_SIZE+2];
ULONG offset; // 写入的偏移地址
ULONG num; // 写入的初始数据,以此来产生一个数组
printf("\n----------- ready for writing to Base3 -----------");
//获取写入的偏移地址
printf("\nPlease input the offset of the write operation(Hex):");
scanf("%x",&offset);
// //获取写入的数据个数
bufInput[0]=offset;
bufInput[1]=IOCTL_INBUF_SIZE;
//获取写入的数据
printf("\nPlease input the initial data to write(Hex):");
scanf("%x",&num);
for(ULONG j=0;j<IOCTL_INBUF_SIZE;j++)
{
bufInput[2+j]=num;
num+=0x0;
}
//显示生成的数组
for(ULONG i=0;i<IOCTL_INBUF_SIZE+2;i++)
{
printf("\nwrite data[%d]=%x",i,bufInput[i]);
}
// Call device IO Control interface in driver
if (!DeviceIoControl(hDevice,
P9052_IOCTL_805_WriteBase3,
bufInput,
(IOCTL_INBUF_SIZE+2)*4,//sizeof(bufInput),
NULL,//bufOutput,
0,//sizeof(bufOutput),
&nOutput,
NULL)
)
{
printf("\nERROR: DeviceIoControl returns %0x.", GetLastError());
Exit(1);
}
printf("\n\n");
}
以下是用DeviceIoControl从WDM中读数据的源代码:
更多精彩
赞助商链接