DXGKDDI_STOP_DEVICE_AND_RELEASE_POST_DISPLAY_OWNERSHIP 콜백 함수(dispmprt.h)
OS는 커널 모드 디스플레이 드라이버(KMD) DxgkddiStopDeviceAndReleasePostDisplayOwnership 함수를 호출하여 KMD가 디스플레이 디바이스를 재설정하고 현재 POST(Power-On 자체 테스트) 디바이스의 소유권을 해제하도록 요청합니다.
통사론
DXGKDDI_STOP_DEVICE_AND_RELEASE_POST_DISPLAY_OWNERSHIP DxgkddiStopDeviceAndReleasePostDisplayOwnership;
NTSTATUS DxgkddiStopDeviceAndReleasePostDisplayOwnership(
[in] PVOID MiniportDeviceContext,
[in] D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
[out] PDXGK_DISPLAY_INFORMATION DisplayInfo
)
{...}
매개 변수
[in] MiniportDeviceContext
디스플레이 어댑터와 연결된 컨텍스트 블록에 대한 핸들입니다. KMD의 DxgkDdiAddDevice 함수는 이전에 DirectX 그래픽 커널 하위 시스템(Dxgkrnl)에 이 핸들을 제공했습니다.
[in] TargetId
디스플레이 디바이스가 연결된 디스플레이 어댑터에 있는 비디오 대상의 식별자를 지정하는 D3DDDI_VIDEO_PRESENT_TARGET_ID 값입니다. 이 식별자는 이전 DxgkDdiCommitVidPn호출하는 동안 현재 VidPN(비디오 현재 네트워크) 상태에 남아 있는 대상에 대한 것일 수 있습니다.
TargetId 매개 변수 사용에 대한 자세한 내용은 설명 섹션을 참조하세요.
[out] DisplayInfo
OS에서 할당하는 DXGK_DISPLAY_INFORMATION 구조체에 대한 포인터입니다.
반환 값
성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 Ntstatus.h정의된 오류 코드 중 하나를 반환합니다. 자세한 내용은 설명 섹션을 참조하세요.
발언
Windows 8(WDDM 1.2)부터 OS는 PnP(플러그 앤 플레이) 중지 작업 중에 이 함수를 호출합니다.
이 함수가 지원된다는 것을 OS에 나타내려면 드라이버는 DxgkDdiQueryAdapterInfo 함수가 호출될 때 DXGK_DRIVERCAPS 구조체의 NonVGASupport 멤버를 설정해야 합니다.
허용되는 색 형식
KMD는 32비트 색 형식만 보고해야 합니다. 따라서 DisplayInfo->ColorFormat 멤버는 다음 두 D3DDDIFORMAT 형식 중 하나만 포함해야 합니다.
- D3DDDIFMT_X8R8G8B8
- D3DDDIFMT_A8R8G8B8
비디오 프레젠테이션 대상 초기화
KMD는 DisplayInfo->TargetId 멤버를 활성 상태로 유지되는 디스플레이의 대상 식별자에 설정해야 합니다. 일반적으로 이 식별자는 OS가 드라이버에 전달한 TargetId 매개 변수의 값입니다.
마찬가지로 KMD는 DisplayInfo->AcpiId 멤버를 활성 상태로 유지되는 디스플레이의 ACPI 식별자에 설정해야 합니다.
KMD의 필수 단계
KMD는 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 함수가 호출될 때 다음 단계를 수행해야 합니다.
TargetId 매개 변수로 표시된 비디오 현재 대상과 연결된 디스플레이 디바이스를 중지하지만 이 대상과 연결된 디스플레이를 켜고 표시해야 합니다.
이 대상과 연결된 디스플레이의 연결을 확인합니다. 대상에 연결된 디스플레이가 없는 경우 KMD는 이 함수에 대한 호출을 완료하고 STATUS_NOT_SUPPORTED 오류 코드를 반환해야 합니다.
디스플레이 어댑터에 연결된 다른 모든 디스플레이에 신호를 사용하지 않도록 설정합니다. 이렇게 할 수 없는 경우 드라이버는 다른 모든 디스플레이에 빈 이미지를 배치하려고 시도해야 합니다. 이렇게 할 수 없는 경우 드라이버는 화면의 마지막 이미지를 변경하지 않은 상태로 두어야 합니다.
표시된 대상에 현재 표시 모드를 유지하고 이 함수 호출의 일부로 이 모드를 OS에 다시 제공합니다.
드라이버가 현재 표시 모드를 유지할 수 없거나 대상이 활성 토폴로지의 일부가 아닌 경우 드라이버는 대체 활성 대상을 선택하고 해당 대상의 현재 해상도를 유지 관리해야 합니다. 가능하지 않은 경우 드라이버는 디스플레이를 기본 해상도 또는 고해상도 모드로 설정하려고 시도해야 합니다. 이 경우 디스플레이 해상도는 D3DDDIFMT_R8G8B8(픽셀당 24비트) 또는 D3DDDIFMT_X8R8G8B8(32 bpp) 색 형식으로 800 x 600픽셀 이상으로 설정해야 합니다.
활성 대상이 없는 경우 드라이버는 대상을 사용하도록 설정해야 하며, 사용 가능한 경우 내부 패널을 사용하는 것이 좋습니다.
가능하면 드라이버는 현재 프레임 버퍼를 지우고 하드웨어 커서 및 모든 디스플레이 오버레이를 사용하지 않도록 설정해야 합니다.
가능하면 드라이버는 디바이스의 감마 램프를 기본값으로 설정해야 합니다.
드라이버는 현재 프레임 버퍼를 선형 모드로 설정해야 합니다. 드라이버는 기본 스위즐 범위를 사용하거나 스위즐 모드를 사용하지 않도록 설정하여 이 작업을 수행합니다.
드라이버는 현재 프레임 버퍼를 CPU 주소 공간에 선형으로 매핑하여 CPU에서 현재 프레임 버퍼에 액세스할 수 있도록 해야 합니다.
드라이버는 표시된 대상의 표시 유형이 "사용"으로 설정되어 있는지 확인해야 합니다.
KMD에서 이러한 단계를 수행한 후에는 디바이스에 대한 현재 디스플레이 설정을 반환해야 합니다. 드라이버는 DisplayInfo 매개 변수에서 참조하는 DXGK_DISPLAY_INFORMATION 구조체의 멤버를 설정하여 이 정보를 반환합니다.
디바이스가 중지된 후 Windows 일반 디스플레이 드라이버에서 이 표시 정보를 사용하여 디스플레이 디바이스를 관리할 수 있습니다.
기타 요구 사항
UEFI(Unified Extensible Firmware Interface)를 지원하는 시스템에서는 VGA BIOS(기본 입력/출력 시스템)가 없습니다. 이러한 시스템에서 PnP 중지 작업을 지원하기 위해 WDDM 1.2 이상에서는 OS가 POST 디바이스를 재설정하고 PnP 중지 작업 중에 표시 정보를 가져올 수 있도록 지원합니다. OS는 KMD의 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 함수를 호출하여 이 작업을 수행합니다.
PnP 중지 작업은 디바이스 관리자와 같은 프로세스의 요청에 응답하거나 드라이버 업그레이드 프로세스 중에 발생할 수 있습니다.
Windows 8부터 OS는 PnP 중지 작업 중 POST 디바이스에서만 드라이버의 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 함수를 호출합니다.
KMD에서 DxgkCbAcquirePostDisplayOwnership호출하는 것은 선택 사항입니다. 그러나 OS는 드라이버가 DxgkCbAcquirePostDisplayOwnership
드라이버가 이 함수에 대한 호출을 성공적으로 완료하면 OS는 KMD의 DxgkDdiStopDevice 함수를 호출하지 않습니다. 드라이버가 이 함수에 대한 호출을 완료하지 못하면 OS는 DxgkDdiStopDevice호출하고 디바이스 동작은 Windows 7과 동일합니다.
UEFI 전용 시스템에서 KMD가 이 함수에 대한 호출에 실패하면 검은색 화면이 표시되고 IHV 드라이버가 설치되지 않습니다. 이 시나리오의 해결 방법은 사용자가 컴퓨터를 다시 부팅하는 것입니다.
PnP 시나리오에서 이 함수를 사용하는 방법에 대한 자세한 내용은 WDDM 1.2 이상
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8(WDDM 1.2) |
지원되는 최소 서버 | Windows Server 2012 |
대상 플랫폼 | 바탕 화면 |
헤더 | dispmprt.h |
IRQL |
PASSIVE_LEVEL |