カスタム アクションのセキュリティ
インストーラーは、カスタム アクションのアクセスをシステムに制限するために、既定でユーザー特権を持つカスタム アクションを実行します。 インストーラーは、マネージド アプリケーションがインストールされている場合、またはシステム ポリシーが昇格された特権に対して指定されている場合、管理者特権でカスタム アクションを実行できます。
MsiHiddenProperties プロパティと msidbCustomActionTypeHideTarget を使用して、カスタム アクションで使用される機密情報のログ記録を防ぐ必要があります。 msidbCustomActionTypeHideTarget の詳細については、「カスタム アクション非表示ターゲット オプション 」を参照してください。
設定後に CustomActionData プロパティをクリアして、機密データが使用できなくなったことを確認します。 次のコード例は、"MyDeferredCA" という遅延カスタム アクションで使用するデータを設定する即時 DLL カスタム アクションで使用されるスニペットです。
#include <windows.h>
#include <Msiquery.h>
#pragma comment(lib, "msi.lib")
UINT __stdcall MyImmediateCA(MSIHANDLE hInstall)
{
// set up information for deferred custom action called MyDeferredCA
const TCHAR szValue[] = TEXT("data");
UINT uiStat = ERROR_INSTALL_FAILURE;
if (ERROR_SUCCESS == MsiSetProperty(hInstall, TEXT("MyDeferredCA"), szValue))
{
uiStat = MsiDoAction(hInstall, TEXT("MyDeferredCA"));
// clear CustomActionData property
if (ERROR_SUCCESS != MsiSetProperty(hInstall, TEXT("MyDeferredCA"), TEXT("")))
return ERROR_INSTALL_FAILURE;
}
return (uiStat == ERROR_SUCCESS) ? uiStat : ERROR_INSTALL_FAILURE;
}
msidbCustomActionTypeNoImpersonate 属性を使用できるのは、遅延実行カスタム アクション のみであることに注意してください。 詳細については、「カスタム アクション 実行オプション In-Script」を参照してください。
msidbCustomActionTypeNoImpersonate ビットがカスタム アクションに設定されていない場合、インストーラーはユーザー レベルの特権でカスタム アクションを実行します。 詳細については、「カスタム アクション In-Script 実行オプションの をする」を参照してください。
msidbCustomActionTypeNoImpersonate ビットが設定されていて、管理者アクセス許可を持つマネージド アプリケーションがインストールされている場合、インストーラーは昇格された特権でカスタム アクションを実行できます。 ただし、ユーザーが管理者権限なしでマネージド アプリケーションをインストールしようとすると、msidbCustomActionTypeNoImpersonate 設定されているかどうかに関係なく、インストーラーはユーザー レベルの特権でアプリケーションを実行します。
msidbCustomActionTypeNoImpersonate ビットが設定されていない場合でも、カスタム アクションがシステム特権で実行される可能性があることに注意してください。 これは、管理者が Windows 2000 を使用してターミナル サーバーの役割サービスを実行しているサーバーにすべてのユーザーのアプリケーションをインストールし、そのアクションが msidbCustomActionTypeTSAwareでマークされていない場合に発生します。 ユーザー コンテキストがない場合にインストールが呼び出された場合は、カスタム アクションがシステム特権で実行される場合もあります。 たとえば、Windows 2000 アプリケーション展開によって呼び出されたインストール中に、現在ログオンしているユーザーがいない場合です。
独自のカスタム アクションを作成するときは、常にセキュリティで保護されたメソッドを使用してカスタム アクションを作成する必要があります。 詳細については、「カスタム アクション をセキュリティで保護するためのガイドライン」を参照してください。