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アクセスのために既に開かれている必要があります。 このポインターは、TOKEN_DUPLICATEを DesiredAccess 型として指定して 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構造体の Attributes メンバーを無視します。
このパラメーターは省略可能であり、NULL にすることができます。
[in, optional] PrivilegesToDelete
制限付きトークンで削除する権限を指定するLUID_AND_ATTRIBUTES構造体の配列を含むTOKEN_PRIVILEGES構造体へのポインター。
既存のトークンによって保持されている特権を取得するには、TokenPrivileges フラグを指定して SeQueryInformationToken を呼び出します。 SeFilterToken は、既存のトークンによって保持されていない配列内の特権を無視します。
SeFilterToken は 、LUID_AND_ATTRIBUTES構造体の Attributes メンバーを無視します。
このパラメーターは省略可能であり、NULL にすることができます。
[in, optional] RestrictedSids
新しいトークンの制限 SID のリストを指定するSID_AND_ATTRIBUTES構造体の配列を含むTOKEN_GROUPS構造体へのポインター。 既存のトークンが制限付きトークンの場合、新しいトークンの制限 SID の一覧は、この配列の共通部分と、既存のトークンの制限 SID の一覧です。
SID_AND_ATTRIBUTES構造体の 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 のリストを使用します。 アクセスは、両方のアクセス チェックで要求されたアクセス権が許可されている場合にのみ付与されます。
制限付きトークンは 、SeCreateClientSecurity および SeImpersonateClientEx と共に使用して、アクセス権と特権が制限されたプロセスを作成できます。
セキュリティとアクセス制御の詳細については、 ドライバー開発者向けの Windows セキュリティ モデル と、Windows SDK のこれらのトピックに関するドキュメントを参照してください。
NewToken で返されたトークンが不要になったら、ObDereferenceObject を呼び出して解放します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP |
対象プラットフォーム | ユニバーサル |
Header | ntifs.h (Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL |