CredentialProvider不接受带有特殊(德语)字母的密码

时间:2012-09-14 09:14:39

标签: winapi credential-providers

我写了一个允许登录Windows的CredentialProvider。但是今天我发现了这个奇怪的错误GetSerialization()似乎不接受包含德语'变音'字母的密码,如'ä'或'ü'。有谁知道解决方案?

提前致谢

1 个答案:

答案 0 :(得分:1)

这取决于GetSerialization()返回密码的格式的详细信息。

如果您的CredentialProvider返回序列化KERB_INTERACTIVE_UNLOCK_LOGON结构,正如标准密码提供程序所做的那样,则结构中的用户名,密码和域名值必须全部作为UNICODE_STRING值传递。请注意,UNICODE_STRING是一个包含当前长度和最大长度值的结构,以及一个16位Unicode(UTF-16LE)字符的缓冲区。因为它们是Unicode,所以它们当然可以用变音符号来保存字母。

但是,如果您的CredntialProvider在窄字符缓冲区中处理密码,您可能将您的变音字符处理为8位Windows CP1252字符。在将它们放入KERB_INTERACTIVE_UNLOCK_LOGON结构并将其序列化之前,您需要将它们转换为16位Unicode。