Недокументированные функции User32.dll

Тема в разделе "WASM.WIN32", создана пользователем _Sysman_, 11 авг 2004.

  1. _Sysman_

    _Sysman_ Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    50
    Адрес:
    Ukraine
    Недокументированные функции User32.dll



    Возможно, кто-то из вас знает, что User32.dll содержит несколько

    недокументированных функций (а может и плохо документированных, ;o)

    таких как: вызав MessagBox'a "Новые параметры всупят в силу только

    после перезагрузки компьютера. Произвести её сейчас?", вызов диалога

    "Run" (Выполнить) и др.



    Так вот сам вопрос. Как вызвать эти функции на ассемблере. Попытка сделать

    прототип - неудачна, так же как и конвертация user32.dll в user32.lib и

    подмена её вместо поставляемой с MASM - ничего не дала.



    Например это на Visual Basice это работает:


    Код (Text):
    1.  
    2. Private Declare Function SHRestartSystem Lib "shell32" _
    3. Alias "#59" (ByVal hOwner As Long, ByVal sPrompt As String, _
    4. ByVal uFlags As Long) As Long
    5. Private Const Restart_Logoff=&H0
    6. Private Const Restart_ShutDown=&H1
    7. Private Const Restart_Reboot=&H2
    8. Private Const Restart_Force=&H4
    9.  
    10. Private Sub Command1_Click()
    11.   Prompt = "Моя программа" & VbCrLf
    12.   А = SHRestartSystem (Me.hwnd, Prompt, Restart_Reboot)
    13. End Sub
     
  2. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Мда... Задает вопрос о user32.dll, а сам приводит пример с shell32.dll... Впечатляет.

    А так, касательно лично твоей SHRestartSystem. Функции с таким именем внутри shell32.dll нет. Она экспортируется по ординалу. Для вызова такой функции тебе нужно будет использовать LoadLibrary/GetProcAddress и макрос MAKEINTRESOURCE. Поищи в гугле.
     
  3. _Sysman_

    _Sysman_ Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    50
    Адрес:
    Ukraine
    Везде Shell32.dll

    Это я от того, что долго не спал...

    по Google бродил в поисках SHRestartSystem - везде примеры на VB.
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    _Sysman_
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none
    4.  
    5. include kernel32.inc
    6. includelib kernel32.lib
    7.  
    8. EWX_LOGOFF   = 0
    9. EWX_SHUTDOWN = 1
    10. EWX_REBOOT   = 2
    11. EWX_FORCE    = 4
    12. EWX_POWEROFF = 8
    13.  
    14. .const
    15.   wszPrompt    dw ':', '-', ')', ' ', 13, 0
    16.   szShell32Dll db 'shell32.dll', 0
    17.  
    18. .code
    19.   even
    20.   _start:
    21.     push offset szShell32Dll
    22.     call LoadLibraryA
    23.     test eax,eax
    24.     jz   short @@2
    25.  
    26.     push eax
    27.  
    28.     push 59
    29.     push eax
    30.     call GetProcAddress
    31.     test eax,eax
    32.     jz   short @@1
    33.  
    34.     push EWX_LOGOFF
    35.     push offset wszPrompt
    36.     push 0
    37.     call eax
    38. @@1:
    39.     call FreeLibrary
    40. @@2:
    41.     push 0
    42.     call ExitProcess
    43.  
    44. end _start