none
Как узнать в каком процессе открыт файл? RRS feed

  • Вопрос

  • Добрый день.

    Как на С++ узнать в каком из процессов открыт файл?

    Хочу реализовать програмно вот это 

    https://www.howtogeek.com/289333/how-to-tell-which-application-is-using-your-windows-pcs-webcam/

    Получил камеру, из нее получил Physical Device Object name. Посмотрев в Process Explorer-e handle-ы процесса узнал, что \Device\0000004d это файл. 

    Как теперь узнать в каком процессе открыт этот файл "\Device\0000004d"?

    Можно ли по имени файла определить открывший его процесс?

    Или нужно перебирать все процессы в системе?


    17 ноября 2019 г. 19:37

Все ответы

  • Это вопрос с подвохом... Для файлов существует вполне поддерживаемый способ с помощью Restart Manager API: https://ru.stackoverflow.com/a/727180/240512 - но это именно для полноценных файлов. Устройства же в Windows, в отличие от Unix например, не являются полноценными файлами в виртуальной файловой системе. Есть конечно пути в пространстве имен Win32 Devices/NT Devices (в вашем случае второе), которые можно передать в функцию CreateFile и получить дескриптор, но этим сходство и ограничивается.

    Таким образом, вопрос сводится к тому, как узнать, какой процесс открыл определенный дескриптор. Тут ответ, видимо, следует искать в использовании недокументированных функций вроде NtQuerySystemInformation (https://www.codeproject.com/Articles/18975/Listing-Used-Files)


    18 ноября 2019 г. 3:40