IPinnedList

IID_IPinnedList {C3C6EB6D-C837-4EAE-B172-5FEC52A2A4FD} version 6.0
{BBD20037-BC0E-42F1-913F-E2936BB0EA0C} version 6.1

The original IPinnedList methods are (as ordered in the virtual function table after the IUnknown methods):

Offset Method
0x0C EnumObjects
0x10 Modify
0x14 GetChangeCount
0x18 IsPinnable
0x1C Resolve
0x20 IsPinned

with prototypes:

HRESULT EnumObjects (IEnumFullIDList **);
HRESULT Modify (PCIDLIST_ABSOLUTE, PCIDLIST_ABSOLUTE);
HRESULT GetChangeCount (ULONG *);
HRESULT IsPinnable (IDataObject *, ULONG, PIDLIST_ABSOLUTE *);
HRESULT Resolve (HWND, ULONG, PCIDLIST_ABSOLUTE, PIDLIST_ABSOLUTE *);
HRESULT IsPinned (PCIDLIST_ABSOLUTE);

The revision for Windows 7 changes the interface both by inserting methods and adding new ones:

Offset Method
0x0C EnumObjects
0x10 Modify
0x14 GetChangeCount
0x18 GetPinnableInfo
0x1C IsPinnable
0x20 Resolve
0x24 IsPinned
0x28 GetPinnedItem
0x2C GetAppIDForPinnedItem
0x30 ItemChangeNotify
0x34 UpdateForRemovedItemsAsNecessary

with prototypes (where new or changed):

HRESULT GetPinnableInfo (IDataObject *, PINNABLEFLAG, IShellItem2 **, IShellItem **, PWSTR *, INT *);
HRESULT IsPinnable (IDataObject *, PINNABLEFLAG);
HRESULT GetPinnedItem (PCIDLIST_ABSOLUTE, PIDLIST_ABSOLUTE *);
HRESULT GetAppIDForPinnedItem (PCIDLIST_ABSOLUTE, PWSTR *);
HRESULT ItemChangeNotify (PCIDLIST_ABSOLUTE, PCIDLIST_ABSOLUTE);
HRESULT UpdateForRemovedItemsAsNecessary (VOID);

in which PINNABLEFLAG is an enumeration.

Availability

The IPinnedList interface is implemented by SHELL32 in the version 6.0 from Windows Vista, and higher.

Though new for Windows Vista, this interface is not documented by Microsoft in the January 2007 edition of the Software Development Kit (SDK) for Windows Vista.