Windows XP:从IE写入注册表的位置?

时间:2012-02-22 23:55:02

标签: c# windows-xp registry bho ieaddon

我需要从我的BHO读取/写入Windows注册表中的一些信息。在Windows Vista / 7上,我在HKEY_CURRENT_USER \ Software \ AppDataLow \ Software下创建了一个新密钥。即使在保护模式下,这也可以正常工作。

然而,它不适用于XP。我试图将注册表更改为HKEY_CURRENT_USER \ Software \ Classes \ Software或HKEY_CURRENT_USER \ Software,没有运气。

从BHO在Windows XP上使用的正确注册表项是什么?

IEGetWriteableHKCU在Windows XP上不存在,它首先添加到Windows Vista

2 个答案:

答案 0 :(得分:4)

在Vista之前,您将不得不使用不同的方法......在安装BHO期间,您需要告诉Windows / IE您想从BHO写入哪些密钥...

有一个完整的API系列可以处理这个问题(根据MSDN从WinXP SP2和更高版本支持):

答案 1 :(得分:3)

IE 7,8,9,(桌面)10在“保护模式”下运行选项卡,将注册表写入限制为特殊的“可写”部分。您需要向IE询问指针。

<强>(C#)

// C# PInvoke declaration for needed IE method.
[DllImport("ieframe.dll")]
public static extern int IEGetWriteableHKCU(ref IntPtr phKey); 

// ...
        // somewhere inside other method:
        IntPtr phKey = new IntPtr();
        var answer = IEGetWriteableHKCU(ref phKey);
        RegistryKey writeable_registry = RegistryKey.FromHandle(
            new Microsoft.Win32.SafeHandles.SafeRegistryHandle(phKey, true)
        );
        RegistryKey registryKey = writeable_registry.OpenSubKey(RegistryPathString, true);
        if (registryKey == null) {
            registryKey = writeable_registry.CreateSubKey(RegistryPathString);
        }
        registryKey.SetValue("Mode", mode);
        writeable_registry.Close();

请参阅:

关于保护模式http://www.codeproject.com/Articles/18866/A-Developer-s-Survival-Guide-to-IE-Protected-Mode

关于增强保护模式http://blogs.msdn.com/b/ieinternals/archive/2012/03/23/understanding-ie10-enhanced-protected-mode-network-security-addons-cookies-metro-desktop.aspx