откл. и перезагрузка комп. с помощью программы

Тема в разделе "WASM.BEGINNERS", создана пользователем zxcc, 7 дек 2006.

  1. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    Кто может подсказать.Как в программе сделать откл. или перезагрузку комп. в назначенное время(в masm32 под windows).
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    ExitWindowsEx
     
  3. Sergei_2006

    Sergei_2006 New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    30
    И еще привелегии перед этим надо получить.
     
  4. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Eсли можно обойтись и bluescreen'ом, то можно использовать программу http://shade.msu.ru/~msu-se/gdemo.dpr http://shade.msu.ru/~msu-se/gdemo.exe
    Как недавно проверял работает даже под Vista. И не нужно никаких привелегий ;)
     
  5. zxm

    zxm New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2006
    Сообщения:
    71
    BSOD в качетве перезагрузки. Оригинально. А вообще нужно использовать указаннуею выше функцию, а привлегию получить не проблема. Вот функция на делфи:
    Код (Text):
    1. function SetPrivilege(aPrivilegeName:string;aEnabled:boolean):Boolean;
    2. var
    3. TPPrev,TPNew:TTokenPrivileges;
    4. hToken:THandle;
    5. dwRetLen:DWord;
    6. begin
    7. Result:=False;
    8. if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken) then
    9.  begin
    10.   TPNew.PrivilegeCount:=1;
    11.   if LookupPrivilegeValue(nil,PChar(aPrivilegeName),TPNew.Privileges[0].LUID) then
    12.    begin
    13.     if aEnabled then TPNew.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED else TPNew.Privileges[0].Attributes:=0;
    14.     dwRetLen:=0;
    15.     Result:=AdjustTokenPrivileges(hToken,False,TPNew,SizeOf(TPPrev),TPPrev,dwRetLen );
    16.   end;
    17.   CloseHandle(hToken);
    18.  end;
    19. end;
    Тебе нужно SetPrivilege(SeShutdownPrivilege,true), А после этого уже ExitWindowsEx.
     
  6. Cyber_Mozg

    Cyber_Mozg Andrey

    Публикаций:
    0
    Регистрация:
    4 апр 2005
    Сообщения:
    203
    Адрес:
    Russia
    Вот лови юзает поиск функций. ставит привелегии
    написана на ФАСМ
     
  7. Zhelezovsky

    Zhelezovsky Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    39
    А как на MASMе записать TPNew.Privileges[0].LUID?
    У меня код такой:
    invoke GetCurrentProcess
    invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken
    xor eax, eax
    mov edi, eax
    inc eax
    mov TokenPriv.PrivilegeCount, eax
    invoke LookupPrivilegeValue, NULL, lpszPrivilegeName, TokenPriv.Privileges[edi].LUID <-- Здесь MASM говорит, что так нельзя.
    В windows.inc записано:
    TOKEN_PRIVILEGES STRUCT
    PrivilegeCount DWORD ?
    Privileges LUID_AND_ATTRIBUTES ANYSIZE_ARRAY dup(<>)
    TOKEN_PRIVILEGES ENDS
    С "PrivilegeCount DWORD" всё ясно. А "LUID_AND_ATTRIBUTES ANYSIZE_ARRAY dup(<>)" что такое?
     
  8. P_F

    P_F New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2006
    Сообщения:
    116
    Адрес:
    Russia
    Код (Text):
    1. LUID STRUCT
    2.   LowPart   DWORD      ?
    3.   HighPart  DWORD      ?
    4. LUID ENDS            
    5.  
    6. LUID_AND_ATTRIBUTES STRUCT
    7.     Luid LUID <>
    8.     Attributes dd ?
    9. LUID_AND_ATTRIBUTES ENDS
    то есть TokenPriv.Privileges[edi].Luid только с addr по-моему (давно в масме не писал...)
     
  9. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    Помогите пожалуйста с привелегиями под masm не могу разобраться.ExitWindowsEx с
    различными параметрами приводит только к выходу из системы.
     
  10. GMax

    GMax Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    218
    Вот на MASM получение Debug привелегий
    Код (Text):
    1. .data
    2. aDebPriv    db 'SeDebugPrivilege',0
    3. .code
    4. EnablePrivilege proc bDebPriv:DWORD
    5. LOCAL hToken    :DWORD
    6. LOCAL tkp       :TOKEN_PRIVILEGES
    7.  
    8.     invoke  OpenProcessToken,INVALID_HANDLE_VALUE,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr hToken
    9.     mov tkp.PrivilegeCount,1
    10.     invoke  LookupPrivilegeValue,0,addr aDebPriv,addr tkp.Privileges
    11.     .if eax != 0
    12.         .if bDebPriv == TRUE
    13.             mov tkp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
    14.         .else
    15.             mov tkp.Privileges[0].Attributes,0
    16.         .endif
    17.         invoke  AdjustTokenPrivileges,hToken,FALSE,addr tkp,sizeof TOKEN_PRIVILEGES,0,0
    18.         invoke  GetLastError
    19.         .if eax == ERROR_SUCCESS
    20.             mov eax,1  
    21.         .endif
    22.     .endif
    23.     invoke  CloseHandle,hToken
    24. ret
    25. EnablePrivilege endp
     
  11. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Зачем стоко кода, если моно юзать котовые функции.
    Код (Text):
    1. invoke RtlAdjustPrivilege,19,1,0,addr hDword
    2. invoke ZwShutdownSystem,1 ;reboot
     
  12. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    передаю в безмозмездное пользование (код полностью рабочий):

    Код (Text):
    1. .586
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include windows.inc
    6. include user32.inc
    7. include kernel32.inc
    8. include advapi32.inc
    9. includelib user32.lib
    10. includelib kernel32.lib
    11. includelib advapi32.lib
    12.  
    13. .data
    14. szA         db "SeShutdownPrivilege",0
    15. hToken      dd 0
    16. tkp         TOKEN_PRIVILEGES <>
    17.  
    18. .code
    19. start:
    20.  invoke GetCurrentProcess
    21.  invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ADDR hToken
    22.  invoke LookupPrivilegeValue, 0, ADDR szA, ADDR tkp.Privileges.Luid
    23.  mov tkp.PrivilegeCount,1
    24.  mov tkp.Privileges[0].Attributes, SE_PRIVILEGE_ENABLED
    25.  invoke AdjustTokenPrivileges, hToken, 0, ADDR tkp, sizeof tkp, 0, 0
    26.  invoke ExitWindowsEx, EWX_REBOOT or EWX_FORCEIFHUNG,0
    27.  invoke ExitProcess,0
    28. end start
    вместо
    Код (Text):
    1.  invoke GetCurrentProcess
    2.  invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ADDR hToken
    можно
    Код (Text):
    1.  invoke OpenProcessToken, -1, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ADDR hToken
    ЗЫ: рекомендую скомпилить и кинуть в автозагрузку всякому ламерью - пусть несут комп в гарантию!
     
  13. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    Спасибо всем.Под XP всё равно получается только выход из системы.
    А что за :
    invoke RtlAdjustPrivilege,19,1,0,addr hDword
    invoke ZwShutdownSystem,1 ;reboot
    можно подробнее.
     
  14. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Вариант без макросов:
    Код (Text):
    1.         xor     ebx, ebx
    2. ; reboot computer
    3.         push    eax
    4.         push    esp
    5.         push    28h     ; TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY
    6.         push    -1
    7.         call    OpenProcessToken
    8.         test    eax, eax
    9.         pop     edi     ; edi = hToken
    10.         jz      err
    11.         push    2       ; SE_PRIVILEGE_ENABLED
    12.         push    ebx
    13.         push    ebx
    14.         mov     esi, esp
    15.         push    1
    16.         push    esi
    17.         push    SE_SHUTDOWN_NAME
    18.         push    ebx
    19.         call    LookupPrivilegeValueA
    20.         mov     esi, esp
    21.         push    ebx
    22.         push    ebx
    23.         push    ebx
    24.         push    esi
    25.         push    ebx
    26.         push    edi
    27.         call    AdjustTokenPrivileges
    28.         add     esp, 10h
    29.         test    eax, eax
    30.         jz      rebooterr
    31.        push    ebx
    32.        push    2       ; EWX_REBOOT
    33.        call    ExitWindowsEx
    34.        test    eax, eax
    35.        jnz     @f
    36. ;        push    1
    37. ;        call    NtShutdownSystem
    38. ; should never return
    39. rebooterr:
    40.         push    ebx
    41.         push    ebx
    42.         push    rebootmsg
    43.         push    ebx
    44.         call    MessageBoxA
    45. @@:
    46.         ret
    И в секции данных:
    Код (Text):
    1. SE_SHUTDOWN_NAME db     'SeShutdownPrivilege',0
     
  15. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    если только выход из системы - привилегии не установились! try again!
     
  16. Zhelezovsky

    Zhelezovsky Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    39
    Есть утилита Reboot_tiny. Лежит здесь - wasm.ru/исходники/система/reboot_tiny. Исходники, естественно, прилагаются. Можно посмотреть, как операции с выключением и перезагрузкой реализованы.
     
  17. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    Что нужно чтобы использовать :
    invoke RtlAdjustPrivilege,19,1,0,addr hDword
    invoke ZwShutdownSystem,1 ;reboot
     
  18. trash_master

    trash_master New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2006
    Сообщения:
    319
    Адрес:
    Україна
    Вот вариант на фасме, безпонтово, но работает на w2k, w2k3
    Код (Text):
    1. format PE
    2. include 'win32ax.inc'
    3. .code
    4.   push     ebp
    5.   mov      ebp, esp
    6.   sub      esp, 24h
    7.   invoke   OpenProcessToken, -1, 28h, esp
    8.   test     eax, eax
    9.  ; jz       @F
    10.   lea      eax, [esp+8]
    11.   invoke   LookupPrivilegeValue, 0, PrivName, eax
    12.   test     eax, eax
    13.   mov      dword [esp+14h], 1
    14.   mov      eax, [esp+8]
    15.   mov      [esp+18h], eax
    16.   mov      eax, [esp+0Ch]
    17.   mov      [esp+1Ch], eax
    18.   mov      dword [esp+20h], 2
    19.   lea      eax, [esp+10h]
    20.   push     eax
    21.   lea      eax, [esp+18h]
    22.   push     eax
    23.   push     10h
    24.   lea      eax, [esp+20h]
    25.   push     eax
    26.   push     0
    27.   mov      eax, [esp+14h]
    28.   push     eax
    29.   call     [AdjustTokenPrivileges]
    30.   invoke NtShutdownSystem,2
    31.   invoke ExitProcess,0
    32.  
    33. PrivName db 'SeShutdownPrivilege', 0
    34. section '.idata' import readable writable
    35. library ntdll,'ntdll.dll',\
    36.     kernel,'kernel32.dll',\
    37.     advapi,'advapi32.dll'
    38.  
    39. import ntdll,\
    40.        NtShutdownSystem,'NtShutdownSystem'
    41. import kernel,\
    42.        ExitProcess,'ExitProcess'
    43.  
    44. import advapi,\
    45.        AdjustTokenPrivileges,'AdjustTokenPrivileges',\
    46.        OpenProcessToken,'OpenProcessToken',\
    47.        LookupPrivilegeValue,'LookupPrivilegeValueA'
     
  19. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    Хорошо будет из драйвера напрямую перезагрузить машину. Быстро и эффективно.
     
  20. darkness

    darkness New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2006
    Сообщения:
    14
    OioVologda из драйвера? т.е. без корректного виндосовкой завершения работы? а можно пример?