В чем разница: LoadUserProfile -vs- RegOpenCurrentUser - PullRequest
4 голосов
/ 20 января 2009

Эти два API очень похожи, но неясно, в чем заключаются различия и когда каждый из них должен использоваться (за исключением того, что LoadUserProfile указан для использования с CreateProcessAsUser, который я не использую. Я просто выдает себя за доступ к ульям).

LoadUserProfile http://msdn.microsoft.com/en-us/library/bb762281(VS.85).aspx

RegOpenCurrentUser http://msdn.microsoft.com/en-us/library/ms724894(VS.85).aspx

Согласно статье «Услуги и реестр»: http://msdn.microsoft.com/en-us/library/ms685145(VS.85).aspx мы должны использовать RegOpenCurrentUser при олицетворении.

Но что делает / должен RegOpenCurrentUser делать, если профиль пользователя находится в роуминге - должен ли он его загружать?

Насколько я могу судить по этим документам, оба API предоставляют дескриптор HKEY_CURRENT_USER для пользователя, которого поток исполняет. Поэтому они оба «загружают» улей, то есть блокируют его как файл базы данных и дают ему указатель на API-интерфейсы реестра.

Может показаться, что LoadUserProfile загружает профиль пользователя так же, как и пользователь, когда он / она входит в систему, тогда как RegOpenCurrentUser - нет - это правильно? В чем принципиальная разница (если таковая имеется) в том, как эти два API монтируют улей?

Каковы последствия и различия (если таковые имеются) между тем, что происходит, ЕСЛИ

  1. Пользователь входит в систему или выходит из системы, когда каждый из этих олицетворенных дескрипторов уже используется?

  2. Пользователь уже вошел в систему при вызове каждой соответствующей функции закрытия (RegCloseKey и UnloadUserProfile)?

Ответы [ 3 ]

1 голос
/ 09 декабря 2010

Поскольку я сейчас пытаюсь сделать то же самое, что и вы, я подумал, что смогу присоединиться к тому, что нашел за последние несколько дней.

Я работаю в среде Windows XP sp3 и пытаюсь добиться олицетворения с помощью доступа к реестру CurrentUser в двух разных сценариях

Если вы обнаружите что-нибудь полезное, я был бы очень признателен, если бы вы поделились своим опытом. Мой вопрос о переполнении стека можно найти здесь

Администратор> Ограниченный пользователь и ограниченный пользователь> Администратор

Что я заметил до сих пор (в Windows XP sp3)

LoadUserProfile ():

Работает только в том случае, если у олицетворяющего пользователя включены привилегии SeRestoreName и SeBackupName среди других (простого включения этих двух для ограниченного пользователя было недостаточно, так как он все еще не удался с ошибкой запрещенного доступа - см. Мой вопрос StackOverflow для получения более подробной информации ). Пока я могу успешно звонить LoadUserProfile() только с помощью учетной записи администратора, прежде чем начинать олицетворение.

RegOpenCurrentUser ():

Работает «правильно» только тогда, когда профиль пользователя уже загружен. При каждой попытке, которую я сделал до сих пор, я могу получить указатель на улей S-1-5-18, только если пользовательский улей не загружен и доступно под HKEY_USERS уже

1 голос
/ 08 мая 2009

Но что делает / должен RegOpenCurrentUser делать, если профиль пользователя находится в роуминге - должен ли он его загружать?

Не загружает профиль. Подумайте об этом так: если это произойдет, вам придется каким-то образом вызвать UnloadUserProfile(), когда закончите с дескриптором, на HKEY_CURRENT_USER.

Может показаться, что LoadUserProfile загружает профиль пользователя так же, как и пользователь, когда он / она входит в систему, тогда как RegOpenCurrentUser - нет - это правильно?

Да.

В чем принципиальная разница (если таковая имеется) в том, как эти два API монтируют улей?

Отсутствует.

Каковы последствия и различия (если таковые имеются) между тем, что происходит, ЕСЛИ Пользователь входит или выходит из системы, когда каждый из этих олицетворенных дескрипторов уже используется?

Они получат свою собственную ручку (к тому же ключу), которая открыта и закрыта.

Пользователь уже вошел в систему при вызове каждой соответствующей функции закрытия (RegCloseKey и UnloadUserProfile)?

Ditto.

0 голосов
/ 29 июля 2016

Две функции используются в разных ситуациях.

LoadUserProfile подходит, если профиль пользователя еще не загружен.

RegOpenCurrentUser подходит, если профиль пользователя уже загружен , т. Е. Если вы хотите получить доступ к кусту реестра для пользователя, который уже интерактивно вошел в систему.

Обратите внимание, что LoadUserProfile обычно называется без олицетворения (потому что вы должны иметь привилегию администратора для его использования), но RegOpenCurrentUser должен называться с олицетворением.

...