Рабочие станции 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 ); } |