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 |
标头 |
|
类型库 |
|
DLL |
|
CLSID |
CLSID_SWbemObject |
IID |
IID_ISWbemObject |