Geoff Chappell - Software Analyst
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” |