Как получить полное имя пользователя
Рабочие станции Windows NT могут быть организованы
в домен, который является набором компьютеров в в
сети Windows NT. Администратор домена поддерживает
информацию об учётных записях пользователей и
рабочих групп.
Если Вы знаете имя пользователя и имя домена, то
для нахождения полного имени пользователя
необходимо проделать следующее:
- Преобразовать имя пользователя и имя домена в
Unicode, если конечно они уже не являются строками
Unicode. Это требование API функций LAN Менеджера,
которые будут использоваться в следующих шагах.
- Определить имя контроллера домена (DC) для
данного имени домена при помощи вызова NetServerEnum().
- Определить имя пользователя при помощи
NetUserGetInfo()
- Если программа не работает со строками Unicode, то
преобразовать полное имя пользователя в ANSI.
Код, приведённый ниже, представляет из себя
функцию, которая получает в первых двух
параметрах имя пользователя и домена, а в третьем
параметре возвращает полное имя пользователя.
Дополнительную информацию о том, как можно
получить текущего пользователя и домен, можно
найти в статье из Microsoft Knowledge Base:
Q111544 Как получить текущее имя
пользователя и имя домена
Пример кода
#include <windows.h>
#include <lm.h>
#include <stdio.h>
/********************************************************************\
* Функция: GetFullName( char *UserName, char *Domain, char *dest ); *
* *
* Параметры: *
* UserName: имя пользователя *
* Domain : домен, которому принадлежит пользователь *
* dest : Получаемое полное имя пользователя *
* *
\********************************************************************/
BOOL GetFullName(char *UserName, char *Domain, char *dest)
{
WCHAR wszUserName[256]; // имя пользователя в Unicode
WCHAR wszDomain[256];
LPBYTE ComputerName;
struct _SERVER_INFO_100 *si100; // Структура для сервера
struct _USER_INFO_2 *ui; // Структура для пользователя
// Конвертируем имя пользователя и домена из ASCII в Unicode.
MultiByteToWideChar( CP_ACP, 0, UserName,
strlen(UserName)+1, wszUserName, sizeof(wszUserName) );
MultiByteToWideChar( CP_ACP, 0, Domain,
strlen(Domain)+1, wszDomain, sizeof(wszDomain) );
// Получаем имя компьютера, который является контроллером домена (DC)
// для указанного домена.
NetGetDCName( NULL, wszDomain, &ComputerName );
// Ищем пользователя в контроллере домена.
if(NetUserGetInfo( (LPWSTR) ComputerName,
(LPWSTR) &wszUserName, 2, (LPBYTE *) &ui))
{
printf( "Error getting user information.\n" );
return( FALSE );
}
// Преобразуем полное имя из Unicode в ASCII.
WideCharToMultiByte( CP_ACP, 0, ui->usri2_full_name,
-1, dest, 256, NULL, NULL );
return( TRUE );
}
|