Detección de virtualización de registro.

Tengo un conjunto de aplicaciones C # (v2) y estoy teniendo problemas con la virtualización del registro en Win7 (y, en menor medida, en Vista).

Tengo un área de configuración de registro compartida a la que mis aplicaciones necesitan acceder en HKLM \ Software \ Company ... Antes de Vista, todo se escribía y se leía desde esa ubicación según fuera necesario.

El código detectó apropiadamente las fallas para escribir en esa clave de registro y se replegaría apropiadamente (al escribir a HKCU y notificar al usuario que la configuración que habían aplicado solo afectaría al usuario actual).

En Vista, la virtualización del registro rompió todo esto porque la verificación de acceso que estábamos usando para la escritura HKLM "se realizaría" de manera silenciosa y se virtualizaría en HKCR \ VirtualStore \ Machine ... en su lugar. En este caso, el usuario pensaría que había guardado la configuración de toda la máquina, pero que solo había escrito en la tienda virtual.

Lamentablemente, incluso al intentar enumerar los permisos en la clave de registro de HKLM se obtienen resultados explícitos que indican que el usuario tiene acceso, ya sea que lo tengan o no.

Cuando agregamos el soporte de Vista, la solución alternativa que usamos fue realizar una escritura de sondeo en HKLM ... y luego registrar HKCR \ VirtualStore \ Machine ... para el mismo valor y observar que la virtualización ocurrió si se encontró el valor.

Win7 parece haber roto esto (nuevamente) porque las consultas contra la ubicación virtual explícita (HKCR) ahora muestran resultados combinados de la ubicación HKLM incluso si la escritura no estaba virtualizada.

¿Alguien tiene alguna sugerencia para trabajar alrededor de esto?

Restricciones: - Necesito una solución que funcione sin requerir elevación (cuando no tenga permisos de administrador, recurriré a una configuración por usuario en HKCU, pero debo poder detectar este caso de manera confiable).

Necesita trabajar con una aplicación v2 C # (una opción que he visto para el código C ++ es incrustar un manifiesto que deshabilita la virtualización para el .exe pero no he podido hacer eso en C # V2.deshabilitar la virtualización de carpetas en windows).

Debe funcionar sin un "instalador" (esto impide la posibilidad de deshabilitar la virtualización en la clave de registro que necesitamos para el comando REG FLAGS ...).

Respuestas a la pregunta(4)

Su respuesta a la pregunta