Re: power off

From
Alex Fedotov ()
To
Alexander Mingalev
Date
2001-05-07T04:27:29Z
Area
SU.WINDOWS.NT.PROG
From: "Alex Fedotov" <alexf@3cube.com>

Alexander Mingalev wrote:

> как програмно выключить комп для nt?
> точнее, для этого нужна привелегия SE_SHUTDOWN_NAME,
> а какие вообще нужны уcловия для её получения?

SE_SHUTDOWN_NAME по умолчанию есть у Administrators и Power Users,
но изначально она выключена в токене процесса. Все что нужно сделать,
это включить ее с помощью AdjustTokenPrivileges:

 HANDLE hToken = NULL;

 if (!OpenProcessToken(GetCurrentProcess(),
          TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
     return FALSE;

 TOKEN_PRIVILEGES tkp;
 LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);

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

 AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0);
 CloseHandle(hToken);

> в msdn по нараcтающей AdjustTokenPrivileges -> CreateToken -> ...
> к тому же заголовочного файла Ntsecpkg.h в cреде vc6 нет...
> обьяcните plz, как это делаетcя или подcкажите, где можно поcмотреть
> примеры.

Если тебя интересует, как программно назначать привилегии, смотри
Q132958 в MSDN.

--
Alex Fedotov


--- ifmail v.2.15dev5
 * Origin: 3Cube, Inc. (www.3cube.com) (2:5020/400)