如何获取 Windows 上的用户帐户唯一 ID (GUID)?

How to get user account unique id (GUID) on Windows?

我想获得我的应用程序当前 运行 所在 Windows 帐户的唯一标识符(GUID 而不是 SID)。我尝试使用 GetUserNameExNameUniqueId 作为格式。它在某些机器上运行良好,但在其他机器上因 ERROR_NONE_MAPPED 而失败(这似乎是一个已知问题):

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 表示用户名在指定格式中不可用。函数不能return不存在的东西;如果没有用户帐户 GUID,则该函数不能 return 一个。

ERROR_NONE_MAPPED The user name is not available in the specified format.

相同的文档(在 Parameters 部分,NameFormat [in] 下)说(部分):

If the user account is not in a domain, only NameSamCompatible is supported.

所以你的问题的答案是尝试使用 NameUniqueID 获取 GUID,如果 returns ERROR_NONE_MAPPED 退回到使用 NameSamCompatible,这在所有情况下都可用。