scrrun: Add IFileSystem3 support.

This commit is contained in:
Alistair Leslie-Hughes 2012-03-20 14:54:25 +11:00 committed by Alexandre Julliard
parent 4ad945337f
commit 62077059a5
4 changed files with 454 additions and 5 deletions

1
.gitignore vendored
View File

@ -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

View File

@ -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_SRCS = scrrun.idl
IDL_H_SRCS = scrrun.idl
@MAKE_DLL_RULES@

383
dlls/scrrun/filesystem.c Normal file
View File

@ -0,0 +1,383 @@
/*
* 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);
static HRESULT WINAPI filesys_QueryInterface(IFileSystem3 *iface, REFIID riid, void **ppvObject)
{
TRACE("%p %s %p\n", iface, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IFileSystem3 ) ||
IsEqualGUID( riid, &IID_IFileSystem ) ||
IsEqualGUID( riid, &IID_IDispatch ) ||
IsEqualGUID( riid, &IID_IUnknown ) )
{
*ppvObject = 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)
{
TRACE("%p\n", iface);
return 2;
}
static ULONG WINAPI filesys_Release(IFileSystem3 *iface)
{
TRACE("%p\n", iface);
return 1;
}
static HRESULT WINAPI filesys_GetTypeInfoCount(IFileSystem3 *iface, UINT *pctinfo)
{
TRACE("(%p)->(%p)\n", iface, pctinfo);
*pctinfo = 1;
return S_OK;
}
static HRESULT WINAPI filesys_GetTypeInfo(IFileSystem3 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
FIXME("(%p)->(%u %u %p)\n", iface, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetIDsOfNames(IFileSystem3 *iface, REFIID riid,
LPOLESTR *rgszNames, UINT cNames,
LCID lcid, DISPID *rgDispId)
{
FIXME("(%p)->(%s %p %u %u %p)\n", iface, 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)
{
FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", iface, dispIdMember, debugstr_guid(riid),
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_get_Drives(IFileSystem3 *iface, IDriveCollection **ppdrives)
{
FIXME("%p %p\n", iface, ppdrives);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_BuildPath(IFileSystem3 *iface, BSTR Path,
BSTR Name, BSTR *pbstrResult)
{
FIXME("%p %s %s %p\n", iface, debugstr_w(Path), debugstr_w(Name), pbstrResult);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetDriveName(IFileSystem3 *iface, BSTR Path,
BSTR *pbstrResult)
{
FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetParentFolderName(IFileSystem3 *iface, BSTR Path,
BSTR *pbstrResult)
{
FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetFileName(IFileSystem3 *iface, BSTR Path,
BSTR *pbstrResult)
{
FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetBaseName(IFileSystem3 *iface, BSTR Path,
BSTR *pbstrResult)
{
FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetExtensionName(IFileSystem3 *iface, BSTR Path,
BSTR *pbstrResult)
{
FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetAbsolutePathName(IFileSystem3 *iface, BSTR Path,
BSTR *pbstrResult)
{
FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetTempName(IFileSystem3 *iface, BSTR *pbstrResult)
{
FIXME("%p %p\n", iface, pbstrResult);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_DriveExists(IFileSystem3 *iface, BSTR DriveSpec,
VARIANT_BOOL *pfExists)
{
FIXME("%p %s %p\n", iface, debugstr_w(DriveSpec), pfExists);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_FileExists(IFileSystem3 *iface, BSTR FileSpec,
VARIANT_BOOL *pfExists)
{
FIXME("%p %s %p\n", iface, debugstr_w(FileSpec), pfExists);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_FolderExists(IFileSystem3 *iface, BSTR FolderSpec,
VARIANT_BOOL *pfExists)
{
FIXME("%p %s %p\n", iface, debugstr_w(FolderSpec), pfExists);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetDrive(IFileSystem3 *iface, BSTR DriveSpec,
IDrive **ppdrive)
{
FIXME("%p %s %p\n", iface, debugstr_w(DriveSpec), ppdrive);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetFile(IFileSystem3 *iface, BSTR FilePath,
IFile **ppfile)
{
FIXME("%p %s %p\n", iface, debugstr_w(FilePath), ppfile);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetFolder(IFileSystem3 *iface, BSTR FolderPath,
IFolder **ppfolder)
{
FIXME("%p %s %p\n", iface, debugstr_w(FolderPath), ppfolder);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetSpecialFolder(IFileSystem3 *iface,
SpecialFolderConst SpecialFolder,
IFolder **ppfolder)
{
FIXME("%p %d %p\n", iface, SpecialFolder, ppfolder);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_DeleteFile(IFileSystem3 *iface, BSTR FileSpec,
VARIANT_BOOL Force)
{
FIXME("%p %s %d\n", iface, debugstr_w(FileSpec), Force);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_DeleteFolder(IFileSystem3 *iface, BSTR FolderSpec,
VARIANT_BOOL Force)
{
FIXME("%p %s %d\n", iface, debugstr_w(FolderSpec), Force);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_MoveFile(IFileSystem3 *iface, BSTR Source,
BSTR Destination)
{
FIXME("%p %s %s\n", iface, debugstr_w(Source), debugstr_w(Destination));
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface,BSTR Source,
BSTR Destination)
{
FIXME("%p %s %s\n", iface, debugstr_w(Source), debugstr_w(Destination));
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_CopyFile(IFileSystem3 *iface, BSTR Source,
BSTR Destination, VARIANT_BOOL OverWriteFiles)
{
FIXME("%p %s %s %d\n", iface, debugstr_w(Source), debugstr_w(Destination), OverWriteFiles);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_CopyFolder(IFileSystem3 *iface, BSTR Source,
BSTR Destination, VARIANT_BOOL OverWriteFiles)
{
FIXME("%p %s %s %d\n", iface, debugstr_w(Source), debugstr_w(Destination), OverWriteFiles);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_CreateFolder(IFileSystem3 *iface, BSTR Path,
IFolder **ppfolder)
{
FIXME("%p %s %p\n", iface, debugstr_w(Path), ppfolder);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_CreateTextFile(IFileSystem3 *iface, BSTR FileName,
VARIANT_BOOL Overwrite, VARIANT_BOOL Unicode,
ITextStream **ppts)
{
FIXME("%p %s %d %d %p\n", iface, 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)
{
FIXME("%p %s %d %d %d %p\n", iface, debugstr_w(FileName), IOMode, Create, Format, ppts);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetStandardStream(IFileSystem3 *iface,
StandardStreamTypes StandardStreamType,
VARIANT_BOOL Unicode,
ITextStream **ppts)
{
FIXME("%p %d %d %p\n", iface, StandardStreamType, Unicode, ppts);
return E_NOTIMPL;
}
static HRESULT WINAPI filesys_GetFileVersion(IFileSystem3 *iface, BSTR FileName,
BSTR *FileVersion)
{
FIXME("%p %s %p\n", iface, 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
};
static IFileSystem3 filesystem = { &filesys_vtbl };
HRESULT WINAPI FileSystem_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
{
TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
return IFileSystem3_QueryInterface(&filesystem, riid, ppv);
}

View File

@ -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,69 @@
#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 WINAPI FileSystem_CreateInstance(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
static HRESULT WINAPI scrruncf_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppv )
{
*ppv = NULL;
if(IsEqualGUID(&IID_IUnknown, riid)) {
TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
*ppv = iface;
}else if(IsEqualGUID(&IID_IClassFactory, riid)) {
TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
*ppv = iface;
}
if(*ppv) {
IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
return E_NOINTERFACE;
}
static ULONG WINAPI scrruncf_AddRef(IClassFactory *iface )
{
TRACE("(%p)\n", iface);
return 2;
}
static ULONG WINAPI scrruncf_Release(IClassFactory *iface )
{
TRACE("(%p)\n", iface);
return 1;
}
static HRESULT WINAPI scrruncf_LockServer(IClassFactory *iface, BOOL fLock)
{
TRACE("(%p)->(%x)\n", iface, fLock);
return S_OK;
}
static const struct IClassFactoryVtbl scrruncf_vtbl =
{
scrruncf_QueryInterface,
scrruncf_AddRef,
scrruncf_Release,
FileSystem_CreateInstance,
scrruncf_LockServer
};
static IClassFactory FileSystemFactory = { &scrruncf_vtbl };
BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
{
TRACE("%p, %u, %p\n", hinst, reason, reserved);
@ -72,11 +130,13 @@ 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);
if(!ppv)
return E_INVALIDARG;
if(IsEqualGUID(&CLSID_FileSystemObject, rclsid)) {
TRACE("(CLSID_WshShell %s %p)\n", debugstr_guid(riid), ppv);
return IClassFactory_QueryInterface(&FileSystemFactory, riid, ppv);
}
return E_NOTIMPL;
FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
return CLASS_E_CLASSNOTAVAILABLE;
}
/***********************************************************************