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


Задачи драйвера в режиме пользователя Miracast для поддержки беспроводных дисплеев Miracast в Windows 8.1

Замечание

Начиная с Windows 10 (WDDM 2.0), операционная система поставляется со встроенным стеком Miracast, который может работать на любом GPU. Сведения о стеке Microsoft Miracast и требованиях драйверов и оборудования для поддержки экранов Miracast, начиная с Windows 10, см. в следующей документации:

Разработчики драйверов больше не должны реализовывать пользовательский стек Miracast. Корпорация Майкрософт может удалить поддержку пользовательских стеков Miracast в будущей версии Windows.

Чтобы включить беспроводные экраны Miracast в Windows 8.1, необходимо создать автономную библиотеку DLL, которая реализует драйвер пользовательского режима Miracast. Этот драйвер загружается в выделенном процессе сеанса 0. Добавьте имя драйвера в параметры программного обеспечения устройства в INF-файле как MiracastDriverName:

[MyDevice_DeviceSettings]
HKR,, MiracastDriverName, %REG_SZ%, Miracast.dll

Библиотека DLL должна иметь функцию экспорта QueryMiracastDriverInterface, которую может вызвать операционная система. Этот двоичный файл драйвера не должен использовать существующую библиотеку DLL драйвера отображения в пользовательском режиме Direct3D.

Так как драйвер пользовательского режима Miracast загружается в процесс UMDF0, отдельная версия Windows в Windows (WOW) этого драйвера не требуется. Например, 64-разрядная версия драйвера используется на 64-разрядном процессоре.

Когда операционная система готова подготовить подключенный сеанс Miracast, она вызывает функцию CreateMiracastContext драйвера Miracast в пользовательском режиме. При вызове этой функции драйвер пользовательского режима Miracast выделяет все ресурсы программного обеспечения, необходимые для запуска подключенного сеанса Miracast. В этом вызове операционная система также предоставляет указатели на функции обратного вызова, которые драйвер может вызывать в течение времени существования текущего контекста Miracast. После того как будет установлена связь потоковой передачи Real-Time (RTSP), операционная система вызовет StartMiracastSession для фактического начала подключенного сеанса Miracast. Когда драйвер отвечает на этот вызов функции, он должен использовать функцию Winsock getaddrinfo или другие соответствующие функции, чтобы получить IP-адрес приемника Miracast и использовать стандартные функции Winsock для создания сокета протокола удаленного рабочего стола (RDP).

Если дисплей Miracast становится доступным, драйвер пользовательского режима Miracast вызывает функцию MiracastIoControl , предоставляемую операционной системой, для отправки запроса на управление ввода-вывода в драйвер минипорта для отображения, чтобы сообщить о значении осведомленности о появлении горячего подключаемого модуля (HPD). Драйвер пользовательского режима Miracast должен запрашивать сведения и возможности приемника Miracast и сообщать некоторые из этих сведений, например описание монитора, драйверу минипорта дисплея, вызвав MiracastIoControl.

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

Когда операционная система останавливает подключенный сеанс Miracast, она вызывает функцию StopMiracastSession драйвера Miracast в пользовательском режиме. В ответ на этот вызов функции драйвер должен закрыть все созданные сокеты и удалить все дальнейшие потоки данных. Драйвер не должен закрыть сокет RTSP, который он дал операционной системе. Он также не должен отправлять запрос драйверу минипорта дисплея, чтобы сообщить о HPD при отключении монитора.

Драйвер пользовательского режима Miracast должен освободить все ресурсы программного обеспечения, выделенные в CreateMiracastContext в ответ на вызовы операционной системы функции DestroyMiracastContext .

Когда драйвер мини-порта дисплея получает запрос DxgkDdiCommitVidPn для отключения подключенного монитора Miracast, драйвер должен вызвать предоставленную операционной системой функцию обратного вызова DxgkCbMiracastSendMessage , чтобы отправить сообщение драйверу пользовательского режима Miracast. Затем драйвер пользовательского режима Miracast должен поместить приемник Miracast в состояние низкой мощности.

Функция обратного вызова RegisterForDataRateNotifications может при необходимости вызываться драйвером пользовательского режима Miracast для регистрации в операционной системе, чтобы каждую секунду получать уведомления о качестве обслуживания сети (QoS) и текущей пропускной способности сети подключения Miracast. Эта сетевая информация предоставляется вызовами операционной системы функции pfnDataRateNotify .

Драйвер пользовательского режима Miracast также может вызывать эти необязательные функции обратного вызова, предоставляемые операционной системой:

Функция Описание
GetNextChunkData Предоставляет сведения о следующем блоке кодирования.
ReportSessionStatus Драйвер вызывает эту функцию, чтобы сообщить о состоянии текущего подключенного сеанса Miracast.