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.
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. |