Activation et désactivation de l’exécution automatique

Il existe de nombreuses situations où l’exécution automatique peut nécessiter une désactivation temporaire ou permanente. Par exemple, l’exécution automatique peut interférer avec le fonctionnement d’une application en cours d’exécution et doit être désactivée pendant toute la durée. Le système offre plusieurs façons de désactiver l’exécution automatique.

Suppression de l’exécution automatique par programmation

Il existe diverses situations dans lesquelles l’exécution automatique peut devoir être supprimée par programme. En voici deux exemples:

  • Votre application dispose d’un programme d’installation qui oblige l’utilisateur à insérer un autre disque qui peut contenir un fichier Autorun.inf.
  • Pendant le fonctionnement de votre application, l’utilisateur peut avoir besoin d’insérer un autre disque qui peut contenir un fichier Autorun.inf.

Dans les deux cas, vous ne souhaitez normalement pas lancer une autre application tant que l’original est en cours.

Les utilisateurs peuvent supprimer manuellement l’exécution automatique en maintenant la touche MAJ enfoncée lorsqu’ils insèrent le CD-ROM. Toutefois, il est généralement préférable de gérer cette opération par programmation plutôt que selon l’utilisateur.

Avec les systèmes qui ont Shell version 4.70 et ultérieure, Windows envoie un message « QueryCancelAutoPlay » à la fenêtre de premier plan. Votre application peut répondre à ce message pour supprimer l’exécution automatique. Cette approche est utilisée par les utilitaires système tels que la boîte de dialogue Ouvrir le courant pour désactiver l’exécution automatique.

Les fragments de code suivants illustrent comment configurer et gérer ce message. Votre application doit s’exécuter dans la fenêtre de premier plan. Tout d’abord, inscrivez « QueryCancelAutoPlay » en tant que message Windows :

uMessage = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));

La fenêtre de votre application doit être au premier plan pour recevoir ce message. Le gestionnaire de messages doit retourner TRUE pour annuler l’exécution automatique et FALSE pour l’activer. Le fragment de code suivant montre comment utiliser ce message pour désactiver l’exécution automatique.

UINT g_uQueryCancelAutoPlay = 0;

LRESULT WndProc(HWND hwnd, UINT uMsg,  WPARAM wParam, LPARAM lParam) 
{ 
    switch (uMsg) 
    { 
    ... 
    default: 
        if (!g_uQueryCancelAutoPlay)
        { 
            g_uQueryCancelAutoPlay = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));
        } 
        if (uMsg && uMsg == g_uQueryCancelAutoPlay)
        { 
            return TRUE;       // Cancel AutoRun
        }
    }
}

Si votre application utilise une boîte de dialogue et doit répondre à un message « QueryCancelAutoPlay », elle ne peut pas simplement retourner TRUE ou FALSE. Au lieu de cela, appelez SetWindowLong avec nIndex défini sur DWL_MSGRESULT. Définissez le paramètre dwNewLong sur TRUE pour annuler l’exécution automatique et FALSE pour l’activer. Par exemple, l’exemple de procédure de boîte de dialogue suivant annule l’exécution automatique lorsqu’elle reçoit un message « QueryCancelAutoPlay ».

UINT g_uQueryCancelAutoPlay = 0;

BOOL DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (uMsg) 
    { 
    ...
    default: 
        if (!g_uQueryCancelAutoPlay)
        {
            g_uQueryCancelAutoPlay = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));
        } 
        if (uMsg == g_uQueryCancelAutoPlay) 
        {
            SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);          
            return 1;               
        }
    } 

Utilisation du Registre pour désactiver l’exécution automatique

Il existe deux valeurs de Registre qui peuvent être utilisées pour désactiver de manière permanente l’exécution automatique : NoDriveAutoRun et NoDriveTypeAutoRun. La première valeur désactive AutoRun pour les lettres de lecteur spécifiées et la seconde désactive AutoRun pour une classe de lecteurs. Si l’une de ces valeurs est définie pour désactiver l’exécution automatique pour un appareil particulier, elle est désactivée.

Notes

Les valeurs NoDriveAutoRun et NoDriveTypeAutoRun doivent uniquement être modifiées par les administrateurs système pour modifier la valeur pour l’ensemble du système à des fins de test ou d’administration. Les applications ne doivent pas modifier ces valeurs, car il n’existe aucun moyen de les restaurer de manière fiable à leurs valeurs d’origine.

 

La valeur NoDriveAutoRun désactive l’exécution automatique pour les lettres de lecteur spécifiées. Il s’agit d’une valeur de données REG_DWORD, qui se trouve sous la clé suivante :

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

Le premier bit de la valeur correspond au lecteur A:, le second à B:, et ainsi de suite. Pour désactiver l’exécution automatique pour une ou plusieurs lettres de lecteur, définissez les bits correspondants. Par exemple, pour désactiver les lecteurs A: et C:, définissez NoDriveAutoRun sur 0x00000005.

La valeur NoDriveTypeAutoRun désactive AutoRun pour une classe de lecteurs. Il s’agit d’une valeur de données REG_DWORD ou 4 octets REG_BINARY, qui se trouve sous la même clé.

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

En définissant les bits du premier octet de cette valeur, différents lecteurs peuvent être exclus de l’utilisation de l’exécution automatique.

Le tableau suivant indique les constantes bits et masque de bits, qui peuvent être définies dans le premier octet de NoDriveTypeAutoRun pour désactiver l’exécution automatique pour un type de lecteur particulier. Vous devez redémarrer l’Explorateur Windows avant que les modifications ne prennent effet.

Numéro de bits Constante de masque de bits Description
0x04 DRIVE_REMOVEABLE Le disque peut être supprimé du lecteur (par exemple, une disquette).
0x08 DRIVE_FIXED Impossible de supprimer le disque du lecteur (disque dur).
0x10 DRIVE_REMOTE Lecteur réseau.
0x20 DRIVE_CDROM Lecteur de CD-ROM
0x40 DRIVE_RAMDISK Disque RAM.

 

Exécution automatique pour d’autres types de supports de stockage

AutoRun est principalement destiné à la distribution publique d’applications sur CD-ROM et DVD-ROM, et son utilisation est déconseillée pour d’autres supports de stockage. Toutefois, il est souvent utile d’activer l’exécution automatique sur d’autres types de supports de stockage amovibles. Cette fonctionnalité est généralement utilisée pour simplifier le débogage des fichiers AutoRun.inf. L’exécution automatique fonctionne uniquement sur les périphériques de stockage amovibles lorsque les critères suivants sont remplis :

  • L’appareil doit avoir des pilotes compatibles avec l’exécution automatique. Pour être compatible avec l’exécution automatique, un pilote doit informer le système qu’un disque a été inséré en envoyant un message WM_DEVICECHANGE .
  • Le répertoire racine du média inséré doit contenir un fichier Autorun.inf.
  • L’exécution automatique de l’appareil ne doit pas être désactivée via le Registre.
  • L’application de premier plan n’a pas supprimé l’exécution automatique.

Notes

Cette fonctionnalité ne doit pas être utilisée pour distribuer des applications sur un support amovible. Étant donné que l’implémentation de l’exécution automatique sur un média amovible permet de propager facilement des virus informatiques, les utilisateurs doivent se méfier de toute disquette distribuée publiquement qui contient un fichier Autorun.inf.

 

Normalement, l’exécution automatique démarre automatiquement, mais elle peut également être démarrée manuellement. Si l’appareil répond aux critères listés ci-dessus, le menu contextuel de la lettre de lecteur inclut une commande de lecture automatique . Pour exécuter l’exécution automatique manuellement, cliquez avec le bouton droit sur l’icône du lecteur et sélectionnez Lecture automatique dans le menu contextuel ou double-cliquez sur l’icône du lecteur. Si les pilotes ne sont pas compatibles avec l’exécution automatique, le menu contextuel n’aura pas d’élément de lecture automatique et l’exécution automatique ne peut pas être démarrée.

Les pilotes compatibles AutoRun sont fournis avec certains lecteurs de disque amovibles, ainsi que d’autres types de supports amovibles tels que les cartes CompactFlash. AutoRun fonctionne également avec les lecteurs réseau qui sont mappés à une lettre de lecteur avec l’Explorateur Windows ou montés avec microsoft Management Console (MMC). Comme pour le matériel monté, un lecteur réseau monté doit avoir un fichier Autorun.inf dans son répertoire racine et ne doit pas être désactivé via le Registre.