1

我用名为“Data.exe”的 ac 可执行文件刻录了 25 张 cd-rom。所有 cd 都具有相同的 CD 名称和相同的可执行文件名称,但可执行文件版本不同。这是代码:

光盘0

system("C:\\_folder\\_folder.exe 0");

CD1

system("C:\\_folder\\_folder.exe 1");

.....等等.....

CD24

system("C:\\_folder\\_folder.exe 24");

“C:\_folder\_folder.exe”代码是

printf(argv[1]);

只是为了检查CD是否正确刻录。(所有这一切背后的核心思想是让 cds 识别自己并将真正的逻辑转移到托管 pc 上,以使 cds 可重复使用以满足我的需要。)


问题是,当我将 cd 随机插入 pc 时,以前插入的 cd 的可执行文件通常会“卡住”并显示自己而不是新的。

例如,如果我插入 CD16,我会打印 16,然后我插入 CD20,我仍然会从 CD20 可执行文件中打印 16,而且 CD20 可执行文件的最后编辑日期仍然是来自 CD16 的日期。重新启动后,一切都会“重置”,插入的第一张 cd 成为新的“卡住”的。同样的问题适用于所有其他 cd。

这似乎是一项微不足道的任务,我肯定错过了一些东西。我的错误在哪里?

4

1 回答 1

2

Windows 在访问 CD 单元之前对其进行媒体更改测试,以检查 CD 是否已从上次调用中更改。如果是这样,它会丢弃所有缓冲的缓存块并使用 CD 中的新数据重新加载它。媒体更改功能的机制通常放置在存储在格式化上的卷 ID 标记上,每个卷都有一个新的 uuid。windows id 所期望的卷在 ISO-9660 格式中不存在,因此通常操作系统会采用另一种方法来检测媒体是否已更改。尝试更改卷标,在每个 CD 磁盘上使用不同的卷标,因此 windows 可能会使用它来检查卷是否已更改(仅打开 cd 门是不够的,因为并非所有 cd 单元都有开门硬件检查)

如果是这样的话,那么仅仅读取 cd 单元的卷标就足够了,而不是模拟运行一个每次输出不同状态或信息的程序。

于 2017-07-10T11:40:03.087 回答