勇芳软件工作室.汉化:  Windows Management Instrumentation > COM API for WMI > Interfaces > IWbemServices >

PutInstance Method

Previous pageReturn to chapter overviewNext page

描述

 

IWbemServices.PutInstance方法创建或更新现有类的实例。实例写入WMI存储库。

 

C++ 语法

 

HRESULT PutInstance(

[in]   IWbemClassObject *pInst,

[in]   LONG lFlags,

[in]   IWbemContext *pCtx,

[out]  IWbemCallResult **ppCallResult

);

 

PowerBASIC 语法

 

METHOD PutInstance ( _

BYVAL pInst AS IWbemClassObject, _

BYVAL lFlags AS LONG, _

BYVAL pCtx AS IWbemContext, _

BYREF ppCallResult AS IWbemCallResult _

) AS LONG

 

参数

 

pInst

 

指向要写入的实例的指针。呼叫者在完成此呼叫时不能对参考计数作出假设。

 

lFlags

 

可以设置以下一个或多个值。

 

含义

WBEM_FLAG_CREATE_OR_UPDATE

这个标志会导致如果实例不存在或被覆盖,如果它已经存在就会被创建。

WBEM_FLAG_UPDATE_ONLY

此标志使此呼叫更新。实例必须存在才能使呼叫成功。

WBEM_FLAG_CREATE_ONLY

此标志仅用于创建。如果实例已经存在,则调用失败。

WBEM_FLAG_RETURN_IMMEDIATELY

这个标志使它成为一个半异步调用。有关详细信息,请参阅调用方法.

WBEM_FLAG_USE_AMENDED_QUALIFIERS

如果设置了此标志,则WMI不会存储具有修订风格的限定符。如果未设置此标志,则假定此对象未本地化,并且所有限定符都与此实例一起存储。

 

pCtx

 

通常为NULL,表示要更新实例中的每个属性。否则,这是指向包含有关实例的更多信息的IWbemContext对象的指针。上下文对象中的数据必须由负责实例的提供者记录。非NULL IWbemContext对象可以指示是否存在部分实例更新的支持。

 

有关如何支持完整和部分实例更新的更多信息,请参阅IWbemServices.PutInstanceAsync.有关请求完全或部分实例更新操作的详细信息,请参阅修改实例属性.

 

ppCallResult

 

如果为NULL,则不使用此参数。如果LFLAGS参数包含WBEM_FLAG_RETURN_IMMEDIATELY,此调用将立即返回WBEM_S_NO_ERROR。ppCallResult参数接收一个指向新的IWbemCallResult对象的指针,可以使用IWbemCallResult.GetCallStatus查询结果。

 

返回值

 

此方法返回一个HRESULT,指示方法调用的状态。下表列出了HRESULT中包含的值。

 

如果网络问题导致您失去与Windows Management的远程连接,也可能会返回COM特定的错误代码。

 

退货代码

描述

WBEM_E_ACCESS_DENIED

当前用户没有更新指定类的实例的权限。

WBEM_E_ALREADY_EXISTS

指定了WBEM_FLAG_CREATE_ONLY标志,但实例已存在。

WBEM_E_INVALID_CLASS

支持此实例的类无效。

WBEM_E_FAILED

这表示其他未指定的错误。

WBEM_E_ILLEGAL_NULL

为不能为NULL的属性指定了NULL值,例如由索引Not_Null限定符标记的属性。

WBEM_E_INVALID_OBJECT

指定的实例无效(例如,PutInstance,一个类调用此返回)。

WBEM_E_INVALID_PARAMETER

指定了无效参数。

WBEM_E_NOT_FOUND

指定了WBEM_FLAG_UPDATE_ONLY标志,但实例不存在。

WBEM_E_OUT_OF_MEMORY

没有足够的内存来完成操作。

WBEM_E_SHUTTING_DOWN

Windows管理服务可能已停止并重新启动。需要新的电话ConnectServer.

WBEM_E_TRANSPORT_FAILURE

这表示当前进程和Windows Management之间的远程过程调用(RPC)链接失败。

WBEM_S_NO_ERROR

通话成功。

 

备注

 

应用程序和提供者调用PutInstance创建或更新现有类的实例。根据如何设置pCtx参数,实例的某些或全部属性将被更新。有关如何支持部分实例更新的更多信息,请参阅IWbemServices.PutInstanceAsync.有关请求部分实例更新的更多信息,请参阅修改实例属性.

 

PutInstance方法仅支持创建实例和更新实例。它不支持移动实例。也就是说,调用者不能将Pinst表示参数设置为具有与兄弟类中另一个实例相同的键的实例。例如,假设ClassAClassBClassC的基类。ClassA类将KeyProp属性定义为其关键字,ClassB具有KeyProp设置为1的实例。要创建KeyProp设置为1的ClassC实例,应用程序必须首先通过调用DeleteInstance删除ClassB实例,然后使用PutInstance保存ClassC实例。

 

Pinst表示所指向的实例属于一个子类时,Windows Management将调用负责该子类派生类的所有提供者。所有这些提供者必须成功获得原始PutInstance请求成功。支持层次结构中最顶层类的提供者首先被称为。调用顺序继续是最上层的子类,并从上到下继续,直到Windows Management到达拥有pInst指向的实例的类的提供者。

 

Windows Management不会调用实例的任何子类的提供程序。因此,如果应用程序想要更改继承属性的值,则应用程序必须在子类的完整实例上调用PutInstance,而不是父类的相应实例。

 

当应用程序必须更新属于类层次结构的实例时,pInst参数必须指向包含要修改的属性的实例。也就是说,考虑属于ClassB的目标实例。ClassB实例派生自ClassAClassA定义属性PropA.如果应用程序想要在ClassB实例中更改PropA的值,则必须将pInst设置为该实例,而不是ClassA的实例。

 

不允许在抽象类的实例上调用PutInstance.

 

要求

 

客户

需要Windows Vista,Windows XP,Windows 2000 Professional,Windows NT Workstation 4.0 SP4及更高版本,Windows Me,Windows 98或Windows 95。

服务器

需要Windows Server 2008,Windows Server 2003,Windows 2000 Server或Windows NT Server 4.0 SP4及更高版本。

在Wbemcli.inc中声明。

DLL

需要Fastprox.dll。

需要Esscli.dll。

需要Framedyn.dll。

需要Ntevt.dll。

需要Stdprov.dll。

需要Viewprov.dll。

需要Wbemcomn.dll。

需要Wbemcore.dll。

需要Wbemess.dll。

需要Wbemsvc.dll。

需要Wmipicmp.dll。

需要Wmidcprv.dll。

需要Wmipjobj.dll。

需要Wmiprvsd.dll。