2011-09-20 157 views
0

我想编写一个应用程序,允许用户在公司网络中输入他们的机器登录凭证,然后将它们连接到该机器。显然,远程桌面连接的登录凭据不再保存在Windows7(和Vista?)的* .RDP文件中,因此this approach不起作用。我知道我可以使用rundll32 keymgr.dll,KRShowKeyMgr查看保存的凭据,但不知道如何以编程方式向此存储添加凭据。任何指针或甚至代码示例(最好在C#中,但任何事情都会发生)将不胜感激。使用C#/ Windows7连接并登录到远程桌面

+2

您仍然可以将密码放在.rdp文件中,它仍然会遵守它们 - 除非有明确忽略它的组策略设置。 – vcsjones

+1

你是完全正确的。您是否将您的评论重新发布为我可以接受的答案? – Matthias

+0

答案补充一点。 – vcsjones

回答

2

您仍然可以将密码放在.rdp文件中,它仍然会遵守它们 - 除非有明确忽略它的组策略设置。

编辑

对于它的价值,这文章是有点过杀人。在所有那些混乱的P/Invoke业务中都有一个托管包装。如果您使用.NET 2.0使用ProtectedData类,则有更简单的方法。 (首先添加对System.Security程序集的引用)。

一旦你得到了补充参考,你可以这样做:

public string Encrypt(string toEncrypt) 
{ 
    var userData = Encoding.Unicode.GetBytes(toEncrypt ?? String.Empty); 
    return "password 51:b:" + ToHexString(ProtectedData.Protect(userData, new byte[0], DataProtectionScope.CurrentUser)); 
} 

private static string ToHexString(byte[] bytes) 
{ 
    if (bytes == null) 
    { 
     return String.Empty; 
    } 
    return bytes.Aggregate(new StringBuilder(), (sb, b) => sb.AppendFormat("{0:x2}", b)).ToString(); 
} 

就是这样。

+0

谢谢,非常有帮助! – Matthias