Получение прав доступа активного пользователя - PullRequest
0 голосов
/ 27 мая 2009

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

Я хотел бы предоставить поисковому механизму привилегии доступа активного пользователя, когда он запущен, как мне этого добиться.

1 Ответ

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

В большинстве случаев правильный ответ таков: вы не должны.

Ваш алгоритм должен перехватить исключение UnauthorizedAccessException, признать, что ему не разрешено перемещаться дальше по этой папке, и действовать так, как будто папка пуста.

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

Папки, защищенные правами некоторых других пользователей, являются «частными». Программа, которую запускает "Джо", не должна просматривать папки, которые принадлежат "Мэри". Вот и весь смысл разрешений.

Существует очень мало контролируемых исключений из правила. Общеизвестно, что Disk Backup и антивирусные приложения должны иметь возможность перемещаться по всему диску независимо от прав доступа к папке. Они делают это, настраивая службу, которая работает под учетной записью с высоким уровнем привилегий (может быть, «SYSTEM», может быть, что-то еще). Скорее всего, это будет учетная запись с SeBackupPrivilege.

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

Дело не в том, что это "перебор"; это то, что это "неправильно". Не играет по правилам.

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