Рефераты | Рефераты по информатике, программированию | Как сделать чтобы запущеный exe сам себя удалил? | страница реферата 21 | Большая Энциклопедия Рефератов от А до Я
Большая Энциклопедия Рефератов от А до Я
  • Рефераты, курсовые, шпаргалки, сочинения, изложения
  • Дипломы, диссертации, решебники, рассказы, тезисы
  • Конспекты, отчеты, доклады, контрольные работы

  • В этом куске кода используется структура 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




    Поделитесь этой записью или добавьте в закладки

       




    Категории:



    Разделы сайта




    •