Ответ 1
Не беспокойтесь, это так.
Когда OutputDebugString() вызывается приложением, оно принимает эти шаги. Обратите внимание, что отказ в любой момент оставляет все это и обрабатывает запрос отладки как нет-op (строка не отправляется в любом месте).
- Откройте DBWinMutex и подождите, пока у нас не будет эксклюзивного доступа к нему.
- Сопоставьте сегмент DBWIN_BUFFER в память: если он не найден, отладчик не работает, поэтому весь запрос игнорируется.
- Откройте события DBWIN_BUFFER_READY и DBWIN_DATA_READY. Как и в случае сегмент разделяемой памяти, отсутствующие объекты означают, что никакой отладчик не является доступны.
- Подождите, пока не будет сообщено событие DBWIN_BUFFER_READY: это говорит что буфер памяти больше не используется. В большинстве случаев это событие будет сообщено сразу же после его изучения, но оно не будет подождите более 10 секунд, пока буфер не станет готовым (тайм-аут отказывается от запроса).
- Скопируйте в буфер памяти до 4 килобайт данных и сохраните текущий идентификатор процесса. Всегда ставьте байт NUL в конце строки.
- Сообщите отладчику, что буфер готов, установив DBWIN_DATA_READY событие. Отладчик берет его оттуда.
- Отключение мьютекса
- Закройте объекты Event и Section, хотя мы сохраняем дескриптор мьютекс вокруг позже.