Показать сообщение отдельно
  #2  
Старый 28.10.2010, 12:59
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

xp, vista, 7 ExitWindowsEx(EWX_SHUTDOWN, 0) не выключит!
WindowsShutdown:
Код:
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;

function IsNT: Boolean;
var
  osv: _OSVERSIONINFOA;
begin
  ZeroMemory(@osv, SizeOf(_OSVERSIONINFOA));
  osv.dwOSVersionInfoSize:=SizeOf(_OSVERSIONINFOA);
  if GetVersionEx(osv) then
  begin
    if (osv.dwPlatformId=VER_PLATFORM_WIN32_NT) and (osv.dwMajorVersion>4) then Result:=True else Result:=False;
  end else Result:=False;
end;

function WindowsShutdown: Boolean;
begin
  if IsNT then
  begin
    if EnableShutdownPrivledges then Result:=ExitWindowsEx(EWX_SHUTDOWN, 0) else Result:=False;
  end else Result:=ExitWindowsEx(EWX_SHUTDOWN, 0)
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием