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

참고

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 on Windows(WOW) 버전이 필요하지 않습니다. 예를 들어 64비트 버전의 드라이버는 64비트 프로세서에서 사용됩니다.

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

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

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

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

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

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

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

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

함수 Description
GetNextChunkData 다음 인코딩 청크에 대한 정보를 제공합니다.
ReportSessionStatus 드라이버는 이 함수를 호출하여 현재 Miracast 연결된 세션의 상태 보고합니다.