InitiateSystemShutdown в MASM32

Тема в разделе "WASM.WIN32", создана пользователем Flanker, 9 фев 2006.

  1. Flanker

    Flanker Антон

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    101
    Адрес:
    Russia
    HELP.

    Помогите! Апишная функция не фурычит. InitiateSystemShutdown. Может из-за оси, адреса функции в динамической либе другие? WinXP SP 2/5.1.2600.2180.

    [​IMG] 1055695713__SD.ASM
     
  2. Flanker

    Flanker Антон

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    101
    Адрес:
    Russia
    Еще. компилируется, запускается нормально. А так, свою функцию не выполняет.
     
  3. Flanker

    Flanker Антон

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    101
    Адрес:
    Russia
    ExitWindowsEx так же не фурычит!
     
  4. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    MASM32 здесь совершенно не причем... Проблема, скорее всего, заключается в том, что процесс вызывающий эти функции не имеет соответствующих привилегий. На сайте www.rsdn.ru есть хорошая статья по этой теме (т.е. о привилегиях, и работе с ними). Для изменения привилегий процесса нужно использовать API-функцию: AdjustTokenPrivileges. В данном случае, процессу необходимо дать привилегию: SE_SHUTDOWN_NAME. Вот ее описание, взятое из упомянутой статьи (статья, кстати, называется: "Что такое привилегии?", автор: Алексей Ширшов):



    SE_SHUTDOWN_NAME

    Последняя из рассматриваемых привилегий наиболее популярна на различных форумах. Она необходима для выключения компьютера и обычно используется с функцией ExitWindows[Ex]. Суть привилегии состоит в том, чтобы не давать пользователю выключать компьютер, на котором функционируют (в виде системных служб) важные серверные компоненты. При простом завершении сеанса пользователя (флаг EWX_LOGOFF) привилегия не проверяется.
     
  5. Flanker

    Flanker Антон

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    101
    Адрес:
    Russia
    Спасибо сейчас Oleg_SK. Попробую.
     
  6. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Flanker

    Почитай в win32.hlp страничку Shutdowning system или нечто подобное. Там пример есть работающий, если с С порядок.
     
  7. Flanker

    Flanker Антон

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    101
    Адрес:
    Russia
    Я в MSDN'E в разделе Win32 API читал "Shutdowning system".
     
  8. Flanker

    Flanker Антон

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    101
    Адрес:
    Russia
    Щас попробую перенести пример на асм.
     
  9. Flanker

    Flanker Антон

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    101
    Адрес:
    Russia
  10. Flanker

    Flanker Антон

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    101
    Адрес:
    Russia
    Извините за непонятливость, я новичок в этом деле

    =================================================

    systime.ASM(20) : error A2084: constant value too large

    systime.ASM(20) : error A2114: INVOKE argument type mismatch : argument : 2

    =================================================

    .386

    .model flat, stdcall

    option casemap:none

    include include\windows.inc

    include include\Advapi32.inc

    include include\kernel32.inc

    include include\user32.inc

    includelib lib\user32.lib

    includelib lib\kernel32.lib

    includelib lib\Advapi32.lib



    .data?

    tkp TOKEN_PRIVILEGES <>

    hToken HANDLE ?



    .code

    start:

    invoke GetCurrentProcess

    invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken

    invoke LookupPrivilegeValue, NULL, SE_SHUTDOWN_NAME, addr tkp.Privileges[0].Luid

    mov tkp.PrivilegeCount, 1

    mov tkp.Privileges[0].Attributes, SE_PRIVILEGE_ENABLED

    invoke AdjustTokenPrivileges, hToken, FALSE, addr tkp, 0, NULL, 0

    invoke InitiateSystemShutdown, NULL, 0, 0, FALSE, TRUE

    mov tkp.Privileges[0].Attributes, 0

    invoke AdjustTokenPrivileges, hToken, FALSE, addr tkp, 0, NULL, 0



    invoke ExitProcess,NULL

    end start



    Похоже проблема в

    invoke LookupPrivilegeValue, NULL, SE_SHUTDOWN_NAME, addr tkp.Privileges[0].Luid

    Вроде SE_SHUTDOWN_NAME в windows.inc определен, а и аргументов 3?

    пробовал "SeShutdownPrivilege", не помогает.
     
  11. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Код (Text):
    1.        invoke RtlAdjustPrivilege,19,1,0,esp
    2.        invoke ZwShutdownSystem,1
     
  12. Flanker

    Flanker Антон

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    101
    Адрес:
    Russia
    Поподробнее, если можно.
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    to Flanker

    а самому определить не судьба ?
    Код (Text):
    1.  
    2. SE_SHUTDOWN_NAME db "SeShutdownPrivilege",0
    3. ...
    4. invoke LookupPrivilegeValue,NULL,offset SE_SHUTDOWN_NAME,offset tkp.Privileges[0].Luid
    5.  
     
  14. Flanker

    Flanker Антон

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    101
    Адрес:
    Russia
    Чуваки! работает! Спасибо за советы. Только вот не пойму, почему с SE_SHUTDOWN_NAME, приходится создавать переменные, в windows.inc SE_SHUTDOWN_NAME~SeShutdownPrivilege



    .386

    .model flat, stdcall

    option casemap:none

    include e:\Programming-Debugging\Compilers\masm32\include\windows.inc

    include e:\Programming-Debugging\Compilers\masm32\include\Advapi32.inc

    include e:\Programming-Debugging\Compilers\masm32\include\kernel32.inc

    include e:\Programming-Debugging\Compilers\masm32\include\user32.inc

    includelib e:\Programming-Debugging\Compilers\masm32\lib\user32.lib

    includelib e:\Programming-Debugging\Compilers\masm32\lib\kernel32.lib

    includelib e:\Programming-Debugging\Compilers\masm32\lib\Advapi32.lib



    .data



    string db "SeShutdownPrivilege",0



    .data?

    tkp TOKEN_PRIVILEGES <>

    hToken HANDLE ?

    hProc HANDLE ?



    .code

    start:

    invoke GetCurrentProcess

    mov hProc, eax

    invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken

    invoke LookupPrivilegeValue, NULL, addr string, addr tkp.Privileges[0].Luid

    mov tkp.PrivilegeCount, 1

    mov tkp.Privileges[0].Attributes, SE_PRIVILEGE_ENABLED

    invoke AdjustTokenPrivileges, hToken, FALSE, addr tkp, 0, NULL, 0

    invoke ExitWindowsEx, EWX_SHUTDOWN or EWX_FORCE, 0

    invoke ExitProcess,NULL

    end start