![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вырубить питание? [D6, Win95/98, WinXP]
Black © (2003-05-23 14:24:00)Мастера, подскажите пожалуйста как выключить компьютер?
Vit@ly (2003-05-23 20:15:00) [1]Для Win95/98 можно и так:
WinExec(PChar("rundll32 shell32,SHExitWindowsEx 1"), SW_Show);
Opuhshii (2003-05-23 18:44:00) [2]2Black (23.05.03 14:24)
вопрос этот поднимается часто,.. но все же
для Win95/98
ExitWindowsEx(0, EWX_POWEROFF)
для NT-систем для процесса необходимо установить привелегию на выключение компьютера SeShutdownPrivilege
var
ProcessToken:THandle;
aTOKEN_PRIVILEGES:TTokenPrivileges;
ShutDownLuid:TLargeInteger;
Dummy:Dword;
....
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,ProcessToken);
LookupPrivilegeValue("","SeShutdownPrivilege",ShutDownLuid);
with aTOKEN_PRIVILEGES do begin
PrivilegeCount:=1;
Privileges[0].Luid:=ShutDownLuid;
Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
end;
if AdjustTokenPrivileges(ProcessToken,FALSE,aTOKEN_PRIVILEGES,0,nil,Dummy) then
ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF,0);
...
AdjustTokenPrivileges активизирует уже имеющиеся у процесса привелегии, но не добавляет новых, т.е. если процесс создан пользователем не имеющим прав на выключение компьютера, соответственно SeShutdownPrivilege у процесса не будет.
Song (2003-05-23 14:51:00) [3]Нажать на кнопку Power
clickmaker (2003-05-23 14:42:00) [4]ExitWindowsEx(0, EWX_POWEROFF)