Uso del pool di dispositivi nei driver UMDF

User-Mode Driver Framework (UMDF) versioni 1.11 e 2.0

Se il driver User-Mode Driver Framework (UMDF) è stato compilato con la versione 1.11 o 2.0 ed è in esecuzione in Windows 8 o versione successiva, il framework crea una singola istanza di Wudfhost in grado di ospitare più stack di dispositivi. Questa tecnica è denominata pooling di dispositivi. Il vantaggio principale del pool di dispositivi è ridurre il consumo di memoria in un ambiente con più dispositivi UMDF.

Se un dispositivo in pool ha esito negativo, il framework termina l'istanza di Wudfhost e tenta di riavviare tutti i dispositivi precedentemente presenti nel pool. Se il dispositivo non riesce più durante il pool, il framework crea un processo Wudfhost separato per il dispositivo e tenta di riavviare il dispositivo.

Se il dispositivo non riesce nel processo host separato, il framework tenta di riavviarlo fino a cinque volte. Il framework reimposta il conteggio degli errori del dispositivo su uno quando sono trascorsi trenta minuti dall'ultimo errore.

Se il sistema viene riavviato, il framework esegue il repooling dei dispositivi ad eccezione di quelli che hanno avuto esito negativo durante l'esecuzione in un processo separato.

Per disabilitare il pool di dispositivi per un dispositivo specifico, usare la direttiva UmdfHostProcessSharing nella sezione DDInstall specifica di WDF di INF. Per informazioni su UmdfHostProcessSharing, vedere Specifica delle direttive WDF nei file INF.

Se il driver usa I/O diretto, è necessario impostare UmdfHostProcessSharing su ProcessSharingDisabled. In caso contrario, l'avvio del driver potrebbe non riuscire. Se WdfDeviceIoBufferedOrDirect è selezionato e il dispositivo è in pool, il framework modifica il metodo di accesso al buffer in I/O memorizzato nel buffer. Se wdfDeviceIoBufferedOrDirect è selezionato e il dispositivo non è in pool, il framework modifica il metodo di accesso al buffer per indirizzare l'I/O.

Per selezionare un metodo di accesso al buffer, il driver deve chiamare il metodo IWDFDeviceInitialize2::SetIoTypePreference dalla relativa funzione di callback IDriverEntry::OnDeviceAdd . Per informazioni sui metodi di accesso, vedere Accesso ai buffer dei dati nei driver UMDF-Based.

UMDF versioni 1.9 e precedenti

Se il driver è stato compilato con UMDF versione 1.9 o precedente, il framework crea un'istanza separata del processo host (Wudfhost) per ogni stack di dispositivi.

Se l'avvio del dispositivo non riesce, il framework tenta di riavviarlo fino a cinque volte. Il framework reimposta il conteggio degli errori del dispositivo su uno quando sono trascorsi trenta minuti dall'ultimo errore.

In un ambiente non in pool, se più stack di dispositivi condividono lo stesso driver UMDF:

In un ambiente in pool, se più stack di dispositivi condividono lo stesso driver in modalità utente:

Poiché è presente un solo oggetto driver in una configurazione in pool, il driver non deve archiviare alcun contesto per dispositivo in variabili globali o in oggetti condivisi tra i dispositivi, ad esempio l'oggetto di callback del driver. Al contrario, il driver deve archiviare il contesto per dispositivo in un oggetto non condiviso tra gli stack di dispositivi, ad esempio l'oggetto callback del dispositivo del driver.