]>
$Keywords: CompactFlash card, Removable Disk, fixed disk, NonRemovableMedia, cfadisk.sys $
$Id: W2konCF.html,v 1.2 2010-08-16 17:22:59+09 kabe Exp $
多くのCompactFlash (CF) カードは、パラレルATA変換基板を介してTrueIDEモードで 動かしていても、属性的には「リムーバブル ディスク」のままであるため、 Windows2000以降では複数のパーティションが切れないという制限がつきます。
DOSやUNIX系ではわざわざ制限してないので、そちらで 複数パーティションを作ってフォーマットもできますが、 Windowsにつないでディスクマネージャで見ると、 プロパティがおかしかったり フォーマットやパーティション削除の操作ができません。 新規インストール時も、わかりにくいエラーが出ます。
IDEコントローラを制御する atapi.sys の設定である、
HKLM\SYSTEM\CurrentControlSet\Services\atapi\Parameters\
キーの
NonRemovableMedia
値(REG_MULTI_SZ)には、
固定ディスク扱いするディスクドライブ銘の一覧が書かれています。
ここに、使うCFカードの名前を追加して再起動すれば、固定ディスク扱いに なるようです。
追加する文字列は、(たぶん)
HKLM\SYSTEM\CurrentControlSet\Enum\IDE\Disk
DeviceID\******\ キーの
FriendlyName
値
から拾います。
なお、このNonRemovableMedia
値の初期値は
%windir%\inf\mshdc.inf
に書かれています。
NonRemovableMedia
が使えるのは結局 Windows 2000 の
atapi.sys
だけで、Windows XP以降では使えません
(レジストリは残っているが、atapi.sysからロジックが削除されている)。
Windows 2000 の atapi.sys に入替えてやれば一応 XP でも動きます。 もっとも、PCMCIAのメモリカード挿したりする度に XP標準の atapi.sys に戻ってしまったりするので、常用はめんどくさいかと思われます。
日立(旧IBM)のマイクロドライブ用のフィルタドライバを使うと、 このRemovable属性を上書きして固定ディスクに見せかけることができます。 本来は当然、マイクロドライブ用で使うことが利用条件ですが。
日立からはすでに配布されていないようなので、"xpfildrvr1224_320.zip"を 他所から 入手します。
解凍するとcfadisk.infが含まれているので、これを手持ちのCFカード用に 書き換えます。
とりあえずPCカードアダプタ経由でCFカードを接続して、
Hardware ID
値を拾ってきます。
PCカードアダプタ経由で接続すれば IDE コントローラ扱いなので、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE\Disk********\
を掘る。
USBアダプタ経由の接続時は ...\ENUM\USBSTOR\
以下に
キーができますが、
CFカードではなくCF-USBコンバータのIDしか拾えないことがあるので
おすすめしません。
Device IDの値は REG_MULTI_SZ型 なので、regedit.exe では うまく拾えないかもしれません。 上図のようにregedt32.exe なら全部の値を見ることができます。
Device IDは以下の形式を持ちます:
IDE\
t*v(40)r(8)
Disk
IDE\DiskTRANSCEND_______________________________20060726 IDE\TRANSCEND_______________________________20060726 IDE\DiskTRANSCEND_______________________________ TRANSCEND_______________________________20060726 GenDisk
cfadisk.infの [cfadisk_device] 項 (Windows DDK的には [Models]項) に、拾った Device ID を埋め込みます。 今あるエントリは全部削除してから、エントリを書き加えます。
[cfadisk_device] %Microdrive_devdesc% = cfadisk_install,IDE\DiskIBM-DSCM-11000__________________________SC2IC801 ↓ %Microdrive_devdesc% = cfadisk_install,IDE\DiskFLASH_CARD______________________________20080128
Device IDには、「互換用」のエントリとして何種類かの省略形もあり、 revision 番号のない形式:
IDE\
t*v(40)
20080128
) のない
%Microdrive_devdesc% = cfadisk_install,IDE\DiskFLASH_CARD______________________________でも問題なく使えます。 何でもかんでも書くと、リムーバブルにしておきたいデバイスも 固定ディスク化されてしまうので注意!
OS標準のディスクとUSBメモリの設定は %windir%\INF\ 以下の
disk.inf と usbstor.inf にあります。
GenDisk
といったデフォルト用設定しか書いてないので、
自分でinfを書く際の参考にはしづらいかも
なお、 新規インストール時の[F6]押下で使えるドライバディスクにするには、 txtsetup.oemも追加で書く必要がありますが、独立ドライバではない フィルタドライバを書く方法はないようです。
対象のディスクデバイスに、ドライバ更新でフィルタドライバをインストールします。
ドライバ更新を行う際は、他アプリケーションを閉じるなど、 安全策を講じましょう。いきなりSTOPエラーで落ちたことがありました。 ディスクドライバ入れ替えは特殊な操作なので、用心に越したことはないです。
再起動して、該当ドライブが「ローカル ディスク」と表示されれば更新成功です。
cfadiskを使った場合は、 デバイスマネージャから [ドライバの詳細(D)...] を見ると cfadisk.sys と disk.sys (デフォルトのドライバ) がスタックされている 状態がわかります。
CFのメーカによっては専用のツールで属性を「固定ディスク」に 書き換えられるらしいのですが、末端のユーザ用に配布している ベンダは無いようです。
(未確認:TranscendのCFカードならTrueIDE時は固定ディスク属性を返す?)
デバイスマネージャから、該当ドライブの [ドライバを更新(P)] で、 単なる「ディスク ドライブ」と表示されるドライバに入れ替えます。 ドライバが disk.sys だけに戻ります
が、実はcfadiskドライバは有効のままです。再起動しても固定ディスクのままです。
cfadisk.infにも書かれている、デバイス側のレジストリに追加される
LowerFilters
の設定がクリアされない!ので、
HKLM\SYSTEM\CurrentControlSet\Enum\IDE\Diskデバイス名\******\
キーの
LowerFilters,REG_MULTI_SZ,"cfadisk"
値を手動で削除してやる
必要があります。
このレジストリキーはACL的にSYSTEM権限でしか書き込みできないので、
Windows2000ではregedt32でいったんACLを追加してから値を削除します。
Windows2000で確認。XPではサービスパック次第では自動で消える?