shutdown

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 11 дек 2008.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    У меня не перезагружается 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):
    1. int shutdown(
    2.   __in  SOCKET s,
    3.   __in  int how
    4. );
    Вообщем хочу написать shutdown.exe alternative - чтоб работал как taskmgr без фокусов.
    ?
     
  2. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    http://msdn.microsoft.com/en-us/library/aa376868(VS.85).aspx
    а вообще ида в помощь =)))
     
  3. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    аааа!!! сенкс! точно оно =) ExitWindowsEx
     
  4. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    таг, сразу конечно не хочет... (иногда жаль что windows не дос!)
    Код (Text):
    1. format PE GUI 5.0
    2. entry start
    3. include 'C:\~\Apps\Fasm\Include\win32a.inc'
    4. section '.code' code readable executable
    5. start:
    6.   invoke  ExitWindowsEx,0x00000002,0x00000000
    7.  
    8. section '.idata' import data readable writeable
    9.  library user32,'USER32.DLL'
    10.  import user32,ExitWindowsEx,'ExitWindowsEx'
    Видимо надо в теорию token залезть %)
    "The calling process must have the SE_SHUTDOWN_NAME privilege." интересно многль там коду предстоит осилить!..
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    NtShutdownSystem() :lol:

    ну или WRITE_PORT_UCHAR (I8042_COMMAND_PORT, KBD_RESET)
    :lol:
     
  6. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    сейчас посмотрим!

    хотя... Кто-то то пишет переводы... Зачем Айсзелон нам нужен! masm2fasm
    Лучше б визуал студио показали как переделывать "напрямую"
    How to Shut Down the System
    Код (Text):
    1. BOOL MySystemShutdown()
    2. {
    3.    HANDLE hToken;
    4.    TOKEN_PRIVILEGES tkp;
    5.  
    6.    // Get a token for this process.
    7.  
    8.    if (!OpenProcessToken(GetCurrentProcess(),
    9.         TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    10.       return( FALSE );
    11.  
    12.    // Get the LUID for the shutdown privilege.
    13.  
    14.    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
    15.         &tkp.Privileges[0].Luid);
    16.  
    17.    tkp.PrivilegeCount = 1;  // one privilege to set    
    18.    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    19.  
    20.    // Get the shutdown privilege for this process.
    21.  
    22.    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
    23.         (PTOKEN_PRIVILEGES)NULL, 0);
    24.  
    25.    if (GetLastError() != ERROR_SUCCESS)
    26.       return FALSE;
    27.  
    28.    // Shut down the system and force all applications to close.
    29.  
    30.    if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,
    31.                SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
    32.                SHTDN_REASON_MINOR_UPGRADE |
    33.                SHTDN_REASON_FLAG_PLANNED))
    34.       return FALSE;
    35.  
    36.    return TRUE;
    37. }
    Сам себе айсзелон:
    hToken dd ?
    tkp dd ?
    invoke if (!OpenProcessToken(GetCurrentProcess(), 0_O
    далее непонятно
    =)
    сорри за тупняк
    Серёзно, пораб наладить ms vc переводы в fasm тот же айсзелон, тока быстрее и естественей.
     
  7. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    в связи с упразднением кнопочки ресет народ массово овладевает кернел-моде программингом :)))
     
  8. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    а вот так можно?
    Код (Text):
    1.  import Advapi32.dll,OpenProcessToken,'OpenProcessToken',\
    2. TOKEN_ADJUST_PRIVILEGES,'TOKEN_ADJUST_PRIVILEGES'
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Semiono
    а разве есть такой экспорт у advapi32 ? o_0
    вообщето это константа, коорая в фасмовских хидерах помоему была определена

    UPD: извиняюсь, не была. значит ищи в platform sdk includes

    z0mailbox
    навеяло просто мыслями о кернел отладчике который я решил щас сесть переписывать :) на команду reboot у меня реакция именно такая
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    PS. насчет shutdown(SOCKET,..) отжиг классный )
     
  11. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    А у IceZellon а нигде не написанно про шатдаун? :ъ
    Ато у мну крышу снесёт... от этих тукенсов и привелегизов
    иль какоинибуд сорс под масм любительский самопал..??
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Код (Text):
    1. include 'win32ax.inc'
    2.  
    3. struct LUID
    4.         LowPart dd ?
    5.         HighPart dd ?
    6. ends
    7.  
    8. struct LUID_AND_ATTRIBUTES
    9.         Luid LUID
    10.         Attributes dd ?
    11. ends
    12.  
    13. struct TOKEN_PRIVILEGES
    14.         PrivilegeCount  dd ?
    15.         Privilege1 LUID_AND_ATTRIBUTES
    16. ends
    17.  
    18. TOKEN_ADJUST_PRIVILEGES            = 0x20
    19. TOKEN_QUERY                        = 0x08
    20.  
    21. SE_PRIVILEGE_ENABLED               = 0x02
    22.  
    23. EWX_SHUTDOWN                       = 0x01
    24. EWX_FORCE                          = 0x04
    25. SHTDN_REASON_MAJOR_OPERATINGSYSTEM = 0x00020000
    26. SHTDN_REASON_MINOR_UPGRADE         = 0x00000003
    27. SHTDN_REASON_FLAG_PLANNED          = 0x80000000
    28.  
    29.  
    30. .data
    31.  
    32. tkp TOKEN_PRIVILEGES
    33. hToken dd ?
    34.  
    35. .code
    36. start:
    37.         invoke GetCurrentProcess
    38.         invoke OpenProcessToken, \
    39.                eax, \
    40.                TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, \
    41.                hToken
    42.  
    43.         or al, al
    44.         jz .error1
    45.  
    46.         invoke LookupPrivilegeValue, \
    47.                NULL, \
    48.                "SeShutdownPrivilege", \
    49.                tkp.Privilege1.Luid
    50.  
    51.         mov [tkp.PrivilegeCount], 1
    52.         mov [tkp.Privilege1.Attributes], SE_PRIVILEGE_ENABLED
    53.  
    54.         invoke AdjustTokenPrivileges, \
    55.                [hToken], \
    56.                FALSE, \
    57.                tkp, \
    58.                0, \
    59.                NULL, \
    60.                0
    61.  
    62.         invoke GetLastError
    63.         or eax, eax
    64.         jnz .error2
    65.  
    66.         invoke MessageBox, 0, "Really shut down?", "Shut down", MB_ICONQUESTION or MB_YESNO
    67.         cmp eax, IDNO
    68.  
    69.         jz .cancel
    70.  
    71.         invoke ExitWindowsEx, \
    72.                EWX_SHUTDOWN or EWX_FORCE, \
    73.                SHTDN_REASON_MAJOR_OPERATINGSYSTEM or \
    74.                   SHTDN_REASON_MINOR_UPGRADE or \
    75.                   SHTDN_REASON_FLAG_PLANNED
    76.  
    77.         or al, al
    78.         jz .error3
    79.  
    80.         ret
    81.  
    82. .cancel:
    83.         pushd "Cancelled"
    84.         mov eax, [esp]
    85.         jmp .general_error
    86.  
    87. .error1:
    88.         pushd "OpenProcessToken failed"
    89.         mov eax, [esp]
    90.         jmp .general_error
    91.  
    92. .error2:
    93.         pushd "AdjustTokenPrivileges failed"
    94.         mov eax, [esp]
    95.         jmp .general_error
    96.  
    97. .error3:
    98.         pushd "ExitWindowsEx failed"
    99.         mov eax, [esp]
    100.         jmp .general_error
    101.  
    102. .general_error:
    103.         invoke MessageBox, 0, eax, "Cannot shut down", MB_ICONHAND
    104.         invoke ExitProcess, 0
    105.  
    106. .end start
    на держи. я сегодня добрый
     
  13. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Не, не сегодня, ты вообще самый добрый!!!! Ух подарочег!!!
    Но тайну этого я ещё не могу постичь:
    WRITE_PORT_UCHAR (I8042_COMMAND_PORT, KBD_RESET)
    0_ =)
    если хочешь посмеяться, я её как call WRITE_PORT_... вызвать пробывал ))) и даже в invoke запихнул =)

    ай а какой я добрый! у мну виндоус перезагрузиться наконец-то! Ну и ума наберусь из этого кода заодно!
    :beer:
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Это для использования в драйвере. ) Жесткий резет через 8042 контроллер напрямую
     
  15. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Это надо на баш )). Правда поймут немногие.
     
  16. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
  17. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    http://img519.imageshack.us/img519/2299/snap1th7.png
    Немного прокоментирую. Код идеальный, кампилиться работает!
    Хотя мой процесс EmuPMixDSP.exe так он и не смог свалить.
    Видимо привелегий мало... надо почитать будет.
    Я вообще-то не хотел диалогов, мне нужен сразу ребут без вопросов и компромисов.
    Я поначалу закоментировал это
    Код (Text):
    1.  ;invoke MessageBox, 0, "Really shut down?", "Shut down", MB_ICONQUESTION or MB_YESNO
    2. ; cmp eax, IDNO
    3. ; jz .cancel
    думал ошибка. Но оно и с диалогами повисает...
    Этож надо было такой EMU патчмикс напесать что убить невозможно!
    Однако диспечер задач его валит легко. 'Пуск' с этим вообще не морочиться. хм.
    Наверно процесс в нулевом кольце работает =)
     
  18. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Можно по делу спросить? тут вот оператор or внутри invoke стоит - это нормально?
    invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken
    Какой-то высший пилотаж, как будто на си написанно?

    ...это кстати важно и может пригодиться, чтоб разгребать потом эти пассажи с msdn )

    а то что eax в качестве одного из [полей] стоит - это красиво!
    Но я б сам так тоже не додумался, хотя с eax тут всё понятно.
     
  19. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Не волнуйся, это нормально. Это просто битовая операция, не логическая.
     
  20. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Semiono
    никакого пилотажа тут нет на С это TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY т.е. в этом поле установлен не один а два флага что соответствует их битовому объединению по or.