Лучший отвечающий
Как заблокировать папку на время пока с ней работает программа с помощью Win32 API?

Вопрос
-
Добрый день.
Как с помощью Win32 API-функций заблокировать папку на время, пока с ней работает программа?
Например, программа просматривает файлы в папке. Или программа удаляет папку.
Как сделать, чтобы в это время другие пользователи и другие программы на этом же компьютере не могли в этой папке:
* создавать, удалять папки, файлы
* открывать файлы в режиме "ReadWrite"?
При этом моя программа могла делать действия в режиме "ReadWrite".
- Изменено Arankev 7 октября 2019 г. 13:37
5 октября 2019 г. 9:26
Ответы
-
Я думаю ответ "никак". Путем написания своего драйвера - может быть, но в обычном WinAPI ничего не припомню подходящего под это специфичное сочетание требований.
LockFile принимает дескриптор файла, который может представлять и папку, но это все равно ничего не даст для решения задачи. Даже если это сработает, оно заблокирует эту папку наглухо, так что работать с ней можно будет только через тот же дескриптор, путем побайтовой модификации NTFS-структур. Это явно не то, что нужно...
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 8 октября 2019 г. 8:44
7 октября 2019 г. 17:16
Все ответы
-
Здравствуйте,
Можно закрыть доступ к файлу через: LockFile function
Другой вариант смотреть в сторону Access Control Lists
Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
7 октября 2019 г. 8:09Модератор -
Добавил ещё одно условие в первом посте. Другие программы на этом же компьютере тоже не должны иметь доступ.
Access Control Lists - не блокирует другие программы на этом же компьютере.
LockFile function. Я начал читать справку, в ней не упоминается папка. У меня вопрос в первом посте про папку.
7 октября 2019 г. 13:41 -
Я думаю ответ "никак". Путем написания своего драйвера - может быть, но в обычном WinAPI ничего не припомню подходящего под это специфичное сочетание требований.
LockFile принимает дескриптор файла, который может представлять и папку, но это все равно ничего не даст для решения задачи. Даже если это сработает, оно заблокирует эту папку наглухо, так что работать с ней можно будет только через тот же дескриптор, путем побайтовой модификации NTFS-структур. Это явно не то, что нужно...
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 8 октября 2019 г. 8:44
7 октября 2019 г. 17:16 -
Цитата:
ничего не припомню подходящего под это специфичное сочетание требований
Подцитата:
специфичное
На первый взгляд ничего специфического не вижу.
Представим ситуацию: программа должна удалить папку с помощью функции "RemoveDirectory". В папке есть файлы. Программа удалила все файлы с помощью функции "DeleteFile". Теперь программа стала удалять папку с помощью "RemoveDirectory", но юзер создал в этой папке файл. Папка не может быть удалена.
Если папку заблокировать, то такой сложной ситуации не будет.
Не могу понять, почему программистам такая задача кажется специфической.30 ноября 2019 г. 12:10