mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00: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
1 changed files with 10 additions and 135 deletions
|
@ -60,10 +60,7 @@ BOOLEAN RtlpNotAllowingMultipleActivation;
|
||||||
#define STRSECTION_MAGIC 0x64487353 /* dHsS */
|
#define STRSECTION_MAGIC 0x64487353 /* dHsS */
|
||||||
#define GUIDSECTION_MAGIC 0x64487347 /* dHsG */
|
#define GUIDSECTION_MAGIC 0x64487347 /* dHsG */
|
||||||
|
|
||||||
#define ACTCTX_MAGIC_MARKER (PVOID)'gMcA'
|
|
||||||
|
|
||||||
#define ACTCTX_FAKE_HANDLE ((HANDLE) 0xf00baa)
|
#define ACTCTX_FAKE_HANDLE ((HANDLE) 0xf00baa)
|
||||||
#define ACTCTX_FAKE_COOKIE ((ULONG_PTR) 0xf00bad)
|
|
||||||
|
|
||||||
/* we don't want to include winuser.h */
|
/* we don't want to include winuser.h */
|
||||||
#define RT_MANIFEST ((ULONG_PTR)24)
|
#define RT_MANIFEST ((ULONG_PTR)24)
|
||||||
|
@ -569,8 +566,9 @@ typedef struct _ASSEMBLY_STORAGE_MAP
|
||||||
|
|
||||||
typedef struct _ACTIVATION_CONTEXT
|
typedef struct _ACTIVATION_CONTEXT
|
||||||
{
|
{
|
||||||
|
ULONG magic;
|
||||||
|
LONG ref_count;
|
||||||
#ifdef __REACTOS__
|
#ifdef __REACTOS__
|
||||||
LONG ref_count;
|
|
||||||
ULONG Flags;
|
ULONG Flags;
|
||||||
LIST_ENTRY Links;
|
LIST_ENTRY Links;
|
||||||
PACTIVATION_CONTEXT_DATA ActivationContextData;
|
PACTIVATION_CONTEXT_DATA ActivationContextData;
|
||||||
|
@ -582,9 +580,6 @@ typedef struct _ACTIVATION_CONTEXT
|
||||||
PASSEMBLY_STORAGE_MAP_ENTRY InlineStorageMapEntries;
|
PASSEMBLY_STORAGE_MAP_ENTRY InlineStorageMapEntries;
|
||||||
ULONG StackTraceIndex;
|
ULONG StackTraceIndex;
|
||||||
PVOID StackTraces[4][4];
|
PVOID StackTraces[4][4];
|
||||||
#else
|
|
||||||
ULONG magic;
|
|
||||||
int ref_count;
|
|
||||||
#endif // __REACTOS__
|
#endif // __REACTOS__
|
||||||
struct file_info config;
|
struct file_info config;
|
||||||
struct file_info appdir;
|
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 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 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};
|
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 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 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};
|
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 version_formatW[] = {'%','u','.','%','u','.','%','u','.','%','u',0};
|
||||||
static const WCHAR wildcardW[] = {'*',0};
|
static const WCHAR wildcardW[] = {'*',0};
|
||||||
|
|
||||||
static ACTIVATION_CONTEXT_WRAPPED system_actctx = { ACTCTX_MAGIC_MARKER, { 1 } };
|
static ACTIVATION_CONTEXT system_actctx = { ACTCTX_MAGIC, 1 };
|
||||||
static ACTIVATION_CONTEXT *process_actctx = &system_actctx.ActivationContext;
|
static ACTIVATION_CONTEXT *process_actctx = &system_actctx;
|
||||||
static ACTIVATION_CONTEXT *implicit_actctx = &system_actctx.ActivationContext;
|
static ACTIVATION_CONTEXT *implicit_actctx = &system_actctx;
|
||||||
|
|
||||||
static WCHAR *strdupW(const WCHAR* str)
|
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 )
|
static ACTIVATION_CONTEXT *check_actctx( HANDLE h )
|
||||||
{
|
{
|
||||||
ACTIVATION_CONTEXT *ret = NULL, *actctx = h;
|
ACTIVATION_CONTEXT *ret = NULL, *actctx = h;
|
||||||
PACTIVATION_CONTEXT_WRAPPED pActual;
|
|
||||||
|
|
||||||
if (!h || h == INVALID_HANDLE_VALUE) return NULL;
|
if (!h || h == INVALID_HANDLE_VALUE) return NULL;
|
||||||
__TRY
|
__TRY
|
||||||
{
|
{
|
||||||
if (actctx)
|
if (actctx->magic == ACTCTX_MAGIC) ret = actctx;
|
||||||
{
|
|
||||||
pActual = CONTAINING_RECORD(actctx, ACTIVATION_CONTEXT_WRAPPED, ActivationContext);
|
|
||||||
if (pActual->MagicMarker == ACTCTX_MAGIC_MARKER) ret = &pActual->ActivationContext;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
__EXCEPT_PAGE_FAULT
|
__EXCEPT_PAGE_FAULT
|
||||||
{
|
{
|
||||||
|
@ -1285,8 +1218,6 @@ static inline void actctx_addref( ACTIVATION_CONTEXT *actctx )
|
||||||
|
|
||||||
static void actctx_release( ACTIVATION_CONTEXT *actctx )
|
static void actctx_release( ACTIVATION_CONTEXT *actctx )
|
||||||
{
|
{
|
||||||
PACTIVATION_CONTEXT_WRAPPED pActual;
|
|
||||||
|
|
||||||
if (!InterlockedDecrement( &actctx->ref_count ))
|
if (!InterlockedDecrement( &actctx->ref_count ))
|
||||||
{
|
{
|
||||||
unsigned int i, j;
|
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->ifaceps_section );
|
||||||
RtlFreeHeap( GetProcessHeap(), 0, actctx->clrsurrogate_section );
|
RtlFreeHeap( GetProcessHeap(), 0, actctx->clrsurrogate_section );
|
||||||
RtlFreeHeap( GetProcessHeap(), 0, actctx->progid_section );
|
RtlFreeHeap( GetProcessHeap(), 0, actctx->progid_section );
|
||||||
|
actctx->magic = 0;
|
||||||
pActual = CONTAINING_RECORD(actctx, ACTIVATION_CONTEXT_WRAPPED, ActivationContext);
|
RtlFreeHeap( GetProcessHeap(), 0, actctx );
|
||||||
pActual->MagicMarker = 0;
|
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, pActual);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5211,7 +5140,6 @@ RtlCreateActivationContext(IN ULONG Flags,
|
||||||
{
|
{
|
||||||
const ACTCTXW *pActCtx = (PVOID)ActivationContextData;
|
const ACTCTXW *pActCtx = (PVOID)ActivationContextData;
|
||||||
const WCHAR *directory = NULL;
|
const WCHAR *directory = NULL;
|
||||||
PACTIVATION_CONTEXT_WRAPPED ActualActCtx;
|
|
||||||
ACTIVATION_CONTEXT *actctx;
|
ACTIVATION_CONTEXT *actctx;
|
||||||
UNICODE_STRING nameW;
|
UNICODE_STRING nameW;
|
||||||
ULONG lang = 0;
|
ULONG lang = 0;
|
||||||
|
@ -5226,12 +5154,10 @@ RtlCreateActivationContext(IN ULONG Flags,
|
||||||
return STATUS_INVALID_PARAMETER;
|
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;
|
return STATUS_NO_MEMORY;
|
||||||
|
|
||||||
ActualActCtx->MagicMarker = ACTCTX_MAGIC_MARKER;
|
actctx->magic = ACTCTX_MAGIC;
|
||||||
|
|
||||||
actctx = &ActualActCtx->ActivationContext;
|
|
||||||
actctx->ref_count = 1;
|
actctx->ref_count = 1;
|
||||||
actctx->config.type = ACTIVATION_CONTEXT_PATH_TYPE_NONE;
|
actctx->config.type = ACTIVATION_CONTEXT_PATH_TYPE_NONE;
|
||||||
actctx->config.info = NULL;
|
actctx->config.info = NULL;
|
||||||
|
@ -5349,55 +5275,6 @@ error:
|
||||||
return status;
|
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.@)
|
* RtlAddRefActivationContext (NTDLL.@)
|
||||||
|
@ -5420,8 +5297,6 @@ void WINAPI RtlReleaseActivationContext( HANDLE handle )
|
||||||
if ((actctx = check_actctx( handle ))) actctx_release( actctx );
|
if ((actctx = check_actctx( handle ))) actctx_release( actctx );
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* RtlZombifyActivationContext (NTDLL.@)
|
* RtlZombifyActivationContext (NTDLL.@)
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue