ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
January 2025
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
23 participants
278 discussions
Start a n
N
ew thread
[reactos] 01/01: [SHELL32][SHELL32_APITEST][SDK] Implement ShellExec_RunDLL (#7615)
by Katayama Hirofumi MZ
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=dad3a0938afd502831a8e…
commit dad3a0938afd502831a8e401aae2b6b5a7fc3c92 Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com> AuthorDate: Fri Jan 17 22:51:18 2025 +0900 Commit: GitHub <noreply(a)github.com> CommitDate: Fri Jan 17 22:51:18 2025 +0900 [SHELL32][SHELL32_APITEST][SDK] Implement ShellExec_RunDLL (#7615) Implementing missing features... JIRA issue: CORE-19278 - Modify shell32.spec. - Move function definitions from stubs.cpp into shlexec.cpp. - Add prototypes to <undocshell.h>. --- dll/win32/shell32/shell32.spec | 2 +- dll/win32/shell32/shlexec.cpp | 85 ++++++++++++++++++++++ dll/win32/shell32/stubs.cpp | 30 -------- modules/rostests/apitests/shell32/CMakeLists.txt | 1 + .../rostests/apitests/shell32/ShellExec_RunDLL.cpp | 61 ++++++++++++++++ modules/rostests/apitests/shell32/testlist.c | 2 + sdk/include/reactos/undocshell.h | 21 ++++++ 7 files changed, 171 insertions(+), 31 deletions(-) diff --git a/dll/win32/shell32/shell32.spec b/dll/win32/shell32/shell32.spec index 759f4676e94..9a4f8b07c43 100644 --- a/dll/win32/shell32/shell32.spec +++ b/dll/win32/shell32/shell32.spec @@ -354,7 +354,7 @@ 354 stdcall SheShortenPathW(wstr long) 355 stdcall ShellAboutA(long str str long) 356 stdcall ShellAboutW(long wstr wstr long) -357 stdcall ShellExec_RunDLL(ptr ptr wstr long) +357 stdcall ShellExec_RunDLL(ptr ptr str long) ShellExec_RunDLLA 358 stdcall ShellExec_RunDLLA(ptr ptr str long) 359 stdcall ShellExec_RunDLLW(ptr ptr wstr long) 360 stdcall ShellExecuteA(long str str str str long) diff --git a/dll/win32/shell32/shlexec.cpp b/dll/win32/shell32/shlexec.cpp index f03db3de0e7..646a2a6c84c 100644 --- a/dll/win32/shell32/shlexec.cpp +++ b/dll/win32/shell32/shlexec.cpp @@ -2986,3 +2986,88 @@ RealShellExecuteW( lphProcess, 0); } + +// The common helper of ShellExec_RunDLLA and ShellExec_RunDLLW +static VOID +ShellExec_RunDLL_Helper( + _In_opt_ HWND hwnd, + _In_opt_ HINSTANCE hInstance, + _In_ PCWSTR pszCmdLine, + _In_ INT nCmdShow) +{ + TRACE("(%p, %p, %s, 0x%X)\n", hwnd, hInstance, wine_dbgstr_w(pszCmdLine), nCmdShow); + + if (!pszCmdLine || !*pszCmdLine) + return; + + // '?' enables us to specify the additional mask value + ULONG fNewMask = SEE_MASK_NOASYNC; + if (*pszCmdLine == L'?') // 1st question + { + INT MaskValue; + if (StrToIntExW(pszCmdLine + 1, STIF_SUPPORT_HEX, &MaskValue)) + fNewMask |= MaskValue; + + PCWSTR pch2ndQuestion = StrChrW(pszCmdLine + 1, L'?'); // 2nd question + if (pch2ndQuestion) + pszCmdLine = pch2ndQuestion + 1; + } + + WCHAR szPath[2 * MAX_PATH]; + if (PathProcessCommandAW(pszCmdLine, szPath, _countof(szPath), L'C') == -1) + StrCpyNW(szPath, pszCmdLine, _countof(szPath)); + + // Split arguments from the path + LPWSTR Args = PathGetArgsW(szPath); + if (*Args) + *(Args - 1) = UNICODE_NULL; + + PathUnquoteSpacesW(szPath); + + // Execute + SHELLEXECUTEINFOW execInfo = { sizeof(execInfo) }; + execInfo.fMask = fNewMask; + execInfo.hwnd = hwnd; + execInfo.lpFile = szPath; + execInfo.lpParameters = Args; + execInfo.nShow = nCmdShow; + if (!ShellExecuteExW(&execInfo)) + { + DWORD dwError = GetLastError(); + if (SHELL_InRunDllProcess()) // Is it a RUNDLL process? + ExitProcess(dwError); // Terminate it now + } +} + +/************************************************************************* + * ShellExec_RunDLLA [SHELL32.358] + * + * @see
https://www.hexacorn.com/blog/2024/11/30/1-little-known-secret-of-shellexec…
+ */ +EXTERN_C +VOID WINAPI +ShellExec_RunDLLA( + _In_opt_ HWND hwnd, + _In_opt_ HINSTANCE hInstance, + _In_ PCSTR pszCmdLine, + _In_ INT nCmdShow) +{ + CStringW strCmdLine = pszCmdLine; // Keep + ShellExec_RunDLL_Helper(hwnd, hInstance, strCmdLine, nCmdShow); +} + +/************************************************************************* + * ShellExec_RunDLLW [SHELL32.359] + * + * @see
https://www.hexacorn.com/blog/2024/11/30/1-little-known-secret-of-shellexec…
+ */ +EXTERN_C +VOID WINAPI +ShellExec_RunDLLW( + _In_opt_ HWND hwnd, + _In_opt_ HINSTANCE hInstance, + _In_ PCWSTR pszCmdLine, + _In_ INT nCmdShow) +{ + ShellExec_RunDLL_Helper(hwnd, hInstance, pszCmdLine, nCmdShow); +} diff --git a/dll/win32/shell32/stubs.cpp b/dll/win32/shell32/stubs.cpp index d54e80c14af..5fec3d1e342 100644 --- a/dll/win32/shell32/stubs.cpp +++ b/dll/win32/shell32/stubs.cpp @@ -297,36 +297,6 @@ ShellHookProc(INT iCode, WPARAM wParam, LPARAM lParam) return 0; } -/* - * Unimplemented - */ -EXTERN_C VOID -WINAPI -ShellExec_RunDLL(HWND hwnd, HINSTANCE hInstance, LPWSTR pszCmdLine, int nCmdShow) -{ - FIXME("ShellExec_RunDLL() stub\n"); -} - -/* - * Unimplemented - */ -EXTERN_C VOID -WINAPI -ShellExec_RunDLLA(HWND hwnd, HINSTANCE hInstance, LPSTR pszCmdLine, int nCmdShow) -{ - FIXME("ShellExec_RunDLLA() stub\n"); -} - -/* - * Unimplemented - */ -EXTERN_C VOID -WINAPI -ShellExec_RunDLLW(HWND hwnd, HINSTANCE hInstance, LPWSTR pszCmdLine, int nCmdShow) -{ - FIXME("ShellExec_RunDLLW() stub\n"); -} - /* * Unimplemented */ diff --git a/modules/rostests/apitests/shell32/CMakeLists.txt b/modules/rostests/apitests/shell32/CMakeLists.txt index 10ef4004e7c..39f1092027e 100644 --- a/modules/rostests/apitests/shell32/CMakeLists.txt +++ b/modules/rostests/apitests/shell32/CMakeLists.txt @@ -35,6 +35,7 @@ list(APPEND SOURCE SHRestricted.cpp SHShouldShowWizards.cpp She.cpp + ShellExec_RunDLL.cpp ShellExecCmdLine.cpp ShellExecuteEx.cpp ShellExecuteW.cpp diff --git a/modules/rostests/apitests/shell32/ShellExec_RunDLL.cpp b/modules/rostests/apitests/shell32/ShellExec_RunDLL.cpp new file mode 100644 index 00000000000..bea1d8b0682 --- /dev/null +++ b/modules/rostests/apitests/shell32/ShellExec_RunDLL.cpp @@ -0,0 +1,61 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: GPL-2.0+ (
https://spdx.org/licenses/GPL-2.0+
) + * PURPOSE: Test for ShellExec_RunDLL + * COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com> + */ + +#include "shelltest.h" +#include "closewnd.h" +#include <undocshell.h> + +static WINDOW_LIST s_List1, s_List2; + +static VOID TEST_ShellExec_RunDLL(VOID) +{ + ShellExec_RunDLL(NULL, NULL, "?0?notepad.exe", SW_SHOWNORMAL); +} + +static VOID TEST_ShellExec_RunDLLA(VOID) +{ + ShellExec_RunDLLA(NULL, NULL, "?0?notepad.exe", SW_SHOWNORMAL); +} + +static VOID TEST_ShellExec_RunDLLW(VOID) +{ + ShellExec_RunDLLW(NULL, NULL, L"?0?notepad.exe", SW_SHOWNORMAL); +} + +static VOID CleanupWindowList(VOID) +{ + GetWindowListForClose(&s_List2); + CloseNewWindows(&s_List1, &s_List2); + FreeWindowList(&s_List1); + FreeWindowList(&s_List2); +} + +START_TEST(ShellExec_RunDLL) +{ + HWND hwndNotepad; + + GetWindowList(&s_List1); + TEST_ShellExec_RunDLL(); + Sleep(1000); + hwndNotepad = FindWindowW(L"Notepad", NULL); + ok(hwndNotepad != NULL, "Notepad not found\n"); + CleanupWindowList(); + + GetWindowList(&s_List1); + TEST_ShellExec_RunDLLA(); + Sleep(1000); + hwndNotepad = FindWindowW(L"Notepad", NULL); + ok(hwndNotepad != NULL, "Notepad not found\n"); + CleanupWindowList(); + + GetWindowList(&s_List1); + TEST_ShellExec_RunDLLW(); + Sleep(1000); + hwndNotepad = FindWindowW(L"Notepad", NULL); + ok(hwndNotepad != NULL, "Notepad not found\n"); + CleanupWindowList(); +} diff --git a/modules/rostests/apitests/shell32/testlist.c b/modules/rostests/apitests/shell32/testlist.c index 0da5972b358..134f01a7838 100644 --- a/modules/rostests/apitests/shell32/testlist.c +++ b/modules/rostests/apitests/shell32/testlist.c @@ -35,6 +35,7 @@ extern void func_SHCreateDataObject(void); extern void func_SHCreateFileDataObject(void); extern void func_SHCreateFileExtractIconW(void); extern void func_She(void); +extern void func_ShellExec_RunDLL(void); extern void func_ShellExecCmdLine(void); extern void func_ShellExecuteEx(void); extern void func_ShellExecuteW(void); @@ -83,6 +84,7 @@ const struct test winetest_testlist[] = { "SHCreateFileDataObject", func_SHCreateFileDataObject }, { "SHCreateFileExtractIconW", func_SHCreateFileExtractIconW }, { "She", func_She }, + { "ShellExec_RunDLL", func_ShellExec_RunDLL }, { "ShellExecCmdLine", func_ShellExecCmdLine }, { "ShellExecuteEx", func_ShellExecuteEx }, { "ShellExecuteW", func_ShellExecuteW }, diff --git a/sdk/include/reactos/undocshell.h b/sdk/include/reactos/undocshell.h index 3e685e08046..beb840c89e2 100644 --- a/sdk/include/reactos/undocshell.h +++ b/sdk/include/reactos/undocshell.h @@ -712,6 +712,27 @@ RealShellExecuteExW( _Out_opt_ PHANDLE lphProcess, _In_ DWORD dwFlags); +VOID WINAPI +ShellExec_RunDLL( + _In_opt_ HWND hwnd, + _In_opt_ HINSTANCE hInstance, + _In_ PCSTR pszCmdLine, + _In_ INT nCmdShow); + +VOID WINAPI +ShellExec_RunDLLA( + _In_opt_ HWND hwnd, + _In_opt_ HINSTANCE hInstance, + _In_ PCSTR pszCmdLine, + _In_ INT nCmdShow); + +VOID WINAPI +ShellExec_RunDLLW( + _In_opt_ HWND hwnd, + _In_opt_ HINSTANCE hInstance, + _In_ PCWSTR pszCmdLine, + _In_ INT nCmdShow); + /* RegisterShellHook types */ #define RSH_DEREGISTER 0 #define RSH_REGISTER 1
2 weeks, 5 days
1
0
0
0
[reactos] 04/04: [WKSSVC] Stubplement support for level 1101 in NetrWkstaUserGetInfo
by Timo Kreuzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a25e7ee9d71d41038f93c…
commit a25e7ee9d71d41038f93c545394417f186820a1a Author: Timo Kreuzer <timo.kreuzer(a)reactos.org> AuthorDate: Wed Jan 15 08:44:10 2025 +0200 Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org> CommitDate: Fri Jan 17 12:54:29 2025 +0200 [WKSSVC] Stubplement support for level 1101 in NetrWkstaUserGetInfo Fixes crash in netapi32_winetest:wksta introduced in 45b008d --- base/services/wkssvc/rpcserver.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/base/services/wkssvc/rpcserver.c b/base/services/wkssvc/rpcserver.c index d50eced610b..c51d8fda49e 100644 --- a/base/services/wkssvc/rpcserver.c +++ b/base/services/wkssvc/rpcserver.c @@ -847,7 +847,19 @@ NetrWkstaUserGetInfo( break; case 1101: + pUserInfo = midl_user_allocate(sizeof(WKSTA_USER_INFO_1101)); + if (pUserInfo == NULL) + { + ERR("Failed to allocate WKSTA_USER_INFO_1101\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo, sizeof(WKSTA_USER_INFO_1101)); + /* FIXME: wkui1101_oth_domains */ + + *UserInfo = pUserInfo; break; default:
2 weeks, 5 days
1
0
0
0
[reactos] 03/04: [WKSSVC] Plug memory leaks in NetrWkstaUserGetInfo
by Timo Kreuzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=132d571fe2c5b7487954e…
commit 132d571fe2c5b7487954e1b4c06cd56819900704 Author: Timo Kreuzer <timo.kreuzer(a)reactos.org> AuthorDate: Wed Jan 15 08:41:26 2025 +0200 Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org> CommitDate: Fri Jan 17 12:54:29 2025 +0200 [WKSSVC] Plug memory leaks in NetrWkstaUserGetInfo --- base/services/wkssvc/rpcserver.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/base/services/wkssvc/rpcserver.c b/base/services/wkssvc/rpcserver.c index a8a5abc2312..d50eced610b 100644 --- a/base/services/wkssvc/rpcserver.c +++ b/base/services/wkssvc/rpcserver.c @@ -762,6 +762,7 @@ NetrWkstaUserGetInfo( if (pUserInfo->UserInfo0.wkui0_username == NULL) { ERR("\n"); + midl_user_free(pUserInfo); dwResult = ERROR_NOT_ENOUGH_MEMORY; break; } @@ -792,6 +793,7 @@ NetrWkstaUserGetInfo( if (pUserInfo->UserInfo1.wkui1_username == NULL) { ERR("\n"); + midl_user_free(pUserInfo); dwResult = ERROR_NOT_ENOUGH_MEMORY; break; } @@ -808,6 +810,8 @@ NetrWkstaUserGetInfo( if (pUserInfo->UserInfo1.wkui1_logon_domain == NULL) { ERR("\n"); + midl_user_free(pUserInfo->UserInfo1.wkui1_username); + midl_user_free(pUserInfo); dwResult = ERROR_NOT_ENOUGH_MEMORY; break; } @@ -826,6 +830,9 @@ NetrWkstaUserGetInfo( if (pUserInfo->UserInfo1.wkui1_logon_server == NULL) { ERR("\n"); + midl_user_free(pUserInfo->UserInfo1.wkui1_username); + midl_user_free(pUserInfo->UserInfo1.wkui1_logon_domain); + midl_user_free(pUserInfo); dwResult = ERROR_NOT_ENOUGH_MEMORY; break; }
2 weeks, 5 days
1
0
0
0
[reactos] 02/04: [WKSSVC] Fix returned error value in NetrWkstaUserGetInfo
by Timo Kreuzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1c1c4e5d945245c77994d…
commit 1c1c4e5d945245c77994d6157cc1b3392c4fcf2a Author: Timo Kreuzer <timo.kreuzer(a)reactos.org> AuthorDate: Wed Jan 15 08:43:57 2025 +0200 Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org> CommitDate: Fri Jan 17 12:54:29 2025 +0200 [WKSSVC] Fix returned error value in NetrWkstaUserGetInfo --- base/services/wkssvc/rpcserver.c | 1 + 1 file changed, 1 insertion(+) diff --git a/base/services/wkssvc/rpcserver.c b/base/services/wkssvc/rpcserver.c index b74f3bc8fba..a8a5abc2312 100644 --- a/base/services/wkssvc/rpcserver.c +++ b/base/services/wkssvc/rpcserver.c @@ -845,6 +845,7 @@ NetrWkstaUserGetInfo( default: ERR("\n"); + dwResult = ERROR_INVALID_LEVEL; break; }
2 weeks, 5 days
1
0
0
0
[reactos] 01/04: [WKSSVC] Improve formatting
by Timo Kreuzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2e7f8711e9cb743b1d68b…
commit 2e7f8711e9cb743b1d68bde1ea52946eab20a445 Author: Timo Kreuzer <timo.kreuzer(a)reactos.org> AuthorDate: Wed Jan 15 08:40:27 2025 +0200 Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org> CommitDate: Fri Jan 17 12:54:29 2025 +0200 [WKSSVC] Improve formatting --- base/services/wkssvc/rpcserver.c | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/base/services/wkssvc/rpcserver.c b/base/services/wkssvc/rpcserver.c index b27e98f7973..b74f3bc8fba 100644 --- a/base/services/wkssvc/rpcserver.c +++ b/base/services/wkssvc/rpcserver.c @@ -757,7 +757,8 @@ NetrWkstaUserGetInfo( ZeroMemory(pUserInfo, sizeof(WKSTA_USER_INFO_0)); /* User Name */ - pUserInfo->UserInfo0.wkui0_username = midl_user_allocate(UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); + pUserInfo->UserInfo0.wkui0_username = + midl_user_allocate(UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); if (pUserInfo->UserInfo0.wkui0_username == NULL) { ERR("\n"); @@ -765,8 +766,11 @@ NetrWkstaUserGetInfo( break; } - ZeroMemory(pUserInfo->UserInfo0.wkui0_username, UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); - CopyMemory(pUserInfo->UserInfo0.wkui0_username, UserInfoResponseBuffer->UserName.Buffer, UserInfoResponseBuffer->UserName.Length); + ZeroMemory(pUserInfo->UserInfo0.wkui0_username, + UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo->UserInfo0.wkui0_username, + UserInfoResponseBuffer->UserName.Buffer, + UserInfoResponseBuffer->UserName.Length); *UserInfo = pUserInfo; break; @@ -783,7 +787,8 @@ NetrWkstaUserGetInfo( ZeroMemory(pUserInfo, sizeof(WKSTA_USER_INFO_1)); /* User Name */ - pUserInfo->UserInfo1.wkui1_username = midl_user_allocate(UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); + pUserInfo->UserInfo1.wkui1_username = + midl_user_allocate(UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); if (pUserInfo->UserInfo1.wkui1_username == NULL) { ERR("\n"); @@ -791,11 +796,15 @@ NetrWkstaUserGetInfo( break; } - ZeroMemory(pUserInfo->UserInfo1.wkui1_username, UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); - CopyMemory(pUserInfo->UserInfo1.wkui1_username, UserInfoResponseBuffer->UserName.Buffer, UserInfoResponseBuffer->UserName.Length); + ZeroMemory(pUserInfo->UserInfo1.wkui1_username, + UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo->UserInfo1.wkui1_username, + UserInfoResponseBuffer->UserName.Buffer, + UserInfoResponseBuffer->UserName.Length); /* Logon Domain Name */ - pUserInfo->UserInfo1.wkui1_logon_domain = midl_user_allocate(UserInfoResponseBuffer->LogonDomainName.Length + sizeof(WCHAR)); + pUserInfo->UserInfo1.wkui1_logon_domain = + midl_user_allocate(UserInfoResponseBuffer->LogonDomainName.Length + sizeof(WCHAR)); if (pUserInfo->UserInfo1.wkui1_logon_domain == NULL) { ERR("\n"); @@ -803,13 +812,17 @@ NetrWkstaUserGetInfo( break; } - ZeroMemory(pUserInfo->UserInfo1.wkui1_logon_domain, UserInfoResponseBuffer->LogonDomainName.Length + sizeof(WCHAR)); - CopyMemory(pUserInfo->UserInfo1.wkui1_logon_domain, UserInfoResponseBuffer->LogonDomainName.Buffer, UserInfoResponseBuffer->LogonDomainName.Length); + ZeroMemory(pUserInfo->UserInfo1.wkui1_logon_domain, + UserInfoResponseBuffer->LogonDomainName.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo->UserInfo1.wkui1_logon_domain, + UserInfoResponseBuffer->LogonDomainName.Buffer, + UserInfoResponseBuffer->LogonDomainName.Length); /* FIXME: wkui1_oth_domains */ /* Logon Server */ - pUserInfo->UserInfo1.wkui1_logon_server = midl_user_allocate(UserInfoResponseBuffer->LogonServer.Length + sizeof(WCHAR)); + pUserInfo->UserInfo1.wkui1_logon_server = + midl_user_allocate(UserInfoResponseBuffer->LogonServer.Length + sizeof(WCHAR)); if (pUserInfo->UserInfo1.wkui1_logon_server == NULL) { ERR("\n"); @@ -817,8 +830,11 @@ NetrWkstaUserGetInfo( break; } - ZeroMemory(pUserInfo->UserInfo1.wkui1_logon_server, UserInfoResponseBuffer->LogonServer.Length + sizeof(WCHAR)); - CopyMemory(pUserInfo->UserInfo1.wkui1_logon_server, UserInfoResponseBuffer->LogonServer.Buffer, UserInfoResponseBuffer->LogonServer.Length); + ZeroMemory(pUserInfo->UserInfo1.wkui1_logon_server, + UserInfoResponseBuffer->LogonServer.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo->UserInfo1.wkui1_logon_server, + UserInfoResponseBuffer->LogonServer.Buffer, + UserInfoResponseBuffer->LogonServer.Length); *UserInfo = pUserInfo; break;
2 weeks, 5 days
1
0
0
0
[reactos] 01/01: [SHELL32][SHELL32_APITEST][SDK] Implement SHShouldShowWizards (#7614)
by Katayama Hirofumi MZ
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b68104a8a08a79a95a742…
commit b68104a8a08a79a95a7426e3966f1d20769cc741 Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com> AuthorDate: Fri Jan 17 13:36:20 2025 +0900 Commit: GitHub <noreply(a)github.com> CommitDate: Fri Jan 17 13:36:20 2025 +0900 [SHELL32][SHELL32_APITEST][SDK] Implement SHShouldShowWizards (#7614) Implementing missing features... JIRA issue: CORE-19278 - Move function definition from stubs.cpp into utils.cpp. - Add prototype to <undocshell.h>. --- dll/win32/shell32/stubs.cpp | 11 -- dll/win32/shell32/utils.cpp | 30 +++++ modules/rostests/apitests/shell32/CMakeLists.txt | 1 + .../apitests/shell32/SHShouldShowWizards.cpp | 123 +++++++++++++++++++++ modules/rostests/apitests/shell32/testlist.c | 2 + sdk/include/reactos/undocshell.h | 2 + 6 files changed, 158 insertions(+), 11 deletions(-) diff --git a/dll/win32/shell32/stubs.cpp b/dll/win32/shell32/stubs.cpp index fa022eb6c07..d54e80c14af 100644 --- a/dll/win32/shell32/stubs.cpp +++ b/dll/win32/shell32/stubs.cpp @@ -896,17 +896,6 @@ SHSetUserPicturePathW(LPCWSTR lpPath, int csidl, LPVOID lpUnknown) return E_FAIL; } -/* - * Unimplemented - */ -EXTERN_C BOOL -WINAPI -SHShouldShowWizards(LPVOID lpUnknown) -{ - FIXME("SHShouldShowWizards() stub\n"); - return FALSE; -} - /* * Unimplemented */ diff --git a/dll/win32/shell32/utils.cpp b/dll/win32/shell32/utils.cpp index 21e97461c52..c1761021e18 100644 --- a/dll/win32/shell32/utils.cpp +++ b/dll/win32/shell32/utils.cpp @@ -122,6 +122,36 @@ HRESULT SHILAppend(_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl) return hr; } +/************************************************************************* + * SHShouldShowWizards [SHELL32.237] + * + * Used by printer and network features. + * @see
https://undoc.airesoft.co.uk/shell32.dll/SHShouldShowWizards.php
+ */ +EXTERN_C +HRESULT WINAPI +SHShouldShowWizards(_In_ IUnknown *pUnknown) +{ + HRESULT hr; + IShellBrowser *pBrowser; + + hr = IUnknown_QueryService(pUnknown, SID_STopWindow, IID_PPV_ARG(IShellBrowser, &pBrowser)); + if (FAILED(hr)) + return hr; + + SHELLSTATE state; + SHGetSetSettings(&state, SSF_WEBVIEW, FALSE); + if (state.fWebView && + !SHRegGetBoolUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", + L"ShowWizardsTEST", FALSE, FALSE)) + { + hr = S_FALSE; + } + + pBrowser->Release(); + return hr; +} + static BOOL OpenEffectiveToken( _In_ DWORD DesiredAccess, diff --git a/modules/rostests/apitests/shell32/CMakeLists.txt b/modules/rostests/apitests/shell32/CMakeLists.txt index cad67b40a19..10ef4004e7c 100644 --- a/modules/rostests/apitests/shell32/CMakeLists.txt +++ b/modules/rostests/apitests/shell32/CMakeLists.txt @@ -33,6 +33,7 @@ list(APPEND SOURCE SHCreateFileExtractIconW.cpp SHParseDisplayName.cpp SHRestricted.cpp + SHShouldShowWizards.cpp She.cpp ShellExecCmdLine.cpp ShellExecuteEx.cpp diff --git a/modules/rostests/apitests/shell32/SHShouldShowWizards.cpp b/modules/rostests/apitests/shell32/SHShouldShowWizards.cpp new file mode 100644 index 00000000000..07b2f5846e3 --- /dev/null +++ b/modules/rostests/apitests/shell32/SHShouldShowWizards.cpp @@ -0,0 +1,123 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: GPL-2.0+ (
https://spdx.org/licenses/GPL-2.0+
) + * PURPOSE: Test for SHShouldShowWizards + * COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz(a)gmail.com) + */ + +#include "shelltest.h" +#include <undocshell.h> +#include <versionhelpers.h> + +class CDummyClass + : public IServiceProvider + , public IShellBrowser +{ +public: + CDummyClass() { } + + IUnknown *GetUnknown() + { + return static_cast<IServiceProvider *>(this); + } + + // *** IUnknown methods *** + STDMETHODIMP QueryInterface(REFIID riid, VOID **ppvObj) override + { + if (riid == IID_IUnknown || riid == IID_IServiceProvider) + { + AddRef(); + *ppvObj = static_cast<IServiceProvider *>(this); + return S_OK; + } + return E_NOINTERFACE; + } + STDMETHODIMP_(ULONG) AddRef() override + { + return 1; + } + STDMETHODIMP_(ULONG) Release() override + { + return 1; + } + + // *** IOleWindow methods *** + STDMETHODIMP GetWindow(HWND *phwnd) override { return E_NOTIMPL; } + STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) override { return E_NOTIMPL; } + + // *** IShellBrowser methods *** + STDMETHODIMP InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override { return E_NOTIMPL; } + STDMETHODIMP SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) override { return E_NOTIMPL; } + STDMETHODIMP RemoveMenusSB(HMENU hmenuShared) override { return E_NOTIMPL; } + STDMETHODIMP SetStatusTextSB(LPCOLESTR pszStatusText) override { return E_NOTIMPL; } + STDMETHODIMP EnableModelessSB(BOOL fEnable) override { return E_NOTIMPL; } + STDMETHODIMP TranslateAcceleratorSB(MSG *pmsg, WORD wID) override { return E_NOTIMPL; } + STDMETHODIMP BrowseObject(LPCITEMIDLIST pidl, UINT wFlags) override { return E_NOTIMPL; } + STDMETHODIMP GetViewStateStream(DWORD grfMode, IStream **ppStrm) override { return E_NOTIMPL; } + STDMETHODIMP GetControlWindow(UINT id, HWND *lphwnd) override { return E_NOTIMPL; } + STDMETHODIMP SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) override { return E_NOTIMPL; } + STDMETHODIMP QueryActiveShellView(struct IShellView **ppshv) override { return E_NOTIMPL; } + STDMETHODIMP OnViewWindowActive(struct IShellView *ppshv) override { return E_NOTIMPL; } + STDMETHODIMP SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) override { return E_NOTIMPL; } + + // *** IServiceProvider methods *** + STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override + { + if (riid == IID_IShellBrowser) + { + AddRef(); + *ppvObject = static_cast<IShellBrowser *>(this); + return S_OK; + } + return E_FAIL; + } +}; + +static VOID SetShowWizardsTEST(BOOL bValue) +{ + DWORD dwValue = bValue; + SHRegSetUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", + L"ShowWizardsTEST", REG_DWORD, &dwValue, sizeof(dwValue), SHREGSET_FORCE_HKCU); +} + +START_TEST(SHShouldShowWizards) +{ + // Save old values + SHELLSTATE state; + SHGetSetSettings(&state, SSF_WEBVIEW, FALSE); + BOOL bOldWebView = state.fWebView; + BOOL bOldTestValue = SHRegGetBoolUSValueW( + L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", + L"ShowWizardsTEST", + FALSE, + FALSE); + + CDummyClass dummy; + HRESULT hr; + const BOOL bVistaPlus = IsWindowsVistaOrGreater(); + + state.fWebView = FALSE; + SHGetSetSettings(&state, SSF_WEBVIEW, TRUE); + SetShowWizardsTEST(FALSE); + hr = SHShouldShowWizards(dummy.GetUnknown()); + ok_hex(hr, bVistaPlus ? S_FALSE : S_OK); + + SetShowWizardsTEST(TRUE); + hr = SHShouldShowWizards(dummy.GetUnknown()); + ok_hex(hr, bVistaPlus ? S_FALSE : S_OK); + + state.fWebView = TRUE; + SHGetSetSettings(&state, SSF_WEBVIEW, TRUE); + SetShowWizardsTEST(FALSE); + hr = SHShouldShowWizards(dummy.GetUnknown()); + ok_hex(hr, S_FALSE); + + SetShowWizardsTEST(TRUE); + hr = SHShouldShowWizards(dummy.GetUnknown()); + ok_hex(hr, bVistaPlus ? S_FALSE : S_OK); + + // Restore old values + state.fWebView = bOldWebView; + SHGetSetSettings(&state, SSF_WEBVIEW, TRUE); + SetShowWizardsTEST(bOldTestValue); +} diff --git a/modules/rostests/apitests/shell32/testlist.c b/modules/rostests/apitests/shell32/testlist.c index 87f924f9f23..0da5972b358 100644 --- a/modules/rostests/apitests/shell32/testlist.c +++ b/modules/rostests/apitests/shell32/testlist.c @@ -45,6 +45,7 @@ extern void func_SHGetFileInfo(void); extern void func_SHGetUserDisplayName(void); extern void func_SHLimitInputEdit(void); extern void func_SHParseDisplayName(void); +extern void func_SHShouldShowWizards(void); extern void func_SHSimpleIDListFromPath(void); extern void func_SHRestricted(void); @@ -92,6 +93,7 @@ const struct test winetest_testlist[] = { "SHGetUserDisplayName", func_SHGetUserDisplayName }, { "SHLimitInputEdit", func_SHLimitInputEdit }, { "SHParseDisplayName", func_SHParseDisplayName }, + { "SHShouldShowWizards", func_SHShouldShowWizards }, { "SHSimpleIDListFromPath", func_SHSimpleIDListFromPath }, { "SHRestricted", func_SHRestricted }, diff --git a/sdk/include/reactos/undocshell.h b/sdk/include/reactos/undocshell.h index 76e78372dd1..3e685e08046 100644 --- a/sdk/include/reactos/undocshell.h +++ b/sdk/include/reactos/undocshell.h @@ -204,6 +204,8 @@ int WINAPI SHOutOfMemoryMessageBox( LPCSTR lpCaption, UINT uType); +HRESULT WINAPI SHShouldShowWizards(_In_ IUnknown *pUnknown); + DWORD WINAPI SHNetConnectionDialog( HWND hwndOwner, LPCWSTR lpstrRemoteName,
2 weeks, 6 days
1
0
0
0
[reactos] 01/01: [NTGDI] Silence some debug log spam from GreGetObjectOwner when input parameter is NULL. (#7606)
by Doug Lyons
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b1257cefe1001598566b7…
commit b1257cefe1001598566b7efba7fe0dd13e12782f Author: Doug Lyons <douglyons(a)douglyons.com> AuthorDate: Thu Jan 16 19:11:19 2025 -0600 Commit: GitHub <noreply(a)github.com> CommitDate: Thu Jan 16 19:11:19 2025 -0600 [NTGDI] Silence some debug log spam from GreGetObjectOwner when input parameter is NULL. (#7606) CORE-19962 Co-authored-by: Timo Kreuzer <timo.kreuzer(a)reactos.org> --- win32ss/gdi/ntgdi/gdiobj.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/win32ss/gdi/ntgdi/gdiobj.c b/win32ss/gdi/ntgdi/gdiobj.c index 07c16e0bcae..00c85f5f9dc 100644 --- a/win32ss/gdi/ntgdi/gdiobj.c +++ b/win32ss/gdi/ntgdi/gdiobj.c @@ -1193,6 +1193,12 @@ GreGetObjectOwner(HGDIOBJ hobj) { ULONG ulIndex, ulOwner; + if (hobj == NULL) + { + DPRINT("GreGetObjectOwner: invalid NULL handle\n"); + return GDI_OBJ_HMGR_RESTRICTED; + } + /* Get the handle index */ ulIndex = GDI_HANDLE_GET_INDEX(hobj);
2 weeks, 6 days
1
0
0
0
[reactos] 01/01: [SHELL32][SHELL32_APITEST][SDK] Implement SHGetUserDisplayName (#7612)
by Katayama Hirofumi MZ
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=fcbcaa10a76c6f5d5f972…
commit fcbcaa10a76c6f5d5f972c842d1b8b1a5a23a30b Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com> AuthorDate: Fri Jan 17 09:33:52 2025 +0900 Commit: GitHub <noreply(a)github.com> CommitDate: Fri Jan 17 09:33:52 2025 +0900 [SHELL32][SHELL32_APITEST][SDK] Implement SHGetUserDisplayName (#7612) Implemementing missing features... JIRA issue: CORE-19278 - Add netapi32 and secur32 delay importing. - Move function definition from stubs.cpp into utils.cpp. - Include some security headers in utils.cpp. - Adapt <secext.h> to C++. - Add prototype to <undocshell.h>. --- dll/win32/shell32/CMakeLists.txt | 2 +- dll/win32/shell32/stubs.cpp | 12 ---- dll/win32/shell32/utils.cpp | 65 ++++++++++++++++++++++ modules/rostests/apitests/shell32/CMakeLists.txt | 1 + .../apitests/shell32/SHGetUserDisplayName.cpp | 30 ++++++++++ modules/rostests/apitests/shell32/testlist.c | 2 + sdk/include/psdk/secext.h | 11 +++- sdk/include/reactos/undocshell.h | 5 ++ 8 files changed, 114 insertions(+), 14 deletions(-) diff --git a/dll/win32/shell32/CMakeLists.txt b/dll/win32/shell32/CMakeLists.txt index 258191318b6..81df5d528ab 100644 --- a/dll/win32/shell32/CMakeLists.txt +++ b/dll/win32/shell32/CMakeLists.txt @@ -120,7 +120,7 @@ set_source_files_properties(shell32.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT set_module_type(shell32 win32dll UNICODE) target_link_libraries(shell32 shellmenu shelldesktop wine uuid recyclebin cpprt atl_classes oldnames) -add_delay_importlibs(shell32 powrprof shdocvw devmgr winspool.drv winmm mpr uxtheme ole32 oleaut32 userenv browseui version fmifs) +add_delay_importlibs(shell32 powrprof shdocvw devmgr winspool.drv winmm mpr uxtheme ole32 oleaut32 userenv browseui version fmifs netapi32 secur32) add_importlibs(shell32 advapi32 gdi32 user32 comctl32 comdlg32 shlwapi msvcrt kernel32 ntdll) add_dependencies(shell32 stdole2) # shell32_shldisp.tlb needs stdole2.tlb add_pch(shell32 precomp.h "${PCH_SKIP_SOURCE}") diff --git a/dll/win32/shell32/stubs.cpp b/dll/win32/shell32/stubs.cpp index 77e674e795f..fa022eb6c07 100644 --- a/dll/win32/shell32/stubs.cpp +++ b/dll/win32/shell32/stubs.cpp @@ -920,18 +920,6 @@ PathIsSlowW( return FALSE; } -/* - * Unimplemented - */ -EXTERN_C DWORD -WINAPI -SHGetUserDisplayName(LPWSTR lpName, PULONG puSize) -{ - FIXME("SHGetUserDisplayName() stub\n"); - wcscpy(lpName, L"UserName"); - return ERROR_SUCCESS; -} - /* * Unimplemented */ diff --git a/dll/win32/shell32/utils.cpp b/dll/win32/shell32/utils.cpp index 440d22f6460..21e97461c52 100644 --- a/dll/win32/shell32/utils.cpp +++ b/dll/win32/shell32/utils.cpp @@ -6,6 +6,10 @@ */ #include "precomp.h" +#include <lmcons.h> +#include <lmapibuf.h> +#include <lmaccess.h> +#include <secext.h> WINE_DEFAULT_DEBUG_CHANNEL(shell); @@ -1485,3 +1489,64 @@ SHELL_CreateShell32DefaultExtractIcon(int IconIndex, REFIID riid, LPVOID *ppvOut initIcon->SetNormalIcon(swShell32Name, IconIndex); return initIcon->QueryInterface(riid, ppvOut); } + +/************************************************************************* + * SHGetUserDisplayName [SHELL32.241] + * + * @see
https://undoc.airesoft.co.uk/shell32.dll/SHGetUserDisplayName.php
+ */ +EXTERN_C +HRESULT WINAPI +SHGetUserDisplayName( + _Out_writes_to_(*puSize, *puSize) PWSTR pName, + _Inout_ PULONG puSize) +{ + if (!pName || !puSize) + return E_INVALIDARG; + + if (GetUserNameExW(NameDisplay, pName, puSize)) + return S_OK; + + LONG error = GetLastError(); // for ERROR_NONE_MAPPED + HRESULT hr = HRESULT_FROM_WIN32(error); + + WCHAR UserName[MAX_PATH]; + DWORD cchUserName = _countof(UserName); + if (!GetUserNameW(UserName, &cchUserName)) + return HRESULT_FROM_WIN32(GetLastError()); + + // Was the user name not available in the specified format (NameDisplay)? + if (error == ERROR_NONE_MAPPED) + { + // Try to get the user name by using Network API + PUSER_INFO_2 UserInfo; + DWORD NetError = NetUserGetInfo(NULL, UserName, 2, (PBYTE*)&UserInfo); + if (NetError) + { + hr = HRESULT_FROM_WIN32(NetError); + } + else + { + if (UserInfo->usri2_full_name) + { + hr = StringCchCopyW(pName, *puSize, UserInfo->usri2_full_name); + if (SUCCEEDED(hr)) + { + // Include the NUL-terminator + *puSize = lstrlenW(UserInfo->usri2_full_name) + 1; + } + } + + NetApiBufferFree(UserInfo); + } + } + + if (FAILED(hr)) + { + hr = StringCchCopyW(pName, *puSize, UserName); + if (SUCCEEDED(hr)) + *puSize = cchUserName; + } + + return hr; +} diff --git a/modules/rostests/apitests/shell32/CMakeLists.txt b/modules/rostests/apitests/shell32/CMakeLists.txt index 2a90a0e009d..cad67b40a19 100644 --- a/modules/rostests/apitests/shell32/CMakeLists.txt +++ b/modules/rostests/apitests/shell32/CMakeLists.txt @@ -41,6 +41,7 @@ list(APPEND SOURCE ShellInfo.cpp ShellState.cpp SHGetAttributesFromDataObject.cpp + SHGetUserDisplayName.cpp SHLimitInputEdit.cpp menu.cpp shelltest.cpp) diff --git a/modules/rostests/apitests/shell32/SHGetUserDisplayName.cpp b/modules/rostests/apitests/shell32/SHGetUserDisplayName.cpp new file mode 100644 index 00000000000..ed2fcc37587 --- /dev/null +++ b/modules/rostests/apitests/shell32/SHGetUserDisplayName.cpp @@ -0,0 +1,30 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: GPL-2.0+ (
https://spdx.org/licenses/GPL-2.0+
) + * PURPOSE: Test for SHGetUserDisplayName + * COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz(a)gmail.com) + */ + +#include "shelltest.h" +#include <undocshell.h> + +START_TEST(SHGetUserDisplayName) +{ + HRESULT hr; + WCHAR szBuf[MAX_PATH]; + ULONG cchBuf; + + hr = SHGetUserDisplayName(NULL, NULL); + ok_hex(hr, E_INVALIDARG); + + hr = SHGetUserDisplayName(szBuf, NULL); + ok_hex(hr, E_INVALIDARG); + + cchBuf = _countof(szBuf); + hr = SHGetUserDisplayName(NULL, &cchBuf); + ok_hex(hr, E_INVALIDARG); + + cchBuf = _countof(szBuf); + hr = SHGetUserDisplayName(szBuf, &cchBuf); + ok_hex(hr, S_OK); +} diff --git a/modules/rostests/apitests/shell32/testlist.c b/modules/rostests/apitests/shell32/testlist.c index ff06c5a5dc6..87f924f9f23 100644 --- a/modules/rostests/apitests/shell32/testlist.c +++ b/modules/rostests/apitests/shell32/testlist.c @@ -42,6 +42,7 @@ extern void func_ShellHook(void); extern void func_ShellState(void); extern void func_SHGetAttributesFromDataObject(void); extern void func_SHGetFileInfo(void); +extern void func_SHGetUserDisplayName(void); extern void func_SHLimitInputEdit(void); extern void func_SHParseDisplayName(void); extern void func_SHSimpleIDListFromPath(void); @@ -88,6 +89,7 @@ const struct test winetest_testlist[] = { "ShellState", func_ShellState }, { "SHGetAttributesFromDataObject", func_SHGetAttributesFromDataObject }, { "SHGetFileInfo", func_SHGetFileInfo }, + { "SHGetUserDisplayName", func_SHGetUserDisplayName }, { "SHLimitInputEdit", func_SHLimitInputEdit }, { "SHParseDisplayName", func_SHParseDisplayName }, { "SHSimpleIDListFromPath", func_SHSimpleIDListFromPath }, diff --git a/sdk/include/psdk/secext.h b/sdk/include/psdk/secext.h index b60399241ee..d9397113171 100644 --- a/sdk/include/psdk/secext.h +++ b/sdk/include/psdk/secext.h @@ -1,8 +1,13 @@ #ifndef _SECEXT_H #define _SECEXT_H +#ifdef __cplusplus +extern "C" { +#endif + #ifndef RC_INVOKED #if (_WIN32_WINNT >= 0x0500) + typedef enum { NameUnknown = 0, @@ -34,7 +39,11 @@ BOOLEAN WINAPI TranslateNameW(LPCWSTR,EXTENDED_NAME_FORMAT,EXTENDED_NAME_FORMAT, #define TranslateName TranslateNameA #endif - #endif /* ! RC_INVOKED */ #endif /* _WIN32_WINNT >= 0x0500 */ + +#ifdef __cplusplus +} // extern "C" +#endif + #endif /* ! _SECEXT_H */ diff --git a/sdk/include/reactos/undocshell.h b/sdk/include/reactos/undocshell.h index f5bd2cd7f2e..76e78372dd1 100644 --- a/sdk/include/reactos/undocshell.h +++ b/sdk/include/reactos/undocshell.h @@ -211,6 +211,11 @@ DWORD WINAPI SHNetConnectionDialog( BOOL WINAPI SHIsTempDisplayMode(VOID); +HRESULT WINAPI +SHGetUserDisplayName( + _Out_writes_to_(*puSize, *puSize) PWSTR pName, + _Inout_ PULONG puSize); + /**************************************************************************** * Cabinet Window Messages */
2 weeks, 6 days
1
0
0
0
[reactos] 01/01: [SDK:REACTOS] acpi.h: Update FACS and FADT types to ACPI v6.4 (#6042)
by Serge Gautherie
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ee5ff8ce0c3e01fa68414…
commit ee5ff8ce0c3e01fa684140584348d4cd9589bd06 Author: Serge Gautherie <32623169+SergeGautherie(a)users.noreply.github.com> AuthorDate: Thu Jan 16 19:55:39 2025 +0100 Commit: GitHub <noreply(a)github.com> CommitDate: Thu Jan 16 10:55:39 2025 -0800 [SDK:REACTOS] acpi.h: Update FACS and FADT types to ACPI v6.4 (#6042) - FACS: Reduce size by 1 char. - FADT: Add 3 new fields. - Update reserved fields. Use offsets. - Improve documentation. Addendum to 0331781 (r46610). --- sdk/include/reactos/drivers/acpi/acpi.h | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/sdk/include/reactos/drivers/acpi/acpi.h b/sdk/include/reactos/drivers/acpi/acpi.h index fc4acff699b..078145b461d 100644 --- a/sdk/include/reactos/drivers/acpi/acpi.h +++ b/sdk/include/reactos/drivers/acpi/acpi.h @@ -79,20 +79,23 @@ typedef struct _GEN_ADDR // typedef struct _RSDP { + // ACPI v1.0 (Rev=0) ULONGLONG Signature; UCHAR Checksum; UCHAR OEMID[6]; - UCHAR Revision; + UCHAR Revision; // Was reserved before ACPI v2.0 (Rev=2). ULONG RsdtAddress; + // ACPI v2.0 (Rev=2) ULONG Length; PHYSICAL_ADDRESS XsdtAddress; UCHAR XChecksum; - UCHAR Reserved[3]; + UCHAR Reserved33[3]; } RSDP; typedef RSDP *PRSDP; typedef struct _DESCRIPTION_HEADER { + // ACPI v1.0 ULONG Signature; ULONG Length; UCHAR Revision; @@ -107,24 +110,28 @@ typedef DESCRIPTION_HEADER *PDESCRIPTION_HEADER; typedef struct _FACS { + // ACPI v1.0 (Ver=0) ULONG Signature; ULONG Length; ULONG HardwareSignature; ULONG pFirmwareWakingVector; ULONG GlobalLock; ULONG Flags; - PHYSICAL_ADDRESS x_FirmwareWakingVector; - UCHAR version; - UCHAR Reserved[32]; + PHYSICAL_ADDRESS x_FirmwareWakingVector; // Was reserved before ACPI v2.0 (Ver=1). + UCHAR Version; // Was reserved before ACPI v2.0 (Ver=1). + UCHAR Reserved33[3]; + ULONG OsFlags; // Was reserved before ACPI v4.0 (Ver=2). + UCHAR Reserved40[24]; } FACS; typedef FACS *PFACS; typedef struct _FADT { + // ACPI v1.0 (H.Rev=1) DESCRIPTION_HEADER Header; ULONG facs; ULONG dsdt; - UCHAR int_model; + UCHAR reserved44[1]; // Was int_model before ACPI v2.0. UCHAR pm_profile; USHORT sci_int_vector; ULONG smi_cmd_io_port; @@ -158,11 +165,13 @@ typedef struct _FADT UCHAR month_alarm_index; UCHAR century_alarm_index; USHORT boot_arch; - UCHAR reserved3[1]; + UCHAR reserved111[1]; ULONG flags; + // ACPI v1.5 (H.Rev=3) GEN_ADDR reset_reg; UCHAR reset_val; - UCHAR reserved4[3]; + USHORT arm_boot_arch; // Was reserved before ACPI v5.1. + UCHAR minor_revision; // Was reserved before ACPI v5.1. PHYSICAL_ADDRESS x_firmware_ctrl; PHYSICAL_ADDRESS x_dsdt; GEN_ADDR x_pm1a_evt_blk; @@ -173,6 +182,11 @@ typedef struct _FADT GEN_ADDR x_pm_tmr_blk; GEN_ADDR x_gp0_blk; GEN_ADDR x_gp1_blk; + // ACPI v5.0 (H.Rev=5) + GEN_ADDR sleep_control; + GEN_ADDR sleep_status; + // ACPI v6.0 (H.Rev=6) + ULONGLONG hypervisor_id; } FADT; typedef FADT *PFADT; @@ -185,6 +199,7 @@ typedef DSDT *PDSDT; typedef struct _RSDT { + // ACPI v1.0 (H.Rev=1) DESCRIPTION_HEADER Header; ULONG Tables[ANYSIZE_ARRAY]; } RSDT; @@ -192,6 +207,7 @@ typedef RSDT *PRSDT; typedef struct _XSDT { + // ACPI v2.0 (H.Rev=1) DESCRIPTION_HEADER Header; PHYSICAL_ADDRESS Tables[ANYSIZE_ARRAY]; } XSDT;
2 weeks, 6 days
1
0
0
0
[reactos] 01/01: [PSDK] Add definitions of desired Native Wi-Fi data access permissions (#7626)
by Vitaly Orekhov
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=abe20f6120cd7776a3bc1…
commit abe20f6120cd7776a3bc1b39c912e591559dc0e1 Author: Vitaly Orekhov <vkvo2000(a)vivaldi.net> AuthorDate: Thu Jan 16 20:25:57 2025 +0300 Commit: GitHub <noreply(a)github.com> CommitDate: Thu Jan 16 18:25:57 2025 +0100 [PSDK] Add definitions of desired Native Wi-Fi data access permissions (#7626) The `WLAN_READ_ACCESS`, `WLAN_WRITE_ACCESS` and `WLAN_EXECUTE_ACCESS` flags are for controlling whether we can (or not) return data via Wlan[Get|Query]* or modify via WlanSet* function families.
https://learn.microsoft.com/en-us/windows/win32/nativewifi/native-wifi-api-…
--- sdk/include/psdk/wlanapi.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/include/psdk/wlanapi.h b/sdk/include/psdk/wlanapi.h index a0675f49e6c..64c0a32ff3e 100644 --- a/sdk/include/psdk/wlanapi.h +++ b/sdk/include/psdk/wlanapi.h @@ -29,6 +29,10 @@ extern "C" { #define WLAN_AVAILABLE_NETWORK_HOTSPOT2_ROAMING 0x00000080 #define WLAN_AVAILABLE_NETWORK_AUTO_CONNECT_FAILED 0x00000100 +#define WLAN_READ_ACCESS (STANDARD_RIGHTS_READ | FILE_READ_DATA) +#define WLAN_EXECUTE_ACCESS (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | WLAN_READ_ACCESS) +#define WLAN_WRITE_ACCESS (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | DELETE | WRITE_DAC | WLAN_READ_ACCESS | WLAN_EXECUTE_ACCESS) + /* Enumerations */ #if defined(__midl) || defined(__WIDL__)
2 weeks, 6 days
1
0
0
0
← Newer
1
...
14
15
16
17
18
19
20
...
28
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Results per page:
10
25
50
100
200