Funzione IoRequestDeviceEject (wdm.h)
La routine IoRequestDeviceEject notifica alla gestione PnP che è stato premuto il pulsante di inserimento del dispositivo.
Sintassi
void IoRequestDeviceEject(
[in] PDEVICE_OBJECT PhysicalDeviceObject
);
Parametri
[in] PhysicalDeviceObject
Puntatore al PDO per il dispositivo.
Valore restituito
nessuno
Osservazioni
Si noti che questa routine segnala una richiesta per l'espulsione del dispositivo, non l'espulsione multimediale.
In genere, un driver del bus PnP chiama IoRequestDeviceEject per notificare al gestore PnP che un utente ha premuto il pulsante di espulsione del dispositivo su uno dei relativi dispositivi figlio.
Un driver chiama questa routine, anziché inviare una richiesta di IRP_MN_EJECT , perché questa routine consente al gestore PnP di coordinare azioni aggiuntive per l'eiezione oltre all'invio dell'IRP. Ad esempio, la gestione PnP notifica i componenti in modalità utente e in modalità kernel registrati per la notifica delle modifiche nel dispositivo.
Il gestore PnP indirizza un arresto ordinato del dispositivo. Gestione PnP:
-
Crea un elenco di altri dispositivi interessati da questo dispositivo da espulsi.
Il gestore PnP esegue query per le relazioni di rimozione del dispositivo, le relazioni di esezione e le relazioni con il bus (dispositivi figlio).
-
Determina se il dispositivo e i relativi dispositivi possono essere rimossi dal software.
Il gestore PnP invia IRP_MN_QUERY_REMOVE_DEVICE indirizzi IP ai driver per il dispositivo e ai relativi dispositivi. Il gestore PnP invia anche notifiche a tutti i componenti in modalità utente e in modalità kernel registrati per la notifica di modifica del dispositivo nel dispositivo o a uno dei relativi dispositivi. Se uno dei driver o dei componenti in modalità utente ha esito negativo, gestione PnP visualizza una finestra di dialogo per notificare all'utente che l'espulso non è riuscito.
-
Il software rimuove il dispositivo e i relativi dispositivi.
Se i passaggi precedenti hanno esito positivo, il gestore PnP notifica i driver e le applicazioni registrati che il dispositivo e i relativi dispositivi vengono rimossi dal software. Il gestore PnP invia quindi IRP_MN_REMOVE_DEVICE IRP ai driver per il dispositivo e ai relativi dispositivi. I driver di funzione e filtro si scollegano dallo stack di dispositivi ed eliminano i relativi oggetti dispositivo per i dispositivi. I driver del bus mantengono gli oggetti PDO per i dispositivi, a meno che un dispositivo non sia andato fisicamente e il driver del bus omette il dispositivo nella risposta più recente a IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations per il bus padre del dispositivo.
-
Indirizza il driver del bus a esettare il dispositivo (se possibile).
Il gestore PnP esegue passaggi diversi, a seconda delle funzionalità di espulsione del dispositivo:
-
L'espulso ad accesso frequente è supportato.
Se la funzionalità EjectSupported è impostata per il dispositivo, il dispositivo può essere inserito quando il sistema è in esecuzione (si trova nello stato di PowerSystemWorking ). Il gestore PnP invia una richiesta di IRP_MN_EJECT al driver del bus per il dispositivo. Qualsiasi funzione e driver di filtro scollegati in precedenza dallo stack in risposta all'IRP rimosso, quindi il driver del bus gestisce l'IRP espulso. Quando il driver del bus completa l'IRP, il gestore PnP prevede che il dispositivo sia fisicamente assente dal sistema.
-
L'espulsione ad accesso frequente non è supportata.
In questo caso, il dispositivo è rimovibile ma non supporta l'espulso. Il gestore PnP contrassegna il dispositivo come non presente/non funzionante correttamente. Il gestore PnP non riavvia il dispositivo finché un utente lo rimuove fisicamente e lo reinsere. In questo caso, il gestore PnP non invia un IRP_MN_EJECT.
-
L'espulso ad accesso frequente è supportato.
Un'applicazione in modalità utente può avviare un'espulsa del dispositivo. In questo caso, nessun driver chiama questa routine, ma il sistema operativo chiama il gestore PnP per avviare i passaggi elencati in precedenza.
I chiamanti di IoRequestDeviceEject devono essere in esecuzione in IRQL <= DISPATCH_LEVEL. Il gestore PnP esegue la maggior parte delle attività di rimozione dei dispositivi elencate sopra in IRQL = PASSIVE_LEVEL.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile a partire da Windows 2000. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (vedere sezione Osservazioni) |