
         LFN(Long File Name)対応 DOS モードの構築方法  Ver.1.00
                      Copyright (C) 2000  K.Takata


１．LFN 対応 DOS モードの概要
　通常の Win9x の MS-DOS モードでは LFN を扱うことができませんが、以下に
示す方法で環境を構築することで、DOS モードで LFN を扱うことができるよう
になります。この LFN 対応 DOS モードに必要なディスク容量は 4〜5MB 程度で
す。（うまくいけばフロッピーで起動させることも可能かもしれません。）
Win9x が起動しなくなったときの修復用の環境として使うなどの利用法が考えら
れます。copy などの標準のコマンドで LFN が扱えるので、普通の DOS モード
に比べて、LFN を使ったファイルの操作が格段に楽になります。
　この方法のオリジナルは Andrew Schulman の「Windows95 内部解析」に記さ
れているそうですが、この本は既に絶版となっているので私自身は確認していま
せん。以下に示す方法は @nifty の某所でたまたま見つけた文章を元に、私自身
が試行錯誤を行って出来上がった方法です。動作確認は Win95 OSR2(PC-98),
Win98 SE(PC/AT) で行っています。



２．LFN 対応 DOS モードの構築
　以下では Win9x が a: にインストールされており、LFN 対応 DOS モードは b:
から起動させるものとして話を進めます。（自分の環境に合わせてドライブ名を
読み替えてください。）

b:\vmm32 というディレクトリを作り、その中に必要なファイルを入れることに
します。以下の部分を lfndos.bat という名前で保存して実行すれば楽でしょう。
（もちろんドライブ名の部分は自分の環境に合わせて書き換えてください。）

------------------------------------------------------------------------
@echo off
rem ディレクトリを作成
mkdir b:\vmm32
mkdir b:\vmm32\iosubsys
mkdir b:\vmm32\vmm32

rem VxD ファイルをコピー
copy a:\windows\system\*.vxd        b:\vmm32
copy a:\windows\system\iosubsys\*.* b:\vmm32\iosubsys
copy a:\windows\system\vmm32\*.*    b:\vmm32\vmm32

rem デバイスドライバなどをコピー
copy a:\windows\himem.sys           b:\vmm32
copy a:\windows\ifshlp.sys          b:\vmm32
copy a:\windows\win.com             b:\vmm32
copy a:\windows\system.ini          b:\vmm32
copy a:\windows\ios.ini             b:\vmm32
copy a:\windows\command.com         b:\vmm32\krnl386.exe

rem レジストリをコピー
attrib -s -h a:\windows\system.dat
attrib -s -h a:\windows\user.dat
copy a:\windows\system.dat          b:\vmm32
copy a:\windows\user.dat            b:\vmm32
attrib +s +h a:\windows\system.dat
attrib +s +h a:\windows\user.dat

rem 以下のファイルがないと日本語の LFN が扱えない
copy a:\windows\system\unicode.bin  b:\vmm32
------------------------------------------------------------------------

上記のようにすれば必要なファイルが b:\vmm32 にコピーされます。


attrib -r -s -h b:\msdos.sys として b:\msdos.sys を編集可能にしてからテ
キストエディタなどで以下のように書き換えます。ここでももちろんドライブ名
を自分の環境に合わせて書き換える必要があります。

------------------------------------------------------------------------
;SYS
[Paths]
WinDir=B:\VMM32
WinBootDir=B:\VMM32
HostWinBootDrv=B

[Options]
BootGUI=0
;以下省略
------------------------------------------------------------------------

以上でひとまず環境構築は終わりです。


b: から再起動して、プロンプトが表示されたら、
B:\> win
あるいは
B:\> \vmm32\win
として、win.com を起動してください。しばらくして再びプロンプトが表示され
たら LFN が使えるようになっています。LFN が使われているファイルがあるデ
ィレクトリで dir を実行してみましょう。ちゃんと右側に LFN が表示されるは
ずです。なお環境にも寄りますが、このとき DOS 用ドライバを組み込んでいな
いにも関わらず CD-ROM ドライブや、PC カード経由で接続しているドライブな
どが使えるようになっているはずです。（ただしホットプラグには対応していま
せん。）

LFN 対応 DOS モードから抜けるには exit と入力してください。ソフトウェア
的に電源を切ることができるパソコンでは、LFN 対応 DOS モードから抜けると
同時に勝手に電源が切れます。



３．LFN 対応 DOS モードのチューニング
　２．で作成した環境にはかなりの無駄があります。ここではその無駄を省く方
法などを説明します。


3.1.レジストリのチューニング
　Win9x のレジストリは 数MB ありますが、LFN 対応 DOS モードで必要な部分
はこの内のほんの一部です。以下の作業でレジストリのサイズを約 10分の 1 に
することが可能です。

DOS モードで起動してから以下のように実行してください。誤って本来の
Windows のレジストリを破壊してしまわないように、必ず /l と /r で LFN 対
応 DOS モードのレジストリの場所を指定しておきましょう。また Windows と
LFN 対応 DOS モードの両方のレジストリのバックアップを取っておきましょう。

------------------------------------------------------------------------
regedit /l:b:\vmm32\system.dat /r:b:\vmm32\user.dat /d →
        HKEY_LOCAL_MACHINE\SOFTWARE

regedit /l:b:\vmm32\system.dat /r:b:\vmm32\user.dat /e lfndos.reg →
        HKEY_LOCAL_MACHINE

regedit /l:b:\vmm32\system.dat /r:b:\vmm32\user.dat /c lfndos.reg
------------------------------------------------------------------------

（注）  長いので"→"の部分で折り返しています。実際には"→"のあともそのま
        ま続けて入力してください。

まず HKEY_LOCAL_MACHINE\SOFTWARE の部分が必要ないので削除します。（環境
によっては HKEY_LOCAL_MACHINE\Software というように、大文字小文字が違っ
ている場合がありますが、関係ないようです。）

レジストリの HKEY_LOCAL_MACHINE の部分を lfndos.reg に書き出してから、レ
ジストリの再構築を行うことでサイズは 約300〜400KB まで小さくなります。再
構築後は system.dat はバックアップを取っておいた方がよいでしょう。
user.dat の方は削除してしまって構いません。lfndos.reg も必要ありません。


3.2.余分な VxD ファイルの削除
　２．では \windows\system にあるすべての VxD ファイルを \vmm32 にコピー
しましたが、その中には LFN 対応 DOS モードでは使われないファイルも含まれ
ています。必要ないファイルにはまず、DirectX 関係のファイルがあります。
ddraw.vxd, dsound.vxd, dinput.vxd, joyhid.vxd などがそれに当たります。デ
ィスプレイドライバも必要ありません。これらのファイルは削除してしまって問
題ありません。

他には、
    netbeui.vxd
    nwredir.vxd
    wsock.vxd
    wshtcp.vxd
    wsipx.vxd
    afvxd.vxd
    pppmac.vxd
    vgateway.vxd
    nwsp.vxd
    paralink.vxd
    nesa.vxd
    lpt.vxd
    lptenum.vxd
    serial.vxd
    serenum.vxd
    serwave.vxd
    unimodem.vxd
    p1284.vxd
    ser8251.vxd
    ser8251f.vxd
などのファイルが削除して問題ないと思われます。これらはネットワーク関連や、
シリアル・パラレルポート、モデム関連の VxD ファイルだと思われます。もし
VxD ファイルを削除したために LFN 対応 DOS モードが起動しなくなった場合は、
もう一度そのファイルをコピーし直してください。（逆に、ネットワークを使う
には上記のファイル以外に拡張子が .386 のファイルと LAN カードのドライバ
もコピーしておく必要があります。ただし、それで実際にネットワークが使える
のか確認はしていません。）


3.3.環境変数の設定
　LFN 対応 DOS モードで起動した場合、なぜか環境変数が設定されません。環
境変数を設定するためのバッチファイルをルートディレクトリに env.bat とで
もして用意しておくといいかもしれません。あるいは command.com を、command
/k \env.bat として呼び出す実行ファイルを作ってそれを krnl386.exe とリネ
ームしておけば、自動的に環境変数が設定されます。



４．LFN 対応 DOS モードで動作するソフト
　LFN 対応 DOS モードでは int 21h AX=71xxh 系のファンクションを利用する
ソフトで LFN を扱うことができるようになります。要するに Win9x の DOS 窓
で LFN を扱うことができる DOS プログラムは、そのまま LFN 対応 DOS モード
で LFN を扱うことができます。Win9x の標準コマンドが LFN を扱えるほか、フ
リーソフトでは MIEL や K-Launcher などのソフトが LFN を扱えます。また、
拙作の LFN library を利用して作成されたソフトでも LFN を扱うことができま
す。
　LFN 対応 DOS モードは、実は半分 Windows が動作しているような状態なので、
誤動作するソフトも存在します。拙作の Exsel も現バージョン(Ver.1.12)では
Windows が動作していると誤って判断して、Windows 用のプログラムを実行しよ
うとしてしまいます。int 2fh AX=1600h などを利用して Windows が動作してい
るかを判断しているプログラムは同様に誤動作する可能性があります。



５．付属ツールに関して
　lfndos.bat, krnl386.exe, execdw.asm に関する説明です。


5.1.lfndos.bat
　２．で紹介した lfndos.bat に少し手を加えたものです。a:\windows に
Win9x がインストールしてあり、b:\vmm32 に LFN 対応 DOS モードを構築する
場合、
 > lfndos a: b:
とすることで、必要なファイルがコピーされます。


5.2.krnl386.exe
　3.3.で説明した、環境変数を設定するためのプログラムです。これを \vmm32
にコピーして、ルートディレクトリに環境変数を設定するためのバッチファイル
を env.bat という名前で用意しておくと、LFN 対応 DOS モード起動時に、自動
的に環境変数が設定されます。拙作の Exsel Ver.1.12 を元に作ったプログラム
です。execdw.asm がソースファイルです。
 > lcc -o krnl386.exe -a execdw.asm -k-Fc
としてコンパイルしてあります。



６．注意事項、その他
・この文章の扱いはフリーソフトウェアと同様とします。
・この文章の著作権は著者である私 K.Takata（高田 謙）に帰属します。
・この文章に書いてあることを行ったことで何らかの問題が発生しても著者は一
  切の責任を負いません。各自の責任において行ってください。
・この文章を一切変更しない限り配布／転載は自由です。


        著者   : K.Takata（高田 謙）
        E-mail : kentkt@anet.ne.jp, HZL03275@nifty.ne.jp
        URL    : http://webs.to/ken/
                 http://member.nifty.ne.jp/k-takata/


