c # - Sådan redigeres registreringsnøglerne til en bestemt bruger programatisk?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil ændre nogle få indstillinger af en Windows-bruger, jeg oprettede i min ansøgning. Hvis jeg forstår rigtigt, vil hans 'HKEY\_CURRENT\_USER' værdier være under HKEY\_USERS/<sid>/.... Er dette korrekt? Hvordan kan jeg få brugerens side, hvis jeg kender brugernavnet og domænet?


Rediger: Hvordan kan jeg korrekt redigere HKCU-nøglerne til den bruger, hvis jeg allerede har siden?

Bedste reference


Jeg har et program der gør netop det. Her er den relevante del af koden:


NTAccount ntuser = new NTAccount(strUser);
SecurityIdentifier sID = (SecurityIdentifier) ntuser.Translate(typeof(SecurityIdentifier));
strSID = sID.ToString();


Du skal importere to navneområder:


using System.DirectoryServices;
using System.Security.Principal;


Håber dette hjælper.


Brug derefter Registry.Users.SetValue med SID-streng \ -sti til at indstille registreringsværdien.


Dette fungerer muligvis ikke som det skal, hvis du redigerer en logget profil, især en roaming-profil.

Andre referencer 1


Der er to trin til dette. Først skal du få brugerne sid. For det andet skal du indlæse brugerens registerhive. Andre brugere er nu ikke indlæst, så du skal indlæse det eksplicit.


Svaret i Daniel Whites kommentar er den bedste måde at få sidet på.


Hvis du vil indlæse brugerens registerhive, skal du bruge LoadUserProfile Windows API via pinvoke. Der er en komplementær UnloadUserProfile for at aflaste bikuperen, når du er færdig med det. [7]

Andre referencer 2


Du kan bruge Query ved eksempel og søge ved hjælp af PrincipalSearcher for passende UserPrincipal [8] [9] [10]


// Since you know the domain and user
PrincipalContext context = new PrincipalContext(ContextType.Domain);

// Create the principal user object from the context
UserPrincipal usr = new UserPrincipal(context);
usr .GivenName = "Jim";
usr .Surname = "Daly";

// Create a PrincipalSearcher object.
PrincipalSearcher ps = new PrincipalSearcher(usr);
PrincipalSearchResult<Principal> results = ps.FindAll();
foreach (UserPrincipal user in results) {
    if(user.DisplayName == userName) {
        var usersSid = user.Sid.ToString();
    }
}