SHLWAPI 4.70 Named Exports

SHLWAPI started its existence, for Internet Explorer 3.0 and Windows 95 OSR2 in 1996, exporting 75 functions (not counting ANSI and Unicode variations as distinct). All but one of these original functions are exported by name.

Of these named exports, all but one are documented in the January 2004 edition of the MSDN Library on CD. The exception is trivial: it is named SHDeleteOrphanKey, with ANSI and Unicode forms, but is (originally) just an alias for the documented function SHDeleteEmptyKey.

Though all these named exports are documented, none are documented as having been available so early. One is documented as requiring “version 5.0 or later”. All the others are documented as requiring “version 4.71 or later”, which misses at least a year of earlier existence. This is at least consistent with the time it took Microsoft to get the functions documented: most can be found in the January 1998 Platform SDK, but none in the January 1997 Win32 SDK.

This inaccuracy over which SHLWAPI version first exported these functions is compounded by an even earlier existence that many of these functions have as exports from other modules. In this sense, some of these functions date from at least a year before any public release of SHLWAPI (and thus two years earlier than stated in Microsoft’s documentation).

Many functions whose names start with “Str” date from the earliest known COMCTL32 versions (indeed, from Win32s, let alone from Windows NT 3.51 and the original Windows 95). More were added in COMCTL32 version 4.70 (Windows NT 4.0 and Windows 95 OSR2). COMCTL32 retains its own implementations of them all the way up to but not including Windows Vista, and always exports them only by ordinal.

A slightly different mix of functions whose names start with “Str” also appeared as named exports from early SHELL32 versions (again, for Win32s, Windows NT 3.51 and Windows 95). SHELL32 exports them still, but its implementations have long been simple jumps to the code in SHLWAPI.

A good proportion of the functions whose names start with “Path” first appeared as ordinal-only exports from SHELL32 version 4.00, without an A or W suffix, but implemented in terms of ANSI characters for the Windows releases and then Unicode for the NT releases. They continue to be exported from SHELL32 to this day, by redirecting to implementations in SHLWAPI (sometimes by explicit forwarding but mostly just by jumping).

Function Remarks
DllGetVersion  
IntlStrEqWorkerA also ordinal 376 in COMCTL32;
documented as requiring “version 5.0 or later”
IntlStrEqWorkerW also ordinal 377 in COMCTL32;
documented as requiring “version 5.0 or later”
PathAddBackslashA also ordinal 32 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathAddBackslashW also ordinal 32 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathAddExtensionA documented as requiring “version 4.71 or later”
PathAddExtensionW documented as requiring “version 4.71 or later”
PathAppendA also ordinal 36 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathAppendW also ordinal 36 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathBuildRootA also ordinal 30 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathBuildRootW also ordinal 30 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathCanonicalizeA documented as requiring “version 4.71 or later”
PathCanonicalizeW documented as requiring “version 4.71 or later”
PathCombineA also ordinal 37 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathCombineW also ordinal 37 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathCommonPrefixA documented as requiring “version 4.71 or later”
PathCommonPrefixW documented as requiring “version 4.71 or later”
PathCompactPathA documented as requiring “version 4.71 or later”
PathCompactPathW documented as requiring “version 4.71 or later”
PathCompactPathExA documented as requiring “version 4.71 or later”
PathCompactPathExW documented as requiring “version 4.71 or later”
PathFileExistsA also ordinal 45 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathFileExistsW also ordinal 45 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathFindExtensionA also ordinal 31 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathFindExtensionW also ordinal 31 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathFindFileNameA also ordinal 34 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathFindFileNameW also ordinal 34 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathFindNextComponentA documented as requiring “version 4.71 or later”
PathFindNextComponentW documented as requiring “version 4.71 or later”
PathFindOnPathA also ordinal 145 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathFindOnPathW also ordinal 145 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathGetArgsA also ordinal 52 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathGetArgsW also ordinal 52 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathGetDriveNumberA also ordinal 57 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathGetDriveNumberW also ordinal 57 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathIsDirectoryA also ordinal 159 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathIsDirectoryW also ordinal 159 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathIsFileSpecA documented as requiring “version 4.71 or later”
PathIsFileSpecW documented as requiring “version 4.71 or later”
PathIsPrefixA documented as requiring “version 4.71 or later”
PathIsPrefixW documented as requiring “version 4.71 or later”
PathIsRelativeA also ordinal 40 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathIsRelativeW also ordinal 40 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathIsRootA also ordinal 29 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathIsRootW also ordinal 29 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathIsSameRootA also ordinal 650 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathIsSameRootW also ordinal 650 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathIsUNCA also ordinal 39 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathIsUNCW also ordinal 39 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathIsURLA also ordinal 252 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathIsURLW also ordinal 252 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathMakePrettyA documented as requiring “version 4.71 or later”
PathMakePrettyW documented as requiring “version 4.71 or later”
PathMatchSpecA also ordinal 46 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathMatchSpecW also ordinal 46 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathParseIconLocationA also ordinal 249 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathParseIconLocationW also ordinal 249 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathQuoteSpacesA also ordinal 55 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathQuoteSpacesW also ordinal 55 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathRelativePathToA documented as requiring “version 4.71 or later”
PathRelativePathToW documented as requiring “version 4.71 or later”
PathRemoveArgsA also ordinal 251 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathRemoveArgsW also ordinal 251 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathRemoveBackslashA documented as requiring “version 4.71 or later”
PathRemoveBackslashW documented as requiring “version 4.71 or later”
PathRemoveBlanksA also ordinal 33 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathRemoveBlanksW also ordinal 33 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathRemoveExtensionA also ordinal 250 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathRemoveExtensionW also ordinal 250 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathRemoveFileSpecA also ordinal 35 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathRemoveFileSpecW also ordinal 35 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathRenameExtensionA documented as requiring “version 4.71 or later”
PathRenameExtensionW documented as requiring “version 4.71 or later”
PathSearchAndQualifyA documented as requiring “version 4.71 or later”
PathSearchAndQualifyW documented as requiring “version 4.71 or later”
PathSetDlgItemPathA also ordinal 48 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathSetDlgItemPathW also ordinal 48 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathSkipRootA documented as requiring “version 4.71 or later”
PathSkipRootW documented as requiring “version 4.71 or later”
PathStripPathA also ordinal 38 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathStripPathW also ordinal 38 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathStripToRootA also ordinal 50 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathStripToRootW also ordinal 50 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
PathUnquoteSpacesA also ordinal 56 in SHELL32 (Windows-only);
documented as requiring “version 4.71 or later”
PathUnquoteSpacesW also ordinal 56 in SHELL32 (NT-only);
documented as requiring “version 4.71 or later”
SHDeleteEmptyKeyA documented as requiring “version 4.71 or later”
SHDeleteEmptyKeyW documented as requiring “version 4.71 or later”
SHDeleteKeyA documented as requiring “version 4.71 or later”
SHDeleteKeyW documented as requiring “version 4.71 or later”
SHDeleteOrphanKeyA alias of SHDeleteEmptyKeyA before 6.0 from before Windows Vista;
forwarded to ADVAPI32 function RegDeleteKeyA in 6.0 from Windows Vista;
implemented as call to ADVAPI32 function RegDeleteKeyExA with AIT logging in 6.0 from Windows 7
SHDeleteOrphanKeyW alias of SHDeleteEmptyKeyW before 6.0 from before Windows Vista;
forwarded to ADVAPI32 function RegDeleteKeyW in 6.0 from Windows Vista;
implemented as call to ADVAPI32 function RegDeleteKeyExW with AIT logging in 6.0 from Windows 7
SHDeleteValueA documented as requiring “version 4.71 or later”
SHDeleteValueW documented as requiring “version 4.71 or later”
SHGetValueA documented as requiring “version 4.71 or later”
SHGetValueW documented as requiring “version 4.71 or later”
SHQueryValueExA documented as requiring “version 4.71 or later”
SHQueryValueExW documented as requiring “version 4.71 or later”
SHSetValueA documented as requiring “version 4.71 or later”
SHSetValueW documented as requiring “version 4.71 or later”
StrCatW documented as requiring “version 4.71 or later”
StrChrA also ordinal 350 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrChrW also ordinal 358 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrChrIA also ordinal 366 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrChrIW also ordinal 367 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrCmpW documented as requiring “version 4.71 or later”
StrCmpIW documented as requiring “version 4.71 or later”
StrCmpNA also ordinal 352 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrCmpNW also ordinal 360 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrCmpNIA also ordinal 353 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrCmpNIW also ordinal 361 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrCpyW documented as requiring “version 4.71 or later”
StrCpyNW also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrCSpnA also ordinal 356 in COMCTL32;
documented as requiring “version 4.71 or later”
StrCSpnW also ordinal 364 in COMCTL32;
documented as requiring “version 4.71 or later”
StrCSpnIA also ordinal 374 in COMCTL32;
documented as requiring “version 4.71 or later”
StrCSpnIW also ordinal 375 in COMCTL32;
documented as requiring “version 4.71 or later”
StrDupA documented as requiring “version 4.71 or later”
StrDupW documented as requiring “version 4.71 or later”
StrFormatByteSizeA documented as requiring “version 4.71 or later”
StrFormatByteSizeW documented as requiring “version 4.71 or later”
StrFromTimeIntervalA documented as requiring “version 4.71 or later”
StrFromTimeIntervalW documented as requiring “version 4.71 or later”
StrIsIntlEqualA documented as requiring “version 4.71 or later”
StrIsIntlEqualW documented as requiring “version 4.71 or later”
StrPBrkA documented as requiring “version 4.71 or later”
StrPBrkW documented as requiring “version 4.71 or later”
StrRChrA also ordinal 351 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrRChrW also ordinal 359 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrRChrIA also ordinal 368 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrRChrIW also ordinal 369 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrRStrIA also ordinal 372 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrRStrIW also ordinal 373 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrSpnA documented as requiring “version 4.71 or later”
StrSpnW documented as requiring “version 4.71 or later”
StrStrA also ordinal 354 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrStrW also ordinal 362 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrStrIA also ordinal 355 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrStrIW also ordinal 363 in COMCTL32;
also a named export from SHELL32;
documented as requiring “version 4.71 or later”
StrToIntA also ordinal 357 in COMCTL32;
documented as requiring “version 4.71 or later”
StrToIntW also ordinal 365 in COMCTL32;
documented as requiring “version 4.71 or later”
StrToIntExA documented as requiring “version 4.71 or later”
StrToIntExW documented as requiring “version 4.71 or later”