Токена у меня было недостаточно, чтобы получить доступ на запись в реестр. Я собираюсь использовать службу Windows, работающую как система, чтобы выполнить это вместо этого.
ользую следующий код для редактирования раздела реестра в кусте локального компьютера ('ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \% SID%'). Кажется, все в порядке, пока я не попытаюсь открыть раздел реестра (с правами на запись); возникает исключение SecurityException с сообщением «Запрошенный доступ к реестру запрещен». Я проверил и перепроверил разрешения для ключа реестра и пользователя, которого я олицетворял, и все это проверено. Код работает нормально при входе в учетную запись олицетворенного пользователя, но при входе в систему как пользователь с ограниченными правами происходит сбой. Это как если бы олицетворение работало все, кроме предоставления административным привилегиям потока. Любые идеи о том, как это исправить, будут с благодарностью!
string KEY_STR = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\" + WindowsIdentity.GetCurrent().User.Value;
WindowsImpersonationContext adminContext = null;
IntPtr tokenHandle = new IntPtr(0);
try
{
LogonUser(userName, domainName, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle);
if (tokenHandle.Equals(new IntPtr(0))) LogonUser(userName, computerName, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle);
WindowsIdentity adminIdentity = new WindowsIdentity(tokenHandle);
adminContext = adminIdentity.Impersonate();
RegistryKey key = Registry.LocalMachine.OpenSubKey(KEY_STR, true);
key.SetValue("State", 0x60001);
Console.Out.WriteLine("User profile changed to Mandatory.");
}
catch (Exception ex)
{
Console.Out.WriteLine("\nUnable to set profile to Mandatory:\n\t" + ex.Message);
}
finally
{
adminContext.Undo();
if (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle);
}