社区
C++ 语言
帖子详情
DeviceIoControl 的问题
zqcsh00
2009-05-20 10:21:54
我用DeviceIoControl 来跟驱动程序通讯, 在用户程序中传入一的IO控制号,怎么到驱动程序里头这个号就变了,DeviceIoControl 返回false, 驱动程序用debugview查看,谢谢!
...全文
127
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
用于和应用层和驱动层之间的数据传送。是应用层调用驱动文件(SYS)中的控制请求的重要方法。今天在使用
Device
IoC
ontrol
调用一个自行编写的驱动程序的使用返回值总是FALSE,使用GetLastError获得错误码为87这个错误码对应的错误是:参数不正确。可是应用层的参数怎么看都没有
问题
。最终发现是驱动层的编码出现了
问题
。在驱动层的分发函数中,在指定的控制请求分支,完成自定义的请求业务逻辑之后应该调用: status=irp->IoStatus.Status;来返回
Device
IoC
ontrol
在应用程序和驱动程序传递参数的
问题
??
WINCE5中,在应用程序中,单击一个按钮,然后在执行以下代码 void CDiscDlg::OnDiscCapture() { // TODO: Add your c
ontrol
notification handler code here BYTE *pDisplayBuffer;
Device
IoC
ontrol
(m_hCameraFile, CAM_
IOC
TL_SAMSUNG
调用
Device
IoC
ontrol
引发的几个程序崩溃总结
为了程序的兼容性,调用
Device
IoC
ontrol
时不要传入空指针。
Device
IoC
ontrol
传送自定义结构数据
//======================================================================== //TITLE: //
Device
IoC
ontrol
和结构体内嵌指针 //AUTHOR: // norains //DATE: // Thursday 21-August-2008 //Environment: /
Device
IoC
ontrol
传递结构
当使用
Device
IoC
ontrol
传递一个结构给驱动时,未出现意料结果。在WinDbg中查看,发现结构字符串未与结构成员对应,位置不对。原来是把MAX_PATH当成了256在驱动中#define,实际上是260。所以位置对不上。应用层结构一定要和驱动中结构一致啊!!!WinDbg真是好东西!!!
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章