From 3013167a9deb589bc7fa064af084e854ae26b1f1 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Wed, 20 Jul 2011 14:46:15 +0000 Subject: [PATCH] [PSDK]: Add missing QUOTA_LIMITS_EX. [NDK]: Fix certain SxS functions. [RTL]: "Implement" RtlActivateActivationContextEx which lets you specify a TEB. RtlActivateActivationContext uses the current TEB. NOTE: All these functions are broken because they copy-paste Win32 wine code into NT Native functions (with different parameters/structures). [NDK]: Fix pstypes.h -- it was a #define mess, and worked by luck because we are a < Vista OS. [NDK]: Add RtlInitEmptyAnsiString. svn path=/trunk/; revision=52736 --- reactos/include/ndk/pstypes.h | 20 +++++++++++++++----- reactos/include/ndk/rtlfuncs.h | 23 +++++++++++++++++++++-- reactos/include/ndk/rtltypes.h | 26 +++++++++++++++++++------- reactos/include/psdk/winnt.h | 15 +++++++++++++++ reactos/lib/rtl/actctx.c | 20 +++++++++++++------- 5 files changed, 83 insertions(+), 21 deletions(-) diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index 414e2dcbec1..d0f2fecc982 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -117,7 +117,6 @@ Author: #define PSP_LONG_QUANTUMS 16 #ifndef NTOS_MODE_USER - // // Thread Access Types // @@ -149,6 +148,7 @@ Author: #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ SYNCHRONIZE | \ 0xFFF) +#endif // // Thread Base Priorities @@ -162,7 +162,6 @@ Author: // TLS Slots // #define TLS_MINIMUM_AVAILABLE 64 -#endif // // Job Access Types @@ -194,7 +193,6 @@ Author: #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x1000 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x2000 - // // Cross Thread Flags // @@ -223,9 +221,7 @@ Author: #define STA_LPC_EXIT_THREAD_CALLED_BIT 0x2 #define STA_ADDRESS_SPACE_OWNER_BIT 0x4 #define STA_OWNS_WORKING_SET_BITS 0x1F8 -#endif -#define TLS_EXPANSION_SLOTS 1024 // // Process Flags // @@ -261,8 +257,22 @@ Author: // Vista Process Flags // #define PSF2_PROTECTED_BIT 0x800 +#endif + +// +// TLS/FLS Defines +// +#define TLS_EXPANSION_SLOTS 1024 #ifdef NTOS_MODE_USER +// +// Thread Native Base Priorities +// +#define LOW_PRIORITY 0 +#define LOW_REALTIME_PRIORITY 16 +#define HIGH_PRIORITY 31 +#define MAXIMUM_PRIORITY 32 + // // Current Process/Thread built-in 'special' handles // diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 0f9f4404fb4..f70ceab3a70 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -171,6 +171,17 @@ RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString, UnicodeString->MaximumLength = BufferSize; UnicodeString->Buffer = Buffer; } + +FORCEINLINE +VOID +RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString, + IN PSTR Buffer, + IN USHORT BufferSize) +{ + AnsiString->Length = 0; + AnsiString->MaximumLength = BufferSize; + AnsiString->Buffer = Buffer; +} // // LUID Macros @@ -3046,12 +3057,21 @@ LdrRelocateImageWithBias( // Activation Context Functions // #ifdef NTOS_MODE_USER +NTSYSAPI +NTSTATUS +NTAPI +RtlActivateActivationContextEx( + IN ULONG Flags, + IN PTEB Teb, + IN PVOID Context, + IN PULONG_PTR Cookie +); NTSYSAPI NTSTATUS NTAPI RtlActivateActivationContext( - IN ULONG Unknown, + IN ULONG Flags, IN HANDLE Handle, OUT PULONG_PTR Cookie ); @@ -3063,7 +3083,6 @@ RtlAddRefActivationContext( PVOID Context ); - NTSYSAPI PRTL_ACTIVATION_CONTEXT_STACK_FRAME FASTCALL diff --git a/reactos/include/ndk/rtltypes.h b/reactos/include/ndk/rtltypes.h index df8cea2f565..508737967a7 100644 --- a/reactos/include/ndk/rtltypes.h +++ b/reactos/include/ndk/rtltypes.h @@ -256,6 +256,11 @@ C_ASSERT(HEAP_CREATE_VALID_MASK == 0x0007F0FF); #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo +// +// Activation Contexts +// +#define INVALID_ACTIVATION_CONTEXT (PVOID)0xFFFFFFFF + // // C++ CONST casting // @@ -758,20 +763,28 @@ typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous; PACTIVATION_CONTEXT ActivationContext; ULONG Flags; -} RTL_ACTIVATION_CONTEXT_STACK_FRAME, - *PRTL_ACTIVATION_CONTEXT_STACK_FRAME; +} RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME; + +typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC +{ + SIZE_T Size; + ULONG Format; + RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame; +} RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC; typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED { - ULONG Size; + SIZE_T Size; ULONG Format; RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame; PVOID Extra1; PVOID Extra2; PVOID Extra3; PVOID Extra4; -} RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED, - *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED; +} RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED; + +typedef RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME; +typedef PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME; #if (NTDDI_VERSION >= NTDDI_WS03) typedef struct _ACTIVATION_CONTEXT_STACK @@ -781,8 +794,7 @@ typedef struct _ACTIVATION_CONTEXT_STACK ULONG Flags; ULONG NextCookieSequenceNumber; ULONG StackId; -} ACTIVATION_CONTEXT_STACK, - *PACTIVATION_CONTEXT_STACK; +} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK; #else typedef struct _ACTIVATION_CONTEXT_STACK { diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index 1266a9b7830..2077732bd2f 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -3302,6 +3302,21 @@ typedef struct _QUOTA_LIMITS { SIZE_T PagefileLimit; LARGE_INTEGER TimeLimit; } QUOTA_LIMITS,*PQUOTA_LIMITS; + +typedef struct _QUOTA_LIMITS_EX { + SIZE_T PagedPoolLimit; + SIZE_T NonPagedPoolLimit; + SIZE_T MinimumWorkingSetSize; + SIZE_T MaximumWorkingSetSize; + SIZE_T PagefileLimit; + LARGE_INTEGER TimeLimit; + SIZE_T Reserved1; + SIZE_T Reserved2; + SIZE_T Reserved3; + SIZE_T Reserved4; + ULONG Flags; + ULONG Reserved5; +} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX; typedef struct _IO_COUNTERS { ULONGLONG ReadOperationCount; diff --git a/reactos/lib/rtl/actctx.c b/reactos/lib/rtl/actctx.c index 71a5459a52c..7984cf1e802 100644 --- a/reactos/lib/rtl/actctx.c +++ b/reactos/lib/rtl/actctx.c @@ -2370,26 +2370,32 @@ RtlReleaseActivationContext( HANDLE handle ) } NTSTATUS -NTAPI RtlActivateActivationContext( ULONG unknown, HANDLE handle, PULONG_PTR cookie ) +NTAPI RtlActivateActivationContextEx( ULONG flags, PTEB tebAddress, HANDLE handle, PULONG_PTR cookie ) { RTL_ACTIVATION_CONTEXT_STACK_FRAME *frame; - + if (!(frame = RtlAllocateHeap( RtlGetProcessHeap(), 0, sizeof(*frame) ))) return STATUS_NO_MEMORY; - - frame->Previous = NtCurrentTeb()->ActivationContextStackPointer->ActiveFrame; + + frame->Previous = tebAddress->ActivationContextStackPointer->ActiveFrame; frame->ActivationContext = handle; frame->Flags = 0; - - NtCurrentTeb()->ActivationContextStackPointer->ActiveFrame = frame; + + tebAddress->ActivationContextStackPointer->ActiveFrame = frame; RtlAddRefActivationContext( handle ); - + *cookie = (ULONG_PTR)frame; DPRINT( "%p cookie=%lx\n", handle, *cookie ); return STATUS_SUCCESS; } +NTSTATUS +NTAPI RtlActivateActivationContext( ULONG flags, HANDLE handle, PULONG_PTR cookie ) +{ + return RtlActivateActivationContextEx(flags, NtCurrentTeb(), handle, cookie); +} + NTSTATUS NTAPI RtlDeactivateActivationContext( ULONG flags, ULONG_PTR cookie )