Partager via


Fonction IoRequestDeviceEject (wdm.h)

La routine IoRequestDeviceEject avertit le gestionnaire PnP que le bouton d’éjection de l’appareil a été appuyé.

Syntaxe

void IoRequestDeviceEject(
  [in] PDEVICE_OBJECT PhysicalDeviceObject
);

Paramètres

[in] PhysicalDeviceObject

Pointeur vers l’AOP de l’appareil.

Valeur de retour

None

Remarques

Notez que cette routine signale une demande d’éjection d’appareil, et non d’éjection de média.

En règle générale, un pilote de bus PnP appelle IoRequestDeviceEject pour informer le gestionnaire PnP qu’un utilisateur a appuyé sur le bouton d’éjection de l’appareil sur l’un de ses appareils enfants.

Un pilote appelle cette routine, au lieu d’envoyer une requête IRP_MN_EJECT , car cette routine permet au gestionnaire PnP de coordonner des actions supplémentaires pour l’éjection en plus d’envoyer l’IRP. Par exemple, le gestionnaire PnP avertit les composants en mode utilisateur et en mode noyau qui se sont inscrits pour la notification des modifications sur l’appareil.

Le gestionnaire PnP dirige un arrêt ordonné de l’appareil. Le gestionnaire PnP :

  1. Crée une liste d’autres appareils affectés par l’éjection de cet appareil.

    Le gestionnaire PnP interroge les relations de suppression, d’éjection et de bus de l’appareil (appareils enfants).

  2. Détermine si l’appareil et ses appareils associés peuvent être supprimés par logiciel.

    Le gestionnaire PnP envoie IRP_MN_QUERY_REMOVE_DEVICE IRP aux pilotes de l’appareil et de ses appareils associés. Le gestionnaire PnP envoie également des notifications à tous les composants en mode utilisateur et en mode noyau inscrits pour la notification de changement d’appareil sur l’appareil ou l’un de ses appareils associés. Si l’un des pilotes ou composants du mode utilisateur échoue à la suppression de requête, le gestionnaire PnP affiche une boîte de dialogue pour avertir l’utilisateur que l’éjection a échoué.

  3. Supprime par logiciel l’appareil et ses appareils associés.

    Si les étapes précédentes réussissent, le gestionnaire PnP avertit les pilotes et applications inscrits que l’appareil et ses appareils associés sont en cours de suppression logicielle. Ensuite, le gestionnaire PnP envoie IRP_MN_REMOVE_DEVICE IRP aux pilotes de l’appareil et de ses appareils associés. Les pilotes de fonction et de filtre se détachent de la pile de périphériques et suppriment leurs objets de périphérique pour les appareils. Les pilotes de bus conservent le ou les PDO pour le ou les périphériques, sauf si un appareil est physiquement disparu et que le pilote de bus a omis l’appareil dans sa réponse la plus récente à IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations pour le bus parent de l’appareil.

  4. Indique au pilote de bus d’éjecter l’appareil (si possible).

    Le gestionnaire PnP effectue différentes étapes, en fonction des fonctionnalités d’éjection de l’appareil :

    • L’éjection à chaud est prise en charge.

      Si la fonctionnalité EjectSupported est définie pour l’appareil, celui-ci peut être éjecté lorsque le système est en cours d’exécution (est à l’état PowerSystemWorking ). Le gestionnaire PnP envoie une demande de IRP_MN_EJECT au pilote de bus pour l’appareil. Tous les pilotes de fonction et de filtre précédemment détachés de la pile en réponse à l’IRP de suppression, de sorte que le pilote de bus gère l’IRP d’éjection. Lorsque le pilote de bus termine l’IRP, le gestionnaire PnP s’attend à ce que l’appareil soit physiquement absent du système.

    • L’éjection à chaud n’est pas prise en charge.

      Dans ce cas, l’appareil est amovible , mais ne prend pas en charge l’éjection. Le gestionnaire PnP marque l’appareil comme non présent/ne fonctionne pas correctement. Le gestionnaire PnP ne redémarre pas l’appareil tant qu’un utilisateur ne le supprime pas physiquement et ne le réinserte pas. Dans ce cas, le gestionnaire PnP n’envoie pas de IRP_MN_EJECT.

    Le pilote de bus parent d’un appareil définit les fonctionnalités d’un appareil, y compris ses fonctionnalités d’éjection, en réponse à une demande de IRP_MN_QUERY_CAPABILITIES . Un pilote de fonction ou de filtre peut éventuellement spécifier des fonctionnalités.
Lorsqu’un appareil est éjecté, ses appareils enfants sont physiquement retirés du système avec lui.

Une application en mode utilisateur peut lancer l’éjection d’un appareil. Dans ce cas, aucun pilote n’appelle cette routine, mais le système d’exploitation appelle le gestionnaire PnP pour lancer les étapes répertoriées ci-dessus.

Les appelants d’IoRequestDeviceEject doivent s’exécuter sur IRQL <= DISPATCH_LEVEL. Le gestionnaire PnP effectue la plupart de ses tâches d’éjection d’appareil répertoriées ci-dessus dans IRQL = PASSIVE_LEVEL.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (voir la section Notes)

Voir aussi

IRP_MN_EJECT

IRP_MN_QUERY_DEVICE_RELATIONS

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE