Author: akhaldi
Date: Sat Nov 8 10:22:22 2014
New Revision: 65315
URL:
http://svn.reactos.org/svn/reactos?rev=65315&view=rev
Log:
[WSHOM.OCX]
* Import from Wine 1.7.27.
CORE-8768 #resolve #comment Imported in r65315.
CORE-8540
Added:
trunk/reactos/dll/win32/wshom.ocx/ (with props)
trunk/reactos/dll/win32/wshom.ocx/CMakeLists.txt (with props)
trunk/reactos/dll/win32/wshom.ocx/guid.c (with props)
trunk/reactos/dll/win32/wshom.ocx/shell.c (with props)
trunk/reactos/dll/win32/wshom.ocx/wshom.idl (with props)
trunk/reactos/dll/win32/wshom.ocx/wshom.ocx.spec (with props)
trunk/reactos/dll/win32/wshom.ocx/wshom.rc (with props)
trunk/reactos/dll/win32/wshom.ocx/wshom.rgs (with props)
trunk/reactos/dll/win32/wshom.ocx/wshom.tlb.rgs (with props)
trunk/reactos/dll/win32/wshom.ocx/wshom_main.c (with props)
trunk/reactos/dll/win32/wshom.ocx/wshom_private.h (with props)
Modified:
trunk/reactos/dll/win32/CMakeLists.txt
trunk/reactos/media/doc/README.WINE
trunk/reactos/media/inf/syssetup.inf
Modified: trunk/reactos/dll/win32/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/CMakeLists.txt?r…
==============================================================================
--- trunk/reactos/dll/win32/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/CMakeLists.txt [iso-8859-1] Sat Nov 8 10:22:22 2014
@@ -243,6 +243,7 @@
add_subdirectory(ws2_32_new)
add_subdirectory(ws2help)
add_subdirectory(wshirda)
+add_subdirectory(wshom.ocx)
add_subdirectory(wshtcpip)
add_subdirectory(wsock32)
add_subdirectory(wtsapi32)
Propchange: trunk/reactos/dll/win32/wshom.ocx/
------------------------------------------------------------------------------
--- bugtraq:logregex (added)
+++ bugtraq:logregex Sat Nov 8 10:22:22 2014
@@ -0,0 +1,2 @@
+([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))?
+(\d+)
Propchange: trunk/reactos/dll/win32/wshom.ocx/
------------------------------------------------------------------------------
bugtraq:message = See issue #%BUGID% for more details.
Propchange: trunk/reactos/dll/win32/wshom.ocx/
------------------------------------------------------------------------------
bugtraq:url =
http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/reactos/dll/win32/wshom.ocx/
------------------------------------------------------------------------------
tsvn:logminsize = 10
Added: trunk/reactos/dll/win32/wshom.ocx/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wshom.ocx/CMakeL…
==============================================================================
--- trunk/reactos/dll/win32/wshom.ocx/CMakeLists.txt (added)
+++ trunk/reactos/dll/win32/wshom.ocx/CMakeLists.txt [iso-8859-1] Sat Nov 8 10:22:22
2014
@@ -0,0 +1,30 @@
+
+add_definitions(-D__WINESRC__)
+include_directories(${REACTOS_SOURCE_DIR}/include/reactos/wine)
+spec2def(wshom.ocx wshom.ocx.spec)
+add_idl_headers(wshom_idlheader wshom.idl)
+add_typelib(wshom.idl)
+
+list(APPEND SOURCE
+ shell.c
+ wshom_main.c
+ wshom_private.h)
+
+add_library(wshom SHARED
+ ${SOURCE}
+ guid.c
+ wshom.rc
+ ${CMAKE_CURRENT_BINARY_DIR}/wshom.def)
+
+list(APPEND wshom_rc_deps
+ ${CMAKE_CURRENT_SOURCE_DIR}/wshom.rgs
+ ${CMAKE_CURRENT_SOURCE_DIR}/wshom.tlb.rgs
+ ${CMAKE_CURRENT_BINARY_DIR}/wshom.tlb)
+
+set_source_files_properties(wshom.rc PROPERTIES OBJECT_DEPENDS
"${wshom_rc_deps}")
+set_module_type(wshom win32ocx)
+target_link_libraries(wshom uuid wine)
+add_importlibs(wshom oleaut32 ole32 shell32 msvcrt kernel32 ntdll)
+add_dependencies(wshom stdole2 wshom_idlheader)
+add_pch(wshom wshom_private.h SOURCE)
+add_cd_file(TARGET wshom DESTINATION reactos/system32 FOR all)
Propchange: trunk/reactos/dll/win32/wshom.ocx/CMakeLists.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/wshom.ocx/guid.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wshom.ocx/guid.c…
==============================================================================
--- trunk/reactos/dll/win32/wshom.ocx/guid.c (added)
+++ trunk/reactos/dll/win32/wshom.ocx/guid.c [iso-8859-1] Sat Nov 8 10:22:22 2014
@@ -0,0 +1,15 @@
+/* DO NOT USE THE PRECOMPILED HEADER FOR THIS FILE! */
+
+#include <stdarg.h>
+
+#define WIN32_NO_STATUS
+#define _INC_WINDOWS
+#define COM_NO_WINDOWS_H
+
+#include <windef.h>
+#include <winbase.h>
+#include <objbase.h>
+#include <initguid.h>
+#include <wshom.h>
+
+/* NO CODE HERE, THIS IS JUST REQUIRED FOR THE GUID DEFINITIONS */
Propchange: trunk/reactos/dll/win32/wshom.ocx/guid.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/wshom.ocx/shell.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wshom.ocx/shell.…
==============================================================================
--- trunk/reactos/dll/win32/wshom.ocx/shell.c (added)
+++ trunk/reactos/dll/win32/wshom.ocx/shell.c [iso-8859-1] Sat Nov 8 10:22:22 2014
@@ -0,0 +1,1069 @@
+/*
+ * Copyright 2011 Jacek Caban for CodeWeavers
+ *
+ * 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 "wshom_private.h"
+
+#include <shellapi.h>
+#include <shlobj.h>
+#include <dispex.h>
+
+#include <wine/unicode.h>
+
+static IWshShell3 WshShell3;
+
+typedef struct
+{
+ IWshCollection IWshCollection_iface;
+ LONG ref;
+} WshCollection;
+
+typedef struct
+{
+ IWshShortcut IWshShortcut_iface;
+ LONG ref;
+
+ IShellLinkW *link;
+ BSTR path_link;
+} WshShortcut;
+
+typedef struct
+{
+ IWshEnvironment IWshEnvironment_iface;
+ LONG ref;
+} WshEnvironment;
+
+static inline WshCollection *impl_from_IWshCollection( IWshCollection *iface )
+{
+ return CONTAINING_RECORD(iface, WshCollection, IWshCollection_iface);
+}
+
+static inline WshShortcut *impl_from_IWshShortcut( IWshShortcut *iface )
+{
+ return CONTAINING_RECORD(iface, WshShortcut, IWshShortcut_iface);
+}
+
+static inline WshEnvironment *impl_from_IWshEnvironment( IWshEnvironment *iface )
+{
+ return CONTAINING_RECORD(iface, WshEnvironment, IWshEnvironment_iface);
+}
+
+static HRESULT WINAPI WshEnvironment_QueryInterface(IWshEnvironment *iface, REFIID riid,
void **obj)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+
+ TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), obj);
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IDispatch) ||
+ IsEqualGUID(riid, &IID_IWshEnvironment))
+ {
+ *obj = iface;
+ }else {
+ FIXME("Unknown iface %s\n", debugstr_guid(riid));
+ *obj = NULL;
+ return E_NOINTERFACE;
+ }
+
+ IUnknown_AddRef((IUnknown*)*obj);
+ return S_OK;
+}
+
+static ULONG WINAPI WshEnvironment_AddRef(IWshEnvironment *iface)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ LONG ref = InterlockedIncrement(&This->ref);
+ TRACE("(%p) ref = %d\n", This, ref);
+ return ref;
+}
+
+static ULONG WINAPI WshEnvironment_Release(IWshEnvironment *iface)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ LONG ref = InterlockedDecrement(&This->ref);
+ TRACE("(%p) ref = %d\n", This, ref);
+
+ if (!ref)
+ HeapFree(GetProcessHeap(), 0, This);
+
+ return ref;
+}
+
+static HRESULT WINAPI WshEnvironment_GetTypeInfoCount(IWshEnvironment *iface, UINT
*pctinfo)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ TRACE("(%p)->(%p)\n", This, pctinfo);
+ *pctinfo = 1;
+ return S_OK;
+}
+
+static HRESULT WINAPI WshEnvironment_GetTypeInfo(IWshEnvironment *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+ return get_typeinfo(IWshEnvironment_tid, ppTInfo);
+}
+
+static HRESULT WINAPI WshEnvironment_GetIDsOfNames(IWshEnvironment *iface, REFIID riid,
LPOLESTR *rgszNames,
+ UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ ITypeInfo *typeinfo;
+ HRESULT hr;
+
+ TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames,
cNames, lcid, rgDispId);
+
+ hr = get_typeinfo(IWshEnvironment_tid, &typeinfo);
+ if(SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
+ ITypeInfo_Release(typeinfo);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI WshEnvironment_Invoke(IWshEnvironment *iface, DISPID dispIdMember,
REFIID riid, LCID lcid,
+ WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
UINT *puArgErr)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ ITypeInfo *typeinfo;
+ HRESULT hr;
+
+ TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember,
debugstr_guid(riid),
+ lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+ hr = get_typeinfo(IWshEnvironment_tid, &typeinfo);
+ if(SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_Invoke(typeinfo, &This->IWshEnvironment_iface,
dispIdMember, wFlags,
+ pDispParams, pVarResult, pExcepInfo, puArgErr);
+ ITypeInfo_Release(typeinfo);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI WshEnvironment_get_Item(IWshEnvironment *iface, BSTR name, BSTR
*value)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ DWORD len;
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(name), value);
+
+ if (!value)
+ return E_POINTER;
+
+ len = GetEnvironmentVariableW(name, NULL, 0);
+ *value = SysAllocStringLen(NULL, len);
+ if (!*value)
+ return E_OUTOFMEMORY;
+
+ if (len)
+ GetEnvironmentVariableW(name, *value, len+1);
+
+ return S_OK;
+}
+
+static HRESULT WINAPI WshEnvironment_put_Item(IWshEnvironment *iface, BSTR name, BSTR
value)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ FIXME("(%p)->(%s %s): stub\n", This, debugstr_w(name),
debugstr_w(value));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshEnvironment_Count(IWshEnvironment *iface, LONG *count)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ FIXME("(%p)->(%p): stub\n", This, count);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshEnvironment_get_length(IWshEnvironment *iface, LONG *len)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ FIXME("(%p)->(%p): stub\n", This, len);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshEnvironment__NewEnum(IWshEnvironment *iface, IUnknown **penum)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ FIXME("(%p)->(%p): stub\n", This, penum);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshEnvironment_Remove(IWshEnvironment *iface, BSTR name)
+{
+ WshEnvironment *This = impl_from_IWshEnvironment(iface);
+ FIXME("(%p)->(%s): stub\n", This, debugstr_w(name));
+ return E_NOTIMPL;
+}
+
+static const IWshEnvironmentVtbl WshEnvironmentVtbl = {
+ WshEnvironment_QueryInterface,
+ WshEnvironment_AddRef,
+ WshEnvironment_Release,
+ WshEnvironment_GetTypeInfoCount,
+ WshEnvironment_GetTypeInfo,
+ WshEnvironment_GetIDsOfNames,
+ WshEnvironment_Invoke,
+ WshEnvironment_get_Item,
+ WshEnvironment_put_Item,
+ WshEnvironment_Count,
+ WshEnvironment_get_length,
+ WshEnvironment__NewEnum,
+ WshEnvironment_Remove
+};
+
+static HRESULT WshEnvironment_Create(IWshEnvironment **env)
+{
+ WshEnvironment *This;
+
+ This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
+ if (!This) return E_OUTOFMEMORY;
+
+ This->IWshEnvironment_iface.lpVtbl = &WshEnvironmentVtbl;
+ This->ref = 1;
+
+ *env = &This->IWshEnvironment_iface;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI WshCollection_QueryInterface(IWshCollection *iface, REFIID riid,
void **ppv)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+
+ TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppv);
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IDispatch) ||
+ IsEqualGUID(riid, &IID_IWshCollection))
+ {
+ *ppv = iface;
+ }else {
+ FIXME("Unknown iface %s\n", debugstr_guid(riid));
+ *ppv = NULL;
+ return E_NOINTERFACE;
+ }
+
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+}
+
+static ULONG WINAPI WshCollection_AddRef(IWshCollection *iface)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+ LONG ref = InterlockedIncrement(&This->ref);
+ TRACE("(%p) ref = %d\n", This, ref);
+ return ref;
+}
+
+static ULONG WINAPI WshCollection_Release(IWshCollection *iface)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+ LONG ref = InterlockedDecrement(&This->ref);
+ TRACE("(%p) ref = %d\n", This, ref);
+
+ if (!ref)
+ HeapFree(GetProcessHeap(), 0, This);
+
+ return ref;
+}
+
+static HRESULT WINAPI WshCollection_GetTypeInfoCount(IWshCollection *iface, UINT
*pctinfo)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+ TRACE("(%p)->(%p)\n", This, pctinfo);
+ *pctinfo = 1;
+ return S_OK;
+}
+
+static HRESULT WINAPI WshCollection_GetTypeInfo(IWshCollection *iface, UINT iTInfo, LCID
lcid, ITypeInfo **ppTInfo)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+ TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+ return get_typeinfo(IWshCollection_tid, ppTInfo);
+}
+
+static HRESULT WINAPI WshCollection_GetIDsOfNames(IWshCollection *iface, REFIID riid,
LPOLESTR *rgszNames,
+ UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+ ITypeInfo *typeinfo;
+ HRESULT hr;
+
+ TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames,
cNames, lcid, rgDispId);
+
+ hr = get_typeinfo(IWshCollection_tid, &typeinfo);
+ if(SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
+ ITypeInfo_Release(typeinfo);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI WshCollection_Invoke(IWshCollection *iface, DISPID dispIdMember,
REFIID riid, LCID lcid,
+ WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
UINT *puArgErr)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+ ITypeInfo *typeinfo;
+ HRESULT hr;
+
+ TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember,
debugstr_guid(riid),
+ lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+ hr = get_typeinfo(IWshCollection_tid, &typeinfo);
+ if(SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_Invoke(typeinfo, &This->IWshCollection_iface, dispIdMember,
wFlags,
+ pDispParams, pVarResult, pExcepInfo, puArgErr);
+ ITypeInfo_Release(typeinfo);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI WshCollection_Item(IWshCollection *iface, VARIANT *index, VARIANT
*value)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+ static const WCHAR allusersdesktopW[] =
{'A','l','l','U','s','e','r','s','D','e','s','k','t','o','p',0};
+ static const WCHAR allusersprogramsW[] =
{'A','l','l','U','s','e','r','s','P','r','o','g','r','a','m','s',0};
+ static const WCHAR desktopW[] =
{'D','e','s','k','t','o','p',0};
+ PIDLIST_ABSOLUTE pidl;
+ WCHAR pathW[MAX_PATH];
+ int kind = 0;
+ BSTR folder;
+ HRESULT hr;
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_variant(index), value);
+
+ if (V_VT(index) != VT_BSTR)
+ {
+ FIXME("only BSTR index supported, got %d\n", V_VT(index));
+ return E_NOTIMPL;
+ }
+
+ folder = V_BSTR(index);
+ if (!strcmpiW(folder, desktopW))
+ kind = CSIDL_DESKTOP;
+ else if (!strcmpiW(folder, allusersdesktopW))
+ kind = CSIDL_COMMON_DESKTOPDIRECTORY;
+ else if (!strcmpiW(folder, allusersprogramsW))
+ kind = CSIDL_COMMON_PROGRAMS;
+ else
+ {
+ FIXME("folder kind %s not supported\n", debugstr_w(folder));
+ return E_NOTIMPL;
+ }
+
+ hr = SHGetSpecialFolderLocation(NULL, kind, &pidl);
+ if (hr != S_OK) return hr;
+
+ if (SHGetPathFromIDListW(pidl, pathW))
+ {
+ V_VT(value) = VT_BSTR;
+ V_BSTR(value) = SysAllocString(pathW);
+ hr = V_BSTR(value) ? S_OK : E_OUTOFMEMORY;
+ }
+ else
+ hr = E_FAIL;
+
+ CoTaskMemFree(pidl);
+
+ return hr;
+}
+
+static HRESULT WINAPI WshCollection_Count(IWshCollection *iface, LONG *count)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+ FIXME("(%p)->(%p): stub\n", This, count);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshCollection_get_length(IWshCollection *iface, LONG *count)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+ FIXME("(%p)->(%p): stub\n", This, count);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshCollection__NewEnum(IWshCollection *iface, IUnknown *Enum)
+{
+ WshCollection *This = impl_from_IWshCollection(iface);
+ FIXME("(%p)->(%p): stub\n", This, Enum);
+ return E_NOTIMPL;
+}
+
+static const IWshCollectionVtbl WshCollectionVtbl = {
+ WshCollection_QueryInterface,
+ WshCollection_AddRef,
+ WshCollection_Release,
+ WshCollection_GetTypeInfoCount,
+ WshCollection_GetTypeInfo,
+ WshCollection_GetIDsOfNames,
+ WshCollection_Invoke,
+ WshCollection_Item,
+ WshCollection_Count,
+ WshCollection_get_length,
+ WshCollection__NewEnum
+};
+
+static HRESULT WshCollection_Create(IWshCollection **collection)
+{
+ WshCollection *This;
+
+ This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
+ if (!This) return E_OUTOFMEMORY;
+
+ This->IWshCollection_iface.lpVtbl = &WshCollectionVtbl;
+ This->ref = 1;
+
+ *collection = &This->IWshCollection_iface;
+
+ return S_OK;
+}
+
+/* IWshShortcut */
+static HRESULT WINAPI WshShortcut_QueryInterface(IWshShortcut *iface, REFIID riid, void
**ppv)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+
+ TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppv);
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IDispatch) ||
+ IsEqualGUID(riid, &IID_IWshShortcut))
+ {
+ *ppv = iface;
+ }else {
+ FIXME("Unknown iface %s\n", debugstr_guid(riid));
+ *ppv = NULL;
+ return E_NOINTERFACE;
+ }
+
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+}
+
+static ULONG WINAPI WshShortcut_AddRef(IWshShortcut *iface)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ LONG ref = InterlockedIncrement(&This->ref);
+ TRACE("(%p) ref = %d\n", This, ref);
+ return ref;
+}
+
+static ULONG WINAPI WshShortcut_Release(IWshShortcut *iface)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ LONG ref = InterlockedDecrement(&This->ref);
+ TRACE("(%p) ref = %d\n", This, ref);
+
+ if (!ref)
+ {
+ SysFreeString(This->path_link);
+ IShellLinkW_Release(This->link);
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+
+ return ref;
+}
+
+static HRESULT WINAPI WshShortcut_GetTypeInfoCount(IWshShortcut *iface, UINT *pctinfo)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ TRACE("(%p)->(%p)\n", This, pctinfo);
+ *pctinfo = 1;
+ return S_OK;
+}
+
+static HRESULT WINAPI WshShortcut_GetTypeInfo(IWshShortcut *iface, UINT iTInfo, LCID
lcid, ITypeInfo **ppTInfo)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+ return get_typeinfo(IWshShortcut_tid, ppTInfo);
+}
+
+static HRESULT WINAPI WshShortcut_GetIDsOfNames(IWshShortcut *iface, REFIID riid,
LPOLESTR *rgszNames,
+ UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ ITypeInfo *typeinfo;
+ HRESULT hr;
+
+ TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames,
cNames, lcid, rgDispId);
+
+ hr = get_typeinfo(IWshShortcut_tid, &typeinfo);
+ if(SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
+ ITypeInfo_Release(typeinfo);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI WshShortcut_Invoke(IWshShortcut *iface, DISPID dispIdMember, REFIID
riid, LCID lcid,
+ WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
UINT *puArgErr)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ ITypeInfo *typeinfo;
+ HRESULT hr;
+
+ TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember,
debugstr_guid(riid),
+ lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+ hr = get_typeinfo(IWshShortcut_tid, &typeinfo);
+ if(SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_Invoke(typeinfo, &This->IWshShortcut_iface, dispIdMember,
wFlags,
+ pDispParams, pVarResult, pExcepInfo, puArgErr);
+ ITypeInfo_Release(typeinfo);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI WshShortcut_get_FullName(IWshShortcut *iface, BSTR *name)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ FIXME("(%p)->(%p): stub\n", This, name);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShortcut_get_Arguments(IWshShortcut *iface, BSTR *Arguments)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ WCHAR buffW[INFOTIPSIZE];
+ HRESULT hr;
+
+ TRACE("(%p)->(%p)\n", This, Arguments);
+
+ if (!Arguments)
+ return E_POINTER;
+
+ *Arguments = NULL;
+
+ hr = IShellLinkW_GetArguments(This->link, buffW, sizeof(buffW)/sizeof(WCHAR));
+ if (FAILED(hr))
+ return hr;
+
+ *Arguments = SysAllocString(buffW);
+ return *Arguments ? S_OK : E_OUTOFMEMORY;
+}
+
+static HRESULT WINAPI WshShortcut_put_Arguments(IWshShortcut *iface, BSTR Arguments)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+
+ TRACE("(%p)->(%s)\n", This, debugstr_w(Arguments));
+
+ return IShellLinkW_SetArguments(This->link, Arguments);
+}
+
+static HRESULT WINAPI WshShortcut_get_Description(IWshShortcut *iface, BSTR
*Description)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ FIXME("(%p)->(%p): stub\n", This, Description);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShortcut_put_Description(IWshShortcut *iface, BSTR Description)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ TRACE("(%p)->(%s)\n", This, debugstr_w(Description));
+ return IShellLinkW_SetDescription(This->link, Description);
+}
+
+static HRESULT WINAPI WshShortcut_get_Hotkey(IWshShortcut *iface, BSTR *Hotkey)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ FIXME("(%p)->(%p): stub\n", This, Hotkey);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShortcut_put_Hotkey(IWshShortcut *iface, BSTR Hotkey)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ FIXME("(%p)->(%s): stub\n", This, debugstr_w(Hotkey));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShortcut_get_IconLocation(IWshShortcut *iface, BSTR *IconPath)
+{
+ static const WCHAR fmtW[] = {'%','s',',','
','%','d',0};
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ WCHAR buffW[MAX_PATH], pathW[MAX_PATH];
+ INT icon = 0;
+ HRESULT hr;
+
+ TRACE("(%p)->(%p)\n", This, IconPath);
+
+ if (!IconPath)
+ return E_POINTER;
+
+ hr = IShellLinkW_GetIconLocation(This->link, buffW, sizeof(buffW)/sizeof(WCHAR),
&icon);
+ if (FAILED(hr)) return hr;
+
+ sprintfW(pathW, fmtW, buffW, icon);
+ *IconPath = SysAllocString(pathW);
+ if (!*IconPath) return E_OUTOFMEMORY;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI WshShortcut_put_IconLocation(IWshShortcut *iface, BSTR IconPath)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ HRESULT hr;
+ WCHAR *ptr;
+ BSTR path;
+ INT icon;
+
+ TRACE("(%p)->(%s)\n", This, debugstr_w(IconPath));
+
+ /* scan for icon id */
+ ptr = strrchrW(IconPath, ',');
+ if (!ptr)
+ {
+ WARN("icon index not found\n");
+ return E_FAIL;
+ }
+
+ path = SysAllocStringLen(IconPath, ptr-IconPath);
+
+ /* skip spaces if any */
+ while (isspaceW(*++ptr))
+ ;
+
+ icon = atoiW(ptr);
+
+ hr = IShellLinkW_SetIconLocation(This->link, path, icon);
+ SysFreeString(path);
+
+ return hr;
+}
+
+static HRESULT WINAPI WshShortcut_put_RelativePath(IWshShortcut *iface, BSTR rhs)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ FIXME("(%p)->(%s): stub\n", This, debugstr_w(rhs));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShortcut_get_TargetPath(IWshShortcut *iface, BSTR *Path)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ FIXME("(%p)->(%p): stub\n", This, Path);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShortcut_put_TargetPath(IWshShortcut *iface, BSTR Path)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ TRACE("(%p)->(%s)\n", This, debugstr_w(Path));
+ return IShellLinkW_SetPath(This->link, Path);
+}
+
+static HRESULT WINAPI WshShortcut_get_WindowStyle(IWshShortcut *iface, int *ShowCmd)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ TRACE("(%p)->(%p)\n", This, ShowCmd);
+ return IShellLinkW_GetShowCmd(This->link, ShowCmd);
+}
+
+static HRESULT WINAPI WshShortcut_put_WindowStyle(IWshShortcut *iface, int ShowCmd)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ TRACE("(%p)->(%d)\n", This, ShowCmd);
+ return IShellLinkW_SetShowCmd(This->link, ShowCmd);
+}
+
+static HRESULT WINAPI WshShortcut_get_WorkingDirectory(IWshShortcut *iface, BSTR
*WorkingDirectory)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ WCHAR buffW[MAX_PATH];
+ HRESULT hr;
+
+ TRACE("(%p)->(%p)\n", This, WorkingDirectory);
+
+ if (!WorkingDirectory)
+ return E_POINTER;
+
+ *WorkingDirectory = NULL;
+ hr = IShellLinkW_GetWorkingDirectory(This->link, buffW,
sizeof(buffW)/sizeof(WCHAR));
+ if (FAILED(hr)) return hr;
+
+ *WorkingDirectory = SysAllocString(buffW);
+ return *WorkingDirectory ? S_OK : E_OUTOFMEMORY;
+}
+
+static HRESULT WINAPI WshShortcut_put_WorkingDirectory(IWshShortcut *iface, BSTR
WorkingDirectory)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ TRACE("(%p)->(%s)\n", This, debugstr_w(WorkingDirectory));
+ return IShellLinkW_SetWorkingDirectory(This->link, WorkingDirectory);
+}
+
+static HRESULT WINAPI WshShortcut_Load(IWshShortcut *iface, BSTR PathLink)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ FIXME("(%p)->(%s): stub\n", This, debugstr_w(PathLink));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShortcut_Save(IWshShortcut *iface)
+{
+ WshShortcut *This = impl_from_IWshShortcut(iface);
+ IPersistFile *file;
+ HRESULT hr;
+
+ TRACE("(%p)\n", This);
+
+ IShellLinkW_QueryInterface(This->link, &IID_IPersistFile, (void**)&file);
+ hr = IPersistFile_Save(file, This->path_link, TRUE);
+ IPersistFile_Release(file);
+
+ return hr;
+}
+
+static const IWshShortcutVtbl WshShortcutVtbl = {
+ WshShortcut_QueryInterface,
+ WshShortcut_AddRef,
+ WshShortcut_Release,
+ WshShortcut_GetTypeInfoCount,
+ WshShortcut_GetTypeInfo,
+ WshShortcut_GetIDsOfNames,
+ WshShortcut_Invoke,
+ WshShortcut_get_FullName,
+ WshShortcut_get_Arguments,
+ WshShortcut_put_Arguments,
+ WshShortcut_get_Description,
+ WshShortcut_put_Description,
+ WshShortcut_get_Hotkey,
+ WshShortcut_put_Hotkey,
+ WshShortcut_get_IconLocation,
+ WshShortcut_put_IconLocation,
+ WshShortcut_put_RelativePath,
+ WshShortcut_get_TargetPath,
+ WshShortcut_put_TargetPath,
+ WshShortcut_get_WindowStyle,
+ WshShortcut_put_WindowStyle,
+ WshShortcut_get_WorkingDirectory,
+ WshShortcut_put_WorkingDirectory,
+ WshShortcut_Load,
+ WshShortcut_Save
+};
+
+static HRESULT WshShortcut_Create(const WCHAR *path, IDispatch **shortcut)
+{
+ WshShortcut *This;
+ HRESULT hr;
+
+ *shortcut = NULL;
+
+ This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
+ if (!This) return E_OUTOFMEMORY;
+
+ This->IWshShortcut_iface.lpVtbl = &WshShortcutVtbl;
+ This->ref = 1;
+
+ hr = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IShellLinkW, (void**)&This->link);
+ if (FAILED(hr))
+ {
+ HeapFree(GetProcessHeap(), 0, This);
+ return hr;
+ }
+
+ This->path_link = SysAllocString(path);
+ if (!This->path_link)
+ {
+ IShellLinkW_Release(This->link);
+ HeapFree(GetProcessHeap(), 0, This);
+ return E_OUTOFMEMORY;
+ }
+
+ *shortcut = (IDispatch*)&This->IWshShortcut_iface;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI WshShell3_QueryInterface(IWshShell3 *iface, REFIID riid, void
**ppv)
+{
+ TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
+
+ *ppv = NULL;
+
+ if(IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IDispatch) ||
+ IsEqualGUID(riid, &IID_IWshShell3))
+ {
+ *ppv = iface;
+ }
+ else if (IsEqualGUID(riid, &IID_IDispatchEx))
+ {
+ return E_NOINTERFACE;
+ }
+ else
+ {
+ FIXME("Unknown iface %s\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+ }
+
+ IWshShell3_AddRef(iface);
+ return S_OK;
+}
+
+static ULONG WINAPI WshShell3_AddRef(IWshShell3 *iface)
+{
+ TRACE("()\n");
+ return 2;
+}
+
+static ULONG WINAPI WshShell3_Release(IWshShell3 *iface)
+{
+ TRACE("()\n");
+ return 2;
+}
+
+static HRESULT WINAPI WshShell3_GetTypeInfoCount(IWshShell3 *iface, UINT *pctinfo)
+{
+ TRACE("(%p)\n", pctinfo);
+ *pctinfo = 1;
+ return S_OK;
+}
+
+static HRESULT WINAPI WshShell3_GetTypeInfo(IWshShell3 *iface, UINT iTInfo, LCID lcid,
ITypeInfo **ppTInfo)
+{
+ TRACE("(%u %u %p)\n", iTInfo, lcid, ppTInfo);
+ return get_typeinfo(IWshShell3_tid, ppTInfo);
+}
+
+static HRESULT WINAPI WshShell3_GetIDsOfNames(IWshShell3 *iface, REFIID riid, LPOLESTR
*rgszNames,
+ UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ ITypeInfo *typeinfo;
+ HRESULT hr;
+
+ TRACE("(%s %p %u %u %p)\n", debugstr_guid(riid), rgszNames, cNames, lcid,
rgDispId);
+
+ hr = get_typeinfo(IWshShell3_tid, &typeinfo);
+ if(SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
+ ITypeInfo_Release(typeinfo);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI WshShell3_Invoke(IWshShell3 *iface, DISPID dispIdMember, REFIID
riid, LCID lcid,
+ WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
UINT *puArgErr)
+{
+ ITypeInfo *typeinfo;
+ HRESULT hr;
+
+ TRACE("(%d %s %d %d %p %p %p %p)\n", dispIdMember, debugstr_guid(riid),
+ lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+ hr = get_typeinfo(IWshShell3_tid, &typeinfo);
+ if(SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_Invoke(typeinfo, &WshShell3, dispIdMember, wFlags,
+ pDispParams, pVarResult, pExcepInfo, puArgErr);
+ ITypeInfo_Release(typeinfo);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI WshShell3_get_SpecialFolders(IWshShell3 *iface, IWshCollection
**folders)
+{
+ TRACE("(%p)\n", folders);
+ return WshCollection_Create(folders);
+}
+
+static HRESULT WINAPI WshShell3_get_Environment(IWshShell3 *iface, VARIANT *type,
IWshEnvironment **env)
+{
+ FIXME("(%s %p): semi-stub\n", debugstr_variant(type), env);
+ return WshEnvironment_Create(env);
+}
+
+static HRESULT WINAPI WshShell3_Run(IWshShell3 *iface, BSTR cmd, VARIANT *style, VARIANT
*WaitOnReturn, int *exit_code)
+{
+ SHELLEXECUTEINFOW info;
+ int waitforprocess;
+ VARIANT s, w;
+ HRESULT hr;
+
+ TRACE("(%s %s %s %p)\n", debugstr_w(cmd), debugstr_variant(style),
debugstr_variant(WaitOnReturn), exit_code);
+
+ VariantInit(&s);
+ hr = VariantChangeType(&s, style, 0, VT_I4);
+ if (FAILED(hr))
+ {
+ ERR("failed to convert style argument, 0x%08x\n", hr);
+ return hr;
+ }
+
+ VariantInit(&w);
+ hr = VariantChangeType(&w, WaitOnReturn, 0, VT_I4);
+ if (FAILED(hr))
+ {
+ ERR("failed to convert wait argument, 0x%08x\n", hr);
+ return hr;
+ }
+
+ memset(&info, 0, sizeof(info));
+ info.cbSize = sizeof(info);
+
+ waitforprocess = V_I4(&w);
+
+ info.fMask = waitforprocess ? SEE_MASK_NOASYNC | SEE_MASK_NOCLOSEPROCESS :
SEE_MASK_DEFAULT;
+ info.lpFile = cmd;
+ info.nShow = V_I4(&s);
+
+ if (!ShellExecuteExW(&info))
+ {
+ TRACE("ShellExecute failed, %d\n", GetLastError());
+ return HRESULT_FROM_WIN32(GetLastError());
+ }
+ else
+ {
+ if (waitforprocess)
+ {
+ if (exit_code)
+ {
+ DWORD code;
+ GetExitCodeProcess(info.hProcess, &code);
+ *exit_code = code;
+ }
+ CloseHandle(info.hProcess);
+ }
+ else
+ if (exit_code) *exit_code = 0;
+
+ return S_OK;
+ }
+}
+
+static HRESULT WINAPI WshShell3_Popup(IWshShell3 *iface, BSTR Text, VARIANT*
SecondsToWait, VARIANT *Title, VARIANT *Type, int *button)
+{
+ FIXME("(%s %s %s %s %p): stub\n", debugstr_w(Text),
debugstr_variant(SecondsToWait),
+ debugstr_variant(Title), debugstr_variant(Type), button);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_CreateShortcut(IWshShell3 *iface, BSTR PathLink,
IDispatch** Shortcut)
+{
+ TRACE("(%s %p)\n", debugstr_w(PathLink), Shortcut);
+ return WshShortcut_Create(PathLink, Shortcut);
+}
+
+static HRESULT WINAPI WshShell3_ExpandEnvironmentStrings(IWshShell3 *iface, BSTR Src,
BSTR* Dst)
+{
+ DWORD ret;
+
+ TRACE("(%s %p)\n", debugstr_w(Src), Dst);
+
+ if (!Src || !Dst) return E_POINTER;
+
+ ret = ExpandEnvironmentStringsW(Src, NULL, 0);
+ *Dst = SysAllocStringLen(NULL, ret);
+ if (!*Dst) return E_OUTOFMEMORY;
+
+ if (ExpandEnvironmentStringsW(Src, *Dst, ret))
+ return S_OK;
+ else
+ {
+ SysFreeString(*Dst);
+ *Dst = NULL;
+ return HRESULT_FROM_WIN32(GetLastError());
+ }
+}
+
+static HRESULT WINAPI WshShell3_RegRead(IWshShell3 *iface, BSTR Name, VARIANT*
out_Value)
+{
+ FIXME("(%s %p): stub\n", debugstr_w(Name), out_Value);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_RegWrite(IWshShell3 *iface, BSTR Name, VARIANT *Value,
VARIANT *Type)
+{
+ FIXME("(%s %s %s): stub\n", debugstr_w(Name), debugstr_variant(Value),
debugstr_variant(Type));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_RegDelete(IWshShell3 *iface, BSTR Name)
+{
+ FIXME("(%s): stub\n", debugstr_w(Name));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_LogEvent(IWshShell3 *iface, VARIANT *Type, BSTR Message,
BSTR Target, VARIANT_BOOL *out_Success)
+{
+ FIXME("(%s %s %s %p): stub\n", debugstr_variant(Type), debugstr_w(Message),
debugstr_w(Target), out_Success);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_AppActivate(IWshShell3 *iface, VARIANT *App, VARIANT
*Wait, VARIANT_BOOL *out_Success)
+{
+ FIXME("(%s %s %p): stub\n", debugstr_variant(App), debugstr_variant(Wait),
out_Success);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_SendKeys(IWshShell3 *iface, BSTR Keys, VARIANT *Wait)
+{
+ FIXME("(%s %p): stub\n", debugstr_w(Keys), Wait);
+ return E_NOTIMPL;
+}
+
+static const IWshShell3Vtbl WshShell3Vtbl = {
+ WshShell3_QueryInterface,
+ WshShell3_AddRef,
+ WshShell3_Release,
+ WshShell3_GetTypeInfoCount,
+ WshShell3_GetTypeInfo,
+ WshShell3_GetIDsOfNames,
+ WshShell3_Invoke,
+ WshShell3_get_SpecialFolders,
+ WshShell3_get_Environment,
+ WshShell3_Run,
+ WshShell3_Popup,
+ WshShell3_CreateShortcut,
+ WshShell3_ExpandEnvironmentStrings,
+ WshShell3_RegRead,
+ WshShell3_RegWrite,
+ WshShell3_RegDelete,
+ WshShell3_LogEvent,
+ WshShell3_AppActivate,
+ WshShell3_SendKeys
+};
+
+static IWshShell3 WshShell3 = { &WshShell3Vtbl };
+
+HRESULT WINAPI WshShellFactory_CreateInstance(IClassFactory *iface, IUnknown *outer,
REFIID riid, void **ppv)
+{
+ TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
+
+ return IWshShell3_QueryInterface(&WshShell3, riid, ppv);
+}
Propchange: trunk/reactos/dll/win32/wshom.ocx/shell.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/wshom.ocx/wshom.idl
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wshom.ocx/wshom.…
==============================================================================
--- trunk/reactos/dll/win32/wshom.ocx/wshom.idl (added)
+++ trunk/reactos/dll/win32/wshom.ocx/wshom.idl [iso-8859-1] Sat Nov 8 10:22:22 2014
@@ -0,0 +1,666 @@
+/*
+ * Copyright 2011 Jacek Caban for CodeWeavers
+ *
+ * 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
+ */
+
+#pragma makedep regtypelib
+
+import "oaidl.idl";
+cpp_quote("#undef ExpandEnvironmentStrings")
+
+[
+ helpstring("Windows Script Host Object Model"),
+ uuid(f935dc20-1cf0-11d0-adb9-00c04fd58a0b),
+ version(1.0)
+]
+library IWshRuntimeLibrary
+{
+ importlib("stdole2.tlb");
+
+ typedef enum {
+ WshRunning = 0,
+ WshFinished,
+ WshFailed
+ } WshExecStatus;
+
+ typedef enum {
+ UnknownType = 0,
+ Removable,
+ Fixed,
+ Remote,
+ CDRom,
+ RamDisk
+ } DriveTypeConst;
+
+ typedef enum {
+ Normal = 0x000,
+ ReadOnly = 0x001,
+ Hidden = 0x002,
+ System = 0x004,
+ Volume = 0x008,
+ Directory = 0x010,
+ Archive = 0x020,
+ Alias = 0x400,
+ Compressed = 0x800
+ } FileAttribute;
+
+ typedef enum {
+ ForReading = 0x1,
+ ForWriting = 0x2,
+ ForAppending = 0x8
+ } IOMode;
+
+ typedef enum {
+ TristateTrue = -1,
+ TristateFalse = 0,
+ TristateUseDefault = -2,
+ TristateMixed = -2
+ } Tristate;
+
+ interface IFolder;
+ interface IFolderCollection;
+
+ [
+ uuid(53bad8c1-e718-11cf-893d-00a0c9054228),
+ odl,
+ hidden,
+ dual,
+ nonextensible,
+ oleautomation
+ ]
+ interface ITextStream : IDispatch {
+ [id(0x2710), propget]
+ HRESULT Line([out, retval] long* Line);
+
+ [id(0xfffffdef), propget]
+ HRESULT Column([out, retval] long* Column);
+
+ [id(0x2712), propget]
+ HRESULT AtEndOfStream([out, retval] VARIANT_BOOL* EOS);
+
+ [id(0x2713), propget]
+ HRESULT AtEndOfLine([out, retval] VARIANT_BOOL* EOL);
+
+ [id(0x2714)]
+ HRESULT Read([in] long Characters, [out, retval] BSTR* Text);
+
+ [id(0x2715)]
+ HRESULT ReadLine([out, retval] BSTR* Text);
+
+ [id(0x2716)]
+ HRESULT ReadAll([out, retval] BSTR* Text);
+
+ [id(0x2717)]
+ HRESULT Write([in] BSTR Text);
+
+ [id(0x2718)]
+ HRESULT WriteLine([in, defaultvalue("")] BSTR Text);
+
+ [id(0x2719)]
+ HRESULT WriteBlankLines([in] long Lines);
+
+ [id(0x271a)]
+ HRESULT Skip([in] long Characters);
+
+ [id(0x271b)]
+ HRESULT SkipLine();
+
+ [id(0x271c)]
+ HRESULT Close();
+ };
+
+ [
+ uuid(c7c3f5a0-88a3-11d0-abcb-00a0c90fffc0),
+ odl,
+ hidden,
+ dual,
+ nonextensible,
+ oleautomation
+ ]
+ interface IDrive : IDispatch {
+ [id(DISPID_VALUE), propget]
+ HRESULT Path([out, retval] BSTR* path);
+
+ [id(0x2710), propget]
+ HRESULT DriveLetter([out, retval] BSTR* letter);
+
+ [id(0x2711), propget]
+ HRESULT ShareName([out, retval] BSTR* ShareName);
+
+ [id(0x2712), propget]
+ HRESULT DriveType([out, retval] DriveTypeConst* type);
+
+ [id(0x2713), propget]
+ HRESULT RootFolder([out, retval] IFolder** folder);
+
+ [id(0x2715), propget]
+ HRESULT AvailableSpace([out, retval] VARIANT* Avail);
+
+ [id(0x2714), propget]
+ HRESULT FreeSpace([out, retval] VARIANT* pFree);
+
+ [id(0x2716), propget]
+ HRESULT TotalSize([out, retval] VARIANT* Total);
+
+ [id(0x2717), propget]
+ HRESULT VolumeName([out, retval] BSTR* Name);
+
+ [id(0x2717), propput]
+ HRESULT VolumeName([in] BSTR Name);
+
+ [id(0x2718), propget]
+ HRESULT FileSystem([out, retval] BSTR* pFileSystem);
+
+ [id(0x2719), propget]
+ HRESULT SerialNumber([out, retval] long* SerialNumber);
+
+ [id(0x271a), propget]
+ HRESULT IsReady([out, retval] VARIANT_BOOL* pfReady);
+ };
+
+ [
+ uuid(c7c3f5a4-88a3-11d0-abcb-00a0c90fffc0),
+ odl,
+ hidden,
+ dual,
+ nonextensible,
+ oleautomation
+ ]
+ interface IFile : IDispatch {
+ [id(DISPID_VALUE), propget]
+ HRESULT Path([out, retval] BSTR* path);
+
+ [id(0x03e8), propget]
+ HRESULT Name([out, retval] BSTR* Name);
+
+ [id(0x03e8), propput]
+ HRESULT Name([in] BSTR Name);
+
+ [id(0x03ea), propget]
+ HRESULT ShortPath([out, retval] BSTR* path);
+
+ [id(0x03e9), propget]
+ HRESULT ShortName([out, retval] BSTR* Name);
+
+ [id(0x03ec), propget]
+ HRESULT Drive([out, retval] IDrive** drive);
+
+ [id(0x03ed), propget]
+ HRESULT ParentFolder([out, retval] IFolder** folder);
+
+ [id(0x03eb), propget]
+ HRESULT Attributes([out, retval] FileAttribute* attr);
+
+ [id(0x03eb), propput]
+ HRESULT Attributes([in] FileAttribute attr);
+
+ [id(0x03ee), propget]
+ HRESULT DateCreated([out, retval] DATE* date);
+
+ [id(0x03ef), propget]
+ HRESULT DateLastModified([out, retval] DATE* date);
+
+ [id(0x03f0), propget]
+ HRESULT DateLastAccessed([out, retval] DATE* date);
+
+ [id(0x03f1), propget]
+ HRESULT Size([out, retval] VARIANT* Size);
+
+ [id(0x03f2), propget]
+ HRESULT Type([out, retval] BSTR* Type);
+
+ [id(0x04b0)]
+ HRESULT Delete([in, defaultvalue(0)] VARIANT_BOOL Force);
+
+ [id(0x04b2)]
+ HRESULT Copy(
+ [in] BSTR Destination,
+ [in, defaultvalue(-1)] VARIANT_BOOL OverWriteFiles);
+
+ [id(0x04b4)]
+ HRESULT Move([in] BSTR Destination);
+
+ [id(0x044c)]
+ HRESULT OpenAsTextStream(
+ [in, defaultvalue(1)] IOMode IOMode,
+ [in, defaultvalue(0)] Tristate Format,
+ [out, retval] ITextStream** ppts);
+ };
+
+ [
+ uuid(c7c3f5a5-88a3-11d0-abcb-00a0c90fffc0),
+ odl,
+ hidden,
+ dual,
+ nonextensible,
+ oleautomation
+ ]
+ interface IFileCollection : IDispatch {
+ [id(DISPID_VALUE), propget]
+ HRESULT Item(
+ [in] VARIANT Key,
+ [out, retval] IFile** ppfile);
+ [id(DISPID_NEWENUM), propget, restricted, hidden]
+ HRESULT _NewEnum([out, retval] IUnknown** ppenum);
+ [id(1), propget]
+ HRESULT Count([out, retval] long* count);
+ };
+
+ [
+ uuid(c7c3f5a2-88a3-11d0-abcb-00a0c90fffc0),
+ odl,
+ hidden,
+ dual,
+ nonextensible,
+ oleautomation
+ ]
+ interface IFolder : IDispatch {
+ [id(DISPID_VALUE), propget]
+ HRESULT Path([out, retval] BSTR* path);
+
+ [id(0x03e8), propget]
+ HRESULT Name([out, retval] BSTR* name);
+
+ [id(0x03e8), propput]
+ HRESULT Name([in] BSTR name);
+
+ [id(0x03ea), propget]
+ HRESULT ShortPath([out, retval] BSTR* path);
+
+ [id(0x03e9), propget]
+ HRESULT ShortName([out, retval] BSTR* name);
+
+ [id(0x03ec), propget]
+ HRESULT Drive([out, retval] IDrive** drive);
+
+ [id(0x03ed), propget]
+ HRESULT ParentFolder([out, retval] IFolder** folder);
+
+ [id(0x03eb), propget]
+ HRESULT Attributes([out, retval] FileAttribute* attr);
+
+ [id(0x03eb), propput]
+ HRESULT Attributes([in] FileAttribute attr);
+
+ [id(0x03ee), propget]
+ HRESULT DateCreated([out, retval] DATE* date);
+
+ [id(0x03ef), propget]
+ HRESULT DateLastModified([out, retval] DATE* date);
+
+ [id(0x03f0), propget]
+ HRESULT DateLastAccessed([out, retval] DATE* date);
+
+ [id(0x03f2), propget]
+ HRESULT Type([out, retval] BSTR* type);
+
+ [id(0x04b1)]
+ HRESULT Delete([in, defaultvalue(0)] VARIANT_BOOL force);
+
+ [id(0x04b3)]
+ HRESULT Copy(
+ [in] BSTR Destination,
+ [in, defaultvalue(-1)] VARIANT_BOOL OverWriteFiles);
+
+ [id(0x04b5)]
+ HRESULT Move([in] BSTR Destination);
+
+ [id(0x2710), propget]
+ HRESULT IsRootFolder([out, retval] VARIANT_BOOL* root);
+
+ [id(0x03f1), propget]
+ HRESULT Size([out, retval] VARIANT* size);
+
+ [id(0x2711), propget]
+ HRESULT SubFolders([out, retval] IFolderCollection** folders);
+
+ [id(0x2712), propget]
+ HRESULT Files([out, retval] IFileCollection** files);
+
+ [id(0x044d)]
+ HRESULT CreateTextFile(
+ [in] BSTR FileName,
+ [in, defaultvalue(-1)] VARIANT_BOOL Overwrite,
+ [in, defaultvalue(0)] VARIANT_BOOL Unicode,
+ [out, retval] ITextStream** ppts);
+ };
+
+ [
+ uuid(c7c3f5a3-88a3-11d0-abcb-00a0c90fffc0),
+ odl,
+ hidden,
+ dual,
+ nonextensible,
+ oleautomation
+ ]
+ interface IFolderCollection : IDispatch {
+ [id(2)]
+ HRESULT Add(
+ [in] BSTR Name,
+ [out, retval] IFolder** folder);
+
+ [id(DISPID_VALUE), propget]
+ HRESULT Item(
+ [in] VARIANT Key,
+ [out, retval] IFolder** folder);
+
+ [id(DISPID_NEWENUM), propget, restricted, hidden]
+ HRESULT _NewEnum([out, retval] IUnknown** ppenum);
+
+ [id(1), propget]
+ HRESULT Count([out, retval] long* count);
+ };
+
+ [
+ uuid(f935dc27-1cf0-11d0-adb9-00c04fd58a0b),
+ odl,
+ dual,
+ oleautomation
+ ]
+ interface IWshCollection : IDispatch {
+ [id(DISPID_VALUE)]
+ HRESULT Item(
+ [in] VARIANT *Index,
+ [out, retval] VARIANT *out_Value);
+
+ [id(1)]
+ HRESULT Count([out, retval] long *out_Count);
+
+ [id(2), propget]
+ HRESULT length([out, retval] long *out_Count);
+
+ [id(DISPID_NEWENUM)]
+ HRESULT _NewEnum([out, retval] IUnknown *out_Enum);
+ }
+
+ [
+ uuid(f935dc29-1cf0-11d0-adb9-00c04fd58a0b),
+ odl,
+ dual,
+ oleautomation
+ ]
+ interface IWshEnvironment : IDispatch {
+ [id(DISPID_VALUE), propget]
+ HRESULT Item(
+ [in] BSTR Name,
+ [out, retval] BSTR *out_Value);
+
+ [id(DISPID_VALUE), propput]
+ HRESULT Item(
+ [in] BSTR Name,
+ [in] BSTR Value);
+
+ [id(1)]
+ HRESULT Count([out, retval] long *out_Count);
+
+ [id(2), propget]
+ HRESULT length([out, retval] long *out_Count);
+
+ [id(DISPID_NEWENUM)]
+ HRESULT _NewEnum([out, retval] IUnknown **out_Enum);
+
+ [id(0x03e9)]
+ HRESULT Remove([in] BSTR Name);
+ }
+
+ [
+ uuid(08fed190-be19-11d3-a28b-00104bd35090),
+ odl,
+ dual,
+ oleautomation
+ ]
+ interface IWshExec : IDispatch {
+ [id(0x0001), propget]
+ HRESULT Status([out, retval] WshExecStatus* Status);
+
+ [id(0x0003), propget]
+ HRESULT StdIn([out, retval] ITextStream** stream);
+
+ [id(0x0004), propget]
+ HRESULT StdOut([out, retval] ITextStream** stream);
+
+ [id(0x0005), propget]
+ HRESULT StdErr([out, retval] ITextStream** stream);
+
+ [id(0x0006), propget]
+ HRESULT ProcessID([out, retval] long* pid);
+
+ [id(0x0007), propget]
+ HRESULT ExitCode([out, retval] long* ExitCode);
+
+ [id(0x0008)]
+ HRESULT Terminate();
+ };
+
+ [
+ uuid(f935dc23-1cf0-11d0-adb9-00c04fd58a0b),
+ odl,
+ dual,
+ oleautomation
+ ]
+ interface IWshShortcut : IDispatch {
+ [id(DISPID_VALUE), propget]
+ HRESULT FullName([out, retval] BSTR* name);
+
+ [id(0x03e8), propget]
+ HRESULT Arguments([out, retval] BSTR* Arguments);
+
+ [id(0x03e8), propput]
+ HRESULT Arguments([in] BSTR Arguments);
+
+ [id(0x03e9), propget]
+ HRESULT Description([out, retval] BSTR* Description);
+
+ [id(0x03e9), propput]
+ HRESULT Description([in] BSTR Description);
+
+ [id(0x03ea), propget]
+ HRESULT Hotkey([out, retval] BSTR* HotKey);
+
+ [id(0x03ea), propput]
+ HRESULT Hotkey([in] BSTR HotKey);
+
+ [id(0x03eb), propget]
+ HRESULT IconLocation([out, retval] BSTR* IconPath);
+
+ [id(0x03eb), propput]
+ HRESULT IconLocation([in] BSTR IconPath);
+
+ [id(0x03ec), propput]
+ HRESULT RelativePath([in] BSTR rhs);
+
+ [id(0x03ed), propget]
+ HRESULT TargetPath([out, retval] BSTR* Path);
+
+ [id(0x03ed), propput]
+ HRESULT TargetPath([in] BSTR Path);
+
+ [id(0x03ee), propget]
+ HRESULT WindowStyle([out, retval] int* ShowCmd);
+
+ [id(0x03ee), propput]
+ HRESULT WindowStyle([in] int ShowCmd);
+
+ [id(0x03ef), propget]
+ HRESULT WorkingDirectory([out, retval] BSTR* WorkingDirectory);
+
+ [id(0x03ef), propput]
+ HRESULT WorkingDirectory([in] BSTR WorkingDirectory);
+
+ [id(0x07d0), hidden]
+ HRESULT Load([in] BSTR PathLink);
+
+ [id(0x07d1)]
+ HRESULT Save();
+ };
+
+ [
+ uuid(f935dc21-1cf0-11d0-adb9-00c04fd58a0b),
+ odl,
+ dual,
+ oleautomation,
+ hidden
+ ]
+ interface IWshShell : IDispatch {
+ [id(0x0064), propget]
+ HRESULT SpecialFolders([out, retval] IWshCollection** out_Folders);
+
+ [id(0x00c8), propget]
+ HRESULT Environment(
+ [in, optional] VARIANT* Type,
+ [out, retval] IWshEnvironment** out_Env);
+
+ [id(0x03e8)]
+ HRESULT Run(
+ [in] BSTR Command,
+ [in, optional] VARIANT* WindowStyle,
+ [in, optional] VARIANT* WaitOnReturn,
+ [out, retval] int* out_ExitCode);
+
+ [id(0x03e9)]
+ HRESULT Popup(
+ [in] BSTR Text,
+ [in, optional] VARIANT* SecondsToWait,
+ [in, optional] VARIANT* Title,
+ [in, optional] VARIANT* Type,
+ [out, retval] int* out_Button);
+
+ [id(0x03ea)]
+ HRESULT CreateShortcut(
+ [in] BSTR PathLink,
+ [out, retval] IDispatch** out_Shortcut);
+
+ [id(0x03ee)]
+ HRESULT ExpandEnvironmentStrings(
+ [in] BSTR Src,
+ [out, retval] BSTR* out_Dst);
+
+ [id(0x07d0)]
+ HRESULT RegRead(
+ [in] BSTR Name,
+ [out, retval] VARIANT* out_Value);
+
+ [id(0x07d1)]
+ HRESULT RegWrite(
+ [in] BSTR Name,
+ [in] VARIANT* Value,
+ [in, optional] VARIANT* Type);
+
+ [id(0x07d2)]
+ HRESULT RegDelete([in] BSTR Name);
+ };
+
+ [
+ uuid(24be5a30-edfe-11d2-b933-00104b365c9f),
+ odl,
+ dual,
+ oleautomation,
+ hidden
+ ]
+ interface IWshShell2 : IWshShell {
+ [id(0x0bb8)]
+ HRESULT LogEvent(
+ [in] VARIANT* Type,
+ [in] BSTR Message,
+ [in, defaultvalue("")] BSTR Target,
+ [out, retval] VARIANT_BOOL* out_Success);
+
+ [id(0x0bc2)]
+ HRESULT AppActivate(
+ [in] VARIANT* App,
+ [in, optional] VARIANT* Wait,
+ [out, retval] VARIANT_BOOL* out_Success);
+
+ [id(0x0bc3)]
+ HRESULT SendKeys(
+ [in] BSTR Keys,
+ [in, optional] VARIANT* Wait);
+ };
+
+ [
+ uuid(41904400-be18-11d3-a28b-00104bd35090),
+ odl,
+ dual,
+ oleautomation
+ ]
+ interface IWshShell3 : IWshShell2 {
+ [id(0x0bc4)]
+ HRESULT Exec(
+ [in] BSTR Command,
+ [out, retval] IWshExec** out_Exec);
+
+ [id(0x0bc5), propget]
+ HRESULT CurrentDirectory([out, retval] BSTR* out_Directory);
+
+ [id(0x0bc5), propput]
+ HRESULT CurrentDirectory([in] BSTR out_Directory);
+ };
+
+ [
+ uuid(24be5a31-edfe-11d2-b933-00104b365c9f),
+ odl,
+ dual,
+ oleautomation
+ ]
+ interface IWshNetwork2 : IDispatch {
+ [id(0x60020000), propget]
+ HRESULT UserDomain([out, retval] BSTR *out_UserDomain);
+ }
+
+ [
+ helpstring("Windows Script Host Shell Object"),
+ uuid(f935dc22-1cf0-11d0-adb9-00c04fd58a0b),
+ threading(apartment),
+ progid("WScript.Shell.1"),
+ vi_progid("WScript.Shell")
+ ]
+ coclass IWshShell_Class {
+ [default] interface IWshShell3;
+ }
+
+ [
+ helpstring("Windows Script Host Shell Object"),
+ uuid(72c24dd5-d70a-438b-8a42-98424b88afb8),
+ threading(apartment),
+ progid("WScript.Shell.1"),
+ vi_progid("WScript.Shell")
+ ]
+ coclass WshShell {
+ [default] interface IWshShell3;
+ }
+
+ [
+ helpstring("Windows Script Host Network Object"),
+ uuid(f935dc26-1cf0-11d0-adb9-00c04fd58a0b),
+ threading(apartment),
+ progid("WScript.Network.1"),
+ vi_progid("WScript.Network")
+ ]
+ coclass IWshNetwork_Class {
+ [default] interface IWshNetwork2;
+ }
+
+ [
+ helpstring("Windows Script Host Network Object"),
+ uuid(093ff999-1ea0-4079-9525-9614c3504b74),
+ threading(apartment),
+ progid("WScript.Network.1"),
+ vi_progid("WScript.Network")
+ ]
+ coclass WshNetwork {
+ [default] interface IWshNetwork2;
+ }
+}
Propchange: trunk/reactos/dll/win32/wshom.ocx/wshom.idl
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/wshom.ocx/wshom.ocx.spec
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wshom.ocx/wshom.…
==============================================================================
--- trunk/reactos/dll/win32/wshom.ocx/wshom.ocx.spec (added)
+++ trunk/reactos/dll/win32/wshom.ocx/wshom.ocx.spec [iso-8859-1] Sat Nov 8 10:22:22
2014
@@ -0,0 +1,4 @@
+@ stdcall -private DllCanUnloadNow()
+@ stdcall -private DllGetClassObject(ptr ptr ptr)
+@ stdcall -private DllRegisterServer()
+@ stdcall -private DllUnregisterServer()
Propchange: trunk/reactos/dll/win32/wshom.ocx/wshom.ocx.spec
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/wshom.ocx/wshom.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wshom.ocx/wshom.…
==============================================================================
--- trunk/reactos/dll/win32/wshom.ocx/wshom.rc (added)
+++ trunk/reactos/dll/win32/wshom.ocx/wshom.rc [iso-8859-1] Sat Nov 8 10:22:22 2014
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2011 Jacek Caban for CodeWeavers
+ *
+ * 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 <windef.h>
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+/* @makedep: wshom.rgs */
+1 WINE_REGISTRY wshom.rgs
+
+2 WINE_REGISTRY wshom.tlb.rgs
+1 TYPELIB wshom.tlb
Propchange: trunk/reactos/dll/win32/wshom.ocx/wshom.rc
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/wshom.ocx/wshom.rgs
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wshom.ocx/wshom.…
==============================================================================
--- trunk/reactos/dll/win32/wshom.ocx/wshom.rgs (added)
+++ trunk/reactos/dll/win32/wshom.ocx/wshom.rgs [iso-8859-1] Sat Nov 8 10:22:22 2014
@@ -0,0 +1,34 @@
+HKCR
+{
+ NoRemove CLSID
+ {
+ '{f935dc22-1cf0-11d0-adb9-00c04fd58a0b}'
+ {
+ 'Implemented Categories'
+ {
+ '{40fc6ed5-2438-11cf-a3db-080036f12502}'
+ }
+ }
+ '{72c24dd5-d70a-438b-8a42-98424b88afb8}'
+ {
+ 'Implemented Categories'
+ {
+ '{40fc6ed5-2438-11cf-a3db-080036f12502}'
+ }
+ }
+ '{f935dc26-1cf0-11d0-adb9-00c04fd58a0b}'
+ {
+ 'Implemented Categories'
+ {
+ '{40fc6ed5-2438-11cf-a3db-080036f12502}'
+ }
+ }
+ '{093ff999-1ea0-4079-9525-9614c3504b74}'
+ {
+ 'Implemented Categories'
+ {
+ '{40fc6ed5-2438-11cf-a3db-080036f12502}'
+ }
+ }
+ }
+}
Propchange: trunk/reactos/dll/win32/wshom.ocx/wshom.rgs
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/wshom.ocx/wshom.tlb.rgs
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wshom.ocx/wshom.…
==============================================================================
--- trunk/reactos/dll/win32/wshom.ocx/wshom.tlb.rgs (added)
+++ trunk/reactos/dll/win32/wshom.ocx/wshom.tlb.rgs [iso-8859-1] Sat Nov 8 10:22:22 2014
@@ -0,0 +1,172 @@
+HKCR
+{
+ NoRemove Typelib
+ {
+ NoRemove '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}'
+ {
+ '1.0' = s 'Windows Script Host Object Model'
+ {
+ '0' { win32 = s '%MODULE%' }
+ FLAGS = s '0'
+ }
+ }
+ }
+ NoRemove Interface
+ {
+ '{53BAD8C1-E718-11CF-893D-00A0C9054228}' = s 'ITextStream'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{C7C3F5A0-88A3-11D0-ABCB-00A0C90FFFC0}' = s 'IDrive'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{C7C3F5A4-88A3-11D0-ABCB-00A0C90FFFC0}' = s 'IFile'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{C7C3F5A5-88A3-11D0-ABCB-00A0C90FFFC0}' = s 'IFileCollection'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{C7C3F5A2-88A3-11D0-ABCB-00A0C90FFFC0}' = s 'IFolder'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{C7C3F5A3-88A3-11D0-ABCB-00A0C90FFFC0}' = s 'IFolderCollection'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{F935DC27-1CF0-11D0-ADB9-00C04FD58A0B}' = s 'IWshCollection'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{F935DC29-1CF0-11D0-ADB9-00C04FD58A0B}' = s 'IWshEnvironment'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{08FED190-BE19-11D3-A28B-00104BD35090}' = s 'IWshExec'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{F935DC23-1CF0-11D0-ADB9-00C04FD58A0B}' = s 'IWshShortcut'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{F935DC21-1CF0-11D0-ADB9-00C04FD58A0B}' = s 'IWshShell'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{24BE5A30-EDFE-11D2-B933-00104B365C9F}' = s 'IWshShell2'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{41904400-BE18-11D3-A28B-00104BD35090}' = s 'IWshShell3'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ '{24BE5A31-EDFE-11D2-B933-00104B365C9F}' = s 'IWshNetwork2'
+ {
+ ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
+ ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}' { val Version =
s '1.0' }
+ }
+ }
+ NoRemove CLSID
+ {
+ '{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}' = s 'Windows Script Host
Shell Object'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s
'Apartment' }
+ ProgId = s 'WScript.Shell.1'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}'
+ Version = s '1.0'
+ VersionIndependentProgId = s 'WScript.Shell'
+ }
+ '{72C24DD5-D70A-438B-8A42-98424B88AFB8}' = s 'Windows Script Host
Shell Object'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s
'Apartment' }
+ ProgId = s 'WScript.Shell.1'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}'
+ Version = s '1.0'
+ VersionIndependentProgId = s 'WScript.Shell'
+ }
+ '{F935DC26-1CF0-11D0-ADB9-00C04FD58A0B}' = s 'Windows Script Host
Network Object'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s
'Apartment' }
+ ProgId = s 'WScript.Network.1'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}'
+ Version = s '1.0'
+ VersionIndependentProgId = s 'WScript.Network'
+ }
+ '{093FF999-1EA0-4079-9525-9614C3504B74}' = s 'Windows Script Host
Network Object'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s
'Apartment' }
+ ProgId = s 'WScript.Network.1'
+ TypeLib = s '{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}'
+ Version = s '1.0'
+ VersionIndependentProgId = s 'WScript.Network'
+ }
+ }
+ 'WScript.Shell.1' = s 'Windows Script Host Shell Object'
+ {
+ CLSID = s '{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}'
+ }
+ 'WScript.Shell' = s 'Windows Script Host Shell Object'
+ {
+ CLSID = s '{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}'
+ CurVer = s 'WScript.Shell.1'
+ }
+ 'WScript.Shell.1' = s 'Windows Script Host Shell Object'
+ {
+ CLSID = s '{72C24DD5-D70A-438B-8A42-98424B88AFB8}'
+ }
+ 'WScript.Shell' = s 'Windows Script Host Shell Object'
+ {
+ CLSID = s '{72C24DD5-D70A-438B-8A42-98424B88AFB8}'
+ CurVer = s 'WScript.Shell.1'
+ }
+ 'WScript.Network.1' = s 'Windows Script Host Network Object'
+ {
+ CLSID = s '{F935DC26-1CF0-11D0-ADB9-00C04FD58A0B}'
+ }
+ 'WScript.Network' = s 'Windows Script Host Network Object'
+ {
+ CLSID = s '{F935DC26-1CF0-11D0-ADB9-00C04FD58A0B}'
+ CurVer = s 'WScript.Network.1'
+ }
+ 'WScript.Network.1' = s 'Windows Script Host Network Object'
+ {
+ CLSID = s '{093FF999-1EA0-4079-9525-9614C3504B74}'
+ }
+ 'WScript.Network' = s 'Windows Script Host Network Object'
+ {
+ CLSID = s '{093FF999-1EA0-4079-9525-9614C3504B74}'
+ CurVer = s 'WScript.Network.1'
+ }
+}
Propchange: trunk/reactos/dll/win32/wshom.ocx/wshom.tlb.rgs
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/wshom.ocx/wshom_main.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wshom.ocx/wshom_…
==============================================================================
--- trunk/reactos/dll/win32/wshom.ocx/wshom_main.c (added)
+++ trunk/reactos/dll/win32/wshom.ocx/wshom_main.c [iso-8859-1] Sat Nov 8 10:22:22 2014
@@ -0,0 +1,205 @@
+/*
+ * Copyright 2011 Jacek Caban for CodeWeavers
+ *
+ * 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 "wshom_private.h"
+
+#include <rpcproxy.h>
+
+static HINSTANCE wshom_instance;
+
+static ITypeLib *typelib;
+static ITypeInfo *typeinfos[LAST_tid];
+
+static REFIID tid_ids[] = {
+ &IID_NULL,
+ &IID_IWshCollection,
+ &IID_IWshEnvironment,
+ &IID_IWshShell3,
+ &IID_IWshShortcut
+};
+
+static HRESULT load_typelib(void)
+{
+ HRESULT hres;
+ ITypeLib *tl;
+
+ hres = LoadRegTypeLib(&LIBID_IWshRuntimeLibrary, 1, 0, LOCALE_SYSTEM_DEFAULT,
&tl);
+ if(FAILED(hres)) {
+ ERR("LoadRegTypeLib failed: %08x\n", hres);
+ return hres;
+ }
+
+ if(InterlockedCompareExchangePointer((void**)&typelib, tl, NULL))
+ ITypeLib_Release(tl);
+ return hres;
+}
+
+HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
+{
+ HRESULT hres;
+
+ if (!typelib)
+ hres = load_typelib();
+ if (!typelib)
+ return hres;
+
+ if(!typeinfos[tid]) {
+ ITypeInfo *ti;
+
+ hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &ti);
+ if(FAILED(hres)) {
+ ERR("GetTypeInfoOfGuid(%s) failed: %08x\n",
debugstr_guid(tid_ids[tid]), hres);
+ return hres;
+ }
+
+ if(InterlockedCompareExchangePointer((void**)(typeinfos+tid), ti, NULL))
+ ITypeInfo_Release(ti);
+ }
+
+ *typeinfo = typeinfos[tid];
+ ITypeInfo_AddRef(*typeinfo);
+ return S_OK;
+}
+
+static
+void release_typelib(void)
+{
+ unsigned i;
+
+ if(!typelib)
+ return;
+
+ for(i=0; i < sizeof(typeinfos)/sizeof(*typeinfos); i++)
+ if(typeinfos[i])
+ ITypeInfo_Release(typeinfos[i]);
+
+ ITypeLib_Release(typelib);
+}
+
+static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void
**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 ClassFactory_AddRef(IClassFactory *iface)
+{
+ TRACE("(%p)\n", iface);
+ return 2;
+}
+
+static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
+{
+ TRACE("(%p)\n", iface);
+ return 1;
+}
+
+static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
+{
+ TRACE("(%p)->(%x)\n", iface, fLock);
+ return S_OK;
+}
+
+static const IClassFactoryVtbl WshShellFactoryVtbl = {
+ ClassFactory_QueryInterface,
+ ClassFactory_AddRef,
+ ClassFactory_Release,
+ WshShellFactory_CreateInstance,
+ ClassFactory_LockServer
+};
+
+static IClassFactory WshShellFactory = { &WshShellFactoryVtbl };
+
+/******************************************************************
+ * DllMain (wshom.ocx.@)
+ */
+BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
+{
+ TRACE("(%p %d %p)\n", hInstDLL, fdwReason, lpv);
+
+ switch(fdwReason)
+ {
+ case DLL_WINE_PREATTACH:
+ return FALSE; /* prefer native version */
+ case DLL_PROCESS_ATTACH:
+ wshom_instance = hInstDLL;
+ DisableThreadLibraryCalls(wshom_instance);
+ break;
+ case DLL_PROCESS_DETACH:
+ if (lpv) break;
+ release_typelib();
+ break;
+ }
+
+ return TRUE;
+}
+
+/***********************************************************************
+ * DllGetClassObject (wshom.ocx.@)
+ */
+HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
+{
+ if(IsEqualGUID(&CLSID_WshShell, rclsid)) {
+ TRACE("(CLSID_WshShell %s %p)\n", debugstr_guid(riid), ppv);
+ return IClassFactory_QueryInterface(&WshShellFactory, riid, ppv);
+ }
+
+ FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
+ return CLASS_E_CLASSNOTAVAILABLE;
+}
+
+/***********************************************************************
+ * DllCanUnloadNow (wshom.ocx.@)
+ */
+HRESULT WINAPI DllCanUnloadNow(void)
+{
+ return S_FALSE;
+}
+
+/***********************************************************************
+ * DllRegisterServer (wshom.ocx.@)
+ */
+HRESULT WINAPI DllRegisterServer(void)
+{
+ TRACE("()\n");
+ return __wine_register_resources(wshom_instance);
+}
+
+/***********************************************************************
+ * DllUnregisterServer (wshom.ocx.@)
+ */
+HRESULT WINAPI DllUnregisterServer(void)
+{
+ TRACE("()\n");
+ return __wine_unregister_resources(wshom_instance);
+}
Propchange: trunk/reactos/dll/win32/wshom.ocx/wshom_main.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/wshom.ocx/wshom_private.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wshom.ocx/wshom_…
==============================================================================
--- trunk/reactos/dll/win32/wshom.ocx/wshom_private.h (added)
+++ trunk/reactos/dll/win32/wshom.ocx/wshom_private.h [iso-8859-1] Sat Nov 8 10:22:22
2014
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2011 Jacek Caban for CodeWeavers
+ *
+ * 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
+ */
+
+#ifndef _WSHOM_PRIVATE_H_
+#define _WSHOM_PRIVATE_H_
+
+#define WIN32_NO_STATUS
+#define _INC_WINDOWS
+#define COBJMACROS
+
+#include <windef.h>
+#include <winbase.h>
+#include <wshom.h>
+
+#include <wine/debug.h>
+WINE_DEFAULT_DEBUG_CHANNEL(wshom);
+
+/* typelibs */
+typedef enum tid_t {
+ NULL_tid,
+ IWshCollection_tid,
+ IWshEnvironment_tid,
+ IWshShell3_tid,
+ IWshShortcut_tid,
+ LAST_tid
+} tid_t;
+
+HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo) DECLSPEC_HIDDEN;
+
+HRESULT WINAPI WshShellFactory_CreateInstance(IClassFactory*,IUnknown*,REFIID,void**)
DECLSPEC_HIDDEN;
+
+#endif /* _WSHOM_PRIVATE_H_ */
Propchange: trunk/reactos/dll/win32/wshom.ocx/wshom_private.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/media/doc/README.WINE
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
==============================================================================
--- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original)
+++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Sat Nov 8 10:22:22 2014
@@ -221,6 +221,7 @@
reactos/dll/win32/wintrust # Synced to Wine-1.7.27
reactos/dll/win32/wldap32 # Synced to Wine-1.7.27
reactos/dll/win32/wmi # Synced to Wine-1.7.27
+reactos/dll/win32/wshom.ocx # Synced to Wine-1.7.27
reactos/dll/win32/wtsapi32 # Synced to Wine-1.7.27
reactos/dll/win32/wuapi # Synced to Wine-1.7.27
reactos/dll/win32/xinput1_1 # Synced to Wine-1.7.27
Modified: trunk/reactos/media/inf/syssetup.inf
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/inf/syssetup.inf?rev…
==============================================================================
--- trunk/reactos/media/inf/syssetup.inf [iso-8859-1] (original)
+++ trunk/reactos/media/inf/syssetup.inf [iso-8859-1] Sat Nov 8 10:22:22 2014
@@ -101,6 +101,7 @@
11,,winhttp.dll,1
11,,wininet.dll,2
11,,wintrust.dll,1
+11,,wshom.ocx,1
11,,wuapi.dll,1
11,wbem,wbemdisp.dll,1
11,wbem,wbemprox.dll,1