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

  • Вопрос

  • Добрый день.

    Как с помощью Win32 API-функций заблокировать папку на время, пока с ней работает программа?
    Например, программа просматривает файлы в папке. Или программа удаляет папку.
    Как сделать, чтобы в это время другие пользователи и другие программы на этом же компьютере не могли в этой папке:
    * создавать, удалять папки, файлы
    * открывать файлы в режиме "ReadWrite"?
    При этом моя программа могла делать действия в режиме "ReadWrite".




    • Изменено Arankev 7 октября 2019 г. 13:37
    5 октября 2019 г. 9:26

Ответы

  • Я думаю ответ "никак". Путем написания своего драйвера - может быть, но в обычном WinAPI ничего не припомню подходящего под это специфичное сочетание требований.

    LockFile принимает дескриптор файла, который может представлять и папку, но это все равно ничего не даст для решения задачи. Даже если это сработает, оно заблокирует эту папку наглухо, так что работать с ней можно будет только через тот же дескриптор, путем побайтовой модификации NTFS-структур. Это явно не то, что нужно...

    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-структур. Это явно не то, что нужно...

    7 октября 2019 г. 17:16
  • Цитата:
    ничего не припомню подходящего под это специфичное сочетание требований
    Подцитата:
    специфичное

    На первый взгляд ничего специфического не вижу.
    Представим ситуацию: программа должна удалить папку с помощью функции "RemoveDirectory". В папке есть файлы. Программа удалила все файлы с помощью функции "DeleteFile". Теперь программа стала удалять папку с помощью "RemoveDirectory", но юзер создал в этой папке файл. Папка не может быть удалена.
    Если папку заблокировать, то такой сложной ситуации не будет.
    Не могу понять, почему программистам такая задача кажется специфической.
    30 ноября 2019 г. 12:10