Método IWbemServices::P utClassAsync (wbemcli.h)

El método IWbemServices::P utClassAsync crea una nueva clase o actualiza una existente. La clase especificada por el parámetro pObject debe inicializarse correctamente con todos los valores de propiedad necesarios. La llamada devuelve inmediatamente. Se proporciona éxito o error al receptor de objetos especificado por el parámetro pResponseHandler .

Sintaxis

HRESULT PutClassAsync(
  [in] IWbemClassObject *pObject,
  [in] long             lFlags,
  [in] IWbemContext     *pCtx,
  [in] IWbemObjectSink  *pResponseHandler
);

Parámetros

[in] pObject

Puntero al objeto que contiene la definición de clase.

[in] lFlags

Uno o varios de los valores siguientes son válidos.

WBEM_FLAG_USE_AMENDED_QUALIFIERS

Si se establece esta marca, WMI no almacena ningún calificador con el sabor modificado . Si no se establece esta marca, se supone que este objeto no está localizado y todos los calificadores se almacenan con esta instancia.

WBEM_FLAG_CREATE_OR_UPDATE

Esta marca hace que esta clase se cree si no existe o se sobrescribe si ya existe.

WBEM_FLAG_UPDATE_ONLY

Novedades una clase existente.

WBEM_FLAG_CREATE_ONLY

Esta marca es solo para la creación de clases. Se produce un error en la llamada si la clase ya existe.

WBEM_FLAG_SEND_STATUS

Esta marca registra con Administración de Windows una solicitud para recibir informes de estado intermedios a través de la implementación del cliente de IWbemObjectSink::SetStatus. La implementación del proveedor debe admitir informes de estado intermedios para que esta marca cambie el comportamiento.

WBEM_FLAG_OWNER_UPDATE

Los proveedores de inserción deben especificar esta marca al llamar a PutClassAsync para indicar que esta clase ha cambiado.

WBEM_FLAG_UPDATE_COMPATIBLE

Esta marca permite actualizar una clase si no hay ninguna clase derivada y no hay ninguna instancia de esa clase. También permite actualizaciones en todos los casos si el cambio es solo para calificadores no importantes (por ejemplo, el calificador Description ). Este es el comportamiento predeterminado de esta llamada y se usa para la compatibilidad con versiones anteriores de administración de Windows. Si la clase tiene instancias o los cambios son en calificadores importantes, se produce un error en la actualización.

WBEM_FLAG_UPDATE_SAFE_MODE

Esta marca permite actualizaciones de clases incluso si hay clases secundarias, siempre y cuando el cambio no cause conflictos con las clases secundarias. Un ejemplo de una actualización de esta marca permitiría agregar una nueva propiedad a la clase base que no se mencionó anteriormente en ninguna de las clases secundarias. Si la clase tiene instancias, se produce un error en la actualización.

WBEM_FLAG_UPDATE_FORCE_MODE

Esta marca fuerza la actualización de las clases cuando existen clases secundarias en conflicto. Un ejemplo de una actualización de esta marca forzaría si se definiese un calificador de clase en una clase secundaria y la clase base intentó agregar el mismo calificador que entraba en conflicto con el existente. En el modo de fuerza, este conflicto se resolvería mediante la eliminación del calificador en conflicto en la clase secundaria.

[in] pCtx

Normalmente NULL. De lo contrario, se trata de un puntero a un objeto IWbemContext que el proveedor que recibe la clase solicitada puede usar. Los valores del objeto de contexto deben especificarse en la documentación del proveedor en cuestión. Para obtener más información sobre este parámetro, vea Realizar llamadas a WMI.

[in] pResponseHandler

Puntero a la implementación del autor de la llamada de IWbemObjectSink. Este controlador recibe el estado de la solicitud Put cuando el estado está disponible mediante el método SetStatus . Si se devuelve algún código de error, no se usa el puntero IWbemObjectSink proporcionado. Si se devuelve WBEM_S_NO_ERROR , se llama a la implementación IWbemObjectSink del usuario para indicar el resultado de la operación. Administración de Windows solo llama a AddRef al puntero en los casos en los que WBEM_S_NO_ERROR devuelve. En los casos en los que se devuelve un código de error, el recuento de referencias es el mismo que en la entrada. Para obtener una explicación detallada de este parámetro, vea Llamar a un método.

Valor devuelto

Este método devuelve un valor HRESULT que indica el estado de la llamada al método. En la lista siguiente se muestra el valor contenido en un HRESULT.

Otros códigos de estado o error se notifican al receptor de objetos especificado por el parámetro pReponseHandler .

También se pueden devolver códigos de error específicos de COM si los problemas de red hacen que pierda la conexión remota a la administración de Windows.

Tenga en cuenta que si PutInstanceAsync devuelve WBEM_S_NO_ERROR, WMI espera un resultado del método SetStatus del controlador de respuesta. WMI espera indefinidamente en una conexión local o hasta que se agote el tiempo de espera de una conexión remota.

Dado que devolver WBEM_E_FAILED hace que otros proveedores no tengan la oportunidad de crear la clase , solo se debe devolver cuando el proveedor de clases ha producido un error de una manera que podría tener éxito más adelante.

Nota El comportamiento imprevisible se producirá si cambia las definiciones de clase mientras los clientes o proveedores los usan. El método IWbemServices::P utClass solo se debe usar para crear o actualizar una clase cuando no hay clientes o proveedores que usen actualmente la clase .
 

Comentarios

Si hay varios proveedores de clases instalados para una clase determinada, WMI no reconocerá qué proveedor de clases es capaz de crear esa clase.

Se llama al método IWbemObjectSink::SetStatus para indicar el final del conjunto de resultados. También se puede llamar sin llamadas intermedias a IWbemObjectSink::Indicar si se producen condiciones de error.

Dado que es posible que la devolución de llamada no se devuelva en el mismo nivel de autenticación que requiere el cliente, se recomienda usar la semisynchronous en lugar de la comunicación asincrónica. Si necesita comunicación asincrónica, consulte Llamar a un método.

Para obtener más información sobre el uso de métodos de forma semiincrónica, vea IWbemServices::P utClass y Llamar a un método.

Ejemplos

En el ejemplo de código siguiente se describe una implementación sencilla de PutClassAsync.

HRESULT CStdProvider::PutClassAsync( 
            /* [in] */ IWbemClassObject __RPC_FAR *pObject,
            /* [in] */ long lFlags,
            /* [in] */ IWbemContext __RPC_FAR *pCtx,
            /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
            )
{
    // You must implement the ClassIsValid function yourself to
    // determine if the class contains a valid instance
   if (ClassIsValid(lFlags, pObject))
   {
       return WBEM_S_NO_ERROR;
   }

   return WBEM_E_PROVIDER_NOT_CAPABLE;   
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Plataforma de destino Windows
Encabezado wbemcli.h (include Wbemidl.h)
Library Wbemuuid.lib
Archivo DLL Fastprox.dll; Esscli.dll; FrameDyn.dll; FrameDynOS.dll; Ntevt.dll; Stdprov.dll; Viewprov.dll; Wbemcomn.dll; Wbemcore.dll; Wbemess.dll; Wbemsvc.dll; Wmipicmp.dll; Wmidcprv.dll; Wmipjobj.dll; Wmiprvsd.dll

Consulte también

Llamada a un método

Crear una clase

IWbemServices

IWbemServices::PutClass