AppIDFlags
COMサーバーのアクティブ化動作を制御するフラグのセット。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID
{AppID_GUID}
AppIDFlags = flags
これはREG_DWORD値です。
フラグ値 | 定数 |
---|---|
0x1 | APPIDREGFLAGS_ACTIVATE_IUSERVER_INDESKTOP |
0x2 | APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND |
0x4 | APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFY |
APPIDREGFLAGS_ACTIVATE_IUSERVER_INDESKTOPフラグがAppIDFlagsでクリアされている場合、またはAppIDFlagsが存在しない場合、対話型ユーザーCOMサーバーのアクティブ化要求を行うターミナルサーバーセッションのクライアントは、アクティブ化要求でセッションの"winsta0"ウィンドウステーションの"default"デスクトップのCOMサーバーにバインドするか、または起動してバインドします。 たとえば、クライアントがセッション3の"winsta0\desktop1"を実行している場合、セッション3のアクティブ化要求は、COMサーバーのインスタンスがセッション3の"winsta0\desktop1"で既に実行されている場合でも、セッション3の"winsta0\default"のCOMサーバーにバインドするか、起動してバインドします。
APPIDREGFLAGS_ACTIVATE_IUSERVER_INDESKTOPフラグがAppIDFlags値で設定されている場合、COMはクライアントのデスクトップで実行されているサーバープロセスと、アクティブ化要求のセッションにバインドするか、起動してバインドします。 たとえば、クライアントがセッション3で"winsta0\desktop1"を実行している場合、セッション3のアクティブ化要求は、COMサーバーのインスタンスがセッション3の"winsta0\default"で既に実行されている場合でも、セッション3の"winsta0\desktop1"のCOMサーバーにバインドするか、起動してバインドします。
クライアントは、 セッションモニカーを使用して、アクティブ化要求を行うときに、クライアントのセッションとは異なるセッションを指定できます。
APPIDREGFLAGS_ACTIVATE_IUSERVER_INDESKTOPフラグは、RunAs"対話ユーザー"に構成されているCOMサーバーにのみ適用されます。
APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BINDフラグがAppIDFlagsで設定されている場合、RunAs"Activator"に構成されているCOMサーバーは、プロセストークンのLogonID SIDへのPROCESS_ALL_ACCESSを許可するプロセスセキュリティ記述子を使用して起動されます。 さらに、セキュリティ記述子の所有者は、プロセストークンのLogonID SIDに設定されます。
APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BINDフラグがAppIDFlagsで設定されている場合、RunAs"This User"に構成されているCOMサーバーは、プロセストークンのLogonID SIDでPROCESS_ALL_ACCESSを許可するプロセスセキュリティ記述子を使用して起動されます。 さらに、セキュリティ記述子の所有者は、プロセストークンのLogonID SIDに設定されます。 さらに、COMサービスコントロールマネージャー (SCM) は、COMサーバープロセスのトークンを次のように変更します。
- APPID SIDをトークンに追加します。 トークンの既定の随意アクセス制御リスト (DACL) でAPPID SIDにフルアクセス権を付与します。 Windows Vista以降のバージョンのWindowsでは、トークンの既定のDACLでOwnerRights SID READ_CONTROLアクセス許可が付与されます。 Windows Vistaより前のバージョンのWindowsでは、トークン所有者をAPPID SIDに設定します。
APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BINDフラグを使用する場合は、次のセキュリティ上の考慮事項を考慮する必要があります。
- APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BINDフラグは、組み込みのサービスセキュリティコンテキストのいずれかで起動されたCOMサーバーによって設定されることを意図しています。NetworkServiceまたはLocalServiceアカウント。 サーバーが特権クライアントを偽装し、APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BINDフラグが設定されていない場合、同じセキュリティコンテキストを持つ他のプロセスで実行されている悪意のあるコードは、COMサーバープロセスから特権クライアントの偽装トークンをハイジャックすることによって特権を昇格させることができます。
- APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BINDフラグが設定されている場合、COMはRunAs"Activator"comサーバーの場合にプロセスオブジェクトのセキュリティ記述子を強化します。 このようなサーバーでは、COMクライアントはCOMアクティベーションに使用するトークンを強化する必要があります。
- APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BINDフラグが設定されている場合、COMはRunAs"This User"comサーバーの場合にプロセスオブジェクトのセキュリティ記述子を強化します。 また、COM SCMがトークンを作成するエンティティであるため、COMサーバーのプロセストークンも強化されます。
APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BINDフラグは、MSRC8322修正プログラム (セキュリティ情報MS09-012) が適用されている場合にのみ、Windows XP、Windows Server 2003、Windows Vista、およびWindows Server 2008でサポートされています。 Windows 7以降のバージョンのWindowsでは、ネイティブでサポートされています。
APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BINDフラグは、RunAs"Activator"または"This User"に構成されているCOMサーバーにのみ適用されます。 NTサービスであるCOMサーバーには適用されません。
APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFYフラグがAppIDFlagsで設定されている場合、COM SCMは、RPC_C_IMP_LEVEL_IDENTIFYの偽装レベルを使用して、COMサーバープロセスにオブジェクトのアクティブ化要求を発行します。
APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFYフラグが設定されていない場合、COM SCMは、RPC_C_IMP_LEVEL_IMPERSONATEの偽装レベルを使用して、COMサーバープロセスにオブジェクトのアクティブ化要求を発行します。
APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFYフラグを使用する場合は、次のセキュリティ上の考慮事項を考慮する必要があります。
- APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFYフラグは、オブジェクトのアクティブ化要求でクライアントの代わりに作業を実行しないCOMサーバーで使用するためのものです。 このようなサーバーの場合、COM SCMがRPC_C_IMP_LEVEL_IDENTIFYでオブジェクトのアクティブ化要求を発行すると、プロセスにSE_IMPERSONATE_NAMEレベルの特権トークンが表示される可能性が最小限になります。
APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFYフラグは、Windows 7以降のバージョンのWindowsでサポートされています。