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