次の方法で共有


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_PRIVILEGE
0x1
SeChangeNotifyPrivilege 特権を除く、新しいトークン内のすべての特権を無効にします。 この値を指定した場合、DeletePrivilegeCount および privilegesToDelete パラメーター は無視されます。
SANDBOX_INERT
0x2
この値を使用する場合、システムは 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: 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_TOKEN
0x4
新しいトークンは LUA トークンです。

Windows Server 2003 および Windows XP: この値はサポートされていません。
WRITE_RESTRICTED
0x8
新しいトークンには、書き込みアクセスを評価するときにのみ考慮される 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_ENABLEDSE_GROUP_ENABLED_BY_DEFAULTがオフになります。 その他の属性はすべて無視されます。

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

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

無効にする SID がない場合、このパラメーターは NULL を できます。

[in] DeletePrivilegeCount

PrivilegesToDelete 配列内のエントリの数を指定します。

[in, optional] PrivilegesToDelete

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

GetTokenInformation 関数を TokenPrivileges フラグと共に使用して、既存のトークンによって保持されている特権を取得できます。 この関数は、既存のトークンによって保持されていない配列内のすべての特権を無視します。

この関数は、LUID_AND_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 構造体のメンバー 属性は 0 である必要があります。 SID の制限は、常にアクセス チェックに対して有効になります。

制限する SID を指定しない場合は、このパラメーターを NULL できます。

[out] NewTokenHandle

新しい制限付きトークンへのハンドルを受け取る変数へのポインター。 このハンドルには、ExistingTokenHandleと同じアクセス権があります。 新しいトークンは、既存のトークン プライマリ または 偽装と同じ種類です。 NewTokenHandle で返されるハンドルは複製できます。

戻り値

関数が成功した場合、戻り値は 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 を する

ImpersonateLoggedOnUser

IsTokenRestricted の

LUID_AND_ATTRIBUTES

SID_AND_ATTRIBUTES