
2026/08/16 5:37
知られざるwinstart.bat バッチファイル
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
まとめ:
ユーザーモードのカーネルが起動する直前の「システム仮想マシン」内で実行され、
Command.com の後に実モードでより早期に動作する AUTOEXEC.BAT とは異なり、C:\WINDOWS\WINSTART.BAT は Windows 製プログラム固有の TSR をインストールします。このメカニズムは Windows 3.1(おそらく 3.0 でも)に存在し、スタンドアロンの MS-DOS アプリケーションによってこれらの TSR をスキップできるようにすることで、通常メモリーを解放し、複数の仮想マシンに対応できないドライバとの競合を防ぎます。この機能については Windows 3.1 リソースキットで文書化されており、「そのような機能が Windows 95 に固有である」という誤解を正しています。ブートプロセスは MS-DOS を経て、仮想マシンマネージャーおよびシステム VM の初期化、そして保護モードの GUI へと進行します。図から示されるように、Command.com は独立した GUI 作成用 VM で動作し、WINSTART.BAT が読み込む TSR は含まれません。図のように、このアーキテクチャでは、ある OS を別の OS の「上」にロードする仕組みは、「映画スタジオのセットの半ば途中からブロックの中に歩いて入る」と説明されます。(注:著者レイモンドは Windows 開発に 30 年以上従事し、2003 年に The Old New Thing を設立、2007 年に Addison Wesley より書籍を出版しています。)本文
リーダー・オットル・オサン:C:\WINDOWS\WINSTART.BAT の用途と実行タイミング
リーディング・オットル・オサンは、
C:\AUTOEXEC.BAT と比較して C:\WINDOWS\WINSTART.BAT の使われるケースと、システム起動時の正確な実行タイミングについて解説しています。
概要:Windows 95 の起動フロー
Windows 95 では、Windows ディレクトリ内に
winstart.bat ファイルを作成可能でした。起動処理の主要なフローは以下の通りです。
- 初期化: 仮想マシンマネージャーが初期化され、「システム仮想マシン」(すべての Windows プログラムが動作する環境)が作成されます。
- 実行タイミング: ユーザーモードカーネルを実行する直前、仮想マシンマネージャーが存在する場合に限り
が実行されます。winstart.bat
起動シーケンスのステップ解説
起動プロセスは以下のように段階的に進行します(注:図における詳細な項目やスケールは議論に関連しないため省略・近似表示となっています)。
1. MS-DOS のブート
最初に MS-DOS をブートし、コマンドプロンプトを表示します。
- メモリ状態:
- Stuff: 低アドレス領域に存在する要素の集まり(中断ベクタテーブル、BIOS データなど)。
- TSR1:
でインストールされた TSR(Terminator and Stay Resident)プログラム。AUTOEXEC.BAT - MS-DOS: リアルモード環境で動作。
2. 仮想マシンマネージャーによる制御移管
Windows が起動し、仮想マシンマネージャーが初期化されます。システムは保護モードで動作し、v86 モード中の仮想マシンを管理します。
- メモリ状態の変化:
- v86 モード: 「Stuff」「TSR1」「(未使用)」「MS-DOS」を含みます。
- リング 0: 環境を制御する仮想マシンマネージャー。
- 重要な変化: ファイルシステムへの責任が仮想マシンマネージャーに移り、MS-DOS 内のリアルモードファイルシステムが停止します(図中の「MS-DOS」は線引き表示されます)。
3. WINSTART.BAT の実行
この時点で、仮想マシンマネージャーは仮想マシン内部で
winstart.bat を実行します。
- 効果: 別の TSR(TSR2)をインストールする可能性があります。
- メモリ状態: 「Stuff」「TSR1」「TSR2」が v86 モードに追加されます。
4. ユーザーモードカーネルの起動
Windows アプリケーションを管理するユーザーモードカーネルが起動します。これは仮想マシンを保護モードに切り替え、「一般の方がイメージする Windows」を実行させます。
- メモリ状態:
- v86 モード: 「Stuff」「TSR1」「TSR2」が維持されます。
- プロテクションモード(リング 3): GUI 関連の要素が増加。
- リング 0: 仮想マシンマネージャー。
5. GUI からコマンドプロンプトの起動
Windows のグラフィカルインターフェース(GUI)からコマンドプロンプトが起動されます。これは新たな仮想マシンの作成を意味します。
- メモリ状態: 既存の v86 モード環境(Stuff, TSR1, TSR2)は維持されたまま、新しい処理領域が確保されます。
- リング 3: GUI 要素。
- リング 0: 仮想マシンマネージャー。
6. 新しい仮想マシン内での COMMAND.COM の実行
COMMAND.COM が実行される新しい仮想マシンは、Windows 起動時点のシステムの複製です。
- メモリ構成のポイント:
- 含まれるもの:
由来の TSR1。AUTOEXEC.BAT - 含まれないもの:
由来の TSR2(この新しい仮想マシンにはコピーされません)。WINSTART.BAT
- 含まれるもの:
- 例外ケース: コマンドプロンプトの仮想マシン内で TSR をインストールした場合のみ、TSR2 が追加されます。
WINSTART.BAT の目的とリバースエンジニアリング
構成要素の接続が明らかになったことで、
winstart.bat の真の目的を逆手に進めます。
意図された目的
Windows アプリケーションにのみ適用されるような TSR プログラムをインストールすることです。
具体的なユースケース:
- ネットワークドライバ: Windows プログラムでのみサポートが必要な場合、このファイルでインストールします。
- メモリ効率化: MS-DOS プログラムはネットワーク機能が必要ないため、グローバルにインストールせず、このオプションを選ぶことで従来のメモリを MS-DOS プログラムのために解放します。
- 仮想マシン制約: ドライバが複数の仮想マシンでの動作を支持しない場合、システム仮想マシンのみで取り扱います。
歴史的背景の補足
多くの人がこれを「Windows 95 の機能」と認識していますが、実際にはWindows 3.1(あるいは Windows 3.0)の機能でした。『Windows 3.1 リソースキット』第 263 ページに、TSR を起動する 3 つの方法と、各仮想マシンでの可視性を示す表が記載されています。
TSR の可視性比較表
| TSR が読み込まれる場所 | Windows 内で TSR は可視か? | 仮想マシン内で TSR は可視か? |
|---|---|---|
MS-DOS () から | はい | はい(すべての仮想マシン) |
| WINSTART.BAT から | はい | いいえ |
| 単一の仮想マシン内 | いいえ | その仮想マシンのみ |
注釈: ドキュメントでは、「仮想マシン」という用語は Windows を実行する環境ではなく、非-Windows 系(MS-DOS)の仮想マシンにのみ適用される慣例を採用しています。システム自体の実行環境については「Windows」と呼ばれています。
フッター注釈
¹ メタフィアの転換: あるオペレーティングシステムをブートし、その周囲に別の OS をブートさせると、元々の OS が第二の OS に制御される仮想マシン内で動作することになります。まるで実家を出て街を歩いている途中で、自分が映画スタジオのセットの中を歩いていることに気づくようなものです。
² 複製ではない: これは Windows 起動時のシステムの完全な複製ではありません。Windows 起動時点で存在していた部分のみを含む「システム仮想マシンの複製」です。その動作原理は非常に複雑であるため、ここでは詳細には触れません。
著者プロフィール:レイモンド・チェン
- カテゴリー: トピックス
- 経歴: Windows の進化に深く関与してきました。2003 年に『ザ・オルド・ニュー・シング』(The Old New Thing)という Web サイトを開始し、ヘビービージャブズを避けるほどまでに壮大な想像力を駆使したコンテンツで人気を得てきました。
- 出版物: 同じタイトルで Addison Wesley から書籍(2007 年刊)が発行されました。
- その他: Windows Dev Docs の Twitter アカウントに登場し、時に有用でない物語を語ることがあります。