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

本文关键字:注册表 位置 IE XP Windows | 更新日期: 2023-09-27 18:25:34

我需要从BHO读取/写入Windows注册表中的一些信息。在Windows Vista/7上,我在HKEY_CURRENT_USER''Software''AppDataLow''Software下创建了一个新项。即使在保护模式下,这也能很好地工作。

但是,它在XP上不起作用。我试图将注册表更改为HKEY_CURRENT_USER''Software''Classes''Software或HKEY_CURRENT_USER''Software,但没有成功。

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

IEGetWriteableHKCU在Windows XP上不存在,它是在Windows Vista 中首次添加的

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

在Vista之前,您必须使用不同的方法。。。在安装BHO期间,您需要告诉Windows/IE您希望从BHO写入哪个密钥。。。

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

  • 安装时使用IERegisterWritableRegistryKey
  • IERegisterWritableRegistryValue在安装时使用
  • IERegCreateKeyEx在运行时使用
  • IERegSetValueEx在运行时使用

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