Dela via


Aktivera och inaktivera automatisk körning

Det finns många situationer där AutoRun kan behöva inaktiveras tillfälligt eller permanent. AutoRun kan till exempel störa driften av ett program som körs och måste inaktiveras under hela tiden. Systemet innehåller flera sätt att inaktivera AutoRun.

Förhindra automatisk körning programmatiskt

Det finns en mängd olika situationer där AutoRun kan behöva ignoreras programmatiskt. Två exempel är:

  • Programmet har ett installationsprogram som kräver att användaren infogar en annan skiva som kan innehålla en Autorun.inf-fil.
  • Under programmets drift kan användaren behöva infoga en annan skiva som kan innehålla en Autorun.inf-fil.

I båda fallen vill du normalt inte starta ett annat program medan originalet pågår.

Användare kan manuellt ignorera AutoRun genom att hålla ned SKIFT-tangenten när de infogar CD-ROM-skivan. Det är dock vanligtvis bättre att hantera den här åtgärden programmatiskt snarare än beroende på användaren.

Med system som har Shell version 4.70 och senare skickar Windows ett "QueryCancelAutoPlay"-meddelande till förgrundsfönstret. Programmet kan svara på det här meddelandet för att förhindra automatisk körning. Den här metoden används av systemverktyg, till exempel dialogrutan Öppna gemensam för att inaktivera Automatisk körning.

Följande kodfragment visar hur du konfigurerar och hanterar det här meddelandet. Programmet måste köras i förgrundsfönstret. Registrera först "QueryCancelAutoPlay" som ett Windows-meddelande:

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

Programmets fönster måste vara i förgrunden för att det här meddelandet ska kunna tas emot. Meddelandehanteraren bör returnera TRUE- för att avbryta AutoRun och FALSE- för att aktivera den. Följande kodfragment visar hur du använder det här meddelandet för att inaktivera AutoRun.

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

Om ditt program använder en dialogruta och behöver svara på meddelandet "QueryCancelAutoPlay" kan det inte bara returnera TRUE- eller FALSE-. Anropa i stället SetWindowLong med nIndex inställt på DWL_MSGRESULT. Ange parametern dwNewLong till TRUE för att avbryta AutoRun och FALSE- för att aktivera den. Följande exempeldialogruta avbryter till exempel AutoRun när den tar emot meddelandet "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;               
        }
    } 

Använda registret för att inaktivera automatisk körning

Det finns två registervärden som kan användas för att beständigt inaktivera AutoRun: NoDriveAutoRun och NoDriveTypeAutoRun. Det första värdet inaktiverar AutoRun för angivna enhetsbeteckningar och det andra inaktiverar AutoRun för en klass med enheter. Om något av dessa värden är inställt på att inaktivera AutoRun för en viss enhet inaktiveras det.

Obs

Värdena NoDriveAutoRun och NoDriveTypeAutoRun bör endast ändras av systemadministratörer för att ändra värdet för hela systemet för testning eller administration. Program bör inte ändra dessa värden eftersom det inte finns något sätt att återställa dem till sina ursprungliga värden på ett tillförlitligt sätt.

 

Värdet NoDriveAutoRun inaktiverar AutoRun för angivna enhetsbeteckningar. Det är ett REG_DWORD datavärde som finns under följande nyckel:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

Den första biten av värdet motsvarar enhet A:, den andra biten motsvarar enhet B:, och så vidare. Om du vill inaktivera AutoRun för en eller flera enhetsbeteckningar anger du motsvarande bitar. Om du till exempel vill inaktivera enheterna A: och C: anger du NoDriveAutoRun till 0x00000005.

Värdet NoDriveTypeAutoRun inaktiverar AutoRun för en klass med enheter. Det är ett REG_DWORD eller 4 byte REG_BINARY datavärde som finns under samma nyckel.

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Explorer

Genom att ange bitar av det här värdets första byte kan olika enheter undantas från att arbeta med AutoRun.

I följande tabell visas bit- och bitmaskkonstanterna, som kan anges i den första byten av NoDriveTypeAutoRun för att inaktivera AutoRun-funktionaliteten för en viss enhetstyp. Du måste starta om Utforskaren innan ändringarna börjar gälla.

Bitnummer Bitmaskkonstant Beskrivning
0x04 UTTAGBAR_ENHET Disken kan tas bort från enheten (till exempel en diskett).
0x08 ENHET_FAST Det går inte att ta bort disken från enheten (en hårddisk).
0x10 DRIVE_REMOTE Nätverksdisk.
0x20 DRIVE_CDROM CD-ROM disk.
0x40 DRIVE_RAMDISK RAM-disk.

 

Kör automatiskt för andra typer av lagringsmedier

AutoRun är främst avsett för offentlig distribution av program på CD-ROM och DVD-ROM, och dess användning rekommenderas inte för andra lagringsmedier. Det är dock ofta användbart att aktivera AutoRun på andra typer av flyttbara lagringsmedier. Den här funktionen används vanligtvis för att förenkla felsökningen av AutoRun.inf-filer. AutoRun fungerar bara på flyttbara lagringsenheter när följande villkor uppfylls:

  • Enheten måste ha AutoRun-kompatibla drivrutiner. För att vara AutoRun-kompatibel måste en drivrutin meddela systemet att en disk har infogats genom att skicka ett WM_DEVICECHANGE meddelande.
  • Rotkatalogen för det infogade mediet måste innehålla en Autorun.inf-fil.
  • Enheten får inte ha AutoRun inaktiverat via -registret.
  • Förgrundsprogrammet har inte blockerat AutoRun.

Notera

Den här funktionen ska inte användas för att distribuera program på flyttbara medier. Eftersom implementering av AutoRun på flyttbara medier är ett enkelt sätt att sprida datorvirus bör användarna vara misstänksamma mot alla offentligt distribuerade disketter som innehåller en Autorun.inf-fil.

 

Normalt startar AutoRun automatiskt, men det kan också startas manuellt. Om enheten uppfyller kriterierna ovan innehåller enhetsbeteckningens snabbmeny ett AutoPlay- kommando. Om du vill köra AutoKör manuellt högerklickar du på enhetsikonen och väljer Spela upp automatiskt från snabbmenyn eller dubbelklickar på enhetsikonen. Om drivrutinerna inte är AutoRun-kompatibla kommer snabbmenyn inte att ha ett AutoPlay- objekt och autokörning kan inte startas.

AutoRun-kompatibla drivrutiner tillhandahålls med vissa flyttbara diskenheter, samt vissa andra typer av flyttbara medier, till exempel CompactFlash-kort. AutoRun fungerar också med nätverksenheter som mappas till en enhetsbeteckning med Windows Utforskaren eller monteras med Microsoft Management Console (MMC). Precis som med monterad maskinvara måste en monterad nätverksenhet ha en Autorun.inf-fil i rotkatalogen och får inte inaktiveras via -registret.