ID di connessione per dispositivi periferici SPB-Connected
Prima che un driver possa inviare richieste di I/O a un dispositivo periferico su un bus periferico semplice , il driver deve aprire una connessione logica al dispositivo. Tramite questa connessione, il driver può inviare richieste di lettura e scrittura per trasferire i dati da e verso il dispositivo. Inoltre, il driver può inviare richieste di controllo I/O (IOCTL) al dispositivo per eseguire operazioni specifiche di SPB.
All'avvio del sistema, il gestore Plug and Play (PnP) enumera sia i dispositivi PnP che i dispositivi non PnP. Per un dispositivo periferico non PnP con una connessione fissa a un SPB, il gestore PnP esegue una query sul firmware ACPI della piattaforma hardware per ottenere un set di parametri di connessione che descrivono come accedere al dispositivo. Questi parametri di connessione identificano il controller SPB per il bus a cui è connesso il dispositivo e includono altre informazioni, ad esempio l'indirizzo del bus e la frequenza di clock del bus, che il controller deve comunicare con il dispositivo.
La gestione PnP assegna un identificatore, denominato ID connessione, ai parametri di connessione per il dispositivo periferico connesso a SPB. Il gestore PnP archivia questo ID e i parametri di connessione insieme in un archivio dati di sistema denominato hub risorse. L'hub risorse è un archivio dati interno in cui il gestore PnP archivia le informazioni di configurazione su un dispositivo periferico connesso a SPB. L'ID connessione incapsula questi parametri in modo che il driver non debba specificarli in modo esplicito.
Il driver per un dispositivo periferico connesso a SPB riceve l'ID connessione per il dispositivo come parte delle risorse hardware assegnate del driver. Quando il driver per il dispositivo periferico chiama una funzione di sistema per aprire una connessione al dispositivo, il driver fornisce l'ID connessione, che la funzione usa per recuperare i parametri di connessione del dispositivo dall'hub risorse.
Lo sviluppatore di driver può usare User-Mode Driver Framework (UMDF) o Kernel-Mode Driver Framework (KMDF) per compilare il driver per il dispositivo periferico connesso a SPB. Un driver UMDF riceve le relative risorse (che includono l'ID connessione) quando il framework chiama il metodo IPnpCallbackHardware2::OnPrepareHardware del driver. Un driver KMDF riceve le risorse hardware durante un callback EvtDevicePrepareHardware .
Per consentire a un driver di periferica UMDF di ricevere GLI ID connessione nell'elenco delle risorse, il file INF che installa il driver deve includere la direttiva seguente nella sezione DDInstall specifica di WDF:
UmdfDirectHardwareAccess = AllowDirectHardwareAccess Per altre informazioni su questa direttiva, vedere Specifica delle direttive WDF nei file INF. Per un esempio di file INX (usato per compilare il file INF corrispondente) che usa questa direttiva, vedere l'esempio di driver SpbAccelerometer .
L'ID di connessione ricevuto dal driver come risorsa è un numero intero a 64 bit, ma il driver deve incorporare questo ID in un nome di percorso del dispositivo che può essere usato per recuperare i parametri di connessione dall'hub risorse. Per creare il nome del percorso del dispositivo, il driver chiama la funzione RESOURCE_HUB_CREATE_PATH_FROM_ID , dichiarata nel file di intestazione Reshub.h.
Per aprire una connessione logica al dispositivo periferico connesso a SPB, un driver UMDF chiama il metodo IWDFRemoteTarget::OpenFileByName e un driver KMDF chiama il metodo WdfIoTargetOpen . Entrambi i metodi richiedono il nome del percorso del dispositivo come parametro di input.
Per esempi di codice UMDF e KMDF che usano GLI ID connessione per aprire connessioni logiche ai dispositivi periferici connessi a SPB, vedere gli argomenti seguenti:
Le risorse hardware per User-Mode risorse hardware dei driver di periferiche SPB per Kernel-Mode applicazioni in modalità utente dei driver di periferica SPB non possono aprire connessioni logiche ai dispositivi periferici connessi a SPB e non possono inviare richieste di I/O direttamente a questi dispositivi.
Un solo driver può contenere una connessione logica aperta a un dispositivo periferico connesso a SPB alla volta. Un tentativo da parte di un altro driver di aprire una seconda connessione allo stesso dispositivo ha esito negativo.