1. Остановить привод (через DeviceIoControl). 2. t0 = GetTickCount(); 3. Прочитать несколько байт из файла, который находится на диске. 4. t1 = GetTickCount(); 5. t1 - t0 = время чтения сектора. Чем дальше находится сектор, тем дольше он будет читаться. Чтоб исключить возможность кеширования, желательно читать сектор в сыром виде, но для этого нужны права.
Точнее всего измерить можно, читая сектор напрямую через порты... в самом обычном PIO, без басмастеров и прерываний, посылать команду 28h (или аналог), polling'ом ждать BSY=0 и замерять через rdtsc время выполнения. Это если привод на IDE/SATA, конечно. Еще надо немного статистики задействовать, чтобы исключить (уменьшить) влияние кэша самого привода.
Quantum? спасибо, такой вариант не побовал ещё _BC_, это понятно, но в моей ситуации невозможно использовать.
ProgramMan Если привод находится в состоянии покоя (не крутится), то первое обращение чтения любого сектора сначала даст команду раскрутить болванку до стабильной скорости - этот процесс может занять больше времени, чем само последующее чтение. Поэтому желательно учитывать при замере скорости начальное состояние привода. Чтоб не связываться с SPTI (для этого нужны админские привилегии), можно просто попробовать коды LOCK/UNLOCK с DeviceIoControl (см. описание в PSDK) или открыть диск с эксклюзивным доступом. Если залочить привод нельзя, то можно заключить, что его уже кто-то читает и процесса раскрутки не будет.