Partilhar via


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

O método IWbemServices::P utClassAsync cria uma nova classe ou atualiza uma existente. A classe especificada pelo parâmetro pObject deve ser inicializada corretamente com todos os valores de propriedade necessários. A chamada retorna imediatamente. Êxito ou falha é fornecido ao coletor de objeto especificado pelo parâmetro pResponseHandler .

Sintaxe

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

Parâmetros

[in] pObject

Ponteiro para o objeto que contém a definição de classe.

[in] lFlags

Um ou mais dos valores a seguir são válidos.

WBEM_FLAG_USE_AMENDED_QUALIFIERS

Se esse sinalizador estiver definido, a WMI não armazenará nenhum qualificador com o sabor alterado . Se esse sinalizador não estiver definido, supõe-se que esse objeto não esteja localizado e todos os qualificadores sejam armazenados com essa instância.

WBEM_FLAG_CREATE_OR_UPDATE

Esse sinalizador fará com que essa classe seja criada se ela não existir ou ser substituída se ela já existir.

WBEM_FLAG_UPDATE_ONLY

Atualizações uma classe existente.

WBEM_FLAG_CREATE_ONLY

Esse sinalizador destina-se apenas à criação de classe. A chamada falhará se a classe já existir.

WBEM_FLAG_SEND_STATUS

Esse sinalizador registra no Gerenciamento do Windows uma solicitação para receber relatórios de status intermediários por meio da implementação do cliente de IWbemObjectSink::SetStatus. A implementação do provedor deve dar suporte a relatórios intermediários de status para que esse sinalizador altere o comportamento.

WBEM_FLAG_OWNER_UPDATE

Os provedores de push devem especificar esse sinalizador ao chamar PutClassAsync para indicar que essa classe foi alterada.

WBEM_FLAG_UPDATE_COMPATIBLE

Esse sinalizador permite que uma classe seja atualizada se não houver classes derivadas e não houver instâncias para essa classe. Ele também permite atualizações em todos os casos se a alteração for apenas para qualificadores não importantes (por exemplo, o qualificador Descrição ). Esse é o comportamento padrão dessa chamada e é usado para compatibilidade com versões anteriores do Gerenciamento do Windows. Se a classe tiver instâncias ou alterações para qualificadores importantes, a atualização falhará.

WBEM_FLAG_UPDATE_SAFE_MODE

Esse sinalizador permite atualizações de classes mesmo que haja classes filho, desde que a alteração não cause conflitos com classes filho. Um exemplo de uma atualização que esse sinalizador permitiria seria adicionar uma nova propriedade à classe base que não foi mencionada anteriormente em nenhuma das classes filho. Se a classe tiver instâncias, a atualização falhará.

WBEM_FLAG_UPDATE_FORCE_MODE

Esse sinalizador força as atualizações de classes quando há classes filho conflitantes. Um exemplo de uma atualização que esse sinalizador forçaria seria se um qualificador de classe fosse definido em uma classe filho e a classe base tentasse adicionar o mesmo qualificador que estava em conflito com o existente. No modo de força, esse conflito seria resolvido excluindo o qualificador conflitante na classe filho.

[in] pCtx

Normalmente NULL. Caso contrário, esse é um ponteiro para um objeto IWbemContext que pode ser usado pelo provedor que está recebendo a classe solicitada. Os valores no objeto de contexto devem ser especificados na documentação do provedor em questão. Para obter mais informações sobre esse parâmetro, consulte Fazendo chamadas para WMI.

[in] pResponseHandler

Ponteiro para a implementação do chamador de IWbemObjectSink. Esse manipulador recebe o status da solicitação Put quando o status fica disponível usando o método SetStatus. Se algum código de erro for retornado, o ponteiro IWbemObjectSink fornecido não será usado. Se WBEM_S_NO_ERROR for retornado, a implementação IWbemObjectSink do usuário será chamada para indicar o resultado da operação. O Gerenciamento do Windows chama Apenas AddRef para o ponteiro nos casos em que WBEM_S_NO_ERROR retorna. Nos casos em que um código de erro retorna, a contagem de referência é a mesma que na entrada. Para obter uma explicação detalhada desse parâmetro, consulte Chamando um método.

Retornar valor

Esse método retorna um HRESULT que indica o status da chamada de método. A lista a seguir lista o valor contido em um HRESULT.

Outros códigos status ou de erro são relatados ao coletor de objetos especificado pelo parâmetro pReponseHandler.

Códigos de erro específicos de COM também podem ser retornados se problemas de rede fizerem com que você perca a conexão remota com o Gerenciamento do Windows.

Observe que, se PutInstanceAsync retornar WBEM_S_NO_ERROR, o WMI aguardará um resultado do método SetStatus do manipulador de resposta. O WMI aguarda indefinidamente em uma conexão local ou até que ocorra um tempo limite de conexão remota.

Como retornar WBEM_E_FAILED faz com que outros provedores não tenham a chance de criar a classe, ela só deve ser retornada quando o provedor de classe falhar de uma maneira que possa ter êxito posteriormente.

Nota Um comportamento imprevisível resultará se você alterar as definições de classe enquanto elas estiverem em uso por clientes ou provedores. O método IWbemServices::P utClass só deve ser usado para criar ou atualizar uma classe quando não houver clientes ou provedores atualmente usando a classe .
 

Comentários

Se vários provedores de classe forem instalados para uma classe específica, a WMI não reconhecerá qual provedor de classe é capaz de criar essa classe.

O método IWbemObjectSink::SetStatus é chamado para indicar o final do conjunto de resultados. Ele também pode ser chamado sem nenhuma chamada intervindo para IWbemObjectSink::Indique se ocorrem condições de erro.

Como o retorno de chamada pode não ser retornado no mesmo nível de autenticação exigido pelo cliente, é recomendável que você use a comunicação semissíncrona em vez de assíncrona. Se você precisar de comunicação assíncrona, consulte Chamando um método.

Para obter mais informações sobre como usar métodos de forma semissíncrona, consulte IWbemServices::P utClass e Calling a Method.

Exemplos

O exemplo de código a seguir descreve uma implementação simples 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 Valor
Cliente mínimo com suporte Windows Vista
Servidor mínimo com suporte Windows Server 2008
Plataforma de Destino Windows
Cabeçalho wbemcli.h (inclua Wbemidl.h)
Biblioteca Wbemuuid.lib
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

Confira também

Como chamar um método

Como criar uma classe

IWbemServices

IWbemServices::PutClass