if (sd.SRB_Status=SS_COMP) and
(sd.SRB_DeviceType=DTYPE_CDROM) then
begin
Cdroms.Cdroms[Cdroms.CdromCount].HaID := H;
Cdroms.Cdroms[Cdroms.CdromCount].Target :=
T;
Cdroms.Cdroms[Cdroms.CdromCount].Lun := L;
// получаем информацию об этом CD-ROM
CdromInfo(Cdroms.CdromCount);
// увеличиваем счётчик количества устройств
CD-ROM
inc(Cdroms.CdromCount);
end;
end;
end;
end;
end;
Result := Cdroms.CdromCount; //
присваиваем результату функции количество CD-ROM
end;
Вы, наверное, обратили внимание на то, что в коде
используется процедура CdromInfo. Это процедура, с помощью которой, мы получаем
информацию о нашем CD-ROM. Перед тем, как привести её описание, я хочу
рассказать вам о том, как происходит управление SCSI-устройствами посредством
специальных команд, и как при этом используется структура TSRB_ExecSCSICmd.
Вот поля структуры TSRB_ExecSCSICmd, на которые нужно, прежде всего, обратить внимание: SRB_Cmd, SRB_Flags, SRB_CDBLen, CDBByte. Поле
SRB_Cmd всегда должно содержать значение SC_EXEC_SCSI_CMD. Поле SRB_Flags
должно определять направление передачи данных. Если данные передаются из
SCSI-устройства в приложение, используется шестнадцатиричное значение $08
(определим это значение как константу SRB_DIR_IN). Если происходит обратная
передача данных (от приложения к SCSI-устройству), используется
шестнадцатиричное значение $10 (определим это значение как константу
SRB_DIR_OUT). В зависимости от посылаемой команды, поле SRB_CDBLen может
содержать значения: 6, 10 или 12. Массив байт CDBByte подробно описывает
параметры выполняемой команды. Значение массива различно для всех команд.
Замечу лишь, то, что нулевой байт этого массива всегда определяет код команды.
Какие команды я имею в виду? Например: команда установки скорости CD-привода, команда записи CD-R или CD-RW-диска, команды управления аудио-CD (Play, Pause, Stop и так далее).
Существуют SCSI-команды, которые поддерживают все
устройства, и есть команды, которые специфичны для определённого типа
устройств. Первая команда, которую мы рассмотрим, команда INQUIRY, является
обязательной для всех устройств. Она запрашивает информацию о SCSI-устройстве.
А теперь собственно перейдём к коду процедуры:
// параметр, передаваемый
процедуре – номер CD-ROM.
procedure CdromInfo(const Number: Byte);
var
// буфер будет содержать информацию о
приводе
buffer: array [1..100] of Char;
Рекомендуем скачать другие рефераты по теме: шпоры по гражданскому праву, заказать дипломную работу.