Ответ 1
Короткий ответ на это - нет.
Тем не менее, длинный ответ заключается в том, что существуют различные вызовы API и методы WMI, которые вы можете использовать для поиска этой информации, но не ожидайте, что она будет быстрой и простой.
Если вы хотите использовать вызовы API, посмотрите функцию NtQuerySystemInformation с параметром SYSTEM_PROCESS_INFORMATION. Это один из тех прекрасных "недокументированных" методов, который поставляется с замечательным отказом от ответственности:
NtQuerySystemInformation может быть изменен или недоступен в будущем версии Windows. Приложения следует использовать альтернативные функции перечисленные в этом разделе.
Поэтому я бы предложил избегать этого в пользу использования WMI.
Вы можете использовать класс WMI Win32_Process для перечисления всех процессов, выполняемых в настоящее время на машине, а затем перечислять все дескрипторы, которые каждый процесс удерживает до тех пор, пока вы найдете файл, который ищете. К сожалению, нет простого способа "эй, какой процесс блокирует этот файл", он работает только наоборот, вы должны искать в списке процессов, пока не найдете тот, который блокирует интересующий вас файл.
Я бы порекомендовал небольшую статью о CodeProject под названием Как: (почти) все в WMI через С# Часть 2: Процессы. (Часть 1 также хорошо читается, если вам нравится такая вещь)