Редактирование реестра пользователя в \HKEY_USERS\<SID пользователя>\. Загрузка куста пользователя

158
22 января 2019, 04:50

Необходимо изменить/прочитать/добавить переменную Shell в реестре Windows по пути \HKEY_USERS\\Software\Microsoft\Windows NT\CurrentVersion\Winlogon для каждого пользователя. Однако в \HKEY_USERS\ находятся только пользователи, у которых выполнен вход. Если я правильно понял из статей в интернете, то нужно загружать кусты пользователей в реестр, хранящиеся в C:\Users\<Имя пользователя>\NTUSER.DAT, что я и попытался сделать:

[DllImport("advapi32.dll", SetLastError = true)]
static extern Int32 RegLoadKey(UInt32 hKey, String lpSubKey, String lpFile);
public enum HKEY : uint
{
        LOCAL_MACHINE = 0x80000002,
        USERS = 0x80000003
}

static void LoadUserHive()
{
    string path = "C:\\Users\\Max\\NTUSER.DAT";
    string SID = "S-1-5-21-2185061059-2250993091-2609513880-1001";
    RegLoadKey((uint)HKEY.USERS, SID, path);
}

Код выполняется без ошибок, но куста пользователя в \HKEY_USERS\ не наблюдается.

Подскажите, что я делаю не так

Answer 1

В данном случае, RegLoadKey() в случае ошибки не выдает исключений. Функция RegLoadKey() возвращает ноль в случае удачи, либо код ошибки int определенный в Winerror.h (класс для расшифорвки кодов ошибок для C# можно взять отсюда http://www.pinvoke.net/default.aspx/Constants.WINERROR).

Помимо прав администратора, для выполнения функции также обязательны привилегии SE_RESTORE_NAME и SE_BACKUP_NAME. Процесс их установки описан для C++ здесь https://docs.microsoft.com/ru-ru/windows/desktop/SecAuthZ/enabling-and-disabling-privileges-in-c--. Не составит труда перевести код из данного примера в C#. Либо можно использовать уже готовый класс для C# https://pastebin.com/R5HxeHnm.

READ ALSO
Как заполнить LIst&lt;int&gt; числами вводимыми через textbox?(c#)

Как заполнить LIst<int> числами вводимыми через textbox?(c#)

Имеется List, в который через форму с textbox-ом надо ввести числаЧисла вводятся в textbox через пробел потом по нажатию нa button добавляются в List

174
Как правильно обрабатывать событие Click в WinForms? C#

Как правильно обрабатывать событие Click в WinForms? C#

Есть форма Form1 и одна единственная кнопка button1

184
Запрос к таблице

Запрос к таблице

Как можно сделать вот такой запрос к таблице: "/responsephp?que=есть"? У меня работает только с цифрами

155
Переход с мобильной версии на полную версию сайта

Переход с мобильной версии на полную версию сайта

Я сделал сайт с мобильной версиейПереход с основного сайта на мобильный субдомен осуществляется через PHP код

173