운영 체제는 디스플레이 미니포트 드라이버의 DxgkDdiGetDisplayStateNonIntrusive 루틴을 호출하여 드라이버에서 디스플레이 상태 정보를 비정형적으로 수집합니다.
통사론
DXGKDDI_GETDISPLAYSTATENONINTRUSIVE DxgkddiGetdisplaystatenonintrusive;
NTSTATUS DxgkddiGetdisplaystatenonintrusive(
[in] HANDLE Context,
[in/out] PDXGKARG_GETDISPLAYSTATENONINTRUSIVE pArgs
)
{...}
매개 변수
[in] Context
DxgkDdiQueryInterface반환된 프라이빗 컨텍스트에 대한 포인터입니다.
[in/out] pArgs
DXGKARG_GETDISPLAYSTATENONINTRUSIVE 구조체에 대한 포인터입니다.
반환 값
DxgkDdiGetDisplayStateNonIntrusive 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 다음 중 하나와 같은 오류 코드를 반환합니다.
오류 코드 | 의미 |
---|---|
STATUS_DRIVER_INTERNAL_ERROR | 드라이버 내에서 일반 소프트웨어 오류가 발생했습니다. |
STATUS_ACCESS_DENIED | 하드웨어는 현재 다른 스레드에서 사용되고 있으며 이 DDI는 해당 하드웨어에 액세스할 수 없습니다. |
STATUS_DEVICE_HARDWARE_ERROR | 일반 HW 오류가 발생했습니다. |
STATUS_DEVICE_POWERED_OFF | 디바이스 전원이 꺼져 있습니다. |
발언
OS는 DxgkDdiGetDisplayStateNonIntrusive 호출하여 드라이버에서 표시 상태 정보를 수집합니다. DxgkDdiGetDisplayStateIntrusive달리 드라이버의 DxgkDdiGetDisplayStateNonIntrusive 루틴은 사용자에게 표시되는 부작용을 일으키는 작업을 수행해서는 안 되며 컬렉션 프로세스는 비교적 빠릅니다(이상적으로는 몇 밀리초 이내). 이 루틴의 호출 빈도는 상대적으로 높습니다. 잘못된 사용자 상태를 진단하기 위해 호출되는 것 외에도 OS는 디버깅을 위해 드라이버의 기록 상태 정보를 기록하는 데 이 루틴을 사용할 수도 있습니다.
드문 경우지만 플랫폼별 구현에서 드라이버가 DxgkDdiGetDisplayStateNonIntrusive 호출의 일부로 침입 작업을 수행해야 하는 경우 드라이버는 작업을 수행해야 하지만 그에 따라 DXGK_DIAG_GETDISPLAYSTATE_CAUSED_GLITCH 또는 DXGK_DIAG_GETDISPLAYSTATE_CHANGED_DISPLAY_STATE pArgs->ReturnSubStatus 설정해야 합니다. ReturnSubStatus 값에 따라 운영 체제(OS)는 지정된 시스템의 오류 시나리오에 대해서만 이 루틴을 호출할 수 있습니다.
OS는 DxgkDdiGetDisplayStateNonIntrusive 자주(주기적으로 또는 기타 일반적으로 발생하는 이벤트)를 호출하여 디버깅을 위해 드라이버 상태 데이터를 수집하고 기록 타임라인을 확인합니다. 또한 OS는 DxgkDdiGetDisplayStateIntrusive호출하여 보다 자세한 정보를 수집하기 전에 특정 오류 시나리오(예: 검은색 화면)에서 이 루틴을 호출합니다. 이 호출의 가능한 빈도를 감안할 때 드라이버는 가능한 한 빨리 완료해야 합니다. OS는 지정된 그래픽 어댑터 및 VidPnTargetId 지원되는 최대 대상 수로 NumOfTargets를 사용하여 이 DDI를 호출합니다. 미니포트 드라이버는 실제로 연결된 모니터가 있는 대상의 표시 상태 정보만 채워야 합니다. 연결된 모니터가 없는 vidpntarget의 경우 미니포트가 DXGK_DIAG_DISPLAY_CONNECTIVITY 채워야 하며 OS는 해당 대상에 대한 다른 모든 필드를 무시합니다.
메모
드라이버는 ReturnSubStatus 사용하여 오류 조건을 보고하고 모니터 연결 상태를 보고하는 데 DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED 사용하지 않아야 합니다. DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED 주요 목적은 OS가 모니터 연결에 대해 묻지 않는 침입 호출을 위한 것입니다.
드라이버가 정보를 수집하는 동안 지정된 vidpntarget에서 오류가 발생하면 ReturnSubStatus 사용하여 오류 상태를 설정하고 다음 vidpntarget으로 진행하며 모든 경로가 실패하지 않는 한 전체 호출에 실패하지 않아야 합니다. 드라이버는 OS가 블랙 박스 정보를 수집하기 위해 DxgkDdiCollectDiagnosticInfo 호출할 때 디버그하는 동안 IHV를 돕기 위해 내부 로그 컬렉션의 일부로 캡처되도록 일부 내부 오류 로그에서 이 호출 중에 발생한 오류를 기록하는 것이 좋습니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 버전 2004 |
헤더 | dispmprt.h |
참고 항목
DXGKARG_GETDISPLAYSTATENONINTRUSIVE