Недокументированные функции User32.dll Возможно, кто-то из вас знает, что User32.dll содержит несколько недокументированных функций (а может и плохо документированных, ;o) таких как: вызав MessagBox'a "Новые параметры всупят в силу только после перезагрузки компьютера. Произвести её сейчас?", вызов диалога "Run" (Выполнить) и др. Так вот сам вопрос. Как вызвать эти функции на ассемблере. Попытка сделать прототип - неудачна, так же как и конвертация user32.dll в user32.lib и подмена её вместо поставляемой с MASM - ничего не дала. Например это на Visual Basice это работает: Код (Text): Private Declare Function SHRestartSystem Lib "shell32" _ Alias "#59" (ByVal hOwner As Long, ByVal sPrompt As String, _ ByVal uFlags As Long) As Long Private Const Restart_Logoff=&H0 Private Const Restart_ShutDown=&H1 Private Const Restart_Reboot=&H2 Private Const Restart_Force=&H4 Private Sub Command1_Click() Prompt = "Моя программа" & VbCrLf А = SHRestartSystem (Me.hwnd, Prompt, Restart_Reboot) End Sub
Мда... Задает вопрос о user32.dll, а сам приводит пример с shell32.dll... Впечатляет. А так, касательно лично твоей SHRestartSystem. Функции с таким именем внутри shell32.dll нет. Она экспортируется по ординалу. Для вызова такой функции тебе нужно будет использовать LoadLibrary/GetProcAddress и макрос MAKEINTRESOURCE. Поищи в гугле.
Везде Shell32.dll Это я от того, что долго не спал... по Google бродил в поисках SHRestartSystem - везде примеры на VB.
_Sysman_ Код (Text): .386 .model flat, stdcall option casemap :none include kernel32.inc includelib kernel32.lib EWX_LOGOFF = 0 EWX_SHUTDOWN = 1 EWX_REBOOT = 2 EWX_FORCE = 4 EWX_POWEROFF = 8 .const wszPrompt dw ':', '-', ')', ' ', 13, 0 szShell32Dll db 'shell32.dll', 0 .code even _start: push offset szShell32Dll call LoadLibraryA test eax,eax jz short @@2 push eax push 59 push eax call GetProcAddress test eax,eax jz short @@1 push EWX_LOGOFF push offset wszPrompt push 0 call eax @@1: call FreeLibrary @@2: push 0 call ExitProcess end _start