Registrazione per la notifica dell'arrivo dell'interfaccia del dispositivo e rimozione del dispositivo
Questo argomento descrive come un'applicazione o un driver in modalità utente esegue la registrazione per la notifica dell'arrivo dell'interfaccia del dispositivo e della rimozione del dispositivo.
Se si segue questa procedura in un driver UMDF 2, vedere Uso di interfacce dispositivo per un esempio di codice.
In genere, un componente in modalità utente chiama CM_Register_Notification per trovare un'interfaccia del dispositivo e quindi invia richieste di I/O all'interfaccia. A tale scopo, il componente viene registrato sia per CM_NOTIFY_FILTER_TYPE_DEVICEINTERFACE che per CM_NOTIFY_FILTER_TYPE_DEVICEHANDLE, rispettivamente per la notifica degli arrivi dell'interfaccia del dispositivo e delle rimozioni dei dispositivi. La sequenza chiamante potrebbe essere simile alla seguente.
Registrazione per la notifica dell'arrivo dell'interfaccia del dispositivo e rimozione del dispositivo
Chiamare CM_Register_Notification con CM_NOTIFY_FILTER_TYPE_DEVICEINTERFACE per registrarsi per le notifiche di arrivo dell'interfaccia del dispositivo. Quando arrivano interfacce future nella classe specificata, il sistema invia una notifica al componente.
Poiché l'interfaccia a cui si vuole inviare l'I/O potrebbe essere già presente nel sistema, chiamare CM_Get_Device_Interface_List o SetupDiGetClassDevs per recuperare un elenco di interfacce esistenti. Nota Se un'interfaccia arriva tra il passaggio 1 e il passaggio 2, l'interfaccia viene elencata due volte, dalla registrazione nel passaggio 1 e dall'elenco di interfacce nel passaggio 2.
Dopo aver trovato l'interfaccia desiderata, chiama CreateFile per aprire un handle per il dispositivo.
Dopo aver creato correttamente un handle di dispositivo nel passaggio 3, chiamare CM_Register_Notification una seconda volta. Questa volta, eseguire la registrazione per le notifiche di tipo CM_NOTIFY_FILTER_TYPE_DEVICEHANDLE e fornire il nuovo handle del dispositivo come handle per cui ricevere le notifiche. Quando il dispositivo rappresentato dall'interfaccia riceve una richiesta di rimozione query, il sistema invia una notifica al componente.
Usare questa tabella durante l'implementazione del callback di notifica dell'handle del dispositivo.
Valore dell'azione ricevuto dal callback | Cosa deve fare il componente |
---|---|
CM_NOTIFY_ACTION_DEVICEQUERYREMOVE | Chiamare CloseHandle per chiudere l'handle del dispositivo. In caso contrario, l'handle aperto impedisce la rimozione della query da parte di questo dispositivo. |
CM_NOTIFY_ACTION_DEVICEQUERYREMOVEFAILED | La rimozione della query non è riuscita, quindi il dispositivo e la relativa interfaccia sono ancora validi. Per continuare a inviare I/O all'interfaccia, aprire un nuovo handle. La registrazione delle notifiche nel dispositivo tramite l'handle originale rimane valida anche se tale handle è stato chiuso, quindi non è necessario annullare la registrazione della notifica e creare una nuova registrazione sotto il nuovo handle per l'interfaccia del dispositivo. Si noti che se si esegue la registrazione per le notifiche in un dispositivo in fase di rimozione delle query dopo l'invio delle notifiche CM_NOTIFY_ACTION_DEVICEQUERYREMOVE , è possibile ricevere una notifica di CM_NOTIFY_ACTION_DEVICEQUERYREMOVEFAILED senza prima ricevere una notifica di CM_NOTIFY_ACTION_DEVICEQUERYREMOVE . |
CM_NOTIFY_ACTION_DEVICEREMOVEPENDING | Chiamare CM_Unregister_Notification per annullare la registrazione delle notifiche per l'handle. È necessario eseguire questa operazione da una routine posticipata. Per altre informazioni, vedere la sezione Osservazioni di CM_Unregister_Notification . Se hai ancora un handle aperto per il dispositivo, chiama CloseHandle per chiudere l'handle del dispositivo. |
CM_NOTIFY_ACTION_DEVICEREMOVECOMPLETE | Chiamare CM_Unregister_Notification per annullare la registrazione delle notifiche per l'handle. È necessario eseguire questa operazione da una routine posticipata. Per altre informazioni, vedere la sezione Osservazioni di CM_Unregister_Notification . Se hai ancora un handle aperto per il dispositivo, chiama CloseHandle per chiudere l'handle del dispositivo. |
- Al termine della registrazione del dispositivo, chiamare CM_Unregister_Notification per annullare la registrazione del callback di notifica dell'interfaccia registrato nel passaggio 1.
Un driver UMDF 2 potrebbe eseguire i passaggi da 1 a 4 nella routine di callback EvtDevicePrepareHardware del driver e il passaggio 6 in una delle routine di callback di rimozione del dispositivo del driver.