我正在编写一个需要在Windows上存储多个(XMPP)帐户的登录数据的应用程序。
目前,应用程序使用CredRead
和CredWrite
将它们存储在Windows的“存储的用户名和密码”中。问题在于:无法更改XMPP帐户的登录名(它是帐户的JID),但Windows仅在给定目标名称下存储用户名/密码对。我使用类似“xmpp:account@server.tld”的内容作为目标名称,并且在登录期间根本不使用用户名。用户甚至无法在应用程序中设置用户名(它将自动设置为“account@server.tld”)。
现在我想阻止用户(使用控制面板或rundll32.exe keymgr.dll, KRShowKeyMgr
)或其他应用程序将用户名更改为不同的用户名,因为这是当前可能的,并且因为实际值被忽略而有些混乱无论如何。如果我打开“存储的用户名和密码”对话框(使用rundll32.exe keymgr.dll, KRShowKeyMgr
),我的应用程序创建的条目将列为“xmpp:account@server.tld(LegacyGeneric)”,并且可以使用“编辑...”按钮。
该列表还包含一个Windows Live条目(列为“live_account@hotmail.com(WindowsLive)”),其用户名无法更改(尝试这样将显示一个消息框说:“Windows无法保存登录信息。确保信息正确并且所有必填字段都已完成。“。
这是(最后)我的问题:我可以为我的应用程序获得此行为吗?如何将凭证类型更改为与“LegcyGeneric”不同的内容?或者是否有更好的方法只存储给定登录名的密码(可能使用Windows数据保护),同时仍然使用一些“标准”Windows方式存储它们?
感谢任何提示和答案。