public static IShellFolder GetFolderImpl(this IntPtr pidl, ref PidlFolderData data, SBSP wFlags) { IShellFolder result = null; int hr = 0; IntPtr pidlTmp = IntPtr.Zero; var folderTmp = data.folderTmp; var currentAbsolutePidl = data.currentAbsolutePidl; var folderTmpPtr = data.folderTmpPtr; var currentFolder = data.currentFolder; IShellFolder desktopFolder = PidlFolderData.DesktopFolder; var desktopFolderPidl = PidlFolderData.DesktopFolderPidl; // Check to see if we have a desktop pidl, relative pidl or absolite pidl. if (Shell32.ILIsEqual(pidl, desktopFolderPidl)) { // The provided PIDL is the desktop folder. pidlTmp = Shell32.ILClone(desktopFolderPidl); folderTmp = desktopFolder; } else if ((wFlags & SBSP.SBSP_RELATIVE) != 0) { // SBSP_RELATIVE - pidl is relative from the current folder if ((hr = currentFolder.BindToObject(pidl, IntPtr.Zero, ref Shell32.IID_IShellFolder, out folderTmpPtr)) != WinError.S_OK) { return(result); // hr; } pidlTmp = Shell32.ILCombine(currentAbsolutePidl, pidl); folderTmp = (IShellFolder)Marshal.GetObjectForIUnknown(folderTmpPtr); } else { // SBSP_ABSOLUTE - pidl is an absolute pidl (relative from desktop) PidlClone pidlClone = PidlClone.Of(pidl); folderTmp = GetPidlCloneFolder(pidlClone); pidlTmp = pidlClone.Handle; } if (folderTmp == null) { Shell32.ILFree(pidlTmp); return(result); // WinError.E_FAIL; } result = folderTmp; return(result); }