[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