查閱使用者的完整名稱
計算機可以組織成 網域,這是計算機網路集合。 網域系統管理員會維護集中式使用者和群組帳戶資訊。
若要尋找使用者的完整名稱,請提供使用者名稱和網域名稱:
- 如果使用者名稱和網域名稱不是 Unicode 字串,請將它們轉換成 Unicode。
- 呼叫 NetGetDCName來查閱域控制器的計算機名稱。
- 呼叫 NetUserGetInfo來查閱DC電腦上的用戶名稱。
- 除非程式預期處理 Unicode 字串,否則請將使用者全名轉換為 ANSI。
下列範例程式代碼是一個函式 (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);
}