[PATCH 05/27] [Kernel32]: ActCtx: now storing path info for app &
config in manifest
Eric Pouech
eric.pouech at wanadoo.fr
Sat Apr 28 07:21:31 CDT 2007
A+
---
dlls/kernel32/actctx.c | 33 ++++++++++++++++++++++++++++++++-
1 files changed, 32 insertions(+), 1 deletions(-)
diff --git a/dlls/kernel32/actctx.c b/dlls/kernel32/actctx.c
index ff15fb9..1dbb9d7 100644
--- a/dlls/kernel32/actctx.c
+++ b/dlls/kernel32/actctx.c
@@ -95,6 +95,8 @@ struct actctx
{
ULONG magic;
ULONG ref_count;
+ struct file_info config;
+ struct file_info app;
struct assembly* assemblies;
ULONG num_assemblies;
};
@@ -106,6 +108,16 @@ struct actctx_loader
unsigned num_dependencies;
};
+static WCHAR* xstrdupW(const WCHAR* str)
+{
+ WCHAR* ptr;
+
+ if (!str) return NULL;
+ if (!(ptr = HeapAlloc(GetProcessHeap(), 0, (strlenW(str) + 1) * sizeof(WCHAR))))
+ return NULL;
+ return strcpyW(ptr, str);
+}
+
static struct assembly* add_assembly(struct actctx* actctx, enum assembly_type at)
{
struct assembly* assembly;
@@ -323,6 +335,8 @@ HANDLE WINAPI CreateActCtxW(PCACTCTXW pA
struct actctx* actctx;
struct assembly* assembly;
LPCWSTR resname = NULL;
+ WCHAR app_path[MAX_PATH];
+ LPWSTR tmp;
DWORD ret = ERROR_SUCCESS;
TRACE("%p %08x\n", pActCtx, pActCtx ? pActCtx->dwFlags : 0);
@@ -338,6 +352,21 @@ HANDLE WINAPI CreateActCtxW(PCACTCTXW pA
actctx->magic = ACTCTX_MAGIC;
actctx->ref_count = 1;
+ actctx->app.type = ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE;
+ if (pActCtx->dwFlags & ACTCTX_FLAG_APPLICATION_NAME_VALID)
+ {
+ tmp = (LPWSTR)pActCtx->lpApplicationName;
+ }
+ else
+ {
+ GetModuleFileNameW(NULL, app_path, sizeof(app_path) / sizeof(WCHAR));
+ for (tmp = app_path + lstrlenW(app_path); tmp >= app_path && *tmp != '\\'; tmp--);
+ tmp[1] = 0;
+ tmp = app_path;
+ }
+ actctx->app.info = xstrdupW(tmp);
+ actctx->config.type = ACTIVATION_CONTEXT_PATH_TYPE_NONE;
+ actctx->config.info = NULL;
actctx->assemblies = NULL;
actctx->num_assemblies = 0;
@@ -486,10 +515,12 @@ void WINAPI ReleaseActCtx(HANDLE hActCtx
for (i = 0; i < actctx->num_assemblies; i++)
{
+ HeapFree(GetProcessHeap(), 0, (void*)actctx->assemblies[i].manifest.info);
free_assembly_identity(&actctx->assemblies[i].id);
}
HeapFree(GetProcessHeap(), 0, actctx->assemblies);
- actctx->magic = 0;
+ HeapFree(GetProcessHeap(), 0, (void*)actctx->config.info);
+ HeapFree(GetProcessHeap(), 0, (void*)actctx->app.info);
HeapFree(GetProcessHeap(), 0, actctx);
}
}
More information about the wine-patches
mailing list