Существует возможность установки переключателя Загружать обновления; пользователь назначит время установки в диалоговом окне автоматического обновления Windows. Для этого применяется следующая команда: rundll32 wuaucpl.cpl, SaveAUApprovalOptions. Но она не всегда работает. Скажем даже, что в большинстве случаев она вызывает ошибку, но если несколько раз подряд вызвать данную команду, не закрывая сообщения об ошибках предыдущих команд, то существует большая вероятность того, что переключатель будет установлен. Вы спросите, зачем нужно столько мучиться? Все дело в том, что команда выполняется даже тогда, когда соответствующий диалог (или его настройки) заблокирован администратором (рис. 1.12) (конечно, если у вас есть права на изменение параметров ветви реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion WindowsUpdateAuto Update).
Команда, которой также можно воспользоваться благодаря апплету wuaucpl.cpl, — rundll32 wuaucpl.cpl, SaveConfigVerToRegistry. Она устанавливает значение DWORD-параметра ConfigVer, расположенного в ветви системного реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateAuto Update, равным 1. К счастью, эта команда работает чаще, чем ей предшествующая.
Рис. 1.12. Установка второго переключателя, несмотря на блокировку апплета
ActiveX-объекты — это специальные программы, которые не могут быть выполнены непосредственно двойным щелчком кнопкой мыши на файле ActiveX-объекта, но могут быть выполнены под руководством операционной системы Windows. Для этого применяются либо операции вставки и внедрения, либо команда rundll32 . exe. Да, несмотря на то, что ActiveX-объекты не являются полноценными программами, некоторые из них также возможно вызвать как программы. Например, попробуем выполнить команду rundll32 amovie.ocx, RunDll / play /close E:musicМультфильмыМузыка звезд5.wma (не забудьте изменить путь и имя музыкального файла на свои). Результат выполнения этой команды можно увидеть на рис. 1.13.
Рис. 1.13. Пример вызова ActiveX-объекта
ПРИМЕЧАНИЕ
Плюсом таких вызовов является то, что каждый вызванный ActiveX-объект выполняется как отдельная программа. Другими словами, если вы несколько раз вызовете один и тот же ActiveX-объект, то будет открыто несколько ActiveX-объектов (в данном случае проигрывателей), а не только один.
Рассмотрим приведенный выше вызов ActiveX-объекта детальней: rundll32 amovie.ocx, RunDll /play /close E:musicМультфильмыМузыка звезд5.wma. Как можно заметить, он практически ничем не отличается от вызова функций из библиотек — amovie.ocx является файлом, из которого берется функция, RunDll является самой функцией, а путь к музыкальному файлу — ее аргументом. Кроме пути к музыкальному файлу, используется еще два аргумента функции — /play и /close. Первый из них говорит о том, что данный ActiveX-объект необходимо вызвать и начать проигрывать, а второй аргумент означает, что после выполнения своей задачи ActiveX-объект должен быть автоматически закрыт.
Кроме функции RunDll, ActiveX-объект amovie.ocx (да и большинство других ActiveX-объектов) поддерживает еще две функции — DllRegisterServer и DllUnregisterServer. Первая из них регистрирует ActiveX-объект в реестре операционной системы, а вторая удаляет из реестра всю информацию об ActiveX-объекте.
ПРИМЕЧАНИЕ
Даже если ActiveX-объект не будет зарегистрирован в системе, его все равно возможно вызвать с помощью функции RunDll или другой подобной функции.
ActiveX-объект amovie.ocx также поддерживает функцию LoadFilterGraph, которая используется для загрузки графического фильтра, но, по мнению автора, данной функции нельзя передать сам путь к фильтру.
Теперь вкратце рассмотрим функции некоторых ActiveX-объектов, которые могут находиться в вашей операционной системе (не забывайте, что эти ActiveX-объекты, как и все остальные, поддерживают и такие функции, как DllRegisterServer и DllUnregisterServer).
■ rundll32 HHCTRL.OCX, doWinMain — выполнение этой команды приводит к вызову диалога HTML Help, приведенного на рис. 1.14. Содержимое диалога (файлы connect.inf и т.д.) находится в каталоге %userprofile%MZ. Если же данная папка отсутствует в системе, то будет выводиться ошибка о невозможности загрузки страницы.
Этот ActiveX-объект расположен в каталоге %systemroot%SYSTEM32.
■ rundll32 msdxm.ocx, RunDll /play /stop «путь к музыкальному файлу» — вызов данной функции воспроизводит указанный музыкальный файл с помощью Проигрывателя Windows Media.
Этот ActiveX-объект расположен в каталоге %systemroot%SYSTEM32.
Рис. 1.14. Вызов программы HTML Help
Вот и все стандартные ActiveX-объекты, которые, кроме DllRegisterServer и DllUnregisterServer, поддерживают дополнительные функции.
Драйверы — это специальные программы, управляющие работой оборудования, для которого они были написаны. Сейчас практически каждое устройство — от оптической мыши до видеокамеры — требует для своего взаимодействия с компьютером отдельный драйвер. Конечно, не все из этих устройств поставляются со своим собственным драйвером — и это неудивительно, ведь операционная система Windows XP уже включает в себя очень много различных драйверов для многих устройств известных производителей. Все они хранятся на установочном диске (а также в локальной файловой системе) в архиве driver.cab и устанавливаются только при нахождении системой нового оборудования.
Как и ActiveX-объекты, драйверы также могут хранить вызов функций, но использование этих функций оказывается не всегда возможным. Во-первых, некоторые драйверы написаны для операционной системы MS-DOS, поэтому применение их функций в операционной системе Windows XP невозможно. Во-вторых, вызов функции уже загруженного драйвера не всегда срабатывает — в большинстве случаев система просто выведет сообщение, подобное приведенному на рис. 1.15.
Рис. 1.15. Как правило, уже загруженные драйверы команды не поддерживают
У себя на компьютере автор книги нашел только одну доступную команду, предоставляемую драйвером WINSPOOL.DRV. Это стандартный драйвер Windows, расположенный в каталоге %systemroot%system32. Он управляет подключением к принтеру (а также передачей ему заданий) и поддерживает такую команду rundll32.exe:rundll32 WINSPOOL.DRV, ConnectToPrinterDlg. Она выводит диалог для подключения к сетевому принтеру и передачи ему задания. Результат выполнения данной команды будет подобным приведенному на рис. 1.16.
Рис. 1.16. Результат выполнения команды rundll32 WINSPOOL.DRV, ConnectToPrinterDlg
ПРИМЕЧАНИЕ
Это диалоговое окно также можно вызвать с помощью команды rundll32.exe PRINTUI.dll, ConnectToPrinterDlg.
Библиотеки — это специальные файлы с расширением DLL, описывающие все функции, применяемые программой, для которой данная библиотека написана.
Именно библиотеки содержат большинство функций, используемых операционной системой или программой. При этом библиотеки могут применяться как в программах (даже если данная библиотека не была специально написана для соответствующей программы), так и в драйверах, CPL-файлах, ActiveX-объектах и других исполняемых файлах Windows.
Раньше были рассмотрены команды rundll32.exe по файлам, в которых они описаны. Это было более эффективно по той причине, что стандартных CPL-файлов или файлов ActiveX-объектов на компьютере не очень много. Другая картина предстает при взгляде на количество библиотек, зарегистрированных в системе. Чтобы в этом убедиться, достаточно просто заглянуть в каталог %systemroot%system32 — именно он содержит стандартные библиотеки Windows, которых в этом каталоге можно насчитать сотни. А ведь с каждой программой поставляются еще и свои собственные библиотеки, которые могут находиться как в каталоге, в котором была установлена программа, так и в %systemroot%system32. Поэтому на этот раз команды rundll32.exe будут рассмотрены не по библиотекам, в которых они описаны, а по действиям, которые они выполняют.
Первым рассмотренным вопросом будет вопрос вызова различных мастеров, предназначенных для установки тех или иных сетевых компонентов компьютера. Автор знает по своему опыту, как иногда бывает сложно найти в файловой системе Windows ссылки на вызовы тех или иных мастеров настройки не только сетевых компонентов, но и любых других частей Windows. Особенно это актуально после преднамеренного удаления данных ссылок на диалоговые окна — когда пользователь хочет минимизации содержимого Windows и удаляет из меню Пуск или из других мест файловой системы все подряд, что ему кажется ненужным.
Рассмотрим команду вызова Мастера установки оборудования. Для его вызова достаточно выполнить команду rundll32.exe ccfgnt.dll, IcfgInstallModem, результат действия которой можно увидеть на рис. 1.17.
Аналогичное окно можно вызвать и с помощью следующей команды: rundll32.exe modemui.dll, InvokeControlPanel.
Рис. 1.17. Результат выполнения команды rundll32.exe ccfgnt.dll, IcfgInstallModem