C/Visual C - Acceso denegado al crear clave en registry en COM

 
Vista:

Acceso denegado al crear clave en registry en COM

Publicado por sai pepec (5 intervenciones) el 02/02/2003 23:36:41
Estoy desarrollando un componenete con Visual C++ que crea una entrada en la registry. Si lo llamo desde una aplicacion por ejemplo VB no tiene problemas.
En cambio si el objeto COM es instanciado desde IIS(una pagina ASP) retorna con un error de acceso denegado al intentar crear una key en la registry de windows.

Les pido que me orienten porque no se por donde comenzar a buscar este problema.

Espero sus comentarios.

Pepec.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Solución al error de acceso denegado en el registro desde un componente COM en IIS

Publicado por Alejandro (980 intervenciones) el 29/04/2025 20:17:08
El problema que estás enfrentando al intentar crear una entrada en el registro desde un componente COM instanciado en IIS es común y generalmente se debe a problemas de permisos. Aquí te doy algunos pasos y consideraciones para solucionar este problema:

1. Verificar los permisos de la cuenta de servicio de IIS



IIS ejecuta aplicaciones web bajo una cuenta de servicio específica. Por defecto, esta cuenta puede ser `IUSR_<nombre del equipo>` o `ApplicationPoolIdentity`, dependiendo de la configuración de tu aplicación. Para permitir que tu componente COM cree entradas en el registro, debes asegurarte de que esta cuenta tenga los permisos adecuados.

- Pasos para verificar y modificar permisos:
1. Abre el Administrador de IIS.
2. Selecciona el Grupo de aplicaciones que está utilizando tu aplicación ASP.
3. Haz clic derecho y selecciona Configuración avanzada.
4. Verifica la identidad del grupo de aplicaciones. Si es `ApplicationPoolIdentity`, necesitarás otorgar permisos a la cuenta `IIS AppPool\<nombre del grupo de aplicaciones>`.
5. Si es `IUSR`, verifica que esta cuenta tenga permisos en el registro.

2. Otorgar permisos en el registro



Para permitir que la cuenta de servicio de IIS cree claves en el registro, debes otorgar permisos específicos en la clave del registro que deseas modificar.

- Pasos para otorgar permisos:
1. Abre el Editor del registro (`regedit`).
2. Navega hasta la clave que deseas modificar (por ejemplo, `HKEY_LOCAL_MACHINE\Software\TuAplicacion`).
3. Haz clic derecho en la clave y selecciona Permisos.
4. Agrega la cuenta de servicio de IIS (por ejemplo, `IIS AppPool\<nombre del grupo de aplicaciones>`) y otórgale permisos de Control total o al menos Modificar.

3. Consideraciones de seguridad



- Uso de `HKEY_CURRENT_USER`: Si es posible, considera usar `HKEY_CURRENT_USER` en lugar de `HKEY_LOCAL_MACHINE`, ya que las claves en `HKEY_CURRENT_USER` son específicas para el usuario que está ejecutando la aplicación y generalmente no requieren permisos elevados.

- Configuración de UAC: Si tu aplicación necesita ejecutarse con privilegios elevados, asegúrate de que la configuración de Control de Cuentas de Usuario (UAC) no esté bloqueando el acceso.

4. Manejo de errores en el código



Asegúrate de que tu código maneje adecuadamente los errores al intentar acceder al registro. Esto te ayudará a identificar si el problema es realmente un problema de permisos o si hay otro tipo de error.

5. Pruebas y depuración



- Prueba localmente: Si es posible, prueba el componente COM localmente en el servidor donde está instalado IIS para ver si el problema persiste.
- Registra eventos: Considera agregar registros de eventos en tu componente COM para capturar información sobre el error cuando se produce.

Ejemplo de código para crear una clave en el registro



Aquí tienes un ejemplo básico de cómo crear una clave en el registro en C++:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <windows.h>
 
void CreateRegistryKey() {
    HKEY hKey;
    LONG result;
 
    // Intenta crear una clave en el registro
    result = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
                             TEXT("Software\\TuAplicacion"),
                             0,
                             NULL,
                             REG_OPTION_NON_VOLATILE,
                             KEY_WRITE,
                             NULL,
                             &hKey,
                             NULL);
 
    if (result == ERROR_SUCCESS) {
        // La clave se creó correctamente
        RegCloseKey(hKey);
    } else {
        // Manejar el error
        // Puedes usar FormatMessage para obtener un mensaje de error más detallado
    }
}

Conclusión



Siguiendo estos pasos, deberías poder resolver el problema de acceso denegado al crear claves en el registro desde tu componente COM en IIS. Si continúas teniendo problemas, verifica los registros de eventos de Windows para obtener más información sobre el error. ¡Buena suerte, Sai!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar