Abilitazione e disabilitazione dell'esecuzione automatica
Esistono molte situazioni in cui l'esecuzione automatica potrebbe essere temporaneamente o permanentemente disabilitata. Ad esempio, l'esecuzione automatica potrebbe interferire con l'operazione di un'applicazione in esecuzione e deve essere disabilitata per la durata. Il sistema offre diversi modi per disabilitare l'esecuzione automatica.
- Eliminazione dell'esecuzione automatica a livello di codice
- Uso del Registro di sistema per disabilitare l'esecuzione automatica
- Esecuzione automatica per altri tipi di supporti di archiviazione
Esistono diverse situazioni in cui l'esecuzione automatica potrebbe essere eliminata a livello di codice. Di seguito sono riportati due esempi:
- L'applicazione ha un programma di installazione che richiede all'utente di inserire un altro disco che può contenere un file Autorun.inf.
- Durante l'operazione 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 il tasto 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 successiva, 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"));
La finestra dell'applicazione deve essere in primo piano per ricevere questo messaggio. Il gestore 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 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;
}
}
Esistono due valori del Registro di sistema che possono essere usati per disabilitare in modo permanente AutoRun: NoDriveAutoRun e NoDriveTypeAutoRun. Il primo valore disabilita l'esecuzione automatica per le lettere di unità specificate e la seconda disabilita l'esecuzione automatica per una classe 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 l'esecuzione automatica per le lettere di unità specificate. Si tratta di un valore di dati REG_DWORD, trovato nella chiave seguente:
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Explorer
Il primo bit del valore corrisponde all'unità A:, la seconda a B:e così via. Per disabilitare l'esecuzione automatica per una o più lettere di 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 REG_DWORD o 4 byte, trovato nella stessa chiave.
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Explorer
Impostando i bit del primo byte di questo valore, è possibile escludere unità diverse dall'uso di AutoRun.
La tabella seguente fornisce i bit e le costanti di maschera di bit, che possono essere impostate nel primo byte di NoDriveTypeAutoRun per disabilitare l'esecuzione automatica per un determinato tipo di unità. È necessario riavviare Esplora risorse prima dell'effetto delle modifiche.
Numero bit | Costante maschera bit | Descrizione |
---|---|---|
0x04 | DRIVE_REMOVEABLE | Il disco può essere rimosso dall'unità , ad esempio un disco floppy. |
0x08 | DRIVE_FIXED | Impossibile rimuovere il disco dall'unità (disco rigido). |
0x10 | DRIVE_REMOTE | Unità di rete. |
0x20 | DRIVE_CDROM | Unità CD-ROM. |
0x40 | DRIVE_RAMDISK | Disco RAM. |
L'esecuzione automatica è principalmente destinata alla distribuzione pubblica di applicazioni su CD-ROM e DVD-ROM e il relativo 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 ha eliminato l'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 computer, 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 sopra, il menu di scelta rapida della lettera di unità includerà un comando AutoPlay . Per eseguire manualmente l'esecuzione automatica, fare clic con il pulsante destro del mouse sull'icona dell'unità e selezionare 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 l'esecuzione automatica non può essere avviata.
I driver compatibili con l'esecuzione automatica vengono forniti con alcune unità disco rimovibili, nonché alcuni altri tipi di supporti rimovibili, ad esempio schede CompactFlash. L'esecuzione automatica funziona anche con le unità di rete mappate a una lettera di unità con Esplora risorse 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.