Module: wine Branch: master Commit: c71da19d24a5d6f01e65b3b3691a9d7dd17a2278 URL: https://source.winehq.org/git/wine.git/?a=commit;h=c71da19d24a5d6f01e65b3b36...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Jul 13 18:37:29 2020 +0200
ntdll: Implement RtlActivateActivationContextEx().
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 f64cb31a1f..625cffcca8 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 bd41da37af..7e2b6dd12f 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 10d109fede..b3fbb90fef 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);