Quelle est la différence: LoadUserProfile -vs- RegOpenCurrentUser

Ces deux API sont très similaires, mais on ne sait pas exactement quelles sont les différences et à quel moment elles doivent être utilisées (sauf que LoadUserProfile est spécifié pour être utilisé avec CreateProcessAsUser que je n’utilise pas.

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

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

Selon l’article Services & Registry: http://msdn.microsoft.com/en-us/library/ms685145(VS.85).aspx, nous devons utiliser RegOpenCurrentUser lors de l’emprunt d’identité.

Mais que fait / devrait RegOpenCurrentUser si le profil utilisateur est en itinérance – devrait-il le charger?

Autant que je sache à partir de ces documents, les deux API fournissent un handle à HKEY_CURRENT_USER pour l’utilisateur dont le thread emprunte l’identité. Par conséquent, ils «chargent» tous les deux la hive, c’est-à-dire la verrouillent en tant que fichier de firebase database et lui atsortingbuent un identifiant pour les API de registre.

LoadUserProfile peut sembler charger le profil utilisateur de la même manière que l’utilisateur lorsqu’il se connecte, alors que RegOpenCurrentUser ne le fait pas – est-ce correct? Quelle est la différence fondamentale (le cas échéant) dans la façon dont ces deux API montent la hive?

Quelles sont les implications et les différences (le cas échéant) entre ce qui se passe SI

  1. Un utilisateur se connecte ou se déconnecte pendant que chacun de ces identificateurs est déjà utilisé?

  2. Un utilisateur est déjà connecté lorsque chaque fonction de fermeture correspondante (RegCloseKey et UnloadUserProfile) est appelée?

Mais que fait / devrait RegOpenCurrentUser si le profil utilisateur est en itinérance – devrait-il le charger?

Il ne charge pas le profil. Pensez-y de cette façon: si c’était le cas, vous devriez appeler UnloadUserProfile() quand vous avez fini avec le handle de HKEY_CURRENT_USER .

LoadUserProfile peut sembler charger le profil utilisateur de la même manière que l’utilisateur lorsqu’il se connecte, alors que RegOpenCurrentUser ne le fait pas – est-ce correct?

Oui.

Quelle est la différence fondamentale (le cas échéant) dans la façon dont ces deux API montent la hive?

Aucun.

Quelles sont les implications et les différences (le cas échéant) entre ce qui se produit SI un utilisateur se connecte ou se déconnecte alors que chacun de ces identificateurs est déjà utilisé?

Ils auront leur propre poignée (à la même clé) qui est ouverte et fermée.

Un utilisateur est déjà connecté lorsque chaque fonction de fermeture correspondante (RegCloseKey et UnloadUserProfile) est appelée?

Idem.

Comme je suis en train d’essayer de réaliser la même chose que vous, j’ai pensé que je ferais écho à ce que j’ai trouvé ces derniers jours.

Je travaille dans un environnement Windows XP sp3 et essaie d’obtenir une usurpation d’identité avec l’access au registre CurrentUser dans deux scénarios différents

Si vous rencontrez quelque chose d’utile, je vous serais très reconnaissant de partager votre expérience. Ma question de débordement de stack peut être trouvée ici

Administrateur> Utilisateur limité et utilisateur limité> Administrateur

Ce que j’ai remarqué jusqu’à présent est (dans Windows XP sp3)

LoadUserProfile ():

Ne fonctionne que lorsque l’utilisateur possède des privilèges SeRestoreName et SeBackupName entre autres (activer simplement ces deux pour l’utilisateur limité en question n’était pas suffisant car il a toujours échoué avec une erreur d’access refusé – Consultez ma question StackOverflow pour plus de détails). La seule façon dont je peux appeler LoadUserProfile() avec succès est de le faire par un compte d’administrateur avant de commencer l’emprunt d’identité.

RegOpenCurrentUser ():

Ne fonctionne que “correctement” lorsque le profil de l’utilisateur est déjà chargé. A chaque tentative que j’ai faite jusqu’à présent, je ne peux obtenir un handle vers la hive S-1-5-18 que si la hive de l’utilisateur est chargée et accessible sous HKEY_USERS déjà

Les deux fonctions sont utilisées dans différentes situations.

LoadUserProfile est adapté si le profil utilisateur n’est pas déjà chargé.

RegOpenCurrentUser convient si le profil utilisateur est déjà chargé, c’est-à-dire si vous souhaitez accéder à la hive du registre pour un utilisateur déjà connecté de manière interactive.

Notez que LoadUserProfile est généralement appelé sans emprunt d’identité (car vous devez avoir le privilège d’administrateur pour l’utiliser), mais RegOpenCurrentUser doit être appelé avec l’ emprunt d’ identité.