Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Можно ли остановить ShutDown и Reboot?

Автор: Sleepwalker
Дата сообщения: 11.08.2003 09:38
Бывает, shutdown происходит, когда его совсем не ждешь. Есть ли какие-нибудь АПИ-функции, чтобы отменить выключение или ребут? или программы.
Автор: sawamail
Дата сообщения: 11.08.2003 10:25
Sleepwalker
AbortSystemShutdown

The AbortSystemShutdown function stops a system shutdown started by using the InitiateSystemShutdown function.


BOOL AbortSystemShutdown(
LPTSTR lpMachineName
);

Parameters
lpMachineName
[in] Pointer to the null-terminated string that specifies the network name of the computer where the shutdown is to be stopped. If lpMachineName is NULL or an empty string, the function stops the shutdown on the local computer.
Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks
The InitiateSystemShutdown and InitiateSystemShutdownEx functions display a dialog box that notifies the user that the system is shutting down. During the shutdown time-out period, the AbortSystemShutdown function can prevent the system from shutting down.


Windows Server 2003, Windows XP SP1: If the computer to be shut down is a Terminal Services server, the system displays a dialog box to all local and remote users warning them that shutdown has been initiated. If shutdown is prevented by AbortSystemShutdown, the system displays dialog box to the users informing them that the server is no longer shutting down.


To stop the local computer from shutting down, the calling process must have the SE_SHUTDOWN_NAME privilege. To stop a remote computer from shutting down, the calling process must have the SE_REMOTE_SHUTDOWN_NAME privilege on the remote computer. By default, users can enable the SE_SHUTDOWN_NAME privilege on the computer they are logged onto, and administrators can enable the SE_REMOTE_SHUTDOWN_NAME privilege on remote computers. For more information, see Running with Special Privileges.

Common reasons for failure include an invalid computer name, an inaccessible computer, or insufficient privilege.

Автор: Sleepwalker
Дата сообщения: 11.08.2003 10:42
sawamail

Цитата:
started by using the InitiateSystemShutdown function

а какая функция вызывается на самом деле? есть еще ExitWindowsEx.
Автор: sawamail
Дата сообщения: 11.08.2003 10:56
Sleepwalker
работай с InitiateSystemShutdown
ExitWindowsEx предоставляет ограниченные возможности
Автор: Sleepwalker
Дата сообщения: 11.08.2003 10:58
sawamail
ты не понял.. я хочу остановить shutdown, который может быть вызван чем угодно, начиная от выбора через меню start и заканчивая нажатием кнопки power на клавиатуре. что-нибудь можешь посоветовать?
Автор: sawamail
Дата сообщения: 11.08.2003 11:17
Sleepwalker
В каких случаях у тебя вылетает на ShutDown?
Автор: Sleepwalker
Дата сообщения: 11.08.2003 11:26
sawamail
как я уже сказал: при нажати кнопки на клаве, например. Не у меня лично, просто была ситуация, когда сервак ушел в SD, и никого не спросил
или же есть программы, которые могут вызывать FSD, тот же Нейро или FlashGet.
Да и банально админ домена вдруг захотел сделать мне удаленный SD. Это так все.. примеры...
Автор: sawamail
Дата сообщения: 11.08.2003 11:36
Sleepwalker
Реально перехватить "чужой" ShutDown нельзя.
А нажатие кнопки на клаве можно отключить в Power Options / Advanced
Автор: Sleepwalker
Дата сообщения: 11.08.2003 11:57
sawamail

Цитата:
"чужой" ShutDown нельзя

стопудово?


Цитата:
Power Options / Advanced

да дело не в кнопке... дело в принципе..
понятно, что можно отключить...
Автор: Shushpan
Дата сообщения: 11.08.2003 12:12
Sleepwalker
Обычный шутдаун (не forced) можно остановить любым модальным окном. Например повесить хук, только когда до него дойдет дело, большинство программ будет уже убито. Но перезагрузку это остановит. Другие варианты - runas или заглушка в dll.
Автор: Sleepwalker
Дата сообщения: 11.08.2003 12:15
Shushpan


Цитата:
- runas или заглушка в dll.

поподробнее можно?
Автор: sawamail
Дата сообщения: 11.08.2003 12:18
Sleepwalker
Может попробовать в политике безопасности поиграть с правами на "Shut Down System"?
Автор: Sleepwalker
Дата сообщения: 11.08.2003 12:46
sawamail
это ничего не даст, там же только права устанавливаются, кто систему шатдаунить может...
Автор: Shushpan
Дата сообщения: 11.08.2003 13:18
Sleepwalker
Если ты знаешь пароль того, кто запустил shutdown(forced или обычный), ты его сможешь соответственно отменить (-a) используя команду runas. Если конечно успеешь напечатать.

Ну и http://www.desaware.com/SubclassingL3.htm
Автор: Sleepwalker
Дата сообщения: 11.08.2003 13:20
Shushpan

Цитата:
его сможешь соответственно отменить (-a) используя команду runas.

напиши, КАК отменить... т.к. не совсем понимаю, зачем тут runas вообще...
Автор: sawamail
Дата сообщения: 11.08.2003 13:49
Sleepwalker

Цитата:
это ничего не даст, там же только права устанавливаются, кто систему шатдаунить может...

для того чтобы шатданить в NT, надо установить программно привелегии в системе
если их обрезать в политтике, то и шатдаун не пройдет
посмотри MSDN
Автор: Sleepwalker
Дата сообщения: 11.08.2003 13:54
sawamail
какие привелегии, если я (администратор) в данный момент работаю?
и при чем тут MSDN?
дай тогда конкретный линк или точный топик.
Автор: Shushpan
Дата сообщения: 11.08.2003 14:48
Sleepwalker
Мы наверное про разные шутдауны говорим. Я говорю про такой, когда вылазит мерзкая табличка "вам жить осталось xy секунд, шлет привет adminZ".
А если у тебя уже в процессе, то ничего ты естественно набрать не сумеешь. Тут только сабклассинг поможет, чтоб сообщение не прошло совсем.

Автор: Sleepwalker
Дата сообщения: 11.08.2003 14:53
Shushpan
понятно.. что ниче не понятно...

сообщение я и сам могу заблокировать, вопрос в том, что за сообщение будет слаться и сработает ли этот хук...
Автор: sawamail
Дата сообщения: 11.08.2003 15:12
Sleepwalker

Стандартный код для шатдауна:

HANDLE hToken;
LUID ShutDownValue;
TOKEN_PRIVILEGES tkp;

OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken);

LookupPrivilegeValue((LPSTR) NULL,SE_SHUTDOWN_NAME,&ShutDownValue);

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = ShutDownValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES) NULL,(PDWORD) NULL);

InitiateSystemShutdown(NULL,"Система рухнет через несколько секунд!",45,TRUE,FALSE);

Возможно установив права пользователей в политике безопасности, ты не дашь возможности взять программно привилегии на шатдаун. Надо попробовать.

А в MSDN просто об этом можно поискать информацию
Автор: Sleepwalker
Дата сообщения: 11.08.2003 15:23
sawamail
спасибо

Страницы: 1

Предыдущая тема: Firebird


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.