问题标签 [cd-rom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1119 浏览

c - 如何使用 WinAPI 识别 CD-ROM 驱动器中的光盘类型?

我正在编写一个适用于音频 CD 和混合 CD 的应用程序。我想要一种方法来确定应用程序使用的驱动器中当前是否有音频或混合类型(至少有一个音轨)光盘。

到目前为止,我能够通过GetDriveType. 然而,事实证明,识别实际在驱动器内的媒体并不是那么容易。这是我到目前为止所得到的:

但是,它依赖于 Windows 将名称“音频 CD”分配给所有被识别为音频的光盘这一事实。这感觉不对,而且在混合模式 CD 上会惨遭失败,因为它们在 Windows 中的名称是由数据轨道的卷名决定的。此外,该else块在这里是因为我注意到它GetVolumeInformation返回一个错误,GetLastError等于ERROR_INVALID_PARAMETER驱动器中根本没有光盘。

理想情况下,我正在寻找类似于CDROM_DISC_STATUSLinux 上的 ioctl 的东西。它根据光盘的内容返回CDS_NO_INFOCDS_AUDIO、或其他一些值。CDS_MIXED

有没有其他方法来处理这个?那么混合模式光盘呢?

0 投票
1 回答
1345 浏览

c - C 代码弹出光驱

我试图通过 C 代码弹出我的 CD ROM。它不想工作。ioctl 返回“5” I/O 错误,可能是哪里出了问题?

当我尝试这个功能时

它完美地工作。但我想通过第一个函数(eject_cdrom)来做到这一点。

来自 strace 的输出:

strace -f ./cdrom

0 投票
1 回答
1149 浏览

assembly - 我无法从 x86 程序集中的 CD-ROM 中读取扇区

我正在尝试从我的 ISOSYS 引导加载程序为我的 OS32 操作系统加载第二阶段引导加载程序,但我似乎做不到。CF 似乎总是被设置。这是从 CD/DVD 启动的,我使用的是 Debian GNU/Linux 7.6 (Wheezy)

这是 isosys.asm:

这是boot.asm,第二阶段:

nasm -f bin isosys.asm -o ISOSYS我用然后编译nasm -f bin boot.asm -o BOOT 然后我做了mkdir iso然后cp ISOSYS iso/然后cp BOOT iso/生成了ISO: genisoimage -no-emul-boot -boot-load-size 4 -eltorito-boot ISOSYS -o boot.iso iso/

我在 VirtualBox 中运行它,但它说的是无法加载第二阶段(可能找不到文件?),这意味着设置了携带标志,但我似乎找不到错误。

有什么帮助吗?帮助将不胜感激!:*

0 投票
2 回答
3263 浏览

android - 如何将 Android 挂载为 CD-ROM?

我有带有自定义 ROM 和内核的 Galaxy S4。我需要将 ISO 映像从 sdcard 挂载到 Windows/Linux PC 作为 CD-ROM。
有一个“DriveDroid”应用程序运行良好,但我需要手动完成(作为一项研究)。Windows 8 写道“设备需要格式化”。
代码(bash 脚本)

但是,cdromro文件仍然设置为 0。我还应该怎么做才能使它们为“1”?

0 投票
1 回答
272 浏览

c++ - ISO 9660:如何定位目录的子级

好的,所以我目前正在使用 c++ 进行分配,以从 9660 1 级 iso 图像中读取。任务的目标是将内容解压缩到磁盘。我可以获得主卷描述符,并且可以导航到根目录及其范围,但我不知道从那里做什么。

那么如何根据根目录记录找到孩子呢?我想我想了解的是子文件和目录是如何参考其父文件放置的?

我实际上想要一个正确的答案,而不仅仅是“阅读这个”,因为我已经在互联网上搜索(阅读规范等)试图弄清楚这一点。而且要么没有很好的记录,要么我只是瞎了眼。:(

0 投票
2 回答
2266 浏览

c - 如何在 Windows 中向 CD-ROM 驱动器发出 READ CD 命令?

我正在开发一个需要向 CD-ROM 驱动器发出原始 SCSI 命令的应用程序。目前,我正在努力向0xBE驱动器发送 READ CD ( ) 命令并从 CD 的给定扇区取回数据。

考虑以下代码:

CDB 是根据MMC-6 Revision 2g组装的,应该从 LBA 1 转移 1 个扇区。由于我只使用 CD-DA 光盘,每个扇区是 2352 字节,这解释了为什么sizeof(buf)是 2352。

为简洁起见,省略了错误检查。调试器显示DeviceIoControl调用成功返回ioctl_bytesis 0x2c,而里面的值sptd.s如下:

这表明该命令已被驱动器成功执行,为ScsiStatus0 ( SCSI_STATUS_GOOD),没有返回任何感知数据。但是,数据的缓冲区没有被写入,因为调试器显示它已被 填充0xcc,因为应用程序是在调试模式下编译的。

但是,当我将 CDB 更改为像这样的标准 INQUIRY 命令时:

缓冲区已正确填充查询数据,我能够读取驱动器、供应商和其他所有内容的名称。

根据Microsoft 的 SCSI_PASS_THROUGH_DIRECT 文档,我已经尝试对齐目标缓冲区,该文档说SCSI_PASS_THROUGH_DIRECT的 DataBuffer 成员是指向此适配器设备对齐缓冲区的指针。实验性地将缓冲区对齐到 64 字节不起作用,并且发出一个IOCTL_SCSI_GET_CAPABILITIES应该返回所需对齐的 ,给了我以下信息:

这让我相信,因为AlignmentMask是 1,所以不需要对齐,因此这似乎不是问题的原因。有趣的是,AdapterUsesPio是 1,尽管设备管理器另有说明。

作为记录,下面的代码在 Linux 上可以正常工作,并且目标缓冲区充满了 CD 中的数据。与在 Windows 上相同,返回的 SCSI 状态为 0,并且不返回任何感知数据。

Windows 代码在 Windows XP 上使用 Visual Studio C++ 2010 Express 和 WinDDK 7600.16385.1 编译。它也可以在 Windows XP 上运行。

0 投票
2 回答
213 浏览

java - 为什么我的命令行指令没有弹出 cd?

在我使用 ISO Writer 刻录 Cd 的程序中,由于这个链接,我的代码应该在写入后弹出 cd,因为 -e 命令行,它刻录到 cd 但写入后不弹出,我不知道是什么问题?

这是我以这种格式添加驱动器名称时遇到的错误:

在此处输入图像描述

0 投票
1 回答
2470 浏览

python - Python 将 CD 文件翻录成 WAV

我正在编写一个程序,我需要能够将文件从 CD 翻录成 WAV 格式(或 flac,但 wav 工作正常)。它必须在 Windows 上运行。我看到了其他答案,其中将 Express Rip 和 Audio Commander 推荐为命令行工具。但是Audio Commander 的页面似乎已经不存在了。而且我不太确定express rip,它似乎有点粗略。

然后他们提到了用于检索元数据的诱变剂。

有人对这些实用程序或这个目标有任何经验吗?我希望能够在 WAV 中翻录 CD,保留那里的元数据,如果可能的话,还要检查 CD 存档中的元数据。

有人做过这样的事情,或者对模块、实用程序、方法等有建议让我继续前进吗?即使是一些小例子也会有所帮助。这是使用 python 或模块翻录 cd 以完成任务的示例。

0 投票
0 回答
457 浏览

usb - 插入 3G netstick 时让 Hotplug 做出反应(使用 mdev)

我正在尝试让运行嵌入式 linux V-2.6.31 的设备自动识别何时插入华为 3G USB 记忆棒,运行 usb_modeswitch,并与模块通信。似乎 usb_modeswitch 在具有 mdev 的系统中无法正常工作,因为路径 /dev/bus/usb 仅由 udev 创建。我找到了一个创建此路径并使 usb_modeswitch 正常工作的脚本。现在,我需要的是这个过程的自动化,例如,当插入 3G 模块时,hotplug 将首先调用我的脚本,然后是 usb_modeswitch。问题是当插入 3G 模块时,枚举完成后没有任何反应(热插拔不会运行),请参阅跟踪:

我不确定出了什么问题,有什么我没有启用的吗?我需要加载一个 KO 才能使其工作吗?

先感谢您!

0 投票
1 回答
161 浏览

c - 在 CD-ROM 驱动器上随机查找

这适用于 Linux,但不适用于(如我所愿)在 FreeBSD 上:

我想锻炼一下我的 CD-ROM 驱动器,以防止镜头上的灰尘。在 Linux 上,我(以 root 身份)运行我编写的 C 程序,该程序来回搜索,每次都读取一个块。在 FreeBSD 上,这个程序并没有走得太远。我可以打开设备并寻找(比如说)块 1。但是当我尝试读取块时,我收到错误 22(EINVAL)。无论设备是否已安装(-t cd9660),它都会在第 1 块第一次读取时失败。我该如何进行?

完整程序在这里。相关片段: