В этом куске кода используется структура
PSCSI_ADDRESS, которая выглядит следующим образом:
type
TSCSI_ADDRESS = record
Length : LongInt; // Размер структуры TSCSI_ADDRESS
PortNumber : Byte; // Номер адаптера SCSI
PathId : Byte; // Идентификатор адаптера SCSI
TargetId : Byte; // Идентификатор объекта SCSI
Lun : Byte; // Логический номер устройства
end;
SCSI_ADDRESS = TSCSI_ADDRESS;
PSCSI_ADDRESS =
^TSCSI_ADDRESS;
Как вы уже успели заметить, SCSI-команды для
интерфейсов ASPI и SPTI одинаковы, поэтому необходимо знать лишь сами команды и
заполнять соответствующим образом CDB (Command Descriptor Block). Для
наглядности приведу пример использования интерфейса SPTI для установки скорости
CD-ROM. Сравните этот код с таким же, но использующим интерфейс ASPI, и вы сами
увидите все отличия.
function SPTISetSpeed(ReadSpeed, WriteSpeed:integer):Boolean;
if DeviceIoControl(hDevice, IOCTL_SCSI_PASS_THROUGH, @spti, len, @spti, len, returned, nil) and
(spti.spt.ScsiStatus=$00) then
result := true
else
result := false;
end;
Думаю, данный код не нуждается в пояснениях.
Кстати, всё вышесказанное (в том числе и в предыдущей
статье) относится не только к устройствам CD-ROM, но и к другим
SCSI-устройствам. Отличия лишь в командах. Есть команды, которые обязательны
для всех устройств (MODE SELECT, MODE SENSE, INQUIRY и т.д.), и есть команды, которые специфичны для разных типов устройств (BLANK – для устройств CD-RW, PRINT – для принтеров, SCAN – для сканеров, и т.д.).
Теперь вы знаете, как осуществляется управление
устройствами, подключёнными к шине SCSI. Какой использовать интерфейс, ASPI или
SPTI, или оба вместе – дело ваше. Могу сказать лишь, что для использования двух
интерфейсов рациональнее будет либо создать два приложения для двух семейств
операционных систем Windows, либо создать две отдельные библиотеки и подгружать
их в зависимости от операционной системы, поскольку поддержка двух интерфейсов
в одном приложении может отрицательно сказаться на его размере и объеме
используемой оперативной памяти.
Скачали данный реферат: Евстрат, Сталин, Малютин, Andrejchenko, Kuzaev, Miheev, Semichaevskij.
Последние просмотренные рефераты на тему: банки рефератов, оценка курсовой работы, решебник 10 класс, реферат роль.