mirror of
https://github.com/reactos/reactos.git
synced 2024-07-06 12:45:16 +00:00
[WBEMDISP] Sync with Wine Staging 2.9. CORE-13362
a392e14 wbemdisp: Implement ISWbemProperty::get_Value. 6721725 wbemdisp: Implement ISWbemPropertySet::Item. cb2660b wbemdisp: Implement ISWbemObject::get_Properties_. a11aed3 wbemdisp: Invoke the generic methods and properties as well as the dynamic ones. 66edb81 wbemdisp: Search for the generic methods and properties as well as the dynamic ones. c1242a2 wbemdisp: Add missing methods to the ISWbemObjectVtbl. 64be3a2 wbemdisp: Simplify and standardize the heap_xxx() declarations. svn path=/trunk/; revision=74857
This commit is contained in:
parent
d8eaddca44
commit
50f8a9e9fa
|
@ -28,6 +28,8 @@ enum type_id
|
||||||
ISWbemLocator_tid,
|
ISWbemLocator_tid,
|
||||||
ISWbemObject_tid,
|
ISWbemObject_tid,
|
||||||
ISWbemObjectSet_tid,
|
ISWbemObjectSet_tid,
|
||||||
|
ISWbemProperty_tid,
|
||||||
|
ISWbemPropertySet_tid,
|
||||||
ISWbemServices_tid,
|
ISWbemServices_tid,
|
||||||
ISWbemSecurity_tid,
|
ISWbemSecurity_tid,
|
||||||
last_tid
|
last_tid
|
||||||
|
@ -41,6 +43,8 @@ static REFIID wbemdisp_tid_id[] =
|
||||||
&IID_ISWbemLocator,
|
&IID_ISWbemLocator,
|
||||||
&IID_ISWbemObject,
|
&IID_ISWbemObject,
|
||||||
&IID_ISWbemObjectSet,
|
&IID_ISWbemObjectSet,
|
||||||
|
&IID_ISWbemProperty,
|
||||||
|
&IID_ISWbemPropertySet,
|
||||||
&IID_ISWbemServices,
|
&IID_ISWbemServices,
|
||||||
&IID_ISWbemSecurity
|
&IID_ISWbemSecurity
|
||||||
};
|
};
|
||||||
|
@ -80,6 +84,393 @@ static HRESULT get_typeinfo( enum type_id tid, ITypeInfo **ret )
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct property
|
||||||
|
{
|
||||||
|
ISWbemProperty ISWbemProperty_iface;
|
||||||
|
LONG refs;
|
||||||
|
IWbemClassObject *object;
|
||||||
|
BSTR name;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct property *impl_from_ISWbemProperty( ISWbemProperty *iface )
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD( iface, struct property, ISWbemProperty_iface );
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI property_AddRef( ISWbemProperty *iface )
|
||||||
|
{
|
||||||
|
struct property *property = impl_from_ISWbemProperty( iface );
|
||||||
|
return InterlockedIncrement( &property->refs );
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI property_Release( ISWbemProperty *iface )
|
||||||
|
{
|
||||||
|
struct property *property = impl_from_ISWbemProperty( iface );
|
||||||
|
LONG refs = InterlockedDecrement( &property->refs );
|
||||||
|
if (!refs)
|
||||||
|
{
|
||||||
|
TRACE( "destroying %p\n", property );
|
||||||
|
IWbemClassObject_Release( property->object );
|
||||||
|
SysFreeString( property->name );
|
||||||
|
heap_free( property );
|
||||||
|
}
|
||||||
|
return refs;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_QueryInterface( ISWbemProperty *iface, REFIID riid, void **obj )
|
||||||
|
{
|
||||||
|
struct property *property = impl_from_ISWbemProperty( iface );
|
||||||
|
|
||||||
|
TRACE( "%p %s %p\n", property, debugstr_guid(riid), obj );
|
||||||
|
|
||||||
|
if (IsEqualGUID( riid, &IID_ISWbemProperty ) ||
|
||||||
|
IsEqualGUID( riid, &IID_IDispatch ) ||
|
||||||
|
IsEqualGUID( riid, &IID_IUnknown ))
|
||||||
|
{
|
||||||
|
*obj = iface;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
ISWbemProperty_AddRef( iface );
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_GetTypeInfoCount( ISWbemProperty *iface, UINT *count )
|
||||||
|
{
|
||||||
|
struct property *property = impl_from_ISWbemProperty( iface );
|
||||||
|
TRACE( "%p, %p\n", property, count );
|
||||||
|
*count = 1;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_GetTypeInfo( ISWbemProperty *iface, UINT index,
|
||||||
|
LCID lcid, ITypeInfo **info )
|
||||||
|
{
|
||||||
|
struct property *property = impl_from_ISWbemProperty( iface );
|
||||||
|
TRACE( "%p, %u, %u, %p\n", property, index, lcid, info );
|
||||||
|
|
||||||
|
return get_typeinfo( ISWbemProperty_tid, info );
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_GetIDsOfNames( ISWbemProperty *iface, REFIID riid, LPOLESTR *names,
|
||||||
|
UINT count, LCID lcid, DISPID *dispid )
|
||||||
|
{
|
||||||
|
struct property *property = impl_from_ISWbemProperty( iface );
|
||||||
|
ITypeInfo *typeinfo;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
TRACE( "%p, %s, %p, %u, %u, %p\n", property, debugstr_guid(riid), names, count, lcid, dispid );
|
||||||
|
|
||||||
|
if (!names || !count || !dispid) return E_INVALIDARG;
|
||||||
|
|
||||||
|
hr = get_typeinfo( ISWbemProperty_tid, &typeinfo );
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
hr = ITypeInfo_GetIDsOfNames( typeinfo, names, count, dispid );
|
||||||
|
ITypeInfo_Release( typeinfo );
|
||||||
|
}
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_Invoke( ISWbemProperty *iface, DISPID member, REFIID riid,
|
||||||
|
LCID lcid, WORD flags, DISPPARAMS *params,
|
||||||
|
VARIANT *result, EXCEPINFO *excep_info, UINT *arg_err )
|
||||||
|
{
|
||||||
|
struct property *property = impl_from_ISWbemProperty( iface );
|
||||||
|
ITypeInfo *typeinfo;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
TRACE( "%p, %d, %s, %d, %d, %p, %p, %p, %p\n", property, member, debugstr_guid(riid),
|
||||||
|
lcid, flags, params, result, excep_info, arg_err );
|
||||||
|
|
||||||
|
hr = get_typeinfo( ISWbemProperty_tid, &typeinfo );
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
hr = ITypeInfo_Invoke( typeinfo, &property->ISWbemProperty_iface, member, flags,
|
||||||
|
params, result, excep_info, arg_err );
|
||||||
|
ITypeInfo_Release( typeinfo );
|
||||||
|
}
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_get_Value( ISWbemProperty *iface, VARIANT *value )
|
||||||
|
{
|
||||||
|
struct property *property = impl_from_ISWbemProperty( iface );
|
||||||
|
|
||||||
|
TRACE( "%p %p\n", property, value );
|
||||||
|
|
||||||
|
return IWbemClassObject_Get( property->object, property->name, 0, value, NULL, NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_put_Value( ISWbemProperty *iface, VARIANT *varValue )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_get_Name( ISWbemProperty *iface, BSTR *strName )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_get_IsLocal( ISWbemProperty *iface, VARIANT_BOOL *bIsLocal )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_get_Origin( ISWbemProperty *iface, BSTR *strOrigin )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_get_CIMType( ISWbemProperty *iface, WbemCimtypeEnum *iCimType )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_get_Qualifiers_( ISWbemProperty *iface, ISWbemQualifierSet **objWbemQualifierSet )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI property_get_IsArray( ISWbemProperty *iface, VARIANT_BOOL *bIsArray )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const ISWbemPropertyVtbl property_vtbl =
|
||||||
|
{
|
||||||
|
property_QueryInterface,
|
||||||
|
property_AddRef,
|
||||||
|
property_Release,
|
||||||
|
property_GetTypeInfoCount,
|
||||||
|
property_GetTypeInfo,
|
||||||
|
property_GetIDsOfNames,
|
||||||
|
property_Invoke,
|
||||||
|
property_get_Value,
|
||||||
|
property_put_Value,
|
||||||
|
property_get_Name,
|
||||||
|
property_get_IsLocal,
|
||||||
|
property_get_Origin,
|
||||||
|
property_get_CIMType,
|
||||||
|
property_get_Qualifiers_,
|
||||||
|
property_get_IsArray
|
||||||
|
};
|
||||||
|
|
||||||
|
static HRESULT SWbemProperty_create( IWbemClassObject *wbem_object, BSTR name, ISWbemProperty **obj )
|
||||||
|
{
|
||||||
|
struct property *property;
|
||||||
|
|
||||||
|
TRACE( "%p, %p\n", obj, wbem_object );
|
||||||
|
|
||||||
|
if (!(property = heap_alloc( sizeof(*property) ))) return E_OUTOFMEMORY;
|
||||||
|
property->ISWbemProperty_iface.lpVtbl = &property_vtbl;
|
||||||
|
property->refs = 1;
|
||||||
|
property->object = wbem_object;
|
||||||
|
IWbemClassObject_AddRef( property->object );
|
||||||
|
property->name = SysAllocStringLen( name, SysStringLen( name ) );
|
||||||
|
*obj = &property->ISWbemProperty_iface;
|
||||||
|
TRACE( "returning iface %p\n", *obj );
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct propertyset
|
||||||
|
{
|
||||||
|
ISWbemPropertySet ISWbemPropertySet_iface;
|
||||||
|
LONG refs;
|
||||||
|
IWbemClassObject *object;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct propertyset *impl_from_ISWbemPropertySet(
|
||||||
|
ISWbemPropertySet *iface )
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD( iface, struct propertyset, ISWbemPropertySet_iface );
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI propertyset_AddRef( ISWbemPropertySet *iface )
|
||||||
|
{
|
||||||
|
struct propertyset *propertyset = impl_from_ISWbemPropertySet( iface );
|
||||||
|
return InterlockedIncrement( &propertyset->refs );
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI propertyset_Release( ISWbemPropertySet *iface )
|
||||||
|
{
|
||||||
|
struct propertyset *propertyset = impl_from_ISWbemPropertySet( iface );
|
||||||
|
LONG refs = InterlockedDecrement( &propertyset->refs );
|
||||||
|
if (!refs)
|
||||||
|
{
|
||||||
|
TRACE( "destroying %p\n", propertyset );
|
||||||
|
IWbemClassObject_Release( propertyset->object );
|
||||||
|
heap_free( propertyset );
|
||||||
|
}
|
||||||
|
return refs;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI propertyset_QueryInterface( ISWbemPropertySet *iface,
|
||||||
|
REFIID riid, void **obj )
|
||||||
|
{
|
||||||
|
struct propertyset *propertyset = impl_from_ISWbemPropertySet( iface );
|
||||||
|
|
||||||
|
TRACE( "%p %s %p\n", propertyset, debugstr_guid(riid), obj );
|
||||||
|
|
||||||
|
if (IsEqualGUID( riid, &IID_ISWbemPropertySet ) ||
|
||||||
|
IsEqualGUID( riid, &IID_IDispatch ) ||
|
||||||
|
IsEqualGUID( riid, &IID_IUnknown ))
|
||||||
|
{
|
||||||
|
*obj = iface;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
ISWbemPropertySet_AddRef( iface );
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI propertyset_GetTypeInfoCount( ISWbemPropertySet *iface, UINT *count )
|
||||||
|
{
|
||||||
|
struct propertyset *propertyset = impl_from_ISWbemPropertySet( iface );
|
||||||
|
TRACE( "%p, %p\n", propertyset, count );
|
||||||
|
*count = 1;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI propertyset_GetTypeInfo( ISWbemPropertySet *iface,
|
||||||
|
UINT index, LCID lcid, ITypeInfo **info )
|
||||||
|
{
|
||||||
|
struct propertyset *propertyset = impl_from_ISWbemPropertySet( iface );
|
||||||
|
TRACE( "%p, %u, %u, %p\n", propertyset, index, lcid, info );
|
||||||
|
|
||||||
|
return get_typeinfo( ISWbemPropertySet_tid, info );
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI propertyset_GetIDsOfNames( ISWbemPropertySet *iface, REFIID riid, LPOLESTR *names,
|
||||||
|
UINT count, LCID lcid, DISPID *dispid )
|
||||||
|
{
|
||||||
|
struct propertyset *propertyset = impl_from_ISWbemPropertySet( iface );
|
||||||
|
ITypeInfo *typeinfo;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
TRACE( "%p, %s, %p, %u, %u, %p\n", propertyset, debugstr_guid(riid), names, count, lcid, dispid );
|
||||||
|
|
||||||
|
if (!names || !count || !dispid) return E_INVALIDARG;
|
||||||
|
|
||||||
|
hr = get_typeinfo( ISWbemPropertySet_tid, &typeinfo );
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
hr = ITypeInfo_GetIDsOfNames( typeinfo, names, count, dispid );
|
||||||
|
ITypeInfo_Release( typeinfo );
|
||||||
|
}
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI propertyset_Invoke( ISWbemPropertySet *iface, DISPID member, REFIID riid,
|
||||||
|
LCID lcid, WORD flags, DISPPARAMS *params,
|
||||||
|
VARIANT *result, EXCEPINFO *excep_info, UINT *arg_err )
|
||||||
|
{
|
||||||
|
struct propertyset *propertyset = impl_from_ISWbemPropertySet( iface );
|
||||||
|
ITypeInfo *typeinfo;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
TRACE( "%p, %d, %s, %d, %d, %p, %p, %p, %p\n", propertyset, member, debugstr_guid(riid),
|
||||||
|
lcid, flags, params, result, excep_info, arg_err );
|
||||||
|
|
||||||
|
hr = get_typeinfo( ISWbemPropertySet_tid, &typeinfo );
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
hr = ITypeInfo_Invoke( typeinfo, &propertyset->ISWbemPropertySet_iface, member, flags,
|
||||||
|
params, result, excep_info, arg_err );
|
||||||
|
ITypeInfo_Release( typeinfo );
|
||||||
|
}
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI propertyset_get__NewEnum( ISWbemPropertySet *iface, IUnknown **unk )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI propertyset_Item( ISWbemPropertySet *iface, BSTR name,
|
||||||
|
LONG flags, ISWbemProperty **prop )
|
||||||
|
{
|
||||||
|
struct propertyset *propertyset = impl_from_ISWbemPropertySet( iface );
|
||||||
|
HRESULT hr;
|
||||||
|
VARIANT var;
|
||||||
|
|
||||||
|
TRACE( "%p, %s, %08x, %p", propertyset, debugstr_w(name), flags, prop );
|
||||||
|
|
||||||
|
hr = IWbemClassObject_Get( propertyset->object, name, 0, &var, NULL, NULL );
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
hr = SWbemProperty_create( propertyset->object, name, prop );
|
||||||
|
VariantClear( &var );
|
||||||
|
}
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI propertyset_get_Count( ISWbemPropertySet *iface, LONG *count )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI propertyset_Add( ISWbemPropertySet *iface, BSTR name, WbemCimtypeEnum type,
|
||||||
|
VARIANT_BOOL is_array, LONG flags, ISWbemProperty **prop )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI propertyset_Remove( ISWbemPropertySet *iface, BSTR name, LONG flags )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const ISWbemPropertySetVtbl propertyset_vtbl =
|
||||||
|
{
|
||||||
|
propertyset_QueryInterface,
|
||||||
|
propertyset_AddRef,
|
||||||
|
propertyset_Release,
|
||||||
|
propertyset_GetTypeInfoCount,
|
||||||
|
propertyset_GetTypeInfo,
|
||||||
|
propertyset_GetIDsOfNames,
|
||||||
|
propertyset_Invoke,
|
||||||
|
propertyset_get__NewEnum,
|
||||||
|
propertyset_Item,
|
||||||
|
propertyset_get_Count,
|
||||||
|
propertyset_Add,
|
||||||
|
propertyset_Remove
|
||||||
|
};
|
||||||
|
|
||||||
|
static HRESULT SWbemPropertySet_create( IWbemClassObject *wbem_object, ISWbemPropertySet **obj )
|
||||||
|
{
|
||||||
|
struct propertyset *propertyset;
|
||||||
|
|
||||||
|
TRACE( "%p, %p\n", obj, wbem_object );
|
||||||
|
|
||||||
|
if (!(propertyset = heap_alloc( sizeof(*propertyset) ))) return E_OUTOFMEMORY;
|
||||||
|
propertyset->ISWbemPropertySet_iface.lpVtbl = &propertyset_vtbl;
|
||||||
|
propertyset->refs = 1;
|
||||||
|
propertyset->object = wbem_object;
|
||||||
|
IWbemClassObject_AddRef( propertyset->object );
|
||||||
|
*obj = &propertyset->ISWbemPropertySet_iface;
|
||||||
|
|
||||||
|
TRACE( "returning iface %p\n", *obj );
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
#define DISPID_BASE 0x1800000
|
#define DISPID_BASE 0x1800000
|
||||||
|
|
||||||
struct member
|
struct member
|
||||||
|
@ -175,8 +566,6 @@ static HRESULT WINAPI object_GetTypeInfo(
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DISPID_BASE 0x1800000
|
|
||||||
|
|
||||||
static HRESULT init_members( struct object *object )
|
static HRESULT init_members( struct object *object )
|
||||||
{
|
{
|
||||||
LONG bound, i;
|
LONG bound, i;
|
||||||
|
@ -241,6 +630,7 @@ static HRESULT WINAPI object_GetIDsOfNames(
|
||||||
struct object *object = impl_from_ISWbemObject( iface );
|
struct object *object = impl_from_ISWbemObject( iface );
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
UINT i;
|
UINT i;
|
||||||
|
ITypeInfo *typeinfo;
|
||||||
|
|
||||||
TRACE( "%p, %s, %p, %u, %u, %p\n", object, debugstr_guid(riid), names, count, lcid, dispid );
|
TRACE( "%p, %s, %p, %u, %u, %p\n", object, debugstr_guid(riid), names, count, lcid, dispid );
|
||||||
|
|
||||||
|
@ -249,6 +639,14 @@ static HRESULT WINAPI object_GetIDsOfNames(
|
||||||
hr = init_members( object );
|
hr = init_members( object );
|
||||||
if (FAILED( hr )) return hr;
|
if (FAILED( hr )) return hr;
|
||||||
|
|
||||||
|
hr = get_typeinfo( ISWbemObject_tid, &typeinfo );
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
hr = ITypeInfo_GetIDsOfNames( typeinfo, names, count, dispid );
|
||||||
|
ITypeInfo_Release( typeinfo );
|
||||||
|
}
|
||||||
|
if (SUCCEEDED(hr)) return hr;
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
if ((dispid[i] = get_member_dispid( object, names[i] )) == DISPID_UNKNOWN) break;
|
if ((dispid[i] = get_member_dispid( object, names[i] )) == DISPID_UNKNOWN) break;
|
||||||
|
@ -280,10 +678,24 @@ static HRESULT WINAPI object_Invoke(
|
||||||
{
|
{
|
||||||
struct object *object = impl_from_ISWbemObject( iface );
|
struct object *object = impl_from_ISWbemObject( iface );
|
||||||
BSTR name;
|
BSTR name;
|
||||||
|
ITypeInfo *typeinfo;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE( "%p, %x, %s, %u, %x, %p, %p, %p, %p\n", object, member, debugstr_guid(riid),
|
TRACE( "%p, %x, %s, %u, %x, %p, %p, %p, %p\n", object, member, debugstr_guid(riid),
|
||||||
lcid, flags, params, result, excep_info, arg_err );
|
lcid, flags, params, result, excep_info, arg_err );
|
||||||
|
|
||||||
|
if (member <= DISPID_BASE)
|
||||||
|
{
|
||||||
|
hr = get_typeinfo( ISWbemObject_tid, &typeinfo );
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
hr = ITypeInfo_Invoke( typeinfo, &object->ISWbemObject_iface, member, flags,
|
||||||
|
params, result, excep_info, arg_err );
|
||||||
|
ITypeInfo_Release( typeinfo );
|
||||||
|
}
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
if (flags != (DISPATCH_METHOD|DISPATCH_PROPERTYGET))
|
if (flags != (DISPATCH_METHOD|DISPATCH_PROPERTYGET))
|
||||||
{
|
{
|
||||||
FIXME( "flags %x not supported\n", flags );
|
FIXME( "flags %x not supported\n", flags );
|
||||||
|
@ -306,6 +718,265 @@ static HRESULT WINAPI object_Put_(
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_PutAsync_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
IDispatch *objWbemSink,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
IDispatch *objWbemAsyncContext )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_Delete_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_DeleteAsync_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
IDispatch *objWbemSink,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
IDispatch *objWbemAsyncContext )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_Instances_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
ISWbemObjectSet **objWbemObjectSet )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_InstancesAsync_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
IDispatch *objWbemSink,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
IDispatch *objWbemAsyncContext )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_Subclasses_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
ISWbemObjectSet **objWbemObjectSet )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_SubclassesAsync_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
IDispatch *objWbemSink,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
IDispatch *objWbemAsyncContext )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_Associators_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
BSTR strAssocClass,
|
||||||
|
BSTR strResultClass,
|
||||||
|
BSTR strResultRole,
|
||||||
|
BSTR strRole,
|
||||||
|
VARIANT_BOOL bClassesOnly,
|
||||||
|
VARIANT_BOOL bSchemaOnly,
|
||||||
|
BSTR strRequiredAssocQualifier,
|
||||||
|
BSTR strRequiredQualifier,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
ISWbemObjectSet **objWbemObjectSet )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_AssociatorsAsync_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
IDispatch *objWbemSink,
|
||||||
|
BSTR strAssocClass,
|
||||||
|
BSTR strResultClass,
|
||||||
|
BSTR strResultRole,
|
||||||
|
BSTR strRole,
|
||||||
|
VARIANT_BOOL bClassesOnly,
|
||||||
|
VARIANT_BOOL bSchemaOnly,
|
||||||
|
BSTR strRequiredAssocQualifier,
|
||||||
|
BSTR strRequiredQualifier,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
IDispatch *objWbemAsyncContext )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_References_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
BSTR strResultClass,
|
||||||
|
BSTR strRole,
|
||||||
|
VARIANT_BOOL bClassesOnly,
|
||||||
|
VARIANT_BOOL bSchemaOnly,
|
||||||
|
BSTR strRequiredQualifier,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
ISWbemObjectSet **objWbemObjectSet )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_ReferencesAsync_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
IDispatch *objWbemSink,
|
||||||
|
BSTR strResultClass,
|
||||||
|
BSTR strRole,
|
||||||
|
VARIANT_BOOL bClassesOnly,
|
||||||
|
VARIANT_BOOL bSchemaOnly,
|
||||||
|
BSTR strRequiredQualifier,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
IDispatch *objWbemAsyncContext )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_ExecMethod_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
BSTR strMethodName,
|
||||||
|
IDispatch *objWbemInParameters,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
ISWbemObject **objWbemOutParameters )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_ExecMethodAsync_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
IDispatch *objWbemSink,
|
||||||
|
BSTR strMethodName,
|
||||||
|
IDispatch *objWbemInParameters,
|
||||||
|
LONG iFlags,
|
||||||
|
IDispatch *objWbemNamedValueSet,
|
||||||
|
IDispatch *objWbemAsyncContext )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_Clone_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
ISWbemObject **objWbemObject )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_GetObjectText_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
LONG iFlags,
|
||||||
|
BSTR *strObjectText )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_SpawnDerivedClass_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
LONG iFlags,
|
||||||
|
ISWbemObject **objWbemObject )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_SpawnInstance_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
LONG iFlags,
|
||||||
|
ISWbemObject **objWbemObject )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_CompareTo_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
IDispatch *objWbemObject,
|
||||||
|
LONG iFlags,
|
||||||
|
VARIANT_BOOL *bResult )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_get_Qualifiers_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
ISWbemQualifierSet **objWbemQualifierSet )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_get_Properties_( ISWbemObject *iface, ISWbemPropertySet **prop_set )
|
||||||
|
{
|
||||||
|
struct object *object = impl_from_ISWbemObject( iface );
|
||||||
|
|
||||||
|
TRACE( "%p, %p\n", object, prop_set );
|
||||||
|
return SWbemPropertySet_create( object->object, prop_set );
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_get_Methods_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
ISWbemMethodSet **objWbemMethodSet )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_get_Derivation_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
VARIANT *strClassNameArray )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_get_Path_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
ISWbemObjectPath **objWbemObjectPath )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI object_get_Security_(
|
||||||
|
ISWbemObject *iface,
|
||||||
|
ISWbemSecurity **objWbemSecurity )
|
||||||
|
{
|
||||||
|
FIXME( "\n" );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
static const ISWbemObjectVtbl object_vtbl =
|
static const ISWbemObjectVtbl object_vtbl =
|
||||||
{
|
{
|
||||||
object_QueryInterface,
|
object_QueryInterface,
|
||||||
|
@ -315,7 +986,31 @@ static const ISWbemObjectVtbl object_vtbl =
|
||||||
object_GetTypeInfo,
|
object_GetTypeInfo,
|
||||||
object_GetIDsOfNames,
|
object_GetIDsOfNames,
|
||||||
object_Invoke,
|
object_Invoke,
|
||||||
object_Put_
|
object_Put_,
|
||||||
|
object_PutAsync_,
|
||||||
|
object_Delete_,
|
||||||
|
object_DeleteAsync_,
|
||||||
|
object_Instances_,
|
||||||
|
object_InstancesAsync_,
|
||||||
|
object_Subclasses_,
|
||||||
|
object_SubclassesAsync_,
|
||||||
|
object_Associators_,
|
||||||
|
object_AssociatorsAsync_,
|
||||||
|
object_References_,
|
||||||
|
object_ReferencesAsync_,
|
||||||
|
object_ExecMethod_,
|
||||||
|
object_ExecMethodAsync_,
|
||||||
|
object_Clone_,
|
||||||
|
object_GetObjectText_,
|
||||||
|
object_SpawnDerivedClass_,
|
||||||
|
object_SpawnInstance_,
|
||||||
|
object_CompareTo_,
|
||||||
|
object_get_Qualifiers_,
|
||||||
|
object_get_Properties_,
|
||||||
|
object_get_Methods_,
|
||||||
|
object_get_Derivation_,
|
||||||
|
object_get_Path_,
|
||||||
|
object_get_Security_
|
||||||
};
|
};
|
||||||
|
|
||||||
static HRESULT SWbemObject_create( IWbemClassObject *wbem_object, ISWbemObject **obj )
|
static HRESULT SWbemObject_create( IWbemClassObject *wbem_object, ISWbemObject **obj )
|
||||||
|
|
|
@ -42,15 +42,14 @@ WINE_DEFAULT_DEBUG_CHANNEL(wbemdisp);
|
||||||
|
|
||||||
HRESULT SWbemLocator_create(LPVOID *) DECLSPEC_HIDDEN;
|
HRESULT SWbemLocator_create(LPVOID *) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
static void *heap_alloc( size_t len ) __WINE_ALLOC_SIZE(1);
|
static inline void* __WINE_ALLOC_SIZE(1) heap_alloc(size_t size)
|
||||||
static inline void *heap_alloc( size_t len )
|
|
||||||
{
|
{
|
||||||
return HeapAlloc( GetProcessHeap(), 0, len );
|
return HeapAlloc(GetProcessHeap(), 0, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline BOOL heap_free( void *mem )
|
static inline BOOL heap_free(void *mem)
|
||||||
{
|
{
|
||||||
return HeapFree( GetProcessHeap(), 0, mem );
|
return HeapFree(GetProcessHeap(), 0, mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _WBEMDISP_PRIVATE_H_ */
|
#endif /* _WBEMDISP_PRIVATE_H_ */
|
||||||
|
|
|
@ -194,7 +194,7 @@ reactos/dll/win32/uxtheme # Forked
|
||||||
reactos/dll/win32/vbscript # Synced to WineStaging-2.9
|
reactos/dll/win32/vbscript # Synced to WineStaging-2.9
|
||||||
reactos/dll/win32/version # Synced to WineStaging-2.9
|
reactos/dll/win32/version # Synced to WineStaging-2.9
|
||||||
reactos/dll/win32/vssapi # Synced to WineStaging-1.9.11
|
reactos/dll/win32/vssapi # Synced to WineStaging-1.9.11
|
||||||
reactos/dll/win32/wbemdisp # Synced to WineStaging-2.2
|
reactos/dll/win32/wbemdisp # Synced to WineStaging-2.9
|
||||||
reactos/dll/win32/wbemprox # Synced to WineStaging-2.2
|
reactos/dll/win32/wbemprox # Synced to WineStaging-2.2
|
||||||
reactos/dll/win32/windowscodecs # Synced to WineStaging-1.9.23
|
reactos/dll/win32/windowscodecs # Synced to WineStaging-1.9.23
|
||||||
reactos/dll/win32/windowscodecsext # Synced to WineStaging-1.9.11
|
reactos/dll/win32/windowscodecsext # Synced to WineStaging-1.9.11
|
||||||
|
|
Loading…
Reference in a new issue