Бывает, shutdown происходит, когда его совсем не ждешь. Есть ли какие-нибудь АПИ-функции, чтобы отменить выключение или ребут? или программы.
» Можно ли остановить ShutDown и Reboot?
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.
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.
sawamail
Цитата:
а какая функция вызывается на самом деле? есть еще ExitWindowsEx.
Цитата:
started by using the InitiateSystemShutdown function
а какая функция вызывается на самом деле? есть еще ExitWindowsEx.
Sleepwalker
работай с InitiateSystemShutdown
ExitWindowsEx предоставляет ограниченные возможности
работай с InitiateSystemShutdown
ExitWindowsEx предоставляет ограниченные возможности
sawamail
ты не понял.. я хочу остановить shutdown, который может быть вызван чем угодно, начиная от выбора через меню start и заканчивая нажатием кнопки power на клавиатуре. что-нибудь можешь посоветовать?
ты не понял.. я хочу остановить shutdown, который может быть вызван чем угодно, начиная от выбора через меню start и заканчивая нажатием кнопки power на клавиатуре. что-нибудь можешь посоветовать?
Sleepwalker
В каких случаях у тебя вылетает на ShutDown?
В каких случаях у тебя вылетает на ShutDown?
sawamail
как я уже сказал: при нажати кнопки на клаве, например. Не у меня лично, просто была ситуация, когда сервак ушел в SD, и никого не спросил
или же есть программы, которые могут вызывать FSD, тот же Нейро или FlashGet.
Да и банально админ домена вдруг захотел сделать мне удаленный SD. Это так все.. примеры...
как я уже сказал: при нажати кнопки на клаве, например. Не у меня лично, просто была ситуация, когда сервак ушел в SD, и никого не спросил
или же есть программы, которые могут вызывать FSD, тот же Нейро или FlashGet.
Да и банально админ домена вдруг захотел сделать мне удаленный SD. Это так все.. примеры...
Sleepwalker
Реально перехватить "чужой" ShutDown нельзя.
А нажатие кнопки на клаве можно отключить в Power Options / Advanced
Реально перехватить "чужой" ShutDown нельзя.
А нажатие кнопки на клаве можно отключить в Power Options / Advanced
sawamail
Цитата:
стопудово?
Цитата:
да дело не в кнопке... дело в принципе..
понятно, что можно отключить...
Цитата:
"чужой" ShutDown нельзя
стопудово?
Цитата:
Power Options / Advanced
да дело не в кнопке... дело в принципе..
понятно, что можно отключить...
Sleepwalker
Обычный шутдаун (не forced) можно остановить любым модальным окном. Например повесить хук, только когда до него дойдет дело, большинство программ будет уже убито. Но перезагрузку это остановит. Другие варианты - runas или заглушка в dll.
Обычный шутдаун (не forced) можно остановить любым модальным окном. Например повесить хук, только когда до него дойдет дело, большинство программ будет уже убито. Но перезагрузку это остановит. Другие варианты - runas или заглушка в dll.
Shushpan
Цитата:
поподробнее можно?
Цитата:
- runas или заглушка в dll.
поподробнее можно?
Sleepwalker
Может попробовать в политике безопасности поиграть с правами на "Shut Down System"?
Может попробовать в политике безопасности поиграть с правами на "Shut Down System"?
sawamail
это ничего не даст, там же только права устанавливаются, кто систему шатдаунить может...
это ничего не даст, там же только права устанавливаются, кто систему шатдаунить может...
Sleepwalker
Если ты знаешь пароль того, кто запустил shutdown(forced или обычный), ты его сможешь соответственно отменить (-a) используя команду runas. Если конечно успеешь напечатать.
Ну и http://www.desaware.com/SubclassingL3.htm
Если ты знаешь пароль того, кто запустил shutdown(forced или обычный), ты его сможешь соответственно отменить (-a) используя команду runas. Если конечно успеешь напечатать.
Ну и http://www.desaware.com/SubclassingL3.htm
Shushpan
Цитата:
напиши, КАК отменить... т.к. не совсем понимаю, зачем тут runas вообще...
Цитата:
его сможешь соответственно отменить (-a) используя команду runas.
напиши, КАК отменить... т.к. не совсем понимаю, зачем тут runas вообще...
Sleepwalker
Цитата:
для того чтобы шатданить в NT, надо установить программно привелегии в системе
если их обрезать в политтике, то и шатдаун не пройдет
посмотри MSDN
Цитата:
это ничего не даст, там же только права устанавливаются, кто систему шатдаунить может...
для того чтобы шатданить в NT, надо установить программно привелегии в системе
если их обрезать в политтике, то и шатдаун не пройдет
посмотри MSDN
sawamail
какие привелегии, если я (администратор) в данный момент работаю?
и при чем тут MSDN?
дай тогда конкретный линк или точный топик.
какие привелегии, если я (администратор) в данный момент работаю?
и при чем тут MSDN?
дай тогда конкретный линк или точный топик.
Sleepwalker
Мы наверное про разные шутдауны говорим. Я говорю про такой, когда вылазит мерзкая табличка "вам жить осталось xy секунд, шлет привет adminZ".
А если у тебя уже в процессе, то ничего ты естественно набрать не сумеешь. Тут только сабклассинг поможет, чтоб сообщение не прошло совсем.
Мы наверное про разные шутдауны говорим. Я говорю про такой, когда вылазит мерзкая табличка "вам жить осталось xy секунд, шлет привет adminZ".
А если у тебя уже в процессе, то ничего ты естественно набрать не сумеешь. Тут только сабклассинг поможет, чтоб сообщение не прошло совсем.
Shushpan
понятно.. что ниче не понятно...
сообщение я и сам могу заблокировать, вопрос в том, что за сообщение будет слаться и сработает ли этот хук...
понятно.. что ниче не понятно...
сообщение я и сам могу заблокировать, вопрос в том, что за сообщение будет слаться и сработает ли этот хук...
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 просто об этом можно поискать информацию
Стандартный код для шатдауна:
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 просто об этом можно поискать информацию
sawamail
спасибо
спасибо
Страницы: 1
Предыдущая тема: Firebird
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.