[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