在不需要插入DVD的情况下,使用C语言确定Mac OS X中DVD驱动器的区域码。

6
基本上,我管理着一组计算机网络,需要知道各台电脑的驱动器所设置的地区代码。我不需要改变地区,但是我不知道如何在不逐个检查每台电脑并插入光盘的情况下确定地区。我尝试使用苹果的Cocoa DVD播放框架,但这要求必须将光盘插入驱动器中,这有点违背了初衷。
因此,有没有任何API可以用于在Mac Pro的DVD驱动器上确定地区代码,而不需要插入光盘?我愿意使用任何编程语言来完成。
谢谢
2个回答

3
我在OS X上发现了一些可以处理DVD区域设置的实用工具:DVD Info X和Region X。DVD Info X可以显示驱动器的区域代码,而无需插入DVD。
Region X更有趣,因为虽然它不能直接服务于您的目的,但其源代码是可用的。查看后,我发现Region X.m中的ScanAll方法就是您需要的。更具体地说,有趣的情况是找不到磁盘名称(因为没有安装磁盘),并且使用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);
}

我在我的Macbook Pro上运行了这个代码,结果如预期。

显然你需要修改它,将其中的部分独立出来以便你可以使用,但我认为这段代码将是一个有用的起点。


谢谢,这很有效!另外,您可以使用DVDRegionCode枚举(在Cocoa DVD播放框架中)将十六进制转换为可读内容。 - user439407

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接