2012-02-22 2 views
2

Мне нужно прочитать/написать некоторую информацию в реестре Windows из моего BHO. В Windows Vista/7 я создаю новый ключ в HKEY_CURRENT_USER \ Software \ AppDataLow \ Software. Это прекрасно работает даже в защищенном режиме.Windows XP: где писать в реестр из IE?

Однако он не работает на XP. Я попытался изменить реестр на HKEY_CURRENT_USER \ Software \ Classes \ Software или HKEY_CURRENT_USER \ Software, не повезло.

Какой правильный ключ реестра использовать в Windows XP из BHO?

IEGetWriteableHKCU не существует на Windows XP, он был первым добавлен в Windows Vista

+0

Я подозреваю, что вам нужно IE6, чтобы не вызвать здесь проблемы. Низкие привилегированные пути не добавляются до Vista. –

+0

Под XP вы пробовали что-то вроде HKCU \ Software \ YourExtension? Является ли администратором пользователя? –

+0

Почему бы не написать под HKEY_LOCAL_MACHINE? – MEYWD

ответ

4

Перед Vista, вам придется использовать другой подход ... во время установки BHO вы должны сказать Windows/IE, какой ключ (s) вы хотите быть доступен для записи из BHO ...

Существует целое семейство API для обработки этого (поддерживается WinXP SP2 и выше в соответствии с MSDN):

3

IE 7,8,9, (рабочий стол) 10 Run вкладки в «защищенном режиме», который ограничивает реестр записывается в специальный раздел, доступный для записи. Вы должны спросить 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

О Enhanced Protected Mode: http://blogs.msdn.com/b/ieinternals/archive/2012/03/23/understanding-ie10-enhanced-protected-mode-network-security-addons-cookies-metro-desktop.aspx