Почему функция невыполняется? .386 .model flat, stdcall option casemap:none includelib \masm32\lib\kernel32.lib includelib \masm32\lib\advapi32.lib includelib \masm32\lib\user32.lib include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\windows.inc .data .code start: invoke ExitWindowsEx,EWX_REBOOT,0 ret end start
Код (Text): EnablePrivilege proc local hToken : HANDLE local tkp : TOKEN_PRIVILEGES .data SERESTORENAME db "SeShutdownPrivilege",0 .code invoke GetCurrentProcess mov ecx,eax invoke OpenProcessToken, ecx, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken .if eax != 0 invoke LookupPrivilegeValue, 0, ADDR SERESTORENAME, addr tkp.Privileges.Luid .if eax != 0 mov tkp.PrivilegeCount,1 mov tkp.Privileges.Attributes,SE_PRIVILEGE_ENABLED invoke AdjustTokenPrivileges, hToken, 0, addr tkp, 0, 0, 0 .if eax != 0 invoke GetLastError .if eax == ERROR_SUCCESS mov eax,1 .else xor eax,eax .endif .endif .endif push eax invoke CloseHandle, hToken pop eax .endif ret EnablePrivilege endp
Вообще-то ExitWindowsEx никто не отменял. Сначала вызываешь процедуру получения привилегий, затем ExitWindowsEx Код (Text): ;...тут программа что-то делала ;... теперь надо перезагрузиться ;получаем привилегии call EnablePrivilege .if (eax!=0) ;если привилегии получены - перезагружаем invoke ExitWindowsEx,EWX_REBOOT,0 .endif
Усёравно некатит=)я знаю я надоедливвый.получается такая вещь ошибок нету а когда открывая *.exe он да выполяет все первые функции но не перезагрузку и ещё такой глюк засел в памяти и жрё её с лихой силой и тот *.exe который появился в windos не 32 разрядной программой стал виндовс так говарит=) _1584937205__ppc.asm
Было бы странно, если бы это работало. У тебя каша, а не код. Где завершение программы по ExitProcess? Потому и висит в памяти. Куда дел ret в EnablePrivileges? Проверяешь возвращаемое значение от CreateFile, а на результаты проверки не реагируешь. Зачем было тогда проверять? Разбей код на отдельные логически обособленные части, и вызывай поочередно эти части. Примерно как в аттаче. В общем, файл ppc создаёт, комп перегружает. К счастью ключ в реестре не создает, а то перегружал бы непрерывно. Почему не создает - разбирайся. Читай msdn на предмет ф-ций, работающих с реестром. 1607295153__vir.asm
А вообще, прав IceStudent - дело это дурное и никчёмное. Лучше напиши какую-нибудь полезную прогу. Пусть простенькую, но нормально оформленную. Напишешь несколько таких прог - и про вирусы вспоминать не будешь.
Вот только последний вопрос почему не запускается с виндой???я попробовал просто открыть его в WINDOWS он всёравно пишет типо это не win32 application в чём тут проблемма?
Не запускается, потому что ключ не создает в реестре. А то, что не win32 - смотри свои опции компилятора, что за файл компилируешь
У меня установлен MASM32 8.х я им пользуюсь через RAdAsm где находятся эти настройки которые отвечают за эту ошибку?а лазел лазел и ничего ненашол.