阅读:1740回复:5
DeviceIoControl的奇怪问题,望大家帮忙(80分)
我在使用DeviceIoControl想驱动传数据的时候,第一次可以成功,而且,我在Dispatch中也检查了这个参数,传入的数据(包含地址)都是正确的,但DeviceIoControl的返回值是1,但我用GetLastError中可以看到其CODE为183,但DeviceIoControl却完成了。
当我发第二个IOCTL的时候,发现下面没有收到通过InputBuffer传下去的指针(是一个应用层的指针)在下面没有收到,但其它的参数都收到了的(比如Buffersize和functioncode),而且也是正确的。 我不知道我是在那里做错了,但感觉没有这个问题。 我查了ErrorCode 为183的错误,是说的一个句柄已经被打开,我想知道驱动的设备是不是不允许被多次打开呢? 很急!!!望大家支持 |
|
沙发#
发布于:2003-05-08 15:19
我在使用DeviceIoControl想驱动传数据的时候,第一次可以成功,而且,我在Dispatch中也检查了这个参数,传入的数据(包含地址)都是正确的,但DeviceIoControl的返回值是1,但我用GetLastError中可以看到其CODE为183,但DeviceIoControl却完成了。 可以多次打开的, 但是打开一次后再打开就会出现你那种情况了(返回非零值) 多次打开应该不会影响数据的传递, 我姑计是你传递的参数有问题. |
|
|
板凳#
发布于:2003-05-09 09:32
shrimp,谢谢你的回答,刚才已经试过,单独只是传一个指针下去是不会遭的,比如,我就只是传一个进程句柄。在下面能够看到。
你的意思是即使它返回值是非0的也是正确的???? 但如果我传一个比较的数据,大概有100多个字节,就会出现所描述的情况,不明白是什么意思?? 有没有比较详细的将DeviceIoControl调用后的IRP的过程的资料,如果可以看到系统的操作,就比较简单了 |
|
地板#
发布于:2003-05-09 10:51
shrimp,谢谢你的回答,刚才已经试过,单独只是传一个指针下去是不会遭的,比如,我就只是传一个进程句柄。在下面能够看到。 1、该不会是你CreateFile,没有CloseHandle吧? 2、DeviceIoControl正确返回值就是1呀。 3、不必考虑系统关于IRP的调用过程。肯定是自己的程序出现了问题。 |
|
地下室#
发布于:2003-05-09 12:10
问题已经解决了,谢谢大家,
希望大家注意CTL的定义,如果你是自己定义的话,还有定义的传输方式跟内核的处理的影响 再次感谢大家的关注 |
|
5楼#
发布于:2003-05-09 15:17
刚有空上来!看到你已经解决了!也可以互相学习。
|
|
|