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

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

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

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

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

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

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

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

enter image description here

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

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

0 голосов
/ 01 ноября 2018

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

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

С наилучшими пожеланиями, Барон

...