Déterminer si le système d’exploitation s’exécute en mode sans échec

Cette rubrique explique comment un pilote de périphérique peut déterminer si le système d’exploitation sur lequel il s’exécute a été démarré en mode sans échec. Cette rubrique explique également comment empêcher un pilote de fonctionner en mode sans échec.

Le noyau du système d’exploitation Microsoft Windows exporte un pointeur nommé InitSafeBootMode. InitSafeBootMode pointe vers une variable ULONG qui contient les paramètres de mode sans échec actuellement en vigueur. Un pilote de périphérique peut examiner ces paramètres pour déterminer si le système d’exploitation s’exécute en mode sans échec.

Le tableau suivant répertorie les modes pour les valeurs de la variable InitSafeBootMode .

Value Mode

0

Le système d’exploitation n’est pas en mode sans échec.

1

SAFEBOOT_MINIMAL

2

SAFEBOOT_NETWORK

3*

SAFEBOOT_DSREPAIR

Remarque * La valeur 3 s’applique uniquement aux contrôleurs de domaine Windows.

Pour utiliser la variable InitSafeBootMode , vous devez la déclarer dans votre pilote, comme le montre l’exemple de code suivant.

extern PULONG InitSafeBootMode;

Après avoir déclaré InitSafeBootMode, vous pouvez utiliser l’exemple de code suivant pour déterminer si le système d’exploitation s’exécute en mode sans échec.

if (*InitSafeBootMode > 0) {
    // The operating system is in Safe Mode.
    // Take appropriate action.
    //
}

Pour empêcher un pilote de fonctionner en mode sans échec, utilisez la technique de la liste suivante qui correspond à votre type de pilote :

  • Pilotes de fonction

    Si votre pilote de fonction a un type de démarrage de service de SERVICE_BOOT_START, case activée la valeur de InitSafeBootMode dans la routine AddDevice du pilote de fonction. Si le système est en mode sans échec, retournez un échec status.

    Note Vous ne devez jamais retourner l’échec de la routine DriverEntry .

  • Pilotes de filtre

    Si votre pilote de filtre démarre au démarrage du système, case activée la valeur de InitSafeBootMode dans la routine AddDevice du pilote de filtre. Si le système d’exploitation est en mode sans échec, procédez comme suit :

    1. N’attachez pas l’objet d’appareil de filtre à la pile d’appareils.
    2. Retourne la réussite à partir de la routine AddDevice du pilote de filtre.
  • Autres pilotes

    Pour les pilotes autres que les pilotes de fonction ou de filtre, case activée la valeur de InitSafeBootMode dans la routine DriverEntry du pilote. Si le système d’exploitation est en mode sans échec, retournez un échec status.