カスタム アクションのセキュリティ

インストーラーでは、システムに対するカスタム アクションのアクセスを制限するために、既定でユーザー特権を使用してカスタム アクションを実行します。 マネージド アプリケーションのインストールを行っている場合、またはシステム ポリシーで昇格された特権が指定されている場合は、インストーラーで昇格された特権でカスタム アクションが実行されることがあります。

カスタム アクションで使用される機密情報のログ記録を防ぐには、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 属性を使用できるのは、遅延実行カスタム アクションのみです。 詳しくは、「カスタム アクションのスクリプト内実行オプション」をご覧ください。

msidbCustomActionTypeNoImpersonate ビットがカスタム アクション用に設定されていない場合、インストーラーではユーザー レベル特権でカスタム アクションを実行します。 詳しくは、「カスタム アクションのスクリプト内実行オプション」をご覧ください。

msidbCustomActionTypeNoImpersonate ビットが設定されていて、マネージド アプリケーションが管理者権限でインストールされている場合、インストーラーでは昇格された特権でカスタム アクションを実行できます。 ただし、ユーザーが管理者権限なしでマネージド アプリケーションをインストールしようとすると、msidbCustomActionTypeNoImpersonate が設定されているかどうかに関係なく、インストーラーではユーザー レベルの特権でアプリケーションを実行します。

msidbCustomActionTypeNoImpersonate ビットが設定されていない場合でも、カスタム アクションがシステム特権で実行される場合があることに注意してください。 このことは、管理者が Windows 2000 を使用してターミナル サーバーの役割サービスを実行しているサーバー上のすべてのユーザー向けにアプリケーションをインストールし、そのアクションが msidbCustomActionTypeTSAware でマークされていない場合に発生します。 ユーザー コンテキストがないときにインストールが呼び出された場合は、カスタム アクションがシステム特権で実行される場合もあります。 たとえば、Windows 2000 アプリケーションの展開によって呼び出されるインストール中に、現在ログオンしているユーザーが存在しない場合です。

独自のカスタム アクションを作成するときは、常にセキュリティで保護されたメソッドを使用してカスタム アクションを作成する必要があります。 詳細については、「カスタム アクションのセキュリティ保護に関するガイドライン」を参照してください。