Главная страница
    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.008 c
2-1151515879
GudenTak
2006-06-28 21:31
2006.07.16
функция PosEx


2-1151498664
UMU
2006-06-28 16:44
2006.07.16
Объединение строк в Rave Reports


15-1149952790
Змей:)
2006-06-10 19:19
2006.07.16
Кто знает как сделать воздушного змея?


2-1151395315
312Kbps
2006-06-27 12:01
2006.07.16
Диалог ввода даты !


15-1150612858
Michael5
2006-06-18 10:40
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский