Skip to content

Commit aa52c3f

Browse files
authored
[SHELL32][SHELL32_APITEST][SDK] Implement SHEnumerateUnreadMailAccountsW (reactos#7619)
Implementing missing features... JIRA issue: CORE-19278 - Move function definition from stubs.cpp into utils.cpp. - Add prototype to <shellapi.h>.
1 parent 0bb8b46 commit aa52c3f

File tree

6 files changed

+76
-15
lines changed

6 files changed

+76
-15
lines changed

dll/win32/shell32/stubs.cpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,6 @@ SHGetUnreadMailCountW(HKEY hKeyUser,
3030
return E_FAIL;
3131
}
3232

33-
/*
34-
* Unimplemented
35-
*/
36-
EXTERN_C HRESULT
37-
WINAPI
38-
SHEnumerateUnreadMailAccountsW(HKEY user,
39-
DWORD idx,
40-
LPWSTR mailaddress,
41-
INT mailaddresslen)
42-
{
43-
FIXME("SHEnumerateUnreadMailAccountsW(%p %d %p %d) stub\n",
44-
user, idx, mailaddress, mailaddresslen);
45-
return E_NOTIMPL;
46-
}
47-
4833
/*
4934
* Unimplemented
5035
*/

dll/win32/shell32/utils.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -901,6 +901,39 @@ SheRemoveQuotesW(LPWSTR psz)
901901
return psz;
902902
}
903903

904+
/*************************************************************************
905+
* SHEnumerateUnreadMailAccountsW [SHELL32.287]
906+
*
907+
* @see https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shenumerateunreadmailaccountsw
908+
*/
909+
EXTERN_C
910+
HRESULT WINAPI
911+
SHEnumerateUnreadMailAccountsW(
912+
_In_opt_ HKEY hKeyUser,
913+
_In_ DWORD dwIndex,
914+
_Out_writes_(cchMailAddress) PWSTR pszMailAddress,
915+
_In_ INT cchMailAddress)
916+
{
917+
if (!hKeyUser)
918+
hKeyUser = HKEY_CURRENT_USER;
919+
920+
HKEY hKey;
921+
LSTATUS error = RegOpenKeyExW(hKeyUser,
922+
L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail",
923+
0, KEY_ENUMERATE_SUB_KEYS, &hKey);
924+
if (error)
925+
return HRESULT_FROM_WIN32(error);
926+
927+
FILETIME FileTime;
928+
error = RegEnumKeyExW(hKey, dwIndex, pszMailAddress, (PDWORD)&cchMailAddress, NULL, NULL,
929+
NULL, &FileTime);
930+
if (error)
931+
*pszMailAddress = UNICODE_NULL;
932+
933+
RegCloseKey(hKey);
934+
return error ? HRESULT_FROM_WIN32(error) : S_OK;
935+
}
936+
904937
/*************************************************************************
905938
* SHFindComputer [SHELL32.91]
906939
*

modules/rostests/apitests/shell32/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ list(APPEND SOURCE
3434
SHParseDisplayName.cpp
3535
SHRestricted.cpp
3636
SHShouldShowWizards.cpp
37+
SHEnumerateUnreadMailAccountsW.cpp
3738
She.cpp
3839
ShellExec_RunDLL.cpp
3940
ShellExecCmdLine.cpp
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* PROJECT: ReactOS API tests
3+
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4+
* PURPOSE: Test for SHEnumerateUnreadMailAccountsW
5+
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ ([email protected])
6+
*/
7+
8+
#include "shelltest.h"
9+
10+
START_TEST(SHEnumerateUnreadMailAccountsW)
11+
{
12+
HRESULT hr;
13+
WCHAR szMailAddress[MAX_PATH];
14+
HKEY hKey;
15+
LSTATUS error;
16+
DWORD dwDisposition;
17+
18+
error = RegCreateKeyExW(HKEY_CURRENT_USER,
19+
L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail\\example.com",
20+
0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition);
21+
ok_long(error, ERROR_SUCCESS);
22+
23+
szMailAddress[0] = UNICODE_NULL;
24+
hr = SHEnumerateUnreadMailAccountsW(NULL, 0, szMailAddress, _countof(szMailAddress));
25+
ok_hex(hr, S_OK);
26+
ok(szMailAddress[0] != UNICODE_NULL, "szMailAddress was empty\n");
27+
28+
if (dwDisposition == REG_CREATED_NEW_KEY)
29+
{
30+
RegDeleteKeyW(HKEY_CURRENT_USER,
31+
L"Software\\Microsoft\\Windows\\CurrentVersion\\UnreadMail\\example.com");
32+
}
33+
}

modules/rostests/apitests/shell32/testlist.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ extern void func_SHChangeNotify(void);
3434
extern void func_SHCreateDataObject(void);
3535
extern void func_SHCreateFileDataObject(void);
3636
extern void func_SHCreateFileExtractIconW(void);
37+
extern void func_SHEnumerateUnreadMailAccountsW(void);
3738
extern void func_She(void);
3839
extern void func_ShellExec_RunDLL(void);
3940
extern void func_ShellExecCmdLine(void);
@@ -84,6 +85,7 @@ const struct test winetest_testlist[] =
8485
{ "SHCreateDataObject", func_SHCreateDataObject },
8586
{ "SHCreateFileDataObject", func_SHCreateFileDataObject },
8687
{ "SHCreateFileExtractIconW", func_SHCreateFileExtractIconW },
88+
{ "SHEnumerateUnreadMailAccountsW", func_SHEnumerateUnreadMailAccountsW },
8789
{ "She", func_She },
8890
{ "ShellExec_RunDLL", func_ShellExec_RunDLL },
8991
{ "ShellExecCmdLine", func_ShellExecCmdLine },

sdk/include/psdk/shellapi.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,13 @@ SHTestTokenMembership(
652652
_In_ ULONG ulRID);
653653
#endif
654654

655+
HRESULT WINAPI
656+
SHEnumerateUnreadMailAccountsW(
657+
_In_opt_ HKEY hKeyUser,
658+
_In_ DWORD dwIndex,
659+
_Out_writes_(cchMailAddress) PWSTR pszMailAddress,
660+
_In_ INT cchMailAddress);
661+
655662
#ifdef UNICODE
656663
#define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAW_V1_SIZE
657664
#define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAW_V2_SIZE

0 commit comments

Comments
 (0)