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
) = SysAllocStringLen( NULL
, len
- 1 ))) 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
) = SysAllocStringLen( NULL
, len
- 1 ))) 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
, *out_params
= NULL
;
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
;
79 hr
= IWbemClassObject_SpawnInstance( sig
, 0, &out_params
);
82 IWbemClassObject_Release( sig
);
87 VariantInit( &domain
);
88 hr
= get_owner( &user
, &domain
, &retval
);
89 if (hr
!= S_OK
) goto done
;
92 if (!V_UI4( &retval
))
94 hr
= IWbemClassObject_Put( out_params
, param_userW
, 0, &user
, CIM_STRING
);
95 if (hr
!= S_OK
) goto done
;
96 hr
= IWbemClassObject_Put( out_params
, param_domainW
, 0, &domain
, CIM_STRING
);
97 if (hr
!= S_OK
) goto done
;
99 hr
= IWbemClassObject_Put( out_params
, param_returnvalueW
, 0, &retval
, CIM_UINT32
);
103 VariantClear( &user
);
104 VariantClear( &domain
);
105 IWbemClassObject_Release( sig
);
106 if (hr
== S_OK
&& out
)
109 IWbemClassObject_AddRef( out_params
);
111 if (out_params
) IWbemClassObject_Release( out_params
);