다음을 통해 공유


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를 설정합니다.회전. 회전 각도에 대한 각도 입니다.
디스플레이 미니포트 드라이버의 DxgkDdiNotifyAcpiEvent 함수는 다음과 같은 상황에서 DxgkCbIndicateChildStatus 를 호출합니다.
  • 휴대용 컴퓨터의 뚜껑이 열립니다. 이 경우 디스플레이 미니포트 드라이버는 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

추가 정보

DxgkDdiQueryChildRelations

DxgkDdiQueryChildStatus