Инициализация мини-драйвера WIA
Первым шагом в реализации интерфейса IWiaMiniDrv является инициализация мини-драйвера и создание иерархического дерева элементов драйвера. Для этого служба WIA вызывает метод IWiaMiniDrv::d rvInitializeWia каждый раз, когда клиентское приложение намерено использовать устройство. Если устройство используется одновременно двумя или более приложениями, служба WIA вызывает этот метод для каждого приложения. В этом методе мини-диск обычно выполняет следующие действия:
Инициализирует параметры, передаваемые из службы WIA.
Сохраняет интерфейс устройства STI, на который указывает pStiDevice. Это делается для того, чтобы методы IStiDevice::LockDevice и IStiDevice::UnLockDevice можно было использовать для блокировки или разблокировки устройства WIA.
Кэширует bstrDeviceID и bstrRootFullItemName в переменных-членах, чтобы их можно было использовать другими методами.
Открывает дескриптор устройства. (Этот шаг рекомендуется использовать для портов без общего доступа, таких как USB, SCSI и 1394.)
Создает дерево элементов, как описано в разделе Создание дерева элементов драйвера 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::d rvUnInitializeWia соответствующего драйвера. Обратите внимание, что WIA поддерживает несколько одновременных подключений к приложениям. Это означает, что два или более приложения могут запрашивать интерфейс WIA, связанный с тем же устройством. Однако это не означает, что драйвер должен обрабатывать одновременные запросы; служба WIA гарантирует, что драйверу одновременно отправляется только один запрос. Однако служба WIA может вызывать метод IWiaMiniDrv::d rvInitializeWia несколько раз, прежде чем вызывать метод IWiaMiniDrv::d rvUnInitializeWia .
Почему эти сведения полезны? Часто существуют ресурсы, которые могут потребоваться драйверам при использовании приложений, например дерево элементов драйвера WIA, библиотеки фильтрации изображений и т. д. Так как эти ресурсы могут занимать большой объем памяти, их лучше выгрузить, когда они не нужны.
Примечание Методы IWiaMiniDrv::d rvInitializeWia и IWiaMiniDrv::d rvUnInitializeWia используются для информирования драйверов только о подключениях к приложениям. Служба WIA может вызывать другие методы драйвера без предварительного вызова IWiaMiniDrv::d rvInitializeWia. Это означает, что служба WIA не обязательно вызывает IWiaMiniDrv::d rvUnInitializeWia по завершении. Вызываемые методы являются информационными методами, для которых не требуются элементы WIA, такие как IWiaMiniDrv::d rvGetCapabilities и IWiaMiniDrv::d rvGetWiaFormatInfo.
В этом разделе рассматриваются следующие вопросы.
Вызов порядка для функций мини-драйвера
Загрузка и выгрузка мини-драйвера WIA