power off
- From
- Gennady Porev (2:463/304)
- To
- Alexander Mingalev
- Date
- 2001-05-07T21:36Z
- Area
- SU.WINDOWS.NT.PROG
Hi, Alexander!
07 мая 2001 04:27 Alex Fedotov (2:5020/400) писал(а) к Alexander Mingalev про power off:
>> как програмно выключить комп для nt?
>> точнее, для этого нужна привелегия SE_SHUTDOWN_NAME,
>> а какие вообще нужны уcловия для её получения?
AF> SE_SHUTDOWN_NAME по умолчанию есть у Administrators и Power Users,
AF> но изначально она выключена в токене процесса. Все что нужно сделать,
AF> это включить ее с помощью AdjustTokenPrivileges:
Если интересует готовая прога, то так :)
{$APPTYPE CONSOLE}
program tryshutd;
uses
Windows,
SysUtils;
procedure Reboot(s : PChar);
var hToken : THandle;
NewState,OldState : TTokenPrivileges;
OSVersionInfo : TOSVersionInfo;
OldSize : Cardinal;
begin
Writeln('Shutdown: ',s);
SetLastError(0);
OSVersionInfo.dwOSVersionInfoSize:=SizeOf(OSVERSIONINFO);
GetVersionEx(OSVersionInfo);
if OSVersionInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
NewState.PrivilegeCount:=1;
LookUpPrivilegeValue(s,'SeShutdownPrivilege',NewState.Privileges[0].Luid);
NewState.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,NewState,SizeOf(OldState),OldState,
OldSize);
CloseHandle(hToken);
end;
InitiateSystemShutdown(s,'Shutdown message',5,true,false);
end;
begin
if ParamCount>0 then Reboot('\\COMPUTERNAME');
end.
Best regards, Gennady. [MCP #2124946]
ICQ UIN: 13031700 porev@i.com.ua
--- GoldED/W32 3.0.1
* Origin: EXPAN headquarter (2:463/304)