Kullanıcının Tam Adını Arama
Bilgisayarlar, bir bilgisayar ağı koleksiyonu olan etki alanışeklinde düzenlenebilir. Etki alanı yöneticisi, merkezi kullanıcı ve grup hesabı bilgilerini korur.
Kullanıcı adı ve etki alanı adı verildiğinde, bir kullanıcının tam adını bulmak için:
- Kullanıcı adını ve alan adını, eğer zaten Unicode karakter dizeleri değilse, Unicode'a dönüştürün.
- NetGetDCNameçağırarak etki alanı denetleyicisinin (DC) bilgisayar adını arayın.
- NetUserGetInfoçağırarak DC bilgisayarda kullanıcı adını arayın.
- Program Unicode dizeleriyle çalışmayı beklemediği sürece, tam kullanıcı adını ANSI'ye dönüştürün.
Aşağıdaki örnek kod, ilk iki bağımsız değişkende bir kullanıcı adı ve etki alanı adı alan ve üçüncü bağımsız değişkende kullanıcının tam adını döndüren bir işlevdir (GetFullName).
#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);
}