今天有个任务,那就是使用C#代码实现对windows凭据管理的操作。

例如:向windows凭据管理中添加凭据、删除凭据以及查询凭据等功能。

于是乎,就开始在网上查找。经过漫长的查询路,终于在一片英文博客中找到了相关代码。

经过实验,能够解决我的问题。在此,感谢那位博主。 

现在就代码贴出,希望能帮到有需要的人。 代码如下: 

private void button1_Click(object sender, EventArgs e)         { 
	//ip地址或者网络路径 例如:TERMSRV/192.168.2.222             
	string key = txtIP.Text.Trim(); 
	string userName = txtUserName.Text.Trim();
	string password = txtPassword.Text.Trim(); 
	//用于标记凭据添加是否成功 i=0:添加成功;i=1:添加失败             
	int i = 0;             
	try{ 
	    i = NativeCredMan.WriteCred(key, 
	    userName, 
	    password, 
	    CRED_TYPE.DOMAIN_PASSWORD, 
	    CRED_PERSIST.LOCAL_MACHINE);             
	} 
	catch{ 
	    i = 1;
	}  
	if (i == 0) 
	    txtMsg.Text = "添加成功";             
	else 
	    txtMsg.Text = "添加失败";         
}  
/// <summary>         
/// 凭据类型         
/// </summary> 
public enum CRED_TYPE : uint         { 
    //普通凭据
    GENERIC = 1,  
    //域密码 
    DOMAIN_PASSWORD = 2,             
    //域证书 
    DOMAIN_CERTIFICATE = 3,             
    //域可见密码 
    DOMAIN_VISIBLE_PASSWORD = 4,
    //一般证书 
    GENERIC_CERTIFICATE = 5, 
    //域扩展 
    DOMAIN_EXTENDED = 6,             
    //最大 
    MAXIMUM = 7,      
    // Maximum supported cred type 
    MAXIMUM_EX = (MAXIMUM + 1000),  // Allow new applications to run on old OSes 
}  
//永久性 
public enum CRED_PERSIST : uint         { 
    SESSION = 1,             //本地计算机 
    LOCAL_MACHINE = 2,             //企业 
    ENTERPRISE = 3,         
}  
            
internal class NativeCredMan         
{ 
    [DllImport("Advapi32.dll", EntryPoint = "CredReadW", CharSet = CharSet.Unicode, SetLastError = true)] 
    //读取凭据信息 
    static extern bool CredRead(string target, CRED_TYPE type, int reservedFlag, out IntPtr CredentialPtr);  
    
    [DllImport("Advapi32.dll&#