Инициализация ASPI

Как известно, существует достаточно много устройств, поддерживающих интерфейс SCSI (Small Computer System Interface — системный интерфейс малых вычислительных систем), разработанный с целью повышения эффективности работы с различным оборудованием, таким как принтеры, сканеры, винчестеры, устройства чтения компакт- и магнитооптических дисков, стримеры и т. д. На данный момент существует несколько стандартов интерфейса SCSI: SCSI-1, SCSI-2 и SCSI-3. В книге рассмотрен только интерфейс SCSI-2, поскольку он является наиболее апробированным и распространенным. Спецификация этого стандарта определяет не только аппаратные, но и профаммные средства поддержки управления устройства¬ми. Нас будет интересовать только вторая часть — профаммные средства управления. Согласно спецификации стандартом определен набор команд, позволяющий управлять оборудованием, а также тестировать и получать различную информацию о конкретном устройстве. Используя эти команды, можно написать управляющую профамму (драйвер) для определенного устройства. Однако написание и отладка драйвера под Windows (VxD или уровня ядра) может оказаться достаточно трудоемкой и сложной задачей. При отсутствии определенного опыта профаммист столкнется с серьезными трудностями, которые могут привести к потере времени, средств и желания завершить работу. В наше время, как известно, определяющим фактором успеха является не столько широта познаний, сколько четкость и быстрота выполнения поставленной задачи.

Для ускорения и упрощения разработки управляющих профамм (драйверов) под операционную систему Windows (и не только) и был разработан (фирмой Adaptec) профаммный интерфейс ASPI (Advanced SCSI Programming Interface — расширенный интерфейс профаммирования SCSI), упрощающий разработку переносимых приложений управления различными устройствами с одной платформы Win32 на другую. Интерфейс ASPI представляет собой программную оболочку (надстройку), которая объединяет в себе соглашение о вызовах функций и установленный набор команд. Этот интерфейс при¬зван посылать и обрабатывать команды SCSI, используя любой доступный (установленный) в системе контроллер SCSI, поддерживающий такую воз¬можность. ASPI интерфейс стал промышленным стандартом программной оболочки для следующих операционных систем: DOS, Windows, OS/2, Netware. В данной книге описано применение ASPI только для семейства систем Windows.

Интерфейс ASPI состоит из нескольких уровней. На самом низком уровне находится управляющая программа ASPI (драйвер), работающая непосредственно с контроллером. Далее следует периферийный драйвер, скрывающий тонкости работы с поддерживаемым периферийным оборудованием (жестким диском, сканером и т. д.). Этот драйвер может быть универсальным для различных моделей устройств одного типа или индивидуальным, но всегда поставляется изготовителем оборудования. Управляющий драйвер ASPI имеет несколько модификаций, зависящих от версии операционной системы Windows (MS-DOS, Windows 3.1, Windows 95/98/ME/NT/2000/XP). В большинстве случаев он поставляется в составе операционной системы и состоит из нескольких файлов (табл. 1.1). Поскольку устаревшие системы уже не поддерживаются фирмой Microsoft, то мы их в данной книге рассматривать не будем.

Таблица 1.1. Файлы, входящие в управляющую программу ASPI

Windows 98/МЕ Windows NT 4.0 Windows 2000 Windows XP
Wnaspi32.dll Wnaspi32.dll Wnaspi2k.dll Aspixp.sys (32 bit)
Apix.vxd Aspi32.sys Aspi2k.sys Wnaspixp.dll (32 bit)
Winaspi.dll Winaspi.dll Aspi64.sys (64 bit)
Wnaspi64.dll (64 bit)

Интересной особенностью расширения интерфейса ASPI является поддержка устройств с интерфейсом IDE (Integrated Drive Electronics — встроенным интерфейсом накопителей). Это позволяет разрабатывать программы под огромное количество таких устройств, как накопители на жестких дисках, CD-ROM, CD-R/RW и т. д.

Но прежде чем приступать к изучению непосредственно команд SCSI, необходимо познакомиться с программными средствами ASPI, которые помогут налету создавать достаточно мощные программы, управляющие сложнейшим оборудованием. И при этом можно просто забыть о том, что такое драйвер и как его написать.

Функция GetASPI32Supportlnfo

Перед тем как приступить к изучению непосредственно самих функций поддержки ASPI, рассмотрим не менее важный вопрос подключения необходимых файлов в создаваемый проект. Здесь возможны два варианта: динамическое подключение (через вызов стандартной функции профаммного интерфейса WinAPI 32 LoadLibrary) и статическое подключение с исполь¬зованием специальных файлов, о которых будет подробно рассказано ниже. Первый способ является более универсальным, так как не требует заботиться о включении в проект специфичных заголовочных файлов и файла библиотеки. Второй способ более фомоздкий, но, в конечном счете, позволяет более глубоко вникнуть в тонкости работы ASPI.

В состав операционной системы (начиная с Windows 95) входит файл динамической библиотеки Wnaspi32.dll. Он и будет служить связующим звеном между профаммой и интерфейсом ASPI.

Все вышеизложенное полностью истинно для профаммистов, пишущих на Visual C++. Для тех же, кто использует Visual Basic, возможен только один способ подключения — динамический.

Итак, рассмотрим динамическое подключение возможностей ASPI в проект Visual C++. Для этого необходимо зафузить файл библиотеки Wnaspi32.dll. После этого с помощью функции GetProcAddress получим адрес функции инициализации ASPI: GetASPI32SupportInfo.

Листинг 1.1. Инициализация ASPI для Visual C++(динамическая)

Итак, выполнив функцию GetASPI32supportinfo (), мы решили две задачи: определили, установлена ли в системе поддержка ASPI, и получили общее количество установленных устройств.

Теперь рассмотрим статическое подключение возможностей ASPI в проект для Visual C++. Для этого надо включить в проект два заголовочных файла: Scsidefs.h и Wnaspi32.h.

Листинг 1.2. Инициализация ASPI для Visual C++ (статическая)

Итак, мы создали свою функцию GetASPI (), в которой определили наличие в системе поддержки ASPI и узнали, сколько устройств установлено.

Примечание

Функцию GetASPI32supportlnfo не следует вызывать более одного раза в программе, поэтому, если необходимо использовать возвращаемые значения этой функции где-то еще в программе, используйте внешние (уровня класса) или глобальные переменные. Кроме того, для более стабильной работы программы, добавьте в самом начале файла реализации (с расширением СРР, С) следующую строку: #pragma pack (1). И не забудьте в свойствах проекта на закладке компоновщика (Link) добавить библиотеку Wnaspi32.lib (для статической инициализации).

Теперь разберем инициализацию ASPI для Visual Basic. Как уже было отмечено выше, здесь возможен только динамический вариант подключения интерфейса ASPI. Добавьте в свой проект новый модуль класса. Объявите следующую функцию GetASPI32SupportInfo.

Листинг 1.3. Инициализация ASPI для Visual Basic

В данном листинге не обрабатывается случай ошибки при инициализации ASPI, поскольку читатель может добавить этот код сам.

Вот мы и рассмотрели первую функцию интерфейса ASPI, которая проверяет, установлена ли поддержка ASPI в системе, правильно инициализирует ASPI и возвращает общее число обнаруженных устройств.

 

 

2021-04-01

Google сообщил о запуске проекта Dunant

Проект Dunant, начатый в 2018 году, был запущен в эксплуатацию. Трансатлантический интернет-кабель соединяет США и континентальную Европу. Общая протяженность...

подробнее
2020-04-06

Новшества в обновленной Windows 10

Корпорация Microsoft завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...

подробнее

 

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

 

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

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

E-mail:e-mail