2 * Copyright 2022 Robert Wilhelm
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include "wshom_private.h"
25 #include "wine/debug.h"
27 WINE_DEFAULT_DEBUG_CHANNEL(wshom
);
29 static IWshNetwork2 WshNetwork2
;
31 static HRESULT WINAPI
WshNetwork2_QueryInterface(IWshNetwork2
*iface
, REFIID riid
, void **ppv
)
33 TRACE("%p, %s, %p.\n", iface
, debugstr_guid(riid
), ppv
);
35 if(IsEqualGUID(riid
, &IID_IUnknown
) ||
36 IsEqualGUID(riid
, &IID_IDispatch
) ||
37 IsEqualGUID(riid
, &IID_IWshNetwork
) ||
38 IsEqualGUID(riid
, &IID_IWshNetwork2
)) {
40 IUnknown_AddRef((IUnknown
*)*ppv
);
44 WARN("interface not supported %s\n", debugstr_guid(riid
));
50 static ULONG WINAPI
WshNetwork2_AddRef(IWshNetwork2
*iface
)
56 static ULONG WINAPI
WshNetwork2_Release(IWshNetwork2
*iface
)
62 static HRESULT WINAPI
WshNetwork2_GetTypeInfoCount(IWshNetwork2
*iface
, UINT
*pctinfo
)
64 TRACE("(%p)\n", pctinfo
);
70 static HRESULT WINAPI
WshNetwork2_GetTypeInfo(IWshNetwork2
*iface
, UINT iTInfo
, LCID lcid
, ITypeInfo
**ppTInfo
)
72 TRACE("%p, %u, %lx, %p.\n", iface
, iTInfo
, lcid
, ppTInfo
);
74 return get_typeinfo(IWshNetwork2_tid
, ppTInfo
);
77 static HRESULT WINAPI
WshNetwork2_GetIDsOfNames(IWshNetwork2
*iface
, REFIID riid
, LPOLESTR
*rgszNames
,
78 UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
83 TRACE("%p, %s, %p, %u, %lx, %p.\n", iface
, debugstr_guid(riid
), rgszNames
, cNames
, lcid
, rgDispId
);
85 hr
= get_typeinfo(IWshNetwork2_tid
, &typeinfo
);
88 hr
= ITypeInfo_GetIDsOfNames(typeinfo
, rgszNames
, cNames
, rgDispId
);
89 ITypeInfo_Release(typeinfo
);
95 static HRESULT WINAPI
WshNetwork2_Invoke(IWshNetwork2
*iface
, DISPID dispIdMember
, REFIID riid
, LCID lcid
,
96 WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
101 TRACE("%p, %ld, %s, %lx, %d, %p, %p, %p, %p.\n", iface
, dispIdMember
, debugstr_guid(riid
),
102 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
104 hr
= get_typeinfo(IWshNetwork2_tid
, &typeinfo
);
107 hr
= ITypeInfo_Invoke(typeinfo
, &WshNetwork2
, dispIdMember
, wFlags
,
108 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
109 ITypeInfo_Release(typeinfo
);
115 static HRESULT WINAPI
WshNetwork2_get_UserDomain(IWshNetwork2
*iface
, BSTR
*user_domain
)
117 TRACE("%p, %p.\n", iface
, user_domain
);
122 return get_env_var(L
"USERDOMAIN", user_domain
);
125 static HRESULT WINAPI
WshNetwork2_get_UserName(IWshNetwork2
*iface
, BSTR
*user_name
)
130 TRACE("%p, %p.\n", iface
, user_name
);
135 GetUserNameW(NULL
, &len
);
136 *user_name
= SysAllocStringLen(NULL
, len
-1);
138 return E_OUTOFMEMORY
;
140 ret
= GetUserNameW(*user_name
, &len
);
142 HRESULT hr
= HRESULT_FROM_WIN32(GetLastError());
143 SysFreeString(*user_name
);
151 static HRESULT WINAPI
WshNetwork2_get_UserProfile(IWshNetwork2
*iface
, BSTR
*user_profile
)
153 FIXME("%p stub\n", user_profile
);
158 static HRESULT WINAPI
WshNetwork2_get_ComputerName(IWshNetwork2
*iface
, BSTR
*name
)
164 TRACE("%p, %p.\n", iface
, name
);
169 GetComputerNameW(NULL
, &len
);
170 *name
= SysAllocStringLen(NULL
, len
- 1);
172 return E_OUTOFMEMORY
;
174 ret
= GetComputerNameW(*name
, &len
);
177 hr
= HRESULT_FROM_WIN32(GetLastError());
178 SysFreeString(*name
);
186 static HRESULT WINAPI
WshNetwork2_get_Organization(IWshNetwork2
*iface
, BSTR
*name
)
188 FIXME("%p stub\n", name
);
193 static HRESULT WINAPI
WshNetwork2_get_Site(IWshNetwork2
*iface
, BSTR
*name
)
195 FIXME("%p stub\n", name
);
200 static HRESULT WINAPI
WshNetwork2_MapNetworkDrive(IWshNetwork2
*iface
, BSTR local_name
, BSTR remote_name
,
201 VARIANT
*update_profile
, VARIANT
*user_name
, VARIANT
*password
)
203 FIXME("%s, %s, %s, %p, %p stub\n", debugstr_w(local_name
), debugstr_w(remote_name
), debugstr_variant(update_profile
),
204 user_name
, password
);
209 static HRESULT WINAPI
WshNetwork2_RemoveNetworkDrive(IWshNetwork2
*iface
, BSTR name
, VARIANT
*force
, VARIANT
*update_profile
)
211 FIXME("%s, %s, %s stub\n", debugstr_w(name
), debugstr_variant(force
), debugstr_variant(update_profile
));
216 static HRESULT WINAPI
WshNetwork2_EnumNetworkDrives(IWshNetwork2
*iface
, IWshCollection
**ret
)
218 FIXME("%p stub\n", ret
);
223 static HRESULT WINAPI
WshNetwork2_AddPrinterConnection(IWshNetwork2
*iface
, BSTR local_name
, BSTR remote_name
,
224 VARIANT
*update_profile
, VARIANT
*user_name
, VARIANT
*password
)
226 FIXME("%s, %s, %s, %p, %p stub\n", debugstr_w(local_name
), debugstr_w(remote_name
), debugstr_variant(update_profile
),
227 user_name
, password
);
232 static HRESULT WINAPI
WshNetwork2_RemovePrinterConnection(IWshNetwork2
*iface
, BSTR name
, VARIANT
*force
, VARIANT
*update_profile
)
234 FIXME("%s, %s, %s stub\n", debugstr_w(name
), debugstr_variant(force
), debugstr_variant(update_profile
));
239 static HRESULT WINAPI
WshNetwork2_EnumPrinterConnections(IWshNetwork2
*iface
, IWshCollection
**ret
)
241 FIXME("%p stub\n", ret
);
246 static HRESULT WINAPI
WshNetwork2_SetDefaultPrinter(IWshNetwork2
*iface
, BSTR name
)
248 FIXME("%s stub\n", debugstr_w(name
));
253 static HRESULT WINAPI
WshNetwork2_AddWindowsPrinterConnection(IWshNetwork2
*iface
, BSTR printer_name
,
254 BSTR driver_name
, BSTR port
)
256 FIXME("%s, %s, %s stub\n", debugstr_w(printer_name
), debugstr_w(driver_name
), debugstr_w(port
));
261 static const IWshNetwork2Vtbl WshNetwork2Vtbl
= {
262 WshNetwork2_QueryInterface
,
265 WshNetwork2_GetTypeInfoCount
,
266 WshNetwork2_GetTypeInfo
,
267 WshNetwork2_GetIDsOfNames
,
269 WshNetwork2_get_UserDomain
,
270 WshNetwork2_get_UserName
,
271 WshNetwork2_get_UserProfile
,
272 WshNetwork2_get_ComputerName
,
273 WshNetwork2_get_Organization
,
274 WshNetwork2_get_Site
,
275 WshNetwork2_MapNetworkDrive
,
276 WshNetwork2_RemoveNetworkDrive
,
277 WshNetwork2_EnumNetworkDrives
,
278 WshNetwork2_AddPrinterConnection
,
279 WshNetwork2_RemovePrinterConnection
,
280 WshNetwork2_EnumPrinterConnections
,
281 WshNetwork2_SetDefaultPrinter
,
282 WshNetwork2_AddWindowsPrinterConnection
,
285 static IWshNetwork2 WshNetwork2
= { &WshNetwork2Vtbl
};
287 HRESULT WINAPI
WshNetworkFactory_CreateInstance(IClassFactory
*iface
, IUnknown
*outer
, REFIID riid
, void **ppv
)
289 TRACE("%p, %s, %p.\n", outer
, debugstr_guid(riid
), ppv
);
291 return IWshNetwork2_QueryInterface(&WshNetwork2
, riid
, ppv
);