Файлы остаются на диске, даже если они созданы с атрибутом FILE_FLAG_DELETE_ON_CLOSE - PullRequest
1 голос
/ 27 мая 2020

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

CreateFile(fileName,
        GENERIC_READ,
        FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
        NULL,
        OPEN_ALWAYS,
        FILE_FLAG_DELETE_ON_CLOSE,
        NULL);

Примечание. Я уверен, что на 100% ни один другой процесс не хранит дескриптор этих файлов. Кроме того, все дескрипторы (OpenFile, CreateFile) создаются с атрибутом FILE_FLAG_DELETE_ON_CLOSE.

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

1 Ответ

0 голосов
/ 27 мая 2020

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

У вас может быть программа, которая вызывала WriteFile, но была принудительно завершена (так что дескриптор был закрыт), и ожидающий IRP держит файл. Этот IRP не позволит освободить файл до тех пор, пока его счетчик ссылок в ядре не достигнет 0. Поскольку IRP еще не завершен, он не равен нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...