在Windows中发送特定的SCSI命令到SCSI设备【JAVA教程】

!
也想出现在这里? 联系我们
信息

在Windows中发送特定的SCSI命令到SCSI设备,第1张

概述在Windows中发送特定的SCSI命令到SCSI设备

windows有特定的接口,我可以通过它发送特定的scsi命令,例如查询到scsi设备? 我search了networking,find了传递SCSI Pass Through接口的参考。 但它非常模糊。

有没有关于如何使用它的API的任何文档?

如何在内核空间中将保留内存分成3个缓冲区

#include <iostream> #include <windows.h> #include <winioctl.h> #define ulONG_PTR ulONG #include <ntddscsi.h> //from SDK #include <spti.h> //from DDK using namespace std; int demo() { HANDLE hdisk; SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER sptDWb; ulONG length = 0; DWORD bytesReturn; BYTE bufDataRead[64*1024+10]; int iRet; hdisk = Createfile(path,GENERIC_READ | GENERIC_WRITE,file_SHARE_READ | file_SHARE_WRITE,NulL,OPEN_EXISTING,NulL ); if (hdisk ==INVALID_HANDLE_VALUE) { return 0; } ZeroMemory(&sptDWb,sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER)); sptDWb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT); sptDWb.sptd.PathID = 0; sptDWb.sptd.TargetID = 1; sptDWb.sptd.Lun = 0; sptDWb.sptd.CdbLength = 6; sptDWb.sptd.DataIn = SCSI_IOCTL_DATA_IN; sptDWb.sptd.SenseInfolength = 24; sptDWb.sptd.DataTransferLength = 8; sptDWb.sptd.TimeOutValue = 2; sptDWb.sptd.DataBuffer = bufDataRead; sptDWb.sptd.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER,ucSenseBuf); sptDWb.sptd.Cdb[0] = 0x12; sptDWb.sptd.Cdb[1] = 0x00; sptDWb.sptd.Cdb[2] = 0x00; sptDWb.sptd.Cdb[3] = 0x00; sptDWb.sptd.Cdb[4] = 0xFF; sptDWb.sptd.Cdb[5] = 0x00; length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER); iRet = DeviceIoControl(hdisk,IOCTL_SCSI_PASS_THROUGH_DIRECT,&sptDWb,length,&bytesReturn,NulL); if (0 == iRet) { printf(\”inquiry fail\”); return 0; } else { //Check returned data in sptDWb.sptd.DataBuffer. } return 0;

}

SCSI覆盖了大量的地面。 你正在与CD / DVD /磁盘/磁带/扫描仪或什么谈话。

对于CD / DVD,最好(也是唯一的)用于设置/读/写命令的免费参考资料可以在这里找到: http : //www.t10.org/drafts.htm

关于SPTI,在“SCSI编程人员指南”中有一些非常基本的文档。 有关ASPI – > SPTI转换器的文章可以在DDJ网站上找到。

请记住,SPTI只是一个API,它强加或者不了解SCSI消息内容或格式。

Brian Sawert,Addison Wesley 1998。

您可以通过向SCSI端口驱动程序发送一个IRP_MJ_SCSI IRP来发送SCSI命令,请参阅http://msdn.microsoft.com/en-us/library/ff565387(VS.85).aspx 。 但是,您将不得不自己构建SCSI CBD,我还没有找到描述它的文档。

SCSI命令被分解成许多规格。 INQUIRY命令在SPC规范中,而特定于设备类型的命令被分解成几个规格(即block,ses,…)。

总结

以上是内存溢出为你收集整理的在Windows中发送特定的SCSI命令到SCSI设备全部内容,希望文章能够帮你解决在Windows中发送特定的SCSI命令到SCSI设备所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞124 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容