NTSETUPの解析
Windows 2000のNTSETUPを解析してみました
まず改造のために必要なファイルの調査をしてみたところ
・i386\system32\smss.exe (i386\USETUP.EXEと同じ)
・i386\spddlang.sy_ (SPDLANG.SYS)
・i386\setuppdd.sy_ (SETUPDD.SYS)
がコアで
SMSS.EXEにメッセージ情報
SETUPDD.SYSにAPI
が含まれていることが分かりました。
例えば、Windows XPのソース
base\ntsetup\textmode\kernel\spptwrt.c
do { swprintf(SizeBuffer,L"%u", (ULONG)MaxMB); if(!SpGetInput(SpPtnGetSizeCB, SplangGetColumnCount(Buffer) + 5, NextMessageTopLine, 8, // at the max 99,999,999 SizeBuffer, TRUE)) { // // User pressed escape and bailed. // Result = FALSE; break; } |
L00033423: push ebx call SUB_L00023B4C test al,al jz L000332CA push 0000000Ah lea eax,[ebp-38h] push 00000000h push eax call SUB_L0003961A cmp eax,[ebp-1Ch] jc L00033448 cmp eax,[ebp-10h] jbe L00033475 L00033448: push [ebp-10h] lea eax,[ebp-38h] push edi push eax call esi add esp,0000000Ch lea eax,[ebp-38h] push 00000001h push eax push 00000005h lea eax,[ebp-000001C8h] push [L0005D424] push eax call jmp_SPDDLANG.SYS!SplangGetColumnCount add eax,00000005h push eax jmp L00033423 |
Windows 2000だとパーティション割り当てサイズが 5桁になってるわけです
お判りいただけるだろうか・ω・?
ちなみに、フォーマットにautofmt.exe を使ってるのだが
32G超えの FAT32フォーマットを強行すると・・
こうなる
Windows 2000のsetupdd.sysを解析すると
NTSTATUS SpRunAutoFormat( IN HANDLE MasterSifHandle, IN PWSTR RegionDescription, IN PDISK_REGION PartitionRegion, IN ULONG FilesystemType, IN BOOLEAN QuickFormat, IN DWORD ClusterSize, IN PWSTR SetupSourceDevicePath, IN PWSTR DirectoryOnSourceDevice ) |
実は QuickFormat対応してるのが分かる。
つまりこんなことも可能なのだ。
で色々触ってみて制約があるのが分かった
・1T超える領域のアクセスができない。
・1T超えたクラスタのパーティションが表示されない
・1T超えるパーティションを作ってもフォーマットできない
・SYSTEMパーティションが未フォーマットの場合他のパーティションをフォーマットしようとするとFAT/FAT32でしかフォーマットできない。
※ おそらくセクタ数管理変数が ULONGLONGではなく LONGLONGで定義されてるのだと予想
2TのDISK フォーマットしてみたら見たこともないエラーが出てきた。
英語だと
Setup has encountered an error and cannot continue.
Contact technical support for assistance. The following 0x5, 0x01, 0x1, 0 Setup cannot continue. Shut down or restart your computer. |
こんな感じになる(SP_SCRN_FATAL_SETUP_ERROR)
BugCode - Bugcheck code number as defined in spmisc.h and documented in ntos\nls\bugcodes.txt Param1 - 1st informative parameter Param3 - 3rd informative parameter |
パラメータの意味
BugCode 5は INVALID_PROCESS_ATTACH_ATTEMPT らしい
なお、XPや2003の autofmt.exeを流用はできないらしい
Comments