Partager via


DXGKCB_INDICATE_CHILD_STATUS fonction de rappel (dispmprt.h)

La fonction DxgkCbIndicateChildStatus enregistre la status actuelle d’un périphérique enfant spécifié d’une carte d’affichage.

Syntaxe

DXGKCB_INDICATE_CHILD_STATUS DxgkcbIndicateChildStatus;

NTSTATUS DxgkcbIndicateChildStatus(
  [in] HANDLE DeviceHandle,
  [in] PDXGK_CHILD_STATUS ChildStatus
)
{...}

Paramètres

[in] DeviceHandle

Handle qui représente une carte d’affichage. Le pilote miniport d’affichage a précédemment obtenu cette poignée dans le membre DeviceHandle de la structure DXGKRNL_INTERFACE qui a été passé à DxgkDdiStartDevice.

[in] ChildStatus

Pointeur vers une structure de DXGK_CHILD_STATUS qui identifie l’appareil enfant et décrit la status actuelle de l’appareil enfant.

Valeur retournée

DxgkCbIndicateChildStatus retourne STATUS_SUCCESS si elle réussit. Sinon, il retourne l’un des codes d’erreur définis dans Ntstatus.h.

Remarques

Le DPC du pilote miniport d’affichage pour ISR appelle DxgkCbIndicateChildStatus lorsque l’adaptateur d’affichage génère une interruption pour l’une des raisons suivantes :

  • Un appareil externe (généralement un moniteur) a été connecté à l’un des appareils enfants de l’adaptateur d’affichage qui a une valeur de reconnaissance HPD de HpdAwarenessInterruptible. Dans ce cas, le pilote miniport d’affichage définit ChildStatus->Type sur StatusConnection et définit ChildStatus.HotPlug. Connecté à TRUE.
  • Un appareil externe (généralement un moniteur) a été déconnecté de l’un des appareils enfants de l’adaptateur d’affichage qui a une valeur de reconnaissance HPD de HpdAwarenessInterruptible. Dans ce cas, le pilote miniport d’affichage définit ChildStatus->Type sur StatusConnection et définit ChildStatus.HotPlug. Connecté à FALSE.
  • Le périphérique d’affichage connecté à l’un de ses appareils enfants embarqués (qui a une valeur de sensibilisation à l’orientation du moniteur de D3DKMDT_MOA_INTERRUPTIBLE) a été pivoté. Dans ce cas, le pilote miniport d’affichage définit ChildStatus->Type sur StatusRotation et définit ChildStatus.Rotation. Angle par rapport à l’angle de rotation.
La fonction DxgkDdiNotifyAcpiEvent du pilote miniport d’affichage appelle DxgkCbIndicateChildStatus dans les situations suivantes :
  • Le couvercle d’un ordinateur portable est ouvert. Dans ce cas, le pilote miniport d’affichage définit ChildStatus->Type sur StatusConnection et définit ChildStatus.HotPlug. Connecté à TRUE.
  • Le couvercle d’un ordinateur portable est fermé. Dans ce cas, le pilote miniport d’affichage définit ChildStatus->Type sur StatusConnection et définit ChildStatus.HotPlug. Connecté à FALSE.

Exemples

L’exemple de code suivant montre comment enregistrer le status actuel d’un appareil enfant.

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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
Plateforme cible Desktop (Expérience utilisateur)
En-tête dispmprt.h (inclure Dispmprt.h)
IRQL <=DISPATCH_LEVEL

Voir aussi

DxgkDdiQueryChildRelations

DxgkDdiQueryChildStatus