首页
社区
课程
招聘
DeviceIoControl问题
发表于: 2013-4-4 01:06 5098

DeviceIoControl问题

2013-4-4 01:06
5098
RING3下DeviceIoControl的时候一直报错,内存0x00000000不能写入。
懒得装SEH就没查错误码了。

int buffer[4] = {0};
int length = 0;
(HDriver,CTLCode1,&buffer,4,NULL,NULL,(LPDWORD)&length,NULL);


驱动端根本没收到IRP。。。
而在之前执行
DeviceIoControl(HDriver,CTLCode2,NULL,0,NULL,NULL,NULL,NULL);

则一切正常,也就是说,用了输入缓冲区后就出错。
获取的句柄没问题,有读写权限。
BUFFERED和DIRECT_IO都试过,一样。
HELP

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
2
(HDriver,CTLCode1,buffer,4*sizeof(int),NULL,NULL,(LPDWORD)&length,NULL);
2013-4-4 01:15
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
很明显,第四个参数,输入缓冲区大小不匹配
而应该是sizeof(buffer)
或楼上的4*sizeof(int)
2013-4-4 08:46
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
4

我想说我试过
int p = 0;
(HDriver,CTLCode1,p,sizeof(p),NULL,NULL,(LPDWORD)&length,NULL)
之类的,还是这个错误
2013-4-4 09:15
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
5
之前试过
int p =0;
HDriver,CTLCode1,p,sizeof(p),NULL,NULL,(LPDWORD)&length,NULL)
不行。。
现在换成
DeviceIoControl(HDriver,CTLCode1,&buffer,sizeof(buffer),NULL,NULL,&length,NULL);
也不行
第四个参数出错应该只会溢出吧,不会出现往0x00000000写入的情况……
2013-4-4 09:18
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
DeviceIoControl(HDriver,CTLCode1,&buffer,sizeof(buffer),NULL,NULL,NULL,NULL);
2013-4-4 09:25
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
7
问题依旧,前面试过这个参数了。。
顺便补充HANDLE部分
HANDLE HDriver = CreateFile(L"\\\\.\\MyDevice00",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM,0);

HANDLE是正常的
2013-4-4 09:29
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
如果提示内存0x00000000不能写入,应该是输出缓冲区为空
要不用OD单步一下相关地址,或许很快就能找到原因
2013-4-4 09:34
0
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
9
FILE_SHARE_READ | FILE_SHARE_WRITE
2013-4-4 10:23
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
10
驱动里irp都木有收到,输出缓冲为空的话应该是驱动返回的时候才出错。。。
另外驱动里木有用到输出缓冲。。。
2013-4-4 10:26
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
11
这两种标志有啥区别么。。回去试试
2013-4-4 10:42
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
12
额,没看仔细,漏了一个标志。。
前面为了省事ring3部分copy了一下次还是自己好好查msdn,再也不抄代码了。。
下午回去测试结贴
2013-4-4 11:29
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
13
改了共享标志还是老样子
2013-4-4 17:02
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
14
找到问题了。。。上一个DeviceIoControl的参数问题,没指定lpBytesReturn
都是偷懒没查MSDN惹得祸
分数两位各一半吧,谢谢两位耐心解答
2013-4-4 18:46
0
游客
登录 | 注册 方可回帖
返回
//