Representar conta de administrador para editar a chave do Registro não está funcionando (C #)
Estou usando o código a seguir para editar uma chave do Registro na seção da máquina local ('SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \% SID%'). Tudo parece estar bem até eu realmente tentar abrir a chave do registro (com permissões de gravação); uma SecurityException é lançada com a mensagem 'O acesso ao registro solicitado não é permitido.' Eu verifiquei e verifiquei novamente as permissões para a chave do registro e o usuário que estou representando e tudo sai. O código funciona bem quando conectado à conta do usuário representado, mas quando conectado como usuário restrito, ele falha. É como se a representação funcionasse tudo, exceto para conceder privilégios administrativos ao encadeamento. Qualquer idéia sobre como consertar isso seria muito apreciada!
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);
}