No Windows de 64 bits, existe o que é chamado de redirecionamento do sistema de arquivos e do registro. Eles existem para compatibilidade com aplicativos mais antigos que foram escritos para o Windows de 32 bits e para aplicativos desenvolvidos para versões mais antigas do Windows. O WoW64 conecta todas as chamadas de sistema feitas por processos de 32 bits, de modo que se meu aplicativo de 32 bits em execução em uma versão de 64 bits do Windows chamar C: \ Windows \ System32, o WoW64 o redirecionará para C: \ Windows \ SysWoW64, O diretório virtual C: \ Windows \ Sysnative direciona você para a versão native (a versão de 64 bits) do diretório, independentemente da quantidade de bits do encadeamento que referencia esse caminho do sistema de arquivos. / p>
Existe um mecanismo semelhante para o registro, que é a chave do WoW6432Node. Tecnicamente eu chamaria essas exibições de 32 bits e 64 bits do registro se eu quisesse ser conciso ... Ou pedante.
Eu escrevi algum código (em C #) não há muito tempo para acessar uma chave na parte nativa (64 bits) da seção de dentro de um processo de 32 bits. Aqui está um trecho abreviado:
// Accessing 64-bit registry key from 32-bit process
enum RegAccessFlag
{
NONE = 0,
KEY_QUERY_VALUE = 0x0001,
KEY_SET_VALUE = 0x0002,
KEY_CREATE_SUB_KEY = 0x0004,
KEY_ENUMERATE_SUB_KEYS = 0x0008,
KEY_NOTIFY = 0x0010,
KEY_CREATE_LINK = 0x0020,
KEY_WOW64_64KEY = 0x0100, // This is the ticket
KEY_WOW64_32KEY = 0x0200,
KEY_WOW64_RES = 0x0300
}
public static UIntPtr HKEY_LOCAL_MACHINE = new UIntPtr(0x80000002u);
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
public static extern int RegOpenKeyEx(UIntPtr hkey, string subKey, int ulOptions, int samDesired, out UIntPtr hkResult);
static void Main(string[] args)
{
int statusCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, (int)RegAccessFlag.KEY_WOW64_64KEY | (int)RegAccessFlag.KEY_QUERY_VALUE, out hKey);
}
É claro que você ainda precisa ler um valor da chave uma vez que você a abriu, ou criar um novo valor, então lembre-se de fechar a chave quando terminar, mas isso o ajudaria se você se importasse com isso. escreva qualquer código.
Mas como você está falando sobre gerar um processo de 32 bits de outro processo de 32 bits, para que o processo filho possa acessar a exibição nativa do registro, em uma plataforma de 64 bits ... você está lidando com um combinação de redirecionamento do sistema de redirecionamento do sistema de arquivos e ambos ficando em seu caminho. E para superar tudo isso, o regedit.exe é um utilitário especial a esse respeito.
TL; DR: conceda C:\Windows\sysnative\regedt32.exe
uma tentativa em vez de regedit.exe
.