Цитата(galjoen @ May 7 2008, 22:20)

Вообще это странно. Вы уверены? Тут вроде только на IN NAKи приходится слать. А что такое винда запрашивает в том CBW, на который вы NAKи на OUT шлёте? Я давным-давно такое делал, поэтому не уверен, но у меня вроде 5 секунд NAKи на IN до ошибки слались.
Если не принимать никаких мер, то да, уверен. CBW во время этой задержки я не смотрел, т.к. OUT отключен. Попробую проанализировать.
Цитата(galjoen @ May 7 2008, 22:20)

Можно винде слать CSW с ошибкой, а на следующий REQUEST SENSE послать, что ошибка CRC была "ID CRC ERROR" - SenseKey=3, ASC=0x10, ASCQ=0. В этом случае точно ДОЛГО тот-же READ(10) шлётся. В смысле с теми-же параметрами. Проверял. Из-за этого даже новую флешку, у которой CRC в 0м секторе не совпадает, отформатировать невозможно. А м.б. логичнее что-то типа "LOGICAL DRIVE NOT READY - BECOMING READY" послать (SenseKey=2, ASC=4, ASCQ=1). Или ещё что-нибудь - попробуйте.
Идеи интересные, но весь смысл затеи в максимально быстром чтении. Мне кажется с подобными ухищрениями получится сильное торможение обмена.
В принципе MSC не самоцель, главное чтобы все было быстро. Если не получится я другой класс сделаю, CDC например. Просто сделано много, и, чтобы это не потерять, хочется четко понять всю физику процесса и убедиться что MSC здесь не катит.
Цитата(galjoen @ May 7 2008, 22:20)

Встречный вопрос. А как вы с кэширование боретесь? Или вам только 1 раз прочитать нужно, а потом ничего не меняется? Или способ как винду заставить перечитать знаете? Тогда этим способом (борьбы с кэшированием) поделитесь пожалуйста.
Скажу сразу, пока реально не использовал, т.к. здесь это не нужно. Но видел в MSDN в описании функции CreateFile вот такую вещь:
HANDLE CreateFile(
...
DWORD dwFlagsAndAttributes, // file attributes
...
);
dwFlagsAndAttributes - Specifies the file attributes and flags for the file.
FILE_FLAG_NO_BUFFERING
Instructs the system to open the file with no intermediate buffering or caching. When combined with FILE_FLAG_OVERLAPPED, the flag gives maximum asynchronous performance, because the I/O does not rely on the synchronous operations of the memory manager. However, some I/O operations will take longer, because data is not being held in the cache.
Попробуйте, может быть это оно.