Condividi tramite


Funzione NetUserChangePassword (lmaccess.h)

La funzione NetUserChangePassword modifica la password di un utente per un server di rete o un dominio specificato.

Sintassi

NET_API_STATUS NET_API_FUNCTION NetUserChangePassword(
  [in] LPCWSTR domainname,
  [in] LPCWSTR username,
  [in] LPCWSTR oldpassword,
  [in] LPCWSTR newpassword
);

Parametri

[in] domainname

Puntatore a una stringa costante che specifica il nome DNS o NetBIOS di un server remoto o di un dominio in cui deve essere eseguita la funzione. Se questo parametro è NULL, viene usato il dominio di accesso del chiamante.

[in] username

Puntatore a una stringa costante che specifica un nome utente. La funzione NetUserChangePassword modifica la password per l'utente specificato.

Se questo parametro è NULL, viene usato il nome di accesso del chiamante. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

[in] oldpassword

Puntatore a una stringa costante che specifica la vecchia password dell'utente.

[in] newpassword

Puntatore a una stringa costante che specifica la nuova password dell'utente.

Valore restituito

Se la funzione ha esito positivo, il valore restituito viene NERR_Success.

Se la funzione ha esito negativo, il valore restituito può essere uno dei codici di errore seguenti.

Codice restituito Descrizione
ERROR_ACCESS_DENIED
L'utente non ha accesso alle informazioni richieste.
ERROR_INVALID_PASSWORD
L'utente ha immesso una password non valida.
NERR_InvalidComputer
Il nome del computer non è valido.
NERR_NotPrimary
L'operazione è consentita solo nel controller di dominio primario del dominio.
NERR_UserNotFound
Impossibile trovare il nome utente.
NERR_PasswordTooShort
La password è più breve di quella richiesta. (La password potrebbe anche essere troppo lunga, troppo recente nella cronologia di modifiche, non avere abbastanza caratteri univoci o non soddisfare un altro requisito dei criteri password.)

Commenti

Se si esegue la programmazione per Active Directory, è possibile chiamare determinati metodi ADSI (Active Directory Service Interface) per ottenere lo stesso risultato che è possibile ottenere chiamando le funzioni utente di gestione di rete. Per altre informazioni, vedere IADsUser e IADsComputer.

Se un'applicazione chiama la funzione NetUserChangePassword in un controller di dominio che esegue Active Directory, l'accesso è consentito o negato in base all'elenco di controllo di accesso (ACL) per l'oggetto a protezione diretta. L'elenco di controllo di accesso predefinito consente solo agli amministratori di dominio e agli operatori account di chiamare questa funzione. In un server membro o in una workstation, solo gli amministratori e Power Users possono chiamare questa funzione. Un utente può modificare la propria password. Per altre informazioni, vedere Requisiti di sicurezza per le funzioni di gestione di rete. Per altre informazioni su ACL, ACL e token di accesso, vedere Controllo di accesso Model.

Il descrittore di sicurezza dell'oggetto User viene utilizzato per eseguire il controllo di accesso per questa funzione. Inoltre, il chiamante deve avere il diritto di accesso di controllo "Cambia password" sull'oggetto User. Questo diritto viene concesso all'accesso anonimo e a Tutti per impostazione predefinita.

Si noti che affinché la funzione abbia esito positivo, il parametro oldpassword deve corrispondere alla password così come esiste attualmente.

In alcuni casi, il processo che chiama la funzione NetUserChangePassword deve avere anche il privilegio SE_CHANGE_NOTIFY_NAME abilitato; in caso contrario, NetUserChangePassword ha esito negativo e GetLastError restituisce ERROR_ACCESS_DENIED. Questo privilegio non è necessario per l'account LocalSystem o per gli account membri del gruppo administrators. Per impostazione predefinita, SE_CHANGE_NOTIFY_NAME è abilitato per tutti gli utenti, ma alcuni amministratori possono disabilitare il privilegio per tutti. Per altre informazioni sui privilegi dell'account, vedere Privilegi e costanti di autorizzazione.

Vedere Forzare un utente a modificare la password di accesso per un esempio di codice che illustra come forzare un utente a modificare la password di accesso nell'accesso successivo usando le funzioni NetUserGetInfo e NetUserSetInfo .

I nomi degli account utente sono limitati a 20 caratteri e i nomi dei gruppi sono limitati a 256 caratteri. Inoltre, i nomi di account non possono essere terminati da un punto e non possono includere virgole o uno dei caratteri stampabili seguenti: ", /, , [, ], :, |, <, , >+, =, ;, ?, *. I nomi non possono includere anche caratteri nell'intervallo 1-31, che non sono stampabili.

La funzione NetUserChangePassword non controlla il modo in cui i parametri oldpassword e newpassword vengono protetti quando vengono inviati tramite rete a un server remoto. Qualsiasi crittografia di questi parametri viene gestita dal meccanismo RPC (Remote Procedure Call) supportato dal redirector di rete che fornisce il trasporto di rete. La crittografia è controllata anche dai meccanismi di sicurezza supportati dal computer locale e dai meccanismi di sicurezza supportati dal server di rete remoto o dal dominio specificato nel parametro domainname . Per altre informazioni sulla sicurezza quando viene usato il redirector di rete Microsoft e il server di rete remota esegue Microsoft Windows, vedere la documentazione del protocollo per MS-RPCE, MS-SAMR, MS-SPNG e MS-NLMP.

Esempio

L'esempio di codice seguente illustra come modificare la password di un utente con una chiamata alla funzione NetUserChangePassword . Tutti i parametri della funzione sono obbligatori.

#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")

#include <stdio.h>
#include <windows.h> 
#include <lm.h>

int wmain(int argc, wchar_t *argv[])
{
   DWORD dwError = 0;
   NET_API_STATUS nStatus;
   //
   // All parameters are required.
   //
   if (argc != 5)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName OldPassword NewPassword\n", argv[0]);
      exit(1);
   }
   //
   // Call the NetUserChangePassword function.
   //
   nStatus = NetUserChangePassword(argv[1], argv[2], argv[3], argv[4]);
   //
   // If the call succeeds, inform the user.
   //
   if (nStatus == NERR_Success)
      fwprintf(stderr, L"User password has been changed successfully\n");
   //
   // Otherwise, print the system error.
   //
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);

   return 0;
}

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione lmaccess.h (include Lm.h)
Libreria Netapi32.lib
DLL Netapi32.dll

Vedi anche

NetUserGetInfo

NetUserSetInfo

Funzioni di gestione di rete

Panoramica della gestione della rete

Funzioni utente