using(PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Machine, computer.Name, null, ContextOptions.Negotiate, Settings.UserName, Settings.UserPassword))
using(GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(oPrincipalContext, Settings.AdministratorsGroup))
{
// perform operations here
}
コードを変更し、それをusingステートメントにラップします。そうしないと、Dispose() メソッドを呼び出そうとしたときにエラーが発生する可能性があります。これは、接続を破棄しようとしたときに、それまでに接続が既に閉じられている可能性があるためです。
ActiveDirectory を使用している場合は、このコードをここで使用して、いずれかの例を試すことができます。
例 1
.NET 3.5 で作業している場合は、System.DirectoryServices.AccountManagement 名前空間を使用して、資格情報を簡単に確認できます。
// create a "principal context" - e.g. your domain (could be machine, too)
using(PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"))
{
// validate the credentials
bool isValid = pc.ValidateCredentials("myuser", "mypassword");
}
例 2
using System.Security;
using System.DirectoryServices.AccountManagement;
public struct Credentials
{
public string Username;
public string Password;
}
public class Domain_Authentication
{
public Credentials Credentials;
public string Domain;
public Domain_Authentication(string Username, string Password, string SDomain)
{
Credentials.Username = Username;
Credentials.Password = Password;
Domain = SDomain;
}
public bool IsValid()
{
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, Domain))
{
// validate the credentials
return pc.ValidateCredentials(Credentials.Username, Credentials.Password);
}
}
}
上記の public bool IsValid() メソッドは、探しているものに対して機能するはずです。
PrincipalContext.ValidateCredentials をご覧ください
FindByIdentity 部分については、次の置換コードを試すことができます
string strName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
// This is here because of a .Net error that gets 0x80005000 on "isUser = user.IsMemberOf(groupU);"
string domainName = strName.Split('\\')[0];
var pc = new PrincipalContext(ContextType.Domain, domainName);
追加の参照リンク StackOverFlow Post
ContextType.Machine