Date: 03.11.2017 4:14:45
Системные утилиты предположительно используют NetFileEnum для получения удаленно открытых файлов и NtQuerySystemInformation для получения локально открытых файлов.
Однако, получение всех открытых файлов в системе - довольно затратная операция и обычно не нужна. Обычно более полезно получить информацию только о тех файлах, с которыми программа реально собирается работать. Это можно сделать с помощью функций RmRegisterResources / RmGetList из Restart Manager API. Пример получения списка процессов, открывших указанный файл.
Date: 03.11.2017 4:40:15
Локально файлов открывается очень много даже без вашего ведома. У меня команда openfiles /query > file.txt выдает файл на 900+ строк (большинство - шрифты и всякие временные файлы).
Но если нужны только удаленные то это легко должно делаться через NetFileEnum. Вот тут пример есть: https://www.codeproject.com/Articles/6426/WebControls/
Date: 03.11.2017 5:22:11
Вот тут посмотрите для c# http://www.pinvoke.net/default.aspx/netapi32.NetFileEnum
openfiles это стандартная системная утилита, в system32 лежит.
Можно кстати ее вывод парсить, если вам так проще будет.
Автор: VadimTagil