Hantera kontobehörigheter
LSA innehåller flera funktioner som program kan anropa för att räkna upp eller ange behörigheter för användar-, grupp- och lokala gruppkonton.
Innan du kan hantera kontoinformation måste din applikation få en referens till det lokala Policy-objektet, vilket demonstreras i Öppna en policysobjektreferens. För att kunna räkna upp eller redigera behörigheter för ett konto måste du dessutom ha säkerhetsidentifierare (SID) för det kontot. Din applikation kan lokalisera ett SID genom att ange kontonamnet enligt beskrivningen i Översättning mellan namn och SID:er.
Om du vill komma åt alla konton som har en viss behörighet anropar du LsaEnumerateAccountsWithUserRight. Den här funktionen fyller en matris med SID:erna för alla konton som har den angivna behörigheten.
När du har fått SID för ett konto kan du ändra dess behörigheter. Anropa LsaAddAccountRights för att lägga till behörigheter till kontot. Om det angivna kontot inte finns skapar LsaAddAccountRights det. Om du vill ta bort behörigheter från ett konto anropar du LsaRemoveAccountRights. Om du tar bort alla behörigheter från ett konto tar LsaRemoveAccountRights även bort kontot.
Ditt program kan kontrollera de behörigheter som för närvarande är tilldelade till ett konto genom att anropa LsaEnumerateAccountRights. Den här funktionen fyller en matris med LSA_UNICODE_STRING strukturer. Varje struktur innehåller namnet på en behörighet som innehas av det angivna kontot.
I följande exempel läggs behörigheten SeServiceLogonRight till i ett konto. I det här exemplet anger variabeln AccountSID kontots SID. Mer information om hur du söker efter ett konto-SID finns i Translating Between Names and SIDs.
#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));
}
}
I föregående exempel konverterar funktionen InitLsaString en Unicode- sträng till en LSA_UNICODE_STRING struktur. Koden för den här funktionen visas i Using LSA Unicode Strings.