IWbemServices::P utInstance 方法 (wbemcli.h)

IWbemServices::P utInstance 方法创建或更新现有类的实例。 将该实例写入 WMI 存储库。

语法

HRESULT PutInstance(
  [in]  IWbemClassObject *pInst,
  [in]  long             lFlags,
  [in]  IWbemContext     *pCtx,
  [out] IWbemCallResult  **ppCallResult
);

参数

[in] pInst

指向要写入的实例的指针。 调用方无法在完成此调用时对引用计数做出假设。

[in] lFlags

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

WBEM_FLAG_CREATE_OR_UPDATE

如果实例不存在或覆盖实例已存在,则此标志将导致创建该实例。

WBEM_FLAG_UPDATE_ONLY

此标志会导致此调用更新。 实例必须存在,这样调用才能成功。

WBEM_FLAG_CREATE_ONLY

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

WBEM_FLAG_RETURN_IMMEDIATELY

此标志会导致这是一个半异步调用。 有关详细信息,请参阅 调用方法

WBEM_FLAG_USE_AMENDED_QUALIFIERS

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

[in] pCtx

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

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

[out] ppCallResult

如果 为 NULL,则不使用此参数。 如果 lFlags 参数包含 WBEM_FLAG_RETURN_IMMEDIATELY,则此调用会立即返回 WBEM_S_NO_ERRORppCallResult 参数随后接收指向新的 IWbemCallResult 对象的指针,该对象可通过 IWbemCallResult::GetCallStatus 轮询以获取结果。

返回值

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

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

注解

应用程序和提供程序调用 PutInstance 以创建或更新现有类的实例。 根据 pCtx 参数的设置方式,实例的某些或全部属性都会更新。 有关如何支持部分实例更新的详细信息,请参阅 IWbemServices::P utInstanceAsync。 有关请求部分实例更新的详细信息,请参阅 修改实例属性

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

pInst 指向的实例属于子类时,Windows Management 将调用负责子类派生的类的所有提供程序。 所有这些提供程序都必须成功,才能成功执行原始 PutInstance 请求。 首先调用支持层次结构中最顶端的类的提供程序。 调用顺序继续执行最顶层类的子类,并从上到下继续,直到 Windows Management 到达拥有 pInst 所指向实例的类的提供程序。

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

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

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

要求

   
最低受支持的客户端 Windows Vista
最低受支持的服务器 Windows Server 2008
目标平台 Windows
标头 wbemcli.h (包括 Wbemidl.h)
Library Wbemuuid.lib
DLL Fastprox.dll;Esscli.dll;FrameDyn.dll;FrameDynOS.dll;Ntevt.dll;Stdprov.dll;Viewprov.dll;Wbemcomn.dll;Wbemcore.dll;Wbemess.dll;Wbemsvc.dll;Wmipicmp.dll;Wmidcprv.dll;Wmipjobj.dll;Wmiprvsd.dll

另请参阅

创建实例

IWbemCallResult

IWbemServices

IWbemServices::P utInstanceAsync

检索错误代码