2011-12-01 14 views
6

मूल रूप से मैं कंप्यूटर का नेटवर्क चलाता हूं और यह जानने की आवश्यकता है कि विभिन्न कंप्यूटरों के ड्राइव कोड को किस कोड पर सेट किया गया है। मुझे इस क्षेत्र को बदलने की जरूरत नहीं है, लेकिन मुझे नहीं पता कि प्रत्येक कंप्यूटर पर व्यक्तिगत रूप से और डिस्क में चिपके बिना क्षेत्र को कैसे निर्धारित किया जाए। मैंने ऐप्पल के कोको डीवीडी प्लेबैक ढांचे का उपयोग करने की कोशिश की, लेकिन इसके लिए ड्राइव में डिस्क डालने की आवश्यकता है, जो इस तरह के उद्देश्य को हरा देता है।ओएस एक्स में एक डीवीडी ड्राइव के क्षेत्र कोड को निर्धारित करने के बिना किसी डीवीडी को ड्राइव में

तो क्या कोई एपीआई है जिसका उपयोग मैक प्रो के डीवीडी ड्राइव पर क्षेत्र कोड निर्धारित करने के लिए किया जा सकता है, बिना डिस्क डालने की आवश्यकता के? मैं किसी भी भाषा में कोड करने के लिए तैयार हूं।

धन्यवाद

उत्तर

3

मुझे कुछ उपयोगिताएं मिलीं जो ओएस एक्स: DVD Info X, and Region X पर डीवीडी क्षेत्र सेटिंग्स से निपटने में सक्षम हैं। डीवीडी इन्फो एक्स आपके डीवीडी के क्षेत्र कोड को बिना डीवीडी डालने की आवश्यकता के प्रदर्शित करेगा।

क्षेत्र एक्स अधिक दिलचस्प है क्योंकि यद्यपि यह सीधे आपके उद्देश्य, its source is available की सेवा नहीं करता है। इसे देखकर मैंने पाया कि ScanAllRegion X.m में विधि की आवश्यकता है जो आपको चाहिए। अधिक विशेष रूप से, दिलचस्प मामला वह है जहां डिस्क नाम नहीं मिला है (क्योंकि कोई डिस्क घुड़सवार नहीं है) और डीवीडी ड्राइव के गुणों को खोजने के लिए एक एससीएसआई कमांड का उपयोग किया जाता है (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); 
} 

मैंने इसे अपने मैकबुक प्रो पर चलाया और परिणाम अपेक्षित था।

स्पष्ट रूप से आपको उस हिस्से को अलग करने के लिए मालिश करने की आवश्यकता होगी जिसका उपयोग आप कर सकते हैं, लेकिन मुझे लगता है कि यह कोड एक उपयोगी प्रारंभिक बिंदु होगा।

+0

धन्यवाद, यह काम किया! इसके अलावा आप हेक्स को DVDRegionCode गणना (कोको डीवीडी प्लेबैक फ्रेमवर्क में) का उपयोग कर कुछ पठनीय में अनुवाद कर सकते हैं। – user439407

1

मैं इस तरह के रूप में एक जवाब नहीं है, लेकिन मैं आप के लिए 2 लिंक:

  1. कोड (विंडोज़ के लिए मैक के लिए नहीं,) बताते हैं कि कैसे इस क्षेत्र को पढ़ने के लिए: http://www.codeproject.com/KB/system/mydvdregion.aspx

इन के बाद से शुद्ध SCSI आदेशों कर रहे हैं - यह शायद मैक के लिए यह अनुकूल करने के लिए संभव है।

  1. ftp://ftp.san.ru/unix/soft.cvs/wine.git/wine-git/dlls/ntdll/cdrom.c वहाँ मैक समर्थन नहीं है - और वे वहां भी डीवीडी क्षेत्र पढ़ें।
संबंधित मुद्दे