fusion: Add a stub implementation of IAssemblyName.
diff --git a/dlls/fusion/Makefile.in b/dlls/fusion/Makefile.in
index e33712c..f7c47f8 100644
--- a/dlls/fusion/Makefile.in
+++ b/dlls/fusion/Makefile.in
@@ -6,6 +6,7 @@
IMPORTS = kernel32
C_SRCS = \
+ asmname.c \
fusion.c \
fusion_main.c
diff --git a/dlls/fusion/asmname.c b/dlls/fusion/asmname.c
new file mode 100644
index 0000000..16cd7b0
--- /dev/null
+++ b/dlls/fusion/asmname.c
@@ -0,0 +1,183 @@
+/*
+ * IAssemblyName implementation
+ *
+ * Copyright 2008 James Hawkins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+
+#define COBJMACROS
+#define INITGUID
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "ole2.h"
+#include "guiddef.h"
+#include "fusion.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(fusion);
+
+typedef struct {
+ const IAssemblyNameVtbl *lpIAssemblyNameVtbl;
+
+ LONG ref;
+} IAssemblyNameImpl;
+
+static HRESULT WINAPI IAssemblyNameImpl_QueryInterface(IAssemblyName *iface,
+ REFIID riid, LPVOID *ppobj)
+{
+ IAssemblyNameImpl *This = (IAssemblyNameImpl *)iface;
+
+ TRACE("(%p, %s, %p)\n", This, debugstr_guid(riid), ppobj);
+
+ *ppobj = NULL;
+
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IAssemblyName))
+ {
+ IUnknown_AddRef(iface);
+ *ppobj = This;
+ return S_OK;
+ }
+
+ WARN("(%p, %s, %p): not found\n", This, debugstr_guid(riid), ppobj);
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI IAssemblyNameImpl_AddRef(IAssemblyName *iface)
+{
+ IAssemblyNameImpl *This = (IAssemblyNameImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p)->(ref before = %u)\n", This, refCount - 1);
+
+ return refCount;
+}
+
+static ULONG WINAPI IAssemblyNameImpl_Release(IAssemblyName *iface)
+{
+ IAssemblyNameImpl *This = (IAssemblyNameImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p)->(ref before = %u)\n", This, refCount + 1);
+
+ if (!refCount)
+ HeapFree(GetProcessHeap(), 0, This);
+
+ return refCount;
+}
+
+static HRESULT WINAPI IAssemblyNameImpl_SetProperty(IAssemblyName *iface,
+ DWORD PropertyId,
+ LPVOID pvProperty,
+ DWORD cbProperty)
+{
+ FIXME("(%p, %d, %p, %d) stub!\n", iface, PropertyId, pvProperty, cbProperty);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IAssemblyNameImpl_GetProperty(IAssemblyName *iface,
+ DWORD PropertyId,
+ LPVOID pvProperty,
+ LPDWORD pcbProperty)
+{
+ FIXME("(%p, %d, %p, %p) stub!\n", iface, PropertyId, pvProperty, pcbProperty);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IAssemblyNameImpl_Finalize(IAssemblyName *iface)
+{
+ FIXME("(%p) stub!\n", iface);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IAssemblyNameImpl_GetDisplayName(IAssemblyName *iface,
+ LPOLESTR szDisplayName,
+ LPDWORD pccDisplayName,
+ DWORD dwDisplayFlags)
+{
+ FIXME("(%p, %s, %p, %d) stub!\n", iface, debugstr_w(szDisplayName),
+ pccDisplayName, dwDisplayFlags);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IAssemblyNameImpl_Reserved(IAssemblyName *iface,
+ REFIID refIID,
+ IUnknown *pUnkReserved1,
+ IUnknown *pUnkReserved2,
+ LPCOLESTR szReserved,
+ LONGLONG llReserved,
+ LPVOID pvReserved,
+ DWORD cbReserved,
+ LPVOID *ppReserved)
+{
+ TRACE("(%p, %s, %p, %p, %s, %x%08x, %p, %d, %p)\n", iface,
+ debugstr_guid(refIID), pUnkReserved1, pUnkReserved2,
+ debugstr_w(szReserved), (DWORD)(llReserved >> 32), (DWORD)llReserved,
+ pvReserved, cbReserved, ppReserved);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IAssemblyNameImpl_GetName(IAssemblyName *iface,
+ LPDWORD lpcwBuffer,
+ WCHAR *pwzName)
+{
+ FIXME("(%p, %p, %p) stub!\n", iface, lpcwBuffer, pwzName);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IAssemblyNameImpl_GetVersion(IAssemblyName *iface,
+ LPDWORD pdwVersionHi,
+ LPDWORD pdwVersionLow)
+{
+ FIXME("(%p, %p, %p) stub!\n", iface, pdwVersionHi, pdwVersionLow);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IAssemblyNameImpl_IsEqual(IAssemblyName *iface,
+ IAssemblyName *pName,
+ DWORD dwCmpFlags)
+{
+ FIXME("(%p, %p, %d) stub!\n", iface, pName, dwCmpFlags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IAssemblyNameImpl_Clone(IAssemblyName *iface,
+ IAssemblyName **pName)
+{
+ FIXME("(%p, %p) stub!\n", iface, pName);
+ return E_NOTIMPL;
+}
+
+static const IAssemblyNameVtbl AssemblyNameVtbl = {
+ IAssemblyNameImpl_QueryInterface,
+ IAssemblyNameImpl_AddRef,
+ IAssemblyNameImpl_Release,
+ IAssemblyNameImpl_SetProperty,
+ IAssemblyNameImpl_GetProperty,
+ IAssemblyNameImpl_Finalize,
+ IAssemblyNameImpl_GetDisplayName,
+ IAssemblyNameImpl_Reserved,
+ IAssemblyNameImpl_GetName,
+ IAssemblyNameImpl_GetVersion,
+ IAssemblyNameImpl_IsEqual,
+ IAssemblyNameImpl_Clone
+};
diff --git a/include/fusion.idl b/include/fusion.idl
index 00ec98c..0596192 100644
--- a/include/fusion.idl
+++ b/include/fusion.idl
@@ -88,6 +88,138 @@
interface IAssemblyName: IUnknown
{
typedef [unique] IAssemblyName *LPASSEMBLYNAME;
+
+ typedef enum
+ {
+ CANOF_PARSE_DISPLAY_NAME = 0x1,
+ CANOF_SET_DEFAULT_VALUES = 0x2,
+ CANOF_VERIFY_FRIEND_ASSEMBLYNAME = 0x4,
+ CANOF_PARSE_FRIEND_DISPLAY_NAME = CANOF_PARSE_DISPLAY_NAME |
+ CANOF_VERIFY_FRIEND_ASSEMBLYNAME
+ } CREATE_ASM_NAME_OBJ_FLAGS;
+
+ typedef enum
+ {
+ ASM_NAME_PUBLIC_KEY = 0,
+ ASM_NAME_PUBLIC_KEY_TOKEN,
+ ASM_NAME_HASH_VALUE,
+ ASM_NAME_NAME,
+ ASM_NAME_MAJOR_VERSION,
+ ASM_NAME_MINOR_VERSION,
+ ASM_NAME_BUILD_NUMBER,
+ ASM_NAME_REVISION_NUMBER,
+ ASM_NAME_CULTURE,
+ ASM_NAME_PROCESSOR_ID_ARRAY,
+ ASM_NAME_OSINFO_ARRAY,
+ ASM_NAME_HASH_ALGID,
+ ASM_NAME_ALIAS,
+ ASM_NAME_CODEBASE_URL,
+ ASM_NAME_CODEBASE_LASTMOD,
+ ASM_NAME_NULL_PUBLIC_KEY,
+ ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
+ ASM_NAME_CUSTOM,
+ ASM_NAME_NULL_CUSTOM,
+ ASM_NAME_MVID,
+ ASM_NAME_FILE_MAJOR_VERSION,
+ ASM_NAME_FILE_MINOR_VERSION,
+ ASM_NAME_FILE_BUILD_NUMBER,
+ ASM_NAME_FILE_REVISION_NUMBER,
+ ASM_NAME_RETARGET,
+ ASM_NAME_SIGNATURE_BLOB,
+ ASM_NAME_CONFIG_MASK,
+ ASM_NAME_ARCHITECTURE,
+ ASM_NAME_MAX_PARAMS
+ } ASM_NAME;
+
+ typedef enum
+ {
+ ASM_DISPLAYF_VERSION = 0x1,
+ ASM_DISPLAYF_CULTURE = 0x2,
+ ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
+ ASM_DISPLAYF_PUBLIC_KEY = 0x8,
+ ASM_DISPLAYF_CUSTOM = 0x10,
+ ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
+ ASM_DISPLAYF_LANGUAGEID = 0x40,
+ ASM_DISPLAYF_RETARGET = 0x80,
+ ASM_DISPLAYF_CONFIG_MASK = 0x100,
+ ASM_DISPLAYF_MVID = 0x200,
+
+ ASM_DISPLAYF_FULL = ASM_DISPLAYF_VERSION |
+ ASM_DISPLAYF_CULTURE |
+ ASM_DISPLAYF_PUBLIC_KEY_TOKEN |
+ ASM_DISPLAYF_RETARGET |
+ ASM_DISPLAYF_PROCESSORARCHITECTURE,
+ } ASM_DISPLAY_FLAGS;
+
+ typedef enum
+ {
+ ASM_CMPF_NAME = 0x1,
+ ASM_CMPF_MAJOR_VERSION = 0x2,
+ ASM_CMPF_MINOR_VERSION = 0x4,
+ ASM_CMPF_BUILD_NUMBER = 0x8,
+ ASM_CMPF_REVISION_NUMBER = 0x10,
+ ASM_CMPF_VERSION = ASM_CMPF_MAJOR_VERSION |
+ ASM_CMPF_MINOR_VERSION |
+ ASM_CMPF_BUILD_NUMBER |
+ ASM_CMPF_REVISION_NUMBER,
+ ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
+ ASM_CMPF_CULTURE = 0x40,
+ ASM_CMPF_CUSTOM = 0x80,
+ ASM_CMPF_DEFAULT = 0x100,
+ ASM_CMPF_RETARGET = 0x200,
+ ASM_CMPF_ARCHITECTURE = 0x400,
+ ASM_CMPF_CONFIG_MASK = 0x800,
+ ASM_CMPF_MVID = 0x1000,
+ ASM_CMPF_SIGNATURE = 0x2000,
+ ASM_CMPF_IL_ALL = ASM_CMPF_NAME |
+ ASM_CMPF_VERSION |
+ ASM_CMPF_PUBLIC_KEY_TOKEN |
+ ASM_CMPF_CULTURE,
+ ASM_CMPF_IL_NO_VERSION = ASM_CMPF_NAME |
+ ASM_CMPF_PUBLIC_KEY_TOKEN |
+ ASM_CMPF_CULTURE
+ } ASM_CMP_FLAGS;
+
+ HRESULT SetProperty(
+ [in] DWORD PropertyId,
+ [in] LPVOID pvProperty,
+ [in] DWORD cbProperty);
+
+ HRESULT GetProperty(
+ [in] DWORD PropertyId,
+ [out] LPVOID pvProperty,
+ [in, out] LPDWORD pcbProperty);
+
+ HRESULT Finalize();
+
+ HRESULT GetDisplayName(
+ [out] LPOLESTR szDisplayName,
+ [in, out] LPDWORD pccDisplayName,
+ [in] DWORD dwDisplayFlags);
+
+ HRESULT Reserved(
+ [in] REFIID refIID,
+ [in] IUnknown *pUnkReserved1,
+ [in] IUnknown *pUnkReserved2,
+ [in] LPCOLESTR szReserved,
+ [in] LONGLONG llReserved,
+ [in] LPVOID pvReserved,
+ [in] DWORD cbReserved,
+ [out] LPVOID *ppReserved);
+
+ HRESULT GetName(
+ [in, out] LPDWORD lpcwBuffer,
+ [out] WCHAR *pwzName);
+
+ HRESULT GetVersion(
+ [out] LPDWORD pdwVersionHi,
+ [out] LPDWORD pdwVersionLow);
+
+ HRESULT IsEqual(
+ [in] IAssemblyName *pName,
+ [in] DWORD dwCmpFlags);
+
+ HRESULT Clone([out] IAssemblyName **pName);
}
[