Freigeben über


WMI_SET_DATAITEM_CALLBACK Rückruffunktion (wmilib.h)

Das DpWmiSetDataItem Routine ändert ein einzelnes Datenelement in einer Instanz eines Datenblocks. Diese Routine ist optional.

Syntax

WMI_SET_DATAITEM_CALLBACK WmiSetDataitemCallback;

NTSTATUS WmiSetDataitemCallback(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PIRP Irp,
  [in] ULONG GuidIndex,
  [in] ULONG InstanceIndex,
  [in] ULONG DataItemId,
  [in] ULONG BufferSize,
  [in] PUCHAR Buffer
)
{...}

Parameter

[in] DeviceObject

Zeiger auf die WDM-DEVICE_OBJECT Struktur des Treibers.

[in] Irp

Zeiger auf das IRP.

[in] GuidIndex

Gibt den Datenblock an, indem ein nullbasierter Index in der Liste der GUIDs bereitgestellt wird, die der Treiber in der WMILIB_CONTEXT Struktur an WmiSystemControlübergeben hat.

[in] InstanceIndex

Wenn der durch GuidIndex- angegebene Block mehrere Instanzen aufweist, ist InstanceIndex- ein nullbasierter Wert, der die Instanz angibt.

[in] DataItemId

Gibt die ID des festzulegenden Datenelements an.

[in] BufferSize

Gibt die Größe in Byte des Puffers bei Puffer-an.

[in] Buffer

Zeigen Sie auf einen Puffer, der den neuen Wert für das Datenelement enthält.

Rückgabewert

DpWmiSetDataItem- gibt STATUS_SUCCESS oder einen entsprechenden Fehlercode wie den folgenden zurück:

Bemerkungen

WMI ruft die DpWmiSetDataItem-Routine eines Treibers auf, nachdem der Treiber WmiSystemControl- als Reaktion auf eine IRP_MN_CHANGE_SINGLE_ITEM Anforderung aufgerufen hat.

Implementieren Sie nicht DpWmiSetDataItem-, es sei denn, Sie sind sicher, dass eine vom System bereitgestellte Benutzermoduskomponente diese Funktion erfordert. Wenn Sie eine DpWmiSetDataItem--Routine implementieren, muss der Treiber die Adresse der Routine im SetWmiDataItem Member der WMILIB_CONTEXT Struktur platzieren, die an WmiSystemControlübergeben wird. Wenn Sie keine DpWmiSetDataItem- Routine implementieren, muss der Treiber SetWmiDataItem- auf NULL-festlegen. Im letzteren Fall gibt WMI STATUS_READ_ONLY an den Aufrufer zurück.

Der Treiber ist für die Überprüfung aller Eingabeargumente verantwortlich. Insbesondere muss der Treiber Folgendes ausführen:

  • Stellen Sie sicher, dass der GuidIndex- Wert zwischen Null und GuidCount-1 liegt, basierend auf dem GuidCount Member der WMILIB_CONTEXT Struktur.
  • Stellen Sie sicher, dass der Treiber den angegebenen Datenblock zum Entfernen nicht gekennzeichnet hat. Wenn der Treiber kürzlich das WMIREG_FLAG_REMOVE_GUID-Kennzeichen in einer WMIGUIDREGINFO Struktur angegeben hat, die in einer WMILIB_CONTEXT-Struktur enthalten ist, ist es möglich, dass eine festgelegte Anforderung eintreffen kann, bevor die Entfernung erfolgt.
  • Stellen Sie sicher, dass sich der InstanceIndex- Wert im Bereich der Instanzindizes befindet, die vom Treiber für den Datenblock unterstützt werden.
  • Stellen Sie sicher, dass der DataItemId- Wert innerhalb des Bereichs von Datenelementbezeichnern liegt, die vom Treiber für den Datenblock unterstützt werden.
  • Stellen Sie sicher, dass Buffer und BufferSize ein gültiges Datenelement beschreiben und dass der Inhalt des Puffers für das Datenelement gültig ist.
  • Stellen Sie sicher, dass das angegebene Datenelement einer ist, für den der Treiber vom Aufrufer initiierte Änderungen zulässt. Mit anderen Worten, der Treiber sollte keine Änderungen an Datenelementen zulassen, die Sie als schreibgeschützt vorgesehen haben.
Gehen Sie nicht davon aus, dass der Threadkontext der initiierenden Anwendung für den Benutzermodus ist– ein Treiber auf höherer Ebene hat ihn möglicherweise geändert.

Diese Routine kann seitenfähig sein.

Weitere Informationen zum Implementieren dieser Routine finden Sie unter Aufrufen von WmiSystemControl zum Behandeln von WMI IRPs.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- wmilib.h (einschließen Wmilib.h)
IRQL- Wird bei PASSIVE_LEVEL aufgerufen.

Siehe auch

IRP_MN_CHANGE_SINGLE_ITEM

WMILIB_CONTEXT

WmiSystemControl-