2015-05-19 5 views
-1

Я хотел бы получить уникальный идентификатор (GUID, а не SID) учетной записи Windows, в котором работает мое приложение. Я пробовал с GetUserNameEx с форматом NameUniqueId. Он хорошо работает на некоторых машинах, но не с ERROR_NONE_MAPPED на других (которые, как представляется, известная проблема):Как получить уникальный идентификатор учетной записи пользователя (GUID) в Windows?

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

Если учетная запись не имеет отображаемого указателя, у нее нет указателя. Зачем вам нужен гид? –

+0

@ KenWhite действительно вы правы. Это была неправильная интерпретация документации, а также некоторая вводящая в заблуждение информация на разных форумах. Пожалуйста, напишите это как ответ, чтобы я мог закрыть эту тему. Благодарю. – tommyk

ответ

1

В документации для GetUserNameEx указано, что ERROR_NONE_MAPPED означает, что имя пользователя недоступно в указанном формате. Функция не может вернуть то, что не существует; если GUID учетной записи пользователя отсутствует, функция не может вернуть ее.

ERROR_NONE_MAPPED Имя пользователя не доступна в указанном формате.

Та же документация (в Параметры раздел под NameFormat [in]) говорит (частично):

Если учетная запись пользователя не входит в домен, поддерживается только NameSamCompatible.

Таким образом, ответ на ваш вопрос, чтобы попытаться получить GUID с помощью NameUniqueID, и если это возвращает ERROR_NONE_MAPPED падать назад к использованию NameSamCompatible, который доступен во всех случаях.

+2

IIRC, GUID - это предмет LDAP, поэтому он применим только к учетным записям Active Directory. –

Смежные вопросы