PDEV 관리

이 항목은 Windows 2000 이상에만 적용됩니다.

디스플레이 드라이버를 호출하는 스레드 수는 디바이스의 기존 PDEV 수에 따라 달라집니다. 각 디바이스에는 어댑터 출력당 최대 1개의 사용 가능한 PDEV와 무제한의 비활성화된 PDEV가 있습니다. PDEV는 드라이버의 DrvAssertMode 함수를 호출하여 사용하지 않도록 설정되거나 사용하도록 설정됩니다. 디스플레이 드라이버가 비활성화된 PDEV와 사용 가능한 PDEV의 혼합을 관리하는 경우 운영 체제는 단일 스레드가 활성화된 PDEV를 사용하여 드라이버 함수를 호출하는 동시에 여러 스레드가 비활성화된 PDEV를 사용하여 드라이버 함수를 호출하도록 허용합니다. 예를 들어 DrvBitBlt 은 사용 가능한 PDEV에서 실행될 수 있으며 다른 비활성화된 PDEV는 DrvDisableSurface에 의해 제거될 수 있습니다. 단일 디스플레이 드라이버가 여러 개의 사용 가능한 PDEV(예: 여러 모니터 시나리오)를 관리하는 경우에도 운영 체제는 여전히 활성화된 PDEV가 있는 드라이버 코드에 대한 단일 스레드 호출만 허용합니다.

디스플레이 드라이버가 PDEV 간에 공유되는 전역 리소스 및 하드웨어 상태를 관리해야 하는 경우 디스플레이 드라이버도 필요한 동기화를 처리해야 합니다. 디스플레이 드라이버는 세션 공간에 매핑되므로 각 세션에는 고유한 전역 변수 집합이 있습니다. 따라서 디스플레이 드라이버 전역 변수를 사용하여 뮤텍스와 같은 동기화 개체를 보유해서는 안 됩니다. 대신 세션 공간이 아닌 전역 공간에 매핑되는 비디오 미니포트 드라이버의 디바이스 확장에 뮤텍스를 저장합니다. 비디오 미니포트 드라이버의 HwVidInitialize 함수에서 뮤텍스를 초기화할 수 있습니다. 그런 다음, 디스플레이 드라이버의 DrvEnablePDEV 함수는 비디오 미니포트 드라이버에 사용자 지정 IOCTL을 전송하여 뮤텍스에 대한 포인터를 가져올 수 있습니다. 다른 세션에 속하는 표시 드라이버 스레드에는 포인터의 개별 복사본이 있지만 이러한 모든 복사본은 동일한 뮤텍스 개체를 가리킵니다.

디스플레이 드라이버는 뮤텍스를 획득하고 해제하는 커널 루틴을 직접 호출할 수 없으므로 디스플레이 드라이버는 비디오 미니포트 드라이버를 사용하여 이러한 작업을 수행해야 합니다. 비디오 미니포트 드라이버는 뮤텍스를 획득하고 해제하는 함수를 구현할 수 있으며, 디스플레이 드라이버는 뮤텍스 자체에 대한 포인터를 가져오는 데 사용하는 것과 동일한 사용자 지정 IOCTL에서 해당 함수에 대한 포인터를 가져올 수 있습니다.

비활성화된 PDEV를 사용하여 다음과 같은 제한된 수의 드라이버 함수만 호출할 수 있습니다.