USB CD-ROMエミュレーションって何?ファームウェアとソフトの違いをわかりやすく解説
ファームウェアで決まる“正体”とソフト的な見せかけの違い
USBメディアを扱っていると、だいたい一度はこう思いますよね。USBメモリをCD-ROMドライブみたいに見せることってできるの?
自動起動させたいとか、インストーラみたいに動かしたいとか、USBの動作が制限されている環境で使いたい、という場面でよく出てくる話です。Windowsの設定をいじればいけるんじゃないか、とか、特別なファイルがあるんじゃないか、とか、デバイスマネージャーのどこかに隠し設定があるんじゃないか、と思う人も多いです。
でもここが一番の誤解です。これはOSの裏ワザでもなければ、ファイルのトリックでもありません。プロパティでオン・オフする話でもないんです。
これはUSBデバイス内部で定義される“周辺機器としての正体”の設定なんです。
USBメモリを挿したとき、OSが「これは何だろう?」と勝手に決めているわけではありません。デバイス側が「自分はこれです」と名乗っているんです。リムーバブルストレージなのか、固定ディスクなのか、光学ドライブなのか――その正体はUSBコントローラ内のファームウェアで定義されています。
この分類はUSBの列挙(enumeration)の段階で行われます。Windowsがファイルシステムを読むより前に、デバイスクラスはすでに決まっています。OSがドライブをマウントして中身をスキャンする頃には、ハードウェアが報告した内容に基づいてクラスが割り当てられているんです。
列挙の仕組みをもう少し技術的に知りたい方は、こちらの記事もどうぞ: USBドライブが2つのディスクとして表示される理由 :contentReference[oaicite:0]{index=0}
だから「WindowsをだましてCD-ROMだと思わせるファイルってある?」と聞かれたら、答えはノーです。デバイスの種類はファイルシステムの属性ではなく、ハードウェアレベルのディスクリプタで決まります。
USB CD-ROMエミュレーションを理解するには、ソフトウェア的な“見せかけ”と、ファームウェアで定義された“本当の正体”を分けて考える必要があります。
なぜCD-ROMは今でもWindowsで扱いが違うのか
Windows XPの時代、USBメモリは autorun.inf からコマンドを実行できました。ポータブルソフトには便利でしたが、マルウェアにも非常に都合が良かったわけです。
Confickerなどの大規模なセキュリティ問題を受けて、Microsoftは方針を変更しました。Windows Vista以降、特にWindows 7以降では、マスストレージデバイスのautorunは制限または無効化されています。
ただし、光学ドライブは別扱いでした。
理由はシンプルです。光学メディアは基本的に読み取り専用。セキュリティの観点から見ると、CDは挿した後に自分を書き換えることができません。マルウェア拡散の手段としては、はるかにリスクが低いんです。
Windowsは、列挙時に報告されたUSBデバイスクラスに基づいてポリシーを適用します。マスストレージと報告すればそのルール、光学ドライブと報告すれば別のルールが適用されます。
OSがえこひいきしているわけではなく、あくまで“正体”に基づいてルールを適用しているだけなんです。
USBデバイスの“正体”はどうやって決まるのか?
ここが技術的な核心部分です。
すべてのUSBデバイスにはコントローラがあり、その中にファームウェアがあります。このファームウェアが、USBデバイスクラスディスクリプタなどを使ってデバイスの正体を定義しています。これはUSB列挙プロセス中に送信される小さなデータの塊で、「どんなデバイスが接続されたか」をホストに伝えます。
具体的には、デバイスディスクリプタ、インターフェースディスクリプタ、クラスコード、サブクラス、プロトコル、VID(Vendor ID)、PID(Product ID)、SCSI inquiryレスポンス、LUN(Logical Unit Number)構成などが含まれます。
USBメモリを接続すると、ホストはすぐに列挙を開始し、これらの情報がOSに報告されます。OSはファイルシステムを読む前にデバイスクラスを割り当てます。
Mass Storage Class(MSC)と報告されれば通常のUSBメモリとして扱われ、Optical Drive Class(CD-ROM)と報告されればCD/DVDドライブとして扱われます。Fixed Disk Classならローカルディスクです。
これはフォルダやファイルで決まる話ではありません。USBコントローラ内のファームウェアで決まります。
例えば、 CD-ROMデバイスとして列挙されるように事前設定されたUSBメモリ のような製品があります。これはコントローラをハードウェアレベルで設定し、光学プロファイルを提示し、ISO 9660ファイルを受け付けるようにしてあります。つまり、最初から“自分はCD-ROMです”と名乗る設計なんです。
Windowsが autorun.inf を探すより前に、周辺機器クラスはすでに確定しています。
デバイスの分類はハードウェアレベルで行われます。ファームウェアが正体を決め、OSはそれを受け入れるだけです。
ファームウェアレベルのCD-ROMエミュレーション(本物の方法)
本当のCD-ROMエミュレーションはUSBコントローラ内部で行われます。ソフトで光学動作を“それっぽく見せる”のではなく、ファームウェア自体が列挙時に光学クラスを報告するように設定されます。
正しく構成されていれば、挿した瞬間から光学メディアのように振る舞います。WindowsやmacOSはCD/DVDドライブとして認識します。場合によっては、OSが起動する前のBIOSやUEFI段階でも光学メディアとして認識されます。
さらに高度な実装では、複数のLUNを提示することも可能です。片方は読み取り専用の光学メディア、もう片方は書き込み可能なストレージ、という構成です。
まとめ:今の時代の考え方
2026年現在、USB CD-ROMエミュレーションはWindowsの制限を“回避する”ための話ではありません。ポイントはデバイスの正体です。
ソフトウェア的な方法はCDの構造を再現するだけ。ファームウェア方式は周辺機器としての正体そのものを再定義します。
OSが「これは何か」を根本的にどう認識するかを変えられるのは、ファームウェアレベルの設定だけです。
この違いがわかると、「Windowsをだませる?」という発想から、「USBデバイスはハードウェアレベルでどう自分を定義しているのか?」という本質的な問いに変わってきます。
Tags: ISO 9660 USB, USB CD-ROMエミュレーション, USBコントローラファームウェア, USBデバイスクラスディスクリプタ, マルチLUN USB
