このページの本文へ

前へ 1 2 3 4 5 6 7 8 9 10 11 11 次へ

噂のWindows XP最新情報 ~ Microsoft社のWindows Product Activationの内容(下)

2001年07月20日 09時53分更新

文● フーリー・ライセンスト社/著、吉川邦夫/訳

  • この記事をはてなブックマークに追加
  • 本文印刷

上に述べたように、インストレーションIDにリンクされるハードウェア構成は、2個のダブルワード、H1およびH2によって表現される。

ビットフィールド

このために、この2つのダブルワードは12個のビットフィールドに区分される。コンピュータのハードウェアとビットフィールドとの関係を、次の表で示す。

ダブルワード オフセット ビット長 ビットフィールドの値を決めるもの
H1 0 10 システムボリュームの、ボリュームシリアル番号文字列
H1 10 10 ネットワークアダプタのMACアドレス文字列
H1 20 7 CD-ROMドライブのハードウェア識別文字列
H1 27 5 グラフィックアダプタのハードウェア識別文字列
H2 0 3 未使用、001に固定
H2 3 6 CPUのシリアル番号文字列
H2 9 7 HDDのハードウェア識別文字列
H2 16 5 SCSIホストアダプタのハードウェア識別文字列
H2 21 4 IDEコントローラのハードウェア識別文字列
H2 25 3 プロセッサモデルの文字列
H2 28 3 RAMサイズ
H2 31 1 1=ドッキング可能
0=ドッキング不可能

H2のBit 31は、これらのビットフィールドが、ドッキングステーションをサポートするノート型コンピュータのものかどうかを示す。もしドッキングが可能であれば、アクティベーション機構は、将来のハードウェア変更に関して、より寛容なものとなる。つまり、ノートPCをドッキングステーションに差し込むことによって、そのハードウェア構成が変わる可能性が高いだろう、という意味だ(たとえばドッキングステーションに組み込まれているSCSIホストアダプタが使えるようになるかもしれない)。

H2のBit 2から0までは未使用であり、常に001がセットされる。

残りの10個のビットフィールドに対応するハードウェアコンポネントが存在する場合、そのコンポネントに対応するビットフィールドには、そのコンポネントを記述する0以外の値が入る。0の値は、そのハードウェアコンポネントが存在しないことを示す。

すべてのハードウェアコンポネントは、レジストリから得られるハードウェア識別文字列によって、識別される。これらの文字列をハッシュすることにより、対応するビットフィールドの値が得られる。

ハッシュ

ハッシュ結果は、ハードウェア識別文字列を、MD5メッセージダイジェストアルゴリズムに入力し、その結果として得られるメッセージダイジェストの、あらかじめ決められた位置から、ビットフィールドに必要な数のビットを抽出することによって得られる。ビットフィールドごとに、それぞれ別の位置が決められている。さらに、ハッシュ結果が0となるのを防ぐために、次の計算が行なわれる。

Hash = (Hash % BitFieldMax) + 1

ここで、BitFieldMaxは、そのビットフィールドに格納できる最大の値であり(たとえば10ビットのビットフィールドならば1023)、'x % y'は、xをyで割る除算の剰余を示す。この結果は、1からBitFieldM axまでの範囲の値である。こうして得られた値が、それぞれのビットフィールドに格納される。

RAM ビットフィールド

オペレーティングシステムが利用可能なRAMの量に関するビットフィールドは、別の方法で計算される。次の表で示すように、おおよそのRAM容量が7種類の値で指定される。

利用可能なRAMの量
0 (使用されないビットフィールド)
1 32MB未満
2 32MBから63MBまで
3 64MBから127MBまで
4 128MBから255MBまで
5 256MBから511MBまで
6 512MBから1023MBまで
7 1024MB以上

ここで重要なことは、RAM容量がGlobalMemoryStatus()関数の呼び出しによって決められるという点であり、この関数が報告する値は、インストールされているRAMの物理的な容量よりも数百キロバイト少ない。したがって、128 MBのRAMは、「64 MBから127 MBまで」に分類されるのが典型的である。

実例

一つ実例を見ることにしよう。我々のテストシステムの一つは、ハードウェア情報が次の8バイトで構成される。

0xC5 0x95 0x12 0xAC 0x01 0x6E 0x2C 0x32

これらのバイトをH1とH2に変換すると、次の値が得られる。

H1 = 0xAC1295C5、H2 = 0x322C6E01

このH1とH2を分割すると、次の表に示す各ビットフィールドの値が得られる。この表には、それぞれの値の元になった情報も記入してある。

ダブルワードとオフセット 元になった情報
H10 0x1C5 '1234-ABCD'
H110 0x0A5 '00C0DF089E44'
H120 0x37 'SCSI\CDROMPLEXTOR_CD-ROM_PX-32TS__1.01'
H127 0x15 'PCI\VEN_102B&DEV_0519&SUBSYS_00000000&REV_01'
H20 0x1 (未使用、常に0x1)
H23 0x00 (CPUシリアル番号なし)
H29 0x37 'SCSI\DISKIBM_____DCAS-34330______S65A'
H216 0x0C 'PCI\VEN_9004&DEV_7178&SUBSYS_00000000&REV_03'
H221 0x1 'PCI\VEN_8086&DEV_7111&SUBSYS_00000000&REV_01'
H225 0x1 'GenuineIntelFamily6Model3'
H228 0x3 (システムのRAMは128MB)
H231 0x0 (システムはドッキングできない)

前へ 1 2 3 4 5 6 7 8 9 10 11 11 次へ

カテゴリートップへ

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン