Geoff Chappell - Software Analyst
Of the 11 new functions that are exported by name in the first build of SHELL32 version 6.0, the two that name calling points for a RUNDLL32 command line are not documented (and not expected to be), but all the rest at least have been. Though the SHEnableServiceObject function is not documented in the Windows Vista Software Development Kit (SDK) dated January 2007, it was documented in what this study had originally taken as its reference, namely the January 2004 Edition of the MSDN Library on CD. The declaration in SHLOBJ.H from contemporaneous SDK releases has been removed for this same header in the Vista SDK. The function has evidently been withdrawn (from the documentation, not the software).
Of the 47 named exports that were newly added for Windows Vista, two are not documented in the Windows Vista SDK from January 2007, and are marked as such below. One of these, namely SHGetFolderPathEx, is perhaps semi-documented: two pages of the Programming Guide for Windows Vista Game Explorer (in the DirectX SDK dated April 2006) speak of using it, admittedly with a caution that the documentation is “preliminary and is subject to change”.
Function | Remarks |
---|---|
Activate_RunDLL | discontinued in Windows Vista |
AppCompat_RunDLLW | |
AssocCreateForClasses | begins in Windows Vista |
AssocGetDetailsOfPropKey | begins in Windows Vista |
ILLoadFromStreamEx | begins in Windows Vista |
InitNetworkAddressControl | begins in Windows Vista |
PrepareDiscForBurnRunDllW | begins in Windows Vista |
SHAddDefaultPropertiesByExt | begins in Windows Vista |
SHAssocEnumHandlers | begins in Windows Vista |
SHBindToFolderIDListParent | begins in Windows Vista |
SHBindToFolderIDListParentEx | begins in Windows Vista |
SHBindToObject | begins in Windows Vista |
SHChangeNotifyRegisterThread | begins in Windows Vista |
SHCreateAssociationRegistration | begins in Windows Vista |
SHCreateDataObject | begins in Windows Vista |
SHCreateDefaultContextMenu | begins in Windows Vista |
SHCreateDefaultExtractIcon | begins in Windows Vista |
SHCreateDefaultPropertiesOp | begins in Windows Vista |
SHCreateItemFromIDList | begins in Windows Vista |
SHCreateItemFromParsingName | begins in Windows Vista |
SHCreateItemFromRelativeName | begins in Windows Vista |
SHCreateItemInKnownFolder | begins in Windows Vista |
SHCreateItemWithParent | begins in Windows Vista |
SHCreateQueryCancelAutoPlayMoniker | |
SHCreateShellItem | documented with “Windows 2000” as minimum operating system |
SHCreateShellItemArray | begins in Windows Vista |
SHCreateShellItemArrayFromDataObject | begins in Windows Vista |
SHCreateShellItemArrayFromIDLists | begins in Windows Vista |
SHCreateShellItemArrayFromShellItem | begins in Windows Vista |
Shell_GetCachedImageIndexA | begins in Windows Vista |
Shell_GetCachedImageIndexW | begins in Windows Vista |
SHEnableServiceObject | |
SHEnumerateUnreadMailAccountsW | |
SHEvaluateSystemCommandTemplate | begins in Windows Vista |
SHGetDriveMedia | begins in Windows Vista |
SHGetFolderPathAndSubDirA | documented as requiring “version 5.60 or later” |
SHGetFolderPathAndSubDirW | documented as requiring “version 5.60 or later” |
SHGetFolderPathEx | begins in Windows Vista |
SHGetIDListFromObject | begins in Windows Vista |
SHGetKnownFolderIDList | begins in Windows Vista |
SHGetKnownFolderPath | begins in Windows Vista |
SHGetLocalizedName | begins in Windows Vista |
SHGetNameFromIDList | begins in Windows Vista |
SHGetPathFromIDListEx | begins in Windows Vista |
SHGetPropertyStoreFromIDList | begins in Windows Vista |
SHGetPropertyStoreFromParsingName | begins in Windows Vista |
SHGetStockIconInfo | begins in Windows Vista |
SHGetTemporaryPropertyForItem | begins in Windows Vista |
SHGetUnreadMailCountW | |
SHOpenWithDialog | begins in Windows Vista |
SHParseDisplayName | |
SHQueryUserNotificationState | begins in Windows Vista |
SHRemoveLocalizedName | begins in Windows Vista |
SHSetDefaultProperties | begins in Windows Vista |
SHSetKnownFolderPath | begins in Windows Vista |
SHSetLocalizedName | documented as requiring “version 5.6 or later” |
SHSetTemporaryPropertyForItem | begins in Windows Vista |
SHSetUnreadMailCountW | documented as requiring “version 5.60 or later” |
WaitForExplorerRestartW | begins in Windows Vista |
Starting from Windows XP SP1, SHELL32 exports by name 111 distinct functions that were previously exported only by ordinal. One more function, SHGetImageList, becomes exported also by name starting with Windows XP SP2. Nine functions are retired (as forwards to SHUNIMPL.DLL) in Windows Vista and higher, and therefore revert to being exported only by ordinal.
Almost all these functions were documented contemporaneously as Settlement Program Interfaces. Of these, most are said to require “version 5.0 or later” even though the vast majority predate version 5.0 by several years. In the table below, the phrase “4.0 (NT)” means specifically that a function dates from SHELL32 version 4.0 but only in the NT releases, i.e., in NT 4.0 but not in Windows 95.
A generous interpretation is that the settlement does not require Microsoft to document functions that were used by Middleware only before Windows 2000 and that Microsoft has therefore not troubled to investigate whether functions used by Middleware in Windows 2000 and higher have any earlier availability. Yet even this does not explain how it can be that among the functions that are said to require “version 6.0 or later” there are six that date from the original Windows 95, two from Internet Explorer 4.0 and three from Windows 2000. For one of the functions that actually date from Windows 95, we are told that the minimum operating system is not just Windows XP but specifically Service Pack 1. Conversely, four functions that are not exported until version 6.0 are documented as being available in “version 5.0 or later”. The mill at Microsoft grinds not just slowly, but coarsely.
Function | Ordinal | First Availability | Versions that Export By Name |
---|---|---|---|
CDefFolderMenu_Create | 700 | 4.71 | 6.0 from Windows XP SP1, and higher |
CDefFolderMenu_Create2 | 701 | 4.71 | 6.0 from Windows XP SP1, and higher |
CallCPLEntry16 | 166 | 4.0 | 6.0 from Windows XP SP1 before Windows Vista |
DAD_AutoScroll | 129 | 4.0 | 6.0 from Windows XP SP1, and higher |
DAD_DragEnterEx | 131 | 4.0 | 6.0 from Windows XP SP1, and higher |
DAD_DragEnterEx2 | 22 | 5.0 | 6.0 from Windows XP SP1, and higher |
DAD_DragLeave | 132 | 4.0 | 6.0 from Windows XP SP1, and higher |
DAD_DragMove | 134 | 4.0 | 6.0 from Windows XP SP1, and higher |
DAD_SetDragImage | 136 | 4.0 | 6.0 from Windows XP SP1, and higher |
DAD_ShowDragImage | 137 | 4.0 | 6.0 from Windows XP SP1, and higher |
DriveType | 64 | 4.0 | 6.0 from Windows XP SP1, and higher |
GetFileNameFromBrowse | 63 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILAppendID | 154 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILClone | 18 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILCloneFirst | 19 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILCombine | 25 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILCreateFromPath | 157 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILCreateFromPathA | 189 | 4.71 | 6.0 from Windows XP SP1, and higher |
ILCreateFromPathW | 190 | 4.71 | 6.0 from Windows XP SP1, and higher |
ILFindChild | 24 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILFindLastID | 16 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILFree | 155 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILGetNext | 153 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILGetSize | 152 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILIsEqual | 21 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILIsParent | 23 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILLoadFromStream | 26 | 4.0 | 6.0 from Windows XP SP1 before Windows Vista |
ILRemoveLastID | 17 | 4.0 | 6.0 from Windows XP SP1, and higher |
ILSaveToStream | 27 | 4.0 | 6.0 from Windows XP SP1, and higher |
IsLFNDrive | 119 | 4.0 | 6.0 from Windows XP SP1, and higher |
IsLFNDriveA | 41 | 4.71 | 6.0 from Windows XP SP1, and higher |
IsLFNDriveW | 42 | 4.71 | 6.0 from Windows XP SP1, and higher |
IsNetDrive | 66 | 4.0 | 6.0 from Windows XP SP1, and higher |
IsUserAnAdmin | 680 | 4.0 (NT) | 6.0 from Windows XP SP1, and higher |
OpenRegStream | 85 | 4.0 | 6.0 from Windows XP SP1, and higher |
PathCleanupSpec | 171 | 4.0 | 6.0 from Windows XP SP1, and higher |
PathGetShortPath | 92 | 4.0 | 6.0 from Windows XP SP1, and higher |
PathIsExe | 43 | 4.0 | 6.0 from Windows XP SP1, and higher |
PathIsSlowA | 240 | 5.0 | 6.0 from Windows XP SP1, and higher |
PathIsSlowW | 239 | 5.0 | 6.0 from Windows XP SP1, and higher |
PathMakeUniqueName | 47 | 4.0 | 6.0 from Windows XP SP1, and higher |
PathProcessCommand | 653 | 4.0 (NT) | 6.0 from Windows XP SP1 before Windows Vista |
PathQualify | 49 | 4.0 | 6.0 from Windows XP SP1, and higher |
PathResolve | 51 | 4.0 | 6.0 from Windows XP SP1, and higher |
PathYetAnotherMakeUniqueName | 75 | 4.0 | 6.0 from Windows XP SP1, and higher |
PickIconDlg | 62 | 4.0 | 6.0 from Windows XP SP1, and higher |
PifMgr_CloseProperties | 13 | 4.0 | 6.0 from Windows XP SP1, and higher |
PifMgr_GetProperties | 10 | 4.0 | 6.0 from Windows XP SP1, and higher |
PifMgr_OpenProperties | 9 | 4.0 | 6.0 from Windows XP SP1, and higher |
PifMgr_SetProperties | 11 | 4.0 | 6.0 from Windows XP SP1, and higher |
ReadCabinetState | 654 | 4.71 (see note) | 6.0 from Windows XP SP1, and higher |
RealDriveType | 524 | 4.0 (NT) | 6.0 from Windows XP SP1, and higher |
RestartDialog | 59 | 4.0 | 6.0 from Windows XP SP1, and higher |
RestartDialogEx | 730 | 6.0 | 6.0 from Windows XP SP1, and higher |
SHAddFromPropSheetExtArray | 167 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHAlloc | 196 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHAllocShared | 520 | 4.0 (NT) | 6.0 from Windows XP SP1 before Windows Vista |
SHCLSIDFromString | 147 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHChangeNotification_Lock | 644 | 4.0 (NT) | 6.0 from Windows XP SP1, and higher |
SHChangeNotification_Unlock | 645 | 4.0 (NT) | 6.0 from Windows XP SP1, and higher |
SHChangeNotifyDeregister | 4 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHChangeNotifyRegister | 2 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHCloneSpecialIDList | 89 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHCoCreateInstance | 102 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHCreateDirectory | 165 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHCreateFileExtractIconW | 743 | 6.0 | 6.0 from Windows XP SP1, and higher |
SHCreatePropSheetExtArray | 168 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHCreateShellFolderView | 256 | 4.71 | 6.0 from Windows XP SP1, and higher |
SHCreateShellFolderViewEx | 174 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHCreateStdEnumFmtEtc | 74 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHDefExtractIconA | 3 | 4.71 | 6.0 from Windows XP SP1, and higher |
SHDefExtractIconW | 6 | 4.71 | 6.0 from Windows XP SP1, and higher |
SHDestroyPropSheetExtArray | 169 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHDoDragDrop | 88 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHFindFiles | 90 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHFind_InitMenuPopup | 149 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHFlushClipboard | 121 | 4.0 | 6.0 from Windows XP SP1 before Windows Vista |
SHFlushSFCache | 526 | 4.71 | 6.0 from Windows XP SP1, and higher |
SHFree | 195 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHFreeShared | 523 | 4.0 (NT) | 6.0 from Windows XP SP1 before Windows Vista |
SHGetAttributesFromDataObject | 750 | 6.0 | 6.0 from Windows XP SP1, and higher |
SHGetImageList | 727 | 6.0 | 6.0 from Windows XP SP2, and higher |
SHGetRealIDL | 98 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHGetSetFolderCustomSettingsW | 709 | 5.0 | 6.0 from Windows XP SP1, and higher |
SHGetSetSettings | 68 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHGetShellStyleHInstance | 749 | 6.0 | 6.0 from Windows XP SP1 before Windows Vista |
SHHandleUpdateImage | 193 | 4.71 | 6.0 from Windows XP SP1, and higher |
SHILCreateFromPath | 28 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHLimitInputEdit | 747 | 6.0 | 6.0 from Windows XP SP1, and higher |
SHLoadOLE | 151 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHLockShared | 521 | 4.0 (NT) | 6.0 from Windows XP SP1, and higher |
SHMapIDListToImageListIndexAsync | 148 | 6.0 | 6.0 from Windows XP SP1, and higher |
SHMapPIDLToSystemImageListIndex | 77 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHMultiFileProperties | 716 | 5.0 | 6.0 from Windows XP SP1, and higher |
SHObjectProperties | 178 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHOpenPropSheetW | 80 | 4.71 | 6.0 from Windows XP SP1, and higher |
SHPropStgCreate | 685 | 5.0 | 6.0 from Windows XP SP1, and higher |
SHPropStgReadMultiple | 688 | 5.0 | 6.0 from Windows XP SP1, and higher |
SHPropStgWriteMultiple | 689 | 5.0 | 6.0 from Windows XP SP1, and higher |
SHReplaceFromPropSheetExtArray | 170 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHRestricted | 100 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHRunControlPanel | 161 | 4.0 | 6.0 from Windows XP SP1 before Windows Vista |
SHSetInstanceExplorer | 176 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHShellFolderView_Message | 73 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHSimpleIDListFromPath | 162 | 4.0 | 6.0 from Windows XP SP1, and higher |
SHStartNetConnectionDialogW | 14 | 4.71 | 6.0 from Windows XP SP1, and higher |
SHTestTokenMembership | 245 | 6.0 | 6.0 from Windows XP SP1, and higher |
SHUnlockShared | 522 | 4.0 (NT) | 6.0 from Windows XP SP1 before Windows Vista |
SHUpdateImageA | 191 | 4.71 | 6.0 from Windows XP SP1, and higher |
SHUpdateImageW | 192 | 4.71 | 6.0 from Windows XP SP1, and higher |
SHValidateUNC | 173 | 4.0 | 6.0 from Windows XP SP1, and higher |
ShellMessageBoxA | 183 | 4.0 | 6.0 from Windows XP SP1, and higher |
ShellMessageBoxW | 182 | 4.0 (NT) | 6.0 from Windows XP SP1, and higher |
Shell_GetCachedImageIndex | 72 | 4.0 | 6.0 from Windows XP SP1, and higher |
Shell_GetImageLists | 71 | 4.0 | 6.0 from Windows XP SP1, and higher |
Shell_MergeMenus | 67 | 4.0 | 6.0 from Windows XP SP1, and higher |
SignalFileOpen | 103 | 4.0 | 6.0 from Windows XP SP1, and higher |
Win32DeleteFile | 164 | 4.0 | 6.0 from Windows XP SP1, and higher |
WriteCabinetState | 652 | 4.0 (NT) | 6.0 from Windows XP SP1, and higher |
The function ReadCabinetState arguably dates from the NT implementations of version 4.0. As ordinal 654, it dates only from version 4.71, but a ReadCabinetState existed earlier as ordinal 651 and is now OldReadCabinetState.