Freigeben über


IWbemServices::P utClassAsync-Methode (wbemcli.h)

Die IWbemServices::P utClassAsync-Methode erstellt eine neue Klasse oder aktualisiert eine vorhandene Klasse. Die vom pObject-Parameter angegebene Klasse muss ordnungsgemäß mit allen erforderlichen Eigenschaftswerten initialisiert werden. Der Aufruf wird sofort zurückgegeben. Erfolg oder Fehler werden für die Objektsenke angegeben, die durch den pResponseHandler-Parameter angegeben wird.

Syntax

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

Parameter

[in] pObject

Zeiger auf das Objekt, das die Klassendefinition enthält.

[in] lFlags

Mindestens einer der folgenden Werte ist gültig.

WBEM_FLAG_USE_AMENDED_QUALIFIERS

Wenn dieses Flag festgelegt ist, speichert WMI keine Qualifizierer mit der geänderten Variante. Wenn dieses Flag nicht festgelegt ist, wird davon ausgegangen, dass dieses Objekt nicht lokalisiert ist und alle Qualifizierer mit diesem instance gespeichert werden.

WBEM_FLAG_CREATE_OR_UPDATE

Dieses Flag bewirkt, dass diese Klasse erstellt wird, wenn sie nicht vorhanden ist, oder wenn sie bereits vorhanden ist, überschrieben wird.

WBEM_FLAG_UPDATE_ONLY

Updates einer vorhandenen Klasse.

WBEM_FLAG_CREATE_ONLY

Dieses Flag ist nur für die Klassenerstellung vorgesehen. Der Aufruf schlägt fehl, wenn die Klasse bereits vorhanden ist.

WBEM_FLAG_SEND_STATUS

Dieses Flag registriert bei der Windows-Verwaltung eine Anforderung zum Empfangen von zwischengeschalteten status Berichten über die Clientimplementierung von IWbemObjectSink::SetStatus. Die Anbieterimplementierung muss die Berichterstellung für zwischengeschaltete status unterstützen, damit dieses Flag das Verhalten ändern kann.

WBEM_FLAG_OWNER_UPDATE

Pushanbieter müssen dieses Flag beim Aufrufen von PutClassAsync angeben, um anzugeben, dass sich diese Klasse geändert hat.

WBEM_FLAG_UPDATE_COMPATIBLE

Dieses Flag ermöglicht es, eine Klasse zu aktualisieren, wenn keine abgeleiteten Klassen vorhanden sind und keine Instanzen für diese Klasse vorhanden sind. Es lässt auch Updates in allen Fällen zu, wenn die Änderung nur auf nicht wichtige Qualifizierer (z. B. den Beschreibungsqualifizierer) erfolgt. Dies ist das Standardverhalten für diesen Aufruf und wird aus Gründen der Kompatibilität mit früheren Versionen der Windows-Verwaltung verwendet. Wenn die Klasse über Instanzen verfügt oder Änderungen an wichtigen Qualifizierern vorgenommen werden, schlägt die Aktualisierung fehl.

WBEM_FLAG_UPDATE_SAFE_MODE

Dieses Flag ermöglicht Updates von Klassen, auch wenn untergeordnete Klassen vorhanden sind, solange die Änderung keine Konflikte mit untergeordneten Klassen verursacht. Ein Beispiel für eine Aktualisierung, die dieses Flag zulassen würde, wäre das Hinzufügen einer neuen Eigenschaft zur Basisklasse, die zuvor in keiner der untergeordneten Klassen erwähnt wurde. Wenn die Klasse über Instanzen verfügt, ist die Aktualisierung nicht erfolgreich.

WBEM_FLAG_UPDATE_FORCE_MODE

Dieses Flag erzwingt Aktualisierungen von Klassen, wenn in Konflikt stehende untergeordnete Klassen vorhanden sind. Ein Beispiel für ein Update, das dieses Flag erzwingen würde, wäre, wenn ein Klassenqualifizierer in einer untergeordneten Klasse definiert wurde und die Basisklasse versucht, denselben Qualifizierer hinzuzufügen, der mit dem vorhandenen in Konflikt stand. Im Erzwingungsmodus würde dieser Konflikt behoben, indem der konfliktierende Qualifizierer in der untergeordneten Klasse gelöscht wird.

[in] pCtx

Normalerweise NULL. Andernfalls ist dies ein Zeiger auf ein IWbemContext-Objekt , das von dem Anbieter verwendet werden kann, der die angeforderte Klasse empfängt. Die Werte im Kontextobjekt müssen in der Dokumentation für den betreffenden Anbieter angegeben werden. Weitere Informationen zu diesem Parameter finden Sie unter Tätigen von Aufrufen von WMI.

[in] pResponseHandler

Zeiger auf die Implementierung von IWbemObjectSink durch den Aufrufer. Dieser Handler empfängt die status der Put-Anforderung, wenn der status mithilfe der SetStatus-Methode verfügbar wird. Wenn Fehlercode zurückgegeben wird, wird der angegebene IWbemObjectSink-Zeiger nicht verwendet. Wenn WBEM_S_NO_ERROR zurückgegeben wird, wird die IWbemObjectSink-Implementierung des Benutzers aufgerufen, um das Ergebnis des Vorgangs anzugeben. Die Windows-Verwaltung ruft AddRef nur in den Fällen auf, in denen WBEM_S_NO_ERROR zurückgegeben wird. In Fällen, in denen ein Fehlercode zurückgegeben wird, ist die Verweisanzahl identisch mit der beim Eintrag. Eine ausführliche Erläuterung zu diesem Parameter finden Sie unter Aufrufen einer Methode.

Rückgabewert

Diese Methode gibt ein HRESULT zurück, das den Status des Methodenaufrufs angibt. Die folgende Liste listet den Wert auf, der in einem HRESULT enthalten ist.

Andere status- oder Fehlercodes werden an die Objektsenke gemeldet, die durch den pReponseHandler-Parameter angegeben wird.

COM-spezifische Fehlercodes können auch zurückgegeben werden, wenn Netzwerkprobleme dazu führen, dass die Remoteverbindung mit der Windows-Verwaltung verloren geht.

Beachten Sie, dass WMI auf ein Ergebnis der SetStatus-Methode des Antworthandlers wartet, wenn PutInstanceAsyncWBEM_S_NO_ERROR zurückgibt. WMI wartet auf unbegrenzte Zeit bei einer lokalen Verbindung oder bis ein Timeout der Remoteverbindung auftritt.

Da das Zurückgeben von WBEM_E_FAILED dazu führt, dass andere Anbieter keine Chance haben, die Klasse zu erstellen, sollte sie nur zurückgegeben werden, wenn der Klassenanbieter auf eine Weise fehlgeschlagen ist, die später erfolgreich ist.

Hinweis Unvorhersehbares Verhalten ergibt sich, wenn Sie Klassendefinitionen ändern, während sie von Clients oder Anbietern verwendet werden. Die IWbemServices::P utClass-Methode sollte nur verwendet werden, um eine Klasse zu erstellen oder zu aktualisieren, wenn derzeit keine Clients oder Anbieter die Klasse verwenden.
 

Hinweise

Wenn mehrere Klassenanbieter für eine bestimmte Klasse installiert sind, erkennt WMI nicht, welcher Klassenanbieter diese Klasse erstellen kann.

Die IWbemObjectSink::SetStatus-Methode wird aufgerufen, um das Ende des Resultsets anzugeben. Es kann auch ohne eingreifende Aufrufe von IWbemObjectSink::Geben Sie an, ob Fehlerbedingungen auftreten.

Da der Rückruf möglicherweise nicht auf der gleichen Authentifizierungsebene zurückgegeben wird, die der Client benötigt, wird empfohlen, die semisynchrone Kommunikation anstelle der asynchronen Kommunikation zu verwenden. Wenn Sie eine asynchrone Kommunikation benötigen, finden Sie weitere Informationen unter Aufrufen einer Methode.

Weitere Informationen zur semisynchronen Verwendung von Methoden finden Sie unter IWbemServices::P utClass und Aufrufen einer Methode.

Beispiele

Im folgenden Codebeispiel wird eine einfache Implementierung von PutClassAsync beschrieben.

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;   
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Zielplattform Windows
Kopfzeile wbemcli.h (include Wbemidl.h)
Bibliothek 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

Weitere Informationen

Aufrufen einer Methode

Erstellen einer Klasse

IWbemServices

IWbemServices::PutClass