Membuat Akun Komputer Baru
Sampel kode berikut menunjukkan cara membuat akun komputer baru menggunakan fungsi NetUserAdd .
Berikut ini adalah pertimbangan untuk mengelola akun komputer:
- Nama akun komputer harus berupa huruf besar semua untuk konsistensi dengan utilitas manajemen akun.
- Nama akun komputer selalu memiliki tanda dolar berikutnya ($). Fungsi apa pun yang digunakan untuk mengelola akun komputer harus membangun nama komputer sehingga karakter terakhir dari nama akun komputer adalah tanda dolar ($). Untuk kepercayaan interdomain, nama akunnya adalah TrustingDomainName$.
- Panjang nama komputer maksimum adalah MAX_COMPUTERNAME_LENGTH (15). Panjang ini tidak termasuk tanda dolar berikutnya ($).
- Kata sandi untuk akun komputer baru harus menjadi representasi huruf kecil dari nama akun komputer, tanpa tanda dolar berikutnya ($). Untuk kepercayaan interdomain, kata sandi dapat menjadi nilai arbitrer yang cocok dengan nilai yang ditentukan di sisi kepercayaan hubungan.
- Panjang kata sandi maksimum adalah LM20_PWLEN (14). Kata sandi harus dipotong dengan panjang ini jika nama akun komputer melebihi panjang ini.
- Kata sandi yang disediakan pada waktu pembuatan akun komputer hanya valid sampai akun komputer menjadi aktif pada domain. Kata sandi baru dibuat selama aktivasi hubungan kepercayaan.
#include <windows.h>
#include <lm.h>
#pragma comment(lib, "netapi32.lib")
BOOL AddMachineAccount(
LPWSTR wTargetComputer,
LPWSTR MachineAccount,
DWORD AccountType
)
{
LPWSTR wAccount;
LPWSTR wPassword;
USER_INFO_1 ui;
DWORD cbAccount;
DWORD cbLength;
DWORD dwError;
//
// Ensure a valid computer account type was passed.
//
if (AccountType != UF_WORKSTATION_TRUST_ACCOUNT &&
AccountType != UF_SERVER_TRUST_ACCOUNT &&
AccountType != UF_INTERDOMAIN_TRUST_ACCOUNT
)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
//
// Obtain number of chars in computer account name.
//
cbLength = cbAccount = lstrlenW(MachineAccount);
//
// Ensure computer name doesn't exceed maximum length.
//
if(cbLength > MAX_COMPUTERNAME_LENGTH) {
SetLastError(ERROR_INVALID_ACCOUNT_NAME);
return FALSE;
}
//
// Allocate storage to contain Unicode representation of
// computer account name + trailing $ + NULL.
//
wAccount=(LPWSTR)HeapAlloc(GetProcessHeap(), 0,
(cbAccount + 1 + 1) * sizeof(WCHAR) // Account + '$' + NULL
);
if(wAccount == NULL) return FALSE;
//
// Password is the computer account name converted to lowercase;
// you will convert the passed MachineAccount in place.
//
wPassword = MachineAccount;
//
// Copy MachineAccount to the wAccount buffer allocated while
// converting computer account name to uppercase.
// Convert password (in place) to lowercase.
//
while(cbAccount--) {
wAccount[cbAccount] = towupper( MachineAccount[cbAccount] );
wPassword[cbAccount] = towlower( wPassword[cbAccount] );
}
//
// Computer account names have a trailing Unicode '$'.
//
wAccount[cbLength] = L'$';
wAccount[cbLength + 1] = L'\0'; // terminate the string
//
// If the password is greater than the max allowed, truncate.
//
if(cbLength > LM20_PWLEN) wPassword[LM20_PWLEN] = L'\0';
//
// Initialize the USER_INFO_1 structure.
//
ZeroMemory(&ui, sizeof(ui));
ui.usri1_name = wAccount;
ui.usri1_password = wPassword;
ui.usri1_flags = AccountType | UF_SCRIPT;
ui.usri1_priv = USER_PRIV_USER;
dwError=NetUserAdd(
wTargetComputer, // target computer name
1, // info level
(LPBYTE) &ui, // buffer
NULL
);
//
// Free allocated memory.
//
if(wAccount) HeapFree(GetProcessHeap(), 0, wAccount);
//
// Indicate whether the function was successful.
//
if(dwError == NO_ERROR)
return TRUE;
else {
SetLastError(dwError);
return FALSE;
}
}
Pengguna yang memanggil fungsi manajemen akun harus memiliki hak istimewa Administrator pada komputer target. Dalam kasus akun komputer yang ada, pembuat akun dapat mengelola akun, terlepas dari keanggotaan administratif. Untuk informasi selengkapnya tentang fungsi panggilan yang memerlukan hak istimewa administrator, lihat Menjalankan dengan Hak Istimewa Khusus.
SeMachineAccountPrivilege dapat diberikan pada komputer target untuk memberi pengguna tertentu kemampuan untuk membuat akun komputer. Ini memberi non-administrator kemampuan untuk membuat akun komputer. Pemanggil perlu mengaktifkan hak istimewa ini sebelum menambahkan akun komputer. Untuk informasi selengkapnya tentang hak istimewa akun, lihat Hak Istimewa dan Konstanta Otorisasi.