Sdílet prostřednictvím


Povolení a zakázání automatického spuštění

Existuje mnoho situací, kdy může být automatické spuštění dočasně nebo trvale zakázané. Automatické spuštění může například kolidovat s provozem spuštěné aplikace a musí být po dobu trvání zakázaná. Systém nabízí několik způsobů zakázání automatického spuštění.

Potlačení funkce AutoRun programově

V různých situacích může být automatické spuštění potřeba potlačit programově. Mezi dva příklady patří:

  • Aplikace má instalační program, který vyžaduje, aby uživatel vložil jiný disk, který může obsahovat soubor Autorun.inf.
  • Během provozu aplikace může uživatel muset vložit jiný disk, který může obsahovat soubor Autorun.inf.

V obou případech obvykle nechcete spustit jinou aplikaci, zatímco probíhá původní aplikace.

Uživatelé mohou potlačit automatické spuštění ručně podržením klávesy SHIFT při vložení disku CD-ROM. Obvykle je ale vhodnější tuto operaci zpracovat programově, než v závislosti na uživateli.

V systémech, které mají Shell verze 4.70 a novější, systém Windows odešle do okna popředí zprávu QueryCancelAutoPlay. Aplikace může na tuto zprávu odpovědět a potlačit automatické spuštění. Tento přístup používají systémové nástroje, jako je například Otevřít běžné dialogové okno k zakázání automatického spuštění.

Následující fragmenty kódu ukazují, jak nastavit a zpracovat tuto zprávu. Aplikace musí být spuštěná v okně popředí. Nejprve zaregistrujte "QueryCancelAutoPlay" jako zprávu systému Windows:

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

Aby se tato zpráva zobrazila, musí být okno vaší aplikace v popředí. Obslužná rutina zprávy by měla vrátit TRUE, aby zrušila automatické spuštění, a FALSE, aby ho povolila. Následující fragment kódu ukazuje, jak tuto zprávu použít k zakázání automatického spuštění.

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

Pokud aplikace používá dialogové okno a potřebuje odpovědět na zprávu QueryCancelAutoPlay, nemůže jednoduše vrátit TRUE nebo FALSE. Místo toho volejte SetWindowLong s nIndex nastavenou na DWL_MSGRESULT. Nastavte parametr dwNewLong na hodnotu TRUE, aby se zrušilo automatické spuštění, a FALSE, aby se povolilo. Například následující ukázkový postup s dialogovým oknem zruší funkci AutoRun, když obdrží zprávu "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;               
        }
    } 

Zakázání automatického spuštění pomocí registru

Existují dvě hodnoty registru, které lze použít k trvalému zákazu automatického spuštění: NoDriveAutoRun a NoDriveTypeAutoRun. První hodnota zakáže automatické spuštění pro zadaná písmena jednotky a druhá zakáže automatické spuštění pro třídu jednotek. Pokud je jedna z těchto hodnot nastavená tak, aby pro určité zařízení zakázala automatické spuštění, bude zakázaná.

Poznámka

Hodnoty NoDriveAutoRun a NoDriveTypeAutoRun by měly být upraveny pouze správci systému, aby změnili hodnotu pro celý systém pro účely testování nebo správy. Aplikace by tyto hodnoty neměly upravovat, protože neexistuje způsob, jak je spolehlivě obnovit do původních hodnot.

 

Hodnota NoDriveAutoRun zakáže funkci AutoRun pro určená písmena jednotky. Jedná se o REG_DWORD datovou hodnotu, kterou najdete v následujícím klíči:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

První bit hodnoty odpovídá jednotce A:, druhý k B:, a tak dále. Pokud chcete automatické spuštění zakázat pro jedno nebo více písmen jednotek, nastavte odpovídající bity. Pokud chcete například zakázat jednotky A: a C:, nastavte NoDriveAutoRun na 0x00000005.

Hodnota NoDriveTypeAutoRun zakazuje funkci automatického spuštění (AutoRun) pro třídu jednotek. Jedná se o REG_DWORD nebo 4 bajtovou REG_BINARY datovou hodnotu, kterou najdete pod stejným klíčem.

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

Nastavením bitů prvního bajtu této hodnoty lze vyloučit různé jednotky z použití funkce AutoRun.

Následující tabulka obsahuje bity a konstanty bitové masky, které lze nastavit v prvním bajtu NoDriveTypeAutoRun k zakázání automatického spuštění pro určitý typ jednotky. Před provedením změn je nutné restartovat Průzkumníka Windows.

Bitové číslo Bitová maska – konstanta Popis
0x04 VYMĚNITELNÝ_DISK Disk lze odebrat z jednotky (například diskety).
0x08 DRIVE_FIXED Disk nelze odebrat z diskové jednotky (pevný disk).
0x10 ŘÍZENÍ_VZDÁLENÉ Síťová jednotka.
0x20 DRIVE_CDROM CD-ROM jednotka.
0x40 DRIVE_RAMDISK Disk RAM.

 

Automatické spuštění pro jiné typy médií úložiště

AutoRun je primárně určený pro veřejnou distribuci aplikací na CD-ROM a DVD-ROM a jeho použití se nedoporučuje pro jiná média úložiště. Je ale často užitečné povolit automatické spuštění na jiných typech vyměnitelných úložných médií. Tato funkce se typicky používá k zjednodušení ladění souborů AutoRun.inf. Automatické spuštění funguje jenom na vyměnitelných úložných zařízeních, pokud jsou splněna následující kritéria:

  • Zařízení musí mít ovladače kompatibilní s automatickým spuštěním. Aby byl ovladač kompatibilní s automatickým spuštěním, musí systém upozornit, že disk byl vložen odesláním WM_DEVICECHANGE zprávy.
  • Kořenový adresář vloženého média musí obsahovat soubor Autorun.inf.
  • Zařízení nesmí mít zakázané automatické spuštění prostřednictvím registru.
  • Aplikace na popředí nemá potlačeno Automatické spuštění.

Poznámka

Tato funkce by se neměla používat k distribuci aplikací na vyměnitelném médiu. Vzhledem k tomu, že implementace funkce AutoRun na vyměnitelném médiu poskytuje snadný způsob šíření počítačových virů, měli by být uživatelé podezřelí z jakékoli veřejně distribuované diskety, která obsahuje soubor Autorun.inf.

 

Za normálních okolností se automatické spuštění spustí automaticky, ale dá se spustit také ručně. Pokud zařízení splňuje výše uvedená kritéria, místní nabídka písmene jednotky bude obsahovat příkaz Automatické přehrávání. Pokud chcete Automatické přehrávání spustit ručně, klikněte pravým tlačítkem myši na ikonu jednotky a vyberte Automatické přehrávání z místní nabídky nebo poklikejte na ikonu jednotky. Pokud ovladače nejsou kompatibilní s funkcí AutoRun, místní nabídka nebude obsahovat položku automatické přehrávání a AutoRun nelze spustit.

Ovladače kompatibilní s automatickým spuštěním jsou k dispozici s některými vyměnitelnými diskovými jednotkami a některými dalšími typy vyměnitelných médií, jako jsou karty CompactFlash. AutoRun také funguje se síťovými jednotkami, které jsou namapované na písmeno jednotky pomocí Průzkumníka Windows nebo připojené pomocí konzoly konzoly MMC (Microsoft Management Console). Stejně jako u připojeného hardwaru musí mít připojený síťový disk v kořenovém adresáři soubor Autorun.inf a nesmí být zakázán prostřednictvím registru .