2 * Win32_Process methods implementation
4 * Copyright 2013 Hans Leidekker for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
30 #include "wine/debug.h"
31 #include "wbemprox_private.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(wbemprox);
35 static HRESULT get_owner( VARIANT *user, VARIANT *domain, VARIANT *retval )
41 GetUserNameW( NULL, &len );
42 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) goto done;
43 if (!(V_BSTR( user ) = heap_alloc( len * sizeof(WCHAR) ))) goto done;
44 if (!GetUserNameW( V_BSTR( user ), &len )) goto done;
45 V_VT( user ) = VT_BSTR;
48 GetComputerNameW( NULL, &len );
49 if (GetLastError() != ERROR_BUFFER_OVERFLOW) goto done;
50 if (!(V_BSTR( domain ) = heap_alloc( len * sizeof(WCHAR) ))) goto done;
51 if (!GetComputerNameW( V_BSTR( domain ), &len )) goto done;
52 V_VT( domain ) = VT_BSTR;
60 VariantClear( domain );
62 set_variant( VT_UI4, error, NULL, retval );
66 HRESULT process_get_owner( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
68 VARIANT user, domain, retval;
69 IWbemClassObject *sig;
72 TRACE("%p, %p, %p\n", obj, in, out);
74 hr = create_signature( class_processW, method_getownerW, PARAM_OUT, &sig );
75 if (hr != S_OK) return hr;
77 hr = IWbemClassObject_SpawnInstance( sig, 0, out );
80 IWbemClassObject_Release( sig );
84 VariantInit( &domain );
85 hr = get_owner( &user, &domain, &retval );
86 if (hr != S_OK) goto done;
87 if (!V_UI4( &retval ))
89 hr = IWbemClassObject_Put( *out, param_userW, 0, &user, CIM_STRING );
90 if (hr != S_OK) goto done;
91 hr = IWbemClassObject_Put( *out, param_domainW, 0, &domain, CIM_STRING );
92 if (hr != S_OK) goto done;
94 hr = IWbemClassObject_Put( *out, param_returnvalueW, 0, &retval, CIM_UINT32 );
97 VariantClear( &user );
98 VariantClear( &domain );
99 IWbemClassObject_Release( sig );
100 if (hr != S_OK) IWbemClassObject_Release( *out );