Все выпуски  

Секреты Windows: статьи о реестре, rundll32.exe, программах Книга 'Недокументированные возможности Windows XP', Часть 1


Книга "Недокументированные возможности Windows XP. Библиотека пользователя", Глава 1. Rundll32.exe, Часть 1.

Rundll32.exe, это небольшая программа, поставляемая со всеми версиями Windows. Эта программа была написана самими программистами Microsoft для своих нужд и способна выполнять любую Wind32 API функцию, описанную в библиотеке, как будто эта функция вызывается из программы или является полноценной программой. Программа rundll32.exe создавалась для вызова различных функций из файлов скриптов или INF-файлов и с ее помощью можно выполнить очень много интересных или полезных трюков, описанием которых мы и займемся в данной главе.

Перед описанием команд, доступных при работе с rundll32.exe, хотелось бы еще сузить рамки функций, которые необходимо понимать под «любыми» функциями, которые можно выполнить с помощью данной программы. Несмотря на то, что программа rundll32.exe способа выполнять любые функции, не все функции смогут быть выполнены — все дело в том, что некоторые из функций могут ожидать каких-то специальных параметров, не являющихся статическими, и получаемых с помощью других функций. Еще хуже ситуация может обстоять в том случае, когда функция не принимает никаких параметров, но при своей работе использует содержимое регистров или памяти компьютера. В это случае вызов данной функции может быть подобен игре в Кости — если вам повезет и все необходимые данной функции параметры окажутся корректными, тогда она сможет выполниться.

Оболочка

Синтаксис программы rundll32.exe довольно прост: rundll32.exe «путь к библиотеке и ее имя», «имя функции в данной библиотеке» «список необходимых ей параметров через запятую». Но как же можно вызвать данную программу? Помимо использования вызова в коде скрипта, о чем будет рассказано в следующих главах книги, данную программу можно вызвать и с помощью обычного диалога ВЫПОЛНИТЬ (или в поле команды при создании ярлыка). Например, введите в диалоге ВЫПОЛНИТЬ команду rundll32.exe shell32.dll, ShellAboutA и вы сможете увидеть диалог, подобный приведенному на рисунке 1.

Рисунок 1 Давайте начнем эту книгу со знакомства со своей операционной системой

Внимание Если для названия параметров функции и библиотек, регистр, в котором вы вводите команду, не важен, то для названия функции следует внимательно следить за написанием функции как с точки зрения ошибок, так и с точки зрения регистра каждого отдельного символа, иначе программа rundll32.exe не сможет найти необходимую вам функцию. Например, если вы вместо названия функции ShellAboutA введете название ShellaboutA, тогда rundll32.exe выведет сообщение о невозможности вызова функции, так как ее нет в соответствующей библиотеке.

CPL-файлы

Из нескольких предыдущих абзацев вы узнали практически все теоретические выкладки, которые необходимы для работы с программой Rundll32.exe. Сейчас же давайте начнем перечисление тех возможностей, которые данная программа может предоставить пользователю. И начнем мы с описания функций CPL-файлов.

Примечание Перед тем, как мы начнем рассмотрение различных функций, которые могут выполняться с помощью программы rundll32.exe, хотелось бы еще уточнить способ записи некоторых функций. Чуть выше мы рассмотрели команду, выполняющую функцию ShellAboutA. Как можно заметить, эта функция заканчивается на какой-то, совершенно не нужный символ — A. Этот символ говорит системе о том, что данная функция использует для своей работы символы кодировки ASCII (использование одного байта для представления одного символа). Также существует еще один символ, на который может заканчиваться функция — символ W. Он говорит системе о том, что данная функция использует для своей работы символы в кодировке Unicode (для представления одного символа используется два байта). Так вот, эти символы совершенно не обязательны (хотя в очень редких случаях они необходимы) — если вы введете название функции без последнего символа (A или W), тогда система сама попробует определить, какая кодировка должна использоваться.

Несмотря на то, что раньше говорилось, что программа rundll32.exe может вызывать функции библиотек, на самом деле ее возможности намного обширнее — она может вызвать функцию отовсюду, где она указана, будь то библиотека, CPL-файлы или сам исполняемый файл программы.

CPL-файл, это специальный файл (их еще называют апплетами), являющийся диалоговым окном, которое вызывается с помощью ПАНЕЛИ УПРАВЛЕНИЯ и предназначено для настройки какого-то отдельного компонента операционной системы. Большую часть ссылок на cpl-файлы можно встретить в папке ПАНЕЛЬ УПРАВЛЕНИЯ, которую можно открыть либо с помощью меню ПУСК, либо с помощью вызова команды control, либо с помощью вызова команды shell:ControlPanelFolder. Но кроме вызова панели управления операционная система Windows позволяет вызывать CPL-файлы с помощью ввода их названия в диалоге ВЫПОЛНИТЬ (в этом случае расширение .cpl указывать обязательно).

В контексте данной книги мы не будем рассматривать содержимое CPL-файлов, предполагается, что читатель уже пользовался ими. Исключением могут быть только те случаи, когда соответствующая команда rundll32.exe зависит от установки тех или иных параметров, доступ к которым можно получить из cpl-файла.

Access.cpl Данный апплет предназначен для редактирования различных специальных параметров настройки клавиатуры, звука, мыши или оболочки Windows. Все эти параметры разрабатывались программистами Microsoft специально для людей с ограниченными возможностями, хотя некоторые из представленных в апплете параметров могут быть полезны и в повседневной работе всех пользователей операционной системы Windows XP.

Чтобы вызвать данный апплет с помощью программы rundll32.exe, необходимо использовать команду rundll32.exe Access.cpl, DebugMain. Вот, в принципе, и все команды, которые поддерживает апплет access.cpl.

Appwiz.cpl Команда, именем которой назван данный подраздел книги, открывает диалоговое окно УСТАНОВКА/УДАЛЕНИЕ ПРОГРАММ. С помощью данного диалогового окна можно как удалять или изменять составляющую различных установленных в системе программ, так и заменять составляющие компоненты самой операционной системы.

Примечание Но не все компоненты операционной системы можно удалить с помощью данного диалогового окна. Некоторые из компонентов перед удалением требуют дополнительных действий (например, удаление стандартных игр операционной системы Сапер и Косынка), о которых будет рассказано в приложении к данной книге.

В отличие от рассмотренного нами ранее апплета access.cpl, апплет appwiz.cpl не позволяет вызвать себя с помощью команды программы rundll32.exe. Но зато он позволяет выполнить некоторые другие действия, которые другими способами выполнить нельзя. Но перед тем, как рассмотреть возможные действия, которые разрешает выполнить апплет appwiz.cpl, давайте несколько слов скажем о работе самого апплета — это поможет нам в понимании самой работы рассматриваемых нами ниже команд.

Итак, апплет appwiz.cpl. Как мы уже сказали, данный апплет содержит в себе список всех установленных в системе программ — для отображения этого списка программ применяется список УСТАНОВЛЕННЫЕ ПРОГРАММЫ (Рис.1.02). Но как формируется данный список? Можно подумать, что данный список формируется при каждом запуске апплета appwiz.cpl путем сканирования файловой системы Windows, но на самом деле все намного проще. На самом деле данный список расположен в реестре Windows. Для хранения данного списка используется ветвь реестра HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL, содержащая в себе набор подразделов, каждый из которых определяет один элемент списка УСТАНОВЛЕННЫЕ ПРОГРАММЫ. Названия данных подразделов идентифицируют установленную программу для апплета appwiz.cpl, но при этом не используются в списке УСТАНОВЛЕННЫЕ ПРОГРАММЫ. Для указания названия элемента в списке, применяется строковой параметр DISPLAYNAME, расположенный в каждом из подразделов рассматриваемой нами ветви (Рис.2).

Рисунок 2 Формирование списка Установленные программы апплета appwiz.cpl

Мы не будем полностью рассказывать о параметрах подразделов ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL — это не является главной темой книги. Поэтому тем, кому интересна данная тема, рекомендуется купить дополнительную книгу, посвященную только ей. Мы же сейчас займемся тем, для чего и был затеян рассказ о способе хранения списка установленных программ апплетом appwiz.cpl — описанием команды rundll32.exe, с помощью которой можно удалить программу, указанную в данном списке.

Чтобы удалить программу, ссылка на которую содержится в ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL, необходимо воспользоваться командой rundll32.exe appwiz.cpl, WOW64Uninstall_RunDLL ,,,«название подраздела в ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, идентифицирующего программу». Например, если мы хотим удалить программу EVEREST Professional v1.50, подраздел которой в рассматриваемой нами ветви назван EVEREST PROFESSIONAL_IS1 (Рис.3), необходимо использовать следующую команду — rundll32.exe appwiz.cpl, WOW64Uninstall_RunDLL ,,, EVEREST Professional_is1.

Рисунок 3 Подраздел удаляемой нами программы назван EVEREST PROFESSIONAL_IS1

После вызова данной команды запустится команда удаления, которая записана в параметре строкового типа UNINSTALLSTRING подраздела нашей ветви реестра EVEREST PROFESSIONAL_IS1 (Рис.3). Но кроме удаления программ, апплет appwiz.cpl позволяет выполнить некоторые другие интересные команды, используемые оболочкой Windows. Первой из таких команд является команда rundll32.exe appwiz.cpl, ConfigStartMenu, позволяющая очистить содержимое вашего меню ПУСК. После вызова данной команды перед вами появится диалог, отображенный на рисунке 4. С помощью этого диалога можно удалить те из элементов списка меню ПУСК, которые находятся в папке %userprofile%\Главное меню (Такие папки, как АДМИНИСТРИРОВАНИЕ, СТАНДАРТНЫЕ или АВТОЗАГРУЗКА удалить нельзя).

Рисунок 4 Результат выполнения команды rundll32.exe appwiz.cpl, ConfigStartMenu

Другой командой, которую можно вызвать благодаря апплету appwiz.cpl, является команда rundll32.exe appwiz.cpl, NewLinkHere «путь к катологу». С помощью этой команды можно создать ярлык в каталоге, который вы укажете. Для этого будет вызван специальный мастер создания ярлыков. Также доступ к этому мастеру можно получить из списка СОЗДАТЬ контекстного меню рабочего стола или папки, если выбрать в этом списке команду ЯРЛЫК.

Bthprops.cpl BTHPROPS.CPL — это апплет, предназначенный для настройки работы и взаимодействия устройств, подключаемых при помощи беспроводного соединения Bluetooth. По умолчанию, если в системе не установлено (или не зарегистрировано) ни одного устройства, работающего с помощью Bluetooth, то апплет BTHPROPS.CPL и все настраиваемые им параметры недоступны. Если же вы хотите посмотреть на то, что это за апплет, тогда можно попытаться воспользоваться некоторыми командами rundll32, использующими файл апплета для своей работы. К сожалению, с помощью таких команд нельзя вызвать самого окна апплета, но зато можно воспользоваться некоторыми из функций, которые оно предоставляет. Например, можно вызвать агента подключений Bluetooth, с помощью которого можно подключить устройство Bluetooth, передать или отправить файлы, а также настроить конфигурацию уже подключенных устройств Bluetooth. Для этого необходимо выполнить несколько действий. Во-первых, необходимо присвоить параметру DWORrundll32.exe D типа NOTIFICATION AREA ICON, расположенному в ветви реестра HKEY_CURRENT_USER\CONTROL PANEL\BLUETOOTH, значение, равное 1. Это необходимо для того, чтобы мы могли взаимодействовать с агентом подключений посредством его иконки, отображаемой в трее. А во-вторых, необходимо воспользоваться командой rundll32.exe для запуска агента: rundll32 bthprops.cpl ,,,BluetoothAuthenticationAgent. После ввода данной команды в трее появится иконка, подобная изображенной на рисунке 5.

Рисунок 5 Вызов команды rundll32.exe bthprops.cpl ,,,BluetoothAuthenticationAgent

После закрытия агента подключений значение параметра Notification Area Icon автоматически становится равным 0.

Еще одной возможностью, которую предоставляет апплет BTHPROPS.CPL, является возможность вызова окна свойств подключенного устройства Bluetooth. Для этого используется команда rundll32.exe bthprops.cpl ,,,BluetoothDisplayDeviceProperties. К сожалению, автор не нашел способа указания имени устройства, свойства которого необходимо вызвать, поэтому описанная выше команда будет вызывать диалог, подобный приведенному на рисунке 6.

Рисунок 6 Вызов команды rundll32.exe bthprops.cpl ,,,BluetoothDisplayDeviceProperties

Аналогичные команды можно применить и для апплета irprops.cpl. В этом случае нужно в команде rundll32.exe вместо апплета bthprops.cpl указать апплет irprops.cpl. Несмотря на то, что используется два разных апплета, результат команд будет один и тот же.

Продолжение следует

Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=92

В избранное