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桁になってるわけです

part2k
お判りいただけるだろうか・ω・?

ちなみに、フォーマットにautofmt.exe を使ってるのだが
32G超えの FAT32フォーマットを強行すると・・
part2k2
こうなる

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対応してるのが分かる。

part2k6
つまりこんなことも可能なのだ。

で色々触ってみて制約があるのが分かった

・1T超える領域のアクセスができない。
・1T超えたクラスタのパーティションが表示されない
・1T超えるパーティションを作ってもフォーマットできない
・SYSTEMパーティションが未フォーマットの場合他のパーティションをフォーマットしようとするとFAT/FAT32でしかフォーマットできない。
※ おそらくセクタ数管理変数が ULONGLONGではなく LONGLONGで定義されてるのだと予想

part2k3
2TのDISK フォーマットしてみたら見たこともないエラーが出てきた。

英語だと

Setup has encountered an error and cannot continue.

Contact technical support for assistance.  The following
status codes will assist them in diagnosing the problem:

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
    Param2      - 2nd informative parameter

    Param3      - 3rd informative parameter

パラメータの意味
BugCode 5は INVALID_PROCESS_ATTACH_ATTEMPT らしい

part2k7
なお、XPや2003の autofmt.exeを流用はできないらしい

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です