Поделиться через


Безопасность пользовательских действий

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

Необходимо использовать свойство MsiHiddenProperties и msidbCustomActionTypeHideTarget, чтобы предотвратить ведение журнала конфиденциальной информации, используемой пользовательским действием. Дополнительные сведения о msidbCustomActionTypeHideTarget см. в параметр скрытого целевого объекта пользовательского действия.

Снимите свойство 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;    
}

Обратите внимание, что с помощью атрибута CustomActionActionTypeNoImpersonate можно использовать только отложенные пользовательские действия выполнения. Дополнительные сведения см. в настраиваемых In-Script параметров выполнения.

Если msidbCustomActionTypeNoImpersonate бит не задан для пользовательского действия, установщик запускает настраиваемое действие с правами пользователя. Дополнительные сведения см. в разделе Настраиваемые действия In-Script параметры выполнения.

Если установлен msidbCustomActionTypeNoImpersonate бит, а управляемое приложение устанавливается с разрешением администратора, установщик может запустить настраиваемое действие с повышенными привилегиями. Однако если пользователь пытается установить управляемое приложение без разрешения администратора, установщик запускает приложение с привилегиями уровня пользователя независимо от того, задано ли msidbCustomActionTypeNoImpersonate.

Обратите внимание, что настраиваемое действие может выполняться с правами системы, даже если msidbCustomActionTypeNoImpersonate бит не задан. Это происходит, если администратор устанавливает приложение для всех пользователей на сервере, на котором запущена служба роли сервера терминалов с помощью Windows 2000, и действие не отмечено msidbCustomActionTypeTSAware. Настраиваемое действие также может выполняться с правами системы, если установка вызывается, если контекст пользователя отсутствует. Например, если во время установки, вызываемой развертыванием приложений Windows 2000, вошедшего в систему, нет вошедшего в систему пользователя.

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