(VB.NET) Есть ли способ «заблокировать» папку Windows и ее содержимое?

Я хочу иметь защищенную папку (папки) программы VB.NET, которая содержит несколько разных файлов, поэтому файлы внутри нельзя редактировать, если только программа не «разблокирует» папку в Windows. Это возможно? Я не хочу, чтобы папка/файлы были скрыты просто по существу в каком-то состоянии «Только для чтения» или что-то в этом роде или подделывали окна, думая, что они уже открыты. Цель состоит в том, что если кто-то открывает файлы без «разблокировки» программы, они не могут редактировать/сохранять изменения.

Происходит ли редактирование в вашем приложении? Или ваше приложение запускает связанное приложение? Например. запустить Excel для файлов *,xlsx в папке.

Hel O'Ween 04.11.2022 16:41

Является ли «разблокировка» путешествием в один конец или папка должна снова стать заблокированной? Что должно произойти с программой, у которой есть открытые дескрипторы для защищенных файлов, когда папка снова становится заблокированной? Очень сомнительно, что вы сможете сделать это, используя чистый .NET - существующие решения для «безопасной папки» устанавливают драйверы режима ядра для перехвата доступа. Однако, если вы можете оставить существующие дескрипторы открытыми, вы можете что-то сделать, отредактировав ACL.

Ben Voigt 04.11.2022 18:12

Мое приложение не открывает/использует папки или файлы, оно просто управляет ими. Я хочу иметь возможность открывать свою программу, выбирать папку и «запирать» ее, а также «разблокировать». Но мне нужно, чтобы файлы оставались «заблокированными» только для чтения или в таком состоянии даже после закрытия приложения. Затем можно было бы использовать приложение для изменения состояния, если это необходимо. Но я не хочу, чтобы файлы были скрыты. Мне все еще нужна прозрачность того, что они существуют.

Mike 04.11.2022 19:07

Объем проекта заключается в блокировке файлов для управления версиями, например, в программе «Vault», но количество файлов, которыми мы хотим управлять, невелико по сравнению со стоимостью такой программы, которая может входить в файл и выходить из него. Я не пытаюсь «заблокировать» файл в том смысле, что он нечитаем или скрыт; просто чтобы люди не могли вносить изменения. Мне очень нужны файлы в целости и сохранности.

Mike 04.11.2022 20:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
73
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Возможно, эта статья будет вам полезна:

Как защитить паролем папку в Windows 10

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

Основные понятия диспетчера фильтров

https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/filter-manager-concepts

Обработка операций ввода/вывода

https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/processing-i-o-operations

Связь между режимом пользователя и режимом ядра

https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/communication-between-user-mode-and-kernel-mode

Написание подпрограмм обратного вызова перед операцией

https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/writing-preoperation-callback-routines

Завершение операции ввода-вывода в подпрограмме обратного вызова перед операцией

https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/completing-an-i-o-operation-in-a-preoperation-callback-routine

Ответ принят как подходящий

К моему удивлению, простое создание файла/папки с атрибутом «Только для чтения» решает мою проблему именно так, как я хотел. Пример кода для создания файла или папки только для чтения приведен ниже:

Dim LockFolder As New ProcessStartInfo("cmd", "/c ATTRIB +R " + """" + Application.StartupPath() + "\" + SelectedNodeText + """\* /S /D") _
   With {.WindowStyle = ProcessWindowStyle.Hidden, .Verb = "runas"}
Process.Start(LockFolder)
'===== FILE LOCK:
Dim LockFile As New ProcessStartInfo("cmd", "/c ATTRIB +R " + """" + Application.StartupPath() + "\" + SelectedNodeText + """") _
   With {.WindowStyle = ProcessWindowStyle.Hidden, .Verb = "runas"}
Process.Start(LockFile)

Application.StartupPath — это первая половина моего пути, а SelectedNodeText — фактическое имя файла, которое завершает команду CMD. Остальное - просто заставить команду работать от имени администратора и не иметь всплывающего командного окна.

Другие вопросы по теме