我用名为“Data.exe”的 ac 可执行文件刻录了 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是否正确刻录。(所有这一切背后的核心思想是让 cd 识别自己,并将真正的逻辑移动到托管 pc 以使 cd 可重复使用以满足我的需要。)
问题是,当我将 cd 随机插入 pc 时,通常之前插入的 cd 的可执行文件会“卡住”并显示自己而不是新的。
例如,如果我插入 CD16,我会打印 16,然后我插入 CD20 并且我仍然从 CD20 可执行文件中打印 16,而且 CD20 可执行文件的最后编辑日期仍然是来自 CD16 的日期。重新启动后,一切都会“重置”,插入的第一张 CD 成为新的“卡住”CD。同样的问题适用于所有其他 CD。
这似乎是一项微不足道的任务,我肯定会遗漏一些东西。我的错误在哪里?
在访问 CD 单元之前,Windows 会对其进行媒体更改测试,以检查 CD 是否在上次调用后已更改。如果是这样,它会丢弃所有缓冲的缓存块,并使用 CD 中的新数据重新加载它。媒体更改功能的机制通常放在 volume-id 标签上,该标签存储在格式化时,每个卷都有一个新的 uuid。Windows id 预期的音量在 ISO-9660 格式中不存在,因此通常操作系统会采用替代方法来检测媒体是否已更改。尝试更改卷标,在每个 CD 盘上使用不同的卷标,因此 windows 可能使用它来检查卷是否已更改(仅打开 cd 门是不够的,因为并非所有 cd 单元都有开门硬件检查)
如果是这种情况,那么仅读取 cd 单元的卷标就足以模拟运行每次输出不同状态或信息的程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句