Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Существует множество ситуаций, когда автозапуск может потребоваться временно или постоянно отключить. Например, автозапуск может препятствовать работе запущенного приложения и его необходимо отключить в течение длительности. Система предоставляет несколько способов отключения автозапуска.
- подавление автоматического запуска программным способом
- Использование реестра для отключения автоматического запуска
- Автозапуск для других типов носителей данных
Отключение автоматического запуска программным способом
Существует множество ситуаций, когда автозапуск может потребоваться подавить программным путем. Ниже приведены два примера.
- Приложение имеет программу установки, требующую от пользователя вставлять другой диск, который может содержать файл Autorun.inf.
- Во время работы приложения пользователю может потребоваться вставить другой диск, который может содержать файл Autorun.inf.
В любом случае вы обычно не хотите запускать другое приложение во время выполнения исходного приложения.
Пользователи могут вручную отключить автозапуск, удерживая клавишу SHIFT при вставке компакт-диска. Однако обычно предпочтительнее обрабатывать эту операцию программным способом, а не в зависимости от пользователя.
В системах с оболочкой версии 4.70 и более поздних версиях Windows отправляет сообщение QueryCancelAutoPlay в окно переднего плана. Приложение может ответить на это сообщение, чтобы отключить автозапуск. Этот подход используется системными служебными программами, такими как стандартное диалоговое окно Open для отключения автоматического запуска.
В следующих фрагментах кода показано, как настроить и обработать это сообщение. Приложение должно работать в окне переднего плана. Сначала зарегистрируйте "QueryCancelAutoPlay" в качестве сообщения Windows:
uMessage = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));
Окно приложения должно находиться на переднем плане, чтобы получить это сообщение. Обработчик сообщений должен вернуть TRUE, чтобы отменить автозапуск и FALSE, чтобы включить его. В следующем фрагменте кода показано, как использовать это сообщение для отключения автоматического запуска.
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
}
}
}
Если приложение использует диалоговое окно и должно отвечать на сообщение QueryCancelAutoPlay, оно не может просто вернуть TRUE или FALSE. Вместо этого вызовите SetWindowLong с nIndexDWL_MSGRESULT. Задайте параметру dwNewLong значение TRUE для отмены автоматического запуска и false, чтобы включить его. Например, следующая процедура диалогового окна отменяет автозапуск при получении сообщения 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;
}
}
Использование реестра для отключения автоматического запуска
Существует два значения реестра, которые можно использовать для постоянного отключения автозапуска: NoDriveAutoRun и NoDriveTypeAutoRun. Первое значение отключает Автозапуск для указанных букв дисков, а второе — Автозапуск для типов дисков. Если для одного из этих значений установлено отключение автоматического запуска для определенного устройства, он будет отключен.
Заметка
Значения NoDriveAutoRun и NoDriveTypeAutoRun должны изменяться только системными администраторами, чтобы изменить значение всей системы для тестирования или администрирования. Приложения не должны изменять эти значения, так как их надежное восстановление до исходных значений невозможно.
Значение NoDriveAutoRun отключает автозапуск для указанных букв диска. Это значение данных типа REG_DWORD, найденное в следующем разделе:
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Explorer
Первый бит значения соответствует диску A:, второму — B:, и т. д. Чтобы отключить автозапуск для одного или нескольких букв диска, задайте соответствующие биты. Например, чтобы отключить диски A и C, задайте для NoDriveAutoRun значение 0x00000005
.
Значение NoDriveTypeAutoRun отключает автозапуск для типов дисков. Это значение REG_DWORD или 4-байтовое значение REG_BINARY, которое находится под тем же ключом.
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Explorer
Задав биты первого байта этого значения, различные диски можно исключить из работы с autoRun.
В следующей таблице приведены биты и константы битовой маски, которые можно задать в первом байте NoDriveTypeAutoRun, чтобы отключить autoRun для определенного типа диска. Прежде чем изменения вступили в силу, необходимо перезапустить проводник Windows.
Битовое число | Константная битовая маска | Описание |
---|---|---|
0x04 | УСТРОЙСТВО_СЪЕМНОЕ | Диск можно извлечь из привода (например, дискету). |
0x08 | ФИКСИРОВАННЫЙ ДИСК | Диск нельзя удалить с диска (жесткого диска). |
0x10 | DRIVE_REMOTE | Сетевой диск. |
0x20 | DRIVE_CDROM | диск CD-ROM |
0x40 | DRIVE_RAMDISK | Диск ОЗУ. |
Автозапуск для других типов носителей информации
Автозапуск в основном предназначен для общедоступного распространения приложений на CD-ROM и DVD-ROM, а его использование не рекомендуется для других носителей хранения. Однако часто рекомендуется включить автозапуск на других типах съемных носителей. Эта функция обычно используется для упрощения отладки файлов AutoRun.inf. AutoRun работает только на съемных устройствах хранения, если выполнены следующие условия:
- Устройство должно иметь драйверы, совместимые с autoRun. Чтобы быть совместимым с автозапуском, драйвер должен уведомить систему о том, что диск был вставлен, отправив WM_DEVICECHANGE сообщение.
- Корневой каталог вставленного носителя должен содержать файл Autorun.inf.
- Устройство не должно иметь отключённую функцию AutoRun через реестр .
- Приложение переднего плана не подавлено автозапуска.
Заметка
Эта функция не должна использоваться для распространения приложений на съемных носителях. Поскольку реализация AutoRun на съемных носителях обеспечивает простой способ распространения компьютерных вирусов, пользователи должны подозревать любую публично распространяемую дискету, содержащую файл Autorun.inf.
Как правило, автозапуск запускается автоматически, но его также можно запустить вручную. Если устройство соответствует указанным выше условиям, контекстное меню буквы диска будет включать команду автозапуска. Чтобы запустить автозапуск вручную, щелкните правой кнопкой мыши значок диска и выберите Автозапуск в контекстном меню или дважды щелкните значок диска. Если драйверы не совместимы с автозапуском, контекстное меню не будет иметь элемент автозапуска и автозапуск не может быть запущен.
Драйверы, совместимые с автозапуском, предоставляются с некоторыми съемными дисками, а также некоторыми другими типами съемных носителей, таких как карточки CompactFlash. AutoRun также работает с сетевыми дисками, сопоставленными с буквой диска с проводником Windows или подключенными к консоли управления Майкрософт (MMC). Как и в подключенном оборудовании, подключенный сетевой диск должен иметь файл Autorun.inf в корневом каталоге и не должен быть отключен с помощью реестра.