From: Elizabeth zfigura@codeweavers.com
This was added for native inetcpl, which is not redistributable or generally valuable.
It's not even present in modern Windows—the export exists, but can't actually be called, since it forwards to a "shunimpl.dll" which fails to initialize when loaded. --- dlls/shdocvw/shdocvw.spec | 2 +- dlls/shdocvw/shdocvw_main.c | 25 ----- dlls/shdocvw/tests/Makefile.in | 1 - dlls/shdocvw/tests/shdocvw.c | 169 --------------------------------- 4 files changed, 1 insertion(+), 196 deletions(-) delete mode 100644 dlls/shdocvw/tests/shdocvw.c
diff --git a/dlls/shdocvw/shdocvw.spec b/dlls/shdocvw/shdocvw.spec index c8afffba8b1..88d1d2c535f 100644 --- a/dlls/shdocvw/shdocvw.spec +++ b/dlls/shdocvw/shdocvw.spec @@ -37,7 +37,7 @@ 148 stub -noname IEGetDisplayName 149 stub -noname IEBindToObjectEx 150 stub -noname _GetStdLocation -151 stdcall -noname URLSubRegQueryA(str str long ptr long long) +151 stub -noname URLSubRegQueryA(str str long ptr long long) 152 stub -noname CShellUIHelper_CreateInstance2 153 stub -noname IsURLChild 158 stdcall -noname SHRestricted2A(long str long) diff --git a/dlls/shdocvw/shdocvw_main.c b/dlls/shdocvw/shdocvw_main.c index 0a709ca3ed2..e0219d78b21 100644 --- a/dlls/shdocvw/shdocvw_main.c +++ b/dlls/shdocvw/shdocvw_main.c @@ -308,31 +308,6 @@ DWORD WINAPI StopWatchWFORWARD(DWORD dwClass, LPCWSTR lpszStr, DWORD dwUnknown, return ERROR_CALL_NOT_IMPLEMENTED; }
-/****************************************************************** - * URLSubRegQueryA (SHDOCVW.151) - */ -HRESULT WINAPI URLSubRegQueryA(LPCSTR regpath, LPCSTR name, DWORD type, - LPSTR out, DWORD outlen, DWORD unknown) -{ - CHAR buffer[INTERNET_MAX_URL_LENGTH]; - DWORD len; - LONG res; - - TRACE("(%s, %s, %ld, %p, %ld, %ld)\n", debugstr_a(regpath), debugstr_a(name), - type, out, outlen, unknown); - - if (!out) return S_OK; - - len = sizeof(buffer); - res = SHRegGetUSValueA(regpath, name, NULL, buffer, &len, FALSE, NULL, 0); - if (!res) { - lstrcpynA(out, buffer, outlen); - return S_OK; - } - - return E_FAIL; -} - /****************************************************************** * IEParseDisplayNameWithBCW (SHDOCVW.218) */ diff --git a/dlls/shdocvw/tests/Makefile.in b/dlls/shdocvw/tests/Makefile.in index b4f5a7c9703..0b595690d4b 100644 --- a/dlls/shdocvw/tests/Makefile.in +++ b/dlls/shdocvw/tests/Makefile.in @@ -2,5 +2,4 @@ TESTDLL = shdocvw.dll IMPORTS = shell32 ole32 oleaut32 advapi32
SOURCES = \ - shdocvw.c \ shortcut.c diff --git a/dlls/shdocvw/tests/shdocvw.c b/dlls/shdocvw/tests/shdocvw.c deleted file mode 100644 index 1f381253826..00000000000 --- a/dlls/shdocvw/tests/shdocvw.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Unit tests for misc shdocvw functions - * - * Copyright 2008 Detlef Riekenberg - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - - -#include <stdarg.h> - -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "wininet.h" -#include "winnls.h" - -#include "wine/test.h" - -/* ################ */ - -static HMODULE hshdocvw; -static HRESULT (WINAPI *pURLSubRegQueryA)(LPCSTR, LPCSTR, DWORD, LPVOID, DWORD, DWORD); - -static const char appdata[] = "AppData"; -static const char common_appdata[] = "Common AppData"; -static const char default_page_url[] = "Default_Page_URL"; -static const char does_not_exist[] = "does_not_exist"; -static const char regpath_iemain[] = "Software\Microsoft\Internet Explorer\Main"; -static const char regpath_shellfolders[] = "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"; -static const char start_page[] = "Start Page"; - -static void init_functions(void) -{ - hshdocvw = LoadLibraryA("shdocvw.dll"); - pURLSubRegQueryA = (void *) GetProcAddress(hshdocvw, (LPSTR) 151); -} - -/* ################ */ - -static void test_URLSubRegQueryA(void) -{ - CHAR buffer[INTERNET_MAX_URL_LENGTH]; - HRESULT hr; - DWORD used; - DWORD len; - - if (!pURLSubRegQueryA) { - skip("URLSubRegQueryA not found\n"); - return; - } - - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - /* called by inetcpl.cpl */ - hr = pURLSubRegQueryA(regpath_iemain, default_page_url, REG_SZ, buffer, INTERNET_MAX_URL_LENGTH, -1); - ok(hr == E_FAIL || hr == S_OK, "got 0x%lx (expected E_FAIL or S_OK)\n", hr); - - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - /* called by inetcpl.cpl */ - hr = pURLSubRegQueryA(regpath_iemain, start_page, REG_SZ, buffer, INTERNET_MAX_URL_LENGTH, -1); - len = lstrlenA(buffer); - /* respect privacy: do not dump the url */ - ok(hr == S_OK, "got 0x%lx and %ld (expected S_OK)\n", hr, len); - - /* test buffer length: just large enough */ - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - hr = pURLSubRegQueryA(regpath_iemain, start_page, REG_SZ, buffer, len+1, -1); - used = lstrlenA(buffer); - /* respect privacy: do not dump the url */ - ok((hr == S_OK) && (used == len), - "got 0x%lx and %ld (expected S_OK and %ld)\n", hr, used, len); - - /* no space for terminating 0: result is truncated */ - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - hr = pURLSubRegQueryA(regpath_iemain, start_page, REG_SZ, buffer, len, -1); - used = lstrlenA(buffer); - ok((hr == S_OK) && (used == len - 1), - "got 0x%lx and %ld (expected S_OK and %ld)\n", hr, used, len - 1); - - /* no space for the complete result: truncate another char */ - if (len > 1) { - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - hr = pURLSubRegQueryA(regpath_iemain, start_page, REG_SZ, buffer, len-1, -1); - used = lstrlenA(buffer); - ok((hr == S_OK) && (used == (len - 2)), - "got 0x%lx and %ld (expected S_OK and %ld)\n", hr, used, len - 2); - } - - /* only space for the terminating 0: function still succeeded */ - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - hr = pURLSubRegQueryA(regpath_iemain, start_page, REG_SZ, buffer, 1, -1); - used = lstrlenA(buffer); - ok((hr == S_OK) && !used, - "got 0x%lx and %ld (expected S_OK and 0)\n", hr, used); - - /* size of buffer is 0, but the function still succeed. - buffer[0] is cleared in IE 5.01 and IE 5.5 (Buffer Overflow) */ - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - hr = pURLSubRegQueryA(regpath_iemain, start_page, REG_SZ, buffer, 0, -1); - used = lstrlenA(buffer); - ok( (hr == S_OK) && - ((used == INTERNET_MAX_URL_LENGTH - 1) || broken(used == 0)) , - "got 0x%lx and %ld (expected S_OK and INTERNET_MAX_URL_LENGTH - 1)\n", - hr, used); - - /* still succeed without a buffer for the result */ - hr = pURLSubRegQueryA(regpath_iemain, start_page, REG_SZ, NULL, 0, -1); - ok(hr == S_OK, "got 0x%lx (expected S_OK)\n", hr); - - /* still succeed, when a length is given without a buffer */ - hr = pURLSubRegQueryA(regpath_iemain, start_page, REG_SZ, NULL, INTERNET_MAX_URL_LENGTH, -1); - ok(hr == S_OK, "got 0x%lx (expected S_OK)\n", hr); - - /* this value does not exist */ - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - hr = pURLSubRegQueryA(regpath_iemain, does_not_exist, REG_SZ, buffer, INTERNET_MAX_URL_LENGTH, -1); - /* random bytes are copied to the buffer */ - ok((hr == E_FAIL), "got 0x%lx (expected E_FAIL)\n", hr); - - /* the third parameter is ignored. Is it really a type? (data is REG_SZ) */ - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - hr = pURLSubRegQueryA(regpath_iemain, start_page, REG_DWORD, buffer, INTERNET_MAX_URL_LENGTH, -1); - used = lstrlenA(buffer); - ok((hr == S_OK) && (used == len), - "got 0x%lx and %ld (expected S_OK and %ld)\n", hr, used, len); - - /* the function works for HKCU and HKLM */ - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - hr = pURLSubRegQueryA(regpath_shellfolders, appdata, REG_SZ, buffer, INTERNET_MAX_URL_LENGTH, -1); - used = lstrlenA(buffer); - ok(hr == S_OK, "got 0x%lx and %ld (expected S_OK)\n", hr, used); - - memset(buffer, '#', sizeof(buffer)-1); - buffer[sizeof(buffer)-1] = '\0'; - hr = pURLSubRegQueryA(regpath_shellfolders, common_appdata, REG_SZ, buffer, INTERNET_MAX_URL_LENGTH, -1); - used = lstrlenA(buffer); - ok(hr == S_OK, "got 0x%lx and %ld (expected S_OK)\n", hr, used); - - /* todo: what does the last parameter mean? */ -} - -START_TEST(shdocvw) -{ - init_functions(); - test_URLSubRegQueryA(); - FreeLibrary(hshdocvw); -}