SWbemObject.PutAsync_ 方法

SWbemObject 的 PutAsync_ 方法以异步方式将实例或类创建或更新到 Windows Management Instrumentation (WMI)。 修改 SWbemObject 中的任何属性或方法后,可使用此方法,并且更改会写入 WMI。

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

语法

SWbemObject.PutAsync_( _
  ByVal objWbemSink, _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

parameters

objWbemSink [in]

必需。 异步接收 put 操作结果的对象接收器。

iFlags [in, 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))

使此调用被阻止,直到查询完成。

wbemFlagSendStatus (128 (0x80))

导致异步调用将状态更新发送到对象接收器的 SWbemSink.OnProgress 事件处理程序。

wbemFlagDontSendStatus (0 (0x0))

防止异步调用将状态更新发送到对象接收器的 OnProgress 事件处理程序。

wbemFlagUseAmendedQualifiers (131072 (0x20000))

使 WMI 将类修改数据与基类定义一并写入。 有关修改后的限定符的详细信息,请参阅本地化 WMI 类信息

objWbemNamedValueSet [输入参数,可选]

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

objWbemAsyncContext [in, 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)

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

wbemErrInvalidObject - 2147749908 (0x80041014)

指定的实例无效。

wbemErrInvalidParameter - 2147749896 (0x80041008)

指定的参数无效。

wbemErrNotFound - 2147749890 (0x80041002)

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

wbemErrIncompleteClass - 2147749920 (0x80041020)

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

wbemErrOutOfMemory - 2147749894 (0x80041006)

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

备注

此调用会立即返回,并且 put 操作的结果通过传递到 objWbemSink 中指定的接收器的回调来返回到调用方。 实现 objWbemSink。 OnObjectPut 方法,用于获取写入 WMI 存储库的实例或类的对象路径。 有关接收器方法的详细信息,请参阅调用方法

异步回调会使未经身份验证的用户能够向接收器提供数据。 这会给脚本和应用程序带来安全风险。 若要消除风险,请使用半同步或同步通信。 有关详细信息,请参阅调用方法

要求

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

另请参阅

SWbemObject

SWbemObjectPath.Class

SWbemProperty

SWbemQualifier