HRESULT process_get_owner( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out ) { VARIANT user, domain, retval; IWbemClassObject *sig, *out_params = NULL; HRESULT hr; TRACE("%p, %p, %p\n", obj, in, out); hr = create_signature( class_processW, method_getownerW, PARAM_OUT, &sig ); if (hr != S_OK) return hr; if (out) { hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params ); if (hr != S_OK) { IWbemClassObject_Release( sig ); return hr; } } VariantInit( &user ); VariantInit( &domain ); hr = get_owner( &user, &domain, &retval ); if (hr != S_OK) goto done; if (out_params) { if (!V_UI4( &retval )) { hr = IWbemClassObject_Put( out_params, param_userW, 0, &user, CIM_STRING ); if (hr != S_OK) goto done; hr = IWbemClassObject_Put( out_params, param_domainW, 0, &domain, CIM_STRING ); if (hr != S_OK) goto done; } hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 ); } done: VariantClear( &user ); VariantClear( &domain ); IWbemClassObject_Release( sig ); if (hr == S_OK && out) { *out = out_params; IWbemClassObject_AddRef( out_params ); } if (out_params) IWbemClassObject_Release( out_params ); return hr; }
HRESULT service_pause_service( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out ) { VARIANT name, retval; IWbemClassObject *sig; HRESULT hr; TRACE("%p, %p, %p\n", obj, in, out); hr = IWbemClassObject_Get( obj, prop_nameW, 0, &name, NULL, NULL ); if (hr != S_OK) return hr; hr = create_signature( class_serviceW, method_pauseserviceW, PARAM_OUT, &sig ); if (hr != S_OK) { VariantClear( &name ); return hr; } hr = IWbemClassObject_SpawnInstance( sig, 0, out ); if (hr != S_OK) { VariantClear( &name ); IWbemClassObject_Release( sig ); return hr; } hr = control_service( V_BSTR(&name), SERVICE_CONTROL_PAUSE, &retval ); if (hr != S_OK) goto done; hr = IWbemClassObject_Put( *out, param_returnvalueW, 0, &retval, CIM_UINT32 ); done: VariantClear( &name ); IWbemClassObject_Release( sig ); if (hr != S_OK) IWbemClassObject_Release( *out ); return hr; }
HRESULT reg_get_stringvalue( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out ) { VARIANT defkey, subkey, name, value, retval; IWbemClassObject *sig; HRESULT hr; TRACE("%p, %p\n", in, out); hr = IWbemClassObject_Get( in, param_defkeyW, 0, &defkey, NULL, NULL ); if (hr != S_OK) return hr; hr = IWbemClassObject_Get( in, param_subkeynameW, 0, &subkey, NULL, NULL ); if (hr != S_OK) return hr; hr = IWbemClassObject_Get( in, param_valuenameW, 0, &name, NULL, NULL ); if (hr != S_OK) return hr; hr = create_signature( class_stdregprovW, method_getstringvalueW, PARAM_OUT, &sig ); if (hr != S_OK) { VariantClear( &name ); VariantClear( &subkey ); return hr; } hr = IWbemClassObject_SpawnInstance( sig, 0, out ); if (hr != S_OK) { VariantClear( &name ); VariantClear( &subkey ); IWbemClassObject_Release( sig ); return hr; } VariantInit( &value ); hr = get_stringvalue( (HKEY)(INT_PTR)V_I4(&defkey), V_BSTR(&subkey), V_BSTR(&name), &value, &retval ); if (hr != S_OK) goto done; if (!V_UI4( &retval )) { hr = IWbemClassObject_Put( *out, param_valueW, 0, &value, CIM_STRING ); if (hr != S_OK) goto done; } hr = IWbemClassObject_Put( *out, param_returnvalueW, 0, &retval, CIM_UINT32 ); done: VariantClear( &name ); VariantClear( &subkey ); IWbemClassObject_Release( sig ); if (hr != S_OK) IWbemClassObject_Release( *out ); return hr; }
HRESULT service_stop_service( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out ) { VARIANT name, retval; IWbemClassObject *sig, *out_params = NULL; HRESULT hr; TRACE("%p, %p, %p\n", obj, in, out); hr = IWbemClassObject_Get( obj, prop_nameW, 0, &name, NULL, NULL ); if (hr != S_OK) return hr; hr = create_signature( class_serviceW, method_stopserviceW, PARAM_OUT, &sig ); if (hr != S_OK) { VariantClear( &name ); return hr; } if (out) { hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params ); if (hr != S_OK) { VariantClear( &name ); IWbemClassObject_Release( sig ); return hr; } } hr = control_service( V_BSTR(&name), SERVICE_CONTROL_STOP, &retval ); if (hr != S_OK) goto done; if (out_params) hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 ); done: VariantClear( &name ); IWbemClassObject_Release( sig ); if (hr == S_OK && out) { *out = out_params; IWbemClassObject_AddRef( out_params ); } if (out_params) IWbemClassObject_Release( out_params ); return hr; }