RegSetValueEx

解決


アサシ  2002-12-04 11:04:05  No: 105599  IP: [192.*.*.*]

RegSetValueExを使用して値を書き込むとエラーになります。
エラーの内容は「アクセスは拒否されました」だそうです。

Win98だと正常に書き込めるのですが、XPだとこのようなエラーになります。

キーは作成できてるのですが、値の書き込みがどこにも出来ません・・・。
どなたかお願いします。

編集 削除
YO  2002-12-04 12:46:40  No: 105600  IP: [192.*.*.*]

そのレジストリキーへのアクセス権限を持っていますか?

例えば,NTだとHKEY_LOCAL_MACHINE以下に対して,
AdministratorsとSystemはフルコントロールの権限を持っていますが,
Everyoneは読み込みの権限しか持っていません。

他に,このエラーはKEY_SET_VALUE無しにハンドルを作成した場合などにも起きます。
#KEY_SET_VALUEはKEY_WRITEとKEY_ALL_ACCESSに含まれます。

編集 削除
アサシ  2002-12-04 14:06:37  No: 105601  IP: [192.*.*.*]

ありがとうございます!

作成時にKEY_SET_VALUEを入れて作成し
RegOpenKeyExでハンドルを取得する際に、第三引数にKEY_SET_VALUEを入れて
取得したハンドルに対して、RegSetValueExで書き込んだらXPでも書き込めました。

とりあえず解決です。

どっかのHPでRegOpenKeyExの第二、第三引数は常に0、1って書いてあったのでその通りやってました。

編集 削除
YuO  2002-12-04 15:44:31  No: 105602  IP: [192.*.*.*]

> どっかのHPでRegOpenKeyExの第二、第三引数は常に0、1って書いてあったのでその通りやってました。

このサイトにその大嘘が書いてありますね。
APIを使って動かないのであれば,とりあえずMSDNを参照してみることです。

ちなみに,RegOpenKeyExなんぞ使わずにRegCreateKeyExのみ使うことで,
レジストリの該当キーが存在しようがしまいが開くことが出来ます。

編集 削除
アサシ  2002-12-04 16:06:41  No: 105603  IP: [192.*.*.*]

ほんとだ(笑)
気づきませんでした。。。

悪気は無かったのですが。

というかXPでレジストリを書き込む際に正しく書き込めない(値が途中で切れてる)のですが、どうしてでしょうか?(取得も出来てないようです。)

98では難なく動いています。

まぁもうちょっと調べてみます。XPさっぱりわかりません。XP嫌い。

編集 削除
YuO  2002-12-04 19:05:30  No: 105604  IP: [192.*.*.*]

> というかXPでレジストリを書き込む際に正しく書き込めない(値が途中で切れてる)のですが、どうしてでしょうか?(取得も出来てないようです。)

APIの使い方が悪いのでしょう。
戻り値をちゃんと調べてみるとよいかと。


> まぁもうちょっと調べてみます。XPさっぱりわかりません。XP嫌い。

NT系の方が細かい制御ができるので,逆に制限が厳しいとも言えます。
ちゃんとMSDNを読んで使えばレジストリはそれほど難しくないです。

編集 削除
アサシ  2002-12-04 20:03:44  No: 105605  IP: [192.*.*.*]

すいません解決しましたXP。

RegSetValueExに渡す最後の引数がLenでとってました。
LenBにしたら動きました。書き込む値に全角文字も入っていたので。。。

YuOさん本当にいつもありがとうございます。師匠と呼ばせてください。

編集 削除
アサシ  2002-12-04 20:05:41  No: 105606  IP: [192.*.*.*]

でも98だと動く。。。何でだろう?
まぁ解決解決!気分いいです!

編集 削除