Condividi tramite


Abilitazione e disabilitazione dell'esecuzione automatica

In molte situazioni potrebbe essere necessario disabilitare temporaneamente o in modo permanente l'esecuzione automatica. Ad esempio, l'esecuzione automatica potrebbe interferire con il funzionamento di un'applicazione in esecuzione e deve essere disabilitata per la durata. Il sistema offre diversi modi per disabilitare l'esecuzione automatica.

Disabilitazione dell'esecuzione automatica a livello programmatico

Esistono diverse situazioni in cui l'esecuzione automatica potrebbe dover essere eliminata a livello di codice. Di seguito sono riportati due esempi:

  • L'applicazione dispone di un programma di installazione che richiede all'utente di inserire un altro disco che può contenere un file Autorun.inf.
  • Durante il funzionamento dell'applicazione, l'utente potrebbe dover inserire un altro disco che può contenere un file Autorun.inf.

In entrambi i casi, in genere non si vuole avviare un'altra applicazione mentre l'originale è in corso.

Gli utenti possono eliminare manualmente l'esecuzione automatica tenendo premuto MAIUSC quando inseriscono il CD-ROM. Tuttavia, in genere è preferibile gestire questa operazione a livello di codice anziché a seconda dell'utente.

Con i sistemi con Shell versione 4.70 e successive, Windows invia un messaggio "QueryCancelAutoPlay" alla finestra in primo piano. L'applicazione può rispondere a questo messaggio per eliminare l'esecuzione automatica. Questo approccio viene usato dalle utilità di sistema, ad esempio la finestra di dialogo Apri comune per disabilitare l'esecuzione automatica.

I frammenti di codice seguenti illustrano come configurare e gestire questo messaggio. L'applicazione deve essere in esecuzione nella finestra in primo piano. Prima di tutto, registrare "QueryCancelAutoPlay" come messaggio di Windows:

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

Per ricevere questo messaggio, la finestra dell'applicazione deve essere in primo piano. Il gestore di messaggi deve restituire TRUE per annullare l'esecuzione automatica e FALSE per abilitarlo. Il frammento di codice seguente illustra come usare questo messaggio per disabilitare l'esecuzione automatica.

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
        }
    }
}

Se l'applicazione usa una finestra di dialogo e deve rispondere a un messaggio "QueryCancelAutoPlay", non può semplicemente restituire TRUE o FALSE. Chiamare invece SetWindowLong con nIndex impostato su DWL_MSGRESULT. Impostare il parametro dwNewLong su TRUE per annullare l'esecuzione automatica e false per abilitarlo. Ad esempio, la procedura di finestra di dialogo di esempio seguente annulla l'esecuzione automatica quando riceve un messaggio "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;               
        }
    } 

Uso del Registro di sistema per disabilitare l'esecuzione automatica

Esistono due valori del Registro di sistema che possono essere usati per disabilitare in modo permanente l'esecuzione automatica: NoDriveAutoRun e NoDriveTypeAutoRun. Il primo valore disabilita l'esecuzione automatica per le lettere di unità specificate e il secondo disabilita l'esecuzione automatica per una tipologia di unità. Se uno di questi valori è impostato per disabilitare l'esecuzione automatica per un determinato dispositivo, verrà disabilitato.

Nota

I valori NoDriveAutoRun e NoDriveTypeAutoRun devono essere modificati solo dagli amministratori di sistema per modificare il valore per l'intero sistema per scopi di test o amministrativi. Le applicazioni non devono modificare questi valori, perché non è possibile ripristinarli in modo affidabile nei valori originali.

 

Il valore NoDriveAutoRun disabilita AutoRun per le lettere di unità specificate. Si tratta di un valore di dati REG_DWORD, disponibile nella chiave seguente:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

Il primo bit del valore corrisponde all'unità A:, il secondo a B:, e così via. Per disabilitare l'esecuzione automatica su una o più unità, impostare i bit corrispondenti. Ad esempio, per disabilitare le unità A: e C: impostare NoDriveAutoRun su 0x00000005.

Il valore NoDriveTypeAutoRun disabilita l'esecuzione automatica per una classe di unità. Si tratta di un valore di dati REG_BINARY o REG_DWORD a 4 byte, presente nella stessa chiave.

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

Impostando i bit del primo byte di questo valore, è possibile escludere diversi dispositivi dall'utilizzo di AutoRun.

Nella tabella seguente sono elencate le costanti dei bit e delle maschere di bit che possono essere impostate nel primo byte di NoDriveTypeAutoRun per disabilitare AutoRun per un determinato tipo di unità. È necessario riavviare Esplora Risorse di Windows prima che le modifiche abbiano effetto.

Numero di bit costante maschera di bit Descrizione
0x04 DRIVE_REMOVEABLE Il disco può essere rimosso dall'unità (ad esempio un disco floppy).
0x08 UNITÀ_FISSA Non è possibile rimuovere il disco dall'unità (un disco rigido).
0x10 DRIVE_REMOTE Unità di rete.
0x20 DRIVE_CDROM CD-ROM unità.
0x40 DRIVE_RAMDISK Disco RAM.

 

Esecuzione automatica per altri tipi di supporti di archiviazione

L'esecuzione automatica è destinata principalmente alla distribuzione pubblica di applicazioni su CD-ROM e DVD-ROM e il suo uso è sconsigliato per altri supporti di archiviazione. Tuttavia, è spesso utile abilitare l'esecuzione automatica in altri tipi di supporti di archiviazione rimovibili. Questa funzionalità viene in genere usata per semplificare il debug dei file AutoRun.inf. L'esecuzione automatica funziona solo nei dispositivi di archiviazione rimovibili quando vengono soddisfatti i criteri seguenti:

  • Il dispositivo deve avere driver compatibili con l'esecuzione automatica. Per essere compatibile con l'esecuzione automatica, un driver deve notificare al sistema che un disco è stato inserito inviando un messaggio di WM_DEVICECHANGE.
  • La directory radice del supporto inserito deve contenere un file Autorun.inf.
  • Il dispositivo non deve avere l'esecuzione automatica disabilitata tramite il Registro di sistema .
  • L'applicazione in primo piano non eliminata esecuzione automatica.

Nota

Questa funzionalità non deve essere usata per distribuire applicazioni su supporti rimovibili. Poiché l'implementazione di AutoRun su supporti rimovibili offre un modo semplice per diffondere virus informatici, gli utenti devono essere sospetti di qualsiasi disco floppy distribuito pubblicamente che contiene un file Autorun.inf.

 

In genere, l'esecuzione automatica viene avviata automaticamente, ma può anche essere avviata manualmente. Se il dispositivo soddisfa i criteri elencati in precedenza, il menu di scelta rapida della lettera di unità includerà un comando AutoPlay. Per eseguire l'esecuzione automatica manualmente, fare clic con il pulsante destro del mouse sull'icona dell'unità e scegliere AutoPlay dal menu di scelta rapida o fare doppio clic sull'icona dell'unità. Se i driver non sono compatibili con l'esecuzione automatica, il menu di scelta rapida non avrà un elemento AutoPlay e non è possibile avviare l'esecuzione automatica.

I driver compatibili con l'esecuzione automatica sono forniti con alcune unità disco rimovibili, nonché altri tipi di supporti rimovibili, ad esempio le schede CompactFlash. AutoRun funziona anche con le unità di rete mappate a una lettera di unità con Esplora File o montate con Microsoft Management Console (MMC). Come per l'hardware montato, un'unità di rete montata deve avere un file Autorun.inf nella directory radice e non deve essere disabilitato tramite il Registro di sistema .