Nikolay Sivov : kernelbase: Add QISearch().
Alexandre Julliard
julliard at winehq.org
Wed May 15 16:18:26 CDT 2019
Module: wine
Branch: master
Commit: 46e727ae49efc66088f62753f66fbd52fae49e4c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=46e727ae49efc66088f62753f66fbd52fae49e4c
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed May 15 14:57:04 2019 +0300
kernelbase: Add QISearch().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernelbase/Makefile.in | 1 +
dlls/kernelbase/kernelbase.spec | 2 +-
dlls/kernelbase/main.c | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/dlls/kernelbase/Makefile.in b/dlls/kernelbase/Makefile.in
index a7db45e..88ba774 100644
--- a/dlls/kernelbase/Makefile.in
+++ b/dlls/kernelbase/Makefile.in
@@ -1,4 +1,5 @@
MODULE = kernelbase.dll
+IMPORTS = uuid
C_SRCS = \
main.c \
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index e586f50..7108c40 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -1191,7 +1191,7 @@
# @ stub PublishStateChangeNotification
@ stdcall PulseEvent(long) kernel32.PulseEvent
@ stdcall PurgeComm(long long) kernel32.PurgeComm
-@ stdcall QISearch(long long long long) shlwapi.QISearch
+@ stdcall QISearch(ptr ptr ptr ptr)
@ stdcall QueryActCtxSettingsW(long ptr wstr wstr ptr long ptr) kernel32.QueryActCtxSettingsW
@ stdcall QueryActCtxW(long ptr ptr long ptr long ptr) kernel32.QueryActCtxW
@ stdcall QueryDepthSList(ptr) kernel32.QueryDepthSList
diff --git a/dlls/kernelbase/main.c b/dlls/kernelbase/main.c
index 5192dfb..3fce236 100644
--- a/dlls/kernelbase/main.c
+++ b/dlls/kernelbase/main.c
@@ -17,10 +17,13 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define COBJMACROS
+
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windows.h"
#include "appmodel.h"
+#include "shlwapi.h"
#include "wine/debug.h"
#include "winternl.h"
@@ -125,3 +128,40 @@ BOOL WINAPI WaitOnAddress(volatile void *addr, void *cmp, SIZE_T size, DWORD tim
return TRUE;
}
+
+HRESULT WINAPI QISearch(void *base, const QITAB *table, REFIID riid, void **obj)
+{
+ const QITAB *ptr;
+ IUnknown *unk;
+
+ TRACE("%p, %p, %s, %p\n", base, table, debugstr_guid(riid), obj);
+
+ if (!obj)
+ return E_POINTER;
+
+ for (ptr = table; ptr->piid; ++ptr)
+ {
+ TRACE("trying (offset %d) %s\n", ptr->dwOffset, debugstr_guid(ptr->piid));
+ if (IsEqualIID(riid, ptr->piid))
+ {
+ unk = (IUnknown *)((BYTE *)base + ptr->dwOffset);
+ TRACE("matched, returning (%p)\n", unk);
+ *obj = unk;
+ IUnknown_AddRef(unk);
+ return S_OK;
+ }
+ }
+
+ if (IsEqualIID(riid, &IID_IUnknown))
+ {
+ unk = (IUnknown *)((BYTE *)base + table->dwOffset);
+ TRACE("returning first for IUnknown (%p)\n", unk);
+ *obj = unk;
+ IUnknown_AddRef(unk);
+ return S_OK;
+ }
+
+ WARN("Not found %s.\n", debugstr_guid(riid));
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
More information about the wine-cvs
mailing list