描述
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表示参数设置为具有与兄弟类中另一个实例相同的键的实例。例如,假设ClassA是ClassB和ClassC的基类。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实例派生自ClassA,ClassA定义属性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。 |