皆さんは Special Folders (%PROGRAMFILES% とか %USERPROFILE% とか) を扱うときどうしてます?これらの folder の path は registry で管理されていて変更可能なため、hard coding してはいけません。
で、通常は API を使って取得となるわけですが、C/C++ を扱っている人は SHGetFolderPath や SHGetSpecialFolderPath に CSIDL を与えて使っていたと思います。
でも、Windows Vista になってここら辺が変更になってます。Windows Vista では CSIDL の変わりに Known Folders というのができ、KNOWNFOLDERID を利用して取得する SHGetKnownFolderPath という API が加わっています。
実は、SHGetFolderPath は互換性のために残されていて SHGetKnownFolderPath の wrapper なんて書いてあります。それから、Windows Vista で定義されているこの手の folder は KNOWNFOLDERID を利用してしか取得できないものもあります。
ということで、Windows Vista 以降でのみ動作させる application (今のところまずありませんね)は SHGetKnownFolderPath を使ってあげましょう!
<参考> Developing Quality Applications with Known Folders