Как предотвратить закрытие удаленного процесса в Windows? - PullRequest
0 голосов
/ 28 апреля 2020

Есть программа, которую я не могу изменить, ее код был открыт. Я хочу создать «наблюдателя» для перехвата события закрытия этой программы, чтобы главное окно программы было скрыто, а не закрывалось, когда пользователи пытаются закрыть эту программу.

Я гуглил его и кто-то говорит, что hook API с именем OpenProcess будет работать. Я попытался использовать C# lib под названием «EasyHook» и успешно внедрить удаленный процесс и подключить MessageBeep API. Затем я попытался перехватить OpenProcess и TerminateProcess, но перехваченные методы этих двух методов так и не были вызваны.

Так какой же правильный метод я должен перехватить или есть какой-то другой способ реализовать мою цель? Если нет способа предотвратить завершение процесса с помощью диспетчера задач, есть ли какие-нибудь хитрости, такие как перехват кнопки закрытия окна et c.?

PS. Я не знаю программирование ядра Windows и программирование драйверов, поэтому я хочу реализовать его в пользовательском режиме, если это возможно.

1 Ответ

2 голосов
/ 28 апреля 2020

Я хочу создать «наблюдатель» для перехвата события закрытия этой программы, чтобы сделать главное окно программы скрытым, а не закрытым, когда пользователи пытаются закрыть эту программу.

Нет события закрытия процесса, которое вы можете перехватить. Однако для GUI программ существует WM_CLOSE и WM_SYSCOMMAND|SC_CLOSE оконных сообщений, которые вы можете перехватить с помощью SetWindowsHookEx().

Я гуглил это, и кто-то говорит, что перехватить API, названный OpenProcess, будет работать.

Тот, кто сказал, что перехват OpenProcess() является решением этой проблемы, либо ошибался, либо вы неправильно поняли, что это hook фактически использовался для.

Я попытался использовать C# lib под названием "EasyHook" и успешно внедрить удаленный процесс и перехватить MessageBeep API. Затем я попытался подключить OpenProcess и TerminateProcess, но методы этих двух методов никогда не вызывались.

Конечно, потому что вы пытались подключить их в процессе, который завершается, но это не так. откуда они вызываются, они вызываются в процессе, который выполняет завершение (ie, в самом диспетчере задач).

Если нет способа предотвратить завершение процесса с задачей manager

Если используется грубая сила «Завершить процесс (дерево)», то нет возможности отловить / заблокировать ее. Параметр «Завершить задачу» на вкладке «Приложение» пытается выполнить изящное завершение с помощью оконных сообщений, прежде чем оно прибегнет к грубой силе.

Есть ли какие-либо приемы, такие как перехват кнопки закрытия окна и т. Д. c.?

См. Мой первый комментарий выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...