これらは Windows レジストリ内の異常な値ですか?

これらは Windows レジストリ内の異常な値ですか?

ソフトウェア パッケージからの奇妙なエラー メッセージを修正しようとして、レジストリを調べていたところ、いくつかの値が「おかしい」ことに気付きました。

例えば:

HKEY_CLASSES_ROOT\Installer\Components\71CE92CC2CB71D119A12000A9CE1A22A

含まれるもの:

signer.dll  REG_MULTI_SZ  
OC~jzh?Vl@K]-%4u9Xx!Intel_VBA_English>ZqT]jI{jf(=1&L[-81-]

他にも、このような意味不明な文字列を持つエントリがかなりあります。これは、実際のデータ値というよりも、何かが間違っているように見えます。これは、レジストリが何らかの形で破損していることを示す兆候でしょうか?

答え1

それはすべて十分に合理的に見えます。レジストリは結局のところ、機械が読み取り可能なデータを格納するように設計されています。

答え2

心配する必要はありません。実際、表示される「通常の」値は、簡単に読み取れる形式に変換された 2 進数または 16 進数の値です。

答え3

鍵となるのは、バイナリまたは 16 進数のデータを格納することです。これは、必ずしも読み取り可能な文字に直接変換されるわけではありません。そのため、テキストとして表示しようとすると、プログラムはマシンのデフォルトの文字セット (通常、1 文字は 1 バイト) を使用して文字列に変換しようとしますが、データが文字形式で入力されていないため、意味不明な文字が表示されます。

バイナリとバイトのデータは、どのように解釈するかによって、さまざまなものを表すことができます。たとえば、ランダムな32ビットの整数を取ったとします。1,342,749バイナリとしてこれは00000000 00010100 01111101 00011101これを16進数で表すと0x00147D1DこれをASCII文字セットを使って文字として読み取ろうとすると、??}?(より正確には、NUL - DC4 - } - GS) であり、これは完全に意味不明です。

低レベルのデータは、特にビットおよびバイト レベルで保存される場合、文字として表示可能であるという保証はありませんが、これによってデータが意味不明になることはありません。多くの場合、プログラムがデータを直接ビット/バイト形式で保存することが最も効率的/安全/などになります。具体的には、たとえば圧縮技術です。

関連情報