- RunDll32 — вызов функций библиотек DLL
- Алгоритм работы rundll32
- Как увидеть полный путь запуска rundll32
- 32-битные и 64-битные версии программы
- Пример использования rundll32
- Правила создания функций
- rundll32.exe — Что это за процесс в Windows?
- Является ли rundll32 вирусом и почему он грузит процессор
- Как исправить ошибки c rundll32
- 1. Проверка системных файлов
- 2. Установите Visual C ++
- Способы устранения ошибки RunDLL
- Ошибка «RunDll не найден указанный модуль» при запуске системы — что это
- Причины
- Как исправить на компьютере или ноутбуке
- Переустановка операционной системы
- Проверка системных файлов
- Видео: как выполнить сканирование и восстановление файлов Windows
- Утилита «Autoruns»
- Устранение ошибки с помощью планировщика задач
- Видео: как быстро устранить ошибку RunDll
RunDll32 — вызов функций библиотек DLL
RunDll32 — системная утилита командной строки, разработанная для загрузки и запуска функций из 32/64-битных библиотек DLL. Распространено ошибочное мнение, что утилита rundll32 является средством для «запуска DLL» по аналогии с исполняемым приложением, в действительности же DLL невозможно «запустить», поскольку это не исполняемый образ в классическом понимании (вроде .EXE). Для того, что бы понять причины этого явления, следует разобраться, что же такое библиотека:
Одним словом просто так вот щелкнуть в проводнике по .dll-файлу и запустить его не получится. Но как же быть когда возникает необходимость запускать из командной строки на исполнение функции той или иной библиотеки? Оказывается, такая возможность в системе присутствует и реализуется она при помощи утилиты rundll32.exe , которая предназначена для запуска функций (процедур) хранящихся в библиотеках DLL. Но имеется одно ограничение, rundll32 позволяет получить доступ только к функциям/процедурам, которые были описаны надлежащим образом. Мало того, что вызываемые функции должны быть экспортируемыми, так они еще должны удовлетворять специфичным требованиям к определению входных параметров. Функции библиотек, которые не помечены как экспортируемые, запускаться посредством rundll32 не могут.
Бытует мнение, что утилита rundll32 изначально была спроектирована разработчиками для внутренних нужд самой операционной системы, то есть использовалась системой Windows для запуска ограниченного количества функций системных DLL.
Утверждается, что когда-то (давным-давно) функциональные особенности rundll32 были неявными, то есть “скрытыми” от пользователя системы, но при этом самой системой активно эксплуатирующимися. Со временем утилита rundll32 превратилась в достаточно продвинутое средство, и в определенный момент, по причине того, что программа предоставляла возможности общего характера, разработчики решили включить её в комплект ОС в виде отдельной утилиты. В состав Microsoft Windows 95, Windows 98 и Windows Millennium входили программы rundll.exe и rundll32.exe , а в операционных системах Microsoft Windows NT 4.0, Windows 2000 и Windows XP, в сборку была включена единственная утилита с именем rundll32.exe .
Причина подобного отношения кроется в многочисленных проблемах, связанных с использованием rundll32 в своих программных окружениях. Как же без rundll32, спросите Вы? Оказывается, Microsoft активно пишет специализированные системные утилиты, которые постепенно заменяют функционал полюбившегося нам многочисленного программного функционала. Поэтому, время от времени в процессах Windows 7 можно таки встретить процесс rundll32 , однако встречается подобное явление всё реже и реже.
Алгоритм работы rundll32
В общих чертах, поскольку утилита представляет из себя некую обертку, алгоритм работы rundll32 можно описать следующим образом:
- Вызывается функция LoadLibrary , которая загружает выбранную DLL;
- Вызывается функция GetProcAddress , для получения адреса точки входа вызываемой из библиотеки функции;
- Вызывается сама функция и ей передаются входные параметры;
- Происходит выход из функции по завершению её работы;
- Библиотека DLL выгружается системой из памяти.
Как увидеть полный путь запуска rundll32
Если в системе ни с того ни с сего вдруг удалось обнаружить запущенный процесс rundll32 , и вам стало интересно, а какой же, собственно, функционал утилита выполняет, то можно определить это по полному пути запуска утилиты rundll32 . Посмотреть полный путь запуска, то есть параметры командной строки можно при помощи системной утилиты Диспетчер задач Windows (Task Manager).
Вызовите «Диспетчер задач» ( Ctrl + Shift + Esc ), перейдите в меню «Вид», выберите пункт «Выбрать столбцы..» и пролистав список вниз, найдите пункт «Командная строка» и отметьте его чекбокс, затем нажмите ОК . Результатом будет появление в главном окне диспетчера задач в параметре «командная строка» полной строки запуска rundll32.
32-битные и 64-битные версии программы
В 64-битных версиях ОС семейства Windows присутствуют 2 варианта программы rundll32.exe :
- 64-битная версия, расположенная в %SystemRoot%\System32\ ;
- 32-битная версия, расположенная в %SystemRoot%\SysWOW64\ .
В 64-битной ОС, для загрузки 64-битной библиотеки DLL может быть использована 64-битная версия rundll32.exe , находящаяся в директории %SystemRoot%\System32\ . Напротив, 32-битные программы в 64-битной ОС, обращающиеся к %SystemRoot%\System32\ , в целях обеспечения совместимости будут перенаправлены в %SystemRoot%\SysWOW64\ и, соответственно, будут использовать уже 32-битную версию rundll32.exe .
Пример использования rundll32
Для запуска программы rundll32 используется синтаксис командной строки следующего вида:
В качестве примера предлагаю разобрать команду запуска апплета «Язык и региональные стандарты» панели управления, вкладка «Форматы»:
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
При выполнении данной команды утилита rundll32 вызовет функцию Control_RunDLL , находящуюся в библиотеке shell32.dll , и передаст ей следующие параметры:
Параметр | Описание |
---|---|
hWnd | Идентификатор (дескриптор) родительского окна, который обычно используется при создании окон в функциях загружаемой библиотеки DLL. |
hInstance | Дескриптор (заголовок экземпляра) выбранной библиотеки DLL. Иначе, стартовый адрес процесса DLL в адресном пространстве. В нашем случае — библиотеки shell32.dll . |
lpCmdLine | Командная строка, передаваемая библиотеке. То есть параметры, передаваемые самой библиотеке. В нашем случае intl.cpl,,0 ; |
nCmdShow | Режим отображения окон выбранной библиотеки. (данные, передаваемые функции CreateProcess ). |
Теперь давайте отметим и некоторые требования к синтаксису rundll32 :
- Параметр, описывающий точку входа вызываемой функции (EntryPoint) чувствителен к регистру. Это означает, что значение Control_RunDLL не тоже самое что control_rundll . Довольно часто неправильное указание регистра символов вызываемой функции приводит к ошибкам отказа в обнаружении последних.
- Функция (в приведенном выше примере — функция Control_RunDLL ) должна самостоятельно выполнять анализ командной строки и идентифицировать отдельные ее аргументы.
- Утилиты rundll / rundll32 ищут указанную библиотеку DLL в стандартных местоположениях.
В нашем примере библиотека shell32.dll располагается по известному в переменной %PATH% пути, поэтому мы и указываем её в сокращенном виде. Чтобы быть уверенным, что будет загружена именно интересующая нас библиотека DLL, рекомендуется конкретизировать полный путь к файлу библиотеки. В противном случае может возникнуть ситуация, когда в системе может присутствовать одноименная библиотека, находящаяся в стандартном местоположении (например, по путям, определяемым %PATH% ), а та, которую хотите использовать Вы, находится по неизвестному системе пути, в этом случае утилитой rundll32 будет вызвана первая библиотека.
Ранее, во времена Windows 95/98, к синтаксису командной строки утилиты rundll32 применялись достаточно жесткие требования. Например, чрезвычайно важным являлось наличие запятой («,») между параметром и именем вызываемой функции. Если запятая опускалась, утилита rundll32 «по-тихому» завершала работу, не выполняя никаких действий с библиотекой. Кроме того, между параметром , символом запятой и названием вызываемой функции не должно было быть никаких пробелов. Но, со временем анализатор командной строки утилиты претерпевал изменения и эволюционировал, и в данный момент, синтаксис rundll32 позволяет применять пробел между именем библиотеки и именем функции.
Правила создания функций
Очевидно, что в создаваемую нами пользовательскую библиотеку DLL нам необходимо поместить функцию со входными следующими параметрами.
Пример описания процедуры на языке Ассемблера:
При создании экспортируемой функции (в примерах выше она имеет псевдо-имя EntryPoint) необходимо учитывать следующие моменты:
- Вместо строки «EntryPoint», желательно указать фактическое имя функции. Обратите внимание, что «точка входа», используемая программой rundll32, не зависит от функции DllEntryPoint , которая в 32-разрядных библиотеках DLL осуществляет обработку процессов и оповещение о подключении и отключении потоков. Это точка входа в саму функцию.
- Функцию, являющуюся точкой входа для программы rundll32, необходимо определить, используя соглашение о вызовах _stdcall (в C++ по умолчанию для атрибута _stdcall используется значение CALLBACK). Иначе, по умолчанию будет использоваться другое соглашение о вызовах _cdecl . Это приведет к аварийному завершению работы программы rundll32 после вызова данной функции.
Функции, являющейся точкой входа, передаются следующие параметры:
rundll32.exe — Что это за процесс в Windows?
RunDLL32 — Run Dynamic Link Library 32-bit (запуск динамических ссылок из 32-разрядной библиотеки). Хост-процесс Windows (Rundll32) — это системный файл операционной системы Windows и он не является вирусом. Он помогает с распределением динамической библиотеки в памяти. Другими словами, библиотеки динамических ссылок (Dynamic Link Library или DLL) — это важные файлы, в которых хранятся части данных принадлежащих конкретному приложению.
К примеру, когда вы нажимаете в любой программе «Сохранить как«, то выскакивает окно. Оно одинаковое во всех программах и сделано это при помощи Rundll32.exe. Это очень облегчает работу программистам, чтобы не писать каждый раз тонну лишнего кода в свою программу.
Является ли rundll32 вирусом и почему он грузит процессор
Сам файл rundll32.exe является официальным файлом Microsoft. Он не является вирусом. Однако, есть вредоносное ПО, которое маскируется под имя этого процесса. В этом случае, он может быть вирусом и грузить вашу систему до 100%, в частности процессор. Очень часто встречается на торрентах со взломанными программами и играми, когда вы их скачиваете и устанавливаете. Давайте посмотрим, как узнать, является ли rundll32 вирусом.
Если rundll32.exe находится в папках WinSxS, System32 или SysWOW64 и имеет описание Хост-процесс Windows (Rundll32), то это оригинальный файл Microsoft. Если вы сомневаетесь, то воспользуйтесь антивирусным сканером. Рекомендую Zemana или D.WEB.
1 способ. Вы можете написать слово «rundll32.exe» в поиске проводника и система вам найдет все файлы с этим именем. На картинке ниже видно, что он расположен по правильным путям. Также, это могут быть подпаки. Нажмите правой кнопкой мыши по файлу и выберите «Свойства«.
Во вкладке «Подробно» нас интересует «Описание файла: Хост-процесс Windows (Rundll32)» и «Название продукта: ОС Microsoft Windows«. Если данные верны, то это не вирус.
2 способ. Если вы обнаружили rundll32 в диспетчере задач и сомневаетесь в нем, то просто щелкните по нему правой кнопкой мыши и выберите «Открыть местоположение файла«. Далее вас перекинет в системные папки WinSxS, System32 или SysWOW64. Если вас перекинуло в другое место, то скорее всего это вирус. Вы также можете открыть свойства файла и посмотреть его описание.
Как исправить ошибки c rundll32
Если хост-процесс Windows (Rundll32) грузит систему или появляются различные ошибки, то можно попробовать восстановить системные файлы и установить Visual C ++, так как это все же связано с библиотеками DLL.
1. Проверка системных файлов
Запустите командную строку от имени администратора и введите ниже две команды по очереди:
2. Установите Visual C ++
Если ошибка связана с runtime при запуске программ или игр, то скорее всего не установлен нужный Visual C ++, или может быть, он поврежден. Для начало, удалите старый Visual C ++ 2015, 2017 и 2019, если он установлен. Перейдите в «Параметры» > «Приложения» > «Приложение и возможности».
- Перейдите на сайт Mcirosoft и скачайте Visual Studio 2015, 2017 и 2019
- Вы должны скачать и установить две разрядности: X86 и x64.
- Перезагрузите систему.
Способы устранения ошибки RunDLL
Наверное, многие не раз сталкивались с ошибкой RunDll.exe, и у каждого заготовлен метод борьбы с ней. Что означает это сообщение, причины его появления и как устранить без потери информации и файлов?
Ошибка «RunDll не найден указанный модуль» при запуске системы — что это
RunDll.exe — утилита Windows, которая необходима для запуска программного кода в DLL-файлах.
Ошибка «RunDll не найден указанный модуль» чаще всего появляется при включении компьютера, запуске программ или использовании некоторых операций, таких как, например, печать файла.
Причин появления ошибки RunDll может быть несколько
Причины
- Вредоносные программы и вирусы (черви, трояны, adware, spyware), которые изменяют и удаляют нужные файлы DLL.
- Повреждённые ключи реестра Windows, которые могут быть связаны с RunDll.exe.
- Неправильная установка или удаление программ и приложений.
Ниже приведён список наиболее распространённых сообщений об ошибках RunDll.exe.
- Ошибка приложения rundll.exe.
- Rundll.exe не является приложением Win32.
- Возникла ошибка в приложении rundll.exe. Приложение будет закрыто. Приносим извинения за неудобства.
- Файл rundll.exe не найден.
- Ошибка запуска программы: rundll.exe.
- Файл Rundll.exe не запущен.
- Отказ Rundll.exe.
- Неверный путь к приложению: rundll.exe.
Подобные сообщения об ошибках .*exe могут возникнуть при установке программы, связанной с RunDll.exe (например, SharePoint Portal Server), при старте, завершении работы, а также при установке операционной системы Windows.
Как исправить на компьютере или ноутбуке
Итак, существует несколько способов устранения этой проблемы. Ниже изложены подробные инструкции.
Переустановка операционной системы
Первый вариант убрать ошибку — полная переустановка операционной системы, — но он не совсем приемлем, поскольку установка и настройка ОС и всех необходимых программ займёт массу времени, к тому же не все пользователи умеют делать это правильно.
Проверка системных файлов
Утилита sfc/scannow предназначена для проверки целостности системных файлов и их восстановления. Для её запуска в командной строке нужно ввести sfc/scannow от имени администратора. Команда выполнит сканирование и заменит повреждённые файлы их кэшированной копией.
Процедуру рекомендуется выполнять в безопасном режиме до запуска драйверов и процессов. Не закрывайте окно, пока не завершится проверка и восстановление.
Один из способов решить проблемы — проверить системные файлы на ошибки
Видео: как выполнить сканирование и восстановление файлов Windows
Утилита «Autoruns»
- Для начала потребуется с официального сайта Microsoft скачать утилиту Autoruns (разработчик Sysinternals).
Важно! Прежде чем приступать к дальнейшей инструкции, создайте точку восстановления системы, иными словами сделайте бэкап, дабы при неудачной попытке не потерять важные файлы и информацию.
Чтобы приступить к работе, нужно запустить файл autoruns
Выбрать вкладку Everything, найти в ней записи, выделенные жёлтым цветом, и удалить их.
Во вкладке Everything нужно найти файлы, выделенные жёлтым цветом
Устранение ошибки с помощью планировщика задач
Эта инструкция позволит вам решить проблему без установки дополнительных программ и утилит.
- Запустить планировщик задач одним из способов:
- в командной строке набрать «Taskschd.msc»;
- зайти в «Панель управления», затем открыть «Система и её обслуживание» — «Администрирование» — «Планировщик заданий».
Для начала нужно запустить «Планировщик задач»
Нажать на кнопку в левой колонке «Библиотека планировщика задач». В блоке «Действия» справа выбрать «Отобрать все выполняемые задачи».
Нажать на пункт «Отобрать все выполняемые задачи»
Появится окно с задачами.
В планировщике появится окно с выполняемыми на данный момент задачами
В окне со списком задач найти те, которые вызывают ошибку. В колонке «Текущее действие» отображается путь к файлу.
Здесь можно увидеть, в какой директории находится файл
Открыть список активных задач
Появится окно, содержащее информацию о задаче. В верхней части двойным щелчком открыть свойства задачи.
В верхней части окна содержится информации о состоянии задачи
Перейти на вкладку «Действия». Нажать левой кнопкой мыши два раза по задаче.
Во вкладке «Действия» нажать на выделенную задачу
В появившемся окне «Изменение действия» очистить поле «Добавить аргументы (необязательно)». Нажать кнопку «ОК», чтобы сохранить изменения. В окне свойств тоже нажать «ОК».
Очистить поле «Добавить аргументы (необязательно)»
Видео: как быстро устранить ошибку RunDll
Итак, мы предложили несколько способов борьбы с ошибкой RunDll. Но чтобы подобных проблем не возникало, стоит соблюдать простые рекомендации:
- установите антивирус, чтобы обеспечить защиту своего компьютера;
- регулярно сканируйте диски на наличие вирусов и вредоносных файлов;
- проводите проверку реестра, чтобы избежать хранения устаревших или повреждённых записей.