[3/8] scrrun: Add IFileSystem3 support
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Tue Mar 27 04:41:07 CDT 2012
Hi,
Changelog:
scrrun: Add IFileSystem3 support
Best Regards
Alistair Leslie-Hughes
-------------- next part --------------
>From 29887fe18860efa033a91fb615d8434bcac5aaa7 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Tue, 20 Mar 2012 14:54:25 +1100
Subject: [PATCH] Add IFileSystem3 support
To: wine-patches <wine-patches at winehq.org>
---
.gitignore | 1 +
dlls/scrrun/Makefile.in | 7 +-
dlls/scrrun/filesystem.c | 476 ++++++++++++++++++++++++++++++++++++++++++++++
dlls/scrrun/scrrun.c | 129 ++++++++++++-
4 files changed, 610 insertions(+), 3 deletions(-)
create mode 100644 dlls/scrrun/filesystem.c
diff --git a/.gitignore b/.gitignore
index d96c954..0708469 100644
--- a/.gitignore
+++ b/.gitignore
@@ -120,6 +120,7 @@ dlls/rpcrt4/epm_c.c
dlls/rpcrt4/tests/server.h
dlls/rpcrt4/tests/server_c.c
dlls/rpcrt4/tests/server_s.c
+dlls/scrrun/scrrun.h
dlls/shell32/AUTHORS
dlls/sti/sti_wia.h
dlls/sti/sti_wia_p.c
diff --git a/dlls/scrrun/Makefile.in b/dlls/scrrun/Makefile.in
index 4988a2c..f65f052 100644
--- a/dlls/scrrun/Makefile.in
+++ b/dlls/scrrun/Makefile.in
@@ -1,9 +1,14 @@
MODULE = scrrun.dll
+IMPORTS = uuid
-C_SRCS = scrrun.c
+C_SRCS = \
+ filesystem.c \
+ scrrun.c
RC_SRCS = scrrun.rc
IDL_TLB_SCRS = scrrun.idl
+IDL_H_SRCS = scrrun.idl
+
@MAKE_DLL_RULES@
diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c
new file mode 100644
index 0000000..0228886
--- /dev/null
+++ b/dlls/scrrun/filesystem.c
@@ -0,0 +1,476 @@
+/*
+ * Copyright 2012 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+#define COBJMACROS
+
+#include "config.h"
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "ole2.h"
+#include "dispex.h"
+#include "scrrun.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(scrrun);
+
+typedef struct FileSystem
+{
+ IFileSystem3 IFileSystem3_iface;
+ LONG ref;
+} FileSystem;
+
+static inline FileSystem *impl_from_IFileSystem3( IFileSystem3 *iface )
+{
+ return CONTAINING_RECORD(iface, FileSystem, IFileSystem3_iface);
+}
+
+static HRESULT WINAPI filesys_QueryInterface(IFileSystem3 *iface, REFIID riid, void **ppvObject)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+
+ if ( IsEqualGUID( riid, &IID_IFileSystem3 ) ||
+ IsEqualGUID( riid, &IID_IFileSystem ) ||
+ IsEqualGUID( riid, &IID_IDispatch ) ||
+ IsEqualGUID( riid, &IID_IUnknown ) )
+ {
+ *ppvObject = &This->IFileSystem3_iface;
+ }
+ else if ( IsEqualGUID( riid, &IID_IDispatchEx ))
+ {
+ TRACE("Interface IDispatchEx not supported - returning NULL\n");
+ *ppvObject = NULL;
+ return E_NOINTERFACE;
+ }
+ else if ( IsEqualGUID( riid, &IID_IObjectWithSite ))
+ {
+ TRACE("Interface IObjectWithSite not supported - returning NULL\n");
+ *ppvObject = NULL;
+ return E_NOINTERFACE;
+ }
+ else
+ {
+ FIXME("Unsupported interface %s\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+ }
+
+ IFileSystem3_AddRef(iface);
+
+ return S_OK;
+}
+
+static ULONG WINAPI filesys_AddRef(IFileSystem3 *iface)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("%p ref=%u\n", This, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI filesys_Release(IFileSystem3 *iface)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("%p ref=%u\n", This, ref);
+
+ if (ref == 0)
+ {
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+
+ return ref;
+}
+
+static HRESULT WINAPI filesys_GetTypeInfoCount(IFileSystem3 *iface, UINT *pctinfo)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ TRACE("(%p)->(%p)\n", This, pctinfo);
+
+ *pctinfo = 1;
+ return S_OK;
+}
+
+static HRESULT WINAPI filesys_GetTypeInfo(IFileSystem3 *iface, UINT iTInfo,
+ LCID lcid, ITypeInfo **ppTInfo)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetIDsOfNames(IFileSystem3 *iface, REFIID riid,
+ LPOLESTR *rgszNames, UINT cNames,
+ LCID lcid, DISPID *rgDispId)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
+ lcid, rgDispId);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_Invoke(IFileSystem3 *iface, DISPID dispIdMember,
+ REFIID riid, LCID lcid, WORD wFlags,
+ DISPPARAMS *pDispParams, VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
+ lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_get_Drives(IFileSystem3 *iface, IDriveCollection **ppdrives)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %p\n", This, ppdrives);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_BuildPath(IFileSystem3 *iface, BSTR Path,
+ BSTR Name, BSTR *pbstrResult)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %s %p\n", This, debugstr_w(Path), debugstr_w(Name), pbstrResult);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetDriveName(IFileSystem3 *iface, BSTR Path,
+ BSTR *pbstrResult)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(Path), pbstrResult);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetParentFolderName(IFileSystem3 *iface, BSTR Path,
+ BSTR *pbstrResult)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(Path), pbstrResult);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetFileName(IFileSystem3 *iface, BSTR Path,
+ BSTR *pbstrResult)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(Path), pbstrResult);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetBaseName(IFileSystem3 *iface, BSTR Path,
+ BSTR *pbstrResult)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(Path), pbstrResult);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetExtensionName(IFileSystem3 *iface, BSTR Path,
+ BSTR *pbstrResult)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(Path), pbstrResult);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetAbsolutePathName(IFileSystem3 *iface, BSTR Path,
+ BSTR *pbstrResult)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(Path), pbstrResult);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetTempName(IFileSystem3 *iface, BSTR *pbstrResult)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %p\n", This, pbstrResult);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_DriveExists(IFileSystem3 *iface, BSTR DriveSpec,
+ VARIANT_BOOL *pfExists)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(DriveSpec), pfExists);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_FileExists(IFileSystem3 *iface, BSTR FileSpec,
+ VARIANT_BOOL *pfExists)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(FileSpec), pfExists);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_FolderExists(IFileSystem3 *iface, BSTR FolderSpec,
+ VARIANT_BOOL *pfExists)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(FolderSpec), pfExists);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetDrive(IFileSystem3 *iface, BSTR DriveSpec,
+ IDrive **ppdrive)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(DriveSpec), ppdrive);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetFile(IFileSystem3 *iface, BSTR FilePath,
+ IFile **ppfile)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(FilePath), ppfile);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetFolder(IFileSystem3 *iface, BSTR FolderPath,
+ IFolder **ppfolder)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(FolderPath), ppfolder);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetSpecialFolder(IFileSystem3 *iface,
+ SpecialFolderConst SpecialFolder,
+ IFolder **ppfolder)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %d %p\n", This, SpecialFolder, ppfolder);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_DeleteFile(IFileSystem3 *iface, BSTR FileSpec,
+ VARIANT_BOOL Force)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %d\n", This, debugstr_w(FileSpec), Force);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_DeleteFolder(IFileSystem3 *iface, BSTR FolderSpec,
+ VARIANT_BOOL Force)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %d\n", This, debugstr_w(FolderSpec), Force);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_MoveFile(IFileSystem3 *iface, BSTR Source,
+ BSTR Destination)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %s\n", This, debugstr_w(Source), debugstr_w(Destination));
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface,BSTR Source,
+ BSTR Destination)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %s\n", This, debugstr_w(Source), debugstr_w(Destination));
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_CopyFile(IFileSystem3 *iface, BSTR Source,
+ BSTR Destination, VARIANT_BOOL OverWriteFiles)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %s %d\n", This, debugstr_w(Source), debugstr_w(Destination), OverWriteFiles);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_CopyFolder(IFileSystem3 *iface, BSTR Source,
+ BSTR Destination, VARIANT_BOOL OverWriteFiles)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %s %d\n", This, debugstr_w(Source), debugstr_w(Destination), OverWriteFiles);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_CreateFolder(IFileSystem3 *iface, BSTR Path,
+ IFolder **ppfolder)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(Path), ppfolder);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_CreateTextFile(IFileSystem3 *iface, BSTR FileName,
+ VARIANT_BOOL Overwrite, VARIANT_BOOL Unicode,
+ ITextStream **ppts)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %d %d %p\n", This, debugstr_w(FileName), Overwrite, Unicode, ppts);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_OpenTextFile(IFileSystem3 *iface, BSTR FileName,
+ IOMode IOMode, VARIANT_BOOL Create,
+ Tristate Format, ITextStream **ppts)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %d %d %d %p\n", This, debugstr_w(FileName), IOMode, Create, Format, ppts);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetStandardStream(IFileSystem3 *iface,
+ StandardStreamTypes StandardStreamType,
+ VARIANT_BOOL Unicode,
+ ITextStream **ppts)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %d %d %p\n", This, StandardStreamType, Unicode, ppts);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI filesys_GetFileVersion(IFileSystem3 *iface, BSTR FileName,
+ BSTR *FileVersion)
+{
+ FileSystem *This = impl_from_IFileSystem3(iface);
+
+ FIXME("%p %s %p\n", This, debugstr_w(FileName), FileVersion);
+
+ return E_NOTIMPL;
+}
+
+static const struct IFileSystem3Vtbl filesys_vtbl =
+{
+ filesys_QueryInterface,
+ filesys_AddRef,
+ filesys_Release,
+ filesys_GetTypeInfoCount,
+ filesys_GetTypeInfo,
+ filesys_GetIDsOfNames,
+ filesys_Invoke,
+ filesys_get_Drives,
+ filesys_BuildPath,
+ filesys_GetDriveName,
+ filesys_GetParentFolderName,
+ filesys_GetFileName,
+ filesys_GetBaseName,
+ filesys_GetExtensionName,
+ filesys_GetAbsolutePathName,
+ filesys_GetTempName,
+ filesys_DriveExists,
+ filesys_FileExists,
+ filesys_FolderExists,
+ filesys_GetDrive,
+ filesys_GetFile,
+ filesys_GetFolder,
+ filesys_GetSpecialFolder,
+ filesys_DeleteFile,
+ filesys_DeleteFolder,
+ filesys_MoveFile,
+ filesys_MoveFolder,
+ filesys_CopyFile,
+ filesys_CopyFolder,
+ filesys_CreateFolder,
+ filesys_CreateTextFile,
+ filesys_OpenTextFile,
+ filesys_GetStandardStream,
+ filesys_GetFileVersion
+};
+
+HRESULT FileSystem_Create(LPVOID* ppUnk)
+{
+ FileSystem *This;
+
+ This = HeapAlloc( GetProcessHeap(), 0, sizeof *This );
+ if ( !This )
+ return E_OUTOFMEMORY;
+
+ This->IFileSystem3_iface.lpVtbl = &filesys_vtbl;
+ This->ref = 1;
+
+ *ppUnk = (LPVOID)This;
+
+ return S_OK;
+}
diff --git a/dlls/scrrun/scrrun.c b/dlls/scrrun/scrrun.c
index c74832b..431ed5a 100644
--- a/dlls/scrrun/scrrun.c
+++ b/dlls/scrrun/scrrun.c
@@ -15,6 +15,7 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define COBJMACROS
#include "config.h"
#include <stdarg.h>
@@ -24,12 +25,118 @@
#include "ole2.h"
#include "rpcproxy.h"
+#include <initguid.h>
+#include "scrrun.h"
+
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(scrrun);
static HINSTANCE scrrun_instance;
+typedef HRESULT (*fnCreateInstance)(LPVOID *ppObj);
+
+extern HRESULT FileSystem_Create(LPVOID* ppUnk);
+
+typedef struct scrruncf
+{
+ IClassFactory IClassFactory_iface;
+ LONG ref;
+
+ fnCreateInstance pfnCreateInstance;
+
+ CLSID clsid;
+} scrruncf;
+
+static inline scrruncf *impl_from_IClassFactory( IClassFactory *iface )
+{
+ return CONTAINING_RECORD(iface, scrruncf, IClassFactory_iface);
+}
+
+static HRESULT WINAPI scrruncf_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppobj )
+{
+ TRACE("%s %p\n", debugstr_guid(riid), ppobj);
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IClassFactory))
+ {
+ IClassFactory_AddRef( iface );
+ *ppobj = iface;
+ return S_OK;
+ }
+
+ ERR("interface %s not implemented\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI scrruncf_AddRef(IClassFactory *iface )
+{
+ scrruncf *This = impl_from_IClassFactory(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("%p ref=%u\n", This, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI scrruncf_Release(IClassFactory *iface )
+{
+ scrruncf *This = impl_from_IClassFactory(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("%p ref=%u\n", This, ref);
+
+ if (ref == 0)
+ {
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+
+ return ref;
+}
+
+static HRESULT WINAPI scrruncf_CreateInstance(IClassFactory *iface,LPUNKNOWN pOuter,
+ REFIID riid, LPVOID *ppobj )
+{
+ scrruncf *This = impl_from_IClassFactory( iface );
+ HRESULT hr;
+ IUnknown *punk;
+
+ TRACE("%p %s %p\n", pOuter, debugstr_guid(riid), ppobj );
+
+ *ppobj = NULL;
+
+ if (pOuter)
+ return CLASS_E_NOAGGREGATION;
+
+ hr = This->pfnCreateInstance( (LPVOID*) &punk );
+ if (SUCCEEDED(hr))
+ {
+ hr = IUnknown_QueryInterface( punk, riid, ppobj );
+
+ IUnknown_Release( punk );
+ }
+ else
+ {
+ WARN("Cannot create an instance object. 0x%08x\n", hr);
+ }
+ return hr;
+}
+
+static HRESULT WINAPI scrruncf_LockServer(IClassFactory *iface, BOOL dolock)
+{
+ FIXME("(%p)->(%d),stub!\n",iface,dolock);
+ return S_OK;
+}
+
+static const struct IClassFactoryVtbl scrruncf_vtbl =
+{
+ scrruncf_QueryInterface,
+ scrruncf_AddRef,
+ scrruncf_Release,
+ scrruncf_CreateInstance,
+ scrruncf_LockServer
+};
+
BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
{
TRACE("%p, %u, %p\n", hinst, reason, reserved);
@@ -72,11 +179,29 @@ HRESULT WINAPI DllUnregisterServer(void)
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
- FIXME("(%s, %s, %p): stub\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
+ scrruncf *This;
+ HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
+
+ TRACE("(%s, %s, %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
if(!ppv)
return E_INVALIDARG;
- return E_NOTIMPL;
+ if(IsEqualCLSID( rclsid, &CLSID_FileSystemObject ))
+ {
+ This = HeapAlloc(GetProcessHeap(), 0, sizeof(scrruncf));
+
+ This->IClassFactory_iface.lpVtbl = &scrruncf_vtbl;
+ This->pfnCreateInstance = &FileSystem_Create;
+ This->ref = 1;
+ This->clsid = *rclsid;
+
+ hr = IClassFactory_QueryInterface( &This->IClassFactory_iface, riid, ppv );
+ IClassFactory_Release(&This->IClassFactory_iface);
+ }
+ else
+ FIXME("Unsupported interface (%s, %s)\n", debugstr_guid(rclsid), debugstr_guid(riid));
+
+ return hr;
}
/***********************************************************************
--
1.7.5.4
More information about the wine-patches
mailing list