Le Gestionnaire PnP redistribue les ressources système

Si un utilisateur ajoute un appareil à un système et si l’appareil a besoin de ressources système que le gestionnaire PnP a déjà attribuées à un autre appareil, le gestionnaire PnP tente de réaffecter des ressources.

Pendant ce processus, le gestionnaire PnP arrête les appareils et les sort de leurs états de travail (D0). Il fournit ensuite de nouvelles listes de ressources aux appareils afin qu’ils puissent redémarrer, à l’aide des nouvelles ressources.

Lors de la redistribution des ressources, le gestionnaire PnP ne modifie pas l’attribution de ressources d’un appareil si l’un des pilotes de l’appareil a :

séquence Power-Down

Pour chaque pilote de fonction et de filtre qui prend en charge l’appareil en cours d’arrêt, l’infrastructure effectue les opérations suivantes, dans l’ordre, un pilote à la fois, en commençant par le pilote le plus élevé dans la pile de pilotes :

  1. Si le pilote utilise des E/S autogérées, l’infrastructure appelle la fonction de rappel EvtDeviceSelfManagedIoSuspend du pilote.

  2. L’infrastructure arrête toutes les files d’attente d’E/S gérées par l’alimentation de l’appareil.

  3. Si le matériel et le pilote prennent en charge DMA, l’infrastructure appelle les fonctions de rappel EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush et EvtDmaEnablerDisable pour chaque canal DMA créé.

  4. Appelle les fonctions de rappel EvtDeviceD0ExitPreInterruptsDisabled et EvtInterruptDisable du pilote (si elles existent) afin que le pilote puisse désactiver les interruptions d’appareil.

  5. L’infrastructure appelle la fonction de rappel EvtDeviceD0Exit du pilote (si elle existe).

  6. L’infrastructure appelle la fonction de rappel EvtDeviceReleaseHardware du pilote (si elle existe) en passant la liste des ressources matérielles que le gestionnaire PnP a attribuées à l’appareil.

Le pilote de bus est le pilote le plus bas de la pile et est appelé dernier. Lorsque l’infrastructure appelle la fonction de rappel EvtDeviceD0Exit du pilote de bus, elle transmet un handle à l’objet d’appareil framework représentant le PDO de l’appareil et une valeur TargetState de WdfPowerDeviceD3Final. Le pilote de bus peut contrôler quand l’infrastructure appelle sa fonction de rappel EvtDeviceReleaseHardware en appelant WdfDeviceInitSetReleaseHardwareOrderOnFailure.

séquence Power-Up

Le premier pilote appelé est le pilote de bus. Lorsque l’infrastructure appelle la fonction de rappel EvtDeviceD0Entry du pilote de bus, la fonction de rappel restaure l’appareil (un appareil enfant du bus) à son état de travail (D0).

Pour chaque pilote de fonction et de filtre qui prend en charge l’appareil, l’infrastructure effectue les opérations suivantes, dans l’ordre, un pilote à la fois, en commençant par le pilote le plus bas dans la pile de pilotes :

  1. L’infrastructure appelle la fonction de rappel EvtDevicePrepareHardware du pilote (si elle existe), en passant la liste des ressources matérielles que le gestionnaire PnP a attribuées à l’appareil.

  2. L’infrastructure appelle la fonction de rappel EvtDeviceD0Entry du pilote (si elle existe).

  3. Le framework appelle les fonctions de rappel EvtInterruptEnable et EvtDeviceD0EntryPostInterruptsEnabled du pilote (si elles existent) afin que le pilote puisse activer les interruptions de périphérique.

  4. Si le matériel et le pilote prennent en charge DMA, l’infrastructure appelle les fonctions de rappel EvtDmaEnablerFill, EvtDmaEnablerEnable et EvtDmaEnablerSelfManagedIoStart du pilote pour chaque canal DMA créé.

  5. L’infrastructure appelle la fonction de rappel EvtChildListScanForChildren du pilote (si elle existe).

  6. L’infrastructure redémarre toutes les files d’attente d’E/S gérées par l’alimentation de l’appareil.

  7. Si le pilote utilise des E/S autogérées, l’infrastructure appelle la fonction de rappel EvtDeviceSelfManagedIoRestart du pilote.