Как запустить приложение C # в гостевой учетной записи от имени администратора - PullRequest
4 голосов
/ 09 августа 2011

Я не получил правильный ответ и получил много ответов типа «мы не можем так поступить» на мои предыдущие вопросы.

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

Теперь моя проблема:

Шаг 1:

Я создал программу на C #, которая редактирует различные реестры Windows. Для редактирования реестров окон у нас должна быть привилегия администратора. Моя программа работает нормально в режиме администратора без каких-либо проблем.

Шаг 2:

Я хочу, чтобы моя программа работала в режиме ограниченного пользователя. Если мало кто не понял, что я здесь говорю, это то, что я хочу запустить приведенный выше код C # в режиме гостя. В гостевом режиме есть ограничение, что мы не можем изменять реестры Windows. Так как я выполняю свое приложение, я получаю одно уведомление с запросом пароля администратора. После ввода пароля администратора мое приложение работает нормально.

Шаг 3:

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

Шаг 4:

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

Шаг 5:

  1. Поскольку я знаю пароль администратора, есть ли способ сохранить пароль администратора в нашем коде C # и обойти всплывающее сообщение с запросом пароля администратора снова и снова.

  2. Есть ли способ, которым мы сообщим Windows, что наше приложение будет работать в режиме администратора и не будет снова и снова запрашивать пароль администратора

  3. Как антивирусное приложение, работающее в гостевом режиме, выполняет все операции, такие как удаление вируса из папки system32 и сброс реестров после вирусной атаки. Это антивирусное приложение никогда не запрашивает «Мы обнаружили вирус в папке System32, так как я работаю в гостевом режиме и не могу удалить вирус, поэтому, пожалуйста, введите пароль администратора, чтобы я мог удалить вирус»

Надеюсь, вы поняли, о чем я хочу спросить?

Я хочу разработать приложение на C #, которое должно работать в любом режиме (Admin / Guest / Limited) и иметь возможность создавать, редактировать и удалять реестры Windows.

Примечание. Пожалуйста, не отвечайте на это "щелчком правой кнопкой мыши и запуском от имени администратора".

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Насколько мне известно, антивирусное программное обеспечение решает эту проблему, выполняя два (или более) процесса: программу с пользовательским интерфейсом, выполняемую в качестве гостя, и привилегированный процесс (обычно служба Windows). Пользовательская программа не может фактически манипулировать ресурсами с ограниченными привилегиями (например, защищенными кустами реестра) - вместо этого она связывается с привилегированным процессом (надеюсь, некоторым безопасным способом), и привилегированный процесс выполняет привилегированное действие от имени пользователя.

Это тот же метод, с помощью которого программы ever получают доступ к привилегированным ресурсам, таким как оборудование. Ваш пользовательский процесс (как правило) не имеет права выполнять различные аппаратные действия, такие как переназначение памяти в MMU, но ОС делает это, и вы можете заставить ОС делать то, что вы хотите, попросив об этом. Системные вызовы thunk в режиме ядра, который полностью привилегирован. Однако интерфейс системного вызова ограничивает виды привилегированных действий, которые вы можете выполнять.

1 голос
/ 09 августа 2011

Не могу не сказать, что НЕТ, вы не можете выполнять действия администратора под учетной записью гостя. И нет, вы не можете программно обойти UAC.

Может быть, следующие 2 обходных пути вас интересуют?

Я считаю, что антивирусное программное обеспечение работает под системной учетной записью (может быть установлено только администратором). Для вашего приложения вы можете создать серверную / клиентскую архитектуру (обе работают не на одной машине), где сервер устанавливается администратором (как часть всего пакета) и запускается по умолчанию под системной учетной записью. Затем вы можете использовать клиент в учетной записи квеста для отправки команд на сервер.

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

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