2015-05-19 81 views
-1

我想獲得我的應用程序當前正在運行的Windows帳戶的唯一標識符(GUID而不是SID)。格式爲GetUserNameExNameUniqueId。它的工作原理以及在某些機器上,但失敗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。

+1

如果一個帳戶沒有映射的GUID,它沒有GUID。你爲什麼需要這個指導? –

+0

@KenWhite的確你是對的。這是我對文檔的誤解以及在不同論壇上的一些誤導性信息。請寫下這個答案,以便我可以關閉這個話題。謝謝。 – tommyk

回答

1

GetUserNameEx的文檔聲明ERROR_NONE_MAPPED表示用戶名不可用於指定的格式。函數不能返回不存在的東西;如果沒有用戶帳戶GUID,則該函數不能返回一個。

ERROR_NONE_MAPPED用戶名以指定的格式不可用。

同樣的文件(在參數部分,NameFormat [in]下)說,(部分):

如果用戶帳戶是不在域中,只有NameSamCompatible支持。

所以回答你的問題是嘗試使用NameUniqueID得到GUID,如果返回ERROR_NONE_MAPPED回落到使用NameSamCompatible,這是在所有情況下使用。

+2

IIRC,GUID是一個LDAP事物,這就是爲什麼它僅適用於Active Directory帳戶。 –

相關問題