Сервер кадров камеры windows 10, определение фактического приложения с помощью веб-камеры

В Windows 10 приложения, которым требуется доступ к веб-камере, взаимодействуют с frame server, службой, работающей под svchost.

Я отфильтровываю поток веб-камеры и получаю идентификатор процесса svchost. Я хочу определить фактический процесс, который использует веб-камера.

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

6
0
2 665
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вот пример поиска открытого файла, вы можете сослаться на него. https://www.codeproject.com/Articles/18975/Listing-Used-Files

С уважением, Барон

EnumProcessModulesEx, как следует из названия, перечисляет модули в процессе. Он не перечисляет "все открытые ручки".
IInspectable 06.11.2018 10:54
Ответ принят как подходящий

Я сомневаюсь, что вы сможете идентифицировать приложения, захватывающие видео с помощью сервера кадров (ну, фактически то же самое относится к тем приложениям, которые не используют сервер кадров в текущей или более старых версиях Windows).

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

Минималистичные настольные приложения для захвата видео, пытающиеся предоставить общий доступ к веб-камере, по-прежнему получают сбой, что свидетельствует о том, что совместное использование невозможно для приложений общего назначения (я предполагаю, что такие приложения Microsoft, как Hello, вероятно, будут иметь недокументированный бэкдор на сервере кадров для целей совместного использования камеры, или, в качестве альтернативы, общий доступ включен для определенный класс клиентов, например, использующих Capture Engine API или что-то подобное):

enter image description here

То есть нет API для перечисления клиентов фрейм-сервера, и приложение в целом даже не знает, обращаются ли они к реальному драйверу или прокси-серверу фреймов.

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

Другие вопросы по теме