DXGKDDI_NOTIFY_SURPRISE_REMOVAL 콜백 함수(dispmprt.h)
DXGKDDI_NOTIFY_SURPRISE_REMOVAL 사용자가 시스템에 알리지 않고 외부 디스플레이 디바이스의 연결을 끊을 때 운영 체제에서 호출됩니다.
구문
DXGKDDI_NOTIFY_SURPRISE_REMOVAL DxgkddiNotifySurpriseRemoval;
NTSTATUS DxgkddiNotifySurpriseRemoval(
[in] PVOID MiniportDeviceContext,
[in] DXGK_SURPRISE_REMOVAL_TYPE RemovalType
)
{...}
매개 변수
[in] MiniportDeviceContext
디스플레이 어댑터와 연결된 컨텍스트 블록에 대한 핸들입니다. 디스플레이 미니포트 드라이버의 DxgkDdiAddDevice 함수는 이전에 DirectX 그래픽 커널 하위 시스템에 이 핸들을 제공했습니다.
[in] RemovalType
서프라이즈 제거 이벤트의 형식을 식별하는 형식 DXGK_SURPRISE_REMOVAL_TYPE 값입니다.
반환 값
RemovalType = DxgkRemovalHibernation에 대해 소프트웨어 리소스가 정리된 경우 STATUS_SUCCESS 반환합니다. 드라이버가 오류 코드를 반환하는 경우 운영 체제는 다음 주의 섹션에 설명된 대로 시스템을 다시 부팅하려고 시도합니다.
설명
이 콜백은 필요에 따라 WDDM(Windows Display Driver Model) 1.2 이상 디스플레이 미니포트 드라이버에서 구현할 수 있습니다.
참고
운영 체제는 디스플레이 미니포트 드라이버가 DXGK_DRIVERCAPS 구조체의 SupportSurpriseRemovalInHibernation 멤버를 1로 설정하여 지원을 나타내는 경우에만 DxgkDdiNotifySurpriseRemoval을 호출합니다.
OS에서 깜짝 제거를 감지하면 가능한 한 빨리 드라이버에 알 수 있습니다. DxgkDdiNotifySurpriseRemoval 은 수준 0 DDI 함수입니다. 즉, 드라이버에 보류 중인 GPU 워크로드가 있거나 다른 DDI 함수 내에서 실행 중일 때 호출할 수 있습니다. 이 함수를 호출하면 그래픽 하드웨어가 물리적으로 제거되었거나 시스템에서 사라졌기 때문에 하드웨어에 액세스하려고 하면 하드 중단과 같은 문제가 발생할 수 있습니다.
OS는 다음과 같이 깜짝 제거를 분류합니다.
시스템 및 그래픽 디바이스가 절전 모드 또는 최대 절전 모드와 같은 저전력 상태일 때 깜짝 제거가 발생합니다. OS가 저전력 상태에서 다시 시작되면 이 놀라운 제거를 감지하고 RemoveType = DxgkRemovalHibernation을 사용하여 드라이버의 DxgkDdiNotifySurpriseRemoval 콜백을 즉시 호출합니다. 이 경우 보류 중인 GPU 작업 또는 DDI 호출이 없을 수 있으므로 드라이버가 비교적 안전하고 쉽게 처리할 수 있어야 합니다. 반환 상태 세부 정보는 다음과 같습니다.
- OS는 드라이버가 DxgkDdiNotifySurpriseRemoval 호출을 올바르게 처리하고 STATUS_SUCCESS 반환할 것으로 예상합니다.
- 제거된 그래픽 디바이스가 POST(전원 켜기 자체 테스트) 디바이스인 경우 OS는 반환된 상태 관계없이 시스템을 정상적으로 다시 부팅하려고 시도합니다.
- POST가 아닌 디바이스의 경우 드라이버가 호출에 실패하고 해당 DXGK_DRIVERCAPSSupportSurpriseRemovalInHibernation만 지원하는 경우 OS는 시스템을 정상적으로 다시 부팅합니다. DXGK_DRIVERCAPSSupportSurpriseRemoval을 지원하는 경우 OS는 반환 상태 무시하고 그래픽 디바이스를 계속 중지합니다. 아래의 추가 반환 정보를 참조하세요.
그래픽 디바이스가 계속 실행 중일 때 제거/분리되어 있습니다. OS가 이러한 유형의 깜짝 제거를 감지하면 즉시 RemoveType = DxgkRemovalPnPNotify를 사용하여 드라이버의 DxgkDdiNotifySurpriseRemoval 콜백을 호출합니다. 이 경우 완료할 보류 중인 GPU 작업 또는 DDI 호출이 여전히 있을 수 있습니다. 드라이버가 이 알림을 수신하고 이 깜짝 제거를 처리할 수 있는 경우 드라이버는 하드웨어 액세스를 방지하고 OS로 STATUS_SUCCESS 반환하기 위해 이 디바이스를 자체 디바이스 컨텍스트에서 즉시 깜짝 제거로 표시해야 합니다. OS는 다른 DDI 함수를 계속 호출하여 리소스를 클린 그래픽 디바이스를 중지합니다. 아래에 설명된 것처럼 드라이버는 소프트웨어 리소스만 해제하거나 클린 이러한 DDI 호출에서 하드웨어를 터치하거나 액세스해서는 안 됩니다. 드라이버가 이 깜짝 제거를 처리할 수 없는 경우 OS에 적절한 오류를 반환해야 합니다. 오류가 발생하는 경우 OS는 추가 하드웨어 또는 데이터 손상을 방지하기 위해 시스템을 즉시 버그 검사합니다.
디스플레이 미니포트 드라이버가 STATUS_SUCCESS 반환하는 경우 DirectX 그래픽 커널 하위 시스템은 그래픽 스택에서 외부 디스플레이 어댑터를 계속 제거하고 다른 드라이버 구현 DxgkDdiXxx 커널 모드 함수를 호출하여 모든 리소스를 해제합니다. 이 경우 드라이버는 운영 체제의 호출에 대한 응답으로 소프트웨어 리소스 정리를 완료해야 하지만 하드웨어 설정을 터치하거나 클린 않아야 합니다. 드라이버를 사용하는 다른 하드웨어가 없으면 운영 체제에서 드라이버를 언로드합니다.
드라이버가 오류 코드를 반환하는 경우 는 DXGK_DRIVERCAPS 설정하지 않습니다. SupportSurpriseRemovalInHibernation 또는 이 함수를 구현하지 않는 DirectX 그래픽 커널 하위 시스템은 드라이버 구현 DxgkDdiXxx 함수를 더 이상 호출하지 않으며 시스템을 다시 부팅하려고 시도합니다. 이 경우 외부 디스플레이 디바이스의 연결이 끊어지기 전에 할당된 리소스는 해제되지 않습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8 |
지원되는 최소 서버 | Windows Server 2012 |
대상 플랫폼 | 데스크톱 |
머리글 | dispmprt.h |
IRQL | PASSIVE_LEVEL |