Új számítógépfiók létrehozása
Az alábbi kódminta bemutatja, hogyan hozhat létre új számítógépfiókot a NetUserAdd függvény használatával.
A számítógépfiókok kezelésével kapcsolatos szempontok a következők:
- A számítógépfiók nevének nagybetűsnek kell lennie a fiókkezelési segédprogramokkal való konzisztenciához.
- A számítógépfiók nevének mindig van egy záró dollárjele ($). A számítógépfiókok kezeléséhez használt összes függvénynek úgy kell létrehoznia a számítógép nevét, hogy a számítógépfiók nevének utolsó karaktere dollárjel ($). A tartományközi megbízhatóság esetében a fiók neve TrustingDomainName$.
- A számítógépnév maximális hossza MAX_COMPUTERNAME_LENGTH (15). Ez a hossz nem tartalmazza a záró dollárjelet ($).
- Az új számítógépfiók jelszava a számítógépfiók nevének kisbetűs megjelenítése, a záró dollárjel ($) nélkül. A tartományközi megbízhatóság esetében a jelszó tetszőleges érték lehet, amely megfelel a kapcsolat megbízhatósági oldalán megadott értéknek.
- A jelszó maximális hossza LM20_PWLEN (14). Ha a számítógépfiók neve meghaladja ezt a hosszúságot, a jelszót ehhez a hosszúsághoz csonkolja.
- A számítógépfiók létrehozásakor megadott jelszó csak addig érvényes, amíg a számítógépfiók aktívvá nem válik a tartományban. A megbízhatósági kapcsolat aktiválása során új jelszó jön létre.
#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;
}
}
A fiókkezelési függvényeket hívó felhasználónak rendszergazdai jogosultsággal kell rendelkeznie a célszámítógépen. Meglévő számítógépfiókok esetén a fiók létrehozója rendszergazdai tagságtól függetlenül kezelheti a fiókot. További információ a rendszergazdai jogosultságokat igénylő függvények hívásáról: Speciális jogosultságokkal való futtatás.
A SeMachineAccountPrivilege a célszámítógépen adható meg, így a megadott felhasználók számítógépfiókokat hozhatnak létre. Ez lehetővé teszi a nem rendszergazdák számára, hogy számítógépfiókokat hozzanak létre. A hívónak engedélyeznie kell ezt a jogosultságot a számítógépfiók hozzáadása előtt. A fiókjogosultságokkal kapcsolatos további információkért lásd: Jogosultságok és Engedélyezési konstansok.