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

liuz1218 2012-07-04 01:38:16
各位大神,小弟小学期,遇到了一个比较奇怪的问题,就是我们做了一个键盘驱动,就是通过IOCTL实现内核层和应用层内存共享,再由应用层读出数据并作处理,但是,昨天已经实现了DeviceIoControl的数据传到应用层,并通过应用层的程序实现的一个循环等待线程,在命令行已经成功通过printf读出了数据。但是我在printf下面尝试使用fprintf把他读入文件的时候,就出现了问题,文件的大小根本没有变化,一直都是读不进去数据,应用层程序如下所示:
#include<windows.h>
#include<stdio.h>
#include<string>


#include<winioctl.h>
#include "Ioctls.h"

int main()
{ FILE *file;
int i =0;
int j;
CHAR ReceiveBuffer[100];
HANDLE hDevice =
CreateFile("\\\\.\\sbKlog",
GENERIC_READ | GENERIC_WRITE,
0, // share mode none
NULL, // no security
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL ); // no template);
if (hDevice == INVALID_HANDLE_VALUE)
{
printf("Failed to obtain file handle to device: "
"%s with Win32 error code: %d\n",
"MyWDMDevice", GetLastError() );
return 1;
}
if(!(file=fopen("klog.txt","w"))){
printf("error");
exit(0);
}
while(1){
CHAR c[]="sb";
UCHAR OutputBuffer[10];
UCHAR InputBuffer[10];
DWORD dwOutput;
UCHAR result_1[]="false";
UCHAR result_2[]="invalid";
UCHAR result_3[]="";
UCHAR* result;
BOOL bRet=false;
BOOL print=false;



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


}
if(print==true){
for(i=0;i<dwOutput;i++)
fprintf(file,"%c",OutputBuffer[i]);
}
}
}

fclose(file);
CloseHandle(hDevice);

return 0;
}
我尝试了其他地方写文件,最后得到了一个结论,就是在最后一个else里面产生的OutputBuffer根本不能写出去,请教各位驱动大牛解答我的问题啊,感激不尽~~~
...全文
161 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuz1218 2012-07-04
  • 打赏
  • 举报
回复
我已经解决了,跟你说一下吧,就是dwOutput是内核层传到共享内存里面的数据的大小,就像我这里按一下键盘,那么dwOutput就是按下的字符的长度,
曹大夯 2012-07-04
  • 打赏
  • 举报
回复
printf("Output buffer:%d bytes\n",dwOutput);
打印结果是什么?dwOutput值是什么?

把执行结果/打印信息贴出来看一下,大家才好理解你的执行结果.

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧