Por que o registro é escrito em local diferente do esperado?

Eu tentei escrever uma subchave do registro e seu valor correspondente ao registro como este:

const string subKey = @"SOFTWARE\Apple\Banana\";
const string regKey = "pip";

var rk = Registry.LocalMachine.OpenSubKey(subKey);
if (rk == null)
    rk = Registry.LocalMachine.CreateSubKey(subKey);

var rv = rk.GetValue(regKey);
if (rv == null)
    rk.SetValue(regKey, "XXX");

return rv.ToString();

Agora o problema é que eu quando eu olho no local manualmente (via regedit) não consigo ver a pastaSOFTWARE\Apple\Banana emHKLM.

Mas quando eu executar o código acima novamente e depurar, eu posso ver que ambosRegistry.LocalMachine.OpenSubKey(subKey) erk.GetValue(regKey) produz os valores antes salvos. Ainda não vejo os valores na localização dada via regedit. Então, ao pesquisar no registro, posso ver as chaves e valores acima nos seguintes locais:

HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana

HKEY_USERS\S-1-5-21-44266131-1313801407-2392705078-1000\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana

Em ambos os quais os valores permanecem exatamente como eu salvei. Então, percebo que é de onde meu aplicativo lê o valor, embora no meu código eu o chame deHKLM\SOFTWARE\Apple\Banana\..

Por que isso está acontecendo? Está relacionado com a questão dos direitos de acesso?

Esse comportamento é esperado? No sentido, esse valor é muito importante para mim, então estou apenas sabendo se existe algum risco associado à auto-relocação!

Existe uma maneira correta de gravar no registro para que permaneça no local exato.

Minha conta é administrador, e estou usando o windows 7 de 32 bits.

Edit: Como vim a saber, a entrada do registro é armazenada na localização dos usuários atuais em vez de HKLM. E quando eu consultar o valor reg de uma conta diferente, não obtenho o valor. Em suma, nenhum ponto em primeiro lugar salvando-o para HKLM :(

questionAnswers(2)

yourAnswerToTheQuestion