From: Zhiyi Zhang zzhang@codeweavers.com
--- dlls/ntdll/actctx.c | 10 ++++++++++ dlls/ntdll/ntdll.spec | 2 +- dlls/ntdll/tests/rtl.c | 17 +++++++++++++++++ include/winternl.h | 1 + 4 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c index 206dd8a1819..d717f0315d0 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_NO_ADDREF, get_current_actctx_no_addref(), + 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/dlls/ntdll/tests/rtl.c b/dlls/ntdll/tests/rtl.c index f5db5cdc6e2..4669831f13f 100644 --- a/dlls/ntdll/tests/rtl.c +++ b/dlls/ntdll/tests/rtl.c @@ -121,6 +121,7 @@ static void (WINAPI *pRtlInitializeGenericTable)(RTL_GENERIC_TABLE *, PRTL_ static void * (WINAPI *pRtlFindExportedRoutineByName)(HMODULE,const char *); static void * (WINAPI *pRtlLookupElementGenericTable)(PRTL_GENERIC_TABLE, void *); static ULONG (WINAPI *pRtlNumberGenericTableElements)(PRTL_GENERIC_TABLE); +static NTSTATUS (WINAPI *pRtlQueryInformationActiveActivationContext)(ULONG,PVOID,SIZE_T,SIZE_T *); static NTSTATUS (WINAPI *pLdrEnumerateLoadedModules)(void *, void *, void *); static NTSTATUS (WINAPI *pLdrRegisterDllNotification)(ULONG, PLDR_DLL_NOTIFICATION_FUNCTION, void *, void **); static NTSTATUS (WINAPI *pLdrUnregisterDllNotification)(void *); @@ -193,6 +194,7 @@ static void InitFunctionPtrs(void) pRtlFindExportedRoutineByName = (void *)GetProcAddress(hntdll, "RtlFindExportedRoutineByName"); pRtlLookupElementGenericTable = (void *)GetProcAddress(hntdll, "RtlLookupElementGenericTable"); pRtlNumberGenericTableElements = (void *)GetProcAddress(hntdll, "RtlNumberGenericTableElements"); + pRtlQueryInformationActiveActivationContext = (void *)GetProcAddress(hntdll, "RtlQueryInformationActiveActivationContext"); pLdrEnumerateLoadedModules = (void *)GetProcAddress(hntdll, "LdrEnumerateLoadedModules"); pLdrRegisterDllNotification = (void *)GetProcAddress(hntdll, "LdrRegisterDllNotification"); pLdrUnregisterDllNotification = (void *)GetProcAddress(hntdll, "LdrUnregisterDllNotification"); @@ -5476,6 +5478,20 @@ static void test_RtlDeriveCapabilitySidsFromName(void) free( group_sid ); }
+static void test_RtlQueryInformationActiveActivationContext(void) +{ + ACTIVATION_CONTEXT_BASIC_INFORMATION basic; + NTSTATUS status; + SIZE_T size; + + 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, "Got unexpected handle.\n" ); +} + START_TEST(rtl) { InitFunctionPtrs(); @@ -5546,4 +5562,5 @@ START_TEST(rtl) test_RtlGetElementGenericTable(); test_RtlCreateServiceSid(); test_RtlDeriveCapabilitySidsFromName(); + test_RtlQueryInformationActiveActivationContext(); } 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*);