Токена у меня было недостаточно, чтобы получить доступ на запись в реестр. Я собираюсь использовать службу 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);
}

Ответы на вопрос(3)

Ваш ответ на вопрос