Gestion des autorisations de compte
Le LSA fournit plusieurs fonctions que les applications peuvent appeler pour énumérer ou définir des privilèges pour les comptes d’utilisateurs, de groupes et de groupes locaux.
Avant de pouvoir gérer les informations de compte, votre application doit obtenir un descripteur de l’objet de stratégie locale, comme indiqué dans ouverture d’un handle d’objet de stratégie. En outre, pour énumérer ou modifier des autorisations pour un compte, vous devez disposer de l' identificateur de sécurité (SID) de ce compte. Votre application peut localiser un SID en fonction du nom du compte, comme décrit dans traduction entre les noms et les SID.
Pour accéder à tous les comptes qui ont une autorisation particulière, appelez LsaEnumerateAccountsWithUserRight. Cette fonction remplit un tableau avec les SID de tous les comptes qui disposent de l’autorisation spécifiée.
Une fois que vous avez obtenu le SID d’un compte, vous pouvez modifier ses autorisations. Appelez LsaAddAccountRights pour ajouter des autorisations au compte. Si le compte spécifié n’existe pas, LsaAddAccountRights le crée. Pour supprimer des autorisations d’un compte, appelez LsaRemoveAccountRights. Si vous supprimez toutes les autorisations d’un compte, LsaRemoveAccountRights supprime également le compte.
Votre application peut vérifier les autorisations actuellement affectées à un compte en appelant LsaEnumerateAccountRights. Cette fonction remplit un tableau de structures de _ _ chaînes Unicode LSA . Chaque structure contient le nom d’un privilège détenu par le compte spécifié.
L’exemple suivant ajoute l’autorisation SeServiceLogonRight à un compte. Dans cet exemple, la variable AccountSID spécifie le SID du compte. Pour plus d’informations sur la recherche d’un SID de compte, consultez conversion entre les noms et les SID.
#include <windows.h>
#include <ntsecapi.h>
void AddPrivileges(PSID AccountSID, LSA_HANDLE PolicyHandle)
{
LSA_UNICODE_STRING lucPrivilege;
NTSTATUS ntsResult;
// Create an LSA_UNICODE_STRING for the privilege names.
if (!InitLsaString(&lucPrivilege, L"SeServiceLogonRight"))
{
wprintf(L"Failed InitLsaString\n");
return;
}
ntsResult = LsaAddAccountRights(
PolicyHandle, // An open policy handle.
AccountSID, // The target SID.
&lucPrivilege, // The privileges.
1 // Number of privileges.
);
if (ntsResult == STATUS_SUCCESS)
{
wprintf(L"Privilege added.\n");
}
else
{
wprintf(L"Privilege was not added - %lu \n",
LsaNtStatusToWinError(ntsResult));
}
}
Dans l’exemple précédent, la fonction InitLsaString convertit une chaîne Unicode en une structure de _ _ chaîne Unicode LSA . Le code pour cette fonction s’affiche dans utilisation de chaînes Unicode LSA.