Определение кода региона дисковода DVD в OS X в C БЕЗ необходимости наличия DVD в приводе - PullRequest
6 голосов
/ 01 декабря 2011

По сути, я управляю сетью компьютеров, и мне нужно знать, на какой код региона установлены диски различных компьютеров.Мне не нужно менять регион, но я понятия не имею, как определить регион, не заходя на каждый компьютер отдельно и не вставляя диск.Я пытался использовать каркас Apple для воспроизведения DVD-дисков с какао, но для этого необходимо вставить диск в дисковод, что в некоторой степени не отвечает этой цели.

Итак, есть ли какие-либо API, которые я могу использовать для определения кода региона наDVD-привод Mac Pro без необходимости вставки диска?Я готов писать на практически любом языке.

Спасибо

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

Я нашел некоторые утилиты, которые способны работать с настройками региона DVD на OS X: DVD Info X и Region X .На DVD Info X будет отображаться код региона вашего привода без необходимости вставлять DVD.

Регион X более интересен, поскольку, хотя он и не служит вашим целям, его источник доступен .Глядя на это, я обнаружил, что метод ScanAll в Region X.m - это то, что вам нужно.В частности, интересным случаем является случай, когда имя диска не найдено (поскольку диск не смонтирован), и для определения свойств дисковода DVD используется команда SCSI (вызовы 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, и результат был ожидаемым.

Очевидно, вам нужно будет помассировать его, чтобы выделить эту часть во что-то, что вы можете использовать, но я думаю,что этот код будет полезной отправной точкой.

1 голос
/ 09 декабря 2011

У меня нет ответа как такового, но у меня есть 2 ссылки для вас:

  1. Код (для Windows, а не для Mac), который объясняет, как читать регион: http://www.codeproject.com/KB/system/mydvdregion.aspx

Поскольку это чисто команды SCSI, возможно, его можно адаптировать для Mac.

  1. FTP: //ftp.san.ru/unix/soft.cvs/wine.git/wine-git/dlls/ntdll/cdrom.c Там есть поддержка Mac - и там тоже читают регион DVD.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...