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 miniport treiberdefinierten Kontextwert, der an ScsiPortWmiDispatchFunctionübergeben wird.
[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 durch GuidIndex- angegebene Block mehrere Instanzen aufweist, gibt InstanceIndex- die Instanz 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 in Byte der Eingabedaten an. Wenn keine Eingabedaten vorhanden sind, ist InBufferSize null.
[in] OutBufferSize
Gibt die Anzahl der im Puffer für Ausgabedaten verfügbaren Bytes an.
[in, out] Buffer
Verweist auf einen Puffer, der die Eingabedaten enthält, und empfängt ggf. die Ausgabedaten aus der Methode. Wenn der Puffer zu klein ist, um alle Ausgaben 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 Nichtzero-SRB-Statuswert, wenn die Anforderung abgeschlossen wurde. Der von dieser Routine zurückgegebene SRB-Statuswert entspricht dem, was an ScsiPortWmiPostProcessübergeben wurde. Obwohl der Rückgabewert-Datentyp BOOLEAN ist, gibt die HwScsiWmiExecuteMethod Routine tatsächlich einen SRB-Statuswert zurück.
Bemerkungen
Wenn ein Miniporttreiber einen SRB empfängt, in dem das Function Member auf SRB_FUNCTION_WMI festgelegt ist, ruft er ScsiPortWmiDispatchFunction mit einem Zeiger auf eine initialisierte SCSI_WMILIB_CONTEXT Struktur auf und MinorFunction auf Srb->WmiSubFunctionfestgelegt. 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 er ExecuteWmiMethod- auf NULL- im SCSI_WMILIB_CONTEXT der Miniporttreiber an ScsiPortWmiDispatchFunctionübergeben. In diesem Fall gibt der Porttreiber SRB_STATUS_ERROR an den Aufrufer zurück.
Wenn die Methode ausgabe generiert, sollte der Miniporttreiber die Größe des Ausgabepuffers in OutBufferSize überprüfen, bevor ein Vorgang ausgeführt wird, der möglicherweise Nebenwirkungen hat oder die nicht zweimal ausgeführt werden sollte. Wenn z. B. eine Methode die Werte einer Gruppe von Zählern zurückgibt und dann die Zähler zurücksetzt, sollte der Miniporttreiber die Puffergröße überprüfen, bevor die Zähler zurückgesetzt werden. Dadurch wird sichergestellt, dass der Porttreiber die Anforderung mit einem größeren Puffer sicher 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, der zum Erfüllen der Anforderung erforderlich ist.
Der Miniporttreiber führt die Methode aus und schreibt ggf. die Ausgabe in den Puffer. Vor der Rückgabe von HwScsiWmiExecuteMethodruft der Miniporttreiber ScsiPortWmiPostProcess mit einem entsprechenden SrbStatus- Wert und der Anzahl der im Ausgabepuffer verwendeten Bytes auf.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Desktop |
Header- | scsiwmi.h (include Scsiwmi.h) |