다음을 통해 공유


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 연결된 모니터가 있다고 보고하는 대상 수로 설정하여 이 루틴을 호출합니다. 드라이버가 지정된 대상에 연결된 모니터가 없다고 생각되면 해당 대상이 DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED ReturnSubStatus 설정해야 합니다.

메모

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

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

이 DDI의 동기화 수준은 0 수준 동기화 .

요구 사항

요구
지원되는 최소 클라이언트 Windows 10 버전 2004
헤더 dispmprt.h

참고 항목

DXGKARG_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface