Gestione di PDEV

Questo argomento si applica solo a Windows 2000 e versioni successive.

Il numero di thread che chiamano in un driver di visualizzazione dipende dal numero di PDEV esistenti in un dispositivo. Ogni dispositivo ha un massimo di un PDEV abilitato per ogni output dell'adattatore e un numero illimitato di PDEV disabilitati. Un PDEV è disabilitato o abilitato chiamando la funzione DrvAssertMode del driver. Quando un driver di visualizzazione gestisce una combinazione di PDEV disabilitati e abilitati, il sistema operativo consente a un singolo thread di chiamare una funzione driver con un PDEV abilitato, consentendo allo stesso tempo a più thread di chiamare le funzioni driver con PDEV disabilitati. Ad esempio, DrvBitBlt potrebbe essere in esecuzione nel PDEV abilitato mentre un altro PDEV disabilitato viene eliminato definitivamente da DrvDisableSurface. Anche se un singolo driver di visualizzazione gestisce più PDEV abilitati, ad esempio in uno scenario di monitoraggio multiplo, il sistema operativo consente comunque solo a un singolo thread di chiamare nel codice driver con uno qualsiasi di questi PDEV abilitati.

Se il driver di visualizzazione deve gestire tutte le risorse globali e gli stati hardware condivisi tra PDEV, il driver di visualizzazione deve gestire anche qualsiasi sincronizzazione necessaria. Il driver di visualizzazione viene mappato nello spazio sessione, quindi ogni sessione ha un proprio set di variabili globali. Pertanto, non è necessario utilizzare una variabile globale del driver di visualizzazione per contenere un oggetto di sincronizzazione, ad esempio un mutex. In alternativa, archiviare il mutex nell'estensione del dispositivo del driver miniport video, mappato nello spazio globale non nello spazio sessione. È possibile inizializzare il mutex nella funzione HwVidInitialize del driver miniport video. Quindi, la funzione DrvEnablePDEV del driver di visualizzazione può ottenere un puntatore al mutex inviando un IOCTL personalizzato al driver miniport video. I thread del driver di visualizzazione che appartengono a sessioni diverse avranno copie separate del puntatore, ma tutte queste copie punteranno allo stesso oggetto mutex.

Il driver di visualizzazione non è autorizzato a chiamare direttamente le routine del kernel che acquisiscono e rilasciano un mutex, quindi il driver di visualizzazione deve basarsi sul driver miniport video per eseguire tali attività. Il driver miniport video potrebbe implementare una funzione che acquisisce e rilascia il mutex e il driver di visualizzazione potrebbe ottenere un puntatore a tale funzione nello stesso IOCTL personalizzato che usa per ottenere un puntatore al mutex stesso.

Solo il numero limitato di funzioni driver seguenti può essere chiamato con un PDEV disabilitato: