PSCSIWMI_EXECUTE_METHOD Rückruffunktion (scsiwmi.h)
Die HwScsiWmiExecuteMethod-Routine eines Miniporttreibers wird aufgerufen, um eine Methode auszuführen, die einem Datenblock zugeordnet ist. Diese Routine ist optional.
Syntax
PSCSIWMI_EXECUTE_METHOD PscsiwmiExecuteMethod;
BOOLEAN PscsiwmiExecuteMethod(
[in] PVOID DeviceContext,
[in] PSCSIWMI_REQUEST_CONTEXT RequestContext,
[in] ULONG GuidIndex,
[in] ULONG InstanceIndex,
[in] ULONG MethodId,
[in] ULONG InBufferSize,
[in] ULONG OutBufferSize,
[in, out] PUCHAR Buffer
)
{...}
Parameter
[in] DeviceContext
Verweist auf den vom Miniporttreiber definierten Kontextwert, der an ScsiPortWmiDispatchFunction übergeben wurde.
[in] RequestContext
Verweist auf die SCSIWMI_REQUEST_CONTEXT Struktur, die der Miniporttreiber an ScsiPortWmiDispatchFunction übergeben hat.
[in] GuidIndex
Gibt den Datenblock anhand seines Indexes in der Liste der GUIDs in der SCSI_WMILIB_CONTEXT-Struktur an, die der Miniporttreiber an ScsiPortWmiDispatchFunction übergeben hat.
[in] InstanceIndex
Wenn der von GuidIndex angegebene Block über mehrere Instanzen verfügt, gibt InstanceIndex die instance an.
[in] MethodId
Gibt die ID der auszuführenden Methode an. Der Miniporttreiber definiert die Methoden-ID als Element in einem Datenblock.
[in] InBufferSize
Gibt die Größe der Eingabedaten in Bytes an. Wenn keine Eingabedaten vorhanden sind, ist InBufferSize 0.
[in] OutBufferSize
Gibt die Anzahl von Bytes an, die im Puffer für Ausgabedaten verfügbar sind.
[in, out] Buffer
Zeigt auf einen Puffer, der die Eingabedaten enthält und die Ausgabedaten (falls vorhanden) von der -Methode empfängt. Wenn der Puffer zu klein ist, um die gesamte Ausgabe zu empfangen, ruft der Miniporttreiber ScsiPortWmiPostProcess mit SRB_STATUS_DATA_OVERRUN und der erforderlichen Größe auf.
Rückgabewert
HwScsiWmiExecuteMethod gibt SRB_STATUS_PENDING zurück, wenn die Anforderung aussteht, oder einen Wert von nonzero SRB status, wenn die Anforderung abgeschlossen wurde. Der von dieser Routine zurückgegebene SRB-status-Wert entspricht dem wert, der an ScsiPortWmiPostProcess übergeben wurde. Obwohl der Rückgabewertdatentyp BOOLEAN ist, gibt die HwScsiWmiExecuteMethod-Routine tatsächlich einen SRB-status Wert zurück.
Hinweise
Wenn ein Miniporttreiber einen SRB empfängt, in dem der Funktionsmember auf SRB_FUNCTION_WMI festgelegt ist, ruft er ScsiPortWmiDispatchFunction mit einem Zeiger auf eine initialisierte SCSI_WMILIB_CONTEXT Struktur und MinorFunction auf Srb-WmiSubFunction> fest. Der SCSI-Porttreiber ruft die HwScsiWmiExecuteMethod-Routine des Miniporttreibers auf, wenn MinorFunction eine Anforderung zum Ausführen einer Methode angibt.
Wenn ein Miniporttreiber keine HwScsiWmiExecuteMethod-Routine implementiert, muss ExecuteWmiMethod im SCSI_WMILIB_CONTEXT der Miniporttreiber an ScsiPortWmiDispatchFunction übergeben wird, auf NULL festgelegt. In diesem Fall gibt der Porttreiber SRB_STATUS_ERROR an den Aufrufer zurück.
Wenn die Methode eine Ausgabe generiert, sollte der Miniporttreiber die Größe des Ausgabepuffers in OutBufferSize überprüfen, bevor ein Vorgang ausgeführt wird, der nebenwirkungen hat oder nicht zweimal ausgeführt werden sollte. Wenn beispielsweise eine Methode die Werte einer Gruppe von Leistungsindikatoren zurückgibt und dann die Leistungsindikatoren zurücksetzt, sollte der Miniporttreiber die Puffergröße überprüfen, bevor die Indikatoren zurückgesetzt werden. Dadurch wird sichergestellt, dass der Porttreiber die Anforderung sicher mit einem größeren Puffer erneut senden kann. Wenn der Puffer zu klein ist, sollte der Miniporttreiber ScsiPortWmiPostProcess mit SRB_STATUS_DATA_OVERRUN und der Größe des Ausgabepuffers aufrufen, die zum Erfüllen der Anforderung erforderlich ist.
Der Miniporttreiber führt die -Methode aus und schreibt die Ausgabe (falls vorhanden) in den Puffer. Vor der Rückgabe von HwScsiWmiExecuteMethod ruft der Miniporttreiber ScsiPortWmiPostProcess mit einem entsprechenden SrbStatus-Wert und der Anzahl der im Ausgabepuffer verwendeten Bytes auf.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Desktop |
Kopfzeile | scsiwmi.h (schließen Sie Scsiwmi.h ein) |