Aggiunta di SID a un contesto client
Un'applicazione può aggiungere identificatori di sicurezza (SID) a un contesto client esistente chiamando la funzione AuthzAddSidsToContext . La funzione AuthzAddSidsToContext consente a un'applicazione di specificare sia un elenco di SID che un elenco di SID che limitano i SID al contesto client specificato.
Il sistema usa l'elenco dei SID di limitazione quando controlla l'accesso del token a un oggetto a protezione diretta. Quando un processo o un thread con restrizioni tenta di accedere a un oggetto a protezione diretta, il sistema esegue due controlli di accesso: uno usando i SID abilitati del token e un altro usando l'elenco di SID di limitazione. L'accesso viene concesso solo se entrambi i controlli di accesso consentono i diritti di accesso richiesti.
Le variabili di attributo devono essere sotto forma di espressione quando vengono usate con operatori logici; in caso contrario, vengono valutati come sconosciuti.
Esempio
Nell'esempio seguente viene aggiunto un SID e un SID limitato al contesto client creato dall'esempio in Inizializzazione di un contesto client.
BOOL AddSidsToContext(AUTHZ_CLIENT_CONTEXT_HANDLE *phClientContext)
{
AUTHZ_CLIENT_CONTEXT_HANDLE NewContext = NULL;
PSID pEveryoneSid = NULL;
PSID pLocalSid = NULL;
SID_AND_ATTRIBUTES Sids;
SID_AND_ATTRIBUTES RestrictedSids;
DWORD SidCount = 0;
DWORD RestrictedSidCount = 0;
//Create a PSID from the "Everyone" well-known SID.
if(!ConvertStringSidToSid(L"S-1-1-0", &pEveryoneSid))
{
printf_s("ConvertStringSidToSid failed with %d\n", GetLastError());
return FALSE;
}
//Create a PSID from the "Local" well-known SID.
if(!ConvertStringSidToSid(L"S-1-2-0", &pLocalSid))
{
printf_s("ConvertStringSidToSid failed with %d\n", GetLastError);
return FALSE;
}
//Set the members of the SID_AND_ATTRIBUTES structure to be added.
Sids.Sid = pEveryoneSid;
Sids.Attributes = SE_GROUP_ENABLED;
//Set the members of the SID_AND_ATTRIBUTES structure for the restricting SID.
RestrictedSids.Sid = pLocalSid;
RestrictedSids.Attributes = SE_GROUP_ENABLED;
//Create a new context with the new "Everyone" SID and "Local" restricting SID.
if(!AuthzAddSidsToContext(
*phClientContext,
&Sids,
1,
&RestrictedSids,
1,
&NewContext))
{
printf_s("AuthzAddSidsToContext failed with %d\n", GetLastError());
if(pEveryoneSid)
{
FreeSid(pEveryoneSid);
}
if(pLocalSid)
{
FreeSid(pLocalSid);
}
return FALSE;
}
if(pEveryoneSid)
{
FreeSid(pEveryoneSid);
}
if(pLocalSid)
{
FreeSid(pLocalSid);
}
AuthzFreeContext(*phClientContext);
*phClientContext = NewContext;
return TRUE;
}
Argomenti correlati