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

IWbemServices::P utClassAsync 方法创建新类或更新现有类。 必须使用所有必需的属性值正确初始化 pObject 参数指定的类。 调用会立即返回。 成功或失败会提供给 pResponseHandler 参数指定的对象接收器。

语法

HRESULT PutClassAsync(
  [in] IWbemClassObject *pObject,
  [in] long             lFlags,
  [in] IWbemContext     *pCtx,
  [in] IWbemObjectSink  *pResponseHandler
);

参数

[in] pObject

指向包含类定义的 对象的指针。

[in] lFlags

以下一个或多个值有效。

WBEM_FLAG_USE_AMENDED_QUALIFIERS

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

WBEM_FLAG_CREATE_OR_UPDATE

如果此类不存在,则此标志会导致创建该类;如果已存在,则将被覆盖。

WBEM_FLAG_UPDATE_ONLY

汇报现有类。

WBEM_FLAG_CREATE_ONLY

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

WBEM_FLAG_SEND_STATUS

此标志向 Windows 管理注册通过客户端实现 的 IWbemObjectSink::SetStatus 接收中间状态报告的请求。 提供程序实现必须支持此标志的中间状态报告才能更改行为。

WBEM_FLAG_OWNER_UPDATE

推送提供程序在调用 PutClassAsync 时必须指定此标志,以指示此类已更改。

WBEM_FLAG_UPDATE_COMPATIBLE

如果没有派生类且该类没有实例,则此标志允许更新类。 如果更改只是对非重要限定符 ((例如 ,描述 限定符) ),则它还允许在所有情况下进行更新。 这是此调用的默认行为,用于与以前版本的 Windows 管理兼容。 如果类有实例或对重要的限定符进行了更改,则更新会失败。

WBEM_FLAG_UPDATE_SAFE_MODE

此标志允许更新类,即使存在子类,只要更改不导致与子类发生任何冲突。 此标志允许的更新的一个示例是向任何子类中之前未提及的基类添加新属性。 如果类有实例,则更新会失败。

WBEM_FLAG_UPDATE_FORCE_MODE

当存在冲突的子类时,此标志强制更新类。 如果类限定符是在子类中定义了类限定符,并且基类尝试添加与现有限定符冲突的同一个限定符,则此标志将强制进行更新。 在强制模式下,可以通过删除子类中的冲突限定符来解决此冲突。

[in] pCtx

通常 为 NULL。 否则,这是指向 IWbemContext 对象的指针,接收所请求类的提供程序可以使用该对象。 上下文对象中的值必须在相关提供程序的文档中指定。 有关此参数的详细信息,请参阅 调用 WMI

[in] pResponseHandler

指向调用方实现 IWbemObjectSink 的指针。 使用 SetStatus 方法,当状态变为可用时,此处理程序接收 Put 请求的状态。 如果返回任何错误代码,则不使用提供的 IWbemObjectSink 指针。 如果返回 WBEM_S_NO_ERROR ,则调用用户的 IWbemObjectSink 实现来指示操作的结果。 Windows 管理仅在返回WBEM_S_NO_ERROR的情况下调用 AddRef 到指针。 在错误代码返回的情况下,引用计数与输入时相同。 有关此参数的详细说明,请参阅 调用方法

返回值

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

其他状态或错误代码将报告给 pReponseHandler 参数指定的对象接收器。

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

请注意,如果 PutInstanceAsync 返回 WBEM_S_NO_ERROR,WMI 将等待响应处理程序的 SetStatus 方法的结果。 WMI 将无限期等待本地连接或远程连接超时。

由于返回 WBEM_E_FAILED 会导致其他提供程序没有机会创建类,因此仅当类提供程序失败且以后可能成功时,才应返回该类。

注意 如果在客户端或提供程序使用类定义时更改类定义,将导致不可预知的行为。 IWbemServices::P utClass 方法仅当当前没有客户端或提供程序使用 类时,才应用于创建或更新类。
 

注解

如果为一个特定类安装了多个类提供程序,WMI 将无法识别哪个类提供程序能够创建该类。

调用 IWbemObjectSink::SetStatus 方法以指示结果集的结束。 还可以调用它,而无需干预调用 IWbemObjectSink::指示 是否发生错误条件。

由于回调可能不会在客户端所需的相同身份验证级别返回,因此建议使用半同步而不是异步通信。 如果需要异步通信,请参阅 调用方法

有关以半同步方式使用方法的详细信息,请参阅 IWbemServices::P utClass调用方法

示例

下面的代码示例描述了 PutClassAsync 的简单实现。

HRESULT CStdProvider::PutClassAsync( 
            /* [in] */ IWbemClassObject __RPC_FAR *pObject,
            /* [in] */ long lFlags,
            /* [in] */ IWbemContext __RPC_FAR *pCtx,
            /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
            )
{
    // You must implement the ClassIsValid function yourself to
    // determine if the class contains a valid instance
   if (ClassIsValid(lFlags, pObject))
   {
       return WBEM_S_NO_ERROR;
   }

   return WBEM_E_PROVIDER_NOT_CAPABLE;   
}

要求

要求
最低受支持的客户端 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

另请参阅

调用方法

创建类

IWbemServices

IWbemServices::PutClass