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 中首次添加的
在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