DXGKDDI_GETDISPLAYSTATEINTRUSIVE 콜백 함수(dispmprt.h)

OS(운영 체제)는 디스플레이 미니포트 드라이버의 DxgkDdiGetDisplayStateNonIntrusive 루틴을 호출하여 드라이버에서 표시 상태 정보를 수집합니다.

구문

DXGKDDI_GETDISPLAYSTATEINTRUSIVE DxgkddiGetdisplaystateintrusive;

NTSTATUS DxgkddiGetdisplaystateintrusive(
  [in]     HANDLE Context,
  [in/out] PDXGKARG_GETDISPLAYSTATEINTRUSIVE pArgs
)
{...}

매개 변수

[in] Context

DxgkDdiQueryInterface에서 반환된 프라이빗 컨텍스트에 대한 포인터입니다.

[in/out] pArgs

DXGKARG_GETDISPLAYSTATEINTRUSIVE 구조체에 대한 포인터입니다.

반환 값

DxgkDdiGetDisplayStateIntrusive 는 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 다음 중 하나와 같은 오류 코드를 반환합니다.

오류 코드 의미
STATUS_DRIVER_INTERNAL_ERROR 드라이버 내에서 일반 소프트웨어 오류가 발생했습니다.
STATUS_ACCESS_DENIED 하드웨어는 현재 다른 스레드에서 사용되고 있으며 이 DDI는 액세스할 수 없습니다.
STATUS_DEVICE_HARDWARE_ERROR 일반 HW 오류가 발생했습니다.
STATUS_DEVICE_POWERED_OFF 디바이스 전원이 꺼져 있습니다.

설명

OS는 DxgkDdiGetDisplayStateIntrusive 를 호출하여 사용자가 이미 잘못된 상태일 때 드라이버에서 표시 상태 정보를 수집합니다. DxgkDdiGetDisplayStateNonIntrusive와 달리 드라이버의 DxgkDdiGetDisplayStateIntrusive 루틴은 사용자에게 표시되는 부작용이 있는 더 많은 침입 작업을 수행할 수 있습니다. 침입 연산은 다음과 같이 정의됩니다(비입력 연산에는 이러한 속성이 없음).

  • 이로 인해 사용자에게 표시되는 부작용(결함)이 발생합니다(예: 일시적으로 검사 중단 및 파괴적인 모니터 연결 검사).

  • 속도가 느리고 자주 호출되는 경우 시스템 또는 디스플레이 성능에 영향을 줍니다(1초에 여러 번).

  • 표시 하위 시스템(또는 다른 하위 시스템)의 상태를 직접 또는 간접적으로 변경합니다.

드라이버는 데이터를 수집할 때 의도적으로 시스템의 상태를 변경해서는 안 됩니다.

OS는 DxgkDdiGetDisplayStateNonIntrusive 호출에 비해 이 루틴을 훨씬 덜 자주 호출합니다. 대부분의 오류 시나리오에서 OS는 먼저 DxgkDdiGetDisplayStateNonIntrusive 를 호출한 다음 DxgkDdiGetDisplayStateIntrusive 를 호출하여 침입 호출의 의도하지 않은 효과가 비입력 데이터 수집에 영향을 주지 않도록 합니다.

DXGKRNL은 NumOfTargets 가 OS에서 해당 VidPnTargetId 가 채워진 모니터가 연결되어 있다고 보고하는 대상 수로 설정된 이 루틴을 호출합니다. 드라이버가 지정된 대상에 연결된 모니터가 없다고 생각되면 해당 대상에 대한 ReturnSubStatus 를 DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED 설정해야 합니다.

참고

드라이버가 정보를 수집하는 동안 지정된 vidpntarget에서 오류가 발생하면 ReturnSubStatus 를 사용하여 오류 상태를 설정하고 다음 vidpntarget으로 진행해야 하며 모든 경로가 실패하지 않는 한 전체 호출에 실패하지 않아야 합니다. 드라이버는 OS가 블랙박스 정보를 수집하기 위해 DxgkDdiCollectDiagnosticInfo 를 호출할 때 IHV 디버그를 돕기 위해 내부 로그 컬렉션의 일부로 캡처되도록 일부 내부 오류 로그에서 이 호출 중에 발생한 오류를 기록해야 합니다.

OS에는 DxgkDdiGetDisplayStateIntrusive 가 완료될 수 있는 충분한 시간 제한(약 5초)이 있으므로 드라이버가 모든 관련 상태를 수집하는 데 더 많은 시간을 할애할 수 있습니다. 시간 제한 후 OS는 머신을 버그 검사하고 드라이버가 이 호출에서 중단되면 덤프를 수집할 수 있으므로 미니포트는 항상 시간 프레임 내에서 이 호출을 완료하려고 시도해야 합니다.

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

요구 사항

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

추가 정보

DXGKARG_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface