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
;
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
);