2011-12-01 10 views
6

Básicamente, ejecuto una red de computadoras y necesito saber en qué código de región están configuradas las unidades de las distintas computadoras. No necesito cambiar la región, pero no tengo idea de cómo determinar la región sin tener que ir individualmente a cada computadora y pegarme en un disco. Traté de usar el marco de reproducción de DVD Cocoa de Apple, pero eso requiere que se inserte un disco en el disco, lo que en cierto modo frustra el propósito.Determinación del código de región de una unidad de DVD en OS X en C SIN requerir que un DVD esté en la unidad

¿Hay alguna API que pueda usar para determinar el código de región en una unidad de DVD de Mac Pro sin que sea necesario insertar un disco? Estoy dispuesto a codificar en casi cualquier idioma.

Gracias

Respuesta

3

Encontré algunas utilidades que son capaces de manejar la configuración de región de DVD en OS X: DVD Info X, and Region X. DVD Info X mostrará el código de región de su disco sin necesidad de tener un DVD insertado.

Región X es más interesante porque, aunque no sirve directamente para su propósito, its source is available. Al mirarlo encontré que el método ScanAll en Region X.m es lo que necesita. Más específicamente, el caso interesante es aquel donde no se encuentra el nombre del disco (porque no hay un disco montado) y se usa un comando SCSI para descubrir las propiedades de la unidad de DVD (las printf son mi adición):

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); 
} 

Ejecuté esto en mi Macbook Pro y el resultado fue el esperado.

Obviamente necesitará masajearlo para aislar esa parte en algo que pueda usar, pero creo que este código será un punto de partida útil.

+0

¡Gracias, eso funcionó! También puede traducir el hexadecimal en algo legible mediante el uso de la enumeración DVDRegionCode (en el marco de reproducción de DVD de cacao) – user439407

Cuestiones relacionadas