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

Winapi CredentialProvider不接受带有特殊(德语)字母的密码,winapi,credential-providers,Winapi,Credential Providers,我编写了一个允许登录Windows的CredentialProvider。但今天我发现了一个奇怪的错误,GetSerialization()似乎不接受包含德语字母“umlaut”的密码,如“ä”或“ü”。有人知道解决办法吗 提前感谢这将取决于GetSerialization()返回密码的格式细节 如果您的CredentialProvider像标准密码提供程序一样返回序列化的KERB\u INTERACTIVE\u UNLOCK\u LOGON结构,则结构中的用户名、密码和域名值必须全部作为UNI

我编写了一个允许登录Windows的CredentialProvider。但今天我发现了一个奇怪的错误,
GetSerialization()
似乎不接受包含德语字母“umlaut”的密码,如“ä”或“ü”。有人知道解决办法吗


提前感谢

这将取决于
GetSerialization()
返回密码的格式细节

如果您的CredentialProvider像标准密码提供程序一样返回序列化的
KERB\u INTERACTIVE\u UNLOCK\u LOGON
结构,则结构中的用户名、密码和域名值必须全部作为
UNICODE\u字符串
值传递。请注意,
UNICODE\u STRING
是一种包含当前长度和最大长度值以及16位UNICODE(UTF-16LE)字符缓冲区的结构。因为它们是Unicode,所以它们当然可以用umlauts来保存字母


但是,如果您的CredntialProvider在窄字符缓冲区中处理密码,则您可能将umlaut字符作为8位Windows CP1252字符处理。在将它们放入
KERB\u INTERACTIVE\u UNLOCK\u LOGON
结构并序列化之前,您需要将它们转换为16位Unicode。请检查项目是否设置为使用Unicode字符集。谢谢。错误是由错误的ANSI到unicode字符串转换引起的。