Znajdowanie „prawdziwego” folderu danych aplikacji użytkownika systemu Windows?

Mam aplikację Delphi 6, która, podobnie jak większość aplikacji Windows, odczytuje / zapisuje dane w folderze „lokalne dane aplikacji” użytkownika. Używam poniższego kodu do określenia tego folderu. Do tej pory ten kod działał dla większości moich użytkowników. Napotkałem użytkownika, którego lokalne dane aplikacji nie znajdują się w oczekiwanym folderze:

C:\Users\Bob\AppData\Roaming\

Zwykle lokalny folder danych aplikacji postanawia:

C:\Documents and Settings\Bob\Application Data\

W tej szczególnej sytuacji tego użytkownika dziwne jest to, że kilka kluczy rejestru normalnie znajdujących się w HKEY_LOCAL_MACHINE znajduje się w HKEY_CURRENT_USER. Działają w systemie Windows 7.

Czy z powodu braku lepszego słowa istnieje sposób na uzyskanie „prawdziwych” danych aplikacji dla użytkownika, dzięki czemu mogę lepiej poruszać się w tej sytuacji? Jeśli jest to kwestia inteligentnego wyboru między specjalnymi folderami CSIDL_APPDATA, CSIDL_COMMON_APPDATA i CSIDL_LOCAL_APPDATA, jaka jest logika takiego postępowania? Jak wiesz, szukam uniwersalnej funkcji, która może wykorzenić właściwy folder danych aplikacji, niezależnie od wersji systemu Windows, na której działa użytkownik, lub ich specyficznej konfiguracji na komputerze.

Znalazłem tego posta przepełnienia stosu, który wydaje się mieć odpowiedź, ale używa funkcji z biblioteki .NET i używam Delphi 6. Jeśli to rozwiązanie odpowiada na moje pytanie, czy ktoś może mi powiedzieć, jak szybko to zreplikować w Delphi:

Jak uzyskać ścieżkę do folderu „Dane aplikacji” bieżącego użytkownika?

// Function to get the app data special folder.
function GetAppdataFolder: string;
begin
   Result := GetSpecialFolderLocation(CSIDL_APPDATA);
end;

questionAnswers(3)

yourAnswerToTheQuestion