[PATCH 13/27] [Kernel32]: ActCtx: now parsing and storing some attributes for a file

Eric Pouech eric.pouech at wanadoo.fr
Sat Apr 28 07:22:16 CDT 2007


element

A+
---

 dlls/kernel32/actctx.c |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/dlls/kernel32/actctx.c b/dlls/kernel32/actctx.c
index c4928cb..d82e52c 100644
--- a/dlls/kernel32/actctx.c
+++ b/dlls/kernel32/actctx.c
@@ -128,6 +128,7 @@ struct entity
 struct dll_redirect
 {
     LPCWSTR             name;
+    LPCWSTR             hash;
     unsigned            num_entities;
     struct entity*      entities;
 };
@@ -165,6 +166,7 @@ struct actctx_loader
 };
 
 #define PUBLIC_KEY_TOKEN_LEN    16
+#define HASH_LEN                40
 
 static WCHAR* xstrdupW(const WCHAR* str)
 {
@@ -240,6 +242,7 @@ static struct dll_redirect* add_dll_redi
     if (!assembly->dlls) return NULL;
     dll = &assembly->dlls[assembly->num_dlls++];
     dll->name = NULL;
+    dll->hash = NULL;
     dll->num_entities = 0;
     dll->entities = NULL;
 
@@ -376,12 +379,16 @@ #define WINDOWCLASS_ELEM                
 #define ELEM_END(elem) "/" elem
 
 #define CLSID_ATTR                      "clsid"
+#define HASH_ATTR                       "hash"
+#define HASHALG_ATTR                    "hashalg"
 #define HELPDIR_ATTR                    "helpdir"
 #define IID_ATTR                        "iid"
+#define LOADFROM_ATTR                   "loadFrom"
 #define MANIFESTVERSION_ATTR            "manifestVersion"
 #define NAME_ATTR                       "name"
 #define PROCESSORARCHITECTURE_ATTR      "processorArchitecture"
 #define PUBLICKEYTOKEN_ATTR             "publicKeyToken"
+#define SIZE_ATTR                       "size"
 #define TLBID_ATTR                      "tlbid"
 #define TYPE_ATTR                       "type"
 #define VERSION_ATTR                    "version"
@@ -746,6 +753,28 @@ static BOOL parse_file_elem(xmlbuf_t* xm
             dll->name = xstrdupXW(&attr_value);
             TRACE("name=%s\n", debugstr_xmlstr(&attr_value));
         }
+        else if (xmlstr_cmp(&attr_name, HASH_ATTR))
+        {
+            if (attr_value.len != HASH_LEN) return FALSE;
+            dll->hash = xstrdupXW(&attr_value);
+        }
+        else if (xmlstr_cmp(&attr_name, HASHALG_ATTR))
+        {
+            if (!xmlstr_cmp(&attr_value, "SHA1"))
+            {
+                FIXME("Hash algo should be SHA1, got %s\n",
+                      debugstr_xmlstr(&attr_value));
+            }
+        }
+        /* the following two are not documented (just present in schemas) */
+        else if (xmlstr_cmp(&attr_name, LOADFROM_ATTR))
+        {
+            FIXME("loadFrom=%s\n", debugstr_xmlstr(&attr_value));
+        }
+        else if (xmlstr_cmp(&attr_name, SIZE_ATTR))
+        {
+            FIXME("size=%s\n", debugstr_xmlstr(&attr_value));
+        }
         else
         {
             WARN("wrong attr %s=%s\n", debugstr_xmlstr(&attr_name),
@@ -1397,6 +1426,7 @@ void WINAPI ReleaseActCtx(HANDLE hActCtx
                     }
                     HeapFree(GetProcessHeap(), 0, dll->entities);
                     HeapFree(GetProcessHeap(), 0, (void*)dll->name);
+                    HeapFree(GetProcessHeap(), 0, (void*)dll->hash);
                 }
                 HeapFree(GetProcessHeap(), 0, assembly->dlls);
                 HeapFree(GetProcessHeap(), 0, (void*)assembly->manifest.info);




More information about the wine-patches mailing list