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.
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 Pufferraums, die verbleiben.
Es gibt drei WMI-Portroutinen, die einen Wert für die verfügbare Puffergröße in ihrem BufferAvail Parameter zurückgeben:
ScsiPortWmiSetData-
Der Miniporttreiber muss zuerst ScsiPortWmiSetInstanceCount aufrufen, aber nachdem ScsiPortWmiSetInstanceCount aufgerufen wurde, spielt es keine Rolle, in welcher Reihenfolge der Minidriver ScsiPortWmiSetData und ScsiPortWmiSetInstanceNameaufruft. Beim Aufrufen ScsiPortWmiSetData oder ScsiPortWmiSetInstanceNamemuss der an die Routine in seinem BufferAvail Parameter übergebene Wert mit dem wert übereinstimmen, der im BufferAvail Parameter von der zuletzt als SCSI-Port-WMI-Routine zurückgegebenen Wert zurückgegeben wird. Angenommen, der Minidriver ruft 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 einen Wert von 500 im BufferAvail Parameter zurückgibt. Schließlich ruft der Minidriver ScsiPortWmiSetInstanceName auf, der einen Wert von 200 im 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 verfügbar ist, um neue Instanzendaten DataLength- Bytehinzuzufügen, wird eine Null im BufferAvail Member zurückgegeben.
[in, out] SizeNeeded
Gibt bei der Eingabe die Anzahl der Bytes an, die erforderlich sind, um die gesamte WNODE-zu beschreiben, bevor die beschreibenden Daten für die instanz hinzufügen, die durch InstanceIndex-angegeben wird. Bei Rückgabe enthält dieses Element 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 durch 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_DATAist, gibt ScsiPortWmiSetData-NULL-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 Windows Management Instrumentation (WMI) SCSI-Anforderungsblock (WMI) zugeordnet sind. Die Anforderungskontextstruktur enthält wiederum eine der WMI-WNODE_XXX Structures, die vom WMI-System verwendet wird, um Daten zwischen Consumern im Benutzermodus und Kernelmodusdatenanbietern wie Treibern zu übergeben.
Die ScsiPortWmiSetData Routine erfordert die WNODE-Struktur, die innerhalb des Anforderungskontexts vom Typ WNODE_ALL_DATAdefiniert ist. 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 enthält nach der Initialisierung 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 die endgültige SRB-Status- und Puffergröße zurückgibt. Wenn der SRB pendieren kann, sollte der Speicher für den Anforderungskontext von 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 Gültigkeitsbereichs liegt.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Desktop |
Header- | scsiwmi.h (include Miniport.h, Scsi.h) |