november
驱动牛犊
驱动牛犊
  • 注册日期2002-11-10
  • 最后登录2005-05-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1094回复:1

我发现一个问题,应该是微软的BUG

楼主#
更多 发布于:2004-03-02 15:03
GetPrivateProfileString(AppName, "IPADDRESS", "0", szBuffer, 20, NETRULE_FILE_PATH);

BOOL Status = DeviceIoControl(hDriver,
SET_BUFFER,
(LPVOID)RulesArray,
8192,
NULL,
0,
&dwResult,
NULL);

当不执行
GetPrivateProfileString(AppName, "IPADDRESS", "0", szBuffer, 20, NETRULE_FILE_PATH);
这一句的时候,
BOOL Status = DeviceIoControl(hDriver,
SET_BUFFER,
(LPVOID)RulesArray,
8192,
NULL,
0,
&dwResult,
NULL);
这一句运行正常,但是如果先执行了GetPrivateProfileString,那么DeviceIoControl肯定失败!
奇怪的是GetPrivateProfileString所涉及到的变量与DeviceIoControl涉及到的变量没任何关系!!!而且我用DBGVIEW看了,驱动确实收到了SET_BUFFER的请求。
昨天晚上弄了3个小时,今天弄了一天,终于找到了是这个原因,但是为什么会引发这个问题?5555555555555
怎么解决?

补充一下,要在METHOD_BUFFERED方式下才会出现这个问题
大家救救我,怎么解决

[编辑 -  3/2/04 by  november]

[编辑 -  3/2/04 by  november]
november
驱动牛犊
驱动牛犊
  • 注册日期2002-11-10
  • 最后登录2005-05-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-02 16:46
刚刚又写了个程序在PASSTHRU上测试了一下,结果还是一样。


基本上可以断定:

在METHOD_BUFFERED方式下,如果先调用了GetPrivateProfileString函数。那么DeviceIoControl肯定会失败!返回值肯定为FALSE!!!

驱动里的代码:
{
 case SET_BUFFER:
      Irp->IoStatus.Status = STATUS_SUCCESS;
      Irp->IoStatus.Information = 0L;

      DbgPrint("SETBUFFER\n");

      break;    
 default:
    break;
}


 IoCompleteRequest(Irp, IO_NO_INCREMENT);
DbgPrint("IRP RETURN\n");

return STATUS_SUCCESS;

在DEBUGVIEW里已经看到输出SETBUFFER和IRP RETURN。
但是DeviceIoControl的返回值是FALSE;
如果去掉前面的GetPrivateProfileString调用,返回值就是TRUE了。
游客

返回顶部