クライアント コンテキストへの SID の追加
アプリケーションは、AuthzAddSidsToContext 関数を呼び出すことによって、既存のクライアント コンテキストにセキュリティ識別子 (SID) を追加できます。 AuthzAddSidsToContext 関数を使用すると、アプリケーションは SID のリストと、指定されたクライアント コンテキストに SID を制限するリストの両方を指定できます。
システムは、セキュリティ保護可能なオブジェクトへのトークンのアクセスをチェックするときに、制限 SID の一覧を使用します。 制限付きプロセスまたはスレッドがセキュリティ保護可能なオブジェクトにアクセスしようとすると、システムは 2 つのアクセス チェックを実行します。1 つはトークンの有効な SID を使用し、もう 1 つは制限 SID の一覧を使用します。 アクセスは、両方のアクセス チェックで要求されたアクセス権が許可されている場合にのみ付与されます。
論理演算子と共に使用する場合、属性変数は式の形式である必要があります。それ以外の場合は、不明として評価されます。
例
次の例では、「クライアント コンテキストの初期化」の例で作成したクライアント コンテキストに SID と制限 SID を追加します。
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;
}
関連トピック