Como posso converter um valor REG_BINARY do registro em uma string? (Vb.net)
-
20-08-2019 - |
Pergunta
Eu tenho um valor de registro que é armazenado como um valor binário (REG_BINARY) segurando informações sobre um caminho de arquivo. O valor é lido para fora a uma matriz de bytes. Mas como posso transformá-lo em uma string legível?
Eu li sobre system.text.encoding.ASCII.GetString (valor), mas isso não funciona. Tanto quanto eu tenho que saber o valor do registro é arbitrária dados binários e não ASCII que é a razão para o método para produzir dados inúteis.
Alguém sabe como posso converter os dados?
Amostra: (A peça da entrada)
01 00 00 00 94 00 00 00 14 00 00 00 63 00 3A 00 5C 00
70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 6d 00 65 00
5C 00 67 00 65 00 6D 00 65 00 69 00 6E 00 73 00 61 00
6D 00 65 00 20 00 64 00 61 00 74 00 65 00 69 00 65 00
6E 00 5C
Devido à regedit isto é suposto ser:
............c.:.\.p.r.o.g.r.a.m.m.e.\.g.e.m.e.i.n.s.a.m.e. .d.a.t.e.i.e.n.\
A entrada em si foi criado a partir do Outlook. É uma entrada para um item suplemento desativado (resiliência)
Solução
Bem, não é arbitrária dados binários - é dados de texto em alguns tipo de codificação. Você precisa descobrir o que a codificação é.
Eu não ficaria surpreso se Encoding.Unicode.GetString(value)
funcionou - mas se isso não acontecer, por favor postar uma amostra (em hex) e eu vou ver o que posso fazer. O que a documentação de tudo o que é colocar os dados lá dizer?
EDIT: Parece que Encoding.Unicode é seu amigo, mas a partir de byte 12. Use
Encoding.Unicode.GetString(bytes, 12, bytes.Length-12)
Outras dicas
Eu tive esse problema também e eu resolvido desta maneira:
Eu havia declarado uma variável como:
Dim encoding As System.Text.Encoding = System.Text.Encoding.Unicode
Então eu fazer isso em um loop:
For Each Val As String In ValueName
data = k.GetValue(Val)
ListRecent.Items.Add(Val & ": " & encoding.GetString(data))
Next
Assim, em caixa de listagem denominado "ListRecent" Obtive a lista completa das recentes
Use
Function Microsoft.Win32.RegistryKey.GetValue(name as String) as Object
Também olhar para System.Text.Encoding
e System.Text.Encoding.Unicode