阅读:2044回复:2
使用IOCTL_SCSI_PASSTHROU 调用DeviceIoControl(),错误不知错在那里
BCB6 环境下
目的是 发送SCSI命令对设备进行读写 TCHAR *pname ="\\\\.\\USB#Vid_04cf&Pid_0809#100#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"; HANDLE OpenCS881X( TCHAR *pname )//打开整个读卡器设备,非分区 { ////BOOL status = 0; DWORD dwAccessMode = 0, dwShareMode = 0; HANDLE fileHandle = NULL; dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; // default dwAccessMode = GENERIC_WRITE | GENERIC_READ; // default fileHandle = CreateFile( pname, dwAccessMode, dwShareMode, NULL, OPEN_EXISTING, 0, NULL ); if ( fileHandle == INVALID_HANDLE_VALUE ) { return NULL; } return fileHandle; } //这个函数打开设备成功 BOOL SPTI_WriteBlock( HANDLE hFile,int nBytes, DWORD offset ) { ULONG length = 0; DWORD dwBytesReturned = 0; BOOL bResult = FALSE; ZeroMemory( &SPTWB, sizeof( SCSI_PASS_THROUGH_WITH_BUFFERS ) ); SPTWB.spt.Length = sizeof( SCSI_PASS_THROUGH ); SPTWB.spt.PathId = 0; SPTWB.spt.TargetId = 1; SPTWB.spt.Lun = 0; SPTWB.spt.CdbLength = CDB10_LENGTH; SPTWB.spt.SenseInfoLength = 0; SPTWB.spt.DataIn = SCSI_IOCTL_DATA_IN; SPTWB.spt.DataTransferLength = 0; SPTWB.spt.TimeOutValue = 2; SPTWB.spt.DataBufferOffset = offsetof( SCSI_PASS_THROUGH_WITH_BUFFERS, DataBuf ); SPTWB.spt.SenseInfoOffset = 0; SPTWB.spt.Cdb[ 0 ] = WRITE_CMD; SPTWB.spt.Cdb[ 1 ] = 0x0; SPTWB.spt.Cdb[ 2 ] = HIBYTE(HIWORD(offset)); SPTWB.spt.Cdb[ 3 ] = LOBYTE(HIWORD(offset)); SPTWB.spt.Cdb[ 4 ] = HIBYTE(LOWORD(offset)); SPTWB.spt.Cdb[ 5 ] = LOBYTE(LOWORD(offset)); SPTWB.spt.Cdb[ 6 ] = 0x0; SPTWB.spt.Cdb[ 7 ] = 0x0; SPTWB.spt.Cdb[ 8 ] = 0x10; SPTWB.spt.Cdb[ 9 ] = 0x0; length = offsetof( SCSI_PASS_THROUGH_WITH_BUFFERS, DataBuf ); bResult = DeviceIoControl( hFile, IOCTL_SCSI_PASS_THROUGH, &SPTWB, length, &SPTWB, length, &dwBytesReturned, FALSE ); LAST_ERROR_CODE = GetLastError(); if ( bResult == FALSE ) { return FALSE; } else { return TRUE; } } 调用下边这个函数失败 DeviceIoControl()调用后返回失败,错误号为LAST_ERROR_CODE =50(不支持此请求---VC中的错误类型) 不知道那里问题,也不好调试 用BUSHOUND察看是找不到发出去的WRITE_CMD(应该就是原来那个数值巴?) 求教,该怎么办啊? |
|
最新喜欢:![]()
|
沙发#
发布于:2005-07-07 19:15
驱动是XP自带的
|
|
|
驱动老牛
![]() |
板凳#
发布于:2005-07-08 18:48
下面是引用lhj117于2005-07-07 19:15发表的: 块设备不是随便一个参数都可以写的,都是固定大小一般至少是512 你直接WRITE FILE 和这个是一样的。实在没有必要这么做 |
|