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