ScsiPortWmiSetInstanceName-Funktion (scsiwmi.h)
Die ScsiPortWmiSetInstanceName-Routine aktualisiert die WNODE_ALL_DATA-Struktur im Anforderungskontext, um die Position und Länge eines instance Namens anzugeben.
Syntax
PWCHAR ScsiPortWmiSetInstanceName(
[in] PSCSIWMI_REQUEST_CONTEXT RequestContext,
[in] ULONG InstanceIndex,
[in] ULONG InstanceNameLength,
[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 des instance Namens angegeben werden sollen.
[in] InstanceNameLength
Gibt die Größe des instance Namens in Bytes an.
[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 dieses Element die Anzahl der Bytes des Pufferspeichers, die noch vorhanden sind.
Es gibt drei WMI-Routinen für SCSI-Ports, die einen Wert für die verfügbare Puffergröße im BufferAvail-Parameter zurückgeben:
ScsiPortWmiSetInstanceName
Der Miniporttreiber muss zuerst ScsiPortWmiSetInstanceCount aufrufen, aber nach dem Aufruf von ScsiPortWmiSetInstanceCount spielt es keine Rolle, in welcher Reihenfolge der Minidriver ScsiPortWmiSetData und ScsiPortWmiSetInstanceName aufruft. Beim Aufrufen von ScsiPortWmiSetData oder ScsiPortWmiSetInstanceName muss der Wert, der in ihrem BufferAvail-Parameter an die Routine übergeben wird, mit dem Wert übereinstimmen, der im BufferAvail-Parameter von der zuletzt als WMI-Routine bezeichneten SCSI-Port zurückgegeben wird. Angenommen, für instance ruft der Minidriver zuerst ScsiPortWmiSetInstanceCount auf, und diese Routine gibt den Wert 1.000 im BufferAvail-Parameter zurück. Als Nächstes ruft der Minidriver ScsiPortWmiSetData auf, was den Wert 500 im BufferAvail-Parameter zurückgibt. Schließlich ruft der Minidriver ScsiPortWmiSetInstanceName auf, der den Wert 200 im BufferAvail-Parameter 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 einen instance Namen der Länge InstanceNameLength 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 WNODE benötigt werden, bevor die beschreibenden Daten für die von InstanceIndex angegebene instance hinzugefügt werden. Bei der Rückgabe enthält dieses Element die Größe des gesamten WNODE, einschließlich der Daten für die neue instance.
Rückgabewert
Die ScsiPortWmiSetInstanceCount-Routine gibt einen Zeiger auf den Puffer zurück, in dem der Aufrufer den Namen des in InstanceIndex angegebenen instance speichern kann. Wenn ScsiPortWmiSetInstanceCount nicht genügend Arbeitsspeicher für den instance Namen zuweisen 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 ScsiPortWmiSetInstanceName aufgerufen wird.
Der Parameter RequestContext verweist auf eine Anforderungskontextstruktur SCSIWMI_REQUEST_CONTEXT, die Informationen enthält, die einem 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 Benutzermodusdatenverbrauchern und Kernelmodusdatenanbietern wie Treibern zu übergeben.
Für die ScsiPortWmiSetInstanceName-Routine muss die WNODE-Struktur, die im Anforderungskontext definiert ist, vom Typ WNODE_ALL_DATA sein. Dies liegt daran, dass ScsiPortWmiSetInstanceName einen instance Namensbereich für jede der Instanzen festlegen 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 verschiedene Instanzen, und ScsiPortWmiSetInstanceCount initialisiert dieses Array, sodass auf jeden Puffer mit instance Daten einzeln zugegriffen werden kann.
Der für den Anforderungskontext zugewiesene Arbeitsspeicher muss gültig bleiben, bis der Miniporttreiber ScsiPortWmiPostProcess aufgerufen hat, und ScsiPortWmiPostProcess gibt die endgültige SRB-status- und Puffergröße zurück. Wenn der SRB einen Stift verwenden kann, sollte der Arbeitsspeicher für den Anforderungskontext aus der SRB-Erweiterung zugewiesen werden. Wenn der SRB keinen Stift erstellen kann, kann der Arbeitsspeicher aus einem Stapelrahmen zugewiesen werden, der nicht aus dem Bereich herausgeht.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Desktop |
Kopfzeile | scsiwmi.h (einschließlich Miniport.h, Scsi.h) |