首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

关于DeviceIoControl返回87,该怎么处理

2012-03-05 
关于DeviceIoControl返回87试图使用DeviceIoControl向过滤驱动发送控制代码。 源代码如下:#define START_FI

关于DeviceIoControl返回87
试图使用DeviceIoControl向过滤驱动发送控制代码。 源代码如下:
#define START_FILTER CTL_CODE(FILE_DEVICE_CD_ROM_FILE_SYSTEM,XD_CTL_CODE_READONLY,METHOD_BUFFERED,FILE_ANY_ACCESS) 
#define STOP_FILTER CTL_CODE(FILE_DEVICE_CD_ROM_FILE_SYSTEM,XD_CTL_CODE_WRITABLE,METHOD_BUFFERED,FILE_ANY_ACCESS) 
//XD_CTL_CODE_READONLY 为驱动程序中定义的控制代码
#define erron GetLastError() 
....
//传递启动的I/O控制代码 
if (!( DeviceIoControl(hDevice,START_FILTER,NULL,0,NULL,0,NULL,NULL))) 

#ifdef DEBUGMSG 
printf("XD_CTL_CODE_READONLY DeviceIoControl() GetLastError reports [%d]\n",erron); 

#endif 
CloseHandle(hDevice); 
return FALSE; 


//=================================================================================================
结果DeviceIoControl函数返回错误码87,即ERROR_INVALID_PARAMETER 87 (0x57) The parameter is incorrect.

请指教!
 

[解决办法]
我觉得有几种可能:
1.这种情况是因为该控制码要求有效的Inbuffer或者Outbuffer。并且,错误的buffer长度也会导致这个错误。
2.设备句柄并不是CD-ROM。
家里没有DDK,看不见help,仅供参考了。
我以前做SCSI的时候,曾经遇到过使用与控制码不匹配的数据结构产生system error 87的。
[解决办法]
后边的NULL,0,NULL,0,NULL,NULL参数有问题
[解决办法]
lpBytesReturned参数不能给NULL,必须给一个DWORD变量的地址接收返回长度。
[解决办法]
DeviceIoControl(hDevice,START_FILTER,NULL,0,NULL,0,NULL,NULL)
//红色那里有问题,必须放入一个DWORD指针
[解决办法]
错误提示应该是参数问题

热点排行