Я считаю, что нашел ответ, который работает лучше, чем только GetUserNameEx, то есть я могу обрабатывать некоторые случаи, когда GetUserNameEx не работает.
Мой альтернативный ответ here включая образец кода для Delphi.
Короче говоря, если GetUserInfoEx (3, ...) терпит неудачу, прочитайте GetUserInfoEx (2, ...), который возвращает имя в форме «машинное имя \ имя пользователя», которое затем можно передать в функции NetUserInfo в NETAPI32 .dll, который будет считывать локальную базу данных SAM, где хранится полное имя пользователя, если они установлены в локальной базе данных SAM. Конечно, многие домашние пользователи, не являющиеся доменными, никогда не устанавливали это, поэтому другие ответы здесь могут также дать некоторые подсказки.
Ответил здесь: http://stackoverflow.com/questions/3686201/how-do-you-read-the-users-display-first-and-last-name-on -all-versions-of-wind/7826177 # 7826177 –
Принятый ответ на этот вопрос НЕ работает, если вы НЕ на домене. См. Этот вопрос для обходного пути: http://stackoverflow.com/questions/3686201/how-do-you-read-the-users-display-first-and-last-name-on-all-versions-of-wind –