![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
http://habrahabr.ru/blogs/windows/117083/
Не совсем шутдаун, а ребут. Но если доработать напильником... |
|
#17
|
|||
|
|||
|
а как это в SuperFast Shutdown сделано?
|
|
#18
|
||||
|
||||
|
Не сочтите за оффтоп , но могу ли я поинтересоваться , зачем всё сие действо ?
![]() |
|
#19
|
||||
|
||||
|
Код:
const
ShutdownNoReboot = 0;
ShutdownReboot = 1;
ShutdownPowerOff = 2;
function NtShutdownSystem(SHUTDOWN_ACTION: DWORD): DWORD; stdcall; external 'ntdll.dll';
function EnableShutdownPrivledges: Boolean;
var
hCurrentProcess: THandle;
hTokenHandle: THandle;
tp: _TOKEN_PRIVILEGES;
PreviousState: _TOKEN_PRIVILEGES;
ReturnLength: Cardinal;
begin
hCurrentProcess:=GetCurrentProcess;
if OpenProcessToken(hCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hTokenHandle) then
begin
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tp.Privileges[0].Luid) then
begin
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges(hTokenHandle, False, tp, SizeOf(_TOKEN_PRIVILEGES), PreviousState, ReturnLength) then
Result:=True
else
Result:=False;
end else Result:=False;
end else Result:=False;
end;использование: Код:
EnableShutdownPrivledges; NtShutdownSystem(ShutdownReboot); Код:
EnableShutdownPrivledges; NtShutdownSystem(ShutdownPowerOff); |