ReactOS 0.4.17-dev-923-g4c9a150
network.c
Go to the documentation of this file.
1/*
2 * Copyright 2022 Robert Wilhelm
3 *
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.
8 *
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.
13 *
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
17 */
18
19#define COBJMACROS
20
21#include "dispex.h"
22#include "wshom_private.h"
23#include "wshom.h"
24
25#include "wine/debug.h"
26
28
29static IWshNetwork2 WshNetwork2;
30
31static HRESULT WINAPI WshNetwork2_QueryInterface(IWshNetwork2 *iface, REFIID riid, void **ppv)
32{
33 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), ppv);
34
37 IsEqualGUID(riid, &IID_IWshNetwork) ||
38 IsEqualGUID(riid, &IID_IWshNetwork2)) {
39 *ppv = iface;
40 IUnknown_AddRef((IUnknown*)*ppv);
41 return S_OK;
42 }
43 else {
44 WARN("interface not supported %s\n", debugstr_guid(riid));
45 *ppv = NULL;
46 return E_NOINTERFACE;
47 }
48}
49
50static ULONG WINAPI WshNetwork2_AddRef(IWshNetwork2 *iface)
51{
52 TRACE("()\n");
53 return 2;
54}
55
56static ULONG WINAPI WshNetwork2_Release(IWshNetwork2 *iface)
57{
58 TRACE("()\n");
59 return 2;
60}
61
62static HRESULT WINAPI WshNetwork2_GetTypeInfoCount(IWshNetwork2 *iface, UINT *pctinfo)
63{
64 TRACE("(%p)\n", pctinfo);
65
66 *pctinfo = 1;
67 return S_OK;
68}
69
70static HRESULT WINAPI WshNetwork2_GetTypeInfo(IWshNetwork2 *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
71{
72 TRACE("%p, %u, %lx, %p.\n", iface, iTInfo, lcid, ppTInfo);
73
74 return get_typeinfo(IWshNetwork2_tid, ppTInfo);
75}
76
77static HRESULT WINAPI WshNetwork2_GetIDsOfNames(IWshNetwork2 *iface, REFIID riid, LPOLESTR *rgszNames,
78 UINT cNames, LCID lcid, DISPID *rgDispId)
79{
81 HRESULT hr;
82
83 TRACE("%p, %s, %p, %u, %lx, %p.\n", iface, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
84
86 if(SUCCEEDED(hr))
87 {
88 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
89 ITypeInfo_Release(typeinfo);
90 }
91
92 return hr;
93}
94
95static HRESULT WINAPI WshNetwork2_Invoke(IWshNetwork2 *iface, DISPID dispIdMember, REFIID riid, LCID lcid,
96 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
97{
99 HRESULT hr;
100
101 TRACE("%p, %ld, %s, %lx, %d, %p, %p, %p, %p.\n", iface, dispIdMember, debugstr_guid(riid),
102 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
103
105 if(SUCCEEDED(hr))
106 {
107 hr = ITypeInfo_Invoke(typeinfo, &WshNetwork2, dispIdMember, wFlags,
108 pDispParams, pVarResult, pExcepInfo, puArgErr);
109 ITypeInfo_Release(typeinfo);
110 }
111
112 return hr;
113}
114
115static HRESULT WINAPI WshNetwork2_get_UserDomain(IWshNetwork2 *iface, BSTR *user_domain)
116{
117 TRACE("%p, %p.\n", iface, user_domain);
118
119 if (!user_domain)
120 return E_POINTER;
121
122 return get_env_var(L"USERDOMAIN", user_domain);
123}
124
126{
127 BOOL ret;
128 DWORD len = 0;
129
130 TRACE("%p, %p.\n", iface, user_name);
131
132 if (!user_name)
133 return E_POINTER;
134
137 if (!*user_name)
138 return E_OUTOFMEMORY;
139
141 if (!ret) {
144 *user_name = NULL;
145 return hr;
146 }
147
148 return S_OK;
149}
150
151static HRESULT WINAPI WshNetwork2_get_UserProfile(IWshNetwork2 *iface, BSTR *user_profile)
152{
153 FIXME("%p stub\n", user_profile);
154
155 return E_NOTIMPL;
156}
157
159{
160 HRESULT hr = S_OK;
161 DWORD len = 0;
162 BOOL ret;
163
164 TRACE("%p, %p.\n", iface, name);
165
166 if (!name)
167 return E_POINTER;
168
171 if (!*name)
172 return E_OUTOFMEMORY;
173
175 if (!ret)
176 {
179 *name = NULL;
180 return hr;
181 }
182
183 return S_OK;
184}
185
187{
188 FIXME("%p stub\n", name);
189
190 return E_NOTIMPL;
191}
192
193static HRESULT WINAPI WshNetwork2_get_Site(IWshNetwork2 *iface, BSTR *name)
194{
195 FIXME("%p stub\n", name);
196
197 return E_NOTIMPL;
198}
199
200static HRESULT WINAPI WshNetwork2_MapNetworkDrive(IWshNetwork2 *iface, BSTR local_name, BSTR remote_name,
201 VARIANT *update_profile, VARIANT *user_name, VARIANT *password)
202{
203 FIXME("%s, %s, %s, %p, %p stub\n", debugstr_w(local_name), debugstr_w(remote_name), debugstr_variant(update_profile),
205
206 return E_NOTIMPL;
207}
208
209static HRESULT WINAPI WshNetwork2_RemoveNetworkDrive(IWshNetwork2 *iface, BSTR name, VARIANT *force, VARIANT *update_profile)
210{
211 FIXME("%s, %s, %s stub\n", debugstr_w(name), debugstr_variant(force), debugstr_variant(update_profile));
212
213 return E_NOTIMPL;
214}
215
216static HRESULT WINAPI WshNetwork2_EnumNetworkDrives(IWshNetwork2 *iface, IWshCollection **ret)
217{
218 FIXME("%p stub\n", ret);
219
220 return E_NOTIMPL;
221}
222
223static HRESULT WINAPI WshNetwork2_AddPrinterConnection(IWshNetwork2 *iface, BSTR local_name, BSTR remote_name,
224 VARIANT *update_profile, VARIANT *user_name, VARIANT *password)
225{
226 FIXME("%s, %s, %s, %p, %p stub\n", debugstr_w(local_name), debugstr_w(remote_name), debugstr_variant(update_profile),
228
229 return E_NOTIMPL;
230}
231
232static HRESULT WINAPI WshNetwork2_RemovePrinterConnection(IWshNetwork2 *iface, BSTR name, VARIANT *force, VARIANT *update_profile)
233{
234 FIXME("%s, %s, %s stub\n", debugstr_w(name), debugstr_variant(force), debugstr_variant(update_profile));
235
236 return E_NOTIMPL;
237}
238
239static HRESULT WINAPI WshNetwork2_EnumPrinterConnections(IWshNetwork2 *iface, IWshCollection **ret)
240{
241 FIXME("%p stub\n", ret);
242
243 return E_NOTIMPL;
244}
245
247{
248 FIXME("%s stub\n", debugstr_w(name));
249
250 return E_NOTIMPL;
251}
252
253static HRESULT WINAPI WshNetwork2_AddWindowsPrinterConnection(IWshNetwork2 *iface, BSTR printer_name,
254 BSTR driver_name, BSTR port)
255{
256 FIXME("%s, %s, %s stub\n", debugstr_w(printer_name), debugstr_w(driver_name), debugstr_w(port));
257
258 return E_NOTIMPL;
259}
260
261static const IWshNetwork2Vtbl WshNetwork2Vtbl = {
283};
284
285static IWshNetwork2 WshNetwork2 = { &WshNetwork2Vtbl };
286
288{
289 TRACE("%p, %s, %p.\n", outer, debugstr_guid(riid), ppv);
290
291 return IWshNetwork2_QueryInterface(&WshNetwork2, riid, ppv);
292}
HRESULT get_typeinfo(enum type_id tid, ITypeInfo **ret)
Definition: apps.c:125
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
static UCHAR password[]
Definition: bcrypt.c:520
const GUID IID_IUnknown
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
Definition: compname.c:446
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
BOOL WINAPI GetUserNameW(LPWSTR lpszName, LPDWORD lpSize)
Definition: misc.c:291
OLECHAR * BSTR
Definition: compat.h:2293
LCID lcid
Definition: locale.c:5660
BOOL force
Definition: metahost.c:100
USHORT port
Definition: uri.c:210
static HRESULT WINAPI WshNetwork2_GetIDsOfNames(IWshNetwork2 *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: network.c:77
static const IWshNetwork2Vtbl WshNetwork2Vtbl
Definition: network.c:261
static HRESULT WINAPI WshNetwork2_get_ComputerName(IWshNetwork2 *iface, BSTR *name)
Definition: network.c:158
static HRESULT WINAPI WshNetwork2_get_UserDomain(IWshNetwork2 *iface, BSTR *user_domain)
Definition: network.c:115
static HRESULT WINAPI WshNetwork2_RemoveNetworkDrive(IWshNetwork2 *iface, BSTR name, VARIANT *force, VARIANT *update_profile)
Definition: network.c:209
static HRESULT WINAPI WshNetwork2_SetDefaultPrinter(IWshNetwork2 *iface, BSTR name)
Definition: network.c:246
HRESULT WINAPI WshNetworkFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: network.c:287
static HRESULT WINAPI WshNetwork2_Invoke(IWshNetwork2 *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: network.c:95
static HRESULT WINAPI WshNetwork2_GetTypeInfoCount(IWshNetwork2 *iface, UINT *pctinfo)
Definition: network.c:62
static IWshNetwork2 WshNetwork2
Definition: network.c:29
static HRESULT WINAPI WshNetwork2_MapNetworkDrive(IWshNetwork2 *iface, BSTR local_name, BSTR remote_name, VARIANT *update_profile, VARIANT *user_name, VARIANT *password)
Definition: network.c:200
static HRESULT WINAPI WshNetwork2_QueryInterface(IWshNetwork2 *iface, REFIID riid, void **ppv)
Definition: network.c:31
static HRESULT WINAPI WshNetwork2_get_UserName(IWshNetwork2 *iface, BSTR *user_name)
Definition: network.c:125
static HRESULT WINAPI WshNetwork2_get_UserProfile(IWshNetwork2 *iface, BSTR *user_profile)
Definition: network.c:151
static HRESULT WINAPI WshNetwork2_EnumPrinterConnections(IWshNetwork2 *iface, IWshCollection **ret)
Definition: network.c:239
static HRESULT WINAPI WshNetwork2_get_Organization(IWshNetwork2 *iface, BSTR *name)
Definition: network.c:186
static ULONG WINAPI WshNetwork2_Release(IWshNetwork2 *iface)
Definition: network.c:56
static HRESULT WINAPI WshNetwork2_GetTypeInfo(IWshNetwork2 *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: network.c:70
static HRESULT WINAPI WshNetwork2_AddPrinterConnection(IWshNetwork2 *iface, BSTR local_name, BSTR remote_name, VARIANT *update_profile, VARIANT *user_name, VARIANT *password)
Definition: network.c:223
static HRESULT WINAPI WshNetwork2_get_Site(IWshNetwork2 *iface, BSTR *name)
Definition: network.c:193
static HRESULT WINAPI WshNetwork2_AddWindowsPrinterConnection(IWshNetwork2 *iface, BSTR printer_name, BSTR driver_name, BSTR port)
Definition: network.c:253
static HRESULT WINAPI WshNetwork2_EnumNetworkDrives(IWshNetwork2 *iface, IWshCollection **ret)
Definition: network.c:216
static ULONG WINAPI WshNetwork2_AddRef(IWshNetwork2 *iface)
Definition: network.c:50
static HRESULT WINAPI WshNetwork2_RemovePrinterConnection(IWshNetwork2 *iface, BSTR name, VARIANT *force, VARIANT *update_profile)
Definition: network.c:232
HRESULT get_env_var(const WCHAR *name, BSTR *value)
Definition: shell.c:546
static const char * debugstr_variant(const VARIANT *var)
Definition: dom.c:505
return ret
Definition: mutex.c:147
#define L(x)
Definition: resources.c:13
static BSTR local_name(call_frame_t *frame, int ref)
Definition: engine.c:164
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei len
Definition: glext.h:6722
unsigned int UINT
Definition: sysinfo.c:13
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
static WCHAR user_name[UNLEN+1]
Definition: access.c:32
static IUnknown * outer
Definition: compobj.c:82
static VARIANTARG static DISPID
Definition: ordinal.c:49
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:273
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:341
const GUID IID_IDispatch
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
DWORD LCID
Definition: nls.h:13
#define TRACE(s)
Definition: solgame.cpp:4
Definition: name.c:39
uint32_t ULONG
Definition: typedefs.h:59
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337
#define WINAPI
Definition: msvc.h:6
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_POINTER
Definition: winerror.h:3480
@ IWshNetwork2_tid
Definition: wshom_private.h:38