2009-10-31

Windows 95のFirstInstallDateTimeのフォーマット

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である)になってしまう間違いとは何か。

追記:Falconが最初に正しい答えを出した

その答え。

まずは、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

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.