SWbemServicesEx.PutAsync 方法

SWbemServicesEx 对象的 PutAsync 方法以异步方式将对象保存到命名空间。 成功后,此方法会将 OnCompleted 事件发送到指定为输入参数的 SWbemSink 对象。

此方法在异步模式下调用。 有关详细信息,请参阅调用方法

有关此语法的说明,请参阅脚本 API 的文档约定

语法

SWbemServicesEx.PutAsync( _
  ByVal objWbemSink, _
  ByVal ojbWbemObject, _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

parameters

ObjWbemSink

必需。 异步接收对象的对象接收器。 创建 SWbemSink 对象来接收对象。

ojbWbemObject

必需。 要放入命名空间的新对象。 这可能是新创建的对象或已修改的对象。

iFlags [optional]

此参数确定调用是创建还是更新对象,以及调用是否立即返回。 此参数可接受以下值。

wbemChangeFlagUpdateCompatible (0 (0x0))

如果没有派生类并且没有该类的实例,则允许更新类。 如果更改仅限于不重要的限定符(例如 Description 限定符),它还允许在所有情况下进行更新。 这是此调用的默认行为,用于与早期版本的 WMI 兼容。 如果类有实例,则更新会失败。

wbemChangeFlagUpdateSafeMode (32 (0x20))

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

wbemChangeFlagUpdateForceMode (64 (0x40))

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

使用强制模式更新静态类会导致删除该类的所有实例。 对提供程序类进行强制更新不会删除类的实例。

wbemChangeFlagCreateOrUpdate (0 (0x0))

如果类或实例不存在,会导致创建类或实例;如果它们已存在,则将其覆盖。

wbemChangeFlagCreateOnly (2 (0x2))

仅用于创建。 如果类或实例已存在,则调用失败。

wbemChangeFlagUpdateOnly (1 (0x1))

使此调用更新。 类或实例必须存在,这样调用才能成功。

wbemFlagReturnImmediately (16 (0x10))

使调用立即返回。

wbemFlagReturnWhenComplete (0 (0x0))

使此调用被阻止,直到查询完成为止。 此标志在同步模式下调用方法。

wbemFlagUseAmendedQualifiers (131072 (0x20000))

使 WMI 写入类修改数据和基类定义。 有关详细信息,请参阅本地化 WMI 类信息

objWbemNamedValueSet [optional]

通常,此参数未定义。 否则,该参数是一个 SWbemNamedValueSet 对象,其元素表示可供处理请求的提供程序使用的上下文信息。 支持或需要此类信息的提供程序必须记录已识别的值名称、值数据类型、允许的值和语义。

objWbemAsyncContext [optional]

这是一个 SWbemNamedValueSet 对象,它返回到对象接收器以确定原始异步调用的源。 若要使用同一对象接收器进行多个异步调用,请使用此参数。 若要使用此参数,请创建 SWbemNamedValueSet 对象,并使用 SWbemNamedValueSet.Add 方法添加一个值,该值标识即将进行的异步调用。 此 SWbemNamedValueSet 对象返回到对象接收器,并且调用的源可使用 SWbemNamedValueSet.Item 方法提取。 有关详细信息,请参阅调用方法

返回值

此方法不返回值。 如果调用成功,则提供的对象接收器的 OnObjectPut 事件将接收 SWbemObjectPath 对象,该对象包含成功提交到 WMI 的实例或类的对象路径。

错误代码

PutAsync 方法完成后,Err 对象可能包含以下列表中的错误代码之一。

wbemErrAccessDenied - 2147749891 (0x80041003)

当前用户无权更新指定类的实例。

wbemErrAlreadyExists - 2147749913 (0x80041019)

指定了 wbemChangeFlagCreateOnly 标志,但是该实例已经存在。

wbemErrFailed - 2147749889 (0x80041001)

错误。

wbemErrIllegalNull - 2147749898 (0x8004100A)

为不能为 Null 的属性指定了 Null 值。 用 Key、Indexed 或 Not_Null 限定符标记的属性就是这类属性的一个示例。

wbemErrInvalidObject - 2147749908 (0x80041014)

指定的实例无效。

wbemErrInvalidParameter - 2147749896 (0x80041008)

指定的参数无效。

wbemErrNotFound - 2147749890 (0x80041002)

指定了 wbemChangeFlagUpdateOnly 标志,但实例或类不存在。

wbemErrIncompleteClass - 2147749920 (0x80041020)

尚未完全设置类的必需属性。

wbemErrOutOfMemory - 2147749894 (0x80041006)

内存不足,无法完成此操作。

备注

此调用会立即返回,结果和状态通过传递到 objWbemSink 中指定的接收器的事件来返回到调用方。 若要在每个对象到达时对其进行处理,请创建 objWbemSink.OnObjectReady 事件子例程。 所有对象到达后完成的任何处理都在 objWbemSink.OnCompleted 事件的子例程中完成。

异步回调会使未经身份验证的用户能够向接收器提供数据。 这会给脚本和应用程序带来安全风险。 要消除这些风险,请参阅设置异步调用的安全性

要求

要求
最低受支持的客户端
Windows Vista
最低受支持的服务器
Windows Server 2008
标头
Wbemdisp.h
类型库
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_ISWbemServicesEx
IID
IID_ISWbemServicesEx