У меня не перезагружается WinXPSP2. Причиной стало "PatchMix DSP Application" EmuPMixDSP.exe движёк-микшер от звука EMU0404... Этот процесс вообще невозможно убить, только выход через GUI "Exit" в микшере. А так же результатом стало конечно то, что я поудалял всякие службы прогой nLite. В итоге после выполнения консольного shutdown.exe -r -f -t 00 висит и tasmgr.exe уже не вызывается. Я долго искал среди служб, одно время даже показалось, что в этом Windows Firewall/Internet Connection Sharing (ICS) замешан, но скорее всего там ещё масса зависимостей друг от друга, как обычно... "Дефолтным" пуск > restart комп перезагружается само-собой, из Alt+Ctrl+Del с помощью таскмжр тоже! Я вот что подумал, а каким образом это taskmgr.exe делает в чём разница то вообще? (хотя есть подозрение, что не в одном вызове функции дело, вдруг там ещё какие-то обращения к файрволу итп. но а может и нет) Гляжу в msdn, поправте я там вообще ищу или это нето? http://msdn.microsoft.com/en-us/library/ms740481(VS.85,printer).aspx Код (Text): int shutdown( __in SOCKET s, __in int how ); Вообщем хочу написать shutdown.exe alternative - чтоб работал как taskmgr без фокусов. ?
таг, сразу конечно не хочет... (иногда жаль что windows не дос!) Код (Text): format PE GUI 5.0 entry start include 'C:\~\Apps\Fasm\Include\win32a.inc' section '.code' code readable executable start: invoke ExitWindowsEx,0x00000002,0x00000000 section '.idata' import data readable writeable library user32,'USER32.DLL' import user32,ExitWindowsEx,'ExitWindowsEx' Видимо надо в теорию token залезть %) "The calling process must have the SE_SHUTDOWN_NAME privilege." интересно многль там коду предстоит осилить!..
сейчас посмотрим! хотя... Кто-то то пишет переводы... Зачем Айсзелон нам нужен! masm2fasm Лучше б визуал студио показали как переделывать "напрямую" How to Shut Down the System Код (Text): BOOL MySystemShutdown() { HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get a token for this process. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return( FALSE ); // Get the LUID for the shutdown privilege. LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get the shutdown privilege for this process. AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); if (GetLastError() != ERROR_SUCCESS) return FALSE; // Shut down the system and force all applications to close. if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_UPGRADE | SHTDN_REASON_FLAG_PLANNED)) return FALSE; return TRUE; } Сам себе айсзелон: hToken dd ? tkp dd ? invoke if (!OpenProcessToken(GetCurrentProcess(), 0_O далее непонятно =) сорри за тупняк Серёзно, пораб наладить ms vc переводы в fasm тот же айсзелон, тока быстрее и естественей.
а вот так можно? Код (Text): import Advapi32.dll,OpenProcessToken,'OpenProcessToken',\ TOKEN_ADJUST_PRIVILEGES,'TOKEN_ADJUST_PRIVILEGES'
Semiono а разве есть такой экспорт у advapi32 ? o_0 вообщето это константа, коорая в фасмовских хидерах помоему была определена UPD: извиняюсь, не была. значит ищи в platform sdk includes z0mailbox навеяло просто мыслями о кернел отладчике который я решил щас сесть переписывать на команду reboot у меня реакция именно такая
А у IceZellon а нигде не написанно про шатдаун? :ъ Ато у мну крышу снесёт... от этих тукенсов и привелегизов иль какоинибуд сорс под масм любительский самопал..??
Код (Text): include 'win32ax.inc' struct LUID LowPart dd ? HighPart dd ? ends struct LUID_AND_ATTRIBUTES Luid LUID Attributes dd ? ends struct TOKEN_PRIVILEGES PrivilegeCount dd ? Privilege1 LUID_AND_ATTRIBUTES ends TOKEN_ADJUST_PRIVILEGES = 0x20 TOKEN_QUERY = 0x08 SE_PRIVILEGE_ENABLED = 0x02 EWX_SHUTDOWN = 0x01 EWX_FORCE = 0x04 SHTDN_REASON_MAJOR_OPERATINGSYSTEM = 0x00020000 SHTDN_REASON_MINOR_UPGRADE = 0x00000003 SHTDN_REASON_FLAG_PLANNED = 0x80000000 .data tkp TOKEN_PRIVILEGES hToken dd ? .code start: invoke GetCurrentProcess invoke OpenProcessToken, \ eax, \ TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, \ hToken or al, al jz .error1 invoke LookupPrivilegeValue, \ NULL, \ "SeShutdownPrivilege", \ tkp.Privilege1.Luid mov [tkp.PrivilegeCount], 1 mov [tkp.Privilege1.Attributes], SE_PRIVILEGE_ENABLED invoke AdjustTokenPrivileges, \ [hToken], \ FALSE, \ tkp, \ 0, \ NULL, \ 0 invoke GetLastError or eax, eax jnz .error2 invoke MessageBox, 0, "Really shut down?", "Shut down", MB_ICONQUESTION or MB_YESNO cmp eax, IDNO jz .cancel invoke ExitWindowsEx, \ EWX_SHUTDOWN or EWX_FORCE, \ SHTDN_REASON_MAJOR_OPERATINGSYSTEM or \ SHTDN_REASON_MINOR_UPGRADE or \ SHTDN_REASON_FLAG_PLANNED or al, al jz .error3 ret .cancel: pushd "Cancelled" mov eax, [esp] jmp .general_error .error1: pushd "OpenProcessToken failed" mov eax, [esp] jmp .general_error .error2: pushd "AdjustTokenPrivileges failed" mov eax, [esp] jmp .general_error .error3: pushd "ExitWindowsEx failed" mov eax, [esp] jmp .general_error .general_error: invoke MessageBox, 0, eax, "Cannot shut down", MB_ICONHAND invoke ExitProcess, 0 .end start на держи. я сегодня добрый
Не, не сегодня, ты вообще самый добрый!!!! Ух подарочег!!! Но тайну этого я ещё не могу постичь: WRITE_PORT_UCHAR (I8042_COMMAND_PORT, KBD_RESET) 0_ =) если хочешь посмеяться, я её как call WRITE_PORT_... вызвать пробывал ))) и даже в invoke запихнул =) ай а какой я добрый! у мну виндоус перезагрузиться наконец-то! Ну и ума наберусь из этого кода заодно! :beer:
http://img519.imageshack.us/img519/2299/snap1th7.png Немного прокоментирую. Код идеальный, кампилиться работает! Хотя мой процесс EmuPMixDSP.exe так он и не смог свалить. Видимо привелегий мало... надо почитать будет. Я вообще-то не хотел диалогов, мне нужен сразу ребут без вопросов и компромисов. Я поначалу закоментировал это Код (Text): ;invoke MessageBox, 0, "Really shut down?", "Shut down", MB_ICONQUESTION or MB_YESNO ; cmp eax, IDNO ; jz .cancel думал ошибка. Но оно и с диалогами повисает... Этож надо было такой EMU патчмикс напесать что убить невозможно! Однако диспечер задач его валит легко. 'Пуск' с этим вообще не морочиться. хм. Наверно процесс в нулевом кольце работает =)
Можно по делу спросить? тут вот оператор or внутри invoke стоит - это нормально? invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken Какой-то высший пилотаж, как будто на си написанно? ...это кстати важно и может пригодиться, чтоб разгребать потом эти пассажи с msdn ) а то что eax в качестве одного из [полей] стоит - это красиво! Но я б сам так тоже не додумался, хотя с eax тут всё понятно.
Semiono никакого пилотажа тут нет на С это TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY т.е. в этом поле установлен не один а два флага что соответствует их битовому объединению по or.