2017-11-07 5 views
1

アプリケーションを「Windows Vista互換モード」(EXEを右クリックし、互換モードを有効にしてWindows Vistaを選択)で実行すると、非常に奇妙な問題が発生します。Vista互換モードでRegEnumValueが異なるバッファサイズを返す

"RegEnumValue"関数の戻りバッファ長の値が異なる値を返します。例えば

、「ズームプレーヤーMAX」(15文字)のレジストリ値を持つ:

diabled互換モードでは、RegEnumValueの「lpcbData」フィールドには、(末尾のNULL終了を含む)16の値を返します。

互換モードを有効にすると、RegEnumValueの "lpcbData"フィールドは値15(末尾のNULL終了は含まれません)を返します。

文字列変換コードを変更する必要がない回避策またはパッチはありますか?

答えて

7

重要ではありません。低レベルの古典的な機能を使用してレジストリから読み込むときは、ヌル・ターミネータ付きとなしの文字列を処理できなければなりません:

Beware of non-null-terminated registry strings

これを行う簡単な方法は、密かにあなたの1つの余分な文字を割り当てることです読み込みをAPIに指示しないで、返す文字の末尾に'\0'文字を追加してください。

新機能、RegGetValue()のようにこれを処理します。

関連する問題