Fungsi NetUserGetInfo (lmaccess.h)
Fungsi NetUserGetInfo mengambil informasi tentang akun pengguna tertentu di server.
Sintaks
NET_API_STATUS NET_API_FUNCTION NetUserGetInfo(
[in] LPCWSTR servername,
[in] LPCWSTR username,
[in] DWORD level,
[out] LPBYTE *bufptr
);
Parameter
[in] servername
Penunjuk ke string konstanta yang menentukan nama DNS atau NetBIOS dari server jarak jauh tempat fungsi dijalankan. Jika parameter ini NULL, komputer lokal akan digunakan.
[in] username
Penunjuk ke string konstanta yang menentukan nama akun pengguna yang akan mengembalikan informasi. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.
[in] level
Tingkat informasi data. Parameter ini bisa menjadi salah satu nilai berikut.
Nilai | Makna |
---|---|
|
Mengembalikan nama akun pengguna. Parameter bufptr menunjuk ke struktur USER_INFO_0 . |
|
Mengembalikan informasi terperinci tentang akun pengguna. Parameter bufptr menunjuk ke struktur USER_INFO_1 . |
|
Mengembalikan informasi terperinci dan atribut tambahan tentang akun pengguna. Parameter bufptr menunjuk ke struktur USER_INFO_2 . |
|
Mengembalikan informasi terperinci dan atribut tambahan tentang akun pengguna. Tingkat ini hanya valid pada server. Parameter bufptr menunjuk ke struktur USER_INFO_3 . Perhatikan bahwa disarankan agar Anda menggunakan USER_INFO_4 sebagai gantinya. |
|
Mengembalikan informasi terperinci dan atribut tambahan tentang akun pengguna. Tingkat ini hanya valid pada server. Parameter bufptr menunjuk ke struktur USER_INFO_4 .
Catatan Tingkat ini didukung pada Windows XP dan yang lebih baru.
|
|
Mengembalikan nama dan komentar pengguna dan akun. Parameter bufptr menunjuk ke struktur USER_INFO_10 . |
|
Mengembalikan informasi terperinci tentang akun pengguna. Parameter bufptr menunjuk ke struktur USER_INFO_11 . |
|
Mengembalikan nama dan pengidentifikasi pengguna serta berbagai atribut akun. Parameter bufptr menunjuk ke struktur USER_INFO_20 . Perhatikan bahwa pada Windows XP dan yang lebih baru, disarankan agar Anda menggunakan USER_INFO_23 sebagai gantinya. |
|
Mengembalikan nama dan pengidentifikasi pengguna serta berbagai atribut akun. Parameter bufptr menunjuk ke struktur USER_INFO_23 .
Catatan Tingkat ini didukung pada Windows XP dan yang lebih baru.
|
|
Mengembalikan informasi akun pengguna untuk akun yang tersambung ke identitas Internet. Parameter bufptr menunjuk ke struktur USER_INFO_24 .
Catatan Tingkat ini didukung pada Windows 8 dan Windows Server 2012.
|
[out] bufptr
Penunjuk ke buffer yang menerima data. Format data ini tergantung pada nilai parameter tingkat . Buffer ini dialokasikan oleh sistem dan harus dikosongkan menggunakan fungsi NetApiBufferFree . Untuk informasi selengkapnya, lihat Buffer Fungsi Manajemen Jaringan dan Panjang Buffer Fungsi Manajemen Jaringan.
Nilai kembali
Jika fungsi berhasil, nilai yang dikembalikan NERR_Success.
Jika fungsi gagal, nilai yang dikembalikan bisa menjadi salah satu kode kesalahan berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Pengguna tidak memiliki akses ke informasi yang diminta. |
|
Jalur jaringan yang ditentukan dalam parameter nama server tidak ditemukan. |
|
Nilai yang ditentukan untuk parameter tingkat tidak valid. |
|
Nama komputer tidak valid. |
|
Nama pengguna tidak dapat ditemukan. |
Keterangan
Jika Anda memprogram Direktori Aktif, Anda mungkin dapat memanggil metode Antarmuka Layanan Direktori Aktif (ADSI) tertentu untuk mencapai fungsionalitas yang sama yang dapat Anda capai dengan memanggil fungsi pengguna manajemen jaringan. Untuk informasi selengkapnya, lihat IADsUser dan IADsComputer.
Jika Anda memanggil fungsi ini pada pengendali domain yang menjalankan Direktori Aktif, akses diizinkan atau ditolak berdasarkan daftar kontrol akses (ACL) untuk objek yang dapat diamankan. ACL default mengizinkan semua pengguna terautentikasi dan anggota grup "Akses pra-windows 2000 kompatibel" untuk melihat informasi. Jika Anda memanggil fungsi ini di server anggota atau stasiun kerja, semua pengguna yang diautentikasi dapat melihat informasi. Untuk informasi tentang akses anonim dan membatasi akses anonim pada platform ini, lihat Persyaratan Keamanan untuk Fungsi Manajemen Jaringan. Untuk informasi selengkapnya tentang ACL, ACL, dan token akses, lihat Model Access Control.
Pendeskripsi keamanan objek Pengguna digunakan untuk melakukan pemeriksaan akses untuk fungsi ini.
Nama akun pengguna dibatasi hingga 20 karakter dan nama grup dibatasi hingga 256 karakter. Selain itu, nama akun tidak dapat dihentikan oleh titik dan tidak dapat menyertakan koma atau salah satu karakter yang dapat dicetak berikut: ", /, , [, ], :, |, <, >, +, =, ;, ?, *. Nama juga tidak dapat menyertakan karakter dalam rentang 1-31, yang tidak dapat dicetak.
Jika tingkat informasi yang ditentukan dalam parameter tingkat diatur ke 24, parameter nama server yang ditentukan harus diselesaikan ke komputer lokal. Jika nama server diselesaikan ke komputer jarak jauh atau ke pengendali domain, fungsi NetUserGetInfo akan gagal.
Contoh
Sampel kode berikut menunjukkan cara mengambil informasi tentang akun pengguna tertentu dengan panggilan ke fungsi NetUserGetInfo . Sampel memanggil NetUserGetInfo, menentukan berbagai tingkat informasi . Jika panggilan berhasil, kode akan mencetak informasi tentang akun pengguna. Terakhir, sampel membebaskan memori yang dialokasikan untuk buffer informasi.
#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "advapi32.lib")
#pragma comment(lib, "netapi32.lib")
#include <windows.h>
#include <stdio.h>
#include <assert.h>
#include <lm.h>
#include <sddl.h> /* for ConvertSidToStringSid function */
int wmain(int argc, wchar_t * argv[])
{
DWORD dwLevel = 0;
LPUSER_INFO_0 pBuf = NULL;
LPUSER_INFO_1 pBuf1 = NULL;
LPUSER_INFO_2 pBuf2 = NULL;
LPUSER_INFO_3 pBuf3 = NULL;
LPUSER_INFO_4 pBuf4 = NULL;
LPUSER_INFO_10 pBuf10 = NULL;
LPUSER_INFO_11 pBuf11 = NULL;
LPUSER_INFO_20 pBuf20 = NULL;
LPUSER_INFO_23 pBuf23 = NULL;
NET_API_STATUS nStatus;
LPTSTR sStringSid = NULL;
int i = 0;
int j = 0;
if (argc != 3)
{
fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
exit(1);
}
while (i < 24)
{
//
// Call the NetUserGetInfo function.
//
dwLevel = i;
wprintf
(L"\nCalling NetUserGetinfo with Servername=%s Username=%s Level=%d\n",
argv[1], argv[2], dwLevel);
nStatus = NetUserGetInfo(argv[1], argv[2], dwLevel, (LPBYTE *) & pBuf);
//
// If the call succeeds, print the user information.
//
if (nStatus == NERR_Success)
{
if (pBuf != NULL)
{
switch (i)
{
case 0:
wprintf(L"\tUser account name: %s\n", pBuf->usri0_name);
break;
case 1:
pBuf1 = (LPUSER_INFO_1) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf1->usri1_name);
wprintf(L"\tPassword: %s\n", pBuf1->usri1_password);
wprintf(L"\tPassword age (seconds): %d\n",
pBuf1->usri1_password_age);
wprintf(L"\tPrivilege level: %d\n", pBuf1->usri1_priv);
wprintf(L"\tHome directory: %s\n", pBuf1->usri1_home_dir);
wprintf(L"\tUser comment: %s\n", pBuf1->usri1_comment);
wprintf(L"\tFlags (in hex): %x\n", pBuf1->usri1_flags);
wprintf(L"\tScript path: %s\n", pBuf1->usri1_script_path);
break;
case 2:
pBuf2 = (LPUSER_INFO_2) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf2->usri2_name);
wprintf(L"\tPassword: %s\n", pBuf2->usri2_password);
wprintf(L"\tPassword age (seconds): %d\n",
pBuf2->usri2_password_age);
wprintf(L"\tPrivilege level: %d\n", pBuf2->usri2_priv);
wprintf(L"\tHome directory: %s\n", pBuf2->usri2_home_dir);
wprintf(L"\tComment: %s\n", pBuf2->usri2_comment);
wprintf(L"\tFlags (in hex): %x\n", pBuf2->usri2_flags);
wprintf(L"\tScript path: %s\n", pBuf2->usri2_script_path);
wprintf(L"\tAuth flags (in hex): %x\n",
pBuf2->usri2_auth_flags);
wprintf(L"\tFull name: %s\n", pBuf2->usri2_full_name);
wprintf(L"\tUser comment: %s\n", pBuf2->usri2_usr_comment);
wprintf(L"\tParameters: %s\n", pBuf2->usri2_parms);
wprintf(L"\tWorkstations: %s\n", pBuf2->usri2_workstations);
wprintf
(L"\tLast logon (seconds since January 1, 1970 GMT): %d\n",
pBuf2->usri2_last_logon);
wprintf
(L"\tLast logoff (seconds since January 1, 1970 GMT): %d\n",
pBuf2->usri2_last_logoff);
wprintf
(L"\tAccount expires (seconds since January 1, 1970 GMT): %d\n",
pBuf2->usri2_acct_expires);
wprintf(L"\tMax storage: %d\n", pBuf2->usri2_max_storage);
wprintf(L"\tUnits per week: %d\n",
pBuf2->usri2_units_per_week);
wprintf(L"\tLogon hours:");
for (j = 0; j < 21; j++)
{
printf(" %x", (BYTE) pBuf2->usri2_logon_hours[j]);
}
wprintf(L"\n");
wprintf(L"\tBad password count: %d\n",
pBuf2->usri2_bad_pw_count);
wprintf(L"\tNumber of logons: %d\n",
pBuf2->usri2_num_logons);
wprintf(L"\tLogon server: %s\n", pBuf2->usri2_logon_server);
wprintf(L"\tCountry code: %d\n", pBuf2->usri2_country_code);
wprintf(L"\tCode page: %d\n", pBuf2->usri2_code_page);
break;
case 4:
pBuf4 = (LPUSER_INFO_4) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf4->usri4_name);
wprintf(L"\tPassword: %s\n", pBuf4->usri4_password);
wprintf(L"\tPassword age (seconds): %d\n",
pBuf4->usri4_password_age);
wprintf(L"\tPrivilege level: %d\n", pBuf4->usri4_priv);
wprintf(L"\tHome directory: %s\n", pBuf4->usri4_home_dir);
wprintf(L"\tComment: %s\n", pBuf4->usri4_comment);
wprintf(L"\tFlags (in hex): %x\n", pBuf4->usri4_flags);
wprintf(L"\tScript path: %s\n", pBuf4->usri4_script_path);
wprintf(L"\tAuth flags (in hex): %x\n",
pBuf4->usri4_auth_flags);
wprintf(L"\tFull name: %s\n", pBuf4->usri4_full_name);
wprintf(L"\tUser comment: %s\n", pBuf4->usri4_usr_comment);
wprintf(L"\tParameters: %s\n", pBuf4->usri4_parms);
wprintf(L"\tWorkstations: %s\n", pBuf4->usri4_workstations);
wprintf
(L"\tLast logon (seconds since January 1, 1970 GMT): %d\n",
pBuf4->usri4_last_logon);
wprintf
(L"\tLast logoff (seconds since January 1, 1970 GMT): %d\n",
pBuf4->usri4_last_logoff);
wprintf
(L"\tAccount expires (seconds since January 1, 1970 GMT): %d\n",
pBuf4->usri4_acct_expires);
wprintf(L"\tMax storage: %d\n", pBuf4->usri4_max_storage);
wprintf(L"\tUnits per week: %d\n",
pBuf4->usri4_units_per_week);
wprintf(L"\tLogon hours:");
for (j = 0; j < 21; j++)
{
printf(" %x", (BYTE) pBuf4->usri4_logon_hours[j]);
}
wprintf(L"\n");
wprintf(L"\tBad password count: %d\n",
pBuf4->usri4_bad_pw_count);
wprintf(L"\tNumber of logons: %d\n",
pBuf4->usri4_num_logons);
wprintf(L"\tLogon server: %s\n", pBuf4->usri4_logon_server);
wprintf(L"\tCountry code: %d\n", pBuf4->usri4_country_code);
wprintf(L"\tCode page: %d\n", pBuf4->usri4_code_page);
if (ConvertSidToStringSid
(pBuf4->usri4_user_sid, &sStringSid))
{
wprintf(L"\tUser SID: %s\n", sStringSid);
LocalFree(sStringSid);
}
else
wprintf(L"ConvertSidToSTringSid failed with error %d\n",
GetLastError());
wprintf(L"\tPrimary group ID: %d\n",
pBuf4->usri4_primary_group_id);
wprintf(L"\tProfile: %s\n", pBuf4->usri4_profile);
wprintf(L"\tHome directory drive letter: %s\n",
pBuf4->usri4_home_dir_drive);
wprintf(L"\tPassword expired information: %d\n",
pBuf4->usri4_password_expired);
break;
case 10:
pBuf10 = (LPUSER_INFO_10) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf10->usri10_name);
wprintf(L"\tComment: %s\n", pBuf10->usri10_comment);
wprintf(L"\tUser comment: %s\n",
pBuf10->usri10_usr_comment);
wprintf(L"\tFull name: %s\n", pBuf10->usri10_full_name);
break;
case 11:
pBuf11 = (LPUSER_INFO_11) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf11->usri11_name);
wprintf(L"\tComment: %s\n", pBuf11->usri11_comment);
wprintf(L"\tUser comment: %s\n",
pBuf11->usri11_usr_comment);
wprintf(L"\tFull name: %s\n", pBuf11->usri11_full_name);
wprintf(L"\tPrivilege level: %d\n", pBuf11->usri11_priv);
wprintf(L"\tAuth flags (in hex): %x\n",
pBuf11->usri11_auth_flags);
wprintf(L"\tPassword age (seconds): %d\n",
pBuf11->usri11_password_age);
wprintf(L"\tHome directory: %s\n", pBuf11->usri11_home_dir);
wprintf(L"\tParameters: %s\n", pBuf11->usri11_parms);
wprintf
(L"\tLast logon (seconds since January 1, 1970 GMT): %d\n",
pBuf11->usri11_last_logon);
wprintf
(L"\tLast logoff (seconds since January 1, 1970 GMT): %d\n",
pBuf11->usri11_last_logoff);
wprintf(L"\tBad password count: %d\n",
pBuf11->usri11_bad_pw_count);
wprintf(L"\tNumber of logons: %d\n",
pBuf11->usri11_num_logons);
wprintf(L"\tLogon server: %s\n",
pBuf11->usri11_logon_server);
wprintf(L"\tCountry code: %d\n",
pBuf11->usri11_country_code);
wprintf(L"\tWorkstations: %s\n",
pBuf11->usri11_workstations);
wprintf(L"\tMax storage: %d\n", pBuf11->usri11_max_storage);
wprintf(L"\tUnits per week: %d\n",
pBuf11->usri11_units_per_week);
wprintf(L"\tLogon hours:");
for (j = 0; j < 21; j++)
{
printf(" %x", (BYTE) pBuf11->usri11_logon_hours[j]);
}
wprintf(L"\n");
wprintf(L"\tCode page: %d\n", pBuf11->usri11_code_page);
break;
case 20:
pBuf20 = (LPUSER_INFO_20) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf20->usri20_name);
wprintf(L"\tFull name: %s\n", pBuf20->usri20_full_name);
wprintf(L"\tComment: %s\n", pBuf20->usri20_comment);
wprintf(L"\tFlags (in hex): %x\n", pBuf20->usri20_flags);
wprintf(L"\tUser ID: %u\n", pBuf20->usri20_user_id);
break;
case 23:
pBuf23 = (LPUSER_INFO_23) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf23->usri23_name);
wprintf(L"\tFull name: %s\n", pBuf23->usri23_full_name);
wprintf(L"\tComment: %s\n", pBuf23->usri23_comment);
wprintf(L"\tFlags (in hex): %x\n", pBuf23->usri23_flags);
if (ConvertSidToStringSid
(pBuf23->usri23_user_sid, &sStringSid))
{
wprintf(L"\tUser SID: %s\n", sStringSid);
LocalFree(sStringSid);
}
else
wprintf(L"ConvertSidToSTringSid failed with error %d\n",
GetLastError());
break;
default:
break;
}
}
}
// Otherwise, print the system error.
//
else
fprintf(stderr, "NetUserGetinfo failed with error: %d\n", nStatus);
//
// Free the allocated memory.
//
if (pBuf != NULL)
NetApiBufferFree(pBuf);
switch (i)
{
case 0:
case 1:
case 10:
i++;
break;
case 2:
i = 4;
break;
case 4:
i = 10;
break;
case 11:
i = 20;
break;
case 20:
i = 23;
break;
default:
i = 24;
break;
}
}
return 0;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | lmaccess.h (termasuk Lm.h) |
Pustaka | Netapi32.lib |
DLL | Netapi32.dll |