次の方法で共有


SeFilterToken 関数 (ntifs.h)

SeFilterToken ルーチンは、既存のアクセス トークンの制限付きバージョンである新しいアクセス トークンを作成します。

構文

NTSTATUS SeFilterToken(
  [in]           PACCESS_TOKEN     ExistingToken,
  [in]           ULONG             Flags,
  [in, optional] PTOKEN_GROUPS     SidsToDisable,
  [in, optional] PTOKEN_PRIVILEGES PrivilegesToDelete,
  [in, optional] PTOKEN_GROUPS     RestrictedSids,
                 PACCESS_TOKEN     *FilteredToken
);

パラメーター

[in] ExistingToken

プライマリ トークンまたは偽装トークンへのポインター。 トークンは、制限付きトークンにすることもできます。 このトークンは、TOKEN_DUPLICATEアクセスのために既に開かれている必要があります。 このポインターは、DesiredAccess 型としてTOKEN_DUPLICATEを指定 ObReferenceObjectByHandleを呼び出すことによって、既存のトークン ハンドルから取得できます。

[in] Flags

追加の特権オプションを指定します。 このパラメーターには、0 または次の値の組み合わせを指定できます。

価値 意味
DISABLE_MAX_PRIVILEGE SE_CHANGE_NOTIFY_PRIVILEGEを除く、新しいトークン内のすべての特権を無効にします。 この値を指定すると、PrivilegesToDelete パラメーターは無視されます。
SANDBOX_INERT TOKEN_SANDBOX_INERT フラグをトークンに格納します。

[in, optional] SidsToDisable

制限付きトークンの拒否専用 SID を指定するSID_AND_ATTRIBUTES構造体の配列を含むTOKEN_GROUPS構造体へのポインター。 システムは、セキュリティ保護可能なオブジェクトへのアクセスを拒否するために拒否専用 SID を使用します。 拒否専用 SID がない場合、アクセスは許可されません。

SID を無効にすると、 SE_GROUP_USE_FOR_DENY_ONLY が有効になり、 SE_GROUP_ENABLED とSE_GROUP_ENABLED_BY_DEFAULTがオフになります。 その他の属性はすべて無視されます。

拒否のみの属性は、SE_GROUP_MANDATORY属性を持つユーザー SID やグループ SID など、既存のトークンの SID の任意の組み合わせに適用されます。 既存のトークンに関連付けられている SID を取得するには、TokenUser フラグと TokenGroups フラグ SeQueryInformationToken を呼び出します。 SeFilterToken は、既存のトークンにも見つからない配列内の SID を無視します。

SeFilterToken は、SID_AND_ATTRIBUTES構造体のメンバー 属性を無視します。

このパラメーターは省略可能であり、NULL にすることができます。

[in, optional] PrivilegesToDelete

制限付きトークンで削除する権限を指定するLUID_AND_ATTRIBUTES構造体の配列を含むTOKEN_PRIVILEGES構造体へのポインター。

既存のトークンによって保持されている特権を取得するには、TokenPrivileges フラグ SeQueryInformationToken を呼び出します。 SeFilterToken は、既存のトークンによって保持されていない配列内の権限を無視します。

SeFilterToken は、LUID_AND_ATTRIBUTES構造体のメンバー 属性を無視します。

このパラメーターは省略可能であり、NULL にすることができます。

[in, optional] RestrictedSids

新しいトークンの制限 SID の一覧を指定するSID_AND_ATTRIBUTES構造体の配列を含むTOKEN_GROUPS構造体へのポインター。 既存のトークンが制限付きトークンの場合、新しいトークンの制限 SID の一覧は、この配列と既存のトークンの制限 SID の一覧の積集合です。

SID_AND_ATTRIBUTES構造体のメンバー 属性は 0 である必要があります。 SID の制限は、常にアクセス チェックに対して有効になります。

このパラメーターは省略可能であり、NULL にすることができます。

FilteredToken

新しい制限付きトークンのアドレスを受け取る呼び出し元によって割り当てられた変数へのポインター。 新しいトークンは、既存のトークンと同じ種類 (プライマリまたは偽装) です。

戻り値

1 つ以上のパラメーター値が無効であった場合、SeFilterToken はSTATUS_INVALID_PARAMETERを返します。 (この値は、ターゲット トークンが偽装トークンでない場合に返されます)。それ以外の場合 SeFilterToken はSTATUS_SUCCESSを返します。

備考

SeFilterToken は、次の方法でトークンを制限できます。

  • トークン内の SID に拒否専用属性を適用して、セキュリティで保護されたオブジェクトにアクセスできないようにします。 拒否専用属性の詳細については、Microsoft Windows SDK ドキュメントのアクセス トークンの SID 属性を参照してください。

  • トークンから特権を削除します。

  • セキュリティ保護可能なオブジェクトへのトークンのアクセスをチェックするときにシステムが使用する制限 SID の一覧を指定します。 システムは 2 つのアクセス チェックを実行します。1 つはトークンの有効な SID を使用し、もう 1 つは制限 SID のリストを使用します。 両方のアクセス チェックで要求されたアクセス権が許可されている場合にのみ、アクセスが許可されます。

制限付きトークンは、SeCreateClientSecuritySeImpersonateClientEx と共に使用して、アクセス権と特権が制限されたプロセスを作成できます。

セキュリティとアクセス制御の詳細については、ドライバー開発者向けの Windows セキュリティ モデルの と、Windows SDK のこれらのトピックに関するドキュメントを参照してください。

NewToken で返されたトークンが不要になったら、ObDereferenceObjectを呼び出して解放します。

必要条件

要件 価値
サポートされる最小クライアント Windows XP
ターゲット プラットフォーム 万国
ヘッダー ntifs.h (Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

関連項目

LUID_AND_ATTRIBUTES

ObDereferenceObject

ObReferenceObjectByHandle

SID

SID_AND_ATTRIBUTES

SeCreateClientSecurity

SeImpersonateClientEx

SeQueryInformationToken

SeTokenIsRestricted

TOKEN_GROUPS

TOKEN_PRIVILEGES