Geoff Chappell - Software Analyst
Version 4.71 introduced 150 distinct functions that are exported by ordinal only. Of these, 119 correspond straightforwardly to standard Windows API functions that work in one way or another with strings. In general, the SHLWAPI equivalents merely wrap the choice of whether to use the standard function in its ANSI or Unicode form, typically depending on whether SHLWAPI finds itself running on Windows or NT. These wrapper functions have the same prototype as the Unicode form of the corresponding standard API function. They can be documented effectively as one simply by describing them in general and then listing which standard API functions have been treated to a Unicode wrapping by SHLWAPI.
That said, no generalised documentation of these Unicode wrappers is provided in the January 2004 edition of the MSDN Library. Specific documentation is given for just seven of them and the choice of which seven is at best capricious. For instance, how does it happen that CharUpperBuffWrapW gets documented but CharLowerBuffWrapW does not—or the other way round, so that CharLowerWrapW gets documented but CharUpperWrapW does not?
By January 2007, for the Windows Vista SDK, Microsoft condescends to the generalised documentation suggested above, yet only for a smattering of eligible functions. Most of the wrappers were anyway trivial by the time that Microsoft got round to documenting them: in version 6.0 starting with the builds for Windows Server 2003, SHLWAPI no longer expects to run on the old Windows that starts from DOS and each of these wrappers is just forwarded to its standard API function.
Of the other ordinal-only exports introduced with SHLWAPI version 4.71, the January 2004 edition of the MSDN Library documents just five. Again, they are all said to require “version 5.0 or later”.
Another four of the ordinal-only exports new to SHLWAPI version 4.71, namely SHAllocShared, SHFreeShared, SHLockShared and SHUnlockShared, have long been re-exported by SHELL32.DLL and have in this sense been documented indirectly as Settlement Program Interfaces. Again however, the documentation misleads about availability, describing them as requiring SHELL32 version 5.0 or higher, as if they did not exist any earlier than 1999. The functions actually date from the NT releases of SHELL32 version 4.0 in 1996. Their redirection to SHLWAPI dates from SHELL32 version 4.71 in 1997. (If only as an aside, note that this shared memory interface is not dead. SHLWAPI version 6.0 in 2001 adds SHLockSharedEx, exported only by ordinal, and left undocumented.)
Ordinal | Function | Remarks |
---|---|---|
3 | PathFileExistsDefExtA | |
4 | PathFileExistsDefExtW | |
5 | PathFindOnPathExA | |
6 | PathFindOnPathExW | |
7 | SHAllocShared | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented with “Windows 2000” as minimum operating system |
8 | SHLockShared | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented with “Windows 2000” as minimum operating system |
9 | SHUnlockShared | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented as requiring “shell32.dll version 5.0 or later” |
10 | SHFreeShared | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented as requiring “shell32.dll version 5.0 or later” |
11 | SHMapHandle | |
12 | SHCreateMemStream | exported also by name in 6.0 from Windows Vista, and higher; documented as requiring “version 5.0 or later” |
13 | RegisterDefaultAcceptHeaders | |
14 | GetAcceptLanguagesA | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented as requiring “version 5.0 or later” |
15 | GetAcceptLanguagesW | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented as requiring “version 5.0 or later” |
16 | SHCreateThread | exported also by name in 5.0 and higher; documented as requiring “version 5.0 or later” |
17 | SHWriteDataBlockList | |
18 | SHReadDataBlockList | |
19 | SHFreeDataBlockList | |
20 | SHAddDataBlock | |
21 | SHRemoveDataBlock | |
22 | SHFindDataBlock | |
23 | SHStringFromGUIDA | |
24 | SHStringFromGUIDW | |
25 | IsCharAlphaWrapW | forwarded to USER32 function IsCharAlphaW in 6.0 from Windows Vista, and higher |
26 | IsCharUpperWrapW | forwarded to USER32 function IsCharUpperW in 6.0 from Windows Vista, and higher |
27 | IsCharLowerWrapW | forwarded to USER32 function IsCharLowerW in 6.0 from Windows Vista, and higher |
28 | IsCharAlphaNumericWrapW | forwarded to USER32 function IsCharAlphaNumericW
in 6.0 from Windows Vista, and higher; documented as requiring “version 5.0 or later” |
29 | IsCharSpaceW | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented as requiring “version 5.0 or later” |
30 | IsCharBlankW | |
31 | IsCharPunctW | |
32 | IsCharCntrlW | |
33 | IsCharDigitW | |
34 | IsCharXDigitW | |
35 | GetStringType3ExW | |
36 | AppendMenuWrapW | forwarded to USER32 function AppendMenuW in 6.0 from Windows Server 2003, and higher |
37 | CallWindowProcWrapW | forwarded to USER32 function CallWindowProcW in 6.0 from Windows Server 2003, and higher |
38 | CharLowerWrapW | forwarded to USER32 function CharLowerW in
6.0 from Windows Server 2003, and higher; documented as requiring “version 5.0 or later” |
39 | CharLowerBuffWrapW | forwarded to USER32 function CharLowerBuffW in 6.0 from Windows Server 2003, and higher |
40 | CharNextWrapW | forwarded to USER32 function CharNextW in 6.0 from Windows Server 2003, and higher |
41 | CharPrevWrapW | forwarded to USER32 function CharPrevW in 6.0 from Windows Server 2003, and higher |
42 | CharToOemWrapW | forwarded to USER32 function CharToOemW in 6.0 from Windows Server 2003, and higher |
43 | CharUpperWrapW | forwarded to USER32 function CharUpperW in 6.0 from Windows Server 2003, and higher |
44 | CharUpperBuffWrapW | forwarded to USER32 function CharUpperBuffW
in 6.0 from Windows Server 2003, and higher; documented as requiring “version 5.0 or later” |
45 | CompareStringWrapW | forwarded to KERNEL32 function CompareStringW
in 6.0 from Windows Server 2003, and higher; documented as requiring “version 5.0 or later” |
46 | CopyAcceleratorTableWrapW | forwarded to USER32 function CopyAcceleratorTableW in 6.0 from Windows Server 2003, and higher |
47 | CreateAcceleratorTableWrapW | forwarded to USER32 function CreateAcceleratorTableW in 6.0 from Windows Server 2003, and higher |
48 | CreateDCWrapW | forwarded to GDI32 function CreateDCW in 6.0 from Windows Server 2003, and higher |
49 | CreateDialogParamWrapW | forwarded to USER32 function CreateDialogParamW in 6.0 from Windows Server 2003, and higher |
50 | CreateDirectoryWrapW | forwarded to KERNEL32 function CreateDirectoryW in 6.0 from Windows Server 2003, and higher |
51 | CreateEventWrapW | forwarded to KERNEL32 function CreateEventW in 6.0 from Windows Server 2003, and higher |
52 | CreateFileWrapW | forwarded to KERNEL32 function CreateFileW
in 6.0 from Windows Server 2003, and higher; documented as requiring “version 5.0 or later” |
53 | CreateFontIndirectWrapW | forwarded to GDI32 function CreateFontIndirectW in 6.0 from Windows Server 2003, and higher |
54 | CreateICWrapW | forwarded to GDI32 function CreateICW in 6.0 from Windows Server 2003, and higher |
55 | CreateWindowExWrapW | forwarded to USER32 function CreateWindowExW in 6.0 from Windows Server 2003, and higher |
56 | DefWindowProcWrapW | forwarded to USER32 function DefWindowProcW in 6.0 from Windows Server 2003, and higher |
57 | DeleteFileWrapW | forwarded to KERNEL32 function DeleteFileW in 6.0 from Windows Server 2003, and higher |
58 | DialogBoxIndirectParamWrapW | forwarded to USER32 function DialogBoxIndirectParamW in 6.0 from Windows Server 2003, and higher |
59 | DialogBoxParamWrapW | forwarded to USER32 function DialogBoxParamW in 6.0 from Windows Server 2003, and higher |
60 | DispatchMessageWrapW | forwarded to USER32 function DispatchMessageW in 6.0 from Windows Server 2003, and higher |
61 | DrawTextWrapW | forwarded to USER32 function DrawTextW in 6.0 from Windows Server 2003, and higher |
62 | EnumFontFamiliesWrapW | forwarded to GDI32 function EnumFontFamiliesW in 6.0 from Windows Server 2003, and higher |
63 | EnumFontFamiliesExWrapW | forwarded to GDI32 function EnumFontFamiliesExW in 6.0 from Windows Server 2003, and higher |
64 | EnumResourceNamesWrapW | forwarded to KERNEL32 function EnumResourceNamesW in 6.0 from Windows Server 2003, and higher |
65 | FindFirstFileWrapW | forwarded to KERNEL32 function FindFirstFileW in 6.0 from Windows Server 2003, and higher |
66 | FindResourceWrapW | forwarded to KERNEL32 function FindResourceW
in 6.0 from Windows Server 2003, and higher; documented as requiring “version 5.0 or later” |
67 | FindWindowWrapW | forwarded to USER32 function FindWindowW in 6.0 from Windows Server 2003, and higher |
68 | FormatMessageWrapW | forwarded to KERNEL32 function FormatMessageW in 6.0 from Windows Server 2003, and higher |
69 | GetClassInfoWrapW | forwarded to USER32 function GetClassInfoW in 6.0 from Windows Server 2003, and higher |
70 | GetClassLongWrapW | forwarded to USER32 function GetClassLongW in 6.0 from Windows Server 2003, and higher |
71 | GetClassNameWrapW | forwarded to USER32 function GetClassNameW in 6.0 from Windows Server 2003, and higher |
72 | GetClipboardFormatNameWrapW | forwarded to USER32 function GetClipboardFormatNameW in 6.0 from Windows Server 2003, and higher |
73 | GetCurrentDirectoryWrapW | forwarded to KERNEL32 function GetCurrentDirectoryW in 6.0 from Windows Server 2003, and higher |
74 | GetDlgItemTextWrapW | forwarded to USER32 function GetDlgItemTextW in 6.0 from Windows Server 2003, and higher |
75 | GetFileAttributesWrapW | forwarded to KERNEL32 function GetFileAttributesW in 6.0 from Windows Server 2003, and higher |
76 | GetFullPathNameWrapW | forwarded to KERNEL32 function GetFullPathNameW in 6.0 from Windows Server 2003, and higher |
77 | GetLocaleInfoWrapW | forwarded to KERNEL32 function GetLocaleInfoW in 6.0 from Windows Server 2003, and higher |
78 | GetMenuStringWrapW | forwarded to USER32 function GetMenuStringW in 6.0 from Windows Server 2003, and higher |
79 | GetMessageWrapW | forwarded to USER32 function GetMessageW in 6.0 from Windows Server 2003, and higher |
80 | GetModuleFileNameWrapW | forwarded to KERNEL32 function GetModuleFileNameW in 6.0 from Windows Server 2003, and higher |
81 | GetSystemDirectoryWrapW | forwarded to KERNEL32 function GetSystemDirectoryW in 6.0 from Windows Server 2003, and higher |
82 | SearchPathWrapW | forwarded to KERNEL32 function SearchPathW in 6.0 from Windows Server 2003, and higher |
83 | GetModuleHandleWrapW | forwarded to KERNEL32 function GetModuleHandleW in 6.0 from Windows Server 2003, and higher |
84 | GetObjectWrapW | forwarded to GDI32 function GetObjectW in 6.0 from Windows Server 2003, and higher |
85 | GetPrivateProfileIntWrapW | forwarded to KERNEL32 function GetPrivateProfileIntW in 6.0 from Windows Server 2003, and higher |
86 | GetProfileStringWrapW | forwarded to KERNEL32 function GetProfileStringW in 6.0 from Windows Server 2003, and higher |
87 | GetPropWrapW | forwarded to USER32 function GetPropW in 6.0 from Windows Server 2003, and higher |
88 | GetStringTypeExWrapW | forwarded to KERNEL32 function GetStringTypeExW in 6.0 from Windows Server 2003, and higher |
89 | GetTempFileNameWrapW | forwarded to KERNEL32 function GetTempFileNameW in 6.0 from Windows Server 2003, and higher |
90 | GetTempPathWrapW | forwarded to KERNEL32 function GetTempPathW in 6.0 from Windows Server 2003, and higher |
91 | GetTextExtentPoint32WrapW | forwarded to GDI32 function GetTextExtentPoint32W in 6.0 from Windows Server 2003, and higher |
92 | GetTextFaceWrapW | forwarded to GDI32 function GetTextFaceW in 6.0 from Windows Server 2003, and higher |
93 | GetTextMetricsWrapW | forwarded to GDI32 function GetTextMetricsW in 6.0 from Windows Server 2003, and higher |
94 | GetWindowLongWrapW | forwarded to USER32 function GetWindowLongW in 6.0 from Windows Server 2003, and higher |
95 | GetWindowTextWrapW | forwarded to USER32 function GetWindowTextW in 6.0 from Windows Server 2003, and higher |
96 | GetWindowTextLengthWrapW | forwarded to USER32 function GetWindowTextLengthW in 6.0 from Windows Server 2003, and higher |
97 | GetWindowsDirectoryWrapW | forwarded to KERNEL32 function GetWindowsDirectoryW in 6.0 from Windows Server 2003, and higher |
98 | InsertMenuWrapW | forwarded to USER32 function InsertMenuW in 6.0 from Windows Server 2003, and higher |
99 | IsDialogMessageWrapW | forwarded to USER32 function IsDialogMessageW in 6.0 from Windows Server 2003, and higher |
100 | LoadAcceleratorsWrapW | forwarded to USER32 function LoadAcceleratorsW in 6.0 from Windows Server 2003, and higher |
101 | LoadBitmapWrapW | forwarded to USER32 function LoadBitmapW in 6.0 from Windows Server 2003, and higher |
102 | LoadCursorWrapW | forwarded to USER32 function LoadCursorW in 6.0 from Windows Server 2003, and higher |
103 | LoadIconWrapW | forwarded to USER32 function LoadIconW in 6.0 from Windows Server 2003, and higher |
104 | LoadImageWrapW | forwarded to USER32 function LoadImageW in 6.0 from Windows Server 2003, and higher |
105 | LoadLibraryExWrapW | forwarded to KERNEL32 function LoadLibraryExW in 6.0 from Windows Server 2003, and higher |
106 | LoadMenuWrapW | forwarded to USER32 function LoadMenuW in 6.0 from Windows Server 2003, and higher |
107 | LoadStringWrapW | forwarded to USER32 function LoadStringW in 6.0 from Windows Server 2003, and higher |
108 | MessageBoxIndirectWrapW | forwarded to USER32 function MessageBoxIndirectW in 6.0 from Windows Server 2003, and higher |
109 | ModifyMenuWrapW | forwarded to USER32 function ModifyMenuW in 6.0 from Windows Server 2003, and higher |
110 | GetCharWidth32WrapW | forwarded to GDI32 function GetCharWidth32W in 6.0 from Windows Server 2003, and higher |
111 | GetCharacterPlacementWrapW | forwarded to GDI32 function GetCharacterPlacementW in 6.0 from Windows Server 2003, and higher |
112 | CopyFileWrapW | forwarded to KERNEL32 function CopyFileW in 6.0 from Windows Server 2003, and higher |
113 | MoveFileWrapW | forwarded to KERNEL32 function MoveFileW in 6.0 from Windows Server 2003, and higher |
114 | OemToCharWrapW | forwarded to USER32 function OemToCharW in 6.0 from Windows Server 2003, and higher |
115 | OutputDebugStringWrapW | forwarded to KERNEL32 function OutputDebugStringW in 6.0 from Windows Server 2003, and higher |
116 | PeekMessageWrapW | forwarded to USER32 function PeekMessageW in 6.0 from Windows Server 2003, and higher |
117 | PostMessageWrapW | forwarded to USER32 function PostMessageW in 6.0 from Windows Server 2003, and higher |
118 | PostThreadMessageWrapW | forwarded to USER32 function PostThreadMessageW in 6.0 from Windows Server 2003, and higher |
119 | RegCreateKeyWrapW | forwarded to ADVAPI32 function RegCreateKeyW
in 6.0 from Windows Server 2003 and higher; implemented as call to ADVAPI32 function RegCreateKeyExW with AIT logging in 6.1 and higher |
120 | RegCreateKeyExWrapW | forwarded to ADVAPI32 function RegCreateKeyExW
in 6.0 from Windows Server 2003 and higher; implemented as jump to ADVAPI32 function RegCreateKeyExW with AIT logging in 6.1 and higher |
121 | RegDeleteKeyWrapW | forwarded to ADVAPI32 function RegDeleteKeyW
in 6.0 from Windows Server 2003 and higher; implemented as call to ADVAPI32 function RegDeleteKeyExW with AIT logging in 6.1 and higher |
122 | RegEnumKeyWrapW | forwarded to ADVAPI32 function RegEnumKeyW
in 6.0 from Windows Server 2003 and higher; implemented as jump to ADVAPI32 function RegEnumKeyW with AIT logging in 6.1 and higher |
123 | RegEnumKeyExWrapW | forwarded to ADVAPI32 function RegEnumKeyExW
in 6.0 from Windows Server 2003 and higher; implemented as jump to ADVAPI32 function RegEnumKeyExW with AIT logging in 6.1 and higher |
124 | RegOpenKeyWrapW | forwarded to ADVAPI32 function RegOpenKeyW
in 6.0 from Windows Server 2003 and higher; implemented as call to ADVAPI32 function RegOpenKeyExW with AIT logging in 6.1 and higher |
125 | RegOpenKeyExWrapW | forwarded to ADVAPI32 function RegOpenKeyExW
in 6.0 from Windows Server 2003 and higher; implemented as jump to ADVAPI32 function RegOpenKeyExW with AIT logging in 6.1 and higher |
126 | RegQueryInfoKeyWrapW | forwarded to ADVAPI32 function RegQueryInfoKeyW
in 6.0 from Windows Server 2003 and higher; implemented as jump to ADVAPI32 function RegQueryInfoKeyW with AIT logging in 6.1 and higher |
127 | RegQueryValueWrapW | forwarded to ADVAPI32 function RegQueryValueW
in 6.0 from Windows Server 2003 and higher; implemented as jump to ADVAPI32 function RegQueryValueW with AIT logging in 6.1 and higher |
128 | RegQueryValueExWrapW | forwarded to ADVAPI32 function RegQueryValueExW
in 6.0 from Windows Server 2003 and higher; implemented as jump to ADVAPI32 function RegQueryValueExW with AIT logging in 6.1 and higher |
129 | RegSetValueWrapW | forwarded to ADVAPI32 function RegSetValueW
in 6.0 from Windows Server 2003 and higher; implemented as jump to ADVAPI32 function RegSetValueW with AIT logging in 6.1 and higher |
130 | RegSetValueExWrapW | forwarded to ADVAPI32 function RegSetValueExW
in 6.0 from Windows Server 2003 and higher; implemented as jump to ADVAPI32 function RegSetValueExW with AIT logging in 6.1 and higher |
131 | RegisterClassWrapW | forwarded to USER32 function RegisterClassW in 6.0 from Windows Server 2003 and higher |
132 | RegisterClipboardFormatWrapW | forwarded to USER32 function RegisterClipboardFormatW in 6.0 from Windows Server 2003 and higher |
133 | RegisterWindowMessageWrapW | forwarded to USER32 function RegisterWindowMessageW in 6.0 from Windows Server 2003 and higher |
134 | RemovePropWrapW | forwarded to USER32 function RemovePropW in 6.0 from Windows Server 2003 and higher |
135 | SendDlgItemMessageWrapW | forwarded to USER32 function SendDlgItemMessageW in 6.0 from Windows Server 2003 and higher |
136 | SendMessageWrapW | forwarded to USER32 function SendMessageW in 6.0 from Windows Server 2003 and higher |
137 | SetCurrentDirectoryWrapW | forwarded to KERNEL32 function SetCurrentDirectoryW in 6.0 from Windows Server 2003 and higher |
138 | SetDlgItemTextWrapW | forwarded to USER32 function SetDlgItemTextW in 6.0 from Windows Server 2003 and higher |
139 | SetMenuItemInfoWrapW | forwarded to USER32 function SetMenuItemInfoW in 6.0 from Windows Server 2003 and higher |
140 | SetPropWrapW | forwarded to USER32 function SetPropW in 6.0 from Windows Server 2003 and higher |
141 | SetWindowLongWrapW | forwarded to USER32 function SetWindowLongW in 6.0 from Windows Server 2003 and higher |
142 | SetWindowsHookExWrapW | forwarded to USER32 function SetWindowsHookExW in 6.0 from Windows Server 2003 and higher |
143 | SetWindowTextWrapW | forwarded to USER32 function SetWindowTextW in 6.0 from Windows Server 2003 and higher |
144 | StartDocWrapW | forwarded to GDI32 function StartDocW in 6.0 from Windows Server 2003 and higher |
145 | SystemParametersInfoWrapW | forwarded to USER32 function SystemParametersInfoW in 6.0 from Windows Server 2003 and higher |
146 | TranslateAcceleratorWrapW | forwarded to USER32 function TranslateAcceleratorW in 6.0 from Windows Server 2003 and higher |
147 | UnregisterClassWrapW | forwarded to USER32 function UnregisterClassW in 6.0 from Windows Server 2003 and higher |
148 | VkKeyScanWrapW | forwarded to USER32 function VkKeyScanW in 6.0 from Windows Server 2003 and higher |
149 | WinHelpWrapW | forwarded to USER32 function WinHelpW in 6.0 from Windows Server 2003 and higher |
150 | wvsprintfWrapW | forwarded to USER32 function wvsprintfW in 6.0 from Windows Server 2003 and higher |
151 | StrCmpNCA | exported also by name in 6.0 from Windows Vista, and higher; documented as requiring “version 5.0 or later” |
152 | StrCmpNCW | exported also by name in 6.0 from Windows Vista, and higher; documented as requiring “version 5.0 or later” |
153 | StrCmpNICA | exported also by name in 6.0 from Windows Vista, and higher; documented as requiring “version 5.0 or later” |
154 | StrCmpNICW | exported also by name in 6.0 from Windows Vista, and higher; documented as requiring “version 5.0 or later” |
155 | StrCmpCA | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented as requiring “version 5.0 or later” |
156 | StrCmpCW | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented as requiring “version 5.0 or later” |
157 | StrCmpICA | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented as requiring “version 5.0 or later” |
158 | StrCmpICW | exported also by name in 6.0 from Windows XP SP2 and Windows Server 2003
SP1, and higher; documented as requiring “version 5.0 or later” |
159 | CompareStringAltW | forwarded to KERNEL32 function CompareStringW in 6.0 from Windows Server 2003 and higher |
160 | SHAboutInfoA | |
161 | SHAboutInfoW |