Skip to content

Commit 1d5d93f

Browse files
authored
[SHLWAPI][SHLWAPI_APITEST][SDK] Support MapWin32ErrorToSTG (reactos#9147)
Implementing missing features... JIRA issue: CORE-19278 - Implement MapWin32ErrorToSTG function. - Modify shlwapi.spec. - Add prototype to <shlwapi_undoc.h>. - Add MapWin32ErrorToSTG testcase.
1 parent a83411c commit 1d5d93f

6 files changed

Lines changed: 74 additions & 1 deletion

File tree

‎dll/win32/shlwapi/shlwapi.spec‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@
482482
482 stub -noname SHMessageBoxHelpA
483483
483 stub -noname SHMessageBoxHelpW
484484
484 stdcall -noname IUnknown_QueryServiceExec(ptr ptr ptr long long long ptr)
485-
485 stub -noname MapWin32ErrorToSTG
485+
485 stdcall -noname MapWin32ErrorToSTG(long)
486486
486 stub -noname ModeToCreateFileFlags
487487
487 stdcall -ordinal SHLoadIndirectString(wstr ptr long ptr)
488488
488 stub -noname SHConvertGraphicsFile

‎dll/win32/shlwapi/utils.cpp‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,29 @@ PathUnExpandEnvStringsForUserW(
219219
return FALSE;
220220
}
221221

222+
/*************************************************************************
223+
* MapWin32ErrorToSTG [SHLWAPI.485]
224+
*
225+
* https://undoc.airesoft.co.uk/shlwapi.dll/MapWin32ErrorToSTG.php
226+
*/
227+
EXTERN_C HRESULT WINAPI
228+
MapWin32ErrorToSTG(_In_ HRESULT hr)
229+
{
230+
switch (hr)
231+
{
232+
case HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED):
233+
return STG_E_ACCESSDENIED;
234+
case HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND):
235+
case HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND):
236+
return STG_E_FILENOTFOUND;
237+
case HRESULT_FROM_WIN32(ERROR_FILE_EXISTS):
238+
case HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS):
239+
return STG_E_FILEALREADYEXISTS;
240+
default:
241+
return hr;
242+
}
243+
}
244+
222245
static BOOL CharLowerNoDBCSAWorker(PSTR lpString, INT cchMax, BOOL bUppercase)
223246
{
224247
CHAR szBuff[MAX_PATH];

‎modules/rostests/apitests/shlwapi/CMakeLists.txt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ list(APPEND SOURCE
1111
IShellFolderHelpers.cpp
1212
IsQSForward.cpp
1313
IStreamPidl.cpp
14+
MapWin32ErrorToSTG.c
1415
NextPath.c
1516
PathFileExistsDefExtAndAttributesW.c
1617
PathFindOnPath.c
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* PROJECT: ReactOS api tests
3+
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4+
* PURPOSE: Tests for MapWin32ErrorToSTG
5+
* COPYRIGHT: Copyright 2026 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6+
*/
7+
8+
#include <apitest.h>
9+
#include <shlwapi.h>
10+
11+
typedef HRESULT (WINAPI *FN_MapWin32ErrorToSTG)(HRESULT);
12+
static FN_MapWin32ErrorToSTG s_fnMapWin32ErrorToSTG = NULL;
13+
14+
START_TEST(MapWin32ErrorToSTG)
15+
{
16+
HRESULT hr;
17+
HINSTANCE hSHLWAPI;
18+
19+
hSHLWAPI = GetModuleHandleA("shlwapi");
20+
s_fnMapWin32ErrorToSTG = (FN_MapWin32ErrorToSTG)
21+
GetProcAddress(hSHLWAPI, MAKEINTRESOURCEA(485));
22+
if (!s_fnMapWin32ErrorToSTG)
23+
{
24+
skip("MapWin32ErrorToSTG not found\n");
25+
return;
26+
}
27+
28+
hr = s_fnMapWin32ErrorToSTG(HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED));
29+
ok_long(hr, STG_E_ACCESSDENIED);
30+
31+
hr = s_fnMapWin32ErrorToSTG(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND));
32+
ok_long(hr, STG_E_FILENOTFOUND);
33+
34+
hr = s_fnMapWin32ErrorToSTG(HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND));
35+
ok_long(hr, STG_E_FILENOTFOUND);
36+
37+
hr = s_fnMapWin32ErrorToSTG(HRESULT_FROM_WIN32(ERROR_FILE_EXISTS));
38+
ok_long(hr, STG_E_FILEALREADYEXISTS);
39+
40+
hr = s_fnMapWin32ErrorToSTG(HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS));
41+
ok_long(hr, STG_E_FILEALREADYEXISTS);
42+
43+
hr = s_fnMapWin32ErrorToSTG(HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER));
44+
ok_long(hr, HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER));
45+
}

‎modules/rostests/apitests/shlwapi/testlist.c‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ extern void func_PathFindOnPath(void);
99
extern void func_IShellFolderHelpers(void);
1010
extern void func_IsQSForward(void);
1111
extern void func_IStreamPidl(void);
12+
extern void func_MapWin32ErrorToSTG(void);
1213
extern void func_NextPath(void);
1314
extern void func_PathIsUNC(void);
1415
extern void func_PathIsUNCServer(void);
@@ -37,6 +38,7 @@ const struct test winetest_testlist[] =
3738
{ "IShellFolderHelpers", func_IShellFolderHelpers },
3839
{ "IsQSForward", func_IsQSForward },
3940
{ "IStreamPidl", func_IStreamPidl },
41+
{ "MapWin32ErrorToSTG", func_MapWin32ErrorToSTG },
4042
{ "NextPath", func_NextPath },
4143
{ "PathIsUNC", func_PathIsUNC },
4244
{ "PathIsUNCServer", func_PathIsUNCServer },

‎sdk/include/reactos/shlwapi_undoc.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,8 @@ SHDialogBox(
513513
_In_opt_ SHDIALOGPROC fn,
514514
_In_opt_ PVOID pThis);
515515

516+
HRESULT WINAPI MapWin32ErrorToSTG(_In_ HRESULT hr);
517+
516518
PSTR WINAPI CharLowerNoDBCSA(_Inout_ PSTR lpString);
517519
PWSTR WINAPI CharLowerNoDBCSW(_Inout_ PWSTR lpString);
518520
PSTR WINAPI CharUpperNoDBCSA(_Inout_ PSTR lpString);

0 commit comments

Comments
 (0)