Здравствуйте, Srv, Вы писали:
1. как именно вы шлете команды ?
2. не возникает ли ситуация, когда ваши команды отправляются в активный канал (какое-то устройство что-то делает, а драйвер ожидает прерывания). В этом случае нарушится исполнение текущей команды, далее таймаут (и тормоза), сброс шины, и после нескольких таких штук — автоматический переход в ПИО для повышения стабильности.
3. на некоторых контроллерах и/или с некоторыми драйверами нельзя трогать один канал, пока занят другой.
Попробуйте взять исходники atapi из DDK NT4, сборать версию с логами, да посмотреть, что происходит. ДМА там правде нет. Хотя, если найдете исходники NT4, там ДМА для Интела присутствует.
Или экстремальный вариант — попробовать debug версию
http://alter.org.ua/sofw/win/uniata для того же разбирательства с происходящим.