来自不同 cd 的不同可执行文件 运行 总是相同的代码

Different executables from different cds run always the same code

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

CD0

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 以使 cd 可重复使用以满足我的需要。)


问题是,当我随机将 cd 插入 pc 时,以前插入的 cd 的可执行文件经常 "stuck" 并显示自己而不是新的。

例如,如果我插入 CD16,我打印 16,然后我插入 CD20,我仍然从 CD20 可执行文件打印 16,而且 CD20 可执行文件的最后编辑日期仍然是来自 CD16 的日期。重新启动后,一切都变成 "reset",插入的第一张 CD 变成新的 "stuck"。同样的问题适用于所有其他 CD。

这似乎是一项微不足道的任务,我肯定遗漏了什么。我的错误在哪里?

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

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