RegSetValueExを使用して値を書き込むとエラーになります。
エラーの内容は「アクセスは拒否されました」だそうです。
Win98だと正常に書き込めるのですが、XPだとこのようなエラーになります。
キーは作成できてるのですが、値の書き込みがどこにも出来ません・・・。
どなたかお願いします。
そのレジストリキーへのアクセス権限を持っていますか?
例えば,NTだとHKEY_LOCAL_MACHINE以下に対して,
AdministratorsとSystemはフルコントロールの権限を持っていますが,
Everyoneは読み込みの権限しか持っていません。
他に,このエラーはKEY_SET_VALUE無しにハンドルを作成した場合などにも起きます。
#KEY_SET_VALUEはKEY_WRITEとKEY_ALL_ACCESSに含まれます。
ありがとうございます!
作成時にKEY_SET_VALUEを入れて作成し
RegOpenKeyExでハンドルを取得する際に、第三引数にKEY_SET_VALUEを入れて
取得したハンドルに対して、RegSetValueExで書き込んだらXPでも書き込めました。
とりあえず解決です。
どっかのHPでRegOpenKeyExの第二、第三引数は常に0、1って書いてあったのでその通りやってました。
> どっかのHPでRegOpenKeyExの第二、第三引数は常に0、1って書いてあったのでその通りやってました。
このサイトにその大嘘が書いてありますね。
APIを使って動かないのであれば,とりあえずMSDNを参照してみることです。
ちなみに,RegOpenKeyExなんぞ使わずにRegCreateKeyExのみ使うことで,
レジストリの該当キーが存在しようがしまいが開くことが出来ます。
ほんとだ(笑)
気づきませんでした。。。
悪気は無かったのですが。
というかXPでレジストリを書き込む際に正しく書き込めない(値が途中で切れてる)のですが、どうしてでしょうか?(取得も出来てないようです。)
98では難なく動いています。
まぁもうちょっと調べてみます。XPさっぱりわかりません。XP嫌い。
> というかXPでレジストリを書き込む際に正しく書き込めない(値が途中で切れてる)のですが、どうしてでしょうか?(取得も出来てないようです。)
APIの使い方が悪いのでしょう。
戻り値をちゃんと調べてみるとよいかと。
> まぁもうちょっと調べてみます。XPさっぱりわかりません。XP嫌い。
NT系の方が細かい制御ができるので,逆に制限が厳しいとも言えます。
ちゃんとMSDNを読んで使えばレジストリはそれほど難しくないです。
すいません解決しましたXP。
RegSetValueExに渡す最後の引数がLenでとってました。
LenBにしたら動きました。書き込む値に全角文字も入っていたので。。。
YuOさん本当にいつもありがとうございます。師匠と呼ばせてください。
でも98だと動く。。。何でだろう?
まぁ解決解決!気分いいです!
ツイート | ![]() |