来自不同cds的不同可执行文件始终运行相同的代码

时间:2017-07-08 10:01:02

标签: c windows cd-rom

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

CD0

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

CD1

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

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

CD24

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

" C:\ _文件夹\ _folder.exe"代码是

printf(argv[1]);

只是检查cds是否正确刻录。 (所有这些背后的核心思想是让cds识别自己并将真实逻辑移动到托管pc,以使cds可以根据我的需要重复使用。)

问题在于,当我随机将cds插入到PC中时,通常前面插入的cd的可执行文件会被卡住"并显示自己而不是新的。

例如,如果我插入CD16,我打印16,然后我插入CD20,我仍然从CD20可执行文件打印16,CD20可执行文件的最后编辑日期仍然是CD16的编辑日期。重启后,所有内容都会被重置"插入的第一张CD成为新的"卡住了#34;一。同样的问题适用于所有其他cds。

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

1 个答案:

答案 0 :(得分:2)

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

如果是这种情况,那么只需读取cd单元的卷标就足以模拟运行每次输出不同状态或信息的程序。