Задачи драйвера в пользовательском режиме Miracast для поддержки беспроводных дисплеев Miracast на Windows 8.1
Примечание
Начиная с Windows 10 (WDDM 2.0), операционная система поставляется со встроенным стеком Miracast, который может работать на любом GPU. Сведения о стеке Microsoft Miracast и требованиях к драйверам и оборудованию для поддержки дисплеев Miracast, начиная с Windows 10, см. в следующей документации:
Создание лучших в своем классе решений беспроводной проекции с Windows 10
Соответствующая документация по WHLK на сайте Device.Graphics.WDDM13.DisplayRender.WirelessDisplay
Разработчикам драйверов больше не следует реализовывать пользовательский стек 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. |