explorerframe: Avoid signed-unsigned integer comparisons.
[wine] / dlls / wbemprox / process.c
1 /*
2  * Win32_Process methods implementation
3  *
4  * Copyright 2013 Hans Leidekker for CodeWeavers
5  *
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.
10  *
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.
15  *
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
19  */
20
21 #define COBJMACROS
22
23 #include "config.h"
24 #include <stdarg.h>
25
26 #include "windef.h"
27 #include "winbase.h"
28 #include "wbemcli.h"
29
30 #include "wine/debug.h"
31 #include "wbemprox_private.h"
32
33 WINE_DEFAULT_DEBUG_CHANNEL(wbemprox);
34
35 static HRESULT get_owner( VARIANT *user, VARIANT *domain, VARIANT *retval )
36 {
37     DWORD len;
38     UINT error = 8;
39
40     len = 0;
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;
46
47     len = 0;
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;
53
54     error = 0;
55
56 done:
57     if (error)
58     {
59         VariantClear( user );
60         VariantClear( domain );
61     }
62     set_variant( VT_UI4, error, NULL, retval );
63     return S_OK;
64 }
65
66 HRESULT process_get_owner( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
67 {
68     VARIANT user, domain, retval;
69     IWbemClassObject *sig;
70     HRESULT hr;
71
72     TRACE("%p, %p, %p\n", obj, in, out);
73
74     hr = create_signature( class_processW, method_getownerW, PARAM_OUT, &sig );
75     if (hr != S_OK) return hr;
76
77     hr = IWbemClassObject_SpawnInstance( sig, 0, out );
78     if (hr != S_OK)
79     {
80         IWbemClassObject_Release( sig );
81         return hr;
82     }
83     VariantInit( &user );
84     VariantInit( &domain );
85     hr = get_owner( &user, &domain, &retval );
86     if (hr != S_OK) goto done;
87     if (!V_UI4( &retval ))
88     {
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;
93     }
94     hr = IWbemClassObject_Put( *out, param_returnvalueW, 0, &retval, CIM_UINT32 );
95
96 done:
97     VariantClear( &user );
98     VariantClear( &domain );
99     IWbemClassObject_Release( sig );
100     if (hr != S_OK) IWbemClassObject_Release( *out );
101     return hr;
102 }