Мне просто было интересно, как старые версии Windows не говорили вам, какие именно программы использовали определенный файл, чтобы вы не могли их переместить. Но более новые версии, как правило, говорят вам, что определенная программа обращается к файлу или что он открыт в этой конкретной программе.

Например, пытаясь переместить PDF-файл с рабочего стола в другую папку, у меня появилось окно Windows 8.1 с надписью:

Файл нельзя переместить, поскольку он открыт в Adobe Reader.

Теперь, как программа копирования извлекает информацию о том, что Adobe Reader - это программа, блокирующая PDF-файл?

Я имею в виду просто знать основные детали ОС, даже если для Windows. Ответы для других ОС также приветствуются. (Я хотел бы знать, как вы можете получить такую информацию в своих собственных программах на C).

2 ответа2

0

Все версии Windows всегда "знали", какой исполняемый файл заблокировал файл, он просто предоставлял вам любую информацию при попытке перемещения заблокированного файла. Вы могли видеть эту информацию в более старых версиях Windows с такими программами, как FileMon. В более новых версиях Windows монитор ресурсов мог предоставлять эту информацию, но его было непросто использовать.

Я предполагаю, что Windows 8 просто связывает исполняемый файл с блокировкой файла с File description в свойствах исполняемого файла. Смотрите изображение ниже, это скриншот свойств acrord32.exe.

0

Все Windows начиная с версии 2000 позволяют управлять блокировками файлов для сетевых файлов и папок через Управление компьютером. Если это касается и вас, вы можете использовать этот метод для просмотра и снятия блокировки.

Зайдите в Control Panel -> Administrative Tasks -> Computer Management .

С левой стороны откройте Shared Folders нажмите « Open Files .

Некоторая справочная информация

Когда вы выполняете операцию над файлом, Windows (или любая другая ОС) открывает файл для чтения, чтения / записи или произвольного доступа. Последние два требуют, чтобы файл был записан в. Поэтому окна инициируют блокировку записи в файл и помечают этот файл в таблице содержания жесткого диска как "записанный в" или "заблокированный от записи". В зависимости от того, какую файловую систему вы используете, сохраняется или нет информация о том, какая программа записывает в файл. Для доступа к сети это хранится не в файле, а в базе данных, которая доступна, как описано выше. В других случаях идентификатор процесса сохраняется вдоль блокировки, указывая, откуда произошла блокировка.

Когда процесс больше не нуждается в записи в файл, он снимает блокировку и, таким образом, удаляет флаг в таблице содержимого файловой системы, в которую записывается файл.

Инструменты разблокировки могут по желанию убрать этот флаг, но если процесс действительно записывает файл, он может повредить сам файл. Однако иногда файл открывается для чтения / записи или произвольного доступа без записи на него, однако блокировка остается на него в случае, если пользователь выполняет действие, которое необходимо записать в файл на более позднем этапе. Также может случиться так, что программа потерпела крах до снятия блокировки, но каким-то образом эта блокировка все еще действует, потому что часть программы, которая больше не доступна для пользователя, кроме как через службу или бездействующий процесс (вы не знаете, какой один). В этом случае поможет разблокировка или перезагрузка.

Инструменты разблокировки наиболее эффективны, когда вы не хотите перезагружаться или программа, которая запускается при загрузке, блокирует файл, и вы просто получаете блокировку при каждой загрузке. (подумайте о шпионских программах или утилитах, которые вы хотите переместить, но не можете. Обратите внимание, что если вы не можете переместить утилиту, потому что она используется, вы не должны двигаться, если не знаете, что делаете.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .