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 または次の値の組み合わせを指定できます。
価値 | 意味 |
---|---|
DISABLE_MAX_PRIVILEGE0x1 |
SeChangeNotifyPrivilege 特権を除く、新しいトークン内のすべての特権を無効にします。 この値を指定した場合、 |
SANDBOX_INERT0x2 |
この値を使用する場合、システムは AppLocker 規則 インストール時に抽出された DLL を実行する必要があるセットアップ プログラムを作成する場合は、SaferComputeTokenFromLevel 関数のフラグ SAFER_TOKEN_MAKE_INERT を使用します。 トークンは、GetTokenInformation Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: On system with KB2532445インストールされている場合、呼び出し元は LocalSystem または TrustedInstaller として実行されている必要があります。または、システムはこのフラグを無視します。 詳細については、「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_TOKEN0x4 |
新しいトークンは LUA トークンです。 Windows Server 2003 および Windows XP: この値はサポートされていません。 |
WRITE_RESTRICTED0x8 |
新しいトークンには、書き込みアクセスを評価するときにのみ考慮される 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 がない場合、このパラメーターは NULL を
[in] DeletePrivilegeCount
PrivilegesToDelete 配列内のエントリの数を指定します。
[in, optional] PrivilegesToDelete
制限付きトークンで削除する権限を指定する LUID_AND_ATTRIBUTES 構造体の配列へのポインター。
GetTokenInformation 関数を TokenPrivileges フラグと共に使用して、既存のトークンによって保持されている特権を取得できます。 この関数は、既存のトークンによって保持されていない配列内のすべての特権を無視します。
この関数は、
特権を削除しない場合は、このパラメーターを NULL
呼び出し元のプログラムがこの配列に渡す権限が多すぎる場合は、CreateRestrictedToken
[in] RestrictedSidCount
SidsToRestrict 配列内のエントリの数を指定します。
[in, optional] SidsToRestrict
新しいトークンの制限 SID のリストを指定する SID_AND_ATTRIBUTES 構造体の配列へのポインター。 既存のトークンが制限付きトークンの場合、新しいトークンの制限 SID の一覧は、この配列と既存のトークンの制限 SID の一覧の積集合です。 SidsToRestrict パラメーターに配置された重複する SID を削除するためのチェックは実行されません。 重複する SID を使用すると、制限付きトークンに、制限付き SID リストに冗長な情報を含めることができるようになります。
制限する SID を指定しない場合は、このパラメーターを NULL
[out] NewTokenHandle
新しい制限付きトークンへのハンドルを受け取る変数へのポインター。 このハンドルには、ExistingTokenHandle
戻り値
関数が成功した場合、戻り値は 0 以外です。
関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError
備考
CreateRestrictedToken 関数は、次の方法でトークンを制限できます。
- トークン内の SID に拒否専用属性を適用して、セキュリティで保護されたオブジェクトにアクセスできないようにします。 拒否のみの属性の詳細については、「アクセス トークンの SID 属性を
する」を参照してください。 - トークンから
特権を削除します。 - セキュリティ保護可能なオブジェクトへのトークンのアクセスをチェックするときにシステムが使用する制限 SID の一覧を指定します。 システムは 2 つのアクセス チェックを実行します。1 つはトークンの有効な SID を使用し、もう 1 つは制限 SID のリストを使用します。 両方のアクセス チェックで要求されたアクセス権が許可されている場合にのみ、アクセスが許可されます。
CreateProcessAsUser 関数の制限付きトークンを使用して、アクセス権と特権が制限されたプロセスを作成できます。 プロセスが、制限付きバージョンの独自のトークン 使用して CreateProcessAsUser を呼び出す場合、呼び出し元のプロセスは SE_ASSIGNPRIMARYTOKEN_NAME 特権を持つ必要はありません。
制限付きトークンは、ImpersonateLoggedOnUser 関数で使用できます。
警告
制限付きトークンを使用するアプリケーションは、既定のデスクトップ以外のデスクトップで制限付きアプリケーションを実行する必要があります。 これは、既定のデスクトップ上の無制限のアプリケーションに対して、SendMessage または PostMessageを使用して、制限付きアプリケーションによる攻撃を防ぐために必要です。 必要に応じて、アプリケーションの目的でデスクトップを切り替えます。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | securitybaseapi.h (Windows.h を含む) |
ライブラリ | Advapi32.lib |
DLL | Advapi32.dll |
関連項目
CreateProcessAsUser の
GetTokenInformation を
IsTokenRestricted の