Registrykey getvalue binary options


Im tentando configurar programaticamente algumas opções no Internet Explorer como: Permitir ActiveX Filtering Permitir Scripting etc .. Eles são todos armazenados no registro para que eu possa facilmente editá-los com. Preciso adicionar um site nas Ferramentas - Configurações da Visualização de Compatibilidade no Internet Explorer. Depois de algumas pesquisas, eu vi que esta lista de sites é armazenada em: O problema é que esta chave é uma chave binária, por isso é um pouco difícil de, em primeiro lugar, decodificar o que está lá e para editá-lo vejo que há um Delimitador entre cada site armazenado: Você vê claramente que o site. 123 e 456 está na lista. Eu preciso adicionar um site para essa lista, mas aqui como o fato de que o delimitador parece alterado aleatoriamente. Eu construir um delimitador predefinido com o meu site queria para que pareça assim: Eu não tentei isso porque eu já sei que não vai funcionar em tudo. O problema é o delimitador aleatório. Existe uma outra maneira de prosseguir minhas necessidades Qualquer ajuda será apreciada. Eu estava tentando migrar algum código que estava sendo executado no. NET 3.5 para ser executado em 4, e encontrei este problema estranho. Eu tenho isso para baixo para um testcase super simples: Observe que o valor armazenado nessa chave de registro é quotUnicodequot Primeira execução direcionando. NET 3.5 ea saída é: Unicode 7Press qualquer chave para continuar. Agora destino. NET 4: 127Pressione qualquer tecla para continuar. Observe o linebreak extra. Parece que ele está agarrando um pedaço maior de memória. Se você olhar no depurador, heres o valor da seqüência de caracteres que recupera: Fazendo um string. split está segurando uma seqüência de terminadores nulos que quebra o meu código. Como uma solução, há uma maneira que eu posso quottrimquot acima Trim () não funciona. Parece que não está esperando o terminador nulo na verdade na seqüência. Eu não acho que um terminador nulo poderia mesmo ser parte de uma seqüência de caracteres em. net É este um bug Existe em qualquer lugar que o. NET 4.0 mudanças para a classe RegistryKey foram documentados É este relacionado a esta mensagem É este um defeito Qualquer pensamentos seria ótimo. Meu ponto era que uma seqüência de caracteres com um NULL nele é perfeitamente legal no Windows. Há casos em que ele é realmente usado. Multistrings que são armazenados no registro são armazenados dessa maneira. Portanto, não é suficiente para a classe de registro para tentar limpar NULLs de uma seqüência de caracteres (se no meio ou no final da seqüência de caracteres) como ele pode afetar os resultados esperados. Talvez ele teria sido bom se a estrutura expôs um método GetValue com algumas opções, como TrimNulls, mas eles didnt. Felizmente você poderia facilmente escrever um método de extensão para fazer isso. Você realmente não precisa de um RE para encontrar o NULL. Basta usar algo como: int index value. IndexOf (0) se (index gt 0) valor value. Substring (0, index) Pessoalmente, tenho um método de extensão de cadeia chamada LeftOf que leva um caractere e retorna tudo à esquerda dele. Ele basicamente faz o bloco de código acima mencionado. Marcado como resposta por Benji22 Sexta-feira, 17 de Dezembro de 2018 18:35 Sexta-feira, 17 de Dezembro de 2018 18:18 Recupera o tipo e dados para o nome de valor especificado associado com uma chave de registo aberta. Você pode usar isso em seu código C. E há também um código de exemplo C no segundo link acima, você pode lê-lo. Se há qualquer preocupação, por favor, sinta-se livre para me informar. Tenha um bom dia Mike MSFT MSDN Suporte Comunidade Feedback para nós Obtenha ou peça um exemplo de código da Microsoft Lembre-se de marcar as respostas como respostas se elas ajudarem e desmarcarem se não fornecerem nenhuma ajuda. Bem-vindo ao MSDN Forums Eu também não posso repro que o problema do meu lado, então você pode fornecer mais informações sobre este problema quando esse problema ocorre do seu lado Eu acho que uma captura de tela e uma cópia desse valor de chave de registro seria útil para nós para limpar Sobre esse assunto que você está enfrentando. Captura de tela. Queremos ver que as informações que você disse em seu primeiro post no tempo de depuração. A maneira de publicar uma imagem: você pode fazer o upload da imagem para o seu espaço ao vivo do Windows, em seguida, abra esta imagem em seu espaço, selecione esta imagem e copie-o para a caixa de texto de resposta e, em seguida, você pode enviar uma imagem em sua postagem. Exportar a chave de registo. Abra o registro e localize o quotHKCU SoftwareMicrosoftCharMap quot que você está usando e clique com o botão direito do mouse no quotCharMapquot e selecione quotExportquot para exportar esse valor chave e publicá-lo em sua postagem. Isso é importante para se certificar de que se este é um problema de produto ou apenas um problema comum. Tenha um bom dia Mike MSFT MSDN Suporte Comunidade Feedback para nós Obtenha ou peça um exemplo de código da Microsoft Lembre-se de marcar as respostas como respostas se elas ajudarem e desmarcarem se não fornecerem nenhuma ajuda. Terça-feira, dezembro 14, 2018 5:01 PM Por seu pedido, adicionei screenshots. Heres a chave do registro: Agora aqui está o comportamento correto com o. NET 3.5. Observe que eu capturar a versão em execução do CLR para você ver, e que uma seqüência de caracteres de sete caracteres é retornada: Agora, quando mudamos para. NET 4 CLR, temos comportamento diferente: Ive reproduzido isso em outra máquina. Então reprod on: Windows 7 Ultimate 32 bits e Windows 7 Professional 64 bits Você tentou em uma máquina Windows 7 reproduzir este Sim houve uma mudança feita entre v3.x e v4. Eu posso replicar o seu problema, mas eu não sei que a Id chamá-lo de um bug. É certamente uma mudança de comportamento. O que acontece é que internamente o framework obtém o tamanho do valor do registro via Win32. Em seguida, aloca uma matriz de caracteres para armazenar o tamanho fornecido e lê os dados. Em seguida, ele converte a matriz de caracteres em uma seqüência de caracteres. Se os dados contiverem NULLs no meio, então não incomodarão truncá-los porque NULL é válido em uma string. Algumas chaves de registo são concebidas para suportar isto. O melhor que poderia fazer seria cortar os NULLs do final da seqüência de caracteres, mas mesmo que é perigoso porque as chaves que suportam NULLs no meio geralmente exigem NULLs duplo no final. Em seu caso específico Win32 diz que a seqüência de caracteres é 128 caracteres que é o que é alocado. Você não verá os NULLs no RegEdit porque ele está exibindo o valor como uma seqüência de caracteres C. Na v3.x a estrutura didnt usar uma matriz de char, mas sim usado StringBuilder. Em seguida, contou com o marshaller para fazer a conversão entre caracteres não gerenciados e StringBuilder. Esta abordagem trata de NULLs. No entanto, esta abordagem introduz o risco de um valor de registo não devolvido correctamente (se suportado NULL incorporado). Se houve realmente um relatório de erro sobre ele ou não eu não sei. Então, em resumo, sim, houve uma mudança de comportamento entre v3.x e v4. Não, eu não considero que seja um bug. A solução é certificar-se você chamar Trim (0) em qualquer seqüência de caracteres que você pode ler que pode ser preenchido com NULLs (muito comum ao escrever valores de estrutura de estilo C para o registro). Sexta-feira, 17 de dezembro de 2018 16:05 Obrigado pela informação, Michael. Gt Se os dados contiverem NULLs no meio, então não incomodarão truncá-los porque NULL é válido em uma string. Você pode explicar o que está acontecendo no meu exemplo, em seguida, O valor parece ser quotUnicodequot, então eu não vejo como nulos no meio é relevante aqui. Você pode me ajudar a entender a solução gtThe é certificar-se de que você chama Trim (0) em qualquer seqüência de caracteres que você possa ler Neste exemplo, isso funcionaria. Mas em outro registro ler, o comportamento V4 é retornar uma seqüência de caracteres que é terminada com um nulo, mas, em seguida, contém uma mistura de nulos e outros valores. Este valor de registo foi escrito por uma aplicação não-microsoft assim seu possível que não foi escrito corretamente, mas novamente, em 3.5 ele ler corretamente. Eu tive que construir uma expressão regular para agarrar até o FIRST null para contornar isso. Sexta-feira, 17 de dezembro de 2018 18:13 Meu ponto era que uma string com um NULL nele é perfeitamente legal no Windows. Há casos em que ele é realmente usado. Multistrings que são armazenados no registro são armazenados dessa maneira. Portanto, não é suficiente para a classe de registro para tentar limpar NULLs de uma seqüência de caracteres (se no meio ou no final da seqüência de caracteres) como ele pode afetar os resultados esperados. Talvez ele teria sido bom se a estrutura expôs um método GetValue com algumas opções, como TrimNulls, mas eles didnt. Felizmente você poderia facilmente escrever um método de extensão para fazer isso. Você realmente não precisa de um RE para encontrar o NULL. Basta usar algo como: int index value. IndexOf (0) se (index gt 0) valor value. Substring (0, index) Pessoalmente, tenho um método de extensão de cadeia chamada LeftOf que leva um caractere e retorna tudo à esquerda dele. Ele basicamente faz o bloco de código acima mencionado. Marcado como resposta por Benji22 Sexta-feira, 17 de dezembro de 2018 18:35 Sexta-feira, 17 de dezembro de 2018 18:18 Sexta-feira, 17 de dezembro de 2018 18:36 Im feliz este problema tinha sido resolvido, embora eu também não pode repro este problema no meu lado. E agradece ao CoolDadTx pelas suas postagens nos fóruns Tenha um bom fim de semana Mike MSFT MSDN Comunidade Suporte Feedback para nós Obtenha ou peça um exemplo de código da Microsoft Lembre-se de marcar as respostas como respostas se elas ajudarem e desmarcarem se não fornecerem nenhuma ajuda. Estou usando o framework v3.5 e acredito que tenho um dos casos em que um valor de registro que eu preciso não está sendo devolvido corretamente porque ele tem um null embutido. É um valor criptografado que ocasionalmente contém um quot0quot no meio da seqüência. Chamar a função. GetValue () neste valor retorna uma versão truncada - tudo à esquerda do quot0quot. Estou fazendo um estágio e meu empregador não quer mudar o projeto para a estrutura v4. Você tem alguma sugestão para mim nesta situação É possível para mim para substituir a função RegistryKey. GetValue () Se assim for, existe uma maneira de burrow para baixo na estrutura v4 e encontrar este código para usá-lo no meu projeto que eu iria Ser feliz para fornecer mais informações sobre a minha situação específica, se necessário. Apenas deixe-me saber que informação o ajudaria. Sou novo no desenvolvimento e não consigo encontrar muita informação sobre este problema. Qualquer ajuda é muito apreciada. Quarta-feira, 26 de janeiro de 2017 16:23 Não, você não pode substituir o comportamento de RegistryKey embora você poderia escrever um método de extensão para expor um método GetEncryptedValue. O problema é com o próprio valor. Valores criptografados com NULLs incorporados não são strings, eles são binários (ou multi-strings). Portanto, se a chave do registro é armazenar o valor como uma seqüência de caracteres, mas os dados são binários, em seguida, quem escreveu os dados está fazendo isso incorretamente. Nos casos em que os dados binários precisam ser escritos como uma string (XML, por exemplo), o código deve codificar os dados binários. Base64 é comum e. NET suporta conversão de e para cadeias codificadas base64. Você pode resolver este problema de algumas maneiras. A questão importante é qual é o tipo do valor do Registro. Se for REGBINARY, então os dados retornados serão uma matriz de bytes que você pode então descriptografar de volta. Mais provável porém é REGSZ assim itll ser truncado. Infelizmente, o. NET não expõe um método para obter o valor bruto. Itll sempre tentar converter o valor para um tipo. NET. Portanto youre vai ter que usar a função Win32 RegQueryValueEx brutos para obter o valor bruto que você pode processar. Heres onde fica difícil. Para chamar a API Win32 para ter um identificador para a chave. Até v4 o identificador é interno ao RegistryKey e, portanto, inacessível. A única maneira de usar a API do Win32 é fazer todas as chamadas de API necessárias para abrir, consultar e fechar a chave diretamente. RegistryKey não pode ser usado aqui. É doloroso, mas a única solução segura. Se você não se importa de ser um pouco inseguro, então você poderia usar reflexão para obter o identificador de RegistryKeys campo privado (use Reflector para dar uma olhada na fonte). Isso não funciona bem em modos de confiança não total e pode ser quebrado na versão posterior, mas ele permite que você use Win32 sem ter que fazer todos os abrir / fechar em Win32 também. Começando com v4 a alça está publicamente disponível para que você não tem que fazer isso - mas então você wouldnt estar tendo esse problema de qualquer maneira. Quarta-feira, janeiro 26, 2017 4:53 PM Obrigado pela sua resposta informativa e rápida. Ele é salvo no Registro como tipo REGSZ. Não tenho certeza se é tecnicamente um valor binário ou um multi-string. Para ser honesto, eu não acho que seja. A criptografia neste caso está fazendo uma equação mathmatical para obter um código ascii e, em seguida, usa um Convert. ToChar nesse código ascii para cada caractere na seqüência inicial. Ocasionalmente o resultado do Convert. ToChar é um quot0quot. Esta seqüência de caracteres é o que está ficando salvo e ler do registro. Portanto, é uma seqüência composta de caracteres e, às vezes, um desses caracteres é o caractere nulo. Mais uma vez, isso é tudo novo para mim, então eu não sei exatamente que tipo de corda isso é. Obrigado por me apontar para um par de alternativas. Eu tenho um pouco de pesquisa para fazer, pois não tenho certeza exatamente o que é um identificador e não consigo encontrar nenhum exemplo (exceto um bastante complexo) de usar RegQueryValueEx em C. É bom saber que eu tenho alternativas embora . Quinta-feira, 27 de janeiro de 2017 18:43 Recupera o tipo e dados para o nome de valor especificado associado com uma chave de registro aberta. Você pode usar isso em seu código C. E há também um código de exemplo C no segundo link acima, você pode lê-lo. Se há qualquer preocupação, por favor, sinta-se livre para me informar. Tenha um bom dia Mike MSFT MSDN Suporte Comunidade Feedback para nós Obter ou Solicitar amostra de código da Microsoft Lembre-se de marcar as respostas como respostas se eles ajudam e desmarcar-los se eles não fornecem nenhuma ajuda. Eu estava tentando migrar algum código que estava sendo executado. NET 3.5 para executar em 4, e encontrou este problema estranho. Eu tenho isso para baixo para um testcase super simples: Observe que o valor armazenado nessa chave de registro é quotUnicodequot Primeira execução direcionando. NET 3.5 ea saída é: Unicode 7Press qualquer chave para continuar. Agora destino. NET 4: 127Pressione qualquer tecla para continuar. Observe o linebreak extra. Parece que ele está agarrando um pedaço maior de memória. Se você olhar no depurador, heres o valor da seqüência de caracteres que recupera: Fazendo um string. split está segurando uma seqüência de terminadores nulos que quebra o meu código. Como uma solução, há uma maneira que eu posso quottrimquot acima Trim () não funciona. Parece que não está esperando o terminador nulo na verdade na seqüência. Eu não acho que um terminador nulo poderia mesmo ser parte de uma seqüência de caracteres em. net É este um bug Existe em qualquer lugar que o. NET 4.0 mudanças para a classe RegistryKey foram documentados É este relacionado a esta mensagem É este um defeito Qualquer pensamentos seria ótimo. Meu ponto era que uma seqüência de caracteres com um NULL nele é perfeitamente legal no Windows. Há casos em que ele é realmente usado. Multistrings que são armazenados no registro são armazenados dessa maneira. Portanto, não é suficiente para a classe de registro para tentar limpar NULLs de uma seqüência de caracteres (se no meio ou no final da seqüência de caracteres) como ele pode afetar os resultados esperados. Talvez ele teria sido bom se a estrutura expôs um método GetValue com algumas opções, como TrimNulls, mas eles didnt. Felizmente você poderia facilmente escrever um método de extensão para fazer isso. Você realmente não precisa de um RE para encontrar o NULL. Basta usar algo como: int index value. IndexOf (0) se (index gt 0) valor value. Substring (0, index) Pessoalmente, tenho um método de extensão de cadeia chamada LeftOf que leva um caractere e retorna tudo à esquerda dele. Ele basicamente faz o bloco de código acima mencionado. Marcado como resposta por Benji22 Sexta-feira, 17 de Dezembro de 2018 18:35 Sexta-feira, 17 de Dezembro de 2018 18:18 Recupera o tipo e dados para o nome de valor especificado associado com uma chave de registo aberta. Você pode usar isso em seu código C. E há também um código de exemplo C no segundo link acima, você pode lê-lo. Se há qualquer preocupação, por favor, sinta-se livre para me informar. Tenha um bom dia Mike MSFT MSDN Suporte Comunidade Feedback para nós Obtenha ou peça um exemplo de código da Microsoft Lembre-se de marcar as respostas como respostas se elas ajudarem e desmarcarem se não fornecerem nenhuma ajuda. Bem-vindo ao MSDN Forums Eu também não posso repro que o problema do meu lado, então você pode fornecer mais informações sobre este problema quando esse problema ocorre do seu lado Eu acho que uma captura de tela e uma cópia desse valor de chave de registro seria útil para nós para limpar Sobre esse assunto que você está enfrentando. Captura de tela. Queremos ver que as informações que você disse em seu primeiro post no tempo de depuração. A maneira de publicar uma imagem: você pode fazer o upload da imagem para o seu espaço ao vivo do Windows, em seguida, abra esta imagem em seu espaço, selecione esta imagem e copie-o para a caixa de texto de resposta e, em seguida, você pode enviar uma imagem em sua postagem. Exportar a chave de registo. Abra o registro e localize o quotHKCU SoftwareMicrosoftCharMap quot que você está usando e clique com o botão direito do mouse no quotCharMapquot e selecione quotExportquot para exportar esse valor chave e publicá-lo em sua postagem. Isso é importante para se certificar de que se este é um problema de produto ou apenas um problema comum. Tenha um bom dia Mike MSFT MSDN Suporte Comunidade Feedback para nós Obtenha ou peça um exemplo de código da Microsoft Lembre-se de marcar as respostas como respostas se elas ajudarem e desmarcarem se não fornecerem nenhuma ajuda. Terça-feira, dezembro 14, 2018 5:01 PM Por seu pedido, adicionei screenshots. Heres a chave do registro: Agora aqui está o comportamento correto com o. NET 3.5. Observe que eu capturar a versão em execução do CLR para você ver, e que uma seqüência de caracteres de sete caracteres é retornada: Agora, quando mudamos para. NET 4 CLR, temos comportamento diferente: Ive reproduzido isso em outra máquina. Então reprod on: Windows 7 Ultimate 32 bits e Windows 7 Professional 64 bits Você tentou em uma máquina Windows 7 reproduzir este Sim houve uma mudança feita entre v3.x e v4. Eu posso replicar o seu problema, mas eu não sei que a Id chamá-lo de um bug. É certamente uma mudança de comportamento. O que acontece é que internamente o framework obtém o tamanho do valor do registro via Win32. Em seguida, aloca uma matriz de caracteres para armazenar o tamanho fornecido e lê os dados. Em seguida, ele converte a matriz de caracteres em uma seqüência de caracteres. Se os dados contiverem NULLs no meio, então não incomodarão truncá-los porque NULL é válido em uma string. Algumas chaves de registo são concebidas para suportar isto. O melhor que poderia fazer seria cortar o NULLs do final da seqüência de caracteres, mas mesmo que é perigoso porque as chaves que suportam NULLs no meio geralmente exigem NULLs duplo no final. Em seu caso específico Win32 diz que a seqüência de caracteres é 128 caracteres que é o que é alocado. Você não verá os NULLs no RegEdit porque ele está exibindo o valor como uma seqüência de caracteres C. Na v3.x a estrutura didnt usar uma matriz de char, mas sim usado StringBuilder. Em seguida, contou com o marshaller para fazer a conversão entre caracteres não gerenciados e StringBuilder. Esta abordagem trata de NULLs. No entanto, esta abordagem introduz o risco de um valor de registo não devolvido correctamente (se suportado NULL incorporado). Se houve realmente um relatório de erro sobre ele ou não eu não sei. Então, em resumo, sim, houve uma mudança de comportamento entre v3.x e v4. Não, eu não considero que seja um bug. A solução é certificar-se você chamar Trim (0) em qualquer seqüência de caracteres que você pode ler que pode ser preenchido com NULLs (muito comum ao escrever valores de estrutura de estilo C para o registro). Sexta-feira, dezembro 17, 2018 4:05 PM Obrigado pela informação, Michael. Gt Se os dados contiverem NULLs no meio, então não incomodarão truncá-los porque NULL é válido em uma string. Você pode explicar o que está acontecendo no meu exemplo, em seguida, O valor parece ser quotUnicodequot, então eu não vejo como nulos no meio é relevante aqui. Você pode me ajudar a entender a solução gtThe é certificar-se de que você chama Trim (0) em qualquer seqüência de caracteres que você possa ler Neste exemplo, isso funcionaria. Mas em outro registro ler, o comportamento V4 é retornar uma seqüência de caracteres que é terminada com um nulo, mas, em seguida, contém uma mistura de nulos e outros valores. Este valor de registo foi escrito por uma aplicação não-microsoft assim seu possível que não foi escrito corretamente, mas novamente, em 3.5 ele ler corretamente. Eu tive que construir uma expressão regular para agarrar até o FIRST null para contornar isso. Sexta-feira, 17 de dezembro de 2018 18:13 Meu ponto era que uma string com um NULL nele é perfeitamente legal no Windows. Há casos em que ele é realmente usado. Multistrings que são armazenados no registro são armazenados dessa maneira. Portanto, não é suficiente para a classe de registro para tentar limpar NULLs de uma seqüência de caracteres (se no meio ou no final da seqüência de caracteres) como ele pode afetar os resultados esperados. Talvez ele teria sido bom se a estrutura expôs um método GetValue com algumas opções, como TrimNulls, mas eles didnt. Felizmente você poderia facilmente escrever um método de extensão para fazer isso. Você realmente não precisa de um RE para encontrar o NULL. Basta usar algo como: int index value. IndexOf (0) se (index gt 0) valor value. Substring (0, index) Pessoalmente, tenho um método de extensão de cadeia chamada LeftOf que leva um caractere e retorna tudo à esquerda dele. Ele basicamente faz o bloco de código acima mencionado. Marcado como resposta por Benji22 Sexta-feira, 17 de dezembro de 2018 18:35 Sexta-feira, 17 de dezembro de 2018 18:18 Sexta-feira, 17 de dezembro de 2018 18:36 Im feliz este problema tinha sido resolvido, embora eu também não pode repro este problema no meu lado. E agradece ao CoolDadTx pelas suas postagens nos fóruns Tenha um bom fim de semana Mike MSFT MSDN Comunidade Suporte Feedback para nós Obtenha ou peça um exemplo de código da Microsoft Lembre-se de marcar as respostas como respostas se elas ajudarem e desmarcarem se não fornecerem nenhuma ajuda. Estou usando o framework v3.5 e acredito que tenho um dos casos em que um valor de registro que eu preciso não está sendo devolvido corretamente porque ele tem um null embutido. É um valor criptografado que ocasionalmente contém um quot0quot no meio da seqüência. Chamar a função. GetValue () neste valor retorna uma versão truncada - tudo à esquerda do quot0quot. Estou fazendo um estágio e meu empregador não quer mudar o projeto para a estrutura v4. Você tem alguma sugestão para mim nesta situação É possível para mim para substituir a função RegistryKey. GetValue () Se assim for, existe uma maneira de burrow para baixo na estrutura v4 e encontrar este código para usá-lo no meu projeto que eu iria Ser feliz para fornecer mais informações sobre a minha situação específica, se necessário. Apenas deixe-me saber que informação o ajudaria. Sou novo no desenvolvimento e não consigo encontrar muita informação sobre este problema. Qualquer ajuda é muito apreciada. Quarta-feira, 26 de janeiro de 2017 16:23 Não, você não pode substituir o comportamento de RegistryKey embora você poderia escrever um método de extensão para expor um método GetEncryptedValue. O problema é com o próprio valor. Valores criptografados com NULLs incorporados não são strings, eles são binários (ou multi-strings). Portanto, se a chave do registro é armazenar o valor como uma seqüência de caracteres, mas os dados são binários, em seguida, quem escreveu os dados está fazendo isso incorretamente. Nos casos em que os dados binários precisam ser escritos como uma string (XML, por exemplo), o código deve codificar os dados binários. Base64 é comum e. NET suporta conversão de e para cadeias codificadas base64. Você pode resolver este problema de algumas maneiras. A questão importante é qual é o tipo do valor do Registro. Se for REGBINARY, então os dados retornados serão uma matriz de bytes que você pode então descriptografar de volta. Mais provável porém é REGSZ assim itll ser truncado. Infelizmente, o. NET não expõe um método para obter o valor bruto. Itll sempre tentar converter o valor para um tipo. NET. Portanto youre vai ter que usar a função Win32 RegQueryValueEx brutos para obter o valor bruto que você pode processar. Heres onde fica difícil. Para chamar a API Win32 para ter um identificador para a chave. Até v4 o identificador é interno ao RegistryKey e, portanto, inacessível. A única maneira de usar a API do Win32 é fazer todas as chamadas de API necessárias para abrir, consultar e fechar a chave diretamente. RegistryKey não pode ser usado aqui. É doloroso, mas a única solução segura. Se você não se importa de ser um pouco inseguro, então você poderia usar reflexão para obter o identificador de RegistryKeys campo privado (use Reflector para dar uma olhada na fonte). Isso não funciona bem em modos de confiança não total e pode ser quebrado na versão posterior, mas ele permite que você use Win32 sem ter que fazer todos os abrir / fechar em Win32 também. Começando com v4 a alça está publicamente disponível para que você não tem que fazer isso - mas então você wouldnt estar tendo esse problema de qualquer maneira. Quarta-feira, janeiro 26, 2017 4:53 PM Obrigado pela sua resposta informativa e rápida. Ele é salvo no Registro como tipo REGSZ. Não tenho certeza se é tecnicamente um valor binário ou um multi-string. Para ser honesto, eu não acho que seja. A criptografia neste caso está fazendo uma equação mathmatical para obter um código ascii e, em seguida, usa um Convert. ToChar nesse código ascii para cada caractere na seqüência inicial. Ocasionalmente o resultado do Convert. ToChar é um quot0quot. Esta seqüência de caracteres é o que está ficando salvo e ler do registro. Portanto, é uma seqüência composta de caracteres e, às vezes, um desses caracteres é o caractere nulo. Mais uma vez, isso é tudo novo para mim, então eu não sei exatamente que tipo de corda isso é. Obrigado por me apontar para um par de alternativas. Eu tenho um pouco de pesquisa para fazer, pois não tenho certeza exatamente o que é um identificador e não consigo encontrar nenhum exemplo (exceto um bastante complexo) de usar RegQueryValueEx em C. É bom saber que eu tenho alternativas embora . Quinta-feira, 27 de janeiro de 2017 18:43 Recupera o tipo e dados para o nome de valor especificado associado com uma chave de registro aberta. Você pode usar isso em seu código C. E há também um código de exemplo C no segundo link acima, você pode lê-lo. Se há qualquer preocupação, por favor, sinta-se livre para me informar. Tenha um bom dia Mike MSFT MSDN Suporte Comunidade Feedback para nós Obtenha ou peça um exemplo de código da Microsoft Lembre-se de marcar as respostas como respostas se elas ajudarem e desmarcarem se não fornecerem nenhuma ajuda.

Comments

Popular Posts