[PATCH 12/27] [Kernel32]: ActCtx: Store public key token in assembly_identity.

Eric Pouech eric.pouech at wanadoo.fr
Mon May 7 14:50:58 CDT 2007


---

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

diff --git a/dlls/kernel32/actctx.c b/dlls/kernel32/actctx.c
index f90ca0b..c4928cb 100644
--- a/dlls/kernel32/actctx.c
+++ b/dlls/kernel32/actctx.c
@@ -94,6 +94,7 @@ struct assembly_identity
 {
     LPCWSTR             name;
     struct version      version;
+    LPCWSTR             public_key;
     enum assembly_id_type type;
     enum assembly_id_arch arch;
 };
@@ -163,6 +164,8 @@ struct actctx_loader
     unsigned            num_dependencies;
 };
 
+#define PUBLIC_KEY_TOKEN_LEN    16
+
 static WCHAR* xstrdupW(const WCHAR* str)
 {
     WCHAR*      ptr;
@@ -262,6 +265,7 @@ static BOOL add_dependent_assembly_id(struct actctx_loader* acl,
 static void free_assembly_identity(struct assembly_identity *ai)
 {
     HeapFree(GetProcessHeap(), 0, (void*)ai->name);
+    HeapFree(GetProcessHeap(), 0, (void*)ai->public_key);
 }
 
 static struct entity* add_entity(struct dll_redirect* dll, DWORD kind)
@@ -377,6 +381,7 @@ done:
 #define MANIFESTVERSION_ATTR            "manifestVersion"
 #define NAME_ATTR                       "name"
 #define PROCESSORARCHITECTURE_ATTR      "processorArchitecture"
+#define PUBLICKEYTOKEN_ATTR             "publicKeyToken"
 #define TLBID_ATTR                      "tlbid"
 #define TYPE_ATTR                       "type"
 #define VERSION_ATTR                    "version"
@@ -580,6 +585,18 @@ static BOOL parse_assembly_identity_elem(xmlbuf_t* xmlbuf, struct actctx* actctx
             }
             ai->arch = ARCH_X86;
         }
+        else if (xmlstr_cmp(&attr_name, PUBLICKEYTOKEN_ATTR))
+        {
+            LPWSTR      ptr;
+
+            if (attr_value.len != PUBLIC_KEY_TOKEN_LEN)
+                return FALSE;
+            ai->public_key = ptr = HeapAlloc(GetProcessHeap(), 0,
+                                             (PUBLIC_KEY_TOKEN_LEN+1) * sizeof(WCHAR));
+            MultiByteToWideChar(CP_ACP, 0, attr_value.ptr, attr_value.len,
+                                ptr, PUBLIC_KEY_TOKEN_LEN);
+            ptr[PUBLIC_KEY_TOKEN_LEN] = '\0';
+        }
         else
         {
             WARN("unknown attr %s=%s\n", debugstr_xmlstr(&attr_name),





More information about the wine-patches mailing list