Dans Windows, les verrous de fichiers restent-ils après la fin d'un processus via taskkill?

Nous ne parlons pas d'un redémarrage / redémarrage ici (similaire à une autre question). Cette question distingue la manière différente que Windows gère les verrous de fichiers existants sur un taskkill par rapport à la façon dont il répond à un arrêt / redémarrage.

Si je forcer à tuer un programme, les fichiers qu'il a verrouillés restent-ils toujours verrouillés ou les verrous sont-ils relâchés lorsque le processus meurt également?

Par tuer par force, je veux dire, par exemple, utiliser la commande 'taskkill' ou 'end process tree' dans taskmanager.

Pour clarifier davantage, je ne parle pas d'un processus qui laisse un fichier de verrouillage auxiliaire non supprimé, tel que MS Word. Je parle du statut d'un verrou de fichier exclusif ou partagé.

Est-ce que taskkill libère un fichier lock? Ou est-ce que le verrou est mis en place jusqu'à ce qu'un redémarrage ou une action utilisateur admin soit pris dans la console de gestion de l'ordinateur?

Voici ce que je peux confirmer: tuer un processus de 16 bits qui place un verrou exclusif

Ceci utilise un petit programme de console qui met un verrou exclusif sur un fichier dans le même répertoire local. Le programme reste en cours d'exécution jusqu'à ce que l'utilisateur appuie sur une touche puis débloquer le fichier. Voici ce qui se passe:

  • Si lancé à l'invite de commande et tué dans taskmanager, il libère le verrou. Le processus à tuer est le cmd.exe spécifique qui a lancé le programme. Le fait de le tuer libère le verrouillage.

  • Si vous lancer en cliquant, puis en la casse en fermant la fenêtre, le verrou est relâché.

  • Toutefois, s'il est lancé en cliquant, puis en tuant le conhost.exe dans taskmanager, il ne relâche pas le verrou. Dans ce cas, il n'y a pas non plus de cmd.exe car il a été cliqué. Donc, la seule façon de le tuer est de tuer le conhost.exe ou ntvdm.exe. Il est en cours d'exécution. La serrure reste en place jusqu'à la redémarrage.

  • Si vous lancez en cliquant, puis en tuer le ntvdm.exe dans taskmanager, il libère le verrou.

  • À aucun moment, le verrou exclusif empêche le fichier d'être supprimé. Toutefois, Windows ne permet pas de copier le fichier dans l'explorateur pendant que le verrou est en place.

Donc, deux comportements différents selon que la tâche est lancée via l'invite cmd ou en cliquant et en tuant le sous-système conhost ou ntvdm. Bien sûr, le fait de tuer le sous-système ntvdm.exe tue également tout autre processus chargé du thread ntvdm.

Oui, les verrous restent, mais vous ne pouvez pas prédire quand ils seront diffusés par le système d'exploitation. Voir LockFile () et LockFileEx () :

Si un processus se termine avec une partie d'un fichier verrouillé ou ferme un fichier qui a des verrous en suspens, les verrous sont débloqués par le système d'exploitation. Toutefois, le temps nécessaire pour déverrouiller ces verrous pour le système d'exploitation dépend des ressources système disponibles. Par conséquent, il est recommandé que votre processus déverrouille explicitement tous les fichiers qu'il a verrouillés lorsqu'il s'est terminé. Si cela n'est pas fait, l'accès à ces fichiers peut être refusé si le système d'exploitation ne les a pas encore déverrouillés.