¿Encontrar la carpeta de datos de la aplicación "verdadera" de un usuario de Windows?

Tengo una aplicación Delphi 6 que, como la mayoría de las aplicaciones de Windows, lee / escribe datos en la carpeta de "datos de aplicaciones locales" del usuario. Yo uso el siguiente código para determinar esa carpeta. Hasta ahora, ese código funcionó para la mayoría de mis usuarios. Me he encontrado con un usuario cuyos datos de la aplicación local no están en la carpeta esperada:

C:\Users\Bob\AppData\Roaming\

Generalmente la carpeta de datos de la aplicación local se resuelve en:

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

Lo extraño de la situación particular de este usuario es que varias claves de registro que normalmente se encuentran en HKEY_LOCAL_MACHINE se encuentran realmente en HKEY_CURRENT_USER. Se están ejecutando en Windows 7.

A falta de una palabra mejor, ¿hay una manera de obtener los datos de aplicación "verdaderos" para un usuario para que pueda navegar mejor esta situación? Si se trata de elegir de forma inteligente entre las carpetas especiales CSIDL_APPDATA, CSIDL_COMMON_APPDATA y CSIDL_LOCAL_APPDATA, ¿cuál es la lógica para hacerlo? Como puede ver, estoy buscando una función multipropósito que pueda eliminar la carpeta de datos de la aplicación correcta, independientemente de la versión de Windows que esté ejecutando el usuario o la configuración específica de su PC.

Encontré esta publicación de desbordamiento de pila que parece tener la respuesta pero está usando la función de la biblioteca .NET y estoy usando Delphi 6. Si esta solución responde a mi pregunta, ¿puede alguien decirme una manera rápida de replicarla en Delphi?

¿Cómo puedo obtener la ruta de la carpeta "Datos de aplicación" del usuario actual?

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta