Forcer un utilisateur à modifier le mot de passe de connexion
Cet exemple de code montre comment forcer un utilisateur à modifier le mot de passe d’ouverture de session à la prochaine ouverture de session à l’aide des fonctions NetUserGetInfo et NetUserSetInfo et de la structure USER_INFO_3 . Notez qu’à partir de Windows XP, il est recommandé d’utiliser la structure USER_INFO_4 à la place.
Définissez le membre usri3_password_expired de la structure USER_INFO_3 sur une valeur différente de zéro à l’aide du fragment de code suivant :
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#define INCL_NET
#include <stdio.h>
#include <lm.h>
#pragma comment(lib, "netapi32.lib")
#define USERNAME L"your_user_name"
#define SERVER L"\\\\server"
void main( void )
{
PUSER_INFO_3 pUsr = NULL;
NET_API_STATUS netRet = 0;
DWORD dwParmError = 0;
//
// First, retrieve the user information at level 3. This is
// necessary to prevent resetting other user information when
// the NetUserSetInfo call is made.
//
netRet = NetUserGetInfo( SERVER, USERNAME, 3, (LPBYTE *)&pUsr);
if( netRet == NERR_Success )
{
//
// The function was successful; set the usri3_password_expired value to
// a nonzero value. Call the NetUserSetInfo function.
//
pUsr->usri3_password_expired = TRUE;
netRet = NetUserSetInfo( SERVER, USERNAME, 3, (LPBYTE)pUsr, &dwParmError);
//
// A zero return indicates success.
// If the return value is ERROR_INVALID_PARAMETER,
// the dwParmError parameter will contain a value indicating the
// invalid parameter within the user_info_3 structure. These values
// are defined in the lmaccess.h file.
//
if( netRet == NERR_Success )
printf("User %S will need to change password at next logon", USERNAME);
else printf("Error %d occurred. Parm Error %d returned.\n", netRet, dwParmError);
//
// Must free the buffer returned by NetUserGetInfo.
//
NetApiBufferFree( pUsr);
}
else printf("NetUserGetInfo failed: %d\n", netRet);
}