Собрал, работает — пример, в отдельном процессе шлющий сообщения через OutputDebugString — работает; какие-то приложухи ещё, судя по тексту — хром что-то изредка выплёвывает. В общем, нормас.
Запускаю UWP приложуху. Инжектирую DLL. В мониторе отладочного вывода — ничего не получаю. Подозреваю, что OutputDebugString по умолчанию там не работает, но MSVC что-то делает с процессом так, что OutputDebugString начинает работать. Вопрос — что она там делает такого? Есть идеи?
естественно
только словами ксерокопировать не хочу
начиная от того что приложение должно быть в дебаг режиме
заканчивая тем что в C# выпиливается та функция
и нужно использовать другую
да еще и возможно настройки компилера надо поставить в нужный режим
то чего я так и не понял
это вас C/C++ или C#
поскольку UWP + OutputDebugString может быть как одно так и другое
Re[4]: UWP и OutputDebugString - как чтобы работало?
Здравствуйте, пффф, Вы писали:
П>Наковырял в инете код, как самому получать отладочный вывод — https://www.codeproject.com/Articles/23776/Mechanism-of-OutputDebugString
П>Собрал, работает — пример, в отдельном процессе шлющий сообщения через OutputDebugString — работает; какие-то приложухи ещё, судя по тексту — хром что-то изредка выплёвывает. В общем, нормас.
П>Запускаю UWP приложуху. Инжектирую DLL. В мониторе отладочного вывода — ничего не получаю. Подозреваю, что OutputDebugString по умолчанию там не работает, но MSVC что-то делает с процессом так, что OutputDebugString начинает работать. Вопрос — что она там делает такого? Есть идеи?
Насчёт UWP не подскажу, но думаю вряд-ли играет роль откуда вызвали OutputDebugString, скорее всего проблема в этом примере, попробуй DebugView.
Re[2]: UWP и OutputDebugString - как чтобы работало?
Здравствуйте, pilgrim_, Вы писали:
_>Насчёт UWP не подскажу, но думаю вряд-ли играет роль откуда вызвали OutputDebugString, скорее всего проблема в этом примере, попробуй DebugView.
DebugView работает, хотя я его пробовал, и он не работал. Но, вообще, у UWP приложений, как я понял, куча ограничений, поэтому и сомневался в OutputDebugString
В общем, получилось вот так:
В проге, из которой я запускаю UWP приложение, я мониторю (назовем Dbg-монитор) выхлоп OutputDebugView и инжектюсь в приложуху. Заодно, для проверки я сам оттуда отсылаю строку OutputDebugView.
Если DebugView запущен, то я вообще ничего не получаю, а DebugView получает все строки, и из моей проги, и из моей инжектированной DLL.
Если я запускаю свою прогу с Dbg-монитором без DebugView, то получаю то, что я сам вывел через OutputDebugView, но нет ничего от инжектированной DLL. Но — запускаю другую прогу, которая срёт в OutputDebugView — всё получаю нормально. Так же приходят сообщения от других приложений.
Какая-то хрень, короче. Не пойму, где фигня
// Мой код
OutputDebugStringA( "Hello through OutputDebugStringA\n");
OutputDebugStringW(L"Hello through OutputDebugStringW\n");
OutputDebugStringA( "Hello through OutputDebugStringA\n");
OutputDebugStringW(L"Hello through OutputDebugStringW\n");
---
// Что поймал DbgView
[24348] Hello through OutputDebugStringA
[24348] Hello through OutputDebugStringA
---
// Что поймал мой монитор
[ 24348] Hello through OutputDebugStringW
[ 24348] Hello through OutputDebugStringW
Хм. Вроде бы всё должно по одному каналу передаваться, вроде нет отдельных для OutputDebugStringA и OutputDebugStringW, при этом с OutputDebugStringW логика обратная остальному юникодному API — оно конвертирует в однобайтовую кодировку и шлёт через OutputDebugStringA.
Re[2]: UWP и OutputDebugString - как чтобы работало?
Здравствуйте, пффф, Вы писали:
П>Интересное поведение
П>Хм. Вроде бы всё должно по одному каналу передаваться, вроде нет отдельных для OutputDebugStringA и OutputDebugStringW, при этом с OutputDebugStringW логика обратная остальному юникодному API — оно конвертирует в однобайтовую кодировку и шлёт через OutputDebugStringA.
Из обычного win32 консольного приложения в DebugView долетают оба варианта (и OutputDebugStringA, и OutputDebugStringW), проверил на win7/win10.
Re[3]: UWP и OutputDebugString - как чтобы работало?
Здравствуйте, pilgrim_, Вы писали:
П>>Хм. Вроде бы всё должно по одному каналу передаваться, вроде нет отдельных для OutputDebugStringA и OutputDebugStringW, при этом с OutputDebugStringW логика обратная остальному юникодному API — оно конвертирует в однобайтовую кодировку и шлёт через OutputDebugStringA.
_>Из обычного win32 консольного приложения в DebugView долетают оба варианта (и OutputDebugStringA, и OutputDebugStringW), проверил на win7/win10.
А параллельно никакой другой монитор запущен? А то когда моего монитора нет, всё ловит
// Код
OutputDebugStringA( "Hello through OutputDebugStringA 1\n");
OutputDebugStringW(L"Hello through OutputDebugStringW 1\n");
OutputDebugStringA( "Hello through OutputDebugStringA 1\n");
OutputDebugStringW(L"Hello through OutputDebugStringW 1\n");
CoInit coInit;
// ods_capture();
CWinDebugMonitorImpl logMonitor;
Sleep(500);
OutputDebugStringA( "Hello through OutputDebugStringA 2\n");
OutputDebugStringW(L"Hello through OutputDebugStringW 2\n");
OutputDebugStringA( "Hello through OutputDebugStringA 2\n");
OutputDebugStringW(L"Hello through OutputDebugStringW 2\n");
---
// DbgView
[28888] Hello through OutputDebugStringA 1
[28888] Hello through OutputDebugStringW 1
[28888] Hello through OutputDebugStringA 1
[28888] Hello through OutputDebugStringW 1
[28888] Hello through OutputDebugStringA 2
[28888] Hello through OutputDebugStringA 2
---
// Мой монитор
[ 28888] Hello through OutputDebugStringW 2
[ 28888] Hello through OutputDebugStringW 2
DbgView запущен висит, запускаю свою прогу и вижу такую картину, что ко мне приходят только OutputDebugStringW, а DbgView начинает ловить только OutputDebugStringA
Re[4]: UWP и OutputDebugString - как чтобы работало?
Здравствуйте, пффф, Вы писали:
П>Здравствуйте, pilgrim_, Вы писали:
П>>>Хм. Вроде бы всё должно по одному каналу передаваться, вроде нет отдельных для OutputDebugStringA и OutputDebugStringW, при этом с OutputDebugStringW логика обратная остальному юникодному API — оно конвертирует в однобайтовую кодировку и шлёт через OutputDebugStringA.
_>>Из обычного win32 консольного приложения в DebugView долетают оба варианта (и OutputDebugStringA, и OutputDebugStringW), проверил на win7/win10.
П>А параллельно никакой другой монитор запущен? А то когда моего монитора нет, всё ловит
Не запущен, если запустить 2 версии DebugView, то получать сообщения будет только 1-й запущенный процесс, а во 2-м элементы тулбара будут задизейблены, если принудительно во 2-м сделать COnnect to local, то скажет что не удалось создать monitor. Возможно связанно с параметрами security при создании всяких event/mapping.
П>DbgView запущен висит, запускаю свою прогу и вижу такую картину, что ко мне приходят только OutputDebugStringW, а DbgView начинает ловить только OutputDebugStringA
А если в цикле вывод крутить? Может кто 1-й поймал, тот и победил
Re[5]: UWP и OutputDebugString - как чтобы работало?
Здравствуйте, pilgrim_, Вы писали:
_>А если в цикле вывод крутить? Может кто 1-й поймал, тот и победил
Запустил третью прогу, которая непрерывно срёт. Стабильно нечет попадает в DbgView, чёт — попадает ко мне. Но — если закрыть DbgView, то почему-то из инжектированной в UWP DLLки ко мне ничего не прилетает, а если запустить DbgView — то туда прилетает всё.
Re[6]: UWP и OutputDebugString - как чтобы работало?