ntoskrnl.exe: Add a stub for KeQueryGroupAffinity.
[wine.git] / dlls / wshom.ocx / network.c
blob1f7996d29520ba04ab01e923f0675c3ab835176a
1 /*
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
19 #define COBJMACROS
21 #include "dispex.h"
22 #include "wshom_private.h"
23 #include "wshom.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)) {
39 *ppv = iface;
40 IUnknown_AddRef((IUnknown*)*ppv);
41 return S_OK;
43 else {
44 WARN("interface not supported %s\n", debugstr_guid(riid));
45 *ppv = NULL;
46 return E_NOINTERFACE;
50 static ULONG WINAPI WshNetwork2_AddRef(IWshNetwork2 *iface)
52 TRACE("()\n");
53 return 2;
56 static ULONG WINAPI WshNetwork2_Release(IWshNetwork2 *iface)
58 TRACE("()\n");
59 return 2;
62 static HRESULT WINAPI WshNetwork2_GetTypeInfoCount(IWshNetwork2 *iface, UINT *pctinfo)
64 TRACE("(%p)\n", pctinfo);
66 *pctinfo = 1;
67 return S_OK;
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)
80 ITypeInfo *typeinfo;
81 HRESULT hr;
83 TRACE("%p, %s, %p, %u, %lx, %p.\n", iface, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
85 hr = get_typeinfo(IWshNetwork2_tid, &typeinfo);
86 if(SUCCEEDED(hr))
88 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
89 ITypeInfo_Release(typeinfo);
92 return hr;
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)
98 ITypeInfo *typeinfo;
99 HRESULT hr;
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);
105 if(SUCCEEDED(hr))
107 hr = ITypeInfo_Invoke(typeinfo, &WshNetwork2, dispIdMember, wFlags,
108 pDispParams, pVarResult, pExcepInfo, puArgErr);
109 ITypeInfo_Release(typeinfo);
112 return hr;
115 static HRESULT WINAPI WshNetwork2_get_UserDomain(IWshNetwork2 *iface, BSTR *user_domain)
117 TRACE("%p, %p.\n", iface, user_domain);
119 if (!user_domain)
120 return E_POINTER;
122 return get_env_var(L"USERDOMAIN", user_domain);
125 static HRESULT WINAPI WshNetwork2_get_UserName(IWshNetwork2 *iface, BSTR *user_name)
127 BOOL ret;
128 DWORD len = 0;
130 TRACE("%p, %p.\n", iface, user_name);
132 if (!user_name)
133 return E_POINTER;
135 GetUserNameW(NULL, &len);
136 *user_name = SysAllocStringLen(NULL, len-1);
137 if (!*user_name)
138 return E_OUTOFMEMORY;
140 ret = GetUserNameW(*user_name, &len);
141 if (!ret) {
142 HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
143 SysFreeString(*user_name);
144 *user_name = NULL;
145 return hr;
148 return S_OK;
151 static HRESULT WINAPI WshNetwork2_get_UserProfile(IWshNetwork2 *iface, BSTR *user_profile)
153 FIXME("%p stub\n", user_profile);
155 return E_NOTIMPL;
158 static HRESULT WINAPI WshNetwork2_get_ComputerName(IWshNetwork2 *iface, BSTR *name)
160 HRESULT hr = S_OK;
161 DWORD len = 0;
162 BOOL ret;
164 TRACE("%p, %p.\n", iface, name);
166 if (!name)
167 return E_POINTER;
169 GetComputerNameW(NULL, &len);
170 *name = SysAllocStringLen(NULL, len - 1);
171 if (!*name)
172 return E_OUTOFMEMORY;
174 ret = GetComputerNameW(*name, &len);
175 if (!ret)
177 hr = HRESULT_FROM_WIN32(GetLastError());
178 SysFreeString(*name);
179 *name = NULL;
180 return hr;
183 return S_OK;
186 static HRESULT WINAPI WshNetwork2_get_Organization(IWshNetwork2 *iface, BSTR *name)
188 FIXME("%p stub\n", name);
190 return E_NOTIMPL;
193 static HRESULT WINAPI WshNetwork2_get_Site(IWshNetwork2 *iface, BSTR *name)
195 FIXME("%p stub\n", name);
197 return E_NOTIMPL;
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);
206 return E_NOTIMPL;
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));
213 return E_NOTIMPL;
216 static HRESULT WINAPI WshNetwork2_EnumNetworkDrives(IWshNetwork2 *iface, IWshCollection **ret)
218 FIXME("%p stub\n", ret);
220 return E_NOTIMPL;
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);
229 return E_NOTIMPL;
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));
236 return E_NOTIMPL;
239 static HRESULT WINAPI WshNetwork2_EnumPrinterConnections(IWshNetwork2 *iface, IWshCollection **ret)
241 FIXME("%p stub\n", ret);
243 return E_NOTIMPL;
246 static HRESULT WINAPI WshNetwork2_SetDefaultPrinter(IWshNetwork2 *iface, BSTR name)
248 FIXME("%s stub\n", debugstr_w(name));
250 return E_NOTIMPL;
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));
258 return E_NOTIMPL;
261 static const IWshNetwork2Vtbl WshNetwork2Vtbl = {
262 WshNetwork2_QueryInterface,
263 WshNetwork2_AddRef,
264 WshNetwork2_Release,
265 WshNetwork2_GetTypeInfoCount,
266 WshNetwork2_GetTypeInfo,
267 WshNetwork2_GetIDsOfNames,
268 WshNetwork2_Invoke,
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);