Module: wine Branch: master Commit: 3e80093410bee590fe3ffdf730e7ac2368f223a3 URL: https://source.winehq.org/git/wine.git/?a=commit;h=3e80093410bee590fe3ffdf73...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Jan 22 16:25:22 2018 +0100
ntdll: Implement RtlPushFrame, RtlPopFrame and RtlGetFrame.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/ntdll.spec | 6 +++--- dlls/ntdll/thread.c | 28 ++++++++++++++++++++++++++++ include/winternl.h | 3 +++ 3 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 097140f..035fad2 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -649,7 +649,7 @@ @ stub RtlGetElementGenericTable # @ stub RtlGetElementGenericTableAvl # @ stub RtlGetFirstRange -# @ stub RtlGetFrame +@ stdcall RtlGetFrame() @ stdcall RtlGetFullPathName_U(wstr long ptr ptr) @ stdcall RtlGetGroupSecurityDescriptor(ptr ptr ptr) @ stdcall RtlGetLastNtStatus() @@ -796,12 +796,12 @@ @ stdcall RtlOpenCurrentUser(long ptr) @ stdcall RtlPcToFileHeader(ptr ptr) @ stdcall RtlPinAtomInAtomTable(ptr long) -# @ stub RtlPopFrame +@ stdcall RtlPopFrame(ptr) @ stdcall RtlPrefixString(ptr ptr long) @ stdcall RtlPrefixUnicodeString(ptr ptr long) @ stub RtlPropertySetNameToGuid @ stub RtlProtectHeap -# @ stub RtlPushFrame +@ stdcall RtlPushFrame(ptr) @ stdcall RtlQueryAtomInAtomTable(ptr long ptr ptr ptr ptr) @ stdcall RtlQueryDepthSList(ptr) @ stdcall RtlQueryDynamicTimeZoneInformation(ptr) diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c index 66beeb0..b36b265 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -804,6 +804,34 @@ NTSTATUS WINAPI NtQueueApcThread( HANDLE handle, PNTAPCFUNC func, ULONG_PTR arg1 }
+/****************************************************************************** + * RtlPushFrame (NTDLL.@) + */ +void WINAPI RtlPushFrame( TEB_ACTIVE_FRAME *frame ) +{ + frame->Previous = NtCurrentTeb()->ActiveFrame; + NtCurrentTeb()->ActiveFrame = frame; +} + + +/****************************************************************************** + * RtlPopFrame (NTDLL.@) + */ +void WINAPI RtlPopFrame( TEB_ACTIVE_FRAME *frame ) +{ + NtCurrentTeb()->ActiveFrame = frame->Previous; +} + + +/****************************************************************************** + * RtlGetFrame (NTDLL.@) + */ +TEB_ACTIVE_FRAME * WINAPI RtlGetFrame(void) +{ + return NtCurrentTeb()->ActiveFrame; +} + + /*********************************************************************** * set_thread_context */ diff --git a/include/winternl.h b/include/winternl.h index 52b19c2..4c02873 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -2592,6 +2592,7 @@ NTSYSAPI NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, NTSYSAPI ULONG WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR); NTSYSAPI PEB * WINAPI RtlGetCurrentPeb(void); NTSYSAPI NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN); +NTSYSAPI TEB_ACTIVE_FRAME * WINAPI RtlGetFrame(void); NTSYSAPI ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*); NTSYSAPI NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlGetLastNtStatus(void); @@ -2659,8 +2660,10 @@ NTSYSAPI NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD); NTSYSAPI NTSTATUS WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHANDLE); NTSYSAPI PVOID WINAPI RtlPcToFileHeader(PVOID,PVOID*); NTSYSAPI NTSTATUS WINAPI RtlPinAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM); +NTSYSAPI void WINAPI RtlPopFrame(TEB_ACTIVE_FRAME*); NTSYSAPI BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN); NTSYSAPI BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN); +NTSYSAPI void WINAPI RtlPushFrame(TEB_ACTIVE_FRAME*); NTSYSAPI NTSTATUS WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*); NTSYSAPI NTSTATUS WINAPI RtlQueryDynamicTimeZoneInformation(RTL_DYNAMIC_TIME_ZONE_INFORMATION*); NTSYSAPI NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);