Содержание материала

 

Code:

function MyExitWindows(RebootParam: Longword): Boolean;

var

TTokenHd: THandle;

TTokenPvg: TTokenPrivileges;

cbtpPrevious: DWORD;

rTTokenPvg: TTokenPrivileges;

pcbtpPreviousRequired: DWORD;

tpResult: Boolean;

const

SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';

begin

if Win32Platform = VER_PLATFORM_WIN32_NT then

begin

   tpResult := OpenProcessToken(GetCurrentProcess(),

     TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,

     TTokenHd);

   if tpResult then

   begin

     tpResult := LookupPrivilegeValue(nil,

                                      SE_SHUTDOWN_NAME,

                                      TTokenPvg.Privileges[0].Luid);

     TTokenPvg.PrivilegeCount := 1;

     TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

     cbtpPrevious := SizeOf(rTTokenPvg);

     pcbtpPreviousRequired := 0;

     if tpResult then

       Windows.AdjustTokenPrivileges(TTokenHd,

                                     False,

                                     TTokenPvg,

                                     cbtpPrevious,

                                     rTTokenPvg,

                                     pcbtpPreviousRequired);

   end;

end;

Result := ExitWindowsEx(RebootParam, 0);

end;

 

// Example to shutdown Windows:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

MyExitWindows(EWX_POWEROFF or EWX_FORCE);

end;

 

// Example to reboot Windows:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

MyExitWindows(EWX_REBOOT or EWX_FORCE);

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить