访问SCSI miniport的问题

luxj 2008-07-01 02:50:58
系统中有一SCSI controller 卡,驱动为miniport driver,在用户态,我使用CreateFile("\\\\.\\Scsi2:"........)打开设备,没出现问题,但在DeviceIoControl中,程序出现55号错误,即:“The specified network resource or device is no longer available.”不知为什么?
代码如下:
UCHAR string[NAME_COUNT + 1];
char buffer[sizeof(SRB_IO_CONTROL)+1];
PSRB_IO_CONTROL psrbio = (PSRB_IO_CONTROL) buffer;

psrbio->HeaderLength = sizeof (SRB_IO_CONTROL);
psrbio->Timeout = 10000;
psrbio->Length = 1;
strncpy((char *)psrbio->Signature,"SCSIDISK",8);

_snprintf(string, NAME_COUNT, "\\\\.\\Scsi2:");
string[NAME_COUNT] = 0;

shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; // default
accessMode = GENERIC_WRITE | GENERIC_READ; // default

fileHandle = CreateFile(string,
accessMode,
shareMode,
NULL,
OPEN_EXISTING,
0,
NULL);

if (fileHandle == INVALID_HANDLE_VALUE) {
errorCode = GetLastError();
printf("Error opening %s. Error: %d\n",
string, errorCode);
return;
}
sr = DeviceIoControl(fileHandle,
IOCTL_SCSI_MINIPORT,
buffer,
sizeof(SRB_IO_CONTROL)+1,
buffer,
sizeof(SRB_IO_CONTROL)+1,
&result,
NULL);
if(!sr){
printf("Failure in ioctl!\n");
errorCode = GetLastError();
printf("Error: %d\n",
errorCode);
PrintError(errorCode);
}
CloseHandle(fileHandle);
...全文
225 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-07-01
  • 打赏
  • 举报
回复
没用过这种Control,检查一下Control的参数,psrbio->ControlCode不需要初始化吗?
shuiyan 2008-07-01
  • 打赏
  • 举报
回复
在Createfile之后,最好再Open一次,因为有的驱动会在初始化之后,将其休眠或者poweroff的,结果直接去IOControl,就会找不到。

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧