· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.HEAP —› Синтаксис RunDll32

Посл.отвђт Сообщенiе


Дата: Июн 27, 2004 14:47:07

Подскажите, пожалуйста, синтаксис rundll32.exe. Пытался добиться методом научного тыка:
rundll32 user32.dll,MessageBox 0,Text,Header,16
Результат - мсгбоскс с заголовком 0,Text,Header,16, кнопками ОК+Отмена, тремя кубиками вместь ожидаемого текста. Кто-нибудь знает, как вывести нормальный мсгбокс(то есть с текстом Text и Header в заголовке)?


Дата: Июн 27, 2004 16:41:51

Нельзя с помощью rundll32.exe передовать аргументы в функции WinAPI - передаётся командная строка.

MSDN:

Rundll command line
The command line for Rundll is as follows:
RUNDLL.EXE <dllname>,<entrypoint> <optional arguments>

How Rundll Works
Rundll performs the following steps:
It parses the command line.
It loads the specified DLL via LoadLibrary().
It obtains the address of the <entrypoint> function via GetProcAddress().
It calls the <entrypoint> function, passing the command line tail which is the <optional arguments>.
When the <entrypoint> function returns, Rundll.exe unloads the DLL and exits



Так что работают тока ф-ции, которым не надо аргументы:
rundll32 user32.dll,LockWorkStation


Дата: Июн 28, 2004 03:23:05

S_T_A_S_
С аргументами нормально работает. Я еще сто лет назад видел пример ярлыков, где через RunDLL делается LogOff/ReBoot/ShutDown машины, используя ExitWindowsEx с параметрами.


Дата: Июн 28, 2004 03:45:09

в MSDN есть пример - там разделитель параметров - пробел, но вариант rundll32 user32,MessageBox 0 Text Header 16 у меня не прошел =((


Дата: Июн 28, 2004 04:13:04

jekyll
Маленькая поправка: ты не забывай, что rundll не такая умная, как твой компилятор. Поэтому юзаем MessageBoxA.


Дата: Июн 28, 2004 04:20:07

Toxic
Да хоть MessageBoxExA - не работает.


Дата: Июн 28, 2004 10:47:28

Toxic
что rundll не такая умная
Неправда.
Например, rundll32.exe из w2ksp4 пытается найти целевую функцию в таком порядке W, А, и только потом без W и A.

jekyll
разделитель параметров - пробел
Зачем гадать. Декомпилировать и разобраться - 1-2 часа.
У меня (w2ksp4) получилось так. В целевую функцию передаются четыре параметра:
1) hWnd - дескриптор окна, его создает rundll32.exe;
2) hInstance - результат GetModuleHandleW(NULL), вызванный внутри rundll32.exe;
3) ptstrCmdLine – то, что осталось после разбора командной строки и вычленения из нее собственно <path>rundll32.exe, имени модуля содержащего целевую функцию и имени целевой функции;
4) nCmdShow - равное либо SW_SHOWDEFAULT либо STARTUPINFO.wShowWindow если установлен флаг STARTF_USESHOWWINDOW в STARTUPINFO.dwFlags полученной при помощи GetStartupInfoW внутри rundll32.exe.


Дата: Июн 28, 2004 14:33:12

[ Toxic : С аргументами нормально работает. Я еще сто лет назад видел пример ярлыков, где через RunDLL делается LogOff/ReBoot/ShutDown машины, используя ExitWindowsEx с параметрами. ]

MSDN:
(практически повторение слов q_q)

The Run DLL utility (Rundll32.exe) included in Windows enables you to call functions exported from a 32-bit DLL. These functions must have the following syntax:
void CALLBACK EntryPoint(
  HWND hwnd,        // handle to owner window
  HINSTANCE hinst,  // instance handle for the DLL
  LPTSTR lpCmdLine, // string the DLL will parse
  int nCmdShow      // show state
);


На всякий случай - вдруг кому интересны упомянутые примеры ^^ :

Завершение Windows 95/98:
rundll32 user32.dll,ExitWindows, 1, -1

Windows 98/Me:
rundll32 shell32.dll,SHExitWindowsEx 0x0
0x0 - выход из системы
0x1 - завершение системы
0x2 - перезагрузка

Пример для 2K/XP я привёл раньше.


Дата: Сен 3, 2004 09:08:54

а почему не работает такая конструкция: rundll32 user32,SystemParametersInfoA 32, 0, "c:\1.bmp", 3
?
Тоесть надо на рабочий стол положить картинку из файла.
Если это делать например в Delphi, все работает, а как из коммандной строки? Как указатель обозначается в коммандной строке?


Дата: Сен 3, 2004 09:29:31

vhl
На delphi это выглядит также как в командной строке?


Дата: Сен 3, 2004 14:09:39

Проблема в том что там один из аргументов строка. В нее засовывается весь хвост. А остальные аргументы видимо берутся со стека rundll - у меня сообщение содержит MZ.
Видимо попал адрес экзешника или dll.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.078