w32time (インターネット時刻の同期)
update 2015-05-02

要約

Windows システム起動時に ntpサーバーと時刻を同期させるようにする。
「インターネット時刻」を照会すると同期したことが確認できる。
internet-time.png

ntpサーバーの追加

「インターネット時刻」タブの「設定の変更」ボタンをクリックしてntpサーバーを入力する。
この例では ntp.jst.mfeed.ad.jp を入力している。
※「今すぐ更新」とは sc.exe start w32time task_started コマンドを実行する処理と同じである。

※オプション無しで sc.exe start w32time コマンドを実行すると「Windows Time」サービスが「実行中」のままになる。
※「Windows Time」サービスが「実行中」の状態のため,「設定の変更」ができない場合は、sc.exe stop w32time コマンドを実行してサービスを停止させれば行なうことができる。

ntp-server.png
入力したサーバー情報は下記のレジストリに保存されている。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers
※名前(REG_SZ)は 0(ゼロ)から始まる値である。
ntpサーバーは複数登録しておく。(1つだけにすると,実行時に DLLエラーが発生するという現象が発生した)

※ntp サーバーの例
地理的に一番近いntpサーバーを使用すれば誤差が少ない。

インターネットマルチフィード(MFEED) 時刻情報提供サービス:
http://www.jst.mfeed.ad.jp/index.html

ntp.jst.mfeed.ad.jp

pool.ntp.orgサーバー Japan:
http://www.pool.ntp.org/
0.jp.pool.ntp.org
1.jp.pool.ntp.org
2.jp.pool.ntp.org
3.jp.pool.ntp.org


タスクスケジューラの作成

タスクスケジューラ ライブラリの「Time Synchronization」に「SynchronizeTime」というタスクが準備されている。
このタスクをntpサーバーとの時刻同期に使用する。
task-scheduler.png

「SynchronizeTime」 を右クリック -> プロパティ でタスクを表示する。

「全般」タブ
デフォルトのままでいい。
tab-general.png

「トリガー」タブ
「新規」ボタンをクリックしてトリガーを設定。
tab-trigger1.png
「OK」ボタンをクリック。
トリガーが設定される。
tab-trigger2.png

「操作」タブ
「新規」ボタンをクリックして実行するプログラム/スクリプトを記述する。
tab-action1.png
「OK」ボタンをクリック。
操作内容が設定される。
tab-action2.png

「条件」タブ
タスクを実行する条件を設定する。
tab-condition.png
「OK」ボタンをクリック。

「設定」タブ
tab-setting.png
「OK」ボタンをクリック。

「履歴」タブ
tab-rireki.png
「OK」ボタンをクリック。

以上の設定でシステム スタートアップ時にタスクが実行される。


Windows Time サービス

service1.png
sc.exe start w32time task_started コマンドを実行すると、
サービスの状態は「実行中」になり、しばらくして自動的に停止状態に戻る。
この処理は「インターネット時刻」の設定画面で「今すぐ更新」を実行する処理と同じである。

オプションを付けないで sc.exe start w32time を実行するとサービスの状態は「実行中」のままになる。
service2.png
sc.exe stop w32time を実行するとサービスの状態は停止状態になる。


Windows Time ログ

ログファイルを出力する情報をレジストリに追加する。
レジストリ キー:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
名前:
FileLogName (REG_SZ):
C:\Windows\Temp\w32time.log のようにファイル名をフルpathで指定する。
FileLogSize(REG_DWORD):
10000000 (10進で10MB)のようにファイルサイズをバイトで指定する。
FileLogEntries (REG_SZ):
0-300 のようにログに出力する情報の詳細レベルを指定する。(最高値は 0-300)
log-registry.png

ログファイルの例
150678 02:57:51.9774807s - ---------- Log File Opened -----------------
150678 02:57:51.9774807s - CurSpc:15600100ns  BaseSpc:15600100ns  SyncToCmos:Yes
150678 02:57:51.9774807s - PerfFreq:14318180c/s
150678 02:57:51.9774807s - ReadConfig: Found provider 'NtpClient':
--- 200行程度のログが出力されている。
150678 03:01:06.1371648s - FreeLibrary dll:C:\Windows\system32\w32time.dll
150678 03:01:06.1371648s - SetTimeSlipNotification succeeds with 0x00000000.
150678 03:01:06.1371648s - Exiting ServiceShutdown
150678 03:01:06.1371648s - ---------- Log File Closed -----------------


enf of list