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