各位大神,小弟小学期,遇到了一个比较奇怪的问题,就是我们做了一个键盘驱动,就是通过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 -->
|