From c71da19d24a5d6f01e65b3b3691a9d7dd17a2278 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 13 Jul 2020 18:37:29 +0200 Subject: [PATCH] ntdll: Implement RtlActivateActivationContextEx(). Signed-off-by: Alexandre Julliard --- dlls/ntdll/actctx.c | 13 +++++++++++-- dlls/ntdll/ntdll.spec | 2 +- include/winternl.h | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c index f64cb31a1f0..625cffcca81 100644 --- a/dlls/ntdll/actctx.c +++ b/dlls/ntdll/actctx.c @@ -5156,16 +5156,25 @@ NTSTATUS WINAPI RtlZombifyActivationContext( HANDLE handle ) * RtlActivateActivationContext (NTDLL.@) */ NTSTATUS WINAPI RtlActivateActivationContext( ULONG unknown, HANDLE handle, PULONG_PTR cookie ) +{ + return RtlActivateActivationContextEx( 0, NtCurrentTeb(), handle, cookie ); +} + + +/****************************************************************** + * RtlActivateActivationContextEx (NTDLL.@) + */ +NTSTATUS WINAPI RtlActivateActivationContextEx( ULONG flags, TEB *teb, HANDLE handle, ULONG_PTR *cookie ) { RTL_ACTIVATION_CONTEXT_STACK_FRAME *frame; if (!(frame = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*frame) ))) return STATUS_NO_MEMORY; - frame->Previous = NtCurrentTeb()->ActivationContextStack.ActiveFrame; + frame->Previous = teb->ActivationContextStack.ActiveFrame; frame->ActivationContext = handle; frame->Flags = 0; - NtCurrentTeb()->ActivationContextStack.ActiveFrame = frame; + teb->ActivationContextStack.ActiveFrame = frame; RtlAddRefActivationContext( handle ); *cookie = (ULONG_PTR)frame; diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index bd41da37af4..7e2b6dd12fd 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -446,7 +446,7 @@ @ stdcall RtlAcquireSRWLockExclusive(ptr) @ stdcall RtlAcquireSRWLockShared(ptr) @ stdcall RtlActivateActivationContext(long ptr ptr) -@ stub RtlActivateActivationContextEx +@ stdcall RtlActivateActivationContextEx(long ptr ptr ptr) @ stub RtlActivateActivationContextUnsafeFast @ stdcall RtlAddAccessAllowedAce(ptr long long ptr) @ stdcall RtlAddAccessAllowedAceEx(ptr long long long ptr) diff --git a/include/winternl.h b/include/winternl.h index 10d109fede1..b3fbb90feff 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -2944,6 +2944,7 @@ NTSYSAPI BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE); NTSYSAPI void WINAPI RtlAcquireSRWLockExclusive(RTL_SRWLOCK*); NTSYSAPI void WINAPI RtlAcquireSRWLockShared(RTL_SRWLOCK*); NTSYSAPI NTSTATUS WINAPI RtlActivateActivationContext(DWORD,HANDLE,ULONG_PTR*); +NTSYSAPI NTSTATUS WINAPI RtlActivateActivationContextEx(ULONG,TEB*,HANDLE,ULONG_PTR*); NTSYSAPI NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD); NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID); NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);