Поделиться через


Инициализация минидрайвера WIA

Первым шагом в реализации интерфейса IWiaMiniDrv является создание иерархического дерева элементов драйвера и инициализация минидрайвера. Для этого служба WIA вызывает метод IWiaMiniDrv::d rvInitializeWia каждый раз, когда клиентское приложение намерено использовать устройство. Если два или более приложений одновременно используют устройство, служба WIA вызывает этот метод для каждого приложения. В этом способе минидрайвер обычно выполняет следующие действия:

  1. Инициализирует параметры, передаваемые из службы WIA.

  2. Сохраняет интерфейс устройства STI, на который указывает pStiDevice. Это делается так, чтобы методы IStiDevice::LockDevice и IStiDevice::UnLockDevice можно использовать для блокировки или разблокировки устройства WIA.

  3. Кэширует bstrDeviceID и bstrRootFullItemName в переменных-членах, чтобы их можно было использовать другими методами.

  4. Открывает дескриптор устройства. (Этот шаг рекомендуется для не общих портов, таких как USB, SCSI и 1394.)

  5. Создает дерево элементов, как описано в разделе "Создание дерева элементов драйвера WIA".

Метод IWiaMiniDrv::d rvInitializeWia также можно использовать для создания и инициализации динамических массивов и структур, используемых драйвером. Например, массив команд и событий, поддерживаемых драйвером, можно создать для последующего использования методом IWiaMiniDrv::d rvGetCapabilities .

Заметка Метод IWiaMiniDrv::d rvGetCapabilities может вызываться до вызова IWiaMiniDrv::d rvInitializeWia . Это может произойти, когда служба WIA должна запрашивать сведения о событии, прежде чем приложение существует для использования устройства. Метод IWiaMiniDrv::d rvInitializeWia вызывается только в том случае, если приложение сигнализирует о своем намерении использовать устройство.

Отслеживание подключений приложений

Как упоминалось ранее, когда приложение намерено взаимодействовать с устройством WIA, служба WIA вызывает соответствующий метод драйвера IWiaMiniDrv::d rvInitializeWia . После завершения работы приложения с устройством и освобождения всех ссылок на WIA, служба WIA вызывает соответствующий метод IWiaMiniDrv::drvUnInitializeWia. Обратите внимание, что WIA поддерживает несколько одновременных подключений к приложениям. Это означает, что два или более приложения могут запрашивать интерфейс WIA, связанный с тем же устройством. Это не означает, что драйвер должен обрабатывать одновременные запросы; Служба WIA гарантирует, что одновременно отправляется только один запрос на драйвер. Однако служба WIA может вызывать метод IWiaMiniDrv::d rvInitializeWia несколько раз, прежде чем вызывать метод IWiaMiniDrv::d rvUnInitializeWia .

Почему эта информация полезна? Часто существуют ресурсы, которые могут потребоваться драйверам при использовании приложений, таких как дерево элементов драйвера WIA, библиотеки фильтрации изображений и другие. Так как эти ресурсы могут занять большое количество памяти, лучше всего выгрузить их, если они не нужны.

Заметка Методы IWiaMiniDrv::d rvInitializeWia и IWiaMiniDrv::d rvUnInitializeWia используются только для информирования драйверов подключений приложений. Служба WIA может вызывать другие методы драйвера без предварительного вызова IWiaMiniDrv::drvInitializeWia, что означает, что при завершении она не обязательно вызывает IWiaMiniDrv::drvUnInitializeWia. Вызываемые методы — это информационные методы, которые не требуют элементов WIA, таких как IWiaMiniDrv::drvGetCapabilities и IWiaMiniDrv::drvGetWiaFormatInfo.

В этом разделе содержатся следующие разделы:

Порядок вызова функций минидрайвера

Загрузка и выгрузка минидрайвера WIA

Подключение и отключение приложения WIA

Отчет о состоянии мини-драйвера WIA