Miracast 무선 디스플레이를 지원하는 사용자 모드 드라이버 작업 Miracast

참고

Windows 10 현재 OS에는 Miracast 무선 디스플레이의 네이티브 구현이 포함되어 있습니다. 드라이버는 더 이상 사용자 지정 Miracast 표시 구성 요소를 구현하지 않아야 합니다. 사용자 지정 Miracast 구현에 대한 지원은 향후 버전의 Windows 제거될 수 있습니다.

Miracast 무선 디스플레이를 사용하도록 설정하려면 Miracast 사용자 모드 드라이버를 구현하는 독립 실행형 고유한 DLL을 만들어야 합니다. 이 드라이버는 전용 세션 0 프로세스에 로드됩니다. INF 파일의 디바이스 소프트웨어 설정에서 드라이버 이름을 MiracastDriverName으로 추가합니다.

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

DLL에는 운영 체제에서 호출할 수 있는 QueryMiracastDriverInterface 라는 내보내기 함수가 있어야 합니다. 이 드라이버 이진 파일은 기존 Microsoft Direct3D 사용자 모드 표시 드라이버 DLL을 사용하면 안 됩니다.

Miracast 사용자 모드 드라이버가 UMDF0 프로세스에 로드되므로 이 드라이버의 Windows(WOW) 버전에 대한 별도의 Windows 필요하지 않습니다. 예를 들어 64비트 프로세서에서는 64비트 버전의 드라이버가 사용됩니다.

운영 체제가 Miracast 연결된 세션을 준비할 준비가 되면 Miracast 사용자 모드 드라이버의 CreateMiracastContext 함수를 호출합니다. 이 함수가 호출되면 Miracast 사용자 모드 드라이버는 Miracast 연결된 세션을 시작하는 데 필요한 모든 소프트웨어 리소스를 할당합니다. 이 호출에서 운영 체제는 드라이버가 현재 Miracast 컨텍스트의 수명 동안 호출할 수 있는 콜백 함수에 대한 포인터도 제공합니다. 그런 다음 RTSP(Real-Time 스트리밍 프로토콜) 링크가 설정되면 운영 체제에서 StartMiracastSession을 호출하여 실제로 Miracast 연결된 세션을 시작합니다. 이 함수 호출에 응답할 때 드라이버는 Winsock getaddrinfo 함수 또는 기타 관련 함수를 사용하여 Miracast 싱크의 IP(인터넷 프로토콜) 주소를 가져와 표준 Winsock 함수를 사용하여 HTCP(Hypertext Caching Protocol) RDP(원격 데스크톱 프로토콜) 소켓을 만들어야 합니다.

Miracast 디스플레이를 사용할 수 있게 되면 Miracast 사용자 모드 드라이버는 운영 체제 제공 MiracastIoControl 함수를 호출하여 디스플레이 미니포트 드라이버에 I/O 컨트롤 요청을 보내 HPD(모니터 도착 핫 플러그 감지) 인식 값을 보고합니다. 또한 Miracast 사용자 모드 드라이버는 싱크 정보 및 기능을 Miracast 쿼리하고 MiracastIoControl을 호출하여 모니터 설명과 같은 일부 정보를 표시 미니포트 드라이버에 보고해야 합니다.

Miracast 연결된 세션이 시작된 후 스트리밍 데이터를 준비한 후 네트워크로 보내기 전에 드라이버는 ReportStatistic 콜백 함수를 호출하여 Miracast 링크의 통계를 운영 체제에 보고해야 합니다.

운영 체제가 Miracast 연결된 세션을 중지하면 Miracast 사용자 모드 드라이버의 StopMiracastSession 함수를 호출합니다. 이 함수 호출에 대한 응답으로 드라이버는 만든 모든 소켓을 닫고 모든 추가 데이터 스트리밍을 삭제해야 합니다. 드라이버는 운영 체제에서 제공한 RTSP 소켓을 닫지 않아야 합니다. 또한 디스플레이 미니포트 드라이버에 모니터 출발 시 HPD를 보고하라는 요청을 보내지 않아야 합니다.

DestroyMiracastContext 함수에 대한 운영 체제의 호출에 응답할 때 Miracast 사용자 모드 드라이버는 CreateMiracastContext에 할당된 모든 소프트웨어 리소스를 해제해야 합니다.

디스플레이 미니포트 드라이버가 연결된 Miracast 모니터의 전원을 끄는 DxgkDdiCommitVidPn 요청을 받으면 드라이버는 운영 체제 제공 DxgkCbMiracastSendMessage 콜백 함수를 호출하여 Miracast 사용자 모드 드라이버에 메시지를 보내야 합니다. Miracast 사용자 모드 드라이버는 Miracast 싱크를 저전력 상태로 전환해야 합니다.

RegisterForDataRateNotifications 콜백 함수는 필요에 따라 Miracast 사용자 모드 드라이버에서 호출하여 1초에 한 번씩 QoS(네트워크 서비스 품질) 알림과 Miracast 연결의 현재 네트워크 대역폭을 수신하도록 운영 체제에 등록할 수 있습니다. 이 네트워크 정보는 pfnDataRateNotify 함수에 대한 운영 체제 호출을 통해 제공됩니다.

Miracast 사용자 모드 드라이버는 운영 체제에서 제공하는 선택적 콜백 함수를 호출할 수도 있습니다.

GetNextChunkData
다음 인코딩 청크에 대한 정보를 제공합니다.

ReportSessionStatus
드라이버는 이 함수를 호출하여 현재 Miracast 연결된 세션의 상태를 보고합니다.