ScsiPortWmiSetData-Funktion (scsiwmi.h)

Die ScsiPortWmiSetData-Routine aktualisiert die WNODE_ALL_DATA Struktur innerhalb des Anforderungskontexts, um die Position und Länge der Daten für eine Instanz anzugeben.

Hinweis Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle können in Zukunft geändert oder nicht verfügbar sein. Stattdessen empfehlen wir die Verwendung der Storport-Treiber - und Storport-Miniporttreibermodelle .
 

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 Instanz angibt, für die die Position und Länge der Instanzdaten angegeben werden sollen.

[in] DataLength

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

[out] BufferAvail

Muss bei der Eingabe die Anzahl der Bytes des Pufferraums in der WNODE_ALL_DATA Struktur enthalten, die zum Beschreiben von Instanznamen und Daten verwendet werden kann. Bei der Rückgabe enthält dieses Element die Anzahl der Bytes des Pufferspeichers, die verbleiben.

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

ScsiPortWmiSetInstanceCount

ScsiPortWmiSetData

ScsiPortWmiSetInstanceName

Der Miniporttreiber muss ScsiPortWmiSetInstanceCount zuerst aufrufen, aber nachdem ScsiPortWmiSetInstanceCount aufgerufen wurde, spielt es keine Rolle, in welcher Reihenfolge der Minidriver ScsiPortWmiSetData und ScsiPortWmiSetInstanceName aufruft. Beim Aufrufen von ScsiPortWmiSetData oder ScsiPortWmiSetInstanceName muss der wert, der an die Routine in seinem BufferAvail-Parameter übergeben wird, identisch mit dem Wert sein, der im Parameter " BufferAvail " von der zuletzt als SCSI-Port-WMI-Routine zurückgegeben wird. Angenommen, der Minidriver ruft ScsiPortWmiSetInstanceCount zuerst auf, und diese Routine gibt einen Wert von 1.000 in seinem BufferAvail-Parameter zurück . Als Nächstes ruft der Minidriver ScsiPortWmiSetData auf, der einen Wert von 500 im Parameter BufferAvail zurückgibt. Schließlich ruft der Minidriver ScsiPortWmiSetInstanceName auf, der einen Wert von 200 in seinem BufferAvail-Parameter zurückgibt. Der Anfangswert von 1.000 muss an ScsiPortWmiSetData in BufferAvail übergeben werden, und der Wert von 500 muss an ScsiPortWmiSetInstanceName übergeben werden.

Wenn nicht genügend Arbeitsspeicher zur Verfügung steht, um neue Instanzdaten 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 zum Beschreiben des gesamten WNODE erforderlich sind, bevor die beschreibenden Daten für die durch InstanceIndex angegebene Instanz hinzugefügt werden. Dieses Element enthält die Größe des WNODE, einschließlich der Daten für die neue Instanz.

Rückgabewert

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

Bemerkungen

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 , WMI) zugeordnet sind. Die Anforderungskontextstruktur enthält wiederum eine der WMI-WNODE_XXX-Strukturen , die vom WMI-System verwendet werden, um Daten zwischen Benutzermodusdatenkunden und Kernelmodusdatenanbietern wie Treibern zu übergeben.

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

Der für den Anforderungskontext zugewiesene Speicher muss gültig bleiben, bis der Miniporttreiber ScsiPortWmiPostProcess aufruft, und ScsiPortWmiPostProcess gibt den endgültigen SRB-Status und die Puffergröße zurück. Wenn der SRB pendiert, sollte der Speicher für den Anforderungskontext aus der SRB-Erweiterung zugewiesen werden. Wenn der SRB nicht pendiert werden kann, kann der Speicher aus einem Stapelframe zugewiesen werden, der nicht außerhalb des Bereichs liegt.

Anforderungen

   
Zielplattform Power BI Desktop
Header scsiwmi.h (include Miniport.h, Scsi.h)

Weitere Informationen

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE