| Автор
| Сообщение |
|
|
|
Цитата |
|
Господа! Как программно перегрузить-выключить комп. Знаю что есть какаято функция, но не могу ее найти. |
|
| В начало |
|
 |
|
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
ExitWindowsEx _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
| ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN, 0); |
|
| В начало |
|
 |
 Dave
Модератор

Возраст: 36
Знак зодиака: 
Зарегистрирован: 08.08.2002
Сообщения: 1208
Откуда: Yaroslavl
|
|
|
Цитата |
|
Под NT это не прокатит...
Точнее этого недостаточно...
(там надо еще и права на выполнение подобных действий получить) _________________ Не убегай от снайпера - умрешь уставшим ! |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Да этой ветке в прошлом году сто лет исполнилось. Если автор не разобрался, он бы уже спросил или уточнил _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
VaDima
Энтузиаст

Возраст: 36
Знак зодиака: 
Зарегистрирован: 18.12.2002
Сообщения: 369
Откуда: Из лесу, вестимо
|
|
|
Цитата |
|
ДЛЯ NT:
| Код: | if OS=WinNT then begin
if not OpenProcessToken(GetCurrentProcess(), ADJUST_PRIV, Token) then
Error:=Error or 4;
if not LookupPrivilegeValue(nil, SHTDWN_PRIV,TokenPriv.Privileges[0].Luid) then
Error:=Error or 8;
TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
TokenPriv.PrivilegeCount := 1;
if not AdjustTokenPrivileges(Token, false, TokenPriv, PRIV_SIZE,Dummy, Len) then
Error:=Error or 16;
InitiateSystemShutDown (Machine,Text,FTimeOut,Force,Reboot);
end; |
чего не хватает, подпатчь сам  _________________ Он умудрялся на бегу прописать дырочку в снегу. (Веня Дркин) |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Ну, этот невесть откуда выдранный кусок кода нужно серьезно поточить напильником для употребления:
| Код: |
var
t: _Token_Privileges;
ht: cardinal;
rl: cardinal;
...
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ht) then begin
LookupPrivilegeValue(nil, 'SeShutdownPrivilege', t.Privileges[0].Luid);
t.PrivilegeCount:=1;
t.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(ht, false, t, 0, nil, rl);
end;
ExitWindowsEx(EWX_FORCE or EWX_REBOOT, 0);
|
Так будет работать в любой операционке - и 9х, и NT/2000/XP
А InitiateSystemShutDown вообще не в тему.
P.S. Замечания по поводу древности ветки остаются в силе  _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 13-ый
Администратор

Возраст: 35
Знак зодиака: 
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
|
|
|
Цитата |
|
древние ветки в массу
раз уж нашел эту ветку в яндексе, то буду тут оффтопить
как проверить login И пароль юзверя введенные им... потипу как это делается при загрузке.
авторицазия сетевая.
пытался налабать чтото типа ниже нарисованного, не вышло нифига
| Код: |
var hToken:cardinal;
tkp: TTokenPrivileges;
tkpo: TTokenPrivileges;
zero: DWORD;
begin
OpenProcessToken (GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
LookupPrivilegeValue(nil, pchar('SeTcbPrivilege'), tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken,FALSE,tkp,SizeOf( TTokenPrivileges ), tkpo,zero);
if LogonUser(pchar(UserName),'ACCOUNT_DOMAIN',pchar(Password),LOGON32_LOGON_BATCH,LoGON32_PROVIDER_DEFAULT,hToken)=false
then AllowLogin:=false
else AllowLogin:=true;
|
_________________
http://fotki.yandex.ru/users/vladimir13
С уважением, 13-ый  |
|
| В начало |
|
 |
 Gelios
Oracle-вый маньяк, Админ

Возраст: 37
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
|
|
|
Цитата |
|
аа, ты в этом смысле...
см ntset там есть такая проверка _________________ нельзя давать всем всего, ибо всех много, а всего мало |
|
| В начало |
|
 |
|
|
 |
 13-ый
Администратор

Возраст: 35
Знак зодиака: 
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
|
|
| В начало |
|
 |
 Dave
Модератор

Возраст: 36
Знак зодиака: 
Зарегистрирован: 08.08.2002
Сообщения: 1208
Откуда: Yaroslavl
|
|
|
Цитата |
|
Из FAQ, работает и под NT и под 98
uses Windows;
procedure RebootSystem;
var
handle, ph: THandle;
pid, n: DWORD;
luid: TLargeInteger;
priv: TOKEN_PRIVILEGES;
dummy: PTokenPrivileges;
ver: TOSVERSIONINFO;
begin
ver.dwOSVersionInfoSize := Sizeof(ver);
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then begin
pid := GetCurrentProcessId;
if OpenProcessToken(ph, TOKEN_ADJUST_PRIVILEGES, handle) then
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then begin
priv.PrivilegeCount := 1;
priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
priv.Privileges[0].Luid := luid;
dummy := nil;
AdjustTokenPrivileges(handle, false, priv, 0, dummy^, n);
end;
end;
ExitWindowsEx(EWX_REBOOT, 0);
end;
И еще одна:
Procedure Shutdown(Name:String; // Имя машины (\\SERVER)
Message:String; // Сообщение
Delay:Integer; // Задержка перед рестартом
Restart,CloseAll:Boolean);
var
ph:THandle;
tp,prevst:TTokenPrivileges;
rl:DWORD;
begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,ph);
LookupPrivilegeValue(Nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=2;
AdjustTokenPrivileges(ph,FALSE,tp,SizeOf(prevst),prevst,rl);
InitiateSystemShutdown(PChar(name),PChar(Message),Delay,Restart,CloseAll);
ShowMessage(SysErrorMessage(GetLastError)); // Результат
end; _________________ Не убегай от снайпера - умрешь уставшим ! |
|
| В начало |
|
 |
 13-ый
Администратор

Возраст: 35
Знак зодиака: 
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
|
|
| В начало |
|
 |
 Dave
Модератор

Возраст: 36
Знак зодиака: 
Зарегистрирован: 08.08.2002
Сообщения: 1208
Откуда: Yaroslavl
|
|
|
Цитата |
|
to 13ый
comp Ну... бывает иногда.  _________________ Не убегай от снайпера - умрешь уставшим ! |
|
| В начало |
|
 |
 Gelios
Oracle-вый маньяк, Админ

Возраст: 37
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
|
|
|
Цитата |
|
stack overflow  _________________ нельзя давать всем всего, ибо всех много, а всего мало |
|
| В начало |
|
 |
 Dave
Модератор

Возраст: 36
Знак зодиака: 
Зарегистрирован: 08.08.2002
Сообщения: 1208
Откуда: Yaroslavl
|
|
|
Цитата |
|
А затем NT-шный B.S.O.D.  _________________ Не убегай от снайпера - умрешь уставшим ! |
|
| В начало |
|
 |
|