Seguridad de acciones personalizadas
El instalador ejecuta acciones personalizadas con privilegios de usuario de forma predeterminada para limitar el acceso de acciones personalizadas al sistema. El instalador puede ejecutar acciones personalizadas con privilegios elevados si se instala una aplicación administrada o si la directiva del sistema se ha especificado para privilegios elevados.
Debe usar la propiedad MsiHiddenProperties y msidbCustomActionTypeHideTarget para evitar el registro de información confidencial utilizada por la acción personalizada. Para obtener más información sobre msidbCustomActionTypeHideTarget vea opción de destino oculta de acción personalizada.
Borre la propiedad CustomActionData después de establecerla para asegurarse de que los datos confidenciales ya no están disponibles. El código de ejemplo siguiente es un fragmento de código usado por una acción personalizada de DLL inmediata que configura los datos para su uso por una acción personalizada diferida denominada "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;
}
Tenga en cuenta que solo acciones personalizadas de ejecución diferida pueden usar el atributo msidbCustomActionTypeNoImpersonate. Para obtener más información, vea Acción personalizada In-Script Opciones de ejecución.
Si el msidbCustomActionTypeNoImpersonate bit no está establecido para una acción personalizada, el instalador ejecuta la acción personalizada con privilegios de nivel de usuario. Para obtener más información, vea Acción personalizada In-Script Opciones de ejecución.
Si se establece el msidbCustomActionTypeNoImpersonate bit y se instala una aplicación administrada con permiso de administrador, el instalador puede ejecutar la acción personalizada con privilegios elevados. Sin embargo, si un usuario intenta instalar la aplicación administrada sin permiso de administrador, el instalador ejecuta la aplicación con privilegios de nivel de usuario independientemente de si se establece msidbCustomActionTypeNoImpersonate.
Tenga en cuenta que una acción personalizada puede ejecutarse con privilegios del sistema incluso cuando no se establece el msidbCustomActionTypeNoImpersonate bit. Esto ocurre si un administrador instala la aplicación para todos los usuarios de un servidor que ejecuta el servicio de rol de Terminal Server mediante Windows 2000 y la acción no está marcada con msidbCustomActionTypeTSAware. Una acción personalizada también se puede ejecutar con privilegios del sistema si se invoca la instalación cuando no hay ningún contexto de usuario. Por ejemplo, si no hay ningún usuario que haya iniciado sesión actualmente durante una instalación invocada por la implementación de aplicaciones de Windows 2000.
Al crear sus propias acciones personalizadas, siempre debe crear la acción personalizada mediante métodos seguros. Para obtener más información, vea Guidelines for Securing Custom Actions.