描述
IWbemServices.PutClass方法创建一个新类或更新现有的类。必须使用pObjectbs参数指定的类正确初始化所有必需的属性值。
用户可能不会创建名称以下划线(_)开头或结尾的类。这是为系统类保留的。
C++ 语法
HRESULT PutClass( [in] IWbemClassObject *pObject, [in] LONG lFlags, [in] IWbemContext *pCtx, [out] IWbemCallResult **ppCallResult ); |
PowerBASIC 语法
METHOD PutClass ( _ BYVAL pObject AS IWbemClassObject, _ BYVAL lFlags AS LONG, _ BYVAL pCtx AS IWbemContext, _ BYREF ppCallResult AS IWbemCallResult _ ) 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_RETURN_IMMEDIATELY |
这个标志使它成为一个半异步调用。 |
WBEM_FLAG_OWNER_UPDATE |
调用PutClass时,提供者必须指定此标志,以指示此类已更改。 |
WBEM_FLAG_UPDATE_COMPATIBLE |
如果没有派生类,并且没有该类的实例,则此标志允许更新类。它还允许在所有情况下进行更新,如果更改只是非重要限定符(例如描述限定词)。这是此调用的默认行为,用于与以前版本的Windows Management兼容。如果类具有重要限定符的实例或更改,则更新失败。 |
WBEM_FLAG_UPDATE_SAFE_MODE |
只要更改不会导致与子类的任何冲突,即使有子类也允许更新类。这个标志可以允许的更新示例是向基类中添加一个新的属性,该类不是以前在任何子类中提到的。如果类有实例,则更新失败。 |
WBEM_FLAG_UPDATE_FORCE_MODE |
当存在冲突的子类时,此标志强制更新类。如果在子类中定义了类限定符,则该标志将强制更新的示例,并且基类尝试添加与现有类定义相冲突的相同限定符。在强制模式下,通过删除子类中的冲突限定符可以解决此冲突。 |
pCtx
通常为NULL。否则,这是指向生成类实例的动态类提供者所需的IWbemContext对象的指针。必须在相关提供者的文档中指定上下文对象中的值。有关此参数的更多信息,请参阅拨打电话给WMI.
ppCallResult
如果为NULL,则不使用此参数。如果lFlags参数包含WBEM_FLAG_RETURN_IMMEDIATELY,此调用将立即返回WBEM_S_NO_ERROR。ppCallResult参数接收一个指向新的IWbemCallResult对象的指针,然后可以使用IWbemCallResult.GetCallStatus方法轮询获取结果。
返回值
此方法返回一个HRESULT,指示方法调用的状态。下表列出了HRESULT中包含的值。
失败后,您可以从COM函数GetErrorInfo获取任何可用的信息。
如果网络问题导致您失去与Windows Management的远程连接,也可能会返回COM特定的错误代码。
注意如果在客户端或提供程序使用它们时更改类定义,将导致不可预测的行为。当没有客户端或提供者当前正在使用该类时,IWbemServices.PutClass方法只能用于创建或更新类。
退货代码 |
描述 |
WBEM_E_ACCESS_DENIED |
当前用户不允许创建或修改类。 |
WBEM_E_FAILED |
这表示其他未指定的错误。 |
WBEM_E_INVALID_PARAMETER |
指定了无效参数。 |
WBEM_E_INVALID_CLASS |
指定的类无效。如果在pObjectbs参数中指定了实例对象,您将看到此错误。 |
WBEM_E_INVALID_OPERATION |
指定的类名无效。 |
WBEM_E_CLASS_HAS_CHILDREN |
试图进行一个使子类无效的更改。 |
WBEM_E_INCOMPLETE_CLASS |
类的必需属性尚未设置。 |
WBEM_E_OUT_OF_MEMORY |
没有足够的内存来完成操作。 |
WBEM_E_SHUTTING_DOWN |
Windows管理服务可能已停止并重新启动。需要新的电话ConnectServer. |
WBEM_E_TRANSPORT_FAILURE |
这表示当前进程和Windows Management之间的远程过程调用(RPC)链接失败。 |
WBEM_S_NO_ERROR |
通话成功。 |
WBEM_E_ALREADY_EXISTS |
指定了WBEM_FLAG_CREATE_ONLY标志,但该类已存在。 |
WBEM_E_NOT_FOUND |
在LFLAGS中指定了WBEM_FLAG_UPDATE_ONLY,没有找到该类。 |
要求
客户 |
需要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。 |