Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Tenere presente che il comportamento di un'applicazione di installazione del dispositivo richiamata da AutoRun deve dipendere dal fatto che l'utente colleghi prima l'hardware o inserisca prima il supporto di distribuzione. Poiché i fornitori di hardware indipendenti (IHV) in genere forniscono un disco di distribuzione e un disco può avere solo un'applicazione richiamata dall'esecuzione automatica, l'applicazione di installazione del dispositivo richiamata dall'esecuzione automatica deve determinare se il dispositivo è collegato.
Per determinare se un dispositivo è collegato, l'applicazione può chiamare la funzione UpdateDriverForPlugAndPlayDevices , passando l'ID hardware del dispositivo. Il dispositivo è collegato se una delle condizioni seguenti è vera:
La funzione restituisce TRUE. In questo modo viene installato anche il driver per il dispositivo.
La funzione restituisce FALSE e la funzione GetLastErrorWin32 restituisce ERROR_NO_MORE_ITEMS. Non viene eseguita alcuna installazione.
Il dispositivo non è collegato se la funzione restituisce FALSE e GetLastError restituisce NO_SUCH_DEVINST. Non viene eseguita alcuna installazione.
Reinstallazione di un dispositivo scollegato
Quando un dispositivo collegato in precedenza è ora scollegato, il devnode del dispositivo rimane nel sistema, anche se è sia inattivo che nascosto. Prima di reinstallare un dispositivo di questo tipo, è necessario trovare questo devnode "fantasma" e contrassegnarlo come da reinstallare. Quindi, quando il dispositivo viene collegato nuovamente, Plug and Play enumererà nuovamente il dispositivo, troverà il nuovo driver per esso e installerà il driver per il dispositivo.
Per reinstallare un dispositivo scollegato:
Chiamare la funzione SetupCopyOEMInf .
La funzione SetupCopyOEMInf garantisce che il file INF corretto sia presente nella directory %SystemRoot%\inf.
Trovare i dispositivi scollegati.
Chiamare la funzione SetupDiGetClassDevs . Nella chiamata a questa funzione deselezionare il flag DIGCF_PRESENT nel parametro Flags . Devi trovare tutti i dispositivi, non solo quelli presenti. È possibile restringere i risultati della ricerca specificando la particolare classe di dispositivo nel parametro ClassGuid .
Trovare gli ID hardware e gli ID compatibili dei dispositivi scollegati.
SetupDiGetClassDevs restituisce un handle al set di informazioni sul dispositivo che contiene tutti i dispositivi installati, collegati o meno, nella classe del dispositivo (presupponendo che sia stata specificata una classe di dispositivo nel primo passaggio). Effettuando chiamate successive alla funzione SetupDiEnumDeviceInfo , è possibile usare questo handle per enumerare tutti i dispositivi nel set di informazioni sul dispositivo. Ogni chiamata fornisce una struttura SP_DEVINFO_DATA per il dispositivo. Per ottenere l'elenco degli ID hardware, chiamare la funzione SetupDiGetDeviceRegistryProperty con il parametro Property impostato su SPDRP_HARDWAREID. Per ottenere l'elenco degli ID compatibili, chiamare la stessa funzione, ma con il parametro Property impostato su SPDRP_COMPATIBLEIDS. Entrambi gli elenchi sono MULTI-SZ stringhe.
Cercare una corrispondenza tra l'ID del dispositivo e gli ID hardware (o ID compatibili) del passaggio precedente.
Assicurarsi di eseguire confronti di stringhe complete tra l'ID hardware o l'ID compatibile e l'ID per il dispositivo. Un confronto parziale potrebbe causare corrispondenze non corrette.
Quando si trova una corrispondenza, chiamare la funzione CM_Get_DevNode_Status passando SP_DRVINFO_DATA. DevInst nel parametro dnDevInst . Se questa funzione restituisce CR_NO_SUCH_DEVINST, ciò conferma che il dispositivo è scollegato (vale a dire, ha un nodo devnode fantasma).
Contrassegna il dispositivo.
Chiamare la funzione SetupDiGetDeviceRegistryProperty con il parametro Property impostato su SPDRP_CONFIGFLAGS. Al ritorno di questa funzione, il parametro PropertyBuffer punta al valore ConfigFlags del dispositivo nel Registro di sistema. Eseguire un OR bit per bit di questo valore con CONFIGFLAG_REINSTALL (definito in Regstr.h). Dopo questa operazione, chiamare la funzione SetupDiSetDeviceRegistryProperty, con il parametro Property impostato su SPDRP_CONFIGFLAGS e il parametro PropertyBuffer impostato sull'indirizzo del valore ConfigFlags modificato del dispositivo. Questa azione modifica il valore ConfigFlags del Registro di sistema per incorporare il flag CONFIGFLAG_REINSTALL. In questo modo il dispositivo verrà reinstallato la volta successiva in cui il dispositivo viene nuovamente enumerato.
Collegare il dispositivo.
Plug and Play rieseguirà l'enumerazione del dispositivo, troverà il nuovo driver e installerà tale driver.