Pull to refresh

Comments 22

Кхм, интересно, а через ETW можно отслеживать создание любого процесса?

Через ETW можно отслеживать вообще все. Включая полную трассировку любого процесса и команды к GPU.

Честно, не знал. Думал в своё время о том как внедряться в (почти) любые процессы запущенные на компьютере, размышлял в сторону AppInit_Dlls и SetWindowsHookEx... Можно было просто слушать все новые процессы по ETW.

немного не по теме, но можно подробно про то как отслеживать полную трассировку процесса через etw?

Есть, например, вот такая тулза: https://github.com/google/UIforETW
Очень удобно ею профайлить хром, она под него заточена, но записывает в принципе любые процессы.


Из нее же можно открыть трейс в WPA. Правда мне удобнее сконвертировать в гугловый формат pprof через вот это: https://github.com/google/EtwToPprof


Для pprof уже есть куча более удобных утилит.


На самом деле можно просто запустить xperf с кучей параметров и это создаст etl файл со всякими записями (начните с xperf -help). Там могут быть какие угодно события windows, плюс стэк трейсы для всех процессов в системе.

плюс стэк трейсы для всех процессов в системе

стектрейсы в какой момент?

упрощенно говоря, я представляю себе etw как большой системный логгер, логи которого впихнуты во все ключевые места ос, ключевых компонентов, подсистем и можно самому такой лог у себя добавить. Есть тулы которые слушают эти логи и записывают в файлик, потом этот файлик другими тулами можно анализировать.

но я не очень понимаю как в эту концепцию вклинивается трассировка процесса. Что под этим подразумевается? могу я увидеть стектрейсы процесса в произвольное время? я пользуюсь wpa, потому что он еще умеет подгружать pdb, может знаете как еще можно так легко сделать трассировку процесса, потом симболизировать названия функций чтоб было понятно что примерно процесс делает?

и еще: логирует ли etw вызовы win32 api?
извиняюсь, получилось много вопросов, просто как-то в фоне в голове висят, а тут зацепился и вот)

стектрейсы в какой момент?

Во все время записи логов с большим разрешением.


но я не очень понимаю как в эту концепцию вклинивается трассировка процесса.

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


wpa как раз файл etl и подгружает и потом симболизирует, если может.


и еще: логирует ли etw вызовы win32 api?
Я думаю да, но сам с этим не работал.

Мое уважение! Высший пилотаж какой-то.


Забавно, я и не думал, что оказывается в винде можно запустить поток в другом процессе! Только интересно — зачем это может быть нужно, кроме патчинга костылей и вирусни.


А не думали патчить сам исполняемывй файл хрома? Казалось бы захардкодить 200мс в том коде вообще просто. Или там какая-то защита это все не дает делать? Или нужна гибкость? Возможно ли, например, перехвотить CreateProcess, и если создается audio service то патчить его на лету?

Спасибо :)

Создавать поток в другом процессе нужно, как минимум, для отладки этого процесса. Внедрение DLL, опять же, это сравнительно стандартный подход (через поток на LoadLibrary), им пользуются всякие hotkey'и, антивири и т.д.

Если пропатчить chrome.dll (именно там код), то с апдейтом хрома всё сломается. Плюс подпись потратится. Про перехват CreateProcess - читайте доп. главы :)
Ну и да, себе хром себя патчить тоже не даст: не важно, какой процесс патчит.

Слов нет, снимаю шляпу! Измерения это всегда сложно, а измерения синхронности это вообще на грани возможного (моё мнение).

Вы проделали огромную работу, и не хочется Вас расстраивать. Но когда я столкнулась с аналогичной проблемой, было установлено дополнение для ютуба и проблема ушла. что то вроде этого: https://chrome.google.com/webstore/detail/youtube-audiovideo-sync/mknmhikmjljhpccebpnplhicmcfjkgbk

Ссылка на расширение у меня фиолетовая, поэтому я не расстроился :) Это расширение не работает нормально (по крайней мере, у нас). То звука нет, то видео не воспроизводится. Плюс, оно исключительно для ютуба. И плюс, оно задерживает постоянно, а не в зависимости от аудиоустройства.

Ну вы установите его и посмотрите как оно хорошо и стабильно работает :)

я на маке тоже такое замечаю периодически, что на хроме, что на сафари, явление не регулярное

Почему для дебага не использовать OutputDebugString?

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

Да, должно сработать. Если честно, я про этот способ отладки забыл. Нашёл какой-нибудь способ и успокоился.

Отличная статья и исследование! Автор, может вы сможете что подсказать? После обновления до 11 винды у меня перестали работать bt уши. Причем на двух разных машинках с интеловским bt. Выглядит это так - после подключения ушей звук есть секунды две-три, потом в том же хроме видно подергивание видео (если ютуб) и всё, до переподключения звука нет. Единственный способ продлить вывод звука - это скайп. Запускаем в скайпе тестирование звука в течение трех секунд после подключения ушей. Они начинают пиликать. Всё, можно запускать ютуб и прочее, а скайп теперь можно останавливать. Но работает только до остановки воспроизведения. После паузы по новой. Равно и в скайпе - после начала звонка подключаем уши, и они работают до окончания звонка. Следующий звонок через переподключение.

Это связано с тем, что у блютус наушников обычно два профиля аудио: hands free (телефонный, плохое качество звука + работает микрофон) и stereo (хорошее качество звука, микрофон не поддерживается). Скайп принудительно включает запрос микрофона, драйвер переключает наушники в режим hands free, и далее ютуб постоянным потоком данных на аудиоканал не даёт драйверу переключиться обратно. Вердикт - у вас не работает поддержка профиля stereo, попробуйте подобрать другой драйвер для своей блютус-платы (если это ноутбук - вероятно это wifi драйвер, они зачастую идут вместе т.к. чип общий).

Я сам использую macbook с буткампом под win10, там из трёх драйверов для wifi только один хорошо работает (самый старый, тот что apple предоставила). А всё что скачивает винда самостоятельно - тупо убивает и wifi, и bluetooth.

Из-за высокоинтелектуальной системы кармы я могу только раз в день отвечать.

Вероятно вы правы. Только в новых профилях handsfree качество звука уже не уровне и стерео, так что не поймешь режим. Но, да, пока скайп держит микрофон, всё работает. Как только отпускает, так отрубается и микрофон и звук. Я думал вдруг кто подскажет как это поотлаживать. Поставил свежайшие драйвера интела, у меня ax201 карта, не помогло.

Sign up to leave a comment.

Articles