Condividi tramite


Funzione IoRequestDeviceEject (wdm.h)

La routine IoRequestDeviceEject notifica al gestore PnP che è stato premuto il pulsante di rimozione 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 di inserimento del dispositivo, non di inserimento 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 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'eject oltre all'invio dell'IRP. Ad esempio, il gestore 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:

  1. Crea un elenco di altri dispositivi interessati dall'espulso del dispositivo.

    Il responsabile PnP esegue una query per le relazioni di rimozione del dispositivo, le relazioni di esiezione e le relazioni tra bus (dispositivi figlio).

  2. Determina se il dispositivo e i relativi dispositivi possono essere rimossi dal software.

    Il gestore PnP invia IRP_MN_QUERY_REMOVE_DEVICE IRP 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 non riesce, il gestore PnP visualizza una finestra di dialogo per notificare all'utente che l'eject non è riuscito.

  3. Il software rimuove il dispositivo e i relativi dispositivi.

    Se i passaggi precedenti hanno esito positivo, il gestore PnP notifica ai driver e alle 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 conducenti del bus mantengono gli oggetti PDO per i dispositivi, a meno che un dispositivo non sia fisicamente andato e il conducente del bus omette il dispositivo nella risposta più recente a IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations per il bus padre del dispositivo.

  4. Indirizza l'autista del bus a espellere il dispositivo (se possibile).

    Il gestore PnP esegue passaggi diversi, a seconda delle funzionalità di inserimento del dispositivo:

    • L'espulso a caldo è supportato.

      Se la funzionalità di EjectSupported è impostata per il dispositivo, il dispositivo può essere espulso quando il sistema è in esecuzione (si trova nello stato 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 di rimozione, quindi il conducente del bus gestisce l'IRP di espulsione. Quando il conducente dell'autobus completa l'IRP, il responsabile PnP prevede che il dispositivo sia fisicamente assente dal sistema.

    • L'espulso ad accesso frequente non è supportato.

      In questo caso, il dispositivo è rimovibile, ma non supporta l'espulsione. Il gestore PnP contrassegna il dispositivo come non presente/non funzionante correttamente. Il gestore PnP non riavvia il dispositivo finché un utente non lo rimuove fisicamente e lo reinsere. In questo caso, il gestore PnP non invia un IRP_MN_EJECT.

    Il driver del bus padre di un dispositivo imposta le funzionalità per un dispositivo, incluse le relative funzionalità di espulsione, in risposta a una richiesta di IRP_MN_QUERY_CAPABILITIES. Un driver di funzione o filtro può facoltativamente specificare le funzionalità.
Quando un dispositivo viene espulso, i dispositivi figlio vengono rimossi fisicamente dal sistema insieme a esso.

Un'applicazione in modalità utente può avviare un'espulsa del dispositivo. In tal 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 inserimento dei dispositivi elencate in precedenza in IRQL = PASSIVE_LEVEL.

Fabbisogno

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 la sezione Osservazioni)

Vedere anche

IRP_MN_EJECT

IRP_MN_QUERY_DEVICE_RELATIONS

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE