Инициализация общего целевого объекта ввода-вывода в 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 должен отправлять запросы ввода-вывода в интерфейс на основе дескрипторов, например в интерфейс сетевого сокета, драйвер должен создать целевой объект ввода-вывода на основе дескриптора файлов. Чтобы создать целевой объект ввода-вывода на основе дескриптора файлов, драйвер должен выполнить следующие действия.
Вызовите метод QueryInterface интерфейса IWDFDevice устройства, чтобы получить указатель на интерфейс IWDFFileHandleTargetFactory .
Получите дескриптор Win32 для файла, именованного канала или сокета, вызвав функцию Win32 CreateFile, CreateNamedPipe или сокет .
Вызовите метод IWDFFileHandleTargetFactory::CreateFileHandleTarget , чтобы создать целевой объект ввода-вывода на основе дескриптора файла, канала или сокета.
Пример кода, в который показано, как получить интерфейс IWDFFileHandleTargetFactory , получить дескриптор Win32 и создать целевой объект ввода-вывода на основе дескриптора файлов, см. в примере кода iWDFFileHandleTargetFactory::CreateFileHandleTarget.
После того как драйвер создаст целевой объект ввода-вывода на основе дескриптора файлов, драйвер может отправлять запросы ввода-вывода в целевой объект ввода-вывода.
Инициализация цели удаленного ввода-вывода
Прежде чем драйвер сможет использовать удаленный целевой объект ввода-вывода, он должен создать удаленный целевой объект и открыть его следующим образом:
Вызовите IWDFDevice2::CreateRemoteTarget , чтобы создать удаленный целевой объект.
Вызовите IWDFRemoteTarget::OpenFileByName (для файлов) или IWDFRemoteTarget::OpenRemoteInterface (для интерфейсов устройств), чтобы открыть целевой объект для операций ввода-вывода.