Partager via


IRP_MN_START_DEVICE

Tous les pilotes PnP doivent gérer cette IRP.

Valeur

0x00

Code majeur

IRP_MJ_PNP

Date d’envoi

Le gestionnaire PnP envoie cette IRP après avoir affecté des ressources matérielles, le cas échéant, à l’appareil. L’appareil a peut-être été récemment énuméré et est en cours de démarrage pour la première fois, ou l’appareil redémarre après avoir été arrêté pour le rééquilibrage des ressources.

Parfois, le gestionnaire PnP envoie un IRP_MN_START_DEVICE à un appareil qui est déjà démarré, en fournissant un ensemble de ressources différent de celui utilisé actuellement par l’appareil. Un pilote lance cette action en appelant IoInvalidateDeviceState et en répondant à la demande de IRP_MN_QUERY_PNP_DEVICE_STATE suivante avec l’indicateur de PNP_RESOURCE_REQUIREMENTS_CHANGED défini. Un pilote de bus peut utiliser ce mécanisme, par exemple, pour ouvrir une nouvelle ouverture sur un pont PCI-à-PCI.

Le gestionnaire PnP envoie cette IRP à IRQL PASSIVE_LEVEL dans le contexte d’un thread système.

Paramètres d’entrée

Le membre Parameters.StartDevice.AllocatedResources de la structure IO_STACK_LOCATION pointe vers un CM_RESOURCE_LIST décrivant les ressources matérielles que le gestionnaire PnP a attribuées à l’appareil. Cette liste contient les ressources sous forme brute. Utilisez les ressources brutes pour programmer l’appareil.

Parameters.StartDevice.AllocatedResourcesTranslated pointe vers un CM_RESOURCE_LIST décrivant les ressources matérielles que le gestionnaire PnP a attribuées à l’appareil. Cette liste contient les ressources sous forme traduite. Utilisez les ressources traduites pour connecter le vecteur d’interruption, l’espace d’E/S de mappage et la mémoire de mappage.

Paramètres de sortie

None

Bloc d’état E/S

Un pilote définit Irp-IoStatus.Status> sur STATUS_SUCCESS ou sur un status d’erreur approprié, comme STATUS_UNSUCCESSFUL ou STATUS_INSUFFICIENT_RESOURCES.

Si un pilote a besoin d’un certain temps pour exécuter ses opérations de démarrage pour un appareil, il peut marquer l’IRP en attente et retourner STATUS_PENDING.

Opération

Cette IRP doit être gérée d’abord par le pilote de bus parent pour un appareil, puis par chaque pilote supérieur dans la pile de périphériques.

En réponse à cette IRP, les pilotes démarrent un appareil pour la première fois ou redémarrent un appareil qui a été arrêté. Les opérations exactes requises pour démarrer un appareil varient d’un appareil à l’autre, mais peuvent inclure la mise sous tension de l’appareil, l’initialisation spécifique à l’appareil et la connexion de l’interruption.

Un pilote peut généralement gérer cette IRP de la même manière, qu’il démarre un appareil pour la première fois ou redémarre un appareil après un IRP_MN_STOP_DEVICE, sauf si un pilote doit restaurer l’état de l’appareil lors d’un redémarrage après un arrêt.

Sur Windows Vista et les systèmes d’exploitation ultérieurs, nous recommandons que les pilotes arrêtent toujours le IRP_MN_START_DEVICE IRP et terminent son traitement ultérieurement. Cet ordre permet au système de traiter les redémarrages de l’appareil de manière asynchrone. (Sur les systèmes d’exploitation antérieurs à Windows Vista, les pilotes peuvent retourner STATUS_PENDING à partir de leurs routines de répartition, mais le gestionnaire PnP ne chevauche pas le redémarrage de l’appareil avec toute autre opération.)

Pour plus d’informations sur la gestion d’un IRP de démarrage, consultez Démarrage d’un appareil.

Envoi de cet IRP

Réservé pour le système. Les pilotes ne doivent pas envoyer cette IRP.

Spécifications

En-tête

Wdm.h (inclure Wdm.h, Ntddk.h ou Ntifs.h)

Voir aussi

IRP_MN_STOP_DEVICE