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,