Цитата Iska:
Проблем не будет ровно до тех пор, пока какое-нибудь приложение не попробует прочитать его именно как REG_EXPAND_SZ, и внезапно обнаружит, что там такого типа нет. »
|
И внезапно прочитает строку, не заметив вообще ни каких проблем для себя.
Просто при чтении значения параметра программа получит от системы ответ, что тип данных - REG_SZ а не REG_EXPAND_SZ. Программа может это проигнорировать, или нет, на своё усмотрение.
Можно для сабжевой строки установить тип данных хоть REG_BINARY, программы этого могут не заметить.
Флаг REG_EXPAND_SZ даёт самой программе "сигнал", что в строке может содержаться не преобразованная переменная окружения, которую необходимо дополнительно преобразовать. И дальше именно сама программа должна решить, что делать дальше с такой строкой.
Если говорить о физическом смысле типов данных в значениях параметров реестра с точки зрения самой системы, то
нет никакой ложки никаких типов данных не существует. Значение параметра реестра - это просто байтовый массив любой длинны с любым содержимым.
То, что мы называем "тип данных" (REG_SZ, REG_EXPAND_SZ, REG_BINARY.........) - это просто флаг, говорящий программе, что данные структурированы определённым образом.