键盘驱动deviceIoControl应用层无法将字符串写入文件
各位大神,小弟小学期,遇到了一个比较奇怪的问题,就是我们做了一个键盘驱动,就是通过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根本不能写出去,请教各位驱动大牛解答我的问题啊,感激不尽~~~