scrrun: Add IFileSystem3 support.
This commit is contained in:
parent
4ad945337f
commit
62077059a5
|
@ -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
|
||||
|
|
|
@ -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@
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
Loading…
Reference in New Issue