For React Native.
-- v3: ntdll: Implement RtlQueryInformationActiveActivationContext().
From: Zhiyi Zhang zzhang@codeweavers.com
--- dlls/kernel32/tests/actctx.c | 36 ++++++++++++++++++++++++++++++++++++ dlls/ntdll/actctx.c | 10 ++++++++++ dlls/ntdll/ntdll.spec | 2 +- include/winternl.h | 1 + 4 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c index 364fc8d7687..ca24ed10549 100644 --- a/dlls/kernel32/tests/actctx.c +++ b/dlls/kernel32/tests/actctx.c @@ -34,6 +34,7 @@ static BOOL (WINAPI *pQueryActCtxSettingsW)(DWORD,HANDLE,LPCWSTR,LPCWSTR,LPWST static NTSTATUS(NTAPI *pRtlFindActivationContextSectionString)(DWORD,const GUID *,ULONG,PUNICODE_STRING,PACTCTX_SECTION_KEYED_DATA); static BOOLEAN (NTAPI *pRtlCreateUnicodeStringFromAsciiz)(PUNICODE_STRING, PCSZ); static VOID (NTAPI *pRtlFreeUnicodeString)(PUNICODE_STRING); +static NTSTATUS(NTAPI *pRtlQueryInformationActiveActivationContext)(ULONG,PVOID,SIZE_T,SIZE_T *);
#ifdef __i386__ #define ARCH "x86" @@ -3098,6 +3099,7 @@ static BOOL init_funcs(void) X(RtlFindActivationContextSectionString); X(RtlCreateUnicodeStringFromAsciiz); X(RtlFreeUnicodeString); + X(RtlQueryInformationActiveActivationContext); #undef X
return TRUE; @@ -4491,6 +4493,39 @@ static void test_manifest_resource_name_omitted(void) ok(err == ERROR_INVALID_PARAMETER, "got %lu\n", err); }
+static void test_RtlQueryInformationActiveActivationContext(void) +{ + ACTIVATION_CONTEXT_BASIC_INFORMATION basic; + ULONG_PTR cookie; + NTSTATUS status; + HANDLE context; + SIZE_T size; + BOOL ret; + + if (!create_manifest_file( "test1.manifest", manifest1, -1, NULL, NULL )) + { + skip("Could not create manifest file.\n"); + return; + } + context = test_create( "test1.manifest" ); + ok( context != INVALID_HANDLE_VALUE, "Failed to create context, error %lu.\n", GetLastError() ); + DeleteFileA( "test1.manifest" ); + ret = ActivateActCtx( context, &cookie ); + ok( ret, "ActivateActCtx failed, error %lu.\n", GetLastError() ); + + status = pRtlQueryInformationActiveActivationContext( ActivationContextBasicInformation, &basic, + sizeof(basic), &size ); + ok( status == STATUS_SUCCESS, "Got unexpected status %#lx.\n", status ); + ok( size == sizeof(ACTIVATION_CONTEXT_BASIC_INFORMATION), "Size mismatch.\n" ); + ok( basic.dwFlags == 0, "Got unexpected flags %#lx.\n", basic.dwFlags ); + ok( basic.hActCtx == context, "Got unexpected handle.\n" ); + ReleaseActCtx( basic.hActCtx ); + + ret = DeactivateActCtx( 0, cookie ); + ok( ret, "DeactivateActCtx failed, error %lu.\n", GetLastError() ); + ReleaseActCtx( context ); +} + START_TEST(actctx) { int argc; @@ -4530,5 +4565,6 @@ START_TEST(actctx) run_child_process(); test_compatibility(); test_settings(); + test_RtlQueryInformationActiveActivationContext(); for (int i = 1; i <= 6; i++) run_child_process_two_dll(i); } diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c index 206dd8a1819..9828d90d11d 100644 --- a/dlls/ntdll/actctx.c +++ b/dlls/ntdll/actctx.c @@ -5799,6 +5799,16 @@ NTSTATUS WINAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle return STATUS_SUCCESS; }
+/****************************************************************** + * RtlQueryInformationActiveActivationContext (NTDLL.@) + */ +NTSTATUS WINAPI RtlQueryInformationActiveActivationContext( ULONG class, PVOID buffer, + SIZE_T buffer_size, SIZE_T *return_length ) +{ + return RtlQueryInformationActivationContext( QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX, NULL, NULL, + class, buffer, buffer_size, return_length ); +} + /*********************************************************************** * RtlFindActivationContextSectionString (NTDLL.@) * diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 2b3450f9899..4e36bfe2662 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -943,7 +943,7 @@ @ stdcall RtlQueryHeapInformation(long long ptr long ptr) @ stdcall RtlQueryInformationAcl(ptr ptr long long) @ stdcall RtlQueryInformationActivationContext(long long ptr long ptr long ptr) -@ stub RtlQueryInformationActiveActivationContext +@ stdcall RtlQueryInformationActiveActivationContext(long ptr long ptr) @ stub RtlQueryInterfaceMemoryStream @ stdcall RtlQueryPackageIdentity(long ptr ptr ptr ptr ptr) @ stdcall RtlQueryPerformanceCounter(ptr) diff --git a/include/winternl.h b/include/winternl.h index aa19907dc25..86f5f4e5480 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -4987,6 +4987,7 @@ NTSYSAPI NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PU NTSYSAPI NTSTATUS WINAPI RtlQueryHeapInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T,PSIZE_T); NTSYSAPI NTSTATUS WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS); NTSYSAPI NTSTATUS WINAPI RtlQueryInformationActivationContext(ULONG,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T*); +NTSYSAPI NTSTATUS WINAPI RtlQueryInformationActiveActivationContext(ULONG,PVOID,SIZE_T,SIZE_T *); NTSYSAPI NTSTATUS WINAPI RtlQueryPackageIdentity(HANDLE,WCHAR*,SIZE_T*,WCHAR*,SIZE_T*,BOOLEAN*); NTSYSAPI BOOL WINAPI RtlQueryPerformanceCounter(LARGE_INTEGER*); NTSYSAPI BOOL WINAPI RtlQueryPerformanceFrequency(LARGE_INTEGER*);
On Mon Jun 9 13:23:22 2025 +0000, Zhiyi Zhang wrote:
changed this line in [version 3 of the diff](/wine/wine/-/merge_requests/8247/diffs?diff_id=183826&start_sha=54327458cd325ecd2c1e603e384fd69e3de97cb5#4c8286acffb4a79b59befe73026fabbfc9d4d86e_5514_5479)
Right. Thanks.
This merge request was approved by Nikolay Sivov.