Помогите с кодом пожалуйста?, не палучаеца выставить привелегии , программа не перезагружает Windows Код (Text): format PE GUI 4.0 entry Main include 'win32a.inc' SC_MANAGER_ALL_ACCESS = 000F003Fh EWX_REBOOT = 00000002h EWX_FORCE = 00000004h SE_PRIVILEGE_ENABLED = 00000002h TOKEN_QUERY = 00000008h TOKEN_ADJUST_PRIVILEGES = 00000020h section '.data' data readable writeable RegValueName db 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System',0 RegValueKey db 'EnableLUA',0 dwKey dd 00000000h hKey dd ? hToken dd ? SE_SHUTDOWN_NAME db 'SeShutdownPrivilege',0 struct LUID LowPart dd 0 HighPart dd 0 ends struct LUID_AND_ATTRIBUTES Luid LUID Attributes dd 0 ends struct TOKEN_PRIVILEGES PrivilegeCount dd 0 Privileges LUID_AND_ATTRIBUTES ends TokenPriv TOKEN_PRIVILEGES UnderUACMsg db 'Пожалуйста запустите программу от имени администратора.',0 UACDisabledMsg db 'Сохраните рабочие данные и закройте все программы, компьютер будет перезагружен!',0 Installation db 'Installation',0 section '.code' code readable executable proc Main invoke OpenSCManagerA,NULL,NULL,SC_MANAGER_ALL_ACCESS cmp eax,0 je .UAC invoke MessageBoxA,0,UACDisabledMsg,Installation,MB_OK+MB_ICONWARNING+MB_TOPMOST invoke GetCurrentProcess invoke OpenProcessToken,eax,TOKEN_QUERY + TOKEN_ADJUST_PRIVILEGES,hToken invoke LookupPrivilegeValueA,NULL,SE_SHUTDOWN_NAME,TokenPriv.Privileges.Luid mov dword [TokenPriv.Privileges.Attributes],SE_PRIVILEGE_ENABLED mov dword [TokenPriv.PrivilegeCount],1 invoke AdjustTokenPrivileges,[hToken],FALSE,TokenPriv,0,NULL,NULL invoke CloseHandle,[hToken] invoke RegOpenKeyExA,HKEY_LOCAL_MACHINE,RegValueName,0,KEY_WRITE,hKey invoke RegSetValueExA,[hKey],RegValueKey,0,REG_DWORD,dwKey,4 invoke RegCloseKey,[hKey] invoke ExitWindowsEx,EWX_REBOOT+EWX_FORCE,0 jmp exit .UAC: invoke MessageBoxA,0,UnderUACMsg,Installation,MB_ICONWARNING+MB_TOPMOST exit: invoke ExitProcess,0 endp section '.idata' import data readable library kernel,'KERNEL32.DLL',\ advapi,'ADVAPI32.DLL',\ user,'USER32.DLL' import advapi,\ RegOpenKeyExA,'RegOpenKeyExA',\ RegSetValueExA,'RegSetValueExA',\ RegCloseKey,'RegCloseKey',\ OpenProcessToken,'OpenProcessToken',\ AdjustTokenPrivileges,'AdjustTokenPrivileges',\ LookupPrivilegeValueA,'LookupPrivilegeValueA',\ OpenSCManagerA,'OpenSCManagerA' import kernel,\ ExitProcess,'ExitProcess',\ GetCurrentProcess,'GetCurrentProcess',\ CloseHandle,'CloseHandle',\ GetLastError,'GetLastError' import user,\ ExitWindowsEx,'ExitWindowsEx',\ wsprintfA,'wsprintfA',\ MessageBoxA,'MessageBoxA' section '.rsrc' resource data readable directory RT_ICON,icons,\ RT_GROUP_ICON,group_icons resource icons,\ 1,LANG_NEUTRAL,icon_data resource group_icons,\ 2,LANG_NEUTRAL,main_icon icon main_icon,icon_data,'install.ico'
Код (Text): invoke wsprintfA,ErrorCode,Fmt,0 замените уже на Код (Text): cinvoke wsprintfA,ErrorCode,Fmt,0
Спасибо огромное а что делает это макрос и чем они отличаются , invoke от cinvoka , ни когда не работал с ним.
cinvoke это тот же самый invoke, но выполняет некоторые дополнительные действия, а именно - подчищает стек после вызова. Это необходимо после вызова функций, определённых как __cdecl. В WinAPI как __cdecl определены лишь функции, вызываемые с переменным числом аргументов, какой и является wsprintf. Загляните в отладчик.