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 に接続されています。
- オンボードの子デバイスの 1 つに接続されているディスプレイ デバイス (モニターの向き認識値 が 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 |
対象プラットフォーム | デスクトップ |
Header | dispmprt.h (Dispmprt.h を含む) |
IRQL | <=DISPATCH_LEVEL |