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


Инициализация общего целевого объекта ввода-вывода в UMDF

Предупреждение

UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. В UMDF 1 новые функции не добавляются, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2.

Архивные примеры UMDF 1 можно найти в Windows 11 версии 22H2 — обновление примеров драйверов за май 2022 г.

Дополнительные сведения см. в разделе начало работы с помощью UMDF.

Шаги, которые драйвер использует для инициализации общего целевого объекта ввода-вывода, зависят от того, является ли целевой объект ввода-вывода локальным или удаленным.

Инициализация локального целевого объекта ввода-вывода

Локальные целевые объекты ввода-вывода включают целевые объекты ввода-вывода устройства по умолчанию и целевые объекты ввода-вывода на основе дескриптора файлов.

Платформа инициализирует целевой объект ввода-вывода драйвера по умолчанию для устройства, когда драйвер вызывает метод IWDFDriver::CreateDevice . Чтобы получить интерфейс IWDFIoTarget , который позволяет драйверу получить доступ к целевому объекту ввода-вывода устройства по умолчанию, драйвер вызывает метод IWDFDevice::GetDefaultIoTarget .

Большинство драйверов отправляют запросы только в целевой объект ввода-вывода по умолчанию.

Если драйвер UMDF должен отправлять запросы ввода-вывода в интерфейс на основе дескрипторов, например в интерфейс сетевого сокета, драйвер должен создать целевой объект ввода-вывода на основе дескриптора файлов. Чтобы создать целевой объект ввода-вывода на основе дескриптора файлов, драйвер должен выполнить следующие действия.

  1. Вызовите метод QueryInterface интерфейса IWDFDevice устройства, чтобы получить указатель на интерфейс IWDFFileHandleTargetFactory .

  2. Получите дескриптор Win32 для файла, именованного канала или сокета, вызвав функцию Win32 CreateFile, CreateNamedPipe или сокет .

  3. Вызовите метод IWDFFileHandleTargetFactory::CreateFileHandleTarget , чтобы создать целевой объект ввода-вывода на основе дескриптора файла, канала или сокета.

Пример кода, в который показано, как получить интерфейс IWDFFileHandleTargetFactory , получить дескриптор Win32 и создать целевой объект ввода-вывода на основе дескриптора файлов, см. в примере кода iWDFFileHandleTargetFactory::CreateFileHandleTarget.

После того как драйвер создаст целевой объект ввода-вывода на основе дескриптора файлов, драйвер может отправлять запросы ввода-вывода в целевой объект ввода-вывода.

Инициализация цели удаленного ввода-вывода

Прежде чем драйвер сможет использовать удаленный целевой объект ввода-вывода, он должен создать удаленный целевой объект и открыть его следующим образом:

  1. Вызовите IWDFDevice2::CreateRemoteTarget , чтобы создать удаленный целевой объект.

  2. Вызовите IWDFRemoteTarget::OpenFileByName (для файлов) или IWDFRemoteTarget::OpenRemoteInterface (для интерфейсов устройств), чтобы открыть целевой объект для операций ввода-вывода.