Запись службы 32-битной Windows в 64-битный реестр.(AutoAdminLogon Keys) - PullRequest
6 голосов
/ 21 марта 2012

// Редактировать: Ух ты. Странно, что я работал над этим уже целый день и просто понял, что мне нужно сделать:

key = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);

А потом все заработало. Я не знал, что ты должен был сделать это. Спасибо всем, кто откликнулся. Я просто возился, искал свой ключ и заметил, что его кладут не в том месте.

// Оригинальный вопрос:

Я не видел работающего решения для этого, и я не уверен, что это ошибка.

У меня есть 32-битная служба Windows C #, работающая в 64-битной Windows 7. Моя цель - записать в 64-битный реестр, а не в подраздел Wow6432Node, поскольку для AutoAdminLogon 64-битная система, похоже, не проверяет 32-битное представление ключей.

Итак, мой код выглядит следующим образом:

static public void LoginAsGuest(EventLog eventLogger)
{
    RegistrySecurity userSecurity = new RegistrySecurity();
    RegistryAccessRule userRule = new RegistryAccessRule("Everyone", RegistryRights.FullControl, AccessControlType.Allow);
    userSecurity.AddAccessRule(userRule);

    var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
    key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", RegistryKeyPermissionCheck.ReadWriteSubTree);

    if (key == null)
    {
        eventLogger.WriteEntry("Error accessing the registry key");
    }
    else
    {
        try
        {
            key.SetValue("AutoAdminLogon", "1", RegistryValueKind.String);
            key.SetValue("DefaultUserName", "guest", RegistryValueKind.String);
            key.SetValue("DefaultPassword", "password", RegistryValueKind.String);
        }
        catch (Exception exception)
        {
            eventLogger.WriteEntry("Problem setting up keys: " + exception);
        }
    }
    key.Close();

    Reboot();
}

Нет исключений или выдается ошибка. Ничего не записывается в реестр в 32-битном или 64-битном представлении. Я пытался использовать:

key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);

Но это имеет тот же результат. Теперь, если я просто пишу без просмотра, моя программа успешно записывает в подраздел:

SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon

В общем, все, что я хочу, это написать в подраздел:

SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

Кто-нибудь знает, почему вышеприведенный код не записывает запрошенный ключ? (Я укажу, что AutoAdminLogon и другие два ключа используются поставщиком учетных данных Windows по умолчанию, так что при запуске Windows он проверяет эти ключи, а если AutoAdminLogon имеет значение 1, то он автоматически входит в систему с заданными именем пользователя и паролем. I ' я делаю это, чтобы разрешить вход в систему компьютера в качестве гостя, установив ключи и перезагрузив компьютер).

1 Ответ

2 голосов
/ 22 марта 2012

Странно, что я работаю над этим уже целый день и просто осознал, что мне нужно сделать:

key = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);

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

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