Я считаю, что нашел связанный ответ, который работает лучше, чем один GetUserNameEx, то есть я могу обработать некоторые случаи, когда GetUserNameEx не удается.
Мой альтернативный ответ здесь , включаяПример кода для Delphi.
Короче говоря, если GetUserInfoEx (3, ...) завершается неудачно, прочитайте GetUserInfoEx (2, ...), который возвращает имя в форме «имя_машины \ имя пользователя», которое вы можетезатем перейдите к функциям NetUserInfo в NETAPI32.dll, которые будут считывать локальную базу данных SAM, в которой хранится полное имя пользователя, если они установили его в локальной базе данных SAM.Конечно, многие домашние пользователи, не являющиеся доменами, никогда не настраивали это, поэтому другие ответы здесь, вероятно, также дадут некоторые подсказки.