libport: Remove support for PPC32.
[wine.git] / dlls / wbemprox / process.c
blob0ee81e8b523bd7d222a2c1ce4d3bf1038a60e922
1 /*
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
21 #define COBJMACROS
23 #include <stdarg.h>
25 #include "windef.h"
26 #include "winbase.h"
27 #include "wbemcli.h"
29 #include "wine/debug.h"
30 #include "wbemprox_private.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(wbemprox);
34 static HRESULT get_owner( VARIANT *user, VARIANT *domain, VARIANT *retval )
36 DWORD len;
37 UINT error = 8;
39 len = 0;
40 GetUserNameW( NULL, &len );
41 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) goto done;
42 if (!(V_BSTR( user ) = SysAllocStringLen( NULL, len - 1 ))) goto done;
43 if (!GetUserNameW( V_BSTR( user ), &len )) goto done;
44 V_VT( user ) = VT_BSTR;
46 len = 0;
47 GetComputerNameW( NULL, &len );
48 if (GetLastError() != ERROR_BUFFER_OVERFLOW) goto done;
49 if (!(V_BSTR( domain ) = SysAllocStringLen( NULL, len - 1 ))) goto done;
50 if (!GetComputerNameW( V_BSTR( domain ), &len )) goto done;
51 V_VT( domain ) = VT_BSTR;
53 error = 0;
55 done:
56 if (error)
58 VariantClear( user );
59 VariantClear( domain );
61 set_variant( VT_UI4, error, NULL, retval );
62 return S_OK;
65 HRESULT process_get_owner( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
67 VARIANT user, domain, retval;
68 IWbemClassObject *sig, *out_params = NULL;
69 HRESULT hr;
71 TRACE("%p, %p, %p\n", obj, in, out);
73 hr = create_signature( L"Win32_Process", L"GetOwner", PARAM_OUT, &sig );
74 if (hr != S_OK) return hr;
76 if (out)
78 hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
79 if (hr != S_OK)
81 IWbemClassObject_Release( sig );
82 return hr;
85 VariantInit( &user );
86 VariantInit( &domain );
87 hr = get_owner( &user, &domain, &retval );
88 if (hr != S_OK) goto done;
89 if (out_params)
91 if (!V_UI4( &retval ))
93 hr = IWbemClassObject_Put( out_params, L"User", 0, &user, CIM_STRING );
94 if (hr != S_OK) goto done;
95 hr = IWbemClassObject_Put( out_params, L"Domain", 0, &domain, CIM_STRING );
96 if (hr != S_OK) goto done;
98 hr = IWbemClassObject_Put( out_params, L"ReturnValue", 0, &retval, CIM_UINT32 );
101 done:
102 VariantClear( &user );
103 VariantClear( &domain );
104 IWbemClassObject_Release( sig );
105 if (hr == S_OK && out)
107 *out = out_params;
108 IWbemClassObject_AddRef( out_params );
110 if (out_params) IWbemClassObject_Release( out_params );
111 return hr;