2012-04-02 41 views
7

私のアプリケーションで作成したWindowsユーザーのいくつかの設定を変更したいと思います。私が正しく理解すれば、彼の "HKEY_CURRENT_USER"の値はHKEY_USERS/<sid>/...になります。これは正しいです?ユーザー名とドメインを知っている場合、どのようにユーザーのIDを取得できますか?特定のユーザーのレジストリキーをプログラムによって編集するにはどうすればよいですか?

編集:すでにsidがある場合、そのユーザーのHKCUキーを正しく編集するにはどうすればよいですか。

+3

[ユーザー名をC#/ .NETのSID文字列に変換](http://stackoverflow.com/questions/1040623/convert-a-username-to-a-sid-string-in-c) -net) –

+1

これは、ユーザーを編集する正しい方法である場合のみです。 –

答えて

3

私はそれを正確に行うプログラムを持っています。ここでは、コードの関連部分は次のとおりです。

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

あなたは2つの名前空間をインポートする必要があります。

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

は、この情報がお役に立てば幸いです。

次に、Registry.Users.SetValueとSID文字列\ pathを使用して、レジストリ値を設定します。

ログオフされたプロファイル、特にローミングプロファイルを編集している場合、これは意図したとおりに機能しない可能性があります。

+1

実際に詳細に調べると、System.DirectoryServicesは必要ない場合もあります。 – deutschZuid

0

あなたはQuery by exampleを使用し、これには2つのステップがあり、適切なUserPrincipal

// 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(); 
    } 
} 
+0

だから私はSIDを持って、それは 'Registry.Users.SetValue(sid + @" \何かキー "、somevalue);'ですか?それは正しい形式でsidですか? –

+0

@TamásSzeleiあなたはsidを 'String'に変換してからyesに変換する必要があります。 –

2

ためPrincipalSearcherを使用して検索することができます。まず、ユーザーをsidにする必要があります。次に、ユーザーレジストリハイブを読み込む必要があります。他のユーザーのハイブはデフォルトでは読み込まれないため、明示的にロードする必要があります。

Daniel Whiteのコメントの答えは、sidを取得する最も良い方法です。

ユーザーのレジストリハイブを読み込むには、pinvoke経由でLoadUserProfile windows APIを使用します。ハイブを終了するときにハイブをアンロードする補完的なUnloadUserProfileがあります。

+0

HKEY_CURRENT_USERがHKEY_USERS \ <現在のユーザーのsid>と同じではありませんか? –

+0

@TamásSzeleiはい。現在ログインしているユーザーの設定や別のユーザーを編集しますか? –

+1

ログオフしたユーザーのプロファイルにアクセスすると、データが失われる可能性があります(http://blogs.msdn.com/b/oldnewthing/archive/2005/06/30/434209.aspx)。この問題を回避するには、プロファイルをロードしてください。 –

関連する問題