oops - I also meant to ask a slightly philosophical question: do we prefer to use the (eg) APPDATA environment variable, or the "shell" API functions with the equivalent CSIDL_* constants? While the environment variables will usually match what the API returns, there are pros-and-cons to both approaches; I'm inclined to say that as the API is the official way of getting these values, it wins, but a good argument can be made for allowing the values to be overridden in the environment.
oops - I also meant to ask a slightly philosophical question: do we prefer to use the (eg) APPDATA environment variable, or the "shell" API functions with the equivalent CSIDL_* constants? While the environment variables will usually match what the API returns, there are pros-and-cons to both approaches; I'm inclined to say that as the API is the official way of getting these values, it wins, but a good argument can be made for allowing the values to be overridden in the environment.