- ベストアンサー
BIOSの時刻補正
Windowsのシャットダウン時にWindowsの時刻をBIOSに書き込むことは可能でしょうか? Windowsの時刻は、NTPサーバに同期 ↓ Windowsシャットダウン処理 ↓ シャットダウン前にWindows時刻をBIOSに書込処理 ↓ シャットダウン これで次回起動時に大幅に時刻が狂わないようにしたいのですが、実現可能な方法はありますでしょうか? よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
getTimeOfDay, setTimeOfDay 関数が対応しているようです。 (昔関連セクションにいたのですが、詳細は記憶していません) OS立上げ時にCMOS RTCを読み込み、OS内のsystem timerは設定され、その後system timerはRTCとは無関係に進んでいくと思います。 定期的に(1週間毎に?)network time? とsystem timerの同期(time差があった場合、timer IT:10.0ms を9.9ms/10.1ms周期に変更してゆっくりと同期化を図る等の処置を取りながら)、RTC value再設定がなされ、その間の差はあまり無いはずです。 ユーザーレベルからのファイル書き込み要求等が終了し、シャットダウン直前にsetTimeOfDay要求を出すようにする必要があると思われます。 ただし、CMOS RTCに設定できるのは秒単位と思います。 yymmddhhmmssの形でサポートしているはずです。 supervisor level program に公開されているはずです。 OS manualに載っていると思いますので参照してください。 google codesearchで関連サブルーチンが見つかると思います。 http://www.google.com/codesearch/advanced_code_search
その他の回答 (3)
- ninoue
- ベストアンサー率52% (1288/2437)
"Windows OS NTP" でサーチしたら次の資料が見つかりました。 http://www.atmarkit.co.jp/fwin2k/operation/winntp01/winntp01_01.html Windowsネットワーク時刻同期の基礎とノウハウ registry内のNTP同期周期設定情報を7日からもっと短い周期とする事で可能のようです。
お礼
ninoue様ありがとうございました。 参考にさせて頂きます。
- Lchan0211
- ベストアンサー率64% (239/371)
NTPで取得した時刻は、そのままBIOS時刻(RTC)に反映されますし、 RTCは、PC電源ON/OFFに関わらずバックアップ電池により (ほぼ)正しい時刻を刻みます。 このため、Windowsが表示している時刻とBIOS時刻は、 普通何もしなくても一致しているはずです。 再起動のたびに時刻が狂うのであれば、マザーボードの バックアップ電池切れ等によるRTC障害を疑う必要が あると思います。 とりあえず電池チェックしてみることをお勧めします。
お礼
ご回答ありがとうございます。 BIOSの電池は問題ないようです。 Windowsのw32tmにて時刻同期をした際、モードによって、レジストリに 設定したある範囲(当方の場合、数百msとしております)を超えない限 り、RTCへの書き込みを行わないようです。 もう少し、調べてみます。
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは メッセージからシャットダウン時にBIOSに書き込むと云うことは(書き込めたと仮定して)次回起動時に前回書き込んだ過去の時刻を読み込むことになりいつも遅れている状態???になってしまいます。 このような状態でも現状よりマシと云うことならば、マザーボードのバックアップ電池やらの障害を疑った方がよいのでは? 通常、そのように大幅に狂うことはありません(もともとAT互換機系の設計のハードでは正確ではないけれど)。 もし補正をしたいなら起動後に基準時刻サーバーから時刻を読みとって設定することを自動でやるにはどうしたらよいか?を考えた方がよいと思いますよ。
補足
A88No8様 早速のご回答ありがとうございます。 > メッセージからシャットダウン時にBIOSに書き込むと云うことは > (書き込めたと仮定して)次回起動時に前回書き込んだ過去の時刻を > 読み込むことになりいつも遅れている状態???になってしまいます。 →BIOSに時刻を書き込んだ後、BIOSの時刻は、バックアップ電池にて、 その時刻から時刻を進めてくれており、次回起動時には、かなり正 確な現在時刻で起動できるのではないでしょうか?(通常は、シャッ トダウンから再起動までは、せいぜい10分以内の間隔です) > もし補正をしたいなら起動後に基準時刻サーバーから時刻を読み > とって設定することを自動でやるにはどうしたらよいか?を考えた方 > がよいと思いますよ。 →最初は、そのように起動時にNTPサーバに同期して起動するように 検討しておりましたが、なかなか全てのアプリやサービスの起動 する前にリンクが確立し、NTPサーバとの同期を確立させるコント ロールをするのが難しく、シャットダウン時にBIOSの時刻を書き 込めれば一番良いと思い、質問させて頂きました。 シャットダウン時にWindowsの時刻をBIOSの時刻に書き込む(更新 する)方法はありませんでしょうか?
お礼
ご回答ありがとうございます。 setTimeOfDay関数について調べてみたいと思います。 プログラムではなく、レジストリへの設定やバッチファイル処理にて RTCにWindowsの時刻をRTCに書き込むようなことはできませんでしょう か?