SHLWAPI 4.71 Ordinal-Only Exports

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