언급 한 MSC는 "USB"대용량 저장 장치입니까?
그렇다면 SCSI_PATH_THROUGH를 사용하여이 USB MSC와 통신 할 수 있습니다!
Ex.
BOOL LogicalWriteCmd(HANDLE fileHandle,ULONG LBA,ULONG SectorCnt,PVOID DataBuffer)
{
SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER sptdwb;
ULONG returned,length;
BOOL status;
ZeroMemory(&sptdwb, sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER));
length = SectorCnt<<SECTOR_SIZE_SHIFT_BIT;
sptdwb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
sptdwb.sptd.PathId = 0;
sptdwb.sptd.TargetId = 0;
sptdwb.sptd.Lun = 0;
sptdwb.sptd.CdbLength = CDB10GENERIC_LENGTH;
sptdwb.sptd.DataIn = SCSI_IOCTL_DATA_OUT;
sptdwb.sptd.SenseInfoLength = SPT_SENSE_LENGTH;
sptdwb.sptd.DataTransferLength = length;
sptdwb.sptd.TimeOutValue = g_ulTimeOut;
sptdwb.sptd.DataBuffer = DataBuffer;
sptdwb.sptd.SenseInfoOffset =
offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER,ucSenseBuf);
sptdwb.sptd.Cdb[0] = SCSIOP_WRITE;
sptdwb.sptd.Cdb[2] = (UCHAR)(LBA>>24);
sptdwb.sptd.Cdb[3] = (UCHAR)(LBA>>16);
sptdwb.sptd.Cdb[4] = (UCHAR)(LBA>>8);
sptdwb.sptd.Cdb[5] = (UCHAR)(LBA);
sptdwb.sptd.Cdb[7] = SectorCnt>>8;
sptdwb.sptd.Cdb[8] = (UCHAR)SectorCnt;
length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER);
status = DeviceIoControl(fileHandle,
IOCTL_SCSI_PASS_THROUGH_DIRECT,
&sptdwb,
length,
&sptdwb,
length,
&returned,
FALSE);
if ((sptdwb.sptd.ScsiStatus == 0) && (status != 0)) {
return TRUE;
}
return FALSE;
}
그리고 당신은 당신의 자신의 업체/사용자 정의 명령은 다음 위의 방법으로 USB의 MSC에 보낼 만들 수 있습니다 : USB의 MSC에 발행 쓰기 명령은 다음 코드에 의해 달성 될 수있다. 그러나 장치가 올바르게 식별해야합니다!
댓글을 통한 경우를 제외하고는 사용자와 연락 할 수있는 방법이 없었던 것 같습니다. 대용량 저장 장치에 명령/데이터를 보낼 수있는 대답이나 방법을 찾았습니까? 모든 팁을 많이 주시면 감사하겠습니다. 감사합니다 –