我试图发送scsi ReadCapacity16(0x9E)到Windows上使用D的卷。CDB是规范和我的ReadCapacity16在Linux和scsi上工作在Windows查询工作。 只有Windows上的非查询调用不能在Windows内核中使用“错误的函数”。
由于只有查询工作,是否有一个技巧,通过Windows内核发送不查询? 任何提示让这个工作? 我已经研究了几个星期,并没有解决这个问题。
这是国家开发银行的一个例子:
\。 physicaldrive0 CDB缓冲区内容:9e 10 00 00 00 00 00 00 – 00 00 00 00 00 00 00 sio.exceptions.IoctlFailException@sgio exceptions.d(13):ioctl错误代码为1.错误的函数。
当它在variables中时,来自utf8string的转换无效
如何编译从DMD链接的msvc静态库?
分两步使用DMD:将64位(Linux)
Nginx,fastcgi和open socket
这里是将CDB复制到DeviceIoControl调用的缓冲区的位置,这是成功发送查询命令的相同代码path(但是对于readcap失败)。 github中的代码粘贴在下面:
void sgio_execute(ubyte[] cdb_buf,ubyte[] dataout_buf,ubyte[] datain_buf,ubyte[] sense_buf) version (Windows) { const uint SENSE_LENGTH = 196; ubyte[512] iobuffer = 0; DWORD amountTransferred = -1; SCSI_PASS_THROUGH_DIRECT scsiPassthrough = {0}; scsiPassthrough.Cdb[] = 0; uint size = cast(uint)((cdb_buf.length <= scsiPassthrough.Cdb.length ? cdb_buf.length : scsiPassthrough.Cdb.length)); scsiPassthrough.Cdb[0..size] = cdb_buf[0..size]; scsiPassthrough.Length = SCSI_PASS_THROUGH_DIRECT.sizeof; scsiPassthrough.ScsiStatus = 0x00; scsiPassthrough.TimeOutValue = 0x40; scsiPassthrough.CdbLength = cast(ubyte)(size); scsiPassthrough.SenseInfoOffset = SCSI_PASS_THROUGH_DIRECT.sizeof; scsiPassthrough.SenseInfoLength = SENSE_LENGTH; scsiPassthrough.DataIn = SCSI_IOCTL_DATA_IN; scsiPassthrough.DataBuffer = datain_buf.ptr; scsiPassthrough.DataTransferLength = bigEndianToNative!ushort(cast(ubyte[2]) cdb_buf[3..5]); int status = DeviceIoControl( m_device,IOCTL_SCSI_PASS_THROUGH_DIRECT,&scsiPassthrough,iobuffer.length,//scsiPassthrough.sizeof,&iobuffer,&amountTransferred,null); if (status == 0) { int errorCode = GetLastError(); // build error message ... throw new IoctlFailException(exceptionMessage); } } }
D启动程序时如何不打开控制台
在Linux上使用D编程语言的GLFW
d2:没有得到任何回溯信息
D(和Tango)在PowerPC Linux上
使用GUI创buildWindows程序,但使用“main()”(在D中)?
仔细阅读Windows SCSI_PASS_THROUGH_DIRECT结构文档,我注意到了这一点:
DataTransferLength:指示数据缓冲区的大小(以字节为单位)。 许多设备传输预定义长度的数据块。 DataTransferLength中的值必须是该预定义最小长度的整数倍,该长度由设备指定。 如果发生欠载,微型端口驱动程序必须将此成员更新为实际传输的字节数。
我改变了代码使用DataTransferLength 512个字节,通过增加datain_buffer的大小,现在的代码工作得很好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。