From 3be4abc045884fd2af01d18760ef01746b702e79 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Fri, 28 Nov 2014 19:20:39 +0000 Subject: [PATCH] [RTL] Import Wine commit f87767b by Piotr Caban: Handle ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID flag when opening manifest in RtlCreateActivationContext. svn path=/trunk/; revision=65511 --- reactos/lib/rtl/actctx.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/reactos/lib/rtl/actctx.c b/reactos/lib/rtl/actctx.c index c3712af3cdd..d2352ef6a1c 100644 --- a/reactos/lib/rtl/actctx.c +++ b/reactos/lib/rtl/actctx.c @@ -4645,7 +4645,30 @@ RtlCreateActivationContext(IN ULONG Flags, if (pActCtx->lpSource && !((pActCtx->dwFlags & ACTCTX_FLAG_RESOURCE_NAME_VALID) && (pActCtx->dwFlags & ACTCTX_FLAG_HMODULE_VALID))) { - if (!RtlDosPathNameToNtPathName_U(pActCtx->lpSource, &nameW, NULL, NULL)) + WCHAR *source = NULL; + BOOLEAN ret; + + if (pActCtx->dwFlags & ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID && + RtlDetermineDosPathNameType_U(pActCtx->lpSource) == RtlPathTypeRelative) + { + DWORD dir_len, source_len; + + dir_len = strlenW(pActCtx->lpAssemblyDirectory); + source_len = strlenW(pActCtx->lpSource); + if (!(source = RtlAllocateHeap( RtlGetProcessHeap(), 0, (dir_len+source_len+2)*sizeof(WCHAR)))) + { + status = STATUS_NO_MEMORY; + goto error; + } + + memcpy(source, pActCtx->lpAssemblyDirectory, dir_len*sizeof(WCHAR)); + source[dir_len] = '\\'; + memcpy(source+dir_len+1, pActCtx->lpSource, (source_len+1)*sizeof(WCHAR)); + } + + ret = RtlDosPathNameToNtPathName_U(source ? source : pActCtx->lpSource, &nameW, NULL, NULL); + if (source) RtlFreeHeap( RtlGetProcessHeap(), 0, source ); + if (!ret) { status = STATUS_NO_SUCH_FILE; goto error;