Recherche du nom complet d’un utilisateur
Les ordinateurs peuvent être organisés dans un domaine, qui est une collection de réseaux d’ordinateurs. L’administrateur de domaine gère les informations de compte d’utilisateur et de groupe centralisées.
Pour rechercher le nom complet d’un utilisateur, en fonction du nom d’utilisateur et du nom de domaine :
- Convertissez le nom d’utilisateur et le nom de domaine en Unicode, s’ils ne sont pas déjà des chaînes Unicode.
- Recherchez le nom de l’ordinateur du contrôleur de domaine (DC) en appelant NetGetDCName.
- Recherchez le nom d’utilisateur sur l’ordinateur dc en appelant NetUserGetInfo.
- Convertissez le nom d’utilisateur complet en ANSI, sauf si le programme s’attend à fonctionner avec des chaînes Unicode.
L’exemple de code suivant est une fonction (GetFullName) qui prend un nom d’utilisateur et un nom de domaine dans les deux premiers arguments et retourne le nom complet de l’utilisateur dans le troisième argument.
#include <windows.h>
#include <lm.h>
#include <stdio.h>
#pragma comment(lib, "netapi32.lib")
BOOL GetFullName( char *UserName, char *Domain, char *dest )
{
WCHAR wszUserName[UNLEN+1]; // Unicode user name
WCHAR wszDomain[256];
LPBYTE ComputerName;
// struct _SERVER_INFO_100 *si100; // Server structure
struct _USER_INFO_2 *ui; // User structure
// Convert ANSI user name and domain to Unicode
MultiByteToWideChar( CP_ACP, 0, UserName,
(int) strlen(UserName)+1, wszUserName,
sizeof(wszUserName)/sizeof(WCHAR) );
MultiByteToWideChar( CP_ACP, 0, Domain,
(int) strlen(Domain)+1, wszDomain,
sizeof(wszDomain)/sizeof(WCHAR) );
// Get the computer name of a DC for the domain.
NetGetDCName( NULL, wszDomain, &ComputerName );
// Look up the user on the DC.
if( NetUserGetInfo( (LPWSTR) ComputerName,
(LPWSTR) &wszUserName, 2, (LPBYTE *) &ui ) )
{
wprintf( L"Error getting user information.\n" );
return( FALSE );
}
// Convert the Unicode full name to ANSI.
WideCharToMultiByte( CP_ACP, 0, ui->usri2_full_name, -1,
dest, 256, NULL, NULL );
return (TRUE);
}