Metodo IWbemServices::P utClassAsync (wbemcli.h)
Il metodo IWbemServices::P utClassAsync crea una nuova classe o aggiorna uno esistente. La classe specificata dal parametro pObject deve essere inizializzata correttamente con tutti i valori di proprietà necessari. La chiamata restituisce immediatamente. L'esito positivo o l'errore vengono forniti al sink dell'oggetto specificato dal parametro pResponseHandler .
Sintassi
HRESULT PutClassAsync(
[in] IWbemClassObject *pObject,
[in] long lFlags,
[in] IWbemContext *pCtx,
[in] IWbemObjectSink *pResponseHandler
);
Parametri
[in] pObject
Puntatore all'oggetto contenente la definizione della classe.
[in] lFlags
Uno o più dei valori seguenti sono validi.
WBEM_FLAG_USE_AMENDED_QUALIFIERS
Se questo flag è impostato, WMI non archivia alcun qualificatore con il sapore modificato . Se questo flag non è impostato, si presuppone che questo oggetto non sia localizzato e che tutti i qualificatori vengano archiviati con questa istanza.
WBEM_FLAG_CREATE_OR_UPDATE
Questo flag causa la creazione di questa classe se non esiste o viene sovrascritto se esiste già.
WBEM_FLAG_UPDATE_ONLY
Aggiornamenti una classe esistente.
WBEM_FLAG_CREATE_ONLY
Questo flag è solo per la creazione della classe. La chiamata ha esito negativo se la classe esiste già.
WBEM_FLAG_SEND_STATUS
Questo flag registra con Windows Management una richiesta per ricevere report di stato intermedio tramite l'implementazione del client di IWbemObjectSink::SetStatus. L'implementazione del provider deve supportare la segnalazione dello stato intermedio per questo flag per modificare il comportamento.
WBEM_FLAG_OWNER_UPDATE
I provider push devono specificare questo flag quando si chiama PutClassAsync per indicare che questa classe è stata modificata.
WBEM_FLAG_UPDATE_COMPATIBLE
Questo flag consente di aggiornare una classe se non sono presenti classi derivate e non sono presenti istanze per tale classe. Consente anche gli aggiornamenti in tutti i casi se la modifica è solo per qualificatori non importanti (ad esempio, il qualificatore Descrizione ). Si tratta del comportamento predefinito per questa chiamata e viene usato per la compatibilità con le versioni precedenti di Gestione di Windows. Se la classe ha istanze o modifiche sono di qualificatori importanti, l'aggiornamento ha esito negativo.
WBEM_FLAG_UPDATE_SAFE_MODE
Questo flag consente gli aggiornamenti delle classi anche se sono presenti classi figlio, purché la modifica non causa conflitti con le classi figlio. Un esempio di aggiornamento di questo flag consente di aggiungere una nuova proprietà alla classe base non menzionata in precedenza nelle classi figlio. Se la classe ha istanze, l'aggiornamento ha esito negativo.
WBEM_FLAG_UPDATE_FORCE_MODE
Questo flag forza gli aggiornamenti delle classi quando esistono classi figlio in conflitto. Un esempio di aggiornamento di questo flag forzarebbe se un qualificatore di classe fosse definito in una classe figlio e la classe base tentò di aggiungere lo stesso qualificatore in conflitto con quello esistente. In modalità forzata, questo conflitto verrà risolto eliminando il qualificatore in conflitto nella classe figlio.
[in] pCtx
In genere NULL. In caso contrario, si tratta di un puntatore a un oggetto IWbemContext che può essere usato dal provider che riceve la classe richiesta. I valori nell'oggetto contesto devono essere specificati nella documentazione del provider in questione. Per altre informazioni su questo parametro, vedere Creazione di chiamate a WMI.
[in] pResponseHandler
Puntatore all'implementazione del chiamante di IWbemObjectSink. Questo gestore riceve lo stato della richiesta Put quando lo stato diventa disponibile usando il metodo SetStatus . Se viene restituito un codice di errore, il puntatore IWbemObjectSink specificato non viene usato. Se viene restituito WBEM_S_NO_ERROR, viene chiamata l'implementazione IWbemObjectSink dell'utente per indicare il risultato dell'operazione. Windows Management chiama solo AddRef al puntatore nei casi in cui WBEM_S_NO_ERROR restituisce. Nei casi in cui viene restituito un codice di errore, il conteggio dei riferimenti corrisponde alla voce. Per una spiegazione dettagliata di questo parametro, vedere Chiamata di un metodo.
Valore restituito
Questo metodo restituisce un valore HRESULT che indica lo stato della chiamata al metodo. L'elenco seguente elenca il valore contenuto in un HRESULT.
Altri codici di stato o errore vengono segnalati al sink di oggetti specificato dal parametro pReponseHandler .
I codici di errore specifici di COM possono essere restituiti anche se i problemi di rete causano la perdita della connessione remota a Gestione Windows.
Si noti che se PutInstanceAsync restituisce WBEM_S_NO_ERROR, WMI attende un risultato dal metodo SetStatus del gestore di risposta. WMI attende in modo indefinito una connessione locale o fino a quando non si verifica un timeout di connessione remota.
Poiché la restituzione di WBEM_E_FAILED causa che altri provider non hanno la possibilità di creare la classe, deve essere restituito solo quando il provider di classi ha avuto esito negativo in un modo che potrebbe avere esito positivo in un secondo momento.
Commenti
Se per una determinata classe vengono installati più provider di classi, WMI non riconoscerà quale provider di classi è in grado di creare tale classe.
Il metodo IWbemObjectSink::SetStatus viene chiamato per indicare la fine del set di risultati. Può anche essere chiamato senza chiamate di intervento a IWbemObjectSink::Indica se si verificano condizioni di errore.
Poiché il callback potrebbe non essere restituito allo stesso livello di autenticazione richiesto dal client, è consigliabile usare semisynchrono anziché la comunicazione asincrona. Se è necessaria la comunicazione asincrona, vedere Chiamata di un metodo.
Per altre informazioni sull'uso di metodi semisynchronously, vedere IWbemServices::P utClass e Chiamata di un metodo.
Esempio
Nell'esempio di codice seguente viene descritta una semplice implementazione di 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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista |
Server minimo supportato | Windows Server 2008 |
Piattaforma di destinazione | Windows |
Intestazione | wbemcli.h (include Wbemidl.h) |
Libreria | 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 |