描述
IWbemServices.PutClassAsync方法创建一个新类,或更新现有类。由pObjectbs参数指定的类必须使用所有必需属性值正确初始化。电话立即返回。成功或失败提供给由pResponseHandler参数指定的对象接收器。
C++ 语法
HRESULT PutClassAsync( [in] IWbemClassObject *pObject, [in] LONG lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pResponseHandler ); |
PowerBASIC 语法
METHOD PutClassAsync ( _ BYVAL pObject AS IWbemClassObject, _ BYVAL lFlags AS LONG, _ BYVAL pCtx AS IWbemContext, _ BYVAL pResponseHandler AS IWbemObjectSink _ ) AS LONG |
参数
pObject
指向包含类定义的对象的指针。
lFlags
以下一个或多个值有效。
旗 |
含义 |
WBEM_FLAG_USE_AMENDED_QUALIFIERS |
如果设置此标志,则WMI不会存储具有修改的风味的任何限定符。如果未设置此标志,则假定此对象未本地化,并且所有限定符都与此实例一起存储。 |
WBEM_FLAG_CREATE_OR_UPDATE |
该标志引起类不存在时被创建,如果已经存在则覆盖该类。 |
WBEM_FLAG_UPDATE_ONLY |
更新现有课程。 |
WBEM_FLAG_CREATE_ONLY |
此标志仅用于创建类。如果类已经存在,则调用失败。 |
WBEM_FLAG_SEND_STATUS |
该标志通过客户端实施IWbemObjectSink.SetStatus向Windows Management注册接收中间状态报告的请求。提供商实施必须支持该标志的中间状态报告来改变行为。 |
WBEM_FLAG_OWNER_UPDATE |
调用PutClassAsync表示此类已更改时,推送提供者必须指定此标志。 |
WBEM_FLAG_UPDATE_COMPATIBLE |
如果没有派生类,并且没有该类的实例,则此标志允许更新类。它还允许在所有情况下进行更新,如果更改仅适用于非重要限定符(例如描述限定词)。这是此调用的默认行为,用于与以前版本的Windows Management兼容。如果类具有重要限定符的实例或更改,则更新失败。 |
WBEM_FLAG_UPDATE_SAFE_MODE |
这个标志允许更新类,即使有子类,只要更改不会导致与子类的任何冲突。这个标志可以允许的更新示例是向基类中添加一个新的属性,该类不是以前在任何子类中提到的。如果类有实例,则更新失败。 |
WBEM_FLAG_UPDATE_FORCE_MODE |
当存在冲突的子类时,此标志强制更新类。如果在子类中定义了类限定符,则该标志将强制更新的示例,并且基类尝试添加与现有类定义相冲突的相同限定符。在强制模式下,通过删除子类中的冲突限定符可以解决此冲突。 |
pCtx
通常为NULL。否则,这是指向生成类实例的动态类提供者所需的IWbemContext对象的指针。必须在相关提供者的文档中指定上下文对象中的值。有关此参数的更多信息,请参阅拨打电话给WMI.
pResponseHandler
指向呼叫者执行IWbemObjectSink的指针。当使用SetStatus方法使状态变得可用时,此处理程序将收到放请求的状态。如果返回任何错误代码,则不使用提供的IWbemObjectSink指针。如果返回WBEM_S_NO_ERROR,则调用用户的IWbemObjectSink实现来指示操作的结果。Windows Management仅在WBEM_S_NO_ERROR返回的情况下才调用AddRef到指针。在错误代码返回的情况下,引用计数与输入相同。有关此参数的详细说明,请参阅调用方法.
返回值
此方法返回一个HRESULT,指示方法调用的状态。下表列出了HRESULT中包含的值。
其他状态或错误代码报告给由pReponseHandler参数指定的对象宿。
如果网络问题导致您失去与Windows Management的远程连接,也可能会返回COM特定的错误代码。
请注意,如果PutInstanceAsync返回WBEM_S_NO_ERROR,则WMI等待来自响应处理程序的SetStatus方法的结果。WMI在本地连接上无限期等待,或者直到发生远程连接超时。
因为返回WBEM_E_FAILED会导致其他提供者无法创建该类,所以只有在类提供程序以后可能会成功的方式失败时才应该返回该类。
注意如果在客户端或提供程序使用它们时更改类定义,将导致不可预测的行为。只有当目前没有客户端或提供者使用该类时,IWbemServices.PutClass方法才能用于创建或更新类。
退货代码 |
描述 |
WBEM_E_ACCESS_DENIED |
当前用户没有创建类的权限。 |
WBEM_E_ALREADY_EXISTS |
指定了WBEM_FLAG_CREATE_ONLY标志,但该类已存在。 |
WBEM_E_FAILED |
这是一个未指定的失败。 |
WBEM_E_INVALID_CLASS |
指定的类无效。如果在pObjectbs参数中指定了实例对象,您将看到此错误。 |
WBEM_E_INVALID_OPERATION |
指定的类名无效。 |
WBEM_E_CLASS_HAS_CHILDREN |
试图进行一个使子类无效的更改。 |
WBEM_E_INCOMPLETE_CLASS |
类的必需属性尚未设置。 |
WBEM_E_INVALID_PARAMETER |
指定了无效参数。 |
WBEM_E_NOT_FOUND |
指定了WBEM_FLAG_UPDATE_ONLY标志,但该类不存在。 |
WBEM_E_OUT_OF_MEMORY |
没有足够的内存来完成操作。 |
WBEM_E_TRANSPORT_FAILURE |
这表示当前进程和Windows Management之间的远程过程调用(RPC)链接失败。 |
WBEM_S_NO_ERROR |
通话成功。 |
WBEM_E_NOT_FOUND |
提供者无法识别类名。 |
WBEM_E_PROVIDER_NOT_CAPABLE |
提供者无法创建或更新类。如果不需要更具体的代码,则在所有情况下返回此错误代码。 |
WBEM_E_SHUTTING_DOWN |
Windows管理服务可能已停止并重新启动。需要新的电话ConnectServer. |
备注
如果为一个特定类安装了多个类提供程序,则WMI将不会识别哪个类提供程序能够创建该类。
调用IWbemObjectSink.SetStatus方法来指示结果集的结束。如果出现错误条件,也可以调用I WbemObjectSink.Indicate的中间调用。
因为回调可能不会以与客户端所需的相同的身份验证级别返回,所以建议您使用半异步而不是异步通信。如果需要异步通信,请参阅调用方法.
有关半同步使用方法的更多信息,请参阅IWbemServices.PutClass和调用方法.
要求
客户 |
需要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。 |