DXGKCB_INDICATE_CHILD_STATUS funzione di callback (dispmprt.h)
La funzione DxgkCbIndicateChildStatus registra lo stato corrente di un dispositivo figlio specificato di una scheda di visualizzazione.
Sintassi
DXGKCB_INDICATE_CHILD_STATUS DxgkcbIndicateChildStatus;
NTSTATUS DxgkcbIndicateChildStatus(
[in] HANDLE DeviceHandle,
[in] PDXGK_CHILD_STATUS ChildStatus
)
{...}
Parametri
[in] DeviceHandle
Handle che rappresenta una scheda di visualizzazione. Il driver miniport di visualizzazione precedentemente ottenuto questo handle nel membro DeviceHandle del DXGKRNL_INTERFACE passato a DxgkDdiStartDevice.
[in] ChildStatus
Puntatore a una struttura DXGK_CHILD_STATUS che identifica il dispositivo figlio e descrive lo stato corrente del dispositivo figlio.
Valore restituito
DxgkCbIndicateChildStatus restituisce STATUS_SUCCESS se ha esito positivo. In caso contrario, restituisce uno dei codici di errore definiti in Ntstatus.h.
Osservazioni
Il DPC del driver miniport di visualizzazione per ISR chiama DxgkCbIndicateChildStatus quando la scheda di visualizzazione genera un interrupt per uno dei motivi seguenti:
- Un dispositivo esterno (in genere un monitor) è stato connesso a uno dei dispositivi figlio della scheda di visualizzazione con un valore di riconoscimento HPD di HpdAwarenessInterruptible. In questo caso, il driver miniport di visualizzazione imposta ChildStatus->Type su StatusConnection e imposta ChildStatus.HotPlug. connesso a TRUE.
- Un dispositivo esterno (in genere un monitor) è stato disconnesso da uno dei dispositivi figlio della scheda di visualizzazione con un valore di riconoscimento HPD di HpdAwarenessInterruptible. In questo caso, il driver miniport di visualizzazione imposta ChildStatus->Type su StatusConnection e imposta ChildStatus.HotPlug. connesso a FALSE.
- Il dispositivo di visualizzazione connesso a uno dei relativi dispositivi figlio a bordo (con un valore di riconoscimento dell'orientamento del monitor di D3DKMDT_MOA_INTERRUPTIBLE) è stato ruotato. In questo caso, il driver miniport di visualizzazione imposta ChildStatus->Type su StatusRotation e imposta ChildStatus.rotazione.Angolo all'angolo di rotazione.
- Il coperchio su un computer portatile viene aperto. In questo caso, il driver miniport di visualizzazione imposta ChildStatus->Type su StatusConnection e imposta ChildStatus.HotPlug. connesso a TRUE.
- Il coperchio su un computer portatile viene chiuso. In questo caso, il driver miniport di visualizzazione imposta ChildStatus->Type su StatusConnection e imposta ChildStatus.HotPlug. connesso a FALSE.
Esempi
Nell'esempio di codice seguente viene illustrato come registrare lo stato corrente di un dispositivo figlio.
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;
}
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows Vista |
piattaforma di destinazione | Desktop |
intestazione | dispmprt.h (include Dispmprt.h) |
IRQL | <=DISPATCH_LEVEL |