Windows 10 Camera frame server, определите актуальное приложение с помощью веб-камеры

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

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

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

5

Решение

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

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

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

введите описание изображения здесь

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

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

2

Другие решения

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

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

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

-2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector