Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'esempio di codice seguente illustra come creare un nuovo account computer usando la funzione NetUserAdd.
Di seguito sono riportate alcune considerazioni per la gestione degli account computer:
- Il nome dell'account del computer deve essere in maiuscolo per coerenza con le utilità di gestione degli account.
- Un nome di account computer termina sempre con un segno di dollaro ($). Tutte le funzioni usate per gestire gli account computer devono compilare il nome del computer in modo che l'ultimo carattere del nome dell'account computer sia un segno di dollaro ($). Per l'attendibilità tra domini, il nome dell'account è TrustingDomainName$.
- La lunghezza massima del nome computer è MAX_COMPUTERNAME_LENGTH (15). Questa lunghezza non include il segno di dollaro finale ($).
- La password per un nuovo account computer dovrebbe essere il nome dell'account computer scritto in minuscolo, senza il carattere finale del dollaro ($). Per l'attendibilità tra domini, la password può essere un valore arbitrario che corrisponde al valore specificato sul lato trust della relazione.
- La lunghezza massima della password è LM20_PWLEN (14). La password deve essere ridotta a questa lunghezza se il nome dell'account del computer supera tale lunghezza.
- La password specificata in fase di creazione dell'account computer è valida solo fino a quando l'account computer non diventa attivo nel dominio. Durante l'attivazione della relazione di trust viene stabilita una nuova password.
#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;
}
}
L'utente che chiama le funzioni di gestione degli account deve avere privilegi di amministratore nel computer di destinazione. Nel caso di account computer esistenti, l'autore dell'account può gestire l'account, indipendentemente dall'appartenenza amministrativa. Per altre informazioni sulla chiamata di funzioni che richiedono privilegi di amministratore, vedere Esecuzione con privilegi speciali.
È possibile concedere SeMachineAccountPrivilege nel computer di destinazione per consentire agli utenti specificati di creare account computer. Ciò consente agli utenti non amministratori di creare account computer. Il chiamante deve abilitare questo privilegio prima di aggiungere l'account computer. Per ulteriori informazioni sui privilegi dell'account, vedere Privilegi e Costanti di Autorizzazione.