阅读:1142回复:1
我发现一个问题,应该是微软的BUG
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] |
|
沙发#
发布于: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了。 |
|