Войти

Показать полную графическую версию : Как перезагрузить НТ (win 2000) ???


ukms
20-09-2002, 15:20
воть:

практически всё переписывал из мсдн на сайте мелко-мягких

token_handle dd 0
mashine_process_handle dd 0
token_privileges dd 1 ;privilege count
luid dd 0 ;luid lo
dd 0 ;luid hi
attributez dd SE_PRIVILEGE_ENABLED
token db 'SeShutdownPrivilege',0
TOKEN_QUERY equ 8
TOKEN_ADJUST_PRIVILEGES equ 20h
SE_PRIVILEGE_ENABLED equ 2
EWX_REBOOT equ 2
EWX_SHUTDOWN equ 1
EWX_FORCE equ 4


start:

call GetCurrentProcess ; установка привилегий на ребут
mov mashine_process_handle,eax

push offset token_handle
push TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY
push mashine_process_handle
call OpenProcessToken

or eax,eax
mov token_flag,eax
jz short mashine_nt ; если не НТ то привилегии пофиг

push offset luid
push offset token ; собсно установка привилегий
push offset system
call LookupPrivilegeValueA

push 0
push 0
push 0
push offset token_privileges
push 0
push token_handle
call AdjustTokenPrivileges <--- вот тут ошибка ERROR_NOACCESS и следовательно ExitWindowsEx посылает к билу гейтсу

push 0FFFFh
push EWX_FORCE or EWX_REBOOT or EWX_SHUTDOWN
call ExitWindowsEx
or eax,eax
jz short mashine_no_reboot
push 0
call ExitProcess

пробовал на win 2000 на разных машинах
срабатывает только если запускать этот код через телнет

vasketsov
20-09-2002, 16:01
ukms
погляди у меня на сайте исходник для платформы Win32 (то есть, не Native). Заменить ZwShutdownSystem опционально на ExitWindowEx.

а че же не в машинных кодах?

ukms
20-09-2002, 16:29
погляди у меня на сайте исходник для платформы Win32 (то есть, не Native). Заменить ZwShutdownSystem опционально на ExitWindowEx.

ээээ ...   чего-то я не понял твой исходник :gigi:
дурак наверное....

а че же не в машинных кодах?

типа 3A E6 A1 00 ???

vasketsov
20-09-2002, 16:33
ukms
Rtl* - получает привилегии.
Zw* - грохает.
че-там не ясно-то?

ukms
20-09-2002, 17:08
Ц на таком уровне я не знаю :gigi:

да и функций таких у мелко-мягких я не видел ни на сайте ни в мсдн

как стандартным способом перезагрузить ? ведь моя последовательность должна работать (и работает из под телнета) !

Добавлено:

extern говоришь ?

а дизасм или исходник этого extern-a где мона найти ?
Rtl, Zw.... хм....

Добавлено:

мдя.... нашел...
конечно заманчиво эту dll использовать ;)

но интересно все-же, ПАЧУМУ НЕ РАБОТАЕТ !

vasketsov
24-09-2002, 10:39
ukms
почему у тебя твой код не работает - не знаю, как-то лень все эти пуши считать :gigi:
напиши на сях, глядишь, и разберемся.

ukms
25-09-2002, 10:34
вот ! за 5 мин написал и собака - работает ! как часы !
все дело в том что надо на асме ;(
так что вопрос остается открытым

#include <windows.h>
#include <stdio>
#include <stdlib>
#include <iostream>
#pragma  argsused

int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine,
int nCmdShow)
{

HANDLE hToken;
TOKEN_PRIVILEGES tkp;
DWORD ReturnLength;

OpenProcessToken ( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hToken);

 LookupPrivilegeValue(NULL, "SeShutdownPrivilege", &tkp.Privileges[0].Luid);

 tkp.PrivilegeCount=1;
 tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, &ReturnLength);
ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0);
}

vasketsov
25-09-2002, 11:12
все дело в том что надо на асме ;(
так что вопрос остается открытым
дизассемблируй и найди 10 отличий
:gigi:

ukms
25-09-2002, 15:10
Понимаю, что это изврат, но что делать ?
Придется заняться :gigi:

ida ком цу мир ! :biggrin: :biggrin:

ukms
25-09-2002, 17:54
короче плюнул и сделал как у тебя :biggrin:
ничо шо я дизасемблер твоей проги поковырял ? :gigi: :gigi:
класно ребутит и главное - быстро ! вот только приходится отдельно dll грузить - хочу чобы и на 98 работала :down:

вот

а с примером мелкомягких я разберусь, блин достало хоть из ида готовый копируй :down: :down: :down:

Добавлено:

пример мелкомягких :down:


Короче как я не бился, работать он отказывается :(
я переписал дизасемблированный код из ida в свою программку
и о боже - она заработала :o :o :o

Ничо не понимаю !

Скомпилированный бц код делает все то же что и я, получает все тоже что и я (те же значения). Отличие лишь в том что его код (ВС) создает временные структуры на стеке. Это TOKEN_PRIVILEGES , LUID_AND_ATTRIBUTES и иже с ними. я же делаю и заполняю эту структуры в отдельной области памяти.

Dru
09-10-2002, 10:02
а в спящий режим слабо? :))))))

vasketsov
09-10-2002, 13:17
Dru
Если мне, то не слабо, только мне это не надо, я им не пользуюсь.




© OSzone.net 2001-2012