La réponse courte à cette question est non. Cependant, la réponse longue est qu'il existe différents appels API et méthodes WMI que vous pouvez utiliser pour trouver cette information, mais ne vous attendez pas à ce qu'il soit rapide et simple.
Si vous souhaitez utiliser les appels API, consultez la fonction NtQuerySystemInformation avec le paramètre SYSTEM_PROCESS_INFORMATION. C'est l'une de ces belles méthodes « sans-papiers » qui vient avec l'avertissement merveilleux:
NtQuerySystemInformation peut être modifié ou non disponible dans les futures versions de Windows . Les applications doivent utiliser les autres fonctions répertoriées dans cette rubrique.
Donc, je suggère d'éviter cela en faveur de l'utilisation de WMI.
Vous pouvez utiliser la classe WMI Win32_Process pour énumérer tous les processus en cours d'exécution sur la machine, puis énumérer tous les handles que chaque processus contient jusqu'à ce que vous trouviez le fichier que vous recherchez. Malheureusement, il n'y a pas de façon simple d'aller "hé, quel processus verrouille ce fichier", cela ne fonctionne que dans le sens inverse, vous devez rechercher la liste de processus jusqu'à ce que vous trouviez celui qui verrouille le fichier qui vous intéresse.
Je recommanderais un bon petit article sur CodeProject intitulé How To: (Almost) Everything In WMI via C# Part 2: Processes. (La partie 1 est aussi une bonne lecture si vous aimez ce genre de chose)
L'information serait inutile, car au moment où vous faites quelque chose avec elle, il ne pourrait plus être précis. –
Vraiment Josh? Vous êtes sûr de cela ... – SpaceghostAli
@SpaceghostAli Les fichiers sont toujours verrouillés indéfiniment, non? –