社区
C++ 语言
帖子详情
DeviceIoControl 的问题
zqcsh00
2009-05-20 10:21:54
我用DeviceIoControl 来跟驱动程序通讯, 在用户程序中传入一的IO控制号,怎么到驱动程序里头这个号就变了,DeviceIoControl 返回false, 驱动程序用debugview查看,谢谢!
...全文
126
3
打赏
收藏
DeviceIoControl 的问题
我用DeviceIoControl 来跟驱动程序通讯, 在用户程序中传入一的IO控制号,怎么到驱动程序里头这个号就变了,DeviceIoControl 返回false, 驱动程序用debugview查看,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zqcsh00
2009-05-20
打赏
举报
回复
我也敢到很奇怪啊
IoControlCode = IrpStack->Parameters.DeviceIoControl.IoControlCode;
这里的值跟我传进来的已经不一样了
switch(IoControlCode)
{
case xxx:
break;
case xxx:
break;
case xxx:
break;
default:
这里也没有执行到
}
但分发例程还是执行完了,但DeviceIoControl返回false
更奇怪的是我是for执行的,调用同一个DeviceIoControl,
for( int i =0 ; i<1000; i ++ )
{
int vale = i;
DeviceIoControl(hDevice, MY_ControlCode, &vale, sizeof(int),0,0,&dwReturn,NULL);
}
当 i ==500时DeviceIoControl返回false,以后都是false, 我把for从i = 500开始,那他就OK了
从i = 490开始,到了500还是false,很是奇怪.
fiveofhearts
2009-05-20
打赏
举报
回复
驱动方面:
NTSTATUS DriverIoControl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
char* OutputBuffer;
char* InputBuffer;
PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp);
OutputBuffer = Irp->AssociatedIrp.SystemBuffer;
OutputBuffer[0] = '\0';
switch(IrpStack->Parameters.DeviceIoControl.IoControlCode)
{
case 1000
break;
case 1004:
break;
case 1008://得到现在的SSDT
break;
}
Irp->IoStatus.Status = 0;
if (uLen)
Irp->IoStatus.Information = uLen;
IoCompleteRequest(Irp,IO_NO_INCREMENT);
return STATUS_SUCCESS ;
}
应用层:
char OutBuffer[10240];
DWORD dwReturn = 0;
HANDLE hDriver;
LoadDriver(&hDriver);
DeviceIoControl( hDriver, 1000, 0, 0,
OutBuffer, 10240, &dwReturn, 0);
if (dwReturn)
{
}
我自己程序的框架,io控制号我简单的硬编码了,没用标准的宏来弄。
个人感觉你是不是没有在用应用层IO命令的时候没设返回长度变量&dwReturn了?或者是你驱动力返回成功没写好?
zqcsh00
2009-05-20
打赏
举报
回复
GetLastError() = 5 拒绝访问
Device
IoC
ontrol
错误码:error code 87
问题
解决
本文探讨了使用
Device
IoC
ontrol
函数时遇到错误码 87 的原因及解决办法,详细分析了驱动层错误处理不当导致的
问题
,并提供了正确的自定义消息请求处理方式。
Device
IoC
ontrol
在应用程序和驱动程序传递参数的
问题
??
本文探讨了在WinCE5中通过
Device
IoC
ontrol
函数实现应用程序与摄像头驱动交互的
问题
。详细解释了如何正确传递指针参数以获取摄像头数据,并提供了解决方案。
Device
IoC
ontrol
传送自定义结构数据
本文探讨了Windows环境下使用
Device
IoC
ontrol
时遇到的
问题
,特别是当结构体中含有指向缓冲区的指针时如何确保数据的正确传递。通过具体实例说明了在驱动程序中手动调用MapCallerPtr函数的重要性。
Device
IoC
ontrol
传递结构
本文记录了一次使用
Device
IoC
ontrol
时遇到的
问题
:由于MAX_PATH定义错误导致的数据结构不一致。通过WinDbg调试发现,应用层和驱动层中的结构体定义不匹配,将MAX_PATH误认为256而非实际的260。此
问题
提醒我们在进行跨层通信时,确保双方的数据结构定义完全一致的重要性。
调用
Device
IoC
ontrol
引发的几个程序崩溃总结
博主在机房运行自己编写的程序时遇到崩溃
问题
,经排查发现是由于在Windows7系统上调用
Device
IoC
ontrol
函数时传入了空指针。虽然函数说明表示该参数可选,但在Win7下不传可能导致程序崩溃。在Win10下可能有参数检查,因此未引发
问题
。修复方法是为参数分配内存并传递地址。此
问题
强调了程序兼容性和正确使用可选参数的重要性。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章