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


Задачи драйвера в пользовательском режиме 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. Затем после установки канала RTSP (Real-Time Streaming Protocol), операционная система вызывает StartMiracastSession , чтобы фактически запустить сеанс, подключенный к Miracast. Когда драйвер отвечает на этот вызов функции, он должен использовать функцию Getaddrinfo Winsock или другие соответствующие функции, чтобы получить IP-адрес приемника Miracast и использовать стандартные функции Winsock для создания сокета протокола удаленного рабочего стола HTCP.

Если дисплей 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.