デスクトップのアイコンをツリービューに表示させたいのですが、
上手くいきません。違うアイコンが表示されてしまいます。

// アイテムIDリストを取得
LPITEMIDLISTpidl;
::SHGetSpecialFolderLocation( NULL, CSIDL_DESKTOPDIRECTORY, &pidl );
// イメージリストを作成
HIMAGELIST himagelist;
SHFILEINFO fileinfo;
himagelist = (HIMAGELIST)::SHGetFileInfo( (LPCSTR)pIDList, FILE_ATTRIBUTE_DIRECTORY, &fileinfo, sizeof(SHFILEINFO),
                  SHGFI_PIDL|SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_SMALLICON|SHGFI_SYSICONINDEX );
m_ImageList.Attach( himagelist );
CTreeCtrl &ctrl = GetTreeCtrl();
ctrl.SetImageList( &m_ImageList, TVSIL_NORMAL );

// ツリービューのルートにデスクトップを追加
TVINSERTSTRUCT TvItem;
TvItem.hParent = ctrl.GetRootItem();
TvItem.hInsertAfter = TVI_ROOT;
TvItem.item.mask = TVIF_CHILDREN|TVIF_TEXT|TVIF_IMAGE;
TvItem.item.pszText = pLabel;
TvItem.item.iImage = fileinfo.iIcon;
ctrl.InsertItem(&TvItem);

こんな感じのコードですけど、どこが悪いのでしょうか?