Partilhar via


Segurança de Ação Personalizada

O instalador executa ações personalizadas com privilégios de usuário por padrão, a fim de limitar o acesso de ações personalizadas ao sistema. O instalador pode executar ações personalizadas com privilégios elevados se um aplicativo gerenciado estiver sendo instalado ou se a diretiva do sistema tiver sido especificada para privilégios elevados.

Você deve usar a propriedade MsiHiddenProperties e msidbCustomActionTypeHideTarget para impedir o registro em log de informações confidenciais usadas pela ação personalizada. Para obter mais informações sobre msidbCustomActionTypeHideTarget consulte Custom Action Hidden Target Option.

Limpe a propriedade CustomActionData depois de defini-la para garantir que os dados confidenciais não estejam mais disponíveis. O código de exemplo abaixo é um trecho usado por uma ação personalizada DLL imediata que está configurando dados para uso por uma ação personalizada adiada chamada "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;    
}

Observe que somente ações personalizadas de execução adiada podem usar o atributo msidbCustomActionTypeNoImpersonate msidbCustomActionTypeNoImpersonate. Para obter mais informações, consulte Custom Action In-Script Execution Options.

Se o bit de msidbCustomActionTypeNoImpersonate não estiver definido para uma ação personalizada, o instalador executará a ação personalizada com privilégios de nível de usuário. Para obter mais informações, consulte Custom Action In-Script Execution Options.

Se o msidbCustomActionTypeNoImpersonate bit estiver definido e um aplicativo gerenciado estiver sendo instalado com permissão de administrador, o instalador poderá executar a ação personalizada com privilégios elevados. No entanto, se um usuário tentar instalar o aplicativo gerenciado sem permissão de administrador, o instalador executará o aplicativo com privilégios de nível de usuário, independentemente de msidbCustomActionTypeNoImpersonate estiver definido.

Observe que uma ação personalizada pode ser executada com privilégios de sistema mesmo quando o msidbCustomActionTypeNoImpersonate bit não está definido. Isso ocorre se um administrador instala o aplicativo para todos os usuários em um servidor que executa o serviço de função do Terminal Server usando o Windows 2000 e a ação não está marcada com msidbCustomActionTypeTSAware. Uma ação personalizada também pode ser executada com privilégios de sistema se a instalação for invocada quando não houver contexto de usuário. Por exemplo, se não houver nenhum usuário conectado no momento durante uma instalação invocada pela implantação de aplicativos do Windows 2000.

Ao criar suas próprias ações personalizadas, você deve sempre criar a ação personalizada usando métodos seguros. Para obter mais informações, consulte Diretrizes para proteger ações personalizadas.