CreateRestrictedToken 関数 (securitybaseapi.h)
CreateRestrictedToken 関数は、既存のアクセス トークンの制限付きバージョンである新しいアクセス トークンを作成します。 制限付きトークンには、 セキュリティ識別子 (SID)、削除された特権、および制限 SID の一覧を含めることができます。 詳細については、「 制限付きトークン」を参照してください。
構文
BOOL CreateRestrictedToken(
[in] HANDLE ExistingTokenHandle,
[in] DWORD Flags,
[in] DWORD DisableSidCount,
[in, optional] PSID_AND_ATTRIBUTES SidsToDisable,
[in] DWORD DeletePrivilegeCount,
[in, optional] PLUID_AND_ATTRIBUTES PrivilegesToDelete,
[in] DWORD RestrictedSidCount,
[in, optional] PSID_AND_ATTRIBUTES SidsToRestrict,
[out] PHANDLE NewTokenHandle
);
パラメーター
[in] ExistingTokenHandle
プライマリ トークンまたは偽装トークンへのハンドル。 トークンは、制限付きトークンにすることもできます。 ハンドルには、トークンへのTOKEN_DUPLICATEアクセス権が必要です。
[in] Flags
追加の特権オプションを指定します。 このパラメーターには、0 または次の値の組み合わせを指定できます。
値 | 意味 |
---|---|
|
SeChangeNotifyPrivilege 特権を除く、新しいトークン内のすべての特権を無効にします。 この値を指定すると、 DeletePrivilegeCount パラメーターと PrivilegesToDelete パラメーターは無視されます。 |
|
この値を使用すると、システムは AppLocker 規則をチェックしたり、ソフトウェア制限ポリシーを適用したりしません。 AppLocker の場合、このフラグは、実行可能ファイル、Windows インストーラー、スクリプト、DLL の 4 つのルール コレクションすべてについてチェックを無効にします。
インストール時に抽出された DLL を実行する必要があるセットアップ プログラムを作成する場合は、SaferComputeTokenFromLevel 関数のフラグ SAFER_TOKEN_MAKE_INERTを使用します。 トークンは、 GetTokenInformation を使用して、このフラグの存在を照会できます。 Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: KB2532445がインストールされているシステムでは、呼び出し元が LocalSystem または TrustedInstaller として実行されている必要があります。または、システムはこのフラグを無視します。 詳細については、 のヘルプおよびサポート サポート 技術情報 http://support.microsoft.com/kb/2532445の「Windows 7 または Windows Server 2008 R2 を実行しているコンピューターで Office マクロを使用して AppLocker ルールを回避できます」を参照してください。 Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: AppLocker はサポートされていません。 AppLocker は、Windows 7 および Windows Server 2008 R2 で導入されました。 |
|
新しいトークンは LUA トークンです。
Windows Server 2003 および Windows XP: この値はサポートされていません。 |
|
新しいトークンには、書き込みアクセスの評価時にのみ考慮される制限 SID が含まれています。
SP2 以降の Windows XP: この定数の値は0x4。 アプリケーションが SP2 以降のオペレーティング システムと Windows XP と互換性を持つようにするには、 GetVersionEx 関数を呼び出してオペレーティング システムに対してクエリを実行し、使用する値を決定する必要があります。 Windows Server 2003 および Windows XP SP1 以前: この値はサポートされていません。 |
[in] DisableSidCount
SidsToDisable 配列内のエントリの数を指定します。
[in, optional] SidsToDisable
制限付きトークン内の拒否専用 SID を指定する SID_AND_ATTRIBUTES 構造体の配列へのポインター。 システムは、セキュリティ保護可能なオブジェクトへのアクセスを拒否するために、拒否専用 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 フラグと共に GetTokenInformation 関数を使用します。 この関数は、既存のトークンにも見つからない配列内の SID を無視します。
関数は、SID_AND_ATTRIBUTES構造体の Attributes メンバーを無視します。
無効にする SID がない場合、このパラメーターは NULL にすることができます。
[in] DeletePrivilegeCount
PrivilegesToDelete 配列内のエントリの数を指定します。
[in, optional] PrivilegesToDelete
制限付きトークンで削除する特権を指定する LUID_AND_ATTRIBUTES 構造体の配列へのポインター。
GetTokenInformation 関数を TokenPrivileges フラグと共に使用して、既存のトークンによって保持されている特権を取得できます。 関数は、既存のトークンによって保持されていない配列内の特権を無視します。
関数は、LUID_AND_ATTRIBUTES構造体の Attributes メンバーを無視します。
特権を削除しない場合は、このパラメーターを NULL にすることができます。
呼び出し元のプログラムがこの配列で渡す特権が多すぎる場合、 CreateRestrictedToken はERROR_INVALID_PARAMETERを返します。
[in] RestrictedSidCount
SidsToRestrict 配列内のエントリの数を指定します。
[in, optional] SidsToRestrict
新しいトークンの制限 SID の一覧を指定する SID_AND_ATTRIBUTES 構造体の配列へのポインター。 既存のトークンが制限付きトークンの場合、新しいトークンの SID を制限するリストは、この配列と既存のトークンの制限 SID の一覧の共通部分です。 SidsToRestrict パラメーターに配置された重複する SID を削除するためのチェックは実行されません。 重複する SID を使用すると、制限付きトークンに制限付き SID リストに冗長な情報を含めることができるようになります。
SID_AND_ATTRIBUTES構造体の Attributes メンバーは 0 である必要があります。 SID の制限は、常にアクセス チェックに対して有効になります。
制限する SID を指定しない場合は、このパラメーターを NULL にすることができます。
[out] NewTokenHandle
新しい制限付きトークンへのハンドルを受け取る変数へのポインター。 このハンドルには、 ExistingTokenHandle と同じアクセス権があります。 新しいトークンは、既存のトークンと同じ型 ( プライマリ または 偽装) です。 NewTokenHandle で返されるハンドルは複製できます。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
CreateRestrictedToken 関数は、次の方法でトークンを制限できます。
- トークン内の SID に deny-only 属性を適用して、セキュリティで保護されたオブジェクトへのアクセスに使用できないようにします。 拒否専用属性の詳細については、「 アクセス トークンの SID 属性」を参照してください。
- トークンから 特権を 削除します。
- セキュリティ保護可能なオブジェクトへのトークンのアクセスをチェックするときにシステムが使用する制限 SID の一覧を指定します。 システムは 2 つのアクセス チェックを実行します。1 つはトークンが有効な SID を使用し、もう 1 つは制限 SID の一覧を使用します。 両方のアクセス チェックで要求されたアクセス権が許可されている場合にのみ、アクセスが許可されます。
制限付きトークンは 、ImpersonateLoggedOnUser 関数で使用できます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | securitybaseapi.h (Windows.h を含む) |
Library | Advapi32.lib |
[DLL] | Advapi32.dll |