OS XでDVDリージョン設定を処理できるユーティリティをいくつか見つけました:DVDInfoXとRegionX。DVD Info Xは、DVDを挿入しなくても、ドライブのリージョンコードを表示します。
リージョンXは、目的を直接果たすものではありませんが、そのソースが利用可能であるため、より興味深いものです。それを見て、私はのScanAll
方法Region X.m
があなたが必要としているものであることがわかりました。より具体的には、興味深いケースは、ディスク名が見つからず(ディスクがマウントされていないため)、SCSIコマンドを使用してDVDドライブのプロパティを見つける場合です(printf
呼び出しは私の追加です)。
task = (*scsitaskinterface)->CreateSCSITask(scsitaskinterface);
if (task)
{
cdb[0] = 0xa4;
cdb[1] = 0x00;
cdb[2] = 0x00;
cdb[3] = 0x00;
cdb[4] = 0x00;
cdb[5] = 0x00;
cdb[6] = 0x00;
cdb[7] = 0x00;
cdb[8] = (sizeof(DVDInfo) >> 8) & 0xff;
cdb[9] = sizeof(DVDInfo) & 0xff;
cdb[10] = 0x08;
cdb[11] = 0x00;
memset(&DVDInfo, 0, sizeof(DVDInfo));
ProcessCDB(task, cdb, 12, DirIn, &DVDInfo, sizeof(DVDInfo), 30000);
printf("drive region %#hhx\n", DVDInfo.driveRegion);
printf("number of region changes left: %hhu\n", DVDInfo.numberUserResets);
if (DVDInfo.rpcScheme == 0) RPC1++;
if (DVDInfo.rpcScheme != 0) RPC2++;
(*task)->Release(task);
}
これをMacbookProで実行したところ、期待どおりの結果が得られました。
もちろん、その部分を使用できるものに分離するためにそれをマッサージする必要がありますが、このコードは有用な出発点になると思います。