Anich Gregor wrote:
Doesn't the registry expand strings of type
REG_EXPAND_SZ with environment
vars, and leaves REG_SZ untouched?
no it doesn't. It's the callers responsibility. The only case where the
registry code (advapi only) touches the data is when setting or querying
a REG_SZ or REG_EXPAND_SZ with an ansi (A) function, then it converts
the data from unicode to ansi or vice versa and makes it null-terminated
if necessary. But that's about it.
But still it tells the program which reads
the key wether it is reading REG_SZ or REG_EXPAND_SZ and some lazy coders
seem to rely on reading REG_SZ while we want the keys to be expanded so we
have to make them REG_EXPAND_SZ which is why the programs fail?
That's not necessarily due to laziness of some coders. The program or
library is fully responsible for processing the data it received from
the registry - there's nothing we can do about it except copy bad design
(as in registry values).
So if we had another type, REG_FOO, we could make our
registry code expand
environment vars for this type, but return REG_SZ as type to the program
instead of REG_FOO, or would that not work/be a bad idea?
That is a bad idea, you'd have to modify advapi to do stuff it shouldn't
do. now imagine a driver or program uses the ntoskrnl/ntdll versions
directly...
Regards,
Thomas