Monitorare il rilevamento dei plug-in frequente
Le informazioni di questa pagina si applicano ai driver grafici implementati usando una versione precedente a WDDM versione 2.2.
Un output video in una scheda di visualizzazione viene considerato un dispositivo figlio della scheda di visualizzazione. Un monitor o un altro dispositivo di visualizzazione esterno che si connette all'output non è considerato un dispositivo figlio. Durante l'inizializzazione, la funzione DxgkDdiQueryChildRelations display assegna a ogni dispositivo figlio un tipo e un valore di consapevolezza HPD. Il tipo è uno degli enumeratori DXGK_CHILD_DEVICE_TYPE :
TypeVideoOutput
TypeOther
Il valore di consapevolezza HPD è uno degli enumeratori DXGK_CHILD_DEVICE_HPD_AWARENESS :
HpdAwarenessAlwaysConnected
HpdAwarenessInterruptible
HpdAwarenessPolled
Un dispositivo figlio con un tipo di TypeVideoOutput e qualsiasi valore di consapevolezza HPD diverso da HpdAwarenessAlwaysConnected è denominato connettore di output video.
Se il driver miniport visualizzato non può determinare se un monitor è connesso all'output video, il driver deve emulare il comportamento di un dispositivo interrotto, con il valore di consapevolezza HPD impostato su HpdAwarenessInterruptible. Se il driver miniport visualizzato deve indicare che un monitor interrotto deve essere connesso all'output video, ad esempio quando un utente immette una scelta rapida da tastiera per passare a una visualizzazione televisiva, il driver deve chiamare la funzione DxgkCbIndicateChildStatus con ChildStatus. HotPlug. Connessione impostata su TRUE.
In alcuni casi, il sistema operativo richiede che il driver miniport visualizzato segnala lo stato di tutti i connettori di output video che hanno un valore di consapevolezza HPD di HpdAwarenessPolled. Non esiste alcun intervallo di polling regolare; invece, la richiesta viene effettuata quando è necessario aggiornare l'elenco dei dispositivi e delle modalità di visualizzazione disponibili. Ad esempio, quando un computer portatile è ancorato, il sistema operativo deve sapere se un monitor è connesso all'output video sulla stazione di ancoraggio. Il sistema operativo effettua la richiesta chiamando la funzione DxgkDdiQueryChildStatus per ogni dispositivo figlio con un valore di consapevolezza HPD di HpdAwarenessPolled.
Per i connettori di output video con un valore di consapevolezza HPD di HpdAwarenessInterruptible, il driver miniport visualizzato è responsabile della notifica al sistema operativo ogni volta che un dispositivo di visualizzazione esterno è collegato o scollegato. Il codice di gestione degli interruzioni del driver di visualizzazione chiama la funzione DxgkCbIndicateChildStatus del driver di visualizzazione per segnalare che un dispositivo di visualizzazione esterno è stato connesso o disconnesso da un determinato output video. Quando un computer portatile è ancorato, la funzione DxgkDdiNotifyAcpiEvent del driver di visualizzazione deve chiamare DxgkCbIndicateChildStatus per ogni output video nella stazione di ancoraggio con un valore di consapevolezza HPdAwarenessInterruptible.
Se un connettore con un valore di consapevolezza HPD di HpdAwarenessPolled non è disponibile (ovvero, coperto) quando un computer portatile è ancorato, la funzione DxgkDdiNotifyAcpiEvent del driver di visualizzazione deve chiamare DxgkCbIndicateChildStatus per segnalare che il connettore è disconnesso.
L'output video associato a un pannello di visualizzazione integrato in un computer portatile è un caso insolito. Il sistema operativo deve sapere se il coperchio del computer portatile è aperto o chiuso, quindi l'idea di connessione viene usata per significare aperto e l'idea di non connessione viene usata per significare chiuso. L'output video associato a uno schermo integrato in un computer portatile ha un valore di consapevolezza HPD di HpdAwarenessInterruptible. Ciò non significa, tuttavia, che l'adattatore di visualizzazione genera un interruzione quando il coperchio viene aperto o chiuso. Invece, il BIOS ACPI genera un interruzione quando il coperchio viene aperto o chiuso. Tale interruzione comporta una chiamata alla funzione DxgkDdiNotifyAcpiEvent del driver di visualizzazione, che chiama DxgkCbIndicateChildStatus per segnalare lo stato (aperto o chiuso) del coperchio. Il driver miniport visualizzato segnala lo stato del coperchio impostando il membro HotPlug.Connected di una struttura DXGK_CHILD_STATUS su TRUE (aperto) o FALSE (chiuso) e passando la struttura DXGK_CHILD_STATUS a DxgkCbIndicateChildStatus.
L'elenco seguente descrive i passaggi seguiti quando un monitoraggio è connesso a un connettore HD15, presupponendo che il connettore abbia un valore di consapevolezza HPD di HpdAwarenessPolled.
Un monitoraggio è connesso al connettore HD15 sulla scheda di visualizzazione. La scheda di visualizzazione non rileva questa operazione come evento hot-plug.
In futuro, un'applicazione in modalità utente richiede un elenco di dispositivi visualizzati.
Per ogni connettore di output video sulla scheda di visualizzazione con un valore di consapevolezza HPD di HpdAwarenessPolled, il gestore VidPN chiama la funzione DxgkDdiQueryChildStatus del driver di visualizzazione visualizzato per determinare se è connesso un dispositivo di visualizzazione esterno. Quando DxgkDdiQueryChildStatus viene chiamato per il connettore HD15, segnala che un monitor esterno è effettivamente connesso.
Nell'elenco seguente vengono descritti i passaggi seguiti quando un monitoraggio è connesso a un connettore DVI, presupponendo che il connettore abbia un valore di consapevolezza HPD di HpdAwarenessInterruptible.
Un pannello flat è connesso al connettore DVI sulla scheda di visualizzazione.
L'adattatore di visualizzazione rileva un evento plug-hot e genera un interruzione.
L'interruzione viene gestita dalla funzione DxgkDdiInterruptRoutine del driver di visualizzazione, che pianifica una chiamata di procedura posticipata (DPC). Successivamente viene chiamata la funzione di callback del driver DPC visualizzato.
La funzione di callback DPC passa una struttura DXGK_CHILD_STATUS alla funzione DxgkCbIndicateChildStatus per segnalare lo stato del connettore DVI. Il membro ChildUid della struttura DXGK_CHILD_STATUS identifica il connettore DVI e il membro HotPlug.Connected (impostato su TRUE in questo caso) indica che un dispositivo di visualizzazione esterno è connesso.
Si supponga che un connettore DVI supporti un dongle con tre rami: DVI, HD15 e S-video. In questo caso, il driver miniport visualizzato avrebbe precedentemente enumerato tre dispositivi figlio associati a un connettore DVI fisico: DVI-on-DVI, HD15-on-DVI e S-video-on-DVI. Ognuno di questi dispositivi figlio avrebbe un tipo di TypeVideoOutput e un valore di consapevolezza HPD di HpdAwarenessInterruptible. Nell'elenco seguente vengono descritti i passaggi seguiti quando un monitoraggio è connesso al ramo HD15 del dongle.
L'adattatore di visualizzazione rileva un evento plug-hot e genera un interruzione.
L'interruzione viene gestita dalla funzione DxgkDdiInterruptRoutine del driver di visualizzazione, che pianifica una chiamata di procedura posticipata (DPC). Successivamente viene chiamata la funzione di callback del driver DPC visualizzato.
La funzione di callback DPC determina che l'evento hot-plug era nel ramo HD15 del dongle (HD15-on-DVI).
Le funzioni di callback DPC passano una struttura DXGK_CHILD_STATUS a DxgkCbIndicateChildStatus per segnalare lo stato dell'output video HD15-on-DVI. Il membro ChildUid della struttura DXGK_CHILD_STATUS identifica l'output video e il membro HotPlug.Connected (impostato su TRUE in questo caso) indica che un dispositivo di visualizzazione esterno è connesso.
L'elenco seguente descrive i passaggi seguiti quando il coperchio viene chiuso su un computer portatile.
Il coperchio viene chiuso su un computer portatile, che genera un evento ACPI. Successivamente, viene chiamata la funzione DxgkDdiNotifyAcpiEvent del driver di visualizzazione.
DxgkDdiNotifyAcpiEvent passa una struttura DXGK_CHILD_STATUS alla funzione DxgkCbIndicateChildStatus per segnalare lo stato del dispositivo figlio associato al pannello di visualizzazione predefinito. In particolare , DxgkDdiNotifyAcpiEvent imposta il membro HotPlug.Connected della struttura DXGK_CHILD_STATUS su FALSE.