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 #include "wbemprox_private.h"
23 static HRESULT
get_owner( VARIANT
*user
, VARIANT
*domain
, VARIANT
*retval
)
29 GetUserNameW( NULL
, &len
);
30 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER
) goto done
;
31 if (!(V_BSTR( user
) = SysAllocStringLen( NULL
, len
- 1 ))) goto done
;
32 if (!GetUserNameW( V_BSTR( user
), &len
)) goto done
;
33 V_VT( user
) = VT_BSTR
;
36 GetComputerNameW( NULL
, &len
);
37 if (GetLastError() != ERROR_BUFFER_OVERFLOW
) goto done
;
38 if (!(V_BSTR( domain
) = SysAllocStringLen( NULL
, len
- 1 ))) goto done
;
39 if (!GetComputerNameW( V_BSTR( domain
), &len
)) goto done
;
40 V_VT( domain
) = VT_BSTR
;
48 VariantClear( domain
);
50 set_variant( VT_UI4
, error
, NULL
, retval
);
54 HRESULT
process_get_owner( IWbemClassObject
*obj
, IWbemClassObject
*in
, IWbemClassObject
**out
)
56 VARIANT user
, domain
, retval
;
57 IWbemClassObject
*sig
, *out_params
= NULL
;
60 TRACE("%p, %p, %p\n", obj
, in
, out
);
62 hr
= create_signature( class_processW
, method_getownerW
, PARAM_OUT
, &sig
);
63 if (hr
!= S_OK
) return hr
;
67 hr
= IWbemClassObject_SpawnInstance( sig
, 0, &out_params
);
70 IWbemClassObject_Release( sig
);
75 VariantInit( &domain
);
76 hr
= get_owner( &user
, &domain
, &retval
);
77 if (hr
!= S_OK
) goto done
;
80 if (!V_UI4( &retval
))
82 hr
= IWbemClassObject_Put( out_params
, param_userW
, 0, &user
, CIM_STRING
);
83 if (hr
!= S_OK
) goto done
;
84 hr
= IWbemClassObject_Put( out_params
, param_domainW
, 0, &domain
, CIM_STRING
);
85 if (hr
!= S_OK
) goto done
;
87 hr
= IWbemClassObject_Put( out_params
, param_returnvalueW
, 0, &retval
, CIM_UINT32
);
91 VariantClear( &user
);
92 VariantClear( &domain
);
93 IWbemClassObject_Release( sig
);
94 if (hr
== S_OK
&& out
)
97 IWbemClassObject_AddRef( out_params
);
99 if (out_params
) IWbemClassObject_Release( out_params
);