Správa oprávnění účtu
LSA poskytuje několik funkcí, které mohou aplikace volat pro vyčíslení nebo nastavení oprávnění u uživatelských, skupinových a místních skupinových účtů.
Než budete moct spravovat informace o účtu, musí aplikace získat popisovač místního objektu Politika, jak je znázorněno v Otevření popisovače objektu Politika. Kromě toho, pokud chcete vytvořit výčet nebo upravit oprávnění pro účet, musíte mít identifikátor zabezpečení (SID) pro tento účet. Vaše aplikace může podle názvu účtu nalézt identifikátor SID, jak je popsáno v Překlad mezi názvy a identifikátory SID.
Pro přístup ke všem účtům, které mají určité oprávnění, zavolejte LsaEnumerateAccountsWithUserRight. Tato funkce naplní pole identifikátory SID všech účtů, které mají zadané oprávnění.
Po získání identifikátoru SID účtu můžete upravit jeho oprávnění. Voláním LsaAddAccountRights přidejte oprávnění k účtu. Pokud zadaný účet neexistuje, LsaAddAccountRights ho vytvoří. Chcete-li odebrat oprávnění z účtu, zavolejte LsaRemoveAccountRights. Pokud odeberete všechna oprávnění z účtu, LsaRemoveAccountRights odstraní také účet.
Aplikace může zkontrolovat oprávnění aktuálně přiřazená k účtu voláním LsaEnumerateAccountRights. Tato funkce naplní pole LSA_UNICODE_STRING struktur. Každá struktura obsahuje název oprávnění uchovávaného zadaným účtem.
Následující příklad přidá oprávnění SeServiceLogonRight k účtu. V tomto příkladu proměnná AccountSID určuje identifikátor SID účtu. Další informace o tom, jak vyhledat identifikátor SID účtu, viz Překlad mezi názvy a identifikátory 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));
}
}
V předchozím příkladu funkce InitLsaString převede řetězec Unicode na LSA_UNICODE_STRING strukturu. Kód této funkce je uveden v Použití řetězců LSA Unicode.