Бывают ситуации, когда хочется где-то сохранить данные после работы программы, но не хочется иметь внешних файлов-зависимостей, записей в реестре и т.п. Зато можно хранить данные в своем EXE, но Windows не позволяет писать в работающий EXE (NTFS потоки не рассматриваю), и любая попытка будет отвергнута с ошибкой ERROR_ACCESS_DENIED. Но если процесс завершить, то можно из другого процесса уже в него спокойно записывать данные. Вот по этому пути я и решил пойти.
В моем примере я запускаю cmd.exe в приостановленном состоянии, создаю код, который будет внедряться в него и изменять ресурсы нашего EXE, и запускаю его. В свою очередь тот код ждет завершения нашего процесса и по завершении переписывает нужные нам данные (мы их предварительно туда передали) и завершается.
Дабы не мудрить с VB-шным кодом и ограничиться одной формой, я решил внедряемый код сделать на ассемблере, так и проще и меньше кода писать (исходник прилагаю). Т.к. код написан исключительно для ознакомления и тестирования в нем нет синхронизации (например можно запустить копию, прежде чем запишутся данные, или запустить несколько экземпляров), т.к. для примера она не нужна, по хорошему ее надо поставить, но это уже отдельный разговор.