手抜きOS Windows 10 Part198 / なんか良く分からないレジストリのバグ

 RegSetValueExA(hKey,"DisplayName",NULL,REG_SZ,(BYTE*)STRING,18);

 RegSetValueExA っていうレジストリーの値を書き込む関数があって上みたいな使い方をするんですが、この第5パラメータ文字数が18文字以上あるんですが、18文字しか書き込みたくないので、18を指定しました。

普通は再読み込みしても18文字しか読み出せないんですが、ごくたまに謎の19文字目が読み出せることがあって、困っています。

上記の STRINGの19文字目が書き込まれてしまっている・・・というのなら納得がいくのですが、全然関係ない一文字が読み出せるという良く分からない状況 ・ω・

実は、Windows 2000でも RegQueryValue 周りの動作で読み書きする文字列の字数が正確でない場合は、予想外の文字列が読み書きされるという不可解なことがあったので、そのバグを継承し続けてるんじゃないかなと思っています ((((・ω・))))

おすすめ

2件のフィードバック

  1. のん より:

    単純にサイズで指定した長さを書いているだけなので、ターミネータに\0も含めても含めなくてもいいし、\0の後に文字列を含ませたサイズで書いてregeditで見えない文字列を置くこともできるんだけど、RegQueryValue系の値の長さが18じゃなく19で返ってくるの?経験したことないなぁ。
    (RegGetValue系は\0補完がついているようなので、記事のように\0を含んでいない状態で書いたものはバッファサイズが19以上でないと読めないと思う。)

  2. 黒翼猫 より:

    >>1
    実は、Windows 10のプログラムの追加と削除に表示されるアプリの名前にゴミが入るので何かと思って調べてたんですよ・ω・

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です