Alexandre Julliard : kernelbase: Implement IsApiSetImplemented().

Alexandre Julliard julliard at winehq.org
Tue Feb 22 16:06:51 CST 2022


Module: wine
Branch: master
Commit: 77973e7e720dabb57c76b0a971c07ff7e70d36b4
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=77973e7e720dabb57c76b0a971c07ff7e70d36b4

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Feb 22 12:38:37 2022 +0100

kernelbase: Implement IsApiSetImplemented().

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/module.c    |  1 -
 dlls/kernelbase/kernelbase.spec |  1 +
 dlls/kernelbase/loader.c        | 16 ++++++++++++++++
 include/winbase.h               |  1 +
 4 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/dlls/kernel32/tests/module.c b/dlls/kernel32/tests/module.c
index 58dcfaaec99..6d44b50e122 100644
--- a/dlls/kernel32/tests/module.c
+++ b/dlls/kernel32/tests/module.c
@@ -1469,7 +1469,6 @@ static void test_apisets(void)
         return;
     }
     if (!pApiSetQueryApiSetPresenceEx) win_skip( "ApiSetQueryApiSetPresenceEx not implemented\n" );
-    todo_wine
     if (!pIsApiSetImplemented) win_skip( "IsApiSetImplemented not implemented\n" );
 
     for (i = 0; i < ARRAY_SIZE(tests); i++)
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index a4c14184452..c1175af2f9f 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -868,6 +868,7 @@
 # @ stub InternetTimeToSystemTimeW
 # @ stub InvalidateAppModelVersionCache
 @ stub InvalidateTzSpecificCache
+@ stdcall IsApiSetImplemented(str)
 @ stdcall IsCharAlphaA(long)
 @ stdcall IsCharAlphaNumericA(long)
 @ stdcall IsCharAlphaNumericW(long)
diff --git a/dlls/kernelbase/loader.c b/dlls/kernelbase/loader.c
index 02d72cfbfbf..0fd2d7b7c99 100644
--- a/dlls/kernelbase/loader.c
+++ b/dlls/kernelbase/loader.c
@@ -467,6 +467,22 @@ FARPROC WINAPI DECLSPEC_HOTPATCH GetProcAddress( HMODULE module, LPCSTR function
 #endif /* __x86_64__ */
 
 
+/***********************************************************************
+ *	IsApiSetImplemented   (kernelbase.@)
+ */
+BOOL WINAPI IsApiSetImplemented( LPCSTR name )
+{
+    UNICODE_STRING str;
+    NTSTATUS status;
+    BOOLEAN in_schema, present;
+
+    if (!RtlCreateUnicodeStringFromAsciiz( &str, name )) return FALSE;
+    status = ApiSetQueryApiSetPresenceEx( &str, &in_schema, &present );
+    RtlFreeUnicodeString( &str );
+    return !status && present;
+}
+
+
 /***********************************************************************
  *	LoadLibraryA   (kernelbase.@)
  */
diff --git a/include/winbase.h b/include/winbase.h
index a8744eb417a..a0c62d710b9 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -2406,6 +2406,7 @@ WINBASEAPI VOID        WINAPI InitOnceInitialize(PINIT_ONCE);
 WINBASEAPI PSLIST_ENTRY WINAPI InterlockedFlushSList(PSLIST_HEADER);
 WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER);
 WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY);
+WINBASEAPI BOOL        WINAPI IsApiSetImplemented(LPCSTR);
 WINBASEAPI BOOL        WINAPI IsBadCodePtr(FARPROC);
 WINBASEAPI BOOL        WINAPI IsBadHugeReadPtr(LPCVOID,UINT_PTR);
 WINBASEAPI BOOL        WINAPI IsBadHugeWritePtr(LPVOID,UINT_PTR);




More information about the wine-cvs mailing list