mirror of
https://github.com/reactos/reactos.git
synced 2024-11-26 21:13:30 +08:00
[RTL] actctx.c: Remove ACTIVATION_CONTEXT_WRAPPED
This structure replaced magic field in wine's ACTIVATION_CONTEXT with a new field MagicMarker in a wrapped structure, with the only difference being the field offset. This is pointless, because it's not used anywhere outside of this file. Also remove the related functions, that were never even used in the first place.
This commit is contained in:
parent
20b5a26a3c
commit
711fa80fa1
@ -60,10 +60,7 @@ BOOLEAN RtlpNotAllowingMultipleActivation;
|
||||
#define STRSECTION_MAGIC 0x64487353 /* dHsS */
|
||||
#define GUIDSECTION_MAGIC 0x64487347 /* dHsG */
|
||||
|
||||
#define ACTCTX_MAGIC_MARKER (PVOID)'gMcA'
|
||||
|
||||
#define ACTCTX_FAKE_HANDLE ((HANDLE) 0xf00baa)
|
||||
#define ACTCTX_FAKE_COOKIE ((ULONG_PTR) 0xf00bad)
|
||||
|
||||
/* we don't want to include winuser.h */
|
||||
#define RT_MANIFEST ((ULONG_PTR)24)
|
||||
@ -569,8 +566,9 @@ typedef struct _ASSEMBLY_STORAGE_MAP
|
||||
|
||||
typedef struct _ACTIVATION_CONTEXT
|
||||
{
|
||||
ULONG magic;
|
||||
LONG ref_count;
|
||||
#ifdef __REACTOS__
|
||||
LONG ref_count;
|
||||
ULONG Flags;
|
||||
LIST_ENTRY Links;
|
||||
PACTIVATION_CONTEXT_DATA ActivationContextData;
|
||||
@ -582,9 +580,6 @@ typedef struct _ACTIVATION_CONTEXT
|
||||
PASSEMBLY_STORAGE_MAP_ENTRY InlineStorageMapEntries;
|
||||
ULONG StackTraceIndex;
|
||||
PVOID StackTraces[4][4];
|
||||
#else
|
||||
ULONG magic;
|
||||
int ref_count;
|
||||
#endif // __REACTOS__
|
||||
struct file_info config;
|
||||
struct file_info appdir;
|
||||
@ -627,63 +622,6 @@ static const WCHAR current_archW[] = {'n','o','n','e',0};
|
||||
static const WCHAR asmv1W[] = {'u','r','n',':','s','c','h','e','m','a','s','-','m','i','c','r','o','s','o','f','t','-','c','o','m',':','a','s','m','.','v','1',0};
|
||||
static const WCHAR asmv2W[] = {'u','r','n',':','s','c','h','e','m','a','s','-','m','i','c','r','o','s','o','f','t','-','c','o','m',':','a','s','m','.','v','2',0};
|
||||
static const WCHAR asmv3W[] = {'u','r','n',':','s','c','h','e','m','a','s','-','m','i','c','r','o','s','o','f','t','-','c','o','m',':','a','s','m','.','v','3',0};
|
||||
|
||||
#ifdef __REACTOS__
|
||||
typedef struct _ACTIVATION_CONTEXT_WRAPPED
|
||||
{
|
||||
PVOID MagicMarker;
|
||||
ACTIVATION_CONTEXT ActivationContext;
|
||||
} ACTIVATION_CONTEXT_WRAPPED, *PACTIVATION_CONTEXT_WRAPPED;
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
RtlpSxsBreakOnInvalidMarker(IN PACTIVATION_CONTEXT ActCtx,
|
||||
IN ULONG FailureCode)
|
||||
{
|
||||
EXCEPTION_RECORD ExceptionRecord;
|
||||
|
||||
/* Fatal SxS exception header */
|
||||
ExceptionRecord.ExceptionRecord = NULL;
|
||||
ExceptionRecord.ExceptionCode = STATUS_SXS_CORRUPTION;
|
||||
ExceptionRecord.ExceptionFlags = EXCEPTION_NONCONTINUABLE;
|
||||
|
||||
/* With SxS-specific information plus the context itself */
|
||||
ExceptionRecord.ExceptionInformation[0] = 1;
|
||||
ExceptionRecord.ExceptionInformation[1] = FailureCode;
|
||||
ExceptionRecord.ExceptionInformation[2] = (ULONG_PTR)ActCtx;
|
||||
ExceptionRecord.NumberParameters = 3;
|
||||
|
||||
/* Raise it */
|
||||
RtlRaiseException(&ExceptionRecord);
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
RtlpValidateActCtx(IN PACTIVATION_CONTEXT ActCtx)
|
||||
{
|
||||
PACTIVATION_CONTEXT_WRAPPED pActual;
|
||||
|
||||
/* Get the caller-opaque header */
|
||||
pActual = CONTAINING_RECORD(ActCtx,
|
||||
ACTIVATION_CONTEXT_WRAPPED,
|
||||
ActivationContext);
|
||||
|
||||
/* Check if the header matches as expected */
|
||||
if (pActual->MagicMarker != ACTCTX_MAGIC_MARKER)
|
||||
{
|
||||
/* Nope, print out a warning, assert, and then throw an exception */
|
||||
DbgPrint("%s : Invalid activation context marker %p found in activation context %p\n"
|
||||
" This means someone stepped on the allocation, or someone is using a\n"
|
||||
" deallocated activation context\n",
|
||||
__FUNCTION__,
|
||||
pActual->MagicMarker,
|
||||
ActCtx);
|
||||
ASSERT(pActual->MagicMarker == ACTCTX_MAGIC_MARKER);
|
||||
RtlpSxsBreakOnInvalidMarker(ActCtx, 1);
|
||||
}
|
||||
}
|
||||
#endif // __REACTOS__
|
||||
|
||||
static const WCHAR assemblyW[] = {'a','s','s','e','m','b','l','y',0};
|
||||
static const WCHAR assemblyIdentityW[] = {'a','s','s','e','m','b','l','y','I','d','e','n','t','i','t','y',0};
|
||||
static const WCHAR bindingRedirectW[] = {'b','i','n','d','i','n','g','R','e','d','i','r','e','c','t',0};
|
||||
@ -828,9 +766,9 @@ static const WCHAR dotManifestW[] = {'.','m','a','n','i','f','e','s','t',0};
|
||||
static const WCHAR version_formatW[] = {'%','u','.','%','u','.','%','u','.','%','u',0};
|
||||
static const WCHAR wildcardW[] = {'*',0};
|
||||
|
||||
static ACTIVATION_CONTEXT_WRAPPED system_actctx = { ACTCTX_MAGIC_MARKER, { 1 } };
|
||||
static ACTIVATION_CONTEXT *process_actctx = &system_actctx.ActivationContext;
|
||||
static ACTIVATION_CONTEXT *implicit_actctx = &system_actctx.ActivationContext;
|
||||
static ACTIVATION_CONTEXT system_actctx = { ACTCTX_MAGIC, 1 };
|
||||
static ACTIVATION_CONTEXT *process_actctx = &system_actctx;
|
||||
static ACTIVATION_CONTEXT *implicit_actctx = &system_actctx;
|
||||
|
||||
static WCHAR *strdupW(const WCHAR* str)
|
||||
{
|
||||
@ -1259,16 +1197,11 @@ static WCHAR *build_assembly_id( const struct assembly_identity *ai )
|
||||
static ACTIVATION_CONTEXT *check_actctx( HANDLE h )
|
||||
{
|
||||
ACTIVATION_CONTEXT *ret = NULL, *actctx = h;
|
||||
PACTIVATION_CONTEXT_WRAPPED pActual;
|
||||
|
||||
if (!h || h == INVALID_HANDLE_VALUE) return NULL;
|
||||
__TRY
|
||||
{
|
||||
if (actctx)
|
||||
{
|
||||
pActual = CONTAINING_RECORD(actctx, ACTIVATION_CONTEXT_WRAPPED, ActivationContext);
|
||||
if (pActual->MagicMarker == ACTCTX_MAGIC_MARKER) ret = &pActual->ActivationContext;
|
||||
}
|
||||
if (actctx->magic == ACTCTX_MAGIC) ret = actctx;
|
||||
}
|
||||
__EXCEPT_PAGE_FAULT
|
||||
{
|
||||
@ -1285,8 +1218,6 @@ static inline void actctx_addref( ACTIVATION_CONTEXT *actctx )
|
||||
|
||||
static void actctx_release( ACTIVATION_CONTEXT *actctx )
|
||||
{
|
||||
PACTIVATION_CONTEXT_WRAPPED pActual;
|
||||
|
||||
if (!InterlockedDecrement( &actctx->ref_count ))
|
||||
{
|
||||
unsigned int i, j;
|
||||
@ -1318,10 +1249,8 @@ static void actctx_release( ACTIVATION_CONTEXT *actctx )
|
||||
RtlFreeHeap( GetProcessHeap(), 0, actctx->ifaceps_section );
|
||||
RtlFreeHeap( GetProcessHeap(), 0, actctx->clrsurrogate_section );
|
||||
RtlFreeHeap( GetProcessHeap(), 0, actctx->progid_section );
|
||||
|
||||
pActual = CONTAINING_RECORD(actctx, ACTIVATION_CONTEXT_WRAPPED, ActivationContext);
|
||||
pActual->MagicMarker = 0;
|
||||
RtlFreeHeap(GetProcessHeap(), 0, pActual);
|
||||
actctx->magic = 0;
|
||||
RtlFreeHeap( GetProcessHeap(), 0, actctx );
|
||||
}
|
||||
}
|
||||
|
||||
@ -5211,7 +5140,6 @@ RtlCreateActivationContext(IN ULONG Flags,
|
||||
{
|
||||
const ACTCTXW *pActCtx = (PVOID)ActivationContextData;
|
||||
const WCHAR *directory = NULL;
|
||||
PACTIVATION_CONTEXT_WRAPPED ActualActCtx;
|
||||
ACTIVATION_CONTEXT *actctx;
|
||||
UNICODE_STRING nameW;
|
||||
ULONG lang = 0;
|
||||
@ -5226,12 +5154,10 @@ RtlCreateActivationContext(IN ULONG Flags,
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
|
||||
|
||||
if (!(ActualActCtx = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ActualActCtx))))
|
||||
if (!(actctx = RtlAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*actctx) )))
|
||||
return STATUS_NO_MEMORY;
|
||||
|
||||
ActualActCtx->MagicMarker = ACTCTX_MAGIC_MARKER;
|
||||
|
||||
actctx = &ActualActCtx->ActivationContext;
|
||||
actctx->magic = ACTCTX_MAGIC;
|
||||
actctx->ref_count = 1;
|
||||
actctx->config.type = ACTIVATION_CONTEXT_PATH_TYPE_NONE;
|
||||
actctx->config.info = NULL;
|
||||
@ -5349,55 +5275,6 @@ error:
|
||||
return status;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#define ACT_CTX_VALID(p) ((((ULONG_PTR)p - 1) | 7) != -1)
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
RtlAddRefActivationContext(IN PACTIVATION_CONTEXT Handle)
|
||||
{
|
||||
PIACTIVATION_CONTEXT ActCtx = (PIACTIVATION_CONTEXT)Handle;
|
||||
LONG OldRefCount, NewRefCount;
|
||||
|
||||
if ((ActCtx) && (ACT_CTX_VALID(ActCtx)) && (ActCtx->RefCount != LONG_MAX))
|
||||
{
|
||||
RtlpValidateActCtx(ActCtx);
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
OldRefCount = ActCtx->RefCount;
|
||||
ASSERT(OldRefCount > 0);
|
||||
|
||||
if (OldRefCount == LONG_MAX) break;
|
||||
|
||||
NewRefCount = OldRefCount + 1;
|
||||
if (InterlockedCompareExchange(&ActCtx->RefCount,
|
||||
NewRefCount,
|
||||
OldRefCount) == OldRefCount)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
NewRefCount = LONG_MAX;
|
||||
ASSERT(NewRefCount > 0);
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
RtlReleaseActivationContext( HANDLE handle )
|
||||
{
|
||||
PIACTIVATION_CONTEXT ActCtx = (PIACTIVATION_CONTEXT) Handle;
|
||||
|
||||
if ((ActCtx) && (ACT_CTX_VALID(ActCtx)) && (ActCtx->RefCount != LONG_MAX))
|
||||
{
|
||||
RtlpValidateActCtx(ActCtx);
|
||||
|
||||
actctx_release(ActCtx);
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
||||
/***********************************************************************
|
||||
* RtlAddRefActivationContext (NTDLL.@)
|
||||
@ -5420,8 +5297,6 @@ void WINAPI RtlReleaseActivationContext( HANDLE handle )
|
||||
if ((actctx = check_actctx( handle ))) actctx_release( actctx );
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/******************************************************************
|
||||
* RtlZombifyActivationContext (NTDLL.@)
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user