如何在Windows上获取用户帐户唯一ID(GUID)?
我想获得我的应用程序当前正在运行的Windows帐户的唯一标识符(GUID而不是SID)。格式为GetUserNameEx
,NameUniqueId
。它的工作原理以及在某些机器上,但失败ERROR_NONE_MAPPED
别人(这似乎是一个已知的问题):如何在Windows上获取用户帐户唯一ID(GUID)?
How do you read the user's display (first and last) name on all versions of Windows reliably?
Getting the full-name of the current user, returns an empty string (C#/C++)
上面提到的问题集中在用户名,但没有回答如何获取用户帐户GUID。
GetUserNameEx的文档声明ERROR_NONE_MAPPED
表示用户名不可用于指定的格式。函数不能返回不存在的东西;如果没有用户帐户GUID,则该函数不能返回一个。
ERROR_NONE_MAPPED用户名以指定的格式不可用。
同样的文件(在参数部分,NameFormat [in]
下)说,(部分):
如果用户帐户是不在域中,只有
NameSamCompatible
支持。
所以回答你的问题是尝试使用NameUniqueID
得到GUID,如果返回ERROR_NONE_MAPPED
回落到使用NameSamCompatible
,这是在所有情况下使用。
IIRC,GUID是一个LDAP事物,这就是为什么它仅适用于Active Directory帐户。 –
如果一个帐户没有映射的GUID,它没有GUID。你为什么需要这个指导? –
@KenWhite的确你是对的。这是我对文档的误解以及在不同论坛上的一些误导性信息。请写下这个答案,以便我可以关闭这个话题。谢谢。 – tommyk