• ベストアンサー

レジストリを書き換えるといつHDDに保存されるのでしょうか

WindowsXP Professionalで、レジストリの値を 書き換えると、メモリ上で書き換えられるだけ だと思うのですが、HDDに保存されるのはどういう タイミングなのでしょうか。 XPがハングした場合、その直前に自作アプリで書き 換えたレジストリの値がHDDに保存されないときが あり、レジストリの値とDBの値が一致しなくなる ため、レジストリを書き換えると即時にHDDに保存 できる方法を知りたいのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.8

Windowsは「起動時あるいはログオン時にレジストリデータの一時コピーを作成し、ログオフ時あるいはシャットダウン時に一時コピーの内容を書き戻す」といった処理を行いません。レジストリデータの更新は、それがレジストリファイルに由来するものであれば、レジストリファイルの更新に直結します。 回答No.2の「5秒間待ってからの書き出し処理」ではHDD上にあるレジストリファイルの内容が更新され、処理が完了するとレジストリファイルの内容は更新済みレジストリデータと一致するものになります。 またこの処理が途中で中断した場合、次回再起動時にレジストリデータは「書き出し処理の開始前の状態」か、あるいは「書き出し処理が完了した場合の状態」のいずれかに修復されます。どちらになるかは、どこまで書き出し処理が進んでいたかによって決まります。(前者をロールバック処理、後者をロールフォワード処理といい、データベースの一貫性を保証するための標準的な処理です。) 実際の処理内容の詳細は回答No.2に挙げた書籍に記載があり、amazon.comのサイト上で実際に読むこともできます。手順は以下のとおり。 1. http://www.amazon.com/gp/product/0735619174 を開く。 2. 書籍の内容を「stabke storage」で検索。 3. 検索結果から290ページ(「on Page 209」)を選択。 ここで表示される290ページの「Stable Storage」の見出し以下、次ページまでの1セクションがレジストリデータ更新時のファイル更新処理の内容です。 もちろん、記述に誤りがあって実は書き戻し用一時コピーを持っているという可能性もなくはありませんが・・・

googooneruneru
質問者

お礼

ありがとうございました。大変参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (8)

  • dell_OK
  • ベストアンサー率13% (742/5654)
回答No.9

半分は想像で投稿していましたので、解決への遠回りと混乱を招いていたら申し訳ございません。 そこで、私の投稿がいかなるものか、実践してみました。 簡単な方法ですが、レジストリエディタで「HKEY_CURRENT_USER」を書き換えた後、強制的に電源を切断してみました。 状況からすると自作アプリから書き換えて5秒以上経っていると思われますので、 こちらの試験でも5秒以上経ってから電源を切断しました。 起動して「HKEY_CURRENT_USER」の内容を確認したところ、正しく書き換えられていましたので、 私が思っていた「一時エリア」の展開と退避という処理はなさそうです。 ただ、レジストリエディタが、自作アプリと同様の動作をしているかどうかはわかりません。 結果、ANo.4でxcrOSgS2wYさんが言われたとおり「妙」としか言えなくなりました。 xcrOSgS2wYさんのおかげで私も勉強になりました。 ありがとうございます。 あと、私の勘違いと言うか、想像をたくましくさせたのには、理由がありました。 私のパソコンで必ずといっていいほど、終了時にイベントログがエラーを残しています。 ---- イベント ソース: Userenv ユーザー: NT AUTHORITY\SYSTEM コンピュータ: xxxxxxxx(コンピュータ名) 説明: ログオフ時にアプリケーションまたはサービスがレジストリをまだ使用している間に、Windows はユーザー xxxxxxxx(コンピュータ名)\yyyyyyyy(ユーザー名) のレジストリを保存しました。 ユーザーのレジストリによって使用されたメモリは解放されていません。 レジストリは使用されなくなったときにアンロードされます。 ユーザー アカウントとしてサービスを実行していることが原因と考えられます。 LocalService または NetworkService アカウントでサービスを構成してみてください。 ---- これで、ログオフ時やWindows終了時に何かしらレジストリを操作しているのではないかと、思ったわけです。 しているのは確かだと思いますが、今回のようなことに関係するエリアではない可能性の方が高いですね。

全文を見る
すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (742/5654)
回答No.7

ANo.5の補足です。 ANo.4のxcrOSgS2wYさんが書き込まれている最中に私も作文していたので気付きませんでした。 ANo.6でのフォローは、私の書き込みに対するものだと思いますので、ありがとうございます。 レジストリはキャッシュを介さないとの事ですが、私もそうは思いつつ投稿しました。 ハングアップした後の処理をどうされたかが不明だったので、 強制終了(電源を切ったかリセット)したものと判断したために投稿した次第です。 補足いたしますと、 キャッシュの有無にかかわらず、レジストリが保存されるのは一時的なエリアの書き込み時で、強制終了した場合は、完全なレジストリにはならないと思ったのです。 一時的なエリアと言うのは、「HKEY_CURRENT_USER」の事で、これは現在ログインしているユーザーの情報だと思います。 これとは別に、全ユーザーの情報(ログイン時に読み込まれ「HKEY_CURRENT_USER」化される)があり、そこに書き込まれるのはログオフ時だと思っていました。 レジストリへの書き込みが発生した場合にキャッシュを介していないとして、 「HKEY_CURRENT_USER」だけではなく、私が思っている全ユーザーの情報のエリアにも書き込まれていれば、 このような現象は起こらないと考えたのです。 前提として、 自作アプリが書き換えているのは「HKEY_CURRENT_USER」でるのと、 強制終了した、と言う状況下での話です。

全文を見る
すると、全ての回答が全文表示されます。
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.6

回答No.4の補足です。 「レジストリデータのHDDへの書き込みはバッファを介さない」とは「書き込みキャッシュを介さない」という意味です。念のため。

全文を見る
すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (742/5654)
回答No.5

これでできるかどうかわかりませんが、 時間的余裕があれば、一度試してみてください。 「デバイスマネージャ」で、 コンピュータのツリーの中にある「ディスクドライブ」から、 レジストリファイルのあるHDDを選択して、 プロパティを開きます。 「ポリシー」タブにある、 「ディスクの書き込みキャッシュを有効にする」のチェックをはずします。 そこにある注意書きや、「?」ボタンでのヘルプにあるように、 チェックが付いていると、すぐにはHDDに書き込まれず、 キャッシュに書き込まれるため、 万が一の時にはデータが壊れる可能性があります。 チェックをはずすと、キャッシュを使わなくなるので、 いくらかは安全になると思われます。 おそらくですが、DBの方は、このチェックにかかわらず、 そのシステムから、直に書き込んでいるか、 キャッシュをすぐにパスして書き込まれるようにかになっているのでしょう。 それで、不一致が発生するのかも知れません。 これで、書き込みの安全性は上がりますが、 書き込みのパフォーマンスは下がります。 どれくらい下がるのかを試されてみて、 かつ、安全なのかも確認された上で運用を考えてみてください。 レジストリに書き込まれるタイミングですが、 ユーザー情報とコンピュータ情報とあって、 常時書き込まれているのは一時的なエリアではないかと思われます。 ユーザー情報は、そのユーザーがログオフした時、 コンピュータ情報は、そのコンピュータが終了した時に、 本来のエリア、おそらく起動時に読み込まれるエリアへ、 書き戻しているではないかと思われます。 いずれにしても、正常終了しない限り、レジストリの内容は保障されないことになります。

googooneruneru
質問者

お礼

ありがとうございました。参考になりました。

全文を見る
すると、全ての回答が全文表示されます。
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.4

それは妙ですね。 レジストリデータのHDDへの書き込みはバッファを介さないので、5秒より古いデータが残っていることはないのですが。 むしろ、DBの値の更新トランザクションが完全に完了しないうちにハングアップしており、そのせいで再起動時にDBの内容がロールバックされて不整合を生じている可能性のほうが高いように思われます。 レジストリの値とDBの値が一致しないとき、どちらの値が戻ってしまっているのか、いちど両方ともタイムスタンプを入れて比較してみることをお勧めします。(書き込むデータに時刻を追加し、更新時に、更新時点の時刻も同時に書き込むという意味です。)

全文を見る
すると、全ての回答が全文表示されます。
  • thanks39
  • ベストアンサー率61% (1189/1944)
回答No.3

書き換える場所によって方法が違うと思いますけど。

全文を見る
すると、全ての回答が全文表示されます。
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

レジストリの値の書き換えが発生してから5秒間待ち、その間のレジストリの値の変更内容がまとめてHDDに書き出されます。 Windows Server 2003ではこの「5秒」という値をレジストリ設定で変更可能です。Windows XPではおそらく変更できません。 (Microsoft Windows Inteernals, Fourth Edition / Microsoft Pressより。)

googooneruneru
質問者

お礼

回答ありがとうございます。 5秒後にかかれるのですか。 ただ、問題が起きた際には、レジストリを書き換え後 20時間してハングし、再起動したところ、 レジストリの値がもとに戻っていたのです。

全文を見る
すると、全ての回答が全文表示されます。
  • 8086
  • ベストアンサー率22% (118/520)
回答No.1

シャットダウンまたは再起動をするときに「設定を保存しています」と出ますよね。このときだと思います。 レジストリではなく何らかの設定ファイルにでも書き出せば不整合は起きないのでは。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • レジストリの変更が保存されない

    レジストリの変更が保存されず困っています。色々調べたり、考えつく限りのことはやってみたのですが、全く原因が分からず途方に暮れています。よろしくお願いします。 困っている点: レジストリの値を変更しても再起動したら戻ってしまう。 やりたいこと: 「お気に入り」フォルダの場所を変更したい、他カスタマイズ色々 方法: regeditで「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders」の中の「Favorites」キーの中身を、新しく「お気に入り」にしたいフォルダのアドレスに書き換える 環境: WindowsXP Home、Athron3G、メモリ512M、アンチウィルスソフトNorton、購入したばかりのeMachinesのPCです。

  • レジストリーがnotepadに変更されました

    以前キンタマ ウイルス(トロイの木馬)に感染し 解る範囲でレジストリ関係を削除したのですが、 2点だけ解決出来ません。 (250GB再インストールできれば、したくないので) お知恵をお貸し下さい。 1.レジストリエディタを開こうとするとメモ帳が開く 2.システムの復元機能を無効にする 現在は感染は有りません 簡単な環境 WindowsXP Professional Service Pack 2 (5.1 ビルド 2600) DirectX バージョン:9.0c メモリ:1024MB RAM Windows系の更新は最新です 自作機 宜しくお願い申し上げます。

  • HDDに保存されているメルドリストを出したい

    使っていたPC(自作・WindowsXP)のマザーボードがこわれて動かなくなってしまいました。そこで、息子のPCを便宜的に共有しようとしています。こわれたPCのHDDに保存されているメールアドレスを息子のPCで見ようと、HDDを息子のPCにつないだのですが、息子のPCのOEのアドレス帳では見られません(当然ですネ)。(ほかのファイル類は「リムーバブルドライブ」として認識され、開けることができます) どうやれば、HDDに保存されているアドレス帳を息子のPCで見ることができるでしょうか?

  • レジストリを書き換えても戻ってしまう

    Officeで新規ドキュメントを作成すると、 「作業ファイルを作成できません。環境変数 TEMP の設定を確認してください。」 というエラーが出たり、また、Excelで図を挿入しようとすると、 「このファイルのインポート中にエラーが発生しました」 というエラーが出てしまいます。 http://outlooknavi.net/article/197515803.html この記事を見てレジストリを見てみると、 Cacheの値が E:\Temporary Internet Files という存在しないパスが参照されていました。 これが原因かと思い、この記事の通りにレジストリの値を書き換えてみたのですが、 PCを再起動するとレジストリが元の値に戻ってしまいます。 インターネットオプションからTemporary Internet Filesのファイルを参照することも出来ない状態です。 (ファイルを開くボタンを押しても,反応が無い) これ以上はいくら調べても原因が特定できず、困っています。 どなたか解決方法をご存じないでしょうか?よろしくお願いします。 当方のPCの使用環境は OS:WindowsXP Professional SP3 CPU:Pentium DualCore E5200 RAM:DDR2 2.5GB OFFICE2007 です。

  • 回復コンソールからのレジストリの戻し方

    レジストリのバックアップファイルを戻す方法を教えてください。 ソースネクストのウイルスセキュリティーのファイアウォール機能の不具合で勝手に訳のわからないIPアドレス以外使えない設定がセットされ、ネットワークが使えなくなりました。 しかし、最初不具合の原因がわからずに、過去に保存したレジストリの戻し(REGEDITでの読み込み)を実施し再起動したところ、起動不能になりました。 現環境を残したまま、新しいOSのインストールを行い復旧していますが、すべての環境を復元までは行っていません。ウイルスセキュリティーの不具合の回避方法がわかったので、起動できなくなった直前に使っていたレジストリのバックアップからレジストリを戻せたらと考えています。回復コンソールから手動作業でどこかの場所にコピーする方法があったと思うのですが思い出せません。 パソコンの環境 WINDOWS2000 SP4 メモリ 1G HDD 80×2 起動不能直前のレジストリすべてのバックアップファイルはあります。REGEDITのレジストリの書き出し 回復コンソールから作業するか、新しい環境のWIN2000上から作業ができます。 新しい環境とは、WIN2000のインストールフォルダをWINNT32と変えてインストールしています。回復コンソールでWINNT内のREPAIRからのレジストリの戻しも行いましたがだめです。 回答よろしくお願いします。

  • レジストリサイズの上限について

    社内LAN環境で”windows2000Pro”のパソコンからwindows98seのパソコンの共有ホルダへアクセスしエクセルデータを開こうとすると”windows2000Pro”のパソコン側に ------- メモリまたはディスクの容量が不足しているため、ドキュメントを開いたり保存したりできません。 ・不要なブックやプログラムを閉じて、メモリの空き容量を増やしください。 ・ディスクに保存されている不要なファイルを削除して、ディスクの空で容量を増やしてみてください。 -------- とアラートが表示されます。 ハードディスクの容量は30GB以上あいてますし、常駐しているソフトの起動を止め、タスクトレイには何もない状態にしても、状況が改善されない為、マイコンピュータ>プロパティ>詳細>パフォーマンスオプション>・・・>レジストリサイズの変更をした結果問題なく接続できるようになりました。 変更前の最大レジストリサイズは、100MB(現在レジ...37MB)でしたが変更後は最大レジストリサイズを50BMとしてます。レジストリサイズを小さくしてうまくいったのですが、レジストリサイズが大きすぎる事による問題ってあるのでしょか?ネットワークの共有ファイルはどのようなメモリ管理がされるのでしょうか? また、最大レジストリサイズの適正な値はどのように決定すればいいでしょうか? *ご存知の方よろしくお願いします。m(..)m

  • レジストリーをいじるようなソフトについて

    Windows10 64bit HOME 20H2をインストールしたPCにおいて 現在クリーンインストール後でこれからアプリをインストールしていこうという段階ですが(イメージバックアップを保存していなかったためOSがクラッシュして仕方がなく修復しています)レジストリーに触れてしまう、CCクリーナーやIobit社のUninstallerPRO10については PCが完成形に達したのち必要とあればインストールするのは如何でしょうか?例えば動作が重くてPCがサクサク動かない時など。スペックは十分高い自作PCです。アドバイスください。

  • ファイルの関連付けをレジストリで行いたい

    HDDイメージ保存ソフトでバックアップリストアを 行ったところ、ファイルの関連付けの一部が 正しく復元されていない状況です。 *何度かリストアを繰り返しても現象同じです。 フォルダオプションから関連付けアプリとして 登録済みアプリは選択できますが、 ”参照”でアプリを選んでも登録できず、 それゆえ関連付けできません。 このフォルダオプションの誤動作を修正したい のですが、目的は関連付けですので直接、 レジストリを操作して関連付けでも良いです。 レジストリエディタやフリーのレジストリ 管理ソフトなどで関連付けが行えればよいと 考えています。 Windows XP sp2の環境です。 アドバイスをいただけると幸いです。

  • HDDをフォーマットできません

    自作PCが完成しました 500GBのHDDの150GBにWindowsXP Professionalをインストールして順調に動いています OSはCドライブです。 Dドライブにアクセスすると「ドライブDのディスクはフォーマットされていません。今すぐフォーマットしますか?」とメッセージがでます。  そういえばXPをインストールするときDドライブをフォーマットしていませんでした。 そこで「Y」を入力しましたがフォーマットできません。 4時間もかかりました。 どうすればいいでしょうか?? HDDをチェックするソフト等も合わせて教えてください。

  • レジストリ関係のツールを探しております。

    レジストリを監視し、書き換えや新たな値の追加などが行われる際、 書き換えを行う以前にユーザ側に許可非許可などの確認、ダイアログを表示するようなツールを探しています。 その際アプリごとの設定や、監視範囲の指定など、フィルタをかけれると尚良いですね。 レジストリの監視を行いログを保存するツールは Regmon や Process Monitor などあるようですが、 どのソフトも上記の様な書き換えそのものをブロックするような機能は無いと思いました。 何か心当たりのある方はフリーシェア問わずツール名など教えていただけると幸いです。 又、ソフトウェアとしてではなく何らかの方法で 上記のような効能を得られるのであればその方法などでも構いません。 よろしくお願いいたします。