AutoRun in- en uitschakelen
Er zijn veel situaties waarin AutoRun mogelijk tijdelijk of permanent moet worden uitgeschakeld. AutoRun kan bijvoorbeeld de werking van een actieve toepassing verstoren en moet gedurende de duur worden uitgeschakeld. Het systeem biedt verschillende manieren om AutoRun uit te schakelen.
- AutoRun programmatisch onderdrukken
- Het register gebruiken om AutoRun- uit te schakelen
- AutoRun voor andere typen opslagmedia
AutoRun programmatisch onderdrukken
Er zijn verschillende situaties waarin AutoRun mogelijk programmatisch moet worden onderdrukt. Twee voorbeelden zijn:
- Uw toepassing heeft een installatieprogramma waarvoor de gebruiker een andere schijf moet invoegen die mogelijk een Autorun.inf-bestand bevat.
- Tijdens de werking van uw toepassing moet de gebruiker mogelijk een andere schijf invoegen die een Autorun.inf-bestand kan bevatten.
In beide gevallen wilt u normaal gesproken geen andere toepassing starten terwijl het origineel wordt uitgevoerd.
Gebruikers kunnen AutoRun handmatig onderdrukken door shift ingedrukt te houden wanneer ze de cd-rom invoegen. Het is echter meestal beter om deze bewerking programmatisch te verwerken in plaats van afhankelijk van de gebruiker.
Met systemen met Shell versie 4.70 en hoger stuurt Windows een bericht 'QueryCancelAutoPlay' naar het voorgrondvenster. Uw toepassing kan op dit bericht reageren om AutoRun te onderdrukken. Deze methode wordt gebruikt door systeemhulpprogramma's zoals het standaard dialoogvenster Openen om AutoRun uit te schakelen.
De volgende codefragmenten laten zien hoe u dit bericht instelt en verwerkt. Uw toepassing moet worden uitgevoerd in het voorgrondvenster. Registreer eerst QueryCancelAutoPlay als een Windows-bericht:
uMessage = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));
Het venster van uw toepassing moet zich op de voorgrond bevinden om dit bericht te ontvangen. De berichthandler moet TRUE retourneren om AutoRun te annuleren en moet FALSE retourneren om het in te schakelen. In het volgende codefragment ziet u hoe u dit bericht kunt gebruiken om AutoRun uit te schakelen.
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
}
}
}
Als uw toepassing een dialoogvenster gebruikt en moet reageren op een bericht 'QueryCancelAutoPlay', kan deze niet eenvoudig TRUE of FALSEretourneren. Roep in plaats daarvan SetWindowLong aan met nIndex ingesteld op DWL_MSGRESULT. Stel de parameter dwNewLong in op TRUE- om AutoRun te annuleren en FALSE om deze in te schakelen. De volgende voorbeelddialoogvensterprocedure annuleert bijvoorbeeld AutoRun wanneer het bericht QueryCancelAutoPlay ontvangt.
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;
}
}
Het register gebruiken om AutoRun uit te schakelen
Er zijn twee registerwaarden die kunnen worden gebruikt om AutoRun permanent uit te schakelen: NoDriveAutoRun en NoDriveTypeAutoRun. De eerste waarde schakelt AutoRun uit voor opgegeven stationsletters en de tweede schakelt AutoRun uit voor een klasse van stations. Als een van deze waarden is ingesteld om AutoRun voor een bepaald apparaat uit te schakelen, wordt deze uitgeschakeld.
Notitie
De waarden NoDriveAutoRun en NoDriveTypeAutoRun mogen alleen worden gewijzigd door systeembeheerders om de waarde voor het hele systeem te wijzigen voor test- of beheerdoeleinden. Toepassingen mogen deze waarden niet wijzigen, omdat ze niet betrouwbaar kunnen worden hersteld naar hun oorspronkelijke waarden.
Met de NoDriveAutoRun-waarde wordt AutoRun uitgeschakeld voor opgegeven stationsletters. Het is een REG_DWORD gegevenswaarde, te vinden onder de volgende sleutel:
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Explorer
De eerste bit van de waarde komt overeen met station A:, de tweede met B:, enzovoort. Als u AutoRun wilt uitschakelen voor een of meer stationsaanduidingen, stelt u de bijbehorende bits in. Als u bijvoorbeeld de stations A: en C: wilt uitschakelen, stelt u NoDriveAutoRun in op 0x00000005
.
De waarde NoDriveTypeAutoRun schakelt AutoRun uit voor een klasse stations. Het is een REG_DWORD of 4-byte REG_BINARY gegevenswaarde, gevonden onder dezelfde sleutel.
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Explorer
Door de bits van de eerste byte van deze waarde in te stellen, kunnen verschillende stations worden uitgesloten van het werken met AutoRun.
De volgende tabel bevat de bits en bitmaskerconstanten die in de eerste byte van NoDriveTypeAutoRun kunnen worden ingesteld om AutoRun voor een bepaald stationstype uit te schakelen. U moet Windows Verkenner opnieuw starten voordat de wijzigingen van kracht worden.
Bitnummer | Bitmask constante | Beschrijving |
---|---|---|
0x04 | AFTNEEMBARE_SCHIJF | Van de drive kan de schijf worden verwijderd, zoals bijvoorbeeld bij een diskette. |
0x08 | VASTE SCHIJF | De schijf kan niet worden verwijderd van de schijf (een harde schijf). |
0x10 | DRIVE_REMOTE | Netwerkstation. |
0x20 | DRIVE_CDROM | CD-ROM schijf. |
0x40 | DRIVE_RAMDISK | RAM-schijf. |
AutoRun voor andere typen opslagmedia
AutoRun is voornamelijk bedoeld voor openbare distributie van toepassingen op CD-ROM en dvd-rom, en het gebruik ervan wordt afgeraden voor andere opslagmedia. Het is echter vaak handig om AutoRun in te schakelen op andere typen verwisselbare opslagmedia. Deze functie wordt doorgaans gebruikt om de foutopsporing van AutoRun.inf-bestanden te vereenvoudigen. AutoRun werkt alleen op verwisselbare opslagapparaten wanneer aan de volgende criteria wordt voldaan:
- Het apparaat moet autoRun-compatibele stuurprogramma's hebben. Als u AutoRun-compatibel wilt zijn, moet een stuurprogramma het systeem waarschuwen dat een schijf is ingevoegd door een WM_DEVICECHANGE bericht te verzenden.
- De hoofdmap van de ingevoegde media moet een Autorun.inf-bestand bevatten.
- Op het apparaat mag AutoRun niet zijn uitgeschakeld via het register.
- De voorgrondtoepassing is niet onderdrukt AutoRun.
Notitie
Deze functie mag niet worden gebruikt voor het distribueren van toepassingen op verwisselbare media. Omdat het implementeren van AutoRun op verwisselbare media een eenvoudige manier biedt om computervirussen te verspreiden, moeten gebruikers verdacht zijn van een openbaar gedistribueerde diskette die een Autorun.inf-bestand bevat.
AutoRun wordt normaal gesproken automatisch gestart, maar kan ook handmatig worden gestart. Als het apparaat aan de bovenstaande criteria voldoet, bevat het snelmenu van de stationsletter de opdracht AutoPlay. Als u AutoRun handmatig wilt uitvoeren, klikt u met de rechtermuisknop op het stationspictogram en selecteert u AutoPlay in het snelmenu of dubbelklikt u op het stationspictogram. Als de stuurprogramma's niet compatibel zijn met AutoRun, bevat het snelmenu geen AutoPlay item en kan AutoRun niet worden gestart.
AutoRun-compatibele stuurprogramma's worden geleverd met enkele verwisselbare schijfstations, evenals andere typen verwisselbare media, zoals CompactFlash-kaarten. AutoRun werkt ook met netwerkstations die zijn toegewezen aan een stationsletter met Windows Verkenner of gekoppeld aan de MMC -(Microsoft Management Console). Net als bij gekoppelde hardware moet een gekoppeld netwerkstation een Autorun.inf-bestand in de hoofdmap hebben en mag deze niet worden uitgeschakeld via het register.