Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вырубить комп!

367
27 декабря 2006 года
Meatcoins
303 / / 18.01.2006
.386
.model flat, stdcall
option casemap :none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.data
.data?
.code
_start:
push 0
;push EWX_FORCE
push EWX_LOGOFF
;push EWX_POWEROFF
;push EWX_REBOOT
;push EWX_SHUTDOWN
call ExitWindowsEx
push 0
call ExitProcess
end _start

Почему-то работает только EWX_LOGOFF и EWX_FORCE (завершаем работу текущего пользователя)!!!
А вырубить комп EWX_POWEROFF и перезагрузиться EWX_SHUTDOWN почему-то не получается!!!! Почему???
По идее всё просто...
261
27 декабря 2006 года
ahilles
1.5K / / 03.11.2005
надо сначала включить привилегию для процесса что бы он мог выключать комп а так не сработает.......
6.8K
28 декабря 2006 года
Coffein
46 / / 07.03.2005
Как то я тоже писал такую прогу. Вот посмотри исходник:
Код:
.386
.model  flat, stdcall
option  casemap:none
include    \myasm\include\windows.inc
include    \myasm\include\kernel32.inc
includelib \myasm\lib\kernel32.lib
include    \myasm\include\user32.inc
includelib \myasm\lib\user32.lib
include    \myasm\include\advapi32.inc
includelib \myasm\lib\advapi32.lib

FShutdownSystem proto
GetVersionEx    proto :DWORD
ShutdownSystem  proto
GetRights       proto
.data
    tkp        TOKEN_PRIVILEGES<>
    sys        OSVERSIONINFO<>    
    SeShut     DB "SeShutdownPrivilege"
.code
start:
invoke FShutdownSystem
invoke ExitProcess,0
FShutdownSystem proc
    mov sys.dwOSVersionInfoSize,sizeof OSVERSIONINFO
    invoke GetVersionEx,offset sys
    .if sys.dwPlatformId==2
        INVOKE GetRights
        invoke ExitWindowsEx,EWX_SHUTDOWN or EWX_FORCE or EWX_POWEROFF,0
    .else
        invoke ExitWindowsEx,EWX_SHUTDOWN or EWX_FORCE or EWX_POWEROFF,0
    .ENDIF

    mov eax,FALSE
    ret
FShutdownSystem Endp

ShutdownSystem proc
    mov sys.dwOSVersionInfoSize,sizeof OSVERSIONINFO
    invoke GetVersionEx,offset sys
    .if sys.dwPlatformId==2
        INVOKE GetRights
        invoke ExitWindowsEx,EWX_SHUTDOWN or EWX_POWEROFF,0
    .else
        invoke ExitWindowsEx,EWX_SHUTDOWN or EWX_POWEROFF,0
    .ENDIF

    mov eax,FALSE
    ret
ShutdownSystem Endp
GetRights proc
    LOCAL pro:DWORD
    LOCAL hto:DWORD
    push ecx
    invoke GetCurrentProcess
    mov ecx,eax
    invoke OpenProcessToken,ecx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr hto
    mov ecx,eax
    jecxz erro
    invoke LookupPrivilegeValue,0,offset SeShut,offset tkp.Privileges[0].Luid
    mov ecx,eax
    jecxz erro
    mov tkp.PrivilegeCount,1
    mov tkp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
    invoke AdjustTokenPrivileges,hto,0,addr tkp,0,0,0
    mov ecx,eax
    jecxz erro
    pop ecx
    xor eax,eax
    inc eax
    ret
erro:    
    xor eax,eax
    ret
GetRights Endp
end start
367
28 декабря 2006 года
Meatcoins
303 / / 18.01.2006
Всё работает!
Но вот только я не понял:
А зачем мы используем диррективы условного ассемблирования (.if .else и .endif)???
(.if sys.dwPlatformId==2)
Ведь они как бы только на этапе компилирования работают...
261
28 декабря 2006 года
ahilles
1.5K / / 03.11.2005
Цитата: Meatcoins

А зачем мы используем диррективы условного ассемблирования (.if .else и .endif)???
(.if sys.dwPlatformId==2)
Ведь они как бы только на этапе компилирования работают...



что то ты попутал.....

они во время выполнения программы работают!

6.8K
28 декабря 2006 года
Coffein
46 / / 07.03.2005
Правильно ahilles говоришь. Это упрощенные директивы для простой реализации ветвления и эта загагулина используется при проверки в какой ОС прога была запущена. Т.к. для NT и выше необходимо выполнить процедуру получения приоритета GetRights, потому что SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_HIGHEST) и SetPriorityClass(GetCurrentProcess, HIGH_PRIORITY_CLASS) не катят.
261
29 декабря 2006 года
ahilles
1.5K / / 03.11.2005
Цитата: Coffein
Т.к. для NT и выше необходимо выполнить процедуру получения приоритета GetRights, потому что SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_HIGHEST) и SetPriorityClass(GetCurrentProcess, HIGH_PRIORITY_CLASS) не катят.


я знаю что я правильно говорю, но я тоговорю про диррективы .if .else и т.д. а ты про функции

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог