Windows 2000がWindows 7のアップグレード対象から外された理由
Windows 2000は元々Windows 7のライセンスアップグレード対象に含まれていて、当初 Microsoft のショップの先行予約コーナーにも 2000が記載されていました
KDWや拡張カーネルの Windows 2000で Windows 7のインストーラーを動かすと
ブートパーティションに730M以上あることを認識できなくてとまってしまいます。
OutputDebugString の文字を見てみたところ
INFO GetSystemDiskNTPath: Found system disk at [\Device\Harddisk0\DR0].
INFO GetSystemDiskNumber: Disk [0] is the system disk.
INFO LogVolumeSummary: Found volume [\\?\Volume{408d2567-bf19-11dd-b092-806d6172696f}\]
INFO LogVolumeSummary: - Free bytes = 14877614080 bytes
INFO LogVolumeSummary: - Retained = no
INFO LogVolumeSummary: - FVEncrypted = no
INFO LogVolumeSummary: - FVEDisabled = no
どうも、Retainedが 0だと容量にかかわらずはじいてるみたいなので更に解析
push edi push esi lea eax,[ebp-04h] push eax push esi push esi push esi push esi push 00560028h push [ebp+08h] call [DeviceIoControl] |
するとココでエラー
#define IOCTL_VOLUME_BASE 0x00000056L #define METHOD_BUFFERED 0 #define METHOD_OUT_DIRECT 2 #define FILE_ANY_ACCESS 0 #define FILE_READ_ACCESS ( 0x0001 ) #if (NTDDI_VERSION >= 0x05010000) |
どういうことかというと、ドライブが固定ディスクのパーティションかどうかの判定に常に失敗して、ドライブを認識できないバグ。
他の関数は置き換え可能だけど、ここはWindows 2000向けにコンパイルした場合動作しないので、このコードの見落としが、どうしてもWindows 2000向けにインストーラーを作れなくて対象から外したんじゃないかなと思ってる(笑)
Comments