misc.log

日常茶飯事とお仕事と

VBAによるレジストリへの書き込みと管理者権限

今更な話題ですが……Excel VBAからWin32 API(RegSetValueEx)をつかってレジストリに設定値などを書き込もうとした場合、今実際に調べた感じでは以下のような制約があるようです。

※業務用の環境で試していますので、一般的な話では無いかもしれません。あくまで一つのケースとして、また、調査でのパターン切り分けの参考程度に考えてください。

ルートキー Excelのモード 読み出し 書込み
HKEY_CLASSES_ROOT 一般 ×
HKEY_CLASSES_ROOT 管理者として開く ×
HKEY_CURRENT_USER 一般
HKEY_CURRENT_USER 管理者として開く
HKEY_LOCAL_MACHINE 一般 ×
HKEY_LOCAL_MACHINE 管理者として開く ×
HKEY_USERS 一般 ×
HKEY_USERS 管理者として開く
HKEY_CURRENT_CONFIG 一般 ×
HKEY_CURRENT_CONFIG 管理者として開く ×

ただし、Excelを管理者として開いて動かした場合、上表で×になっている部分についてはいずれの書き込み命令も処理の戻り値は「0」(成功)が返ります。しかし、値は設定されていません。

また、HKEY_CURRENT_USERS/Software/Classes は、HKEY_CLASSES_ROOT とつながっており、CURRENT_USERS経由でCLASSES_ROOTに値を設定することも可能なようです。

ま、いまどきレジストリを使って設定値を保管しようってプログラムを作ることも無いでしょうけど。参考まで。

なお、上記動作はWindows 7 32bit日本語版で、Office 2010、Office 2013で確認しました。ただ、業務用PCのため特殊な権限設定が行われている可能性はあります。必ずしも一般的な話と断定できないということはご了承ください。

APIで学ぶWindows徹底理解 (日経BPパソコンベストムック)

APIで学ぶWindows徹底理解 (日経BPパソコンベストムック)