支持 Miracast 无线显示器的 Miracast 用户模式驱动程序任务Windows 8.1

注意

从 Windows 10 (WDDM 2.0) 开始,操作系统附带了可在任何 GPU 上运行的内置 Miracast 堆栈。 有关 Microsoft Miracast 堆栈以及从 Windows 10 开始支持 Miracast 显示器的驱动程序和硬件要求的信息,请参阅以下文档:

驱动程序开发人员不应再实现自定义 Miracast 堆栈。 Microsoft 可能会删除未来版本的 Windows 中对自定义 Miracast 堆栈的支持。

若要在 Windows 8.1 上启用 Miracast 无线显示器,需要创建实现 Miracast 用户模式驱动程序的独立唯一 DLL。 此驱动程序在专用会话 0 进程中加载。 将 INF 文件中设备软件设置中的驱动程序名称添加为 MiracastDriverName

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

DLL 应具有操作系统可以调用的名为 QueryMiracastDriverInterface 的导出函数。 此驱动程序二进制文件不得使用现有的 Direct3D 用户模式显示驱动程序 DLL。

由于 Miracast 用户模式驱动程序已加载到 UMDF0 进程中,因此 Windows 上不需要单独的 Windows (WOW) 版本的此驱动程序。 例如,在 64 位处理器上使用 64 位版本的驱动程序。

当操作系统准备好准备 Miracast 连接会话时,它会调用 Miracast 用户模式驱动程序的 CreateMiracastContext 函数。 调用此函数时,Miracast 用户模式驱动程序将分配启动 Miracast 连接会话所需的所有软件资源。 在此调用中,操作系统还提供指向回调函数的指针,驱动程序可以在当前 Miracast 上下文的生存期内调用这些函数。 然后,在建立 Real-Time 流式处理协议 (RTSP) 链接后,操作系统调用 StartMiracastSession 以实际启动 Miracast 连接的会话。 当驱动程序响应此函数调用时,它应使用 Winsock getaddrinfo 函数或其他相关函数来获取 Miracast 接收器的 Internet 协议 (IP) 地址,并使用标准 Winsock 函数创建超文本缓存协议 (HTCP) 远程桌面协议 (RDP) 套接字。

如果 Miracast 显示器可用,Miracast 用户模式驱动程序会调用操作系统提供的 MiracastIoControl 函数,向显示微型端口驱动程序发送 I/O 控制请求,以报告监视器到达热插拔检测 (HPD) 感知值。 Miracast 用户模式驱动程序还应查询 Miracast 接收器信息和功能,并通过调用 MiracastIoControl 向显示微型端口驱动程序报告其中一些信息,例如监视器说明。

启动 Miracast 连接会话后,在准备好流式处理数据并将其发送到网络之前,驱动程序需要调用 ReportStatistic 回调函数,以向操作系统报告 Miracast 链接的统计信息。

当操作系统停止 Miracast 连接的会话时,它将调用 Miracast 用户模式驱动程序的 StopMiracastSession 函数。 为了响应此函数调用,驱动程序应关闭它创建的所有套接字,并删除所有进一步的数据流。 驱动程序不应关闭操作系统赋予它的 RTSP 套接字。 它还不应向显示器微型端口驱动程序发送请求,以在监视器离开时报告 HPD。

Miracast 用户模式驱动程序应释放它在 CreateMiracastContext 中分配的所有软件资源,以响应操作系统对 DestroyMiracastContext 函数的调用。

当显示微型端口驱动程序收到 DxgkDdiCommitVidPn 请求以关闭连接的 Miracast 监视器时,驱动程序应调用操作系统提供的 DxgkCbMiracastSendMessage 回调函数以向 Miracast 用户模式驱动程序发送消息。 然后,Miracast 用户模式驱动程序应将 Miracast 接收器置于低功耗状态。

Miracast 用户模式驱动程序可以选择调用 RegisterForDataRateNotifications 回调函数,以向操作系统注册,以便每秒接收一次网络服务质量 (QoS) 通知和 Miracast 连接的当前网络带宽。 此网络信息由操作系统对 pfnDataRateNotify 函数的调用提供。

Miracast 用户模式驱动程序还可以调用操作系统提供的以下可选回调函数:

函数 说明
GetNextChunkData 提供有关下一个编码区块的信息。
ReportSessionStatus 驱动程序调用此函数来报告当前 Miracast 连接会话的状态。