Безопасность настраиваемых действий

Установщик по умолчанию выполняет пользовательские действия с привилегиями пользователя, чтобы ограничить доступ к пользовательским действиям в системе. Установщик может выполнять пользовательские действия с повышенными привилегиями, если устанавливается управляемое приложение или если для повышенных привилегий задана системная политика.

Используйте свойство MsiHiddenProperties и msidbCustomActionTypeHideTarget , чтобы предотвратить ведение журнала конфиденциальной информации, используемой пользовательским действием. Дополнительные сведения о msidbCustomActionTypeHideTarget см. в разделе Custom Action Hidden Target Option.

Очистите свойство CustomActionData после его установки, чтобы убедиться, что конфиденциальные данные больше не доступны. Ниже приведен пример кода, используемый немедленным пользовательским действием DLL, которое настраивает данные для использования отложенным настраиваемым действием MyDeferredCA:

#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, нет пользователя, вошедшего в систему.

При создании собственных настраиваемых действий следует всегда создавать настраиваемые действия с помощью безопасных методов. Дополнительные сведения см. в разделе Рекомендации по защите пользовательских действий.