В этом куске кода используется структура
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;
var
spti:TScsiPassThroughWithBuffers;
const
SCSI_IOCTL_DATA_OUT = 0;
Rate = 176;
begin
spti.Spt.Length :=
sizeof(TSCSIPASSTHROUGH);
spti.Spt.CdbLength := 10;
spti.Spt.SenseInfoLength := 24;
spti.Spt.DataIn :=
SCSI_IOCTL_DATA_OUT;
spti.Spt.TimeOutValue := 10;
spti.spt.DataBufferOffset :=
DWORD(@spti.bDataBuf)-DWORD(@spti);
spti.spt.SenseInfoOffset :=
DWORD(@spti.bSenseBuf)-DWORD(@spti);
spti.Spt.DataTransferLength :=
sizeof(spti.bDataBuf);
spti.spt.CDB[0] := $BB;
spti.spt.CDB[2] :=
BYTE(ReadSpeed*Rate shr 8);
spti.spt.CDB[3] :=
BYTE(ReadSpeed*Rate);
if WriteSpeed<>0 then
begin
spti.spt.CDB[4] :=
BYTE(WriteSpeed*Rate shr 8);
spti.spt.CDB[5] :=
BYTE(WriteSpeed*Rate);
end else
spti.spt.CDB[4] := $FF;
spti.spt.CDB[5] := $FF;
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 класс, реферат роль.
Предыдущая страница реферата |
11
12
13
14
15
16
17
18
19
20
21