[PATCH 10/11] [Kernel32]: ActCtx: Store public key token in
assembly_identity.
Eric Pouech
eric.pouech at wanadoo.fr
Wed May 9 15:08:32 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 9c6cfe6..b7b919c 100644
--- a/dlls/kernel32/actctx.c
+++ b/dlls/kernel32/actctx.c
@@ -94,6 +94,7 @@ struct assembly_identity
{
LPWSTR name;
struct version version;
+ LPWSTR public_key;
enum assembly_id_type type;
enum assembly_id_arch arch;
};
@@ -167,6 +168,8 @@ struct actctx_loader
unsigned allocated_dependencies;
};
+#define PUBLIC_KEY_TOKEN_LEN 16
+
static WCHAR* strdupW(const WCHAR* str)
{
WCHAR* ptr;
@@ -295,6 +298,7 @@ static BOOL add_dependent_assembly_id(struct actctx_loader* acl,
static void free_assembly_identity(struct assembly_identity *ai)
{
HeapFree(GetProcessHeap(), 0, ai->name);
+ HeapFree(GetProcessHeap(), 0, ai->public_key);
}
static struct entity* add_entity(struct dll_redirect* dll, DWORD kind)
@@ -418,6 +422,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"
@@ -621,6 +626,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