Разные исполняемые файлы из разных дисков запускают всегда один и тот же код
Я записал 25 CD-ROM с исполняемым файлом AC под названием "Data.exe". Все компакт-диски имели одинаковое имя компакт-диска и одинаковое имя исполняемого файла, но разные исполняемые версии. Вот код:
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]);
Просто чтобы проверить, правильно ли сгорели диски. (Основная идея всего этого состояла в том, чтобы позволить компакт-дискам идентифицировать себя и перенести реальную логику на хост-компьютер, чтобы сделать компакт-диски многоразовыми для моих нужд.)
Проблема в том, что когда я случайно вставляю компакт-диски в компьютер, часто исполняемый файл предыдущего вставленного компакт-диска "зависает" и показывает себя вместо нового.
Например, если я вставляю CD16, я получаю напечатанный 16, затем я вставляю CD20, и я все еще получаю напечатанный 16 из исполняемого файла CD20, также последняя дата редактирования исполняемого файла CD20 остается той же с CD16. После перезагрузки все "сбрасывается", и первый вставленный компакт-диск становится новым "застрявшим". Та же проблема касается всех других дисков.
Это казалось тривиальной задачей, и я наверняка что-то упустил. Где моя ошибка?
1 ответ
Windows выполняет проверку смены носителя на устройстве CD до доступа к нему, чтобы проверить, был ли заменен компакт-диск с момента последнего вызова. Если это так, он отбрасывает все буферизованные блоки кэша и загружает его свежими данными с компакт-диска. Механизм изменения функциональности мультимедиа обычно помещается в тег тома с идентификатором, который сохраняется при форматировании с новым UUID для каждого тома. Объем, ожидаемый идентификатором Windows, отсутствует в форматах ISO-9660, поэтому обычно операционная система следует альтернативному способу определения того, был ли изменен носитель. Попробуйте изменить метку тома, чтобы использовать разные метки на каждом CD-диске, чтобы Windows, вероятно, использовал это для проверки того, что громкость была изменена (недостаточно просто открыть дверцу компакт-диска, так как не на всех дисках CD есть проверка аппаратного обеспечения открытия дверцы).)
Если это так, то достаточно просто прочитать метку тома устройства cd, чем имитировать запуск программы, которая каждый раз выводит другой статус или информацию.