Добавление идентификаторов безопасности в контекст клиента
Приложение может добавлять идентификаторы безопасности (SID) в существующий контекст клиента, вызывая функцию AuthzAddSidsToContext . Функция AuthzAddSidsToContext позволяет приложению указать как список идентификаторов безопасности, так и список, ограничивающий идентификаторы безопасности указанным контекстом клиента.
Система использует список ограничивающих идентификаторов безопасности при проверке доступа маркера к защищаемому объекту. Когда ограниченный процесс или поток пытается получить доступ к защищаемому объекту, система выполняет две проверки доступа: одну с помощью включенных идентификаторов БЕЗОПАСНОСТИ маркера, а другую — с помощью списка ограничивающих идентификаторов безопасности. Доступ предоставляется только в том случае, если обе проверки доступа разрешают запрошенные права доступа.
Переменные атрибута должны иметь форму выражения при использовании с логическими операторами; В противном случае они оцениваются как неизвестные.
Пример
В следующем примере идентификатор безопасности и ограничивающий идентификатор безопасности добавляется в контекст клиента, созданный в примере в разделе Инициализация контекста клиента.
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;
}
Связанные темы