Uso di un'interfaccia del dispositivo
Le interfacce del dispositivo sono disponibili sia per i componenti in modalità kernel che per le applicazioni in modalità utente. Il codice in modalità utente può usare funzioni CfgMgr32 (ad esempio, CM_Get_Device_Interface_List) o funzioni SetupDiXxx (vedere Funzioni dell'interfaccia del dispositivo SetupDi) per scoprire le interfacce del dispositivo registrate e abilitate. L'applicazione in modalità utente può quindi usare le API di I/O, ad esempio CreateFile , per ottenere un handle al dispositivo per inviare I/O al dispositivo. Per ricevere una notifica sull'abilitazione e la disabilitazione delle interfacce del dispositivo e su come reagire a tali azioni, vedere Registrazione per la notifica dell'arrivo dell'interfaccia del dispositivo e rimozione del dispositivo.
Prima che un componente in modalità kernel possa usare un dispositivo o un oggetto file specifico, deve eseguire le operazioni seguenti:
Determinare se la classe di interfaccia del dispositivo necessaria è registrata e abilitata.
Un driver può registrarsi con il gestore PnP per ricevere una notifica quando un'istanza di un'interfaccia del dispositivo è abilitata o disabilitata. Per registrare, il componente chiama IoRegisterPlugPlayNotification. Questa routine archivia l'indirizzo di un callback fornito dal driver, che viene chiamato ogni volta che un'istanza di un'interfaccia dispositivo è abilitata o disabilitata, per una classe di dispositivo specificata. Le routine di callback ricevono la struttura DEVICE_INTERFACE_CHANGE_NOTIFICATION , che contiene una stringa Unicode che rappresenta il collegamento simbolico dell'istanza dell'interfaccia. Per altre informazioni, vedere Uso della notifica di modifica dell'interfaccia del dispositivo PnP .
Un driver o un altro componente in modalità kernel può anche chiamare IoGetDeviceInterfaces per ottenere un elenco di tutte le istanze dell'interfaccia del dispositivo registrate e abilitate per una classe di interfaccia del dispositivo specifica. L'elenco restituito contiene puntatori alle stringhe di collegamento simboliche Unicode che identificano le istanze dell'interfaccia del dispositivo.
Ottenere un puntatore a un dispositivo o a un oggetto file che corrisponde a un'istanza dell'interfaccia.
Per accedere a un oggetto dispositivo specifico, il driver deve chiamare IoGetDeviceObjectPointer, passando la stringa Unicode per l'interfaccia richiesta nel parametro ObjectName . Per accedere a un oggetto file, il driver deve chiamare InitializeObjectAttributes, passando la stringa Unicode nel parametro ObjectName e quindi passare la struttura dell'attributo inizializzata correttamente in una chiamata a ZwCreateFile.