Junior
Статус: Не в сети Регистрация: 13.03.2004 Откуда: Белоруссия
Dilon ну я вроде на своей машине как администратор. Вешаю ExitWindowsEx(EWX_SHUTDOWN, EWX_FORCE); на событие при нажатии кнопки- ничерта не происходит. Мысли, предложения... Прошу-с.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Цитата:
ну я вроде на своей машине как администратор.
А это уже отношения никакого с вырубанию не имеет, разговор идет о привелегиях для процесса!
Код:
function ChangeNTSecurityForShutdown: Boolean; { This func changes security rights on a WinNT 4.0 machine } { to give app shutdown privileges. } var hToken : THandle; tkp, Newt : TTokenPrivileges; retlength : DWORD; begin Result := False; if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken) <> False then begin { Get the LUID for shutdown privilege } if LookupPrivilegeValue( nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) = True then begin tkp.PrivilegeCount := 1; // One to set tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; { Get shutdown privilege for this process } Result := AdjustTokenPrivileges(hToken, False, tkp, SizeOf(TTokenPrivileges), Newt, retlength); end; end; end;
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Dilon Это уже надо делать в процедура где будет делаться shutdown, провреил если NT то вызвал ChangeNTSecurityForShutdown, хотя я точно и не помню есть ли AdjustTokenPrivileges вообще в Win9x?
Member
Статус: Не в сети Регистрация: 30.04.2004 Откуда: [Omsk Team]
Цитата:
хотя я точно и не помню есть ли AdjustTokenPrivileges
исключительно для NT:
Цитата:
Requirements Client: Requires Windows XP, Windows 2000 Professional, or Windows NT Workstation 3.1 and later. Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 3.1 and later.
(c)msdn
_________________ forum.omskteam.ru- Все о керамограните
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Dilon Для Delphi это не обязательно , приведенный код при запускке на Win9x просто ничего не будет делать, так как все экспортные функции в Дельфи пашут через заглушки .
Специально проверял, набросал по быстрому прогу для вырукания компа.
Запустил Win9x, прекрасно все сработало
Последний раз редактировалось Ray Adams 17.06.2004 10:39, всего редактировалось 1 раз.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Короче говоря вот готовая процедура.
Код:
procedure ExitWindows32(ShutDownFlag: Word); { proc to Exit 32-bit Windows. ShutDownFlag is either EWX_REBOOT, EWX_SHUTDOWN, or EWX_LOGOFF. }
function ChangeNTSecurityForShutdown: Boolean; { This func changes security rights on a WinNT 4.0 machine } { to give app shutdown privileges. } { Use proc ExitWindows32 to reboot or shutdown the machine. } var hToken : THandle; tkp, Newt : TTokenPrivileges; retlength : DWORD; begin Result := False; if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken) <> False then begin { Get the LUID for shutdown privilege } if LookupPrivilegeValue( nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) = True then begin tkp.PrivilegeCount := 1; // One to set tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; { Get shutdown privilege for this process } Result := AdjustTokenPrivileges(hToken, False, tkp, SizeOf(TTokenPrivileges), Newt, retlength); end; end; end;
begin if GetWindowsVersion = VER_PLATFORM_WIN32_NT then begin if ChangeNTSecurityForShutdown then ExitWindowsEx(ShutDownFlag, 0) else { Failed to change security rights to give us shutdown privilege. } MessageDlg('Unable to modify security rights for shutdown privileges.', mtError, [mbOK], 0); end else if GetWindowsVersion = VER_PLATFORM_WIN32_WINDOWS then ExitWindowsEx(ShutDownFlag, 0); end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения