Я использую следующий код для отключения диспетчера задач:
RegistryKey regKey;
string subKey = @"Software\Microsoft\Windows\CurrentVersion\Policies\System";
regKey = Registry.CurrentUser.CreateSubKey(subKey);
regKey.SetValue("DisableTaskMgr", 1);
regKey.Close();
Моя программа работает с правами администратора. Когда я запускаю его от пользователя, не являющегося администратором (я ввожу пароль пользователя с правами администратора, чтобы запустить его), он не работает (раздел реестра успешно создан, но диспетчер задач не отключен). Когда я запускаю его от имени администратора, он работает.
У кого-нибудь есть решение для этого?
Значит, нет возможности редактировать стандартный реестр из-под администратора?
Ты можешь. Вы просто не можете использовать CurrentUser для этого. Вы должны перейти к Registry.Users + пользователь, чей реестр вы хотите отредактировать.
Отвечает ли это на ваш вопрос? Редактировать раздел реестра другого пользователя
Я пытался отредактировать реестр текущего пользователя (моя программа работает от имени администратора), а связанный с вами вопрос касается редактирования реестра другого пользователя.
Есть два пользователя. Исходный пользователь, запросивший повышение прав. И администратор, который в конечном итоге запускает программу. Поскольку вы хотите отредактировать исходный реестр пользователя из программы пользователя-администратора, это считается редактированием раздела реестра другого пользователя. Другой пользователь является первоначальным пользователем.





Я решил проблему благодаря комментарию @RaymondChen.
ManagementObjectSearcher searcher = new ManagementObjectSearcher(
"SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];
NTAccount account = new NTAccount(username);
SecurityIdentifier securityIdentifier = (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
string sid = securityIdentifier.ToString();
string subKey = $@"{sid}\Software\Microsoft\Windows\CurrentVersion\Policies\System";
RegistryKey regKey = Registry.Users.CreateSubKey(subKey);
regKey.SetValue("DisableTaskMgr", 1);
regKey.Close();
«В сеансе служб терминалов UserName возвращает имя пользователя, вошедшего в консоль, а не пользователя, вошедшего в систему во время сеанса службы терминалов». Вам нужен пользователь, вошедший в сеанс. Также обратите внимание, что поддерживаемый способ отключения диспетчера задач — через групповую политику, а не путем редактирования реестра.
Процесс администратора имеет реестр администратора как Registry.CurrentUser, поэтому вы редактируете реестр администратора, а не обычного пользователя. (Если бы это был реестр обычного пользователя, то у вас была бы уязвимость, связанная с инъекцией, потому что обычный пользователь мог бы делать такие вещи, как настроить автозапуск на что-то вредоносное.)