次の方法で共有


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 を設定します。HotPlugTRUE接続されています
  • HPD 認識値が HpdAwarenessInterruptible であるディスプレイ アダプターの子デバイスのいずれかから、外部デバイス (通常はモニター) が切断されています。 この場合、ディスプレイ ミニポート ドライバーは、ChildStatus->StatusConnection に設定し、ChildStatus を設定します。HotPlugFALSE接続されています
  • オンボードの子デバイスの 1 つに接続されているディスプレイ デバイス (モニターの向き認識値 が D3DKMDT_MOA_INTERRUPTIBLE) が回転しました。 この場合、ディスプレイ ミニポート ドライバーは 、ChildStatus->StatusRotation に設定し、 ChildStatus を設定します。回転回転 角度に対する角度。
ディスプレイ ミニポート ドライバーの DxgkDdiNotifyAcpiEvent 関数は、次の状況で DxgkCbIndicateChildStatus を呼び出します。
  • ポータブル コンピューターの蓋が開きます。 この場合、ディスプレイ ミニポート ドライバーは、ChildStatus->StatusConnection に設定し、ChildStatus を設定します。HotPlugTRUE接続されています
  • ポータブル コンピューターの蓋が閉じます。 この場合、ディスプレイ ミニポート ドライバーは、ChildStatus->StatusConnection に設定し、ChildStatus を設定します。HotPlugFALSE接続されています

次のコード例は、子デバイスの現在の状態を記録する方法を示しています。

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
対象プラットフォーム デスクトップ
Header dispmprt.h (Dispmprt.h を含む)
IRQL <=DISPATCH_LEVEL

こちらもご覧ください

DxgkDdiQueryChildRelations

DxgkDdiQueryChildStatus