The Old New Thing : What is the format for FirstInstallDateTime on Windows 95?
Windows95のFirstInstallDateTimeのフォーマットはどうなっているのだろうか。
広報:今週末で、サマータイムは、全米のほとんどの州で終了します。
Windows 98/98/Meは、セットアップが実行された日時を、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion下に、FirstInstallDateTimeという名前のバイナリ値で記録している。このデータのフォーマットとは何か。
バイナリ値を、32ビットのリトルエンディアンの値とする。値のフォーマットは、基本的には、DOS date/time formatである。ただし、プログラミングの間違いにより、秒数は、常に0か1である。(大抵は1である)
問題:秒数が0か1(大抵は1である)になってしまう間違いとは何か。
その答え。
まずは、DOS date/timeの値を計算する、正しいコードから。
dwDosTime = ((dwYear & 0x7F) << 25) | ((dwMonth & 0x0F) << 21) | ((dwDay & 0x1F) << 16) | ((dwHours & 0x1F) << 11) | ((dwMinutes & 0x3F) << 5) | ((dwSeconds >> 1) & 0x1F);dwSecondsは、1ビット右にシフトすることによって、2で割っている。もし、「>>」の代わりに、「>」と書いてしまったら、dwSecondsが、1より大きいかどうかを比較するということになる。その結果は、dwSecondsのほとんどの値に対して、trueであるので、1と評価される。
No comments:
Post a Comment