C++ winapi:GetUserNameEx(NameSamCompatible,…):格式是否始终相同?

C++ winapi:GetUserNameEx(NameSamCompatible,…):格式是否始终相同?,c++,windows,winapi,C++,Windows,Winapi,我想和你一起打电话。MSDN说: 传统帐户名,例如Engineering\JSmith。这个 仅域版本包含尾部反斜杠\ 什么是纯域版本?我只想解析用户名,但我不能这样做,除非我确定格式总是相同的。我认为它总是在格式工程\JSmith中。还有,好的默认缓冲区大小是多少 我会使用,只是我读到它并不总是返回相同的大小写。你不需要事先知道缓冲区的大小。如果缓冲区不够大,函数会告诉您,无论如何,您都应该准备好处理这种情况。放大缓冲区并再次尝试调用它。我认为,仅域版本意味着使用TranslateName来转

我想和你一起打电话。MSDN说:

传统帐户名,例如Engineering\JSmith。这个 仅域版本包含尾部反斜杠\

什么是纯域版本?我只想解析用户名,但我不能这样做,除非我确定格式总是相同的。我认为它总是在格式工程\JSmith中。还有,好的默认缓冲区大小是多少


我会使用,只是我读到它并不总是返回相同的大小写。

你不需要事先知道缓冲区的大小。如果缓冲区不够大,函数会告诉您,无论如何,您都应该准备好处理这种情况。放大缓冲区并再次尝试调用它。我认为,仅域版本意味着使用TranslateName来转换域的名称,而不是域中特定对象的名称。请注意,我在文档中看不到GetUserNameEx始终返回相同大小写的保证。对于请求SAM名称的特定情况,LM20_UNLEN*2+2个字符的固定大小缓冲区应该是安全的:LM20_UNLEN代表域名,1代表反斜杠,LM20_UNLEN代表用户名,1表示终止null。LookupAccountSid函数可能会返回用户名以及SAM或AD中的大小写,而不是用户登录时使用的大小写。您还可以尝试NetUserGetInfo,查看它是否会将未加大小写的名称转换为加大小写的名称。如果可能的话,最好的解决方案是不依赖于套管。