Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.16;
Скачать: CL | DM;

Вниз

Почему из сервиса(службы) с админскими правами не могу выключить   Найти похожие ветки 

 
novill ©   (2006-06-28 18:04) [0]

Windows XP?

Функция ExitWindowsEx возвращает "Клиент не обладает требуемыми правами".

Сервис запущен с учетной записи с админскими правами.

unit ServU;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,shellapi;

type
 TMyShutdown = class(TService)
   procedure ServiceExecute(Sender: TService);
 private
   { Private declarations }
 public
   function GetServiceController: TServiceController; override;
   { Public declarations }
 end;

var
 MyShutdown: TMyShutdown;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
 MyShutdown.Controller(CtrlCode);
end;

function TMyShutdown.GetServiceController: TServiceController;
begin
 Result := ServiceController;
end;

procedure TMyShutdown.ServiceExecute(Sender: TService);
var p1:Cardinal;p2:Word; i:integer;
   st:text;
begin
 AssignFile(st,"c:\stop");
 Rewrite(st);
 while not Self.Terminated do
 begin
  if Time<StrToTime("17:05:00")
   then
    if not ExitWindowsEx(EWX_POWEROFF ,p2)
     then Writeln(st,SysErrorMessage(GetLastError))
     else Writeln(st,"off")
   else Writeln(st,"time");
  flush(st);
  Sleep(200);
  ServiceThread.ProcessRequests(false);
 end;
 CloseFile(st);
end;

end.


 
novill ©   (2006-06-28 18:15) [1]

Да, если же вызывать функцию ExitWindows, то возвращается код "Неверная функция".


 
Eraser ©   (2006-06-28 18:27) [2]

> [0] novill ©   (28.06.06 18:04)

наверное все таки не правами, а привилегиями? ) код ошибки какой?
RTFM MSDN
To shut down or restart the system, the calling process must use the AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege. For more information, see Running with Special Privileges.

вот рабочий код:
 if not OpenProcessToken(GetCurrentProcess,
         TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken) then
         Exit;
       if not LookupPrivilegeValue(nil,
         "SeShutdownPrivilege", tkp.Privileges[0].Luid) then
         Exit;
       tkp.PrivilegeCount := 1;
       tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
       AdjustTokenPrivileges(hToken, False, tkp, SizeOf(PrevState), PrevState, dwBytes);
       if GetLastError <> ERROR_SUCCESS then
         exit;
       dwFlags := EWX_FORCE or EWX_FORCEIFHUNG;
       case AFlag of
         0: dwFlags := dwFlags or EWX_REBOOT;
         1: dwFlags := dwFlags or EWX_POWEROFF;
         2: dwFlags := dwFlags or EWX_LOGOFF;
       end;
       ExitWindowsEx(dwFlags, 0);


 
Fay ©   (2006-06-28 18:27) [3]

InitiateSystemShutdown


 
Fay ©   (2006-06-28 18:51) [4]

Да, привилегию всё равно нужно дать...



Страницы: 1 вся ветка

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.008 c
2-1151302138
mariya_mezenceva
2006-06-26 10:08
2006.07.16
проблема с dll


4-1144406187
leonidus
2006-04-07 14:36
2006.07.16
Передача в dll строки widestring


2-1151217749
Марина
2006-06-25 10:42
2006.07.16
Как закрасить в какой то свет вертикальную полосу прокрутки?


2-1151549788
PenguinX
2006-06-29 06:56
2006.07.16
Дин.массив в классе = траблы, ГОРЮ!


15-1150266173
Layner
2006-06-14 10:22
2006.07.16
Бесплатные статистические компоненты, есть ли такие?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский