我写了一个允许登录到 Windows 的 CredentialProvider。但是今天我发现了这个奇怪的错误,它GetSerialization()
似乎不接受包含德语“变音”字母的密码,如“ä”或“ü”。有谁知道解决方案?
提前致谢
我写了一个允许登录到 Windows 的 CredentialProvider。但是今天我发现了这个奇怪的错误,它GetSerialization()
似乎不接受包含德语“变音”字母的密码,如“ä”或“ü”。有谁知道解决方案?
提前致谢
这取决于GetSerialization()
返回密码的格式的详细信息。
如果您的 CredentialProviderKERB_INTERACTIVE_UNLOCK_LOGON
像标准密码提供程序一样返回序列化结构,则结构中的用户名、密码和域名值都必须作为UNICODE_STRING
值传递。请注意,这UNICODE_STRING
是一个包含当前长度和最大长度值的结构以及 16 位 Unicode (UTF-16LE) 字符的缓冲区。由于它们是 Unicode,它们当然可以保存带有变音符号的字母。
但是,如果您的 CredntialProvider 在一个狭窄的字符缓冲区中处理密码,您可能会将您的元音变音字符处理为 8 位 Windows CP1252 字符。KERB_INTERACTIVE_UNLOCK_LOGON
在将它们放入结构中并对其进行序列化之前,您需要将它们转换为 16 位 Unicode 。