Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
2-1151421912
Юнкер
2006-06-27 19:25
2006.07.16
Как поделить деньги на булки?


9-1131821987
Кефир87
2005-11-12 21:59
2006.07.16
gluProject вызывает Run time error?!


6-1141971797
WondeRu
2006-03-10 09:23
2006.07.16
TServerSocket внутри COM-сервера.


2-1151152802
b.o.n.d.007
2006-06-24 16:40
2006.07.16
Я не могу понять, почему Делфи не считает куски формулы?


1-1148994038
TSa
2006-05-30 17:00
2006.07.16
запись в ini файл с правами пользоваля





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский