Код
[/code]Все. Разобрался, вроде. В драйвере было одно место, где обрабатывался запрос на описание устройства
[code]case SCSI_INQUIRY:
if(pCommandBlock[1] == 0)
{
if (datalen == sizeof (adi_msd_InquiryReport))
{
memcpy(pBuffer, &adi_msd_InquiryReport, datalen);
return (true);
}
}
else // Added for Windows Vista
if(pCommandBlock[1] == 1)
{
memcpy(pBuffer, &adi_msd_InquiryReport_1, 36);
*pActualBytesToReturn = 36;
return(true);
}
break;
Когда хост запрашивал большее количество байт, чем было у драйвера MSD контроллера - он ( драйвер моего устройства) запрос игнорировал.
Исправил на следующее:
Код
case SCSI_INQUIRY:
if(pCommandBlock[1] == 0)
{
size_t BytesToCopy;
if (datalen >= SCSI_INQUIRY_REPORT_SIZE)
{
BytesToCopy = SCSI_INQUIRY_REPORT_SIZE;
}
else
{
BytesToCopy = datalen;
}
memcpy(pBuffer, &adi_msd_InquiryReport, BytesToCopy );
*pActualBytesToReturn = BytesToCopy;
bResult = true;
break;
}
else // Added for Windows Vista
{
if(pCommandBlock[1] == 1)
{
memcpy(pBuffer, &adi_msd_InquiryReport_1, SCSI_INQUIRY_REPORT_SIZE );
*pActualBytesToReturn = SCSI_INQUIRY_REPORT_SIZE;
bResult = true;
}
}
break;
т.е. запрос обрабатываю, но отправляю хосту только тот объем данных, который у меня фактически есть. Пока работает и форматируется.
Сообщение отредактировал kolobochishe - Jul 23 2015, 09:33