DllMain в exe? - PullRequest
       14

DllMain в exe?

3 голосов
/ 09 октября 2008

Можно ли получать DllMain-подобные уведомления о присоединении / отсоединении потока в автономном exe-файле без использования дополнительных библиотек?

Редактировать: Это просто теоретический вопрос, который связан с некоторым тестированием, которое я делаю. не реальная жизненная ситуация.

Ответы [ 3 ]

1 голос
/ 09 октября 2008

Интересный вопрос. Я не знаю ничего встроенного в Win32 - думаю, вам, возможно, придется создать библиотеку DLL с API, который сигнализировал о событиях или публиковал сообщения, когда он получал различные сообщения присоединения / отсоединения.

Альтернативой, которая не требует отдельной библиотеки DLL, но потребует некоторых хитростей, является использование API отладки (особенно WaitForDebugEvent()). Если ваше приложение имеет специальный режим «test» (может быть указан параметром командной строки), который ничего не делает, кроме перезапуска exe с использованием CreateProcess() с флагом DEBUG_ONLY_THIS_PROCESS, родительский процесс («отладчик») может вызвать WaitForDebugEvent() получать уведомления о начальных и конечных событиях потока, а также множество других интересных событий. Родительский процесс может передавать их дочернему элементу в виде сообщений или сигнализировать о событиях (если это то, что вам нужно) или выполнять собственную регистрацию, если это все, что вам нужно.

Ни в коем случае не простая вещь, но она будет работать и не потребует отдельной DLL или образа, просто специальный режим, когда вы хотите выполнить эти тесты.

1 голос
/ 09 октября 2008

Нет внешнего кода, который выполняется в потоке и загружает исполняемый файл, следовательно, нет уведомлений о присоединении / отсоединении потока [1]. Код в исполняемом файле обычно управляет потоками [2].

Если вы опишите свой сценарий, люди могут дать вам несколько идей, как его реализовать.


[1] Ну, большую часть времени. Можно загрузить исполняемый файл в другом процессе, но люди обычно не делают этого.
[2] Существуют определенные исключения, когда модель потоков и потоки создаются ОС вместо исполняемого кода. Они в основном связаны с COM / RPC.

0 голосов
/ 09 октября 2008

Ваш вопрос заключается в том, чтобы получать уведомления во время загрузки и выгрузки процесса. Это больше применимо для библиотек DLL, поскольку они загружаются другими процессами.

Для Exes у вас есть InitInstance и ExitInstance, с которыми вы можете обращаться одинаково!

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