レジストリ書込みについて – プログラミング – Home

レジストリ書込みについて
 
通知
すべてクリア

[解決済] レジストリ書込みについて


そば茶
 そば茶
(@そば茶)
ゲスト
結合: 21年前
投稿: 2
Topic starter  

こんにちは。
WindwosXPのレジストリ
(HKEY_LOCAL_MACHINE\SOFWARE\Microsoft\Windows\CurrentVersion\Run)
に対して書込みを行ったのですが、書き込んだデータの末尾に...と表示され、
実行されません。
バイナリの修正で中身を見てみると.が大量についているのですが。。。
一度、修正で開いてOKボタンで閉じると...が消え、実行されるようになります。

HKEY hKey;
LONG reg;
CString buf;
char ebuf[512];

reg = RegOpenKeyEx
(HKEY_LOCAL_MACHINE,SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run,0,KEY_SE
T_VALUE,&hKey );

memset(ebuf,NULL,sizeof(ebuf));
buf.Empty();
buf.Format(%s%s,TARGET,\\mspaint.exe);
_tcscpy(ebuf,buf);
reg = RegSetValueEx(hKey,PAINT,0,REG_SZ ,(const unsigned char*)ebuf,sizeof
(ebuf));

reg = RegCloseKey(hKey);

上記の様に記述しています。
開発環境はWindowsXP、VC++6.0、MFCです。
もし、解決策をご存知の方がいらっしゃいましたらご教授願います。


引用未解決
トピックタグ
鷲尾不徳
 鷲尾不徳
(@鷲尾不徳)
ゲスト
結合: 21年前
投稿: 21
 

> reg = RegSetValueEx(hKey,PAINT,0,REG_SZ ,(const unsigned char*)ebuf,sizeof
(ebuf));

第6引数はレジストリエントリのデータのサイズです
lstrlen等で文字列長を入れてください。
配列のサイズ全てを書き込んだため、... の値は 0 になっていると思います。


返信引用
鷲尾不徳
 鷲尾不徳
(@鷲尾不徳)
ゲスト
結合: 21年前
投稿: 21
 

自分で呼んでみてわかりにくかったので

> 配列のサイズ全てを書き込んだため、
sizeofで配列の全てのサイズを指定して書き込んだため、

として読んでください。


返信引用
そば茶
 そば茶
(@そば茶)
ゲスト
結合: 21年前
投稿: 2
Topic starter  

> lstrlen等で文字列長を入れてください。
> 配列のサイズ全てを書き込んだため、... の値は 0 になっていると思います。
アドバイスありがとうございます。
無事...が付かずに書き込めました!

鷲尾不徳様、どうもありがとうございました。


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

(l)strlen は、文字列の終端の NULL を戻り値に含めません。
対して RegSetValueEx では、バイト数を正確に渡してやる必要があるので
文字列の最後に NULL が入っているのをしっかり確認したうえで、
文字列長 + 1 を渡してやる必要があると思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました