Обработка ввода-вывода

Функция 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 завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...

подробнее

 

Все новости...

 

Научно-Техническое Объединение

Тел.: +7(4752) 55-95-86

E-mail:e-mail