Implementazione di IPowerNotify

Se gli oggetti miniport del driver (vedere Interfacce dell'oggetto Audio Miniport) o gli oggetti di flusso (vedere Interfacce oggetto flusso audio) devono conoscere le modifiche dello stato di alimentazione, possono supportare l'interfaccia IPowerNotify nei metodi QueryInterface e ricevere notifiche dal driver di sistema PortCls ogni volta che si verifica una modifica di alimentazione.

Quando lo stato di alimentazione cambia, PortCls chiama il metodo IPowerNotify::P owerChangeNotify per notificare singolarmente ognuno degli oggetti miniport e stream che supportano l'interfaccia IPowerNotify . Durante la chiamata PowerChangeNotify , un oggetto miniport deve memorizzare nella cache il nuovo stato di alimentazione del dispositivo. Durante la chiamata CAdapterCommon::Init ,ad esempio, vedere l'implementazione nell'adattatore di esempio Msvad nel Microsoft Windows Driver Kit [WDK], il driver miniport deve impostare lo stato di alimentazione memorizzato nella cache sul valore iniziale di PowerDeviceD0.

Prima di chiamare PowerChangeState per l'alimentazione, PortCls chiama IPowerNotify::P owerChangeNotify per consentire al driver miniport di salvare qualsiasi contesto del dispositivo necessario. Questo contesto può includere i valori del registro hardware che incorporano la topologia di filtro corrente e le impostazioni della riga di mixer, ad esempio. Dopo aver chiamato PowerChangeState per l'alimentazione, PortCls chiama PowerChangeNotify in modo che il driver miniport possa ripristinare il contesto salvato.

Quando si attiva l'alimentazione, PortCls sospende i flussi di dati audio attivi prima di chiamare PowerChangeNotify. Quando si esegue l'alimentazione, PortCls chiama PowerChangeNotify prima di riavviare i flussi di dati audio sospesi.

Le classi di oggetti miniport e stream del driver miniport possono ereditare dall'interfaccia IPowerNotify e supportare questa interfaccia nel metodo NonDelegatingQueryInterface . È possibile usare la definizione IMP_IPowerNotify dal file di intestazione Portcls.h per aggiungere la dichiarazione di funzione per il metodo PowerChangeNotify alla definizione della classe per gli oggetti miniport e stream del driver.