ScsiPortWmiSetData-Funktion (scsiwmi.h)

Die ScsiPortWmiSetData-Routine aktualisiert die WNODE_ALL_DATA-Struktur im Anforderungskontext, um die Position und Länge der Daten für eine instance anzugeben.

Hinweis Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle sind möglicherweise geändert oder in Zukunft nicht mehr verfügbar. Stattdessen wird empfohlen, die Modelle Storport-Treiber und Storport-Miniporttreiber zu verwenden.
 

Syntax

PVOID ScsiPortWmiSetData(
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG                    InstanceIndex,
  [in]      ULONG                    DataLength,
  [out]     PULONG                   BufferAvail,
  [in, out] PULONG                   SizeNeeded
);

Parameter

[in] RequestContext

Zeiger auf eine Struktur vom Typ SCSIWMI_REQUEST_CONTEXT , die den Anforderungskontext für einen WMI-SRB enthält.

[in] InstanceIndex

Enthält einen Index, der die instance angibt, für die die Position und Länge der instance Daten angegeben werden sollen.

[in] DataLength

Gibt die Anzahl der Daten an, die zum Beschreiben der instance erforderlich sind.

[out] BufferAvail

Muss bei der Eingabe die Anzahl der Bytes des Pufferspeichers in der WNODE_ALL_DATA-Struktur enthalten, die zum Beschreiben instance Namen und Daten verwendet werden kann. Bei der Rückgabe enthält dieser Member die Anzahl der verbleibenden Pufferspeicherplätze in Bytes.

Es gibt drei WMI-Routinen für SCSI-Ports, die einen Wert für die verfügbare Puffergröße im BufferAvail-Parameter zurückgeben:

ScsiPortWmiSetInstanceCount

ScsiPortWmiSetData

ScsiPortWmiSetInstanceName

Der Miniporttreiber muss zuerst ScsiPortWmiSetInstanceCount aufrufen, aber nachdem ScsiPortWmiSetInstanceCount aufgerufen wurde, spielt es keine Rolle, in welcher Reihenfolge der Minitreiber ScsiPortWmiSetData und ScsiPortWmiSetInstanceName aufruft. Wenn Sie entweder ScsiPortWmiSetData oder ScsiPortWmiSetInstanceName aufrufen, muss der Wert, der in ihrem BufferAvail-Parameter an die Routine übergeben wird, dem Wert entsprechen, der im BufferAvail-Parameter von der zuletzt als WMI-Routine bezeichneten SCSI-Port zurückgegeben wird. Angenommen, der Minidriver ruft für instance zuerst ScsiPortWmiSetInstanceCount auf, und diese Routine gibt den Wert 1.000 im BufferAvail-Parameter zurück. Als Nächstes ruft der Minidriver ScsiPortWmiSetData auf, der im BufferAvail-Parameter den Wert 500 zurückgibt. Schließlich ruft der Minidriver ScsiPortWmiSetInstanceName auf, der im BufferAvail-Parameter den Wert 200 zurückgibt. Der Anfangswert 1.000 muss an ScsiPortWmiSetData in BufferAvail übergeben werden, und der Wert 500 muss an ScsiPortWmiSetInstanceName übergeben werden.

Wenn nicht genügend Arbeitsspeicher verfügbar ist, um neue instance Daten der Größe DataLength Bytes hinzuzufügen, wird im BufferAvail-Element eine Null zurückgegeben.

[in, out] SizeNeeded

Gibt bei der Eingabe die Anzahl der Bytes an, die erforderlich sind, um den gesamten WNODE zu beschreiben, bevor die beschreibenden Daten für die durch InstanceIndex angegebene instance hinzugefügt werden. Bei der Rückgabe enthält dieser Member die Größe des WNODE, einschließlich der Daten für die neue instance.

Rückgabewert

Die ScsiPortWmiSetData-Routine gibt einen Zeiger auf den Puffer zurück, in dem der Aufrufer beschreibende Informationen zu den durch InstanceIndex identifizierten instance speichern kann. Wenn ScsiPortWmiSetData nicht genügend Arbeitsspeicher für die instance Daten zuordnen kann oder wenn der im Anforderungskontext enthaltene WNODE nicht vom Typ WNODE_ALL_DATA ist, gibt ScsiPortWmiSetDataNULL zurück.

Hinweise

Der Minidriver muss ScsiPortWmiSetInstanceCount aufrufen, bevor ScsiPortWmiSetData aufgerufen wird.

Der Parameter RequestContext verweist auf eine Anforderungskontextstruktur , SCSIWMI_REQUEST_CONTEXT, die Informationen enthält, die einem WMI-SCSI-Anforderungsblock ( Windows Management Instrumentation ) zugeordnet sind. Die Anforderungskontextstruktur enthält wiederum eine der WMI-WNODE_XXX-Strukturen , die vom WMI-System zum Übergeben von Daten zwischen Benutzermodusdatenconsumern und Kernelmodusdatenanbietern wie Treibern verwendet wird.

Die ScsiPortWmiSetData-Routine erfordert, dass die im Anforderungskontext definierte WNODE-Struktur vom Typ WNODE_ALL_DATA ist. Dies liegt daran, dass ScsiPortWmiSetData den Speicherort und die Länge der Datenpuffer für jede der Instanzen angeben kann, die einem WMI-Datenblock zugeordnet sind. Im Gegensatz zur WNODE_SINGLE_INSTANCE-Struktur, die Informationen zu einem einzelnen instance enthält, enthält die WNODE_ALL_DATA-Struktur ein Array von Zeigern auf Pufferbereiche für mehrere Instanzen, und ScsiPortWmiSetData verwendet den Parameter InstanceIndex als Index in diesem Array, um das entsprechende Arrayelement für eine bestimmte instance zu initialisieren. Jedes Arrayelement enthält nach der Initialisierung die Größe und Position eines Pufferbereichs für eine instance.

Der für den Anforderungskontext zugeordnete Arbeitsspeicher muss gültig bleiben, bis der Miniporttreiber ScsiPortWmiPostProcess aufgerufen hat und ScsiPortWmiPostProcess die endgültige SRB-status- und Puffergröße zurückgibt. Wenn der SRB einen Stift verwenden kann, sollte der Arbeitsspeicher für den Anforderungskontext von der SRB-Erweiterung zugewiesen werden. Wenn der SRB keine Stifte erstellen kann, kann der Speicher aus einem Stapelframe zugeordnet werden, der nicht den Gültigkeitsbereich sprengt.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile scsiwmi.h (einschließlich Miniport.h, Scsi.h)

Weitere Informationen

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE