У меня есть сервер приложений (JBoss, но это также происходит в Tomcat), работающий как служба в Windows Server 2003. Он работает с флагом -Xrs
.
Приложение Java, работающее под управлением сервера приложений, вызывает настраиваемый интерфейс, написанный на C++ через JNI (это означает, что мы можем изменить этот код), ссылаясь на сторонний DLL-файл для обработки изображений (Lincoln для преобразования PostScript).
Когда мы входим на сервер через подключение к удаленному рабочему столу в режиме консоли (mstsc /console
) или в режиме администратора (mstsc /admin
), когда мы выходим из системы, если DLL-файл Lincoln загружен, сервер приложений подтвердит сигнал выхода из системы, и процесс службы немедленно прекратить без ущерба.
Я полагаю, что сигнал CTRL_LOGOFF
, но могу ошибаться.
После статьи JavaJiggle об обработке сигналов, очевидно, обработчики сигналов передаются в DLL-файл при обработке DLL-файла. Это означает, что сторонний файл DLL (в данном случае Линкольн) прослушивает сигнал CTRL_LOGOFF
и отвечает на него выходом из системы.
Я считаю, что я должен быть в состоянии закодировать улавливатель сигналов в моем интерфейсе C++ для DLL, чтобы перехватывать CTRL_LOGOFF
до того, как он достигнет DLL, и если это так, то мы не будем постоянно умирать, когда кто-то выходит из консоли/администратора RDP.
Вот что мне нужно:
Правильно ли я понимаю, что сигнал, который я получаю при выходе из консоли/администратора/выходе из системы, равен
CTRL_LOGOFF
?Могу ли я написать перехватчик сигналов в интерфейсе C++?
Как мне закодировать этот перехватчик сигнала, или есть уже существующий код? Я использую 32-битную DLL.
Я нашел статью Microsoft Регистрация функции обработчика элементов управления, которая может помочь ответить на этот вопрос.