다음을 통해 공유


DXGKDDI_GETDISPLAYSTATENONINTRUSIVE 콜백 함수(dispmprt.h)

운영 체제는 디스플레이 미니포트 드라이버의 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 호출의 일부로 침입 작업을 수행해야 하는 드문 경우, 드라이버는 작업을 수행해야 하지만 그에 따라 pArgs-ReturnSubStatus>를 DXGK_DIAG_GETDISPLAYSTATE_CAUSED_GLITCH 설정하거나 그에 따라 DXGK_DIAG_GETDISPLAYSTATE_CHANGED_DISPLAY_STATE 합니다. 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를 돕기 위해 내부 로그 컬렉션의 일부로 캡처되도록 일부 내부 오류 로그에서 이 호출 중에 적중된 오류를 기록하는 것이 가장 좋습니다.

이 DDI의 동기화 수준은 0 수준 동기화입니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10, 버전 2004
머리글 dispmprt.h

추가 정보

DXGKARG_GETDISPLAYSTATENONINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateIntrusive

DxgkDdiQueryInterface