DXGKCB_INDICATE_CHILD_STATUS 콜백 함수(dispmprt.h)
DxgkCbIndicateChildStatus 함수는 디스플레이 어댑터의 지정된 자식 디바이스의 현재 상태 기록합니다.
구문
DXGKCB_INDICATE_CHILD_STATUS DxgkcbIndicateChildStatus;
NTSTATUS DxgkcbIndicateChildStatus(
[in] HANDLE DeviceHandle,
[in] PDXGK_CHILD_STATUS ChildStatus
)
{...}
매개 변수
[in] DeviceHandle
디스플레이 어댑터를 나타내는 핸들입니다. 디스플레이 미니포트 드라이버는 이전에 DxgkDdiStartDevice에 전달된 DXGKRNL_INTERFACE 구조체의 DeviceHandle 멤버에서 이 핸들을 얻었습니다.
[in] ChildStatus
자식 디바이스를 식별하고 자식 디바이스의 현재 상태 설명하는 DXGK_CHILD_STATUS 구조체에 대한 포인터입니다.
반환 값
DxgkCbIndicateChildStatus 는 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 Ntstatus.h에 정의된 오류 코드 중 하나를 반환합니다.
설명
디스플레이 어댑터가 다음과 같은 이유로 인터럽트를 생성할 때 ISR용 디스플레이 미니포트 드라이버의 DPC는 DxgkCbIndicateChildStatus 를 호출합니다.
- 외부 디바이스(일반적으로 모니터)는 HPD 인식 값이 HpdAwarenessInterruptible인 디스플레이 어댑터의 자식 디바이스 중 하나에 연결되었습니다. 이 경우 디스플레이 미니포트 드라이버는 ChildStatus->형식을 StatusConnection으로 설정하고 ChildStatus를 설정합니다.HotPlug. TRUE에 연결되었습니다.
- HPD 인식 값이 HpdAwarenessInterruptible인 디스플레이 어댑터의 자식 디바이스 중 하나에서 외부 디바이스(일반적으로 모니터)의 연결이 끊어졌습니다. 이 경우 디스플레이 미니포트 드라이버는 ChildStatus->형식을 StatusConnection으로 설정하고 ChildStatus를 설정합니다.HotPlug. FALSE에 연결되었습니다.
- 온보드 자식 디바이스(모니터 방향 인식 값이 D3DKMDT_MOA_INTERRUPTIBLE) 중 하나에 연결된 디스플레이 디바이스가 회전되었습니다. 이 경우 디스플레이 미니포트 드라이버는 ChildStatus->형식 을 StatusRotation으로 설정하고 ChildStatus를 설정합니다.회전. 회전 각도에 대한 각도 입니다.
- 휴대용 컴퓨터의 뚜껑이 열립니다. 이 경우 디스플레이 미니포트 드라이버는 ChildStatus->형식을 StatusConnection으로 설정하고 ChildStatus를 설정합니다.HotPlug. TRUE에 연결되었습니다.
- 휴대용 컴퓨터의 뚜껑이 닫힙니다. 이 경우 디스플레이 미니포트 드라이버는 ChildStatus->형식을 StatusConnection으로 설정하고 ChildStatus를 설정합니다.HotPlug. FALSE에 연결되었습니다.
예제
다음 코드 예제에서는 자식 디바이스의 현재 상태 기록하는 방법을 보여줍니다.
NTSTATUS
AtiSimulateMonitor(HW_DEVICE_EXTENSION *pHwDeviceExtension, PR2_SIMULATE_MONITOR i_pEscape)
{
NTSTATUS Status;
PVOID MonitorDescriptor = NULL;
DXGK_CHILD_STATUS ChildStatus;
ChildStatus.ChildUid = pHwDeviceExtension->ulNumberDisplays | HW_ID_DISPLAY_CHILD;
ChildStatus.Type = StatusConnection;
if(i_pEscape->Data == NULL) {
// Remove a simulated monitor
if(pHwDeviceExtension->pvSimulatedMonitorDescriptor != NULL) {
ExFreePoolWithTag(pHwDeviceExtension->pvSimulatedMonitorDescriptor, ATI_TAG);
pHwDeviceExtension->pvSimulatedMonitorDescriptor = NULL;
pHwDeviceExtension->ulSimulatedMonitorDescriptorLength = 0;
pHwDeviceExtension->ulRetryCount = 0;
pHwDeviceExtension->bReportDescriptor = FALSE;
ChildStatus.HotPlug.Connected = FALSE;
Status = DxgkCbIndicateChildStatus(pHwDeviceExtension->DeviceHandle, &ChildStatus);
}
else {
// No simulated monitor is present so the request to remove one is invalid
return STATUS_INVALID_PARAMETER;
}
}
else {
//Add a simulated monitor
}
return Status;
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista |
대상 플랫폼 | 데스크톱 |
머리글 | dispmprt.h(Dispmprt.h 포함) |
IRQL | <=DISPATCH_LEVEL |