기존 XP에서는 SHGetFolderPath 함수를 이용하면 가능했지만 Vista에서는 SHGetKnownFolderPath 함수를 사용해야 한다. 아직 Compatibility를 위해서 기존 함수도 지원한다고 하지만 Recommand가 아니니 바꿔야 잠재된 문제를 앱앨 수 있겠죠.소스 1.
if (_isVista) {
    WCHAR   *pSavePath = NULL;
    HMODULE shell32module = GetModuleHandle("shell32.dll");
        
    // Defined in the platform SDK for Vista
    const DWORD KF_FLAG_CREATE = 0x00008000;
    const GUID FOLDERID_LocalAppData ={0xF1B32785, 0x6FBA,  0x4FCF,
                       {0x9D, 0x55, 0x7B, 0x8E, 0x7F, 0x15, 0x70, 0x91}};
SHGetKnownFolderPathProc SHGKFPfunction =   reinterpret_cast<SHGetKnownFolderPathProc>(
    GetProcAddress(shell32module, "SHGetKnownFolderPath"));
    HRESULT hr = SHGKFPfunction(FOLDERID_LocalAppData,     KF_FLAG_CREATE, NULL, &pSavePath);
}[/CODE]

소스 2.
[CODE]#include <strsafe.h>
typedef UINT (CALLBACK* LPFNDLLFUNC)(GUID& rfid,DWORD dwFlags,HANDLE hToken,PWSTR* ppszPath);
TCHAR pathBuf[MAX_PATH] = _T("");
HRESULT hr;
size_t len;
PWSTR 
Read More