• 締切済み

レジストリについて

レジストリについて調べていて REG_EXPAND_SZというのは NUL 文字で終端された文字列だが、「%PATH%」などのように、 変数への展開が行われていない参照が入っているもの。 実際に値を利用する時点で、変数が展開されます。 例えば「%SYSTEMROOT%\system32」は、 一般的な環境では「C:\WINDOWS\system32」などとなります。 日本語版 Windows では「展開可能な文字列値」となります。 と記されていたのですが、レジストリのデータの欄に%SYSTEMROOT%\system32が記されているということなので、この変数のデータC:\WINDOWSはどこに保存されているのですか?展開という意味がピンときません。どういう意味なのでしょうか。よろしくお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3>展開するという意味は、その環境変数からAPIを通じて、boot.iniファイルに取りにいき、値を得るということですか? そうではなくて、 #2で書いているように 「%環境変数%」の部分が 環境変数が保持している内容に置き換わる ということです。 つまり、レジストリエディタで"REG_EXPAND_SZ" になっているものは、利用する時にそのように置き換えるということですね。

hirohiro8888
質問者

お礼

回答ありがとうございます。レジストリの雰囲気がつかめました。 ありがとうございます

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2>レジストリエディタのどこに環境変数の中の文字列は書かれているのですか? #1様の回答にあるように、 通常、環境変数は、#1様の回答にあるような場所に保存されていますが、ある種の特殊フォルダについては、起動時に動的に作成されるのだと思います。 例えば、システムを複数インストールしてデュアルブートなどもできるため(起動してから書いてもいいが、レジストリに書いておくことは意味がない)。 そういう意味で言うと、boot.ini に書いてあると言えるのかもしれません。

hirohiro8888
質問者

お礼

展開するという意味は、その環境変数からAPIを通じて、boot.iniファイルに取りにいき、値を得るということですか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

%SYSTEMROOT% などは環境変数です。 コマンドプロンプトで set とか echo %SYSTEMROOT% などとして現在の設定されている環境変数を見ることができます。 つまり、 SystemRoot=C:\windows の様に設定されていて、 それが%SYSTEMROOT% の様に呼び出されて、設定されている文字列に置き換わるということを展開されると説明されています。

hirohiro8888
質問者

補足

お答えありがとうございます。 置き換わる仕組みがよくわかりません。レジストリエディタのどこに環境変数の中の文字列は書かれているのですか?

noname#20377
noname#20377
回答No.1

回答にはなりません。ご指摘の%SYSTEMROOT%は見つけることが出来なかったからです。 %Path%や%Windir%等のデータは以下の場所にあります 環境変数として以下の場所に システム環境変数 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Environment ユーザー環境変数 HKEY_CURRENT_USER\Environment ======= なお、これらの環境変数はGUI的には [コントロールパネル]-[システム]-[詳細設定]タブ-[環境変数]で閲覧・編集することが出来ます

hirohiro8888
質問者

お礼

お答えありがとうございました。

関連するQ&A

  • レジストリの値の取得のデータ型について…

    いつも大変お世話になっています。 今回は、APIのRegQueryValueExを使用してレジストリの値を取得しようとしているのですが、 レジストリのデータ型に対応するVBのデータ型がわからないものがあったので 質問させていただきます。 REG_EXPAND_SZ 展開可能フィールド(%USERNAME% %SystemRoot%など)を含んだ文字列 REG_MULTI_SZ 連続したゼロで終わる文字列(Str1\0Str2\0Str3\0... REG_BINARY バイナリデータ (最大1Mバイト) の3つなんですが、REG_BINARYはByte型でもエラーは出なかったのですが、値がレジストリのものと 違いました。(レジストリ:00 00 01 00 のデータに対して 取得データ:0 が取得されたのです) 他の2つは文字列型、数値型、バリアント型で試しましたが、すべて、メモリの参照エラーになってしまうのです。 どうかよろしくお願いします。

  • 環境変数の再帰展開について

    環境変数の中で環境変数を使用したときに、 こちらの思ったように文字列が展開されません。 例. システム環境変数 SystemDrive=C: WORK_PATH=%SYSTEMDRIVE%\temp PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem ユーザー環境変数 PATH=%WORK_PATH%;%PATH% こんな感じでセットされている場合、 コマンドプロンプトでset PATHした場合の結果が異なります。 Vistaでは C:\temp;C:\WINDOWS~ と展開されますが、 Windows XP環境では %SYSTEMDRIVE%\temp;C:\WINDOWS~ と、 %SYSTEMDRIVE%の部分がそのままになってしまいます。 Windowsの環境変数には2種類の属性があり、 上記の環境変数を登録する際は"展開可能"属性にしました。 またレジストリの"Command Processor\EnableExtensions" も1になっていることを確認しています。 ちなみにset WORK_PATHとしたときは、 両方の環境で C:\temp と表示されることから、 環境変数の再帰展開がうまく機能していないと思われます。 XP環境でもVista環境と同じように環境変数の再帰展開をすることは可能でしょうか?

  • Win7 レジストリの新規キー追加の方法で、

    種類をREG_EXPAND_SZにする方法を教えて下さい。 それと、もともとある(既定) REG_SZをREG_EXPAND_SZに変える方法もわかりやすく教えて下さい。レジストリエディタではデータの入力はできても、(既定)の削除や、種類の変更、新規キー追加時の種類の変更ができません。よろしくお願いします。

  • 【 REG_SZ 】 (レジストリのデータ型の一つ) のことで

    レジストリ(registry)で用いられるデータ型の一つに、  【 REG_SZ 】: 単純な文字列 というのがありますが、 ここでの "SZ" という表し方は、何から来ているんでしょうか? "S" は String のことかなと思ったりもするんですが、 "Z" の方は見当が付きませんもので。 ---- 同じデータ型でも、  【 REG_BINARY 】: バイナリ値 なんかですと、"そのまんま" なんですけどね。 --

  • バッチでのレジストリPath環境変数方法

    バッチでのレジストリPath環境変数方法 お世話になっております。 レジストリのPath環境変数をバッチで変更しようとています。 バッチ処理の動きとしては、下記の処理をするバッチを 作りたいのですが、上手くいきません。 ≪処理≫ 1、reg queryで、指定されたPath設定を検索 2、if errorlevel ~ 構文で   if errorlevel 1 goto tran1   goto tran2     2-1、指定されたPath設定がなければ、3へ。   2-2、指定されたPath設定があれば、 4へ。     (指定されたPath環境変数は設定済み)    3、reg addで、Path環境変数を変更する 4、次の処理実施   (指定されたPath環境変数は設定済) 具体的な処理内容は、下記のような記述をしてます。 ≪バッチ内容(例)≫ @echo off reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path | findstr /i "C:\Program Files\navnt" if errorlevel 1 goto tran1 goto tran2 :tran1 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path /t REG_EXPAND_SZ /d "%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\navnt" /f :tran2 echo 次の処理へ しかし、実行すると、全てTran2へ行く処理になってしまい、Tran1への処理になりません。    ※reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path | findstr /i "C:\Program Files\navnt"  | findstr /i "C:\Program Files\navnt" 箇所の、findstr が上手く機能してないと思ってます。   オプションもいくつか追加して試しましたが、上手くいきませんでした。  (試)  findstr の /c:文字列 を追加  ⇒ 結果、NG ~ | findstr /i /c:"C:\Program Files\navnt" findstrの記述が原因と思いますが、 ●tran1の reg addへ飛ぶ処理の記述をご教授頂けますか? 宜しくお願い致します。

  • レジストリ REG_EXPAND_SZ を作りたい

    レジストリの「REG_EXPAND_SZ」は2ケタ区切りの16進数です。 これを簡単に作る方法ないでしょうか。。。 (できれば、日本語も可) レジストリを開いて、入力したものをエクスポートして文字を確認する方法はなしでお願いします。 ソフトでもサイトでもなんでもいいです。

  • レジストリにSCFH DSFを表示させたいのですが…

    質問があります。どうぞよろしくお願いします。 SCFH DSFをインストールしまして、 レジストリエディタからfps値を変更しようと思っているのですが、 レジストリエディタにSCFHが存在しません。 OSはVistaの32ビットを使っております。 以前はレジストリエディタにもSCFH DSFが登録されてたのですが、 最近PCが支障をきたしまして、HDDの入れ替えとOSの再インストールをしました所、 レジストリの登録ができなくなりました… SCFH DSFをインストールするのに、大変時間がかかりまして、 検索などで色々試行錯誤したのですが、 ・Microsoft Visual C++ 2008 再頒布可能パッケージ ・Microsoft Visual C++ 2005 再頒布可能パッケージ ・ベクターの同じランタイムプログラムをインストール ・実行はすべて管理者として実行 ・システムプロパティ>環境変数>Path、PATHEXTの確認 Pathの変数値は、%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%windir%system32 ・WindowsのUpdate やったのはここら辺なのですが、全てがあっているのかもわかりません… SCFH DSF04とSCFH DSF033の両方を試していたのですが、 04でのインストールは、一瞬コマンドプロンプト画面がでるも、すぐ消えて何も起こりません。 033でのインストールは、 C:¥Windows¥system32>regsvrex32 scfh.ax 'regstrex32'は内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:¥Windows¥system32>pause 続行するには何かのキーを押してください… とコマンドプロンプトで表示されます。 SCFHは使えますが、レジストリに登録されてない状態です。 ご存知の方、心当たりのある方、小さな事でも構いません、 どうか回答お願いします…

  • レジストリのことで質問します。

    今晩は。いつもお世話になっております。 質問は、タイトル通りでレジストリーのキーのことです。 たったいま、何気にレジストリーを見ていたら、「%systemroot%\system32\dumprep 0-u」というキーを発見しました。 発見場所は、HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows Runです。明らかに他のキーとは違うのですが、なぜこのようなキーが存在するのかが分かりません。 どなたかこのキーの意味を教えてください。 また、これはPCにとって有害なものでしょうか? 宜しくお願いいたします。

  • レジストリの値獲得について

    レジストリの値をExcelVBAの変数に代入したいと思ってます。 レジストリエディタにての階層は、 「HKEY_CURRENT_USER」→「Software」→「Autodesk」→「AutoCAD LT」 →「R2000」→「ACLT-1:411」→「FixedProfile」→「General」 (名前)P1、(種類)REG_SZ、(データ)1,1 このとき(名前)を探して(データ)を変数に代入したいと考えています。 ソースとしては、どんな感じになりますでしょうか? 知恵をかして頂ければと思っています。 又、レジストリを参照する際の注意点と言いますか、一歩間違えば とんでしまうと聞いた事ありますので、アドバイスしてありましたら 教えて頂ければと思っています。 よろしくお願いします。 ------------------------------------------------------- Excel2000、AutoCAD LT2000、WindowsXPの環境で行います。

  • ウイルスセキュリティーゼロがインストールできない

    ウイルスセキュリティーゼロをインストールしようとすると、「ドライブが正しくありません」とでます。製品サポートページへ行って、やってみたのですが、レジストリデータの種類というところが例と違っていて、修正できませんREG_EXPAND_SZ でなくてはいけないのに、REG_SZになっています。ここはどうやったら修正できるのでしょうか?