Обработка ввода-вывода
Функция SendASPI32Command
После того, как мы с помощью функции GetASPI32supportlnfo инициализировали интерфейс ASPI, можно приступать к непосредственной работе с ним. Для этого предусмотрена специальная функция SendASPI32Command.
Именно с ее помощью осуществляется обмен данными между программой и оборудованием (жестким диском, принтером, CD-ROM, CD-RW, сканером и другими устройствами). Функция SendASPI32Command имеет всего один аргумент. Он представляет собой указатель на структуру данных.
DWORD SendASPI32Command (LPSRB)
Параметр LPSRB представляет собой обобщенный указатель (тип void), и описан в файле Wnaspi32.h следующим образом:
typedef void *LPSRB;
Для универсальности эта структура имеет различные варианты представления в зависимости от решаемой задачи, но есть несколько членов, которые используются в обязательном порядке.
{
BYTE SRB_Cmd; // сюда заносим код команды
BYTE SRB_Status; // сюда помещается байт статуса, позволяющий определить результат выполнения команды
BYTE SRB_HaId; // сюда заносим номер выбранного устройства
BYTE SRB_Flags; // сюда заносим флаг операции
DWORD SRB_Hdr_Rsvd;// зарезервирован, должен быть равен 0
} SRB_Header;
Первый член структуры SRB_Cmd может иметь одно из следующих значений:
SC_HA_INQUIRY // получение информации об установленных контроллерахSC_GET_DEV_TYPE // получение информации о типе устройства
SC_EXEC_SCSI_CMD // послать команду устройству
SC_ABORT_SRB // запрос на отмену посланной команды
SC_RESET_DEV // сброс шины устройства
SC_GET_DISK_INFO // получение данных о BIOS устройства
SC_RESCAN_SCSI_BUS// обновление информации о ведущей шине
SC_GETSET_TIME0UTS// установка времени ожидания
Команда SC_GET_DISK_INFO не поддерживается в Windows NT. Возвращаемое функцией SendASPI32Command значение зависит от того, в каком режиме (синхронном или асинхронном) она работает. При использовании команд SC_EXEC_SCSI_CMD и SC_RESET_DEV она будет работать в асинхронном режиме и вернет управление сразу же после вызова. По этому значению можно будет решить, в каком состоянии находится интерфейс ASPI, а так же правильно обработать это состояние. Во всех остальных случаях функция SendASPI32Command будет работать только в синхронном режиме и не вернет управление в вызвавшую ее процедуру до полного завершения своих действий. Как правильно учитывать возвращаемое значение этой функции, будет описано далее в последующих примерах. Теперь разберем использование функции SendASPI32Command для различных команд.
2021-04-01
Google сообщил о запуске проекта Dunant
Проект Dunant, начатый в 2018 году, был запущен в эксплуатацию. Трансатлантический интернет-кабель соединяет США и континентальную Европу. Общая протяженность...
подробнее2020-04-06
Новшества в обновленной Windows 10
Корпорация Microsoft завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...
подробнее