IShellFolder interface is mainly used to manage folders and provide data for clipboard and drag & drop. I suggest to start without using that and implement the tree and list views using standard API functions like
FindNextFile which provide basic information like size, time stamps and attributes.
For additional info like icons and file types use
To get the owner name for a file or directory use
Solutions to resolve reparse points (links and mounts) can be found in the web (open with
CreateFile with flags
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT and call
To use the
IShellFolder interface you have to get the DesktopFolder and use that to bind to other folders:
LPSHELLFOLDER psfFolder = NULL;
LPITEMIDLIST pFolderPIDL = ::ILCreateFromPath(lpszPath);
HRESULT hRes = pDesktopFolder->BindToObject(
CString strName; hRes = psfFolder->ParseDisplayName(
NULL, NULL, strName.GetBuffer(), NULL, &pPIDL, NULL );
As you can see there are lot of tasks where some are quite complex.