DVD区域信息编程获取方法

DVD区域编码是一种用于控制DVD播放器和光盘之间兼容性的机制。这种编码既存在于DVD播放器的硬件中,也存储在DVD光盘的IFO文件中。区域编码限制了特定DVD播放器能够播放的光盘区域。例如,如果一个DVD播放器被设置为区域1(美国和加拿大),那么它将无法播放区域2(欧洲)的光盘。

要绕过这种限制,一种方法是更新播放器的固件并移除DVD区域支持。但需要注意的是,DVD播放器中的区域编码一旦设置,通常无法通过重新安装操作系统或将播放器移动到另一台电脑来重置。

DVD区域编码

DVD区域编码定义了全球不同地区的DVD播放器和光盘之间的兼容性。以下是DVD区域编码的分布:

  • 0 - 无区域编码
  • 1 - 美国、加拿大
  • 2 - 欧洲、法国、希腊、土耳其、埃及、阿拉伯、日本、南非
  • 3 - 韩国、泰国、越南、婆罗洲、印度尼西亚
  • 4 - 澳大利亚、新西兰、墨西哥、加勒比地区、南美洲
  • 5 - 印度、非洲、俄罗斯及前苏联国家
  • 6 - 中华人民共和国
  • 7 - 未使用
  • 8 - 航空公司/游轮
  • 9 - 扩展(通常用作区域自由)

技术前提

为了从DVD驱动器读取信息,需要向硬件(DVD播放器)发送SCSI命令。为了简化操作,本文的代码示例不使用ASPI,而是使用微软的SPTI(SCSI Pass Through Interface)与硬件通信。发送到硬件的SCSI命令是标准的,可以在互联网上找到相关信息。

使用SPTI接口发送SCSI/CDB(命令描述块)到设备非常简单,只需要设置正确的块并发送它。以下是发送SCSI命令的步骤:

  1. 打开设备,例如:\\.\C:
  2. 准备一个SCSI_PASS_THROUGH_DIRECT结构体
  3. 准备CDB(命令描述块),这是一个用于选择命令并传递适当参数的结构体
  4. 准备返回或数据缓冲区(命令发出后返回的缓冲区)
  5. 使用DeviceIoControl()函数,IOCTL代码值为IOCTL_SCSI_PASS_THROUGH_DIRECT(0x4D014)来发出调用
  6. 解释结果

根据参考资料,需要向DVD发送SCSI操作码SCSIOP_REPORT_KEY(0xA4)以及一些特定参数。REPORT_KEY可以用来做很多事情,但只需要读取DVD区域信息。为此,需要填充CDB_REPORT_KEY结构体:

report.OperationCode = SCSIOP_REPORT_KEY; report.AllocationLength = sizeof(REPORT_KEY_DATA_RPC_STATE); report.AGID = 0; report.KeyFormat = KEY_FORMAT_RPC_STATE;

命令发出后,REPORT_KEY_DATA_RPC_STATE结构体将被填充区域信息。

区域信息包括:

  • Vendor changes:表示制造商可以重置区域的次数。
  • User changes:表示用户可以设置区域的次数。
  • Region name:指定驱动器所在的区域。
  • Type code:指定驱动器使用的区域播放控制类型。

如何编程设置DVD区域

  1. / SCSI Multi-Media Commands – 5 (MMC-5) / mmc5r03a.pdf
  2. DDK / SCSI_PASS_THROUGH documentation
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485